<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">

<channel>
	<title>INF - I'm not fool - QUE NO!!!</title>
	
	<link>http://dvst.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Wed, 01 Apr 2009 21:07:57 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain="dvst.wordpress.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
<image>
		<url>http://www.gravatar.com/blavatar/dd8bbb8101a1fa09b75f8fb20fdb86e1?s=96&amp;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>INF - I'm not fool - QUE NO!!!</title>
		<link>http://dvst.wordpress.com</link>
	</image>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Inf-ImNotFool-QueNo" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Synergy : compartiendo KM</title>
		<link>http://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/</link>
		<comments>http://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 19:09:28 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[sotd]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/?p=34</guid>
		<description><![CDATA[Hace algún tiempo ya conseguí este software en un programa de televisión que se dedicaba meramente a temas de tecnología&#8230; techtv, (en el cual trabajaba Kevin Rose (digg.com)), el canal cambio su nombre a g4 desde hace bastante tiempo. Empezaré diciendo que es (que hace) y que no es (que no hace  ) el [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=34&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hace algún tiempo ya conseguí este software en un programa de televisión que se dedicaba meramente a temas de tecnología&#8230; <em>techtv</em>, (en el cual trabajaba Kevin Rose (<a href="http://digg.com" target="_blank">digg.com</a>)), el canal cambio su nombre a g4 desde hace bastante tiempo. Empezaré diciendo que es (que hace) y que no es (que no hace <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) el programita.</p>
<p><strong>¿Que es synergy?</strong></p>
<p>Synergy es un software cliente-servidor multiplataforma que nos permite compartir el teclado, ratón y portapapeles (casi) en múltiples computadoras, por ejemplo, tengo un equipo con Windows, otro con Linux y ademas mi laptop, yo puedo instalar el servidor de Synergy (es el mismo paquete que el cliente) en el equipo con Linux y los clientes en el Windows y mi laptop, entonces&#8230; una vez configurado uso el teclado y ratón de mi equipo con Linux y al pasar el ratón al limite izquierdo de la pantalla automáticamente se pasa al extremo derecho del equipo con Windows, con la laptop similar, al llegar al limite derecho de mi equipo con Linux se pasa a la izquierda de la laptop. lo del casi-portapapeles es porque solo soporta textos cortos (es mi experiencia) y a veces me ha pasado que devuelve letras chinas (o japonesas, u otra parecida ( no he visto suficiente <a href="http://en.wikipedia.org/wiki/Death_note" target="_blank">anime</a>)).</p>
<p>Quizá para algunos esta herramienta sea inútil, pero en mi caso y algunos compañeros de trabajo (del actual y el anterior) nos ha sido de gran ayuda ya que usamos muchas maquinas (algunas con Windows, otras laptops, la del día a día (en caso de duda&#8230; Debian <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), etc.).</p>
<p>He preparado unas imágenes que permitirán entender mas rápidamente que es y como se comporta.</p>
<div id="attachment_49" class="wp-caption alignnone" style="width: 480px"><img class="size-full wp-image-49" title="soho" src="http://dvst.files.wordpress.com/2009/03/soho21.png?w=470&#038;h=314" alt="Equipo linux y windows compartiendo teclado y mouse" width="470" height="314" /><p class="wp-caption-text">Equipo Linux y Windows compartiendo teclado y mouse</p></div>
<p><strong>¿Que </strong><strong>*NO* es synergy ?</strong></p>
<p>Synergy NO funciona como un KVM (hardware para compartir entre diferentes equipos un mismo teclado/monitor/ratón, el cual trabaja con un solo monitor y uno cambia el equipo a trabajar por medio de unos switches , algo parecido a esto es el software <a href="http://en.wikipedia.org/wiki/Vnc" target="_blank">VNC</a>. La arquitectura es como se muestra a continuación.<strong><br />
</strong></p>
<p><strong></strong></p>
<div id="attachment_50" class="wp-caption alignnone" style="width: 480px"><strong><strong><img class="size-full wp-image-50" title="kvm_dot1" src="http://dvst.files.wordpress.com/2009/03/kvm_dot1.png?w=470&#038;h=399" alt="kvm - keyboard, video y mouse" width="470" height="399" /></strong></strong><p class="wp-caption-text">kvm - keyboard, video y mouse</p></div>
<p><strong></strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p>Otro caso que puede tender a confundir es el hecho de usar dos monitores en el mismo equipo para expandir el área visual, útil para monitorear equipos en el caso de administradores de red, o para diseñadores gráfico para ir trabajando en un lado y ver el resultado en el otro monitor, en el mundo del software libre tenemos la herramienta <a href="http://en.wikipedia.org/wiki/Xinerama" target="_blank">xinerama</a> que por medio de <a href="http://en.wikipedia.org/wiki/Xorg" target="_blank">xorg</a> hace esto, un solo equipo con la tarjeta de vídeo integrada mas una externa se pueden conectar dos monitores, o usando una laptop y conectando un monitor en la salida de vídeo.<strong><br />
</strong></p>
<p><strong></strong></p>
<div id="attachment_53" class="wp-caption alignnone" style="width: 480px"><strong><strong><img class="size-full wp-image-53" title="xinerama2" src="http://dvst.files.wordpress.com/2009/03/xinerama2.png?w=470&#038;h=352" alt="xinerama" width="470" height="352" /></strong></strong><p class="wp-caption-text">xinerama</p></div>
<p><strong>Otros ejemplos de uso.</strong></p>
<p>En una LAN muy pequeña como puede llegar ser dos equipos uno al lado de otro en una oficina o la casa se puede usar quicksynergy (nombre del paquete de debian que usa synergy de fondo) que es una interfaz gráfica para estos casos simples, pero hay ocasiones que necesitamos algo mas que un equipo junto a otro, pudiéramos encontrarnos con una mesa con 4 monitores por ejemplo, en este caso se tienen que definir todas las conexiones (ida y vuelta) de cada monitor, es decir, si digo que me permita la conexión de A -&gt; B pero no B -&gt; no dejaría devolverme. Como el gráfico a continuación.</p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><strong></strong></p>
<div id="attachment_56" class="wp-caption alignnone" style="width: 480px"><img class="size-full wp-image-56" title="fundacite1" src="http://dvst.files.wordpress.com/2009/03/fundacite1.png?w=470&#038;h=55" alt="cuatro monitores en linea" width="470" height="55" /><p class="wp-caption-text">cuatro monitores en linea</p></div>
<p>Otro caso mas complejo pudiera ser el siguiente.</p>
<div id="attachment_57" class="wp-caption alignnone" style="width: 372px"><img class="size-full wp-image-57" title="iutlv21" src="http://dvst.files.wordpress.com/2009/03/iutlv21.png?w=362&#038;h=250" alt="Esquema mas complejo de ordenacion de monitores" width="362" height="250" /><p class="wp-caption-text">Esquema mas complejo de ordenación de monitores</p></div>
<p>El cual llegué a ver alguna vez en un mueble en una pared, muchos monitores (para aquel entonces usaban synergy y tenían el poco de monitores por todos lados marcados) en esa situación el uso de synergy hubiera sido ideal.</p>
<p><strong>Notas:</strong></p>
<p>Para los gráficos usé: dia (con iconos de RIB-network)+inkscape+gimp. En otros casos use graphviz</p>
<p><strong>Enlaces de interes.</strong></p>
<p><a href="http://synergy2.sourceforge.net/" target="_blank">http://synergy2.sourceforge.net/</a></p>
<p><a href="http://quicksynergy.sourceforge.net/" target="_blank">http://quicksynergy.sourceforge.net/</a><strong><br />
</strong></p>
<p><a href="http://thiagoribeiro.wordpress.com/2008/08/18/new-network-icons-schema-to-gnome-dia/" target="_blank">http://thiagoribeiro.wordpress.com/2008/08/18/new-network-icons-schema-to-gnome-dia/</a></p>
<p><a title="Download del dia - tech tv" href="http://g4tv.com/screensavers/features/468/Sarahs-Download-of-the-Day-Synergy.html" target="_blank">http://g4tv.com/screensavers/features/468/Sarahs-Download-of-the-Day-Synergy.html</a></p>
<p><a href="http://www.graphviz.org" target="_blank">http://www.graphviz.org</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=34&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2009/03/soho21.png" medium="image">
			<media:title type="html">soho</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2009/03/kvm_dot1.png" medium="image">
			<media:title type="html">kvm_dot1</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2009/03/xinerama2.png" medium="image">
			<media:title type="html">xinerama2</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2009/03/fundacite1.png" medium="image">
			<media:title type="html">fundacite1</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2009/03/iutlv21.png" medium="image">
			<media:title type="html">iutlv21</media:title>
		</media:content>
	</item>
		<item>
		<title>Semana de trabajo interesante</title>
		<link>http://dvst.wordpress.com/2009/01/31/semana-de-trabajo-interesante/</link>
		<comments>http://dvst.wordpress.com/2009/01/31/semana-de-trabajo-interesante/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 20:47:03 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/?p=27</guid>
		<description><![CDATA[Realmente no fue esta semana sino la semana pasada, básicamente hubo muchas cosas con las que tuve que trabajar que me parecieron interesantes y entretenidas, por un lado me senté con un compañero de trabajo a configurar TORA [1] para que reconociera oracle, no compilandolo a &#8216;pata&#8217; sino descargando el binario directamente de debian, descomprimirlo, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=27&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Realmente no fue esta semana sino la semana pasada, básicamente hubo muchas cosas con las que tuve que trabajar que me parecieron interesantes y entretenidas, por un lado me senté con un compañero de trabajo a configurar <a title="tora" href="http://packages.debian.org/search?keywords=tora" target="_blank">TORA</a> [1] para que reconociera oracle, no compilandolo a &#8216;pata&#8217; sino descargando el binario directamente de debian, descomprimirlo, modificarlo, reconstruirlo e instalarlo siendo un .deb y así dpkgearlo <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Todo bien.</p>
<p>Otro de los puntos que traté en esa semana fue el uso de politicas de grupo (GPO) de LDAP para poder bloquear el uso del disco USB (pendrive) de forma centralizada (servidor LDAP) a todos los usuario del dominio, ademas de esto, poder correr un script actualizardor en todos los clientes windows sin tener que pasar maquina a maquina, esto es algo que desconocía se podía hacer, y ahora que lo sé me gusta mas aún el LDAP, y sigo leyendo mas al respecto <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Ademas con otro compeñero nos pusimos a levantar una VPN, usando un equipo como servidor web el cual publicaría contenido usando CA para cifrado de información, este servidor con algunas politicas de cortafuego para que solo haya trafico por la vpn, una buena práctica que nos tomó hasta casi la 1am, todo bien, por un momento me recordó cuando estaba con mi tesis, trabajando hasta tarde haciendo lo que me gusta.</p>
<p>Y para finalizar, el otro tema que me llamó la atención fue que de repente algunas llaves que habiamos generado usando ssh para conexiónes remotas seguras sin usar clave, empezaron a fallar, esto debido al problema con ssl que hubo en debian, a estas alturas el problema ya está solventado, me dio que pensar por un rato.</p>
<p>Acá dejo unos enlaces relacionados con los temas que comenté anteriormente, los que faltan los ire colocando poco a poco.</p>
<p>[1] http://ubuntulife.wordpress.com/2007/03/23/compilar-tora-con-soporte-de-oracle/</p>
<p>A pesar que esto es solo &#8220;un monton de caracteres&#8221;, quiero agradecer por estar ahí y compartirlos.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=27&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2009/01/31/semana-de-trabajo-interesante/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>Día de descarga de Mozilla Firefox</title>
		<link>http://dvst.wordpress.com/2008/06/16/dia-de-descarga-de-mozilla-firefox/</link>
		<comments>http://dvst.wordpress.com/2008/06/16/dia-de-descarga-de-mozilla-firefox/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 13:14:11 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[record]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/?p=26</guid>
		<description><![CDATA[Mañana será el día de descarga de Mozilla Firefox 3, para los que usan firefox como navegador web predeterminado, es hora de actualizarse, esta nueva versión trae varias mejoras, entre ellas está el hecho que no deja tanto memory leak como lo hace la versión estable hasta hoy (FF2) y otras cosas mas. Y para [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=26&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Mañana será el día de descarga de Mozilla Firefox 3, para los que usan firefox como navegador web predeterminado, es hora de actualizarse, esta nueva versión trae varias mejoras, entre ellas está el hecho que no deja tanto <a title="Fuga de memoria" href="http://es.wikipedia.org/wiki/Fuga_de_memoria" target="_blank">memory leak</a> como lo hace la versión estable hasta hoy (FF2) y otras cosas mas. Y para los que usan Opera, Safari e incluso Internet Explorer, es el momento que se den la oportunidad de conocer este navegador que lo uso para desarrollar, otros amigos lo usan para organizar sus redes sociales, otras personas para administrar el control parental y otros para otras cosas <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p><a title="D�a de descarga de firefox" href="http://www.spreadfirefox.com/es-ES/worldrecord" target="_blank">http://www.spreadfirefox.com/es-ES/worldrecord </a></p>
<p>Formen parte mañana de la descarga de Firefox 3 y así hacer un récord mundial, en Venezuela van ~6.800 personas comprometidas.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/26/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/26/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=26&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2008/06/16/dia-de-descarga-de-mozilla-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>Primeros screencast de tutoriales de Catalyst</title>
		<link>http://dvst.wordpress.com/2008/05/07/primeros-screencast-de-tutoriales-de-catalyst/</link>
		<comments>http://dvst.wordpress.com/2008/05/07/primeros-screencast-de-tutoriales-de-catalyst/#comments</comments>
		<pubDate>Wed, 07 May 2008 21:53:03 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[catalyst]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/?p=25</guid>
		<description><![CDATA[Por esta vez subo los archivos en un servidor para su descarga, ya que al subirlos a youtube perdió mucha calidad (aqui) y apenas se entiende.
He subido dos videos, ambos introductorios, el segundo abarca mas temas que el primero.
catalyst-inicio.ogg 39M

 primero verificamos que catalyst se encuentre instalado, sino lo instalamos (por: aptitude y CPAN).
Creación de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=25&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Por esta vez subo los archivos en un servidor para su descarga, ya que al subirlos a youtube perdió mucha calidad (<a href="http://www.youtube.com/watch?v=LF-_K8St-x8" target="_blank">aqui</a>) y apenas se entiende.</p>
<p>He subido dos videos, ambos introductorios, el segundo abarca mas temas que el primero.</p>
<p><a href="http://buhos.com.ve/screencasts/catalyst-inicio.ogg" target="_blank">catalyst-inicio.ogg </a>39M</p>
<ul>
<li> primero verificamos que catalyst se encuentre instalado, sino lo instalamos (por: aptitude y CPAN).</li>
<li>Creación de proyecto.</li>
<li>uso de servidor integrado para desarrollo</li>
<li>creacion de controlador.</li>
<li>creacion de accion (Local)</li>
<li>creacion de vista (TTSite)</li>
<li>Paso de variables del controlador a la vista</li>
</ul>
<p><a href="http://buhos.com.ve/screencasts/catalyst-intro.ogg" target="_blank">catalyst-intro.ogg </a> 39M</p>
<ul>
<li> Creacion de proyecto</li>
<li>uso de servidor integrado para desarrollo</li>
<li>muestra de uso de debug (terminal)</li>
<li>creacion de controlador</li>
<li>creación de accion de controlador (local,path).</li>
<li>creacion de vista (TT, TTSite)</li>
<li>paso de variables del controlador a la plantilla.</li>
<li>paso de variables por el get</li>
<li>trabajo con argumentos para ser procesados en el controlador</li>
<li>asignación de vista por defecto (es necesario al tener mas de una)</li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/25/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/25/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=25&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2008/05/07/primeros-screencast-de-tutoriales-de-catalyst/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>Catalyst, el framework web elegante.</title>
		<link>http://dvst.wordpress.com/2008/04/23/catalyst-el-framework-web-elegante/</link>
		<comments>http://dvst.wordpress.com/2008/04/23/catalyst-el-framework-web-elegante/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 18:23:43 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/?p=24</guid>
		<description><![CDATA[Justo antes de empezar a escribir este post, tenía pensado realizar una serie de screencast&#8217;s demostrativos de las tareas cotidianas que se le presenta a cualquier programador web al realizar un proyecto, algunos temas que tengo en mente ahora son:

Manejo de formularios
Abstracción de base de datos
Ajax
Autenticación / Autorización.
Reportes por PDF.
Manejo de sesiones
Depuración de la aplicación.
Documentación [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=24&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Justo antes de empezar a escribir este post, tenía pensado realizar una serie de <a href="http://es.wikipedia.org/wiki/Screencast" target="_blank">screencast</a>&#8217;s demostrativos de las tareas cotidianas que se le presenta a cualquier programador web al realizar un proyecto, algunos temas que tengo en mente ahora son:</p>
<ul>
<li>Manejo de formularios</li>
<li>Abstracción de base de datos</li>
<li>Ajax</li>
<li>Autenticación / Autorización.</li>
<li>Reportes por PDF.</li>
<li>Manejo de sesiones</li>
<li>Depuración de la aplicación.</li>
<li>Documentación del código (pod)</li>
</ul>
<p>Si se le presentan ideas, por favor hacerlas <a href="mailto:templeofdvstNOSPAN_AT_gmail_com" target="_blank">llegar</a>, y en lo posible será incluido en esta serie de videos para que sea lo mas completa posible.</p>
<p>Empecemos por lo básico para entender este post.<br />
<strong> ¿Que es un framework?</strong> un framework es un conjunto de herramientras integradas para facilitar la realización de tareas realizadas practicamente a diario.</p>
<p><strong> ¿Que es Catalyst? </strong>Catalyst es un framework web escrito usando perl, quizá una forma de asociarlo más rápido puede ser pensando en el framework web Ruby on Rails, así en este caso, Ruby es para Ruby on Rails lo que Perl es para Catalyst, es decir, Catalyst no es un lenguaje.</p>
<p>Catalyst trabaja usando la metodología de desarrollo MVC (Modelo Vistra Controlador) que lo que hace es separar el origen de información (Base de datos, RSS, LDAP, Etc.), la presentación (xml, json, html, PDF, RSS, Etc. ) y la propia lógica de programación, la cual es la encargada de procesar la información obtenida, es decir, sirve de intermediario entre la capa de Vista y Modelo, ofreciendo un código mas mantenible e incluso, tener grupos de desarrolladores/diseñadores/DBA dedicados a su tarea.</p>
<p>En este punto se podría decir que Catalyst no es mas que otro Framework web, a continuación algunas caracteristicas que hacen de Catalyst un buen framework.</p>
<ul>
<li><strong>Facilidad de instalación:</strong><br />
El medio mas fácil/comodo de realizar una instalación de Catalyst es a travez de <em>aptitude</em>, en el caso de <a href="http://www.debian.org/" target="_blank">Debian</a> o <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> se encuentra disponible con el paquete de nombre &#8216;<em>libcatalyst-perl</em>&#8216;. Siendo tan fácil como <em>aptitude install libcatalyst-perl</em> .<br />
Otra forma es por medio de <a href="http://www.cpan.org/" target="_blank">CPAN</a>, que&#8230; usando el mismo ejemplo de hace un rato: CPAN es para Perl lo que Aptitude es para dpkg (algo así, es para que agarren una idea) CPAN es un repositorio muy extenso de modulos de Perl, y al realizar una instalación por este medio, se satisfaceran las dependencias necesarias de modulos para no dejar la instalación a medias. El nombre del módulo a instalar para tener todo lo que se necesita para empezar a trabajar es Task::Catalyst, instalandose de la siguiente forma: <em>cpan Task::Catalyst</em> . Recomiendo en lo posible realizar la instalación usando los paquetes de debian, este método solo cuando sea necesario.</li>
<li><strong>uri_for (sin reglas de mod-rewrite)</strong><br />
Otra de las ventajas es que nos olvidamos de las reglas de <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" target="_blank">mod-rewrite</a> para tener una direcciones de despacho limpias, de esto se encarga Catalyst internamente, y para mantener el control de las rutas a la hora de mover el proyecto de directorio es la función uri_for, la cual se encarga de mostrar la ruta adecuada según el metodo de despacho usado, es decir, trabajar con: http://mi.dominio.com/mantenimiento/empleado/11222333/editar (Basadas en segmentos) en vez de http://mi.dominio.com/mantenimiento/empleado.cgi?cedula=11222333&amp;operacion=editar (query string). Esto a parte de ser visualmente mas limpio, intuitivo de usar, mas amigable&#8230; es mas manejable para los motores de busqueda (google,yahoo.etc) a la hora de indexar el contenido del sitio  haciendolo mas accesible (en términos de visitas) en la red.</li>
<li><strong>scripts helpers</strong><br />
Al igual que otros framework&#8217;s (no todos) catalyst trabaja con unos scripts de ayuda para crear modelos, vistas, controlladores (podemos pensar en un controlador como un conjunto de páginas), es ventajoso porque hay frameworks en los cuales uno tiene que copiar archivos y trabajar sobre estos últimos, en Catalyst no es el caso.</li>
<li><strong>Unicode</strong><br />
Catalyst tiene buen soporte para unicode (UTF8), si la intención es en algún futuro ofrecer la aplicación/página web a la mayor variedad de publico, se tiene que trabajar con unicode desde un principio, de hecho, aplicaciones desarrolladas hoy día deberían trabajar bajo esta cadena de caracteres (a nivel de servidor web, base de datos, tipo de archivo, el propio charset el archivo) para evitar los rombitos con el signo de interrogación que se puedan llegar asomar en la aplicación.</li>
<li><strong>Acciones y métodos de despacho</strong><br />
Una acción es un bloque dentro de los controladores, y no es mas que una función esperando ser disparada al reconocer una llamada por meadio del URL por cualquiera de los tipos de acciones, de los cuales tenemos los siguientes:</p>
<ul>
<li><strong>Path:</strong> Se asigna una ruta absoluta a ser reconocida en toda la aplicación, independiente del controlador donde se encuentre</li>
<li><strong>Regex, LocalRegex:</strong> Realiza correspondencias de los URL visitados según expresiones regulares (el fuerte de Perl) a nivel global y local.</li>
<li><strong>Global:</strong> Hace pasar el nombre de la acción al primer nivel (como si se tratase de un controlador)</li>
<li><strong>Local:</strong> Despacha el nombre de la acción como segundo nivel, justo despues del nombre del controlador que la mantiene.</li>
<li><strong>Chained:</strong> Esta una de las acciones mas interesantes ya que permite jugar con los segmentos del URL a ser reconocidos puesto que es una combinación de varias acciones concatenadas pero aún así cada una recibe una cantidad definida de argumentos.</li>
<li><strong>Private:</strong> no despacha por medio de URL sino funciones llamadas internamente de forma explicita y otras veces por secuencia (index,begin,auto,end,default).</li>
</ul>
</li>
<li><strong>CPAN</strong><br />
&#8220;CPAN es el lenguaje, perl es sólo la sintaxis&#8221; esto es algo que escuché (o leí) alguna vez y se me quedó grabado porque en cierta forma es así, dada la gran cantidad de módulos que se encuentran disponible en CPAN para cualquier tarea pensada, uno no tiene porque reinventar la rueda sino usar los módulos aqui disponibles para facilitar las operaciones a realizar, y gracias a la flexibilidad de uso de Catalyst, no hay inconvenientes para incorporarlos como si se tratase de un script stand-alone de perl o CGI, pero recuerden que se trata de un framework MVC, no traten mezclar arroz con mango, denle sentido al asunto de separar las capasa.
</li>
</ul>
<p>Este articulo (y el resto que estan por venir) no pretende dar a explicar cada punto sobre el uso de Catalyst ya que siempre se escapará algo, para eso use la lista de <a href="http://groups.google.co.ve/group/catalyst-es" target="_blank">Catalyst-es.</a></p>
<p>Recomendación de lectura de <a href="http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7012/lib/Catalyst.pm" target="_blank">Catalyst</a> , <a href="http://search.cpan.org/~mstrout/Catalyst-Manual-5.701004/lib/Catalyst/Manual/Intro.pod" target="_blank">Catalyst::Manual::Intro</a> , <a href="http://search.cpan.org/~mstrout/Catalyst-Manual-5.701004/lib/Catalyst/Manual/Tutorial.pod" target="_blank">Catalyst::Manual::Tutorial</a> , esta docmentación se encuentra en ingles, parte de ella ha sido traducida por mi, cuando lo tenga listo lo publicaré en castellano para llegar esta información a mas gente.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=24&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2008/04/23/catalyst-el-framework-web-elegante/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>script generador de trigger para auditoría en Postgres</title>
		<link>http://dvst.wordpress.com/2008/04/15/script-generador-de-trigger-para-auditoria-en-postgres/</link>
		<comments>http://dvst.wordpress.com/2008/04/15/script-generador-de-trigger-para-auditoria-en-postgres/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 17:43:39 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[sotd]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/?p=23</guid>
		<description><![CDATA[Al terminar de seguir estos pasos, tendremos una tabla dedicada exclusivamente para el registro de las operaciones en nuestra base de datos. Los datos a ser guardados son:

Nombre de la tabla afectada.
id registro afectado
Nombre del campo afectado.
Valor anterior del cambio.
Nuevo valor del campo.
Dirección ip del cliente que realizó el cambio.
Fecha y hora de cambio (con [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=23&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Al terminar de seguir estos pasos, tendremos una tabla dedicada exclusivamente para el registro de las operaciones en nuestra base de datos. Los datos a ser guardados son:</p>
<ul>
<li>Nombre de la tabla afectada.</li>
<li>id registro afectado</li>
<li>Nombre del campo afectado.</li>
<li>Valor anterior del cambio.</li>
<li>Nuevo valor del campo.</li>
<li>Dirección ip del cliente que realizó el cambio.</li>
<li>Fecha y hora de cambio (con huso horario, timestamptz)</li>
<li>Tipo de operación</li>
</ul>
<p>Requisito para el uso del script es tener instalado TemplateToolkit, en Debian el paquete es libtemplate-perl</p>
<p>Entonces procedemos a crear la tabla de auditoría.</p>
<p><code><br />
CREATE TABLE auditoria(<br />
id serial NOT NULL,<br />
nombre_tabla varchar,<br />
id_campo int8,<br />
nombre_campo varchar,<br />
valor_anterior varchar,<br />
valor_nuevo varchar,<br />
fecha_operacion timestamptz,<br />
tipo_operacion char(1) DEFAULT 1, -- i = insert ; u = update<br />
ip inet,<br />
CONSTRAINT auditoria_pkey PRIMARY KEY (id),<br />
CONSTRAINT auditoria_tipo_operacion_check CHECK (tipo_operacion = 'i'::bpchar OR tipo_operacion = 'u'::bpchar)<br />
)<br />
WITHOUT OIDS;<br />
ALTER TABLE auditoria OWNER TO postgres;<br />
COMMENT ON COLUMN auditoria.tipo_operacion IS 'i = insert ; u = update ';</code></p>
<p>El lenguaje usado para este trigger es <a href="http://www.postgresql.org/docs/current/static/plpgsql.html" target="_blank">pl/pgsql</a> , así que para trabajar con él debemos primero agregarlo a la base de datos. Con el front-end <a href="http://www.pgadmin.org/" target="_blank">pgadmin3</a> es mas que suficiente colocando  &#8216;plpgsql&#8217; en el campo de <em>nombre</em> de nuevo lenguaje en la base de datos a aplicar el trigger.</p>
<p>Ahora usamos el siguiente script para generar el trigger correspondiente para cada tabla a ser auditada.</p>
<p>#ARCHIVO: genera_trigger_auditoria.pl<code> #!/usr/bin/perl<br />
use Template ;<br />
$trigger		= "genera_trigger_auditoria/trigger.tt" ;<br />
$archivo_salida = $ARGV[0] . "-audit.trigger";<br />
for ( $i = 1 ; $i &lt;= $#ARGV ; $i++ ){<br />
push(@campos , $ARGV[$i]);<br />
}<br />
$variables = {<br />
tabla =&gt; $ARGV[0],<br />
campos =&gt;  \@campos<br />
};<br />
$template = Template-&gt;new();<br />
$template-&gt;process($trigger, $variables , "triggers/".$archivo_salida)<br />
|| die "Hubo un error al generar la plantilla " . $template-&gt;error() . "\n";</code></p>
<p>#genera_trigger_auditoria/trigger.tt<br />
<code><br />
BEGIN<br />
IF (TG_OP = 'DELETE') THEN<br />
RAISE EXCEPTION 'NO SE PERMITEN BORRADOS FISICOS';<br />
END IF ;<br />
IF (TG_OP = 'UPDATE') THEN<br />
[% FOREACH cp = campos %]<br />
IF (OLD.[% cp %] &lt;&gt; NEW.[% cp %]) THEN<br />
IF ('[% cp %]' = 'eliminado') THEN<br />
insert into auditoria(nombre_tabla,</code><code>id_campo,</code><code>nombre_campo,valor_anterior,valor_nuevo,ip,fecha_operacion,tipo_operacion)<br />
values( '[% tabla %]',  OLD.id, '[% cp %]', OLD.[% cp %]::int, NEW.[% cp %]::int, inet_client_addr(), current_timestamp, 'u');<br />
ELSE<br />
insert into auditoria(nombre_tabla,id_campo,nombre_campo,valor_anterior,valor_nuevo,ip,fecha_operacion,tipo_operacion)<br />
values( '[% tabla %]',  OLD.id, '[% cp %]', OLD.[% cp %], NEW.[% cp %], inet_client_addr(), current_timestamp, 'u');<br />
END IF;<br />
END IF;<br />
[% END %]<br />
return new ;<br />
END IF ;<br />
IF (TG_OP = 'INSERT') THEN<br />
[% FOREACH cp = campos %]<br />
IF (NEW.[% cp %] IS NOT null) THEN<br />
IF ('[% cp %]' = 'eliminado') THEN<br />
insert into auditoria(nombre_tabla,id_campo,nombre_campo,valor_anterior,valor_nuevo,ip,fecha_operacion,tipo_operacion)<br />
values( '[% tabla %]', NEW.id,   '[% cp %]', null, NEW.[% cp %]::int, inet_client_addr(), current_timestamp, 'i');<br />
ELSE<br />
insert into auditoria(nombre_tabla,id_campo,nombre_campo,valor_anterior,valor_nuevo,ip,fecha_operacion,tipo_operacion)<br />
values( '[% tabla %]',  NEW.id, '[% cp %]', null, NEW.[% cp %], inet_client_addr(), current_timestamp, 'i');<br />
END IF;<br />
END IF;<br />
[% END %]<br />
return new ;<br />
end IF ;<br />
END;</code></p>
<p>La sintaxis de uso es la siguiente:</p>
<p>$ perl genera_trigger_auditoria.pl NOMBRE_TABLA campo1 campo2 campoN</p>
<p>Con esto se crea un archivo con el formato &lt;triggers/NOMBRE_TABLA-audit.trigger&gt;</p>
<p>El contenido de este archivo debemos agregarlo a la lista de triggers disponibles en la base de datos, para posteriormente ser asociados a tabla/eventos. Esto lo hacemos usando pgadmin3 de la siguiente manera:</p>
<p>NOMBRE_BASE_DATOS &gt; schemas &gt; public &gt; Trigger functions</p>
<p>menú: Edit &gt; create</p>
<p>En language colocamos <em>plpgsql </em>y en la pestaña de parametros colocamos el texto generado por el script usado anteriormente.<br />
Ahora asociamos la tabla/evento al trigger, hay que hacer esto por cada tabla.<br />
NOMBRE_BASE_DATOS &gt; schemas &gt; public &gt; tables &gt; NOMBRE_TABLA  &gt; triggers</p>
<p>menú: Edit &gt; create</p>
<ul>
<li>Verificamos el la opción &#8220;row&#8221; esté marcada.</li>
<li>En el campo &#8220;trigger&#8221; asociamos el trigger recien creado.</li>
<li>Marcamos la opción para que se dispare antes (BEFORE) de realizar la sentencia.</li>
<li>Marcamos todos los eventos:  INSERT, UPDATE, DELETE.</li>
</ul>
<p>Ya con esto debería estar funcionado.</p>
<p>Si tienen alguna sugerencia de como se puede guardar un usuario enviado a nivel de aplicación, los comentarios son bien recibidos.</p>
<p>PD: El trigger evita la operación de &#8220;DELETE&#8221; pues se recomienda trabajar con borrado lógico, es decir, un campo extra boleano para cada tabla para identificar si está eliminado o no.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/23/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/23/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=23&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2008/04/15/script-generador-de-trigger-para-auditoria-en-postgres/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>Crear imagen disabled-like para ser usada con CSS (estado de botones)</title>
		<link>http://dvst.wordpress.com/2007/08/12/crear-imagen-disabled-like-para-ser-usada-con-css-estado-de-botones/</link>
		<comments>http://dvst.wordpress.com/2007/08/12/crear-imagen-disabled-like-para-ser-usada-con-css-estado-de-botones/#comments</comments>
		<pubDate>Sun, 12 Aug 2007 18:36:54 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[imagemagick]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[sotd]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/2007/08/12/crear-imagen-disabled-like-para-ser-usada-con-css-estado-de-botones/</guid>
		<description><![CDATA[En un proyecto que estoy trabajando utilizo iconos para los botones en las pantallas, el proyecto tiene un comportamiento como las aplicaciones de escritorio, en el sentido de que dependiendo del &#8220;modo&#8221; que se esté trabajando, se activan/desactivan algunos botones/campos. En el caso del texto de los botones, con simplemente agregarle al botón el atributo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=17&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En un proyecto que estoy trabajando utilizo iconos para los botones en las pantallas, el proyecto tiene un comportamiento como las aplicaciones de escritorio, en el sentido de que dependiendo del &#8220;modo&#8221; que se esté trabajando, se activan/desactivan algunos botones/campos. En el caso del texto de los botones, con simplemente agregarle al botón el atributo &#8220;disabled&#8221;, este cambia de apariencia, pero la imagen se mantiene del color. Así que trabajé en un script que se encargue de automatizar este proceso ya que pude haberlo hecho usando <a href="http://www.gimp.org/" title="Editor de imagenes interactivo" target="_blank">gimp</a>, pero como son muchas imágenes las que quería convertir, usé <a href="http://www.imagemagick.org/" title="image magick" target="_blank">imagemagick</a>.</p>
<p>Para ilustrar un poco mas el asunto, la imagen original es: <a href="http://dvst.files.wordpress.com/2007/08/css-img-disabled-add.png" title="boton de agregar"><img src="http://dvst.files.wordpress.com/2007/08/css-img-disabled-add.png" alt="boton de agregar" /></a>  y necesito que el resutado sea:<br />
<a href="http://dvst.files.wordpress.com/2007/08/add-result.png" title="boton de agregar con gris, resultado"><img src="http://dvst.files.wordpress.com/2007/08/add-result.png" alt="boton de agregar con gris, resultado" /></a> Para que, dependiendo del estado, cambiar la regla background-position del elemento y cambie de color a gris, mostrando un efecto de disabled.</p>
<p><code><br />
</code></p>
<p><font face="monospace"><font color="#0000ff">#!/bin/bash</font></font><font face="monospace"><font color="#0000ff"># css-img-disabledv0.1</font></font></p>
<p><font face="monospace"><font color="#0000ff"># Script para crear una imagen destinada a ser usada como imagen de doble </font></font></p>
<p><font face="monospace"><font color="#0000ff"># estado, practico al usar en sitios web junto con hoja de estilo en cascada (css)</font></font></p>
<p><font face="monospace"><font color="#0000ff"># Autor: Javier E. Pérez P. | <a href="http://dvst.wordpress.com">http://dvst.wordpress.com</a> | 20070812</font></font></p>
<p><font face="monospace"><font color="#0000ff"># Crear carpeta (si no existe) para imagenes grices</font></font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>if</strong></font> <font color="#a52a2a"><strong>[</strong></font> <font color="#a52a2a"><strong>!</strong></font> <font color="#a52a2a"><strong>-e</strong></font> grices <font color="#a52a2a"><strong>]</strong></font><font color="#a52a2a"><strong>;</strong></font> <font color="#a52a2a"><strong>then</strong></font></font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>mkdir</strong></font> grices</font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>fi</strong></font></font></p>
<p><font face="monospace"><font color="#0000ff"># Crear carpeta (si no existe) para imagenes resultantes</font></font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>if</strong></font> <font color="#a52a2a"><strong>[</strong></font> <font color="#a52a2a"><strong>!</strong></font> <font color="#a52a2a"><strong>-e</strong></font> resultados <font color="#a52a2a"><strong>]</strong></font> <font color="#a52a2a"><strong>;</strong></font> <font color="#a52a2a"><strong>then</strong></font></font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>mkdir</strong></font> resultados</font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>fi</strong></font></font></p>
<p><font face="monospace"><font color="#0000ff"># Crear imagen de fondo (transparente 16&#215;36)</font></font></p>
<p><font face="monospace">convert <font color="#6a5acd">-size</font> 16&#215;36 xc:none fondo-transparente.png</font></p>
<p><font face="monospace"><br />
</font><font face="monospace"><font color="#a52a2a"><strong>for</strong></font> file <font color="#a52a2a"><strong>in</strong></font> *.png<font color="#a52a2a"><strong>;</strong></font> <font color="#a52a2a"><strong>do</strong></font></font></p>
<p><font face="monospace"><font color="#0000ff"># tomamos solo el nombre de archivo (sin extensión)</font></font></p>
<p><font face="monospace"><font color="#008b8b">NOMBRE_ARCHIVO</font>=<font color="#a020f0">${</font><font color="#a020f0">file</font><font color="#a52a2a"><strong>%%</strong></font>.png<font color="#a020f0">}</font></font></p>
<p><font face="monospace">    <font color="#0000ff"># convertir imagen original a gris y 10% mas de brillo para situarla en carpeta de grices</font></font></p>
<p><font face="monospace">convert -<font color="#a52a2a"><strong>type</strong></font> grayscale -modulate <font color="#ff00ff">110</font> <font color="#a020f0">$file</font> grices/<font color="#a020f0">$NOMBRE_ARCHIVO</font>-gris.png</font></p>
<p><font face="monospace">    <font color="#0000ff"># componer original con imagen de fondo para situarla en imagenes resultantes</font></font></p>
<p><font face="monospace">composite -dissolve <font color="#ff00ff">100</font>% <font color="#a020f0">$file</font> fondo-transparente.png resultados/<font color="#a020f0">$NOMBRE_ARCHIVO</font>-result.png</font></p>
<p><font face="monospace">    <font color="#0000ff"># componer imagen gris con imagen de fondo resultante para obtener el resultado final</font></font></p>
<p><font face="monospace">composite -dissolve <font color="#ff00ff">100</font>% -geometry +<font color="#ff00ff">0</font>+<font color="#ff00ff">20</font> grices/<font color="#a020f0">$NOMBRE_ARCHIVO</font>-gris.png resultados/<font color="#a020f0">$NOMBRE_ARCHIVO</font>-result.png resultados/<font color="#a020f0">$NOMBRE_ARCHIVO</font>-result.png</font></p>
<p><font face="monospace"><br />
</font><font face="monospace"><font color="#0000ff"># avisamos por pantall</font></font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>echo</strong></font><font color="#ff00ff"> </font><font color="#a52a2a"><strong>&#8220;</strong></font><font color="#ff00ff">Imagen: </font><font color="#a020f0">$file</font><font color="#ff00ff"> terminada </font><font color="#a52a2a"><strong>&#8220;</strong></font></font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>done</strong></font></font></p>
<p><font face="monospace"><font color="#0000ff"># ya los grices no nos sirven sino que ocupan mas espacio en disco, así que los borramos</font></font></p>
<p><font face="monospace"><font color="#a52a2a"><strong>rm</strong></font> <font color="#6a5acd">-fr</font> grices</font></p>
<p>Luego la regla en css podría ser:<br />
<code><br />
input[type="button"][value="Agregar"]{<br />
background-image : url("/img/icons/add.png") ;<br />
background-repeat : no-repeat ;<br />
background-position : 6px 3px ;<br />
padding-left : 25px ;<br />
}</code></p>
<p>input[type="button"][value="Agregar"][disabled] {<br />
background-image : url(&#8220;/img/icons/add.png&#8221;) ;<br />
background-repeat : no-repeat ;<br />
background-position : 6px -16px ;<br />
padding-left : 25px ;<br />
}</p>
<p><a href="http://dvst.files.wordpress.com/2007/08/estado_botones.gif" title="estado botones formulario, enabled/disabled"><img src="http://dvst.files.wordpress.com/2007/08/estado_botones.gif" alt="estado botones formulario, enabled/disabled" /></a></p>
<p>El icono que usé en el ejemplo lo saqué de <a href="http://www.famfamfam.com/lab/icons/" title="fam fam fam" target="_blank">famfamfam</a> .</p>
<p>Sugerencia: Podría ser bueno que en vez de leer una lista de archivos en el directorio actual, recibiera una lista de archivos a aplicar la operación, algo como: <em>css-img-disabled.sh add.png cancel.png</em> y que el script sólo reconozca esos archivos.</p>
<p>PD : que cagada es el editor de wordpress cuando uno quiere meter código, formatea la salida</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=17&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2007/08/12/crear-imagen-disabled-like-para-ser-usada-con-css-estado-de-botones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2007/08/css-img-disabled-add.png" medium="image">
			<media:title type="html">boton de agregar</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2007/08/add-result.png" medium="image">
			<media:title type="html">boton de agregar con gris, resultado</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2007/08/estado_botones.gif" medium="image">
			<media:title type="html">estado botones formulario, enabled/disabled</media:title>
		</media:content>
	</item>
		<item>
		<title>widget de javascript para limpiar campo de formulario tipo texto</title>
		<link>http://dvst.wordpress.com/2007/08/11/widget-de-javascript-para-limpiar-campo-de-formulario-tipo-texto/</link>
		<comments>http://dvst.wordpress.com/2007/08/11/widget-de-javascript-para-limpiar-campo-de-formulario-tipo-texto/#comments</comments>
		<pubDate>Sat, 11 Aug 2007 20:11:13 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[sotd]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/2007/08/11/widget-de-javascript-para-limpiar-campo-de-formulario-tipo-texto/</guid>
		<description><![CDATA[Estaba haciendo un formulario para búsqueda según criterios y se me presentó la necesidad de limpiar campos específicos porque en la lógica de programación del servidor hace la consulta usando ILIKE en su respectivo campos en base de datos y el campo del formulario es diferente a &#8220;&#8221; (previo trim (para adelantarme a los purista&#8230; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=15&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Estaba haciendo un formulario para búsqueda según criterios y se me presentó la necesidad de limpiar campos específicos porque en la lógica de programación del servidor hace la consulta usando ILIKE en su respectivo campos en base de datos y el campo del formulario es diferente a &#8220;&#8221; (previo trim (para adelantarme a los purista&#8230; en realidad es una expresión regular lo que uso, no una función built in)), entonces cuando uno hace varias búsquedas es un fastidio borrar todos los campos o la mayoría de ellos, no me pareció colocar un botón de reset para limpiar todos los campos porque no siempre se quiere eso, así que hice un pequeño script que con solo agregarle una clase al campo que queremos que tenga el efecto, este recibe el comportamiento.</p>
<p><a href="http://dvst.files.wordpress.com/2007/08/widgetlimpiarcampos.gif" title="widget para limpiar campos de formulario"><img src="http://dvst.files.wordpress.com/2007/08/widgetlimpiarcampos.gif" alt="widget para limpiar campos de formulario" /></a></p>
<p style="background:black none repeat scroll 0 50%;color:#cccccc;"> <font face="monospace"><br />
<font color="#ffff00"> 1 </font><font color="#40ffff">&lt;</font><font color="#ffff00">html</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00"> 2 </font><font color="#40ffff">&lt;</font><font color="#ffff00">head</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00"> 3 </font><font color="#40ffff">&lt;</font><font color="#ffff00">script</font><font color="#40ffff"> </font><font color="#60ff60">type</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;text/javascript&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">src</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;jquery.js&#8221;</font><font color="#40ffff"> &gt;</font><font color="#ffa500"> </font><font color="#40ffff">&lt;/</font><font color="#ffff00">script</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00"> 4 </font><br />
<font color="#ffff00"> 5 </font><font color="#40ffff">&lt;</font><font color="#ffff00">style</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00"> 6 </font>    <font color="#ffff00">input</font> <font color="#40ffff">{</font> <font color="#60ff60">border</font>:<font color="#ffa0a0">1px</font> <font color="#60ff60">solid</font> <font color="#ffa0a0">black</font>; <font color="#40ffff">}</font><br />
<font color="#ffff00"> 7 </font>    <font color="#ffff00">input</font><font color="#40ffff">.dvst</font> <font color="#40ffff">{</font> <font color="#60ff60">padding</font> : <font color="#ffa0a0">2px</font> ; <font color="#60ff60">padding-right</font> : <font color="#ffa0a0">20px</font> ; <font color="#40ffff">}</font><br />
<font color="#ffff00"> 8 </font><font color="#40ffff">&lt;/</font><font color="#ffff00">style</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00"> 9 </font><br />
<font color="#ffff00">10 </font><font color="#40ffff">&lt;</font><font color="#ffff00">script</font><font color="#40ffff"> </font><font color="#60ff60">type</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;text/javascript&#8221;</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00">11 </font><br />
<font color="#ffff00">12 </font><font color="#ffa500">    jQuery</font>(<font color="#40ffff">function</font>()<font color="#40ffff">{</font><br />
<font color="#ffff00">13 </font><font color="#ffa500">        jQuery</font>(<font color="#ffa0a0">&#8220;input[@type=text].dvst&#8221;</font>)<font color="#ffa500">.each</font>(<font color="#40ffff">function</font>()<font color="#40ffff">{</font><br />
<font color="#ffff00">14     </font><font color="#ffa500">jQuery</font>(<font color="#40ffff">this</font>)<font color="#ffa500">.after</font>(<font color="#ffa0a0">&#8220;&lt;span&gt; &lt;img id=&#8217;limpiarDVST_&#8221;</font><font color="#ffa500"> + jQuery</font>(<font color="#40ffff">this</font>)<font color="#ffa500">.attr</font>(<font color="#ffa0a0">&#8220;id&#8221;</font>)<font color="#ffa500"> + </font><font color="#ffa0a0">&#8220;&#8216; src=&#8217;close.gif&#8217; title=&#8217;Limpiar campo&#8217; style=&#8217;position:relative; top: 1px ; left: -22px ; cursor: pointer; z-index : 1&#8242;&gt; &lt;/span&gt;&#8221;</font>)<font color="#ffa500">;</font><br />
<font color="#ffff00">15 </font><br />
<font color="#ffff00">16 </font><font color="#ffa500">            verificaEstadoInput</font>(<font color="#ffa500">jQuery</font>(<font color="#40ffff">this</font>))<font color="#ffa500">;</font><br />
<font color="#ffff00">17 </font><font color="#ffa500">        </font><font color="#40ffff">}</font>)<font color="#ffa500">;</font><br />
<font color="#ffff00">18 </font><br />
<font color="#ffff00">19 </font><font color="#ffa500">        jQuery</font>(<font color="#ffa0a0">&#8220;input[@type=text].dvst&#8221;</font>)<font color="#ffa500">.bind</font>(<font color="#ffa0a0">&#8220;keyup&#8221;</font><font color="#ffa500">,</font><font color="#40ffff">function</font>()<font color="#40ffff">{</font><br />
<font color="#ffff00">20 </font><font color="#ffa500">            verificaEstadoInput</font>(<font color="#ffa500">jQuery</font>(<font color="#40ffff">this</font>))<font color="#ffa500">;</font><br />
<font color="#ffff00">21 </font><font color="#ffa500">        </font><font color="#40ffff">}</font>)<font color="#ffa500">;</font><br />
<font color="#ffff00">22 </font><br />
<font color="#ffff00">23 </font><font color="#ffa500">        </font><font color="#40ffff">function</font><font color="#ffa500"> verificaEstadoInput</font>(<font color="#ffa500">jqueryObj</font>)<font color="#40ffff">{</font><br />
<font color="#ffff00">24 </font><font color="#ffa500">            </font><font color="#ffff00">if</font><font color="#ffa500"> </font>(<font color="#ffa500">jqueryObj.val</font>()<font color="#ffa500"> != </font><font color="#ffa0a0">&#8220;&#8221;</font>)<font color="#40ffff">{</font><br />
<font color="#ffff00">25 </font><font color="#ffa500">                jQuery</font>(<font color="#ffa0a0">&#8220;#limpiarDVST_&#8221;</font><font color="#ffa500">+jqueryObj.attr</font>(<font color="#ffa0a0">&#8220;id&#8221;</font>))<font color="#ffa500">.show</font>()<font color="#ffa500">;</font><br />
<font color="#ffff00">26 </font><font color="#ffa500">            </font><font color="#40ffff">}</font><font color="#ffff00">else</font><font color="#40ffff">{</font><br />
<font color="#ffff00">27 </font><font color="#ffa500">                jQuery</font>(<font color="#ffa0a0">&#8220;#limpiarDVST_&#8221;</font><font color="#ffa500">+jqueryObj.attr</font>(<font color="#ffa0a0">&#8220;id&#8221;</font>))<font color="#ffa500">.hide</font>()<font color="#ffa500">;</font><br />
<font color="#ffff00">28 </font><font color="#ffa500">            </font><font color="#40ffff">}</font><br />
<font color="#ffff00">29 </font><font color="#ffa500">        </font><font color="#40ffff">}</font><br />
<font color="#ffff00">30 </font><br />
<font color="#ffff00">31 </font><font color="#ffa500">        jQuery</font>(<font color="#ffa0a0">&#8220;*[@id^=limpiarDVST_]&#8220;</font>)<font color="#ffa500">.bind</font>(<font color="#ffa0a0">&#8220;click&#8221;</font><font color="#ffa500">,</font><font color="#40ffff">function</font>()<font color="#40ffff">{</font><br />
<font color="#ffff00">32 </font><font color="#ffa500">            jQuery</font>(<font color="#ffa0a0">&#8220;#&#8221;</font><font color="#ffa500">+jQuery</font>(<font color="#40ffff">this</font>)<font color="#ffa500">.attr</font>(<font color="#ffa0a0">&#8220;id&#8221;</font>)<font color="#ffa500">.substr</font>(12))<font color="#ffa500">.val</font>(<font color="#ffa0a0">&#8220;&#8221;</font>)<font color="#ffa500">;</font><br />
<font color="#ffff00">33 </font><font color="#ffa500">            jQuery</font>(<font color="#40ffff">this</font>)<font color="#ffa500">.hide</font>()<font color="#ffa500">;</font><br />
<font color="#ffff00">34 </font><font color="#ffa500">        </font><font color="#40ffff">}</font>)<font color="#ffa500">;</font><br />
<font color="#ffff00">35 </font><font color="#ffa500">    </font><font color="#40ffff">}</font>)<font color="#ffa500">;</font><br />
</font><font face="monospace"><font color="#ffff00">36</font></font><br />
<font face="monospace"> <font color="#ffff00">37 </font><font color="#40ffff">&lt;/</font><font color="#ffff00">script</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00">38 </font><br />
<font color="#ffff00">39 </font><font color="#40ffff">&lt;/</font><font color="#ffff00">head</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00">40 </font><font color="#40ffff">&lt;</font><font color="#ffff00">body</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00">41 </font><br />
<font color="#ffff00">42</font><font color="#40ffff">&lt;</font><font color="#ffff00">label</font><font color="#40ffff"> </font><font color="#60ff60">for</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;codigo&#8221;</font><font color="#40ffff">&gt;</font>Codigo:<font color="#40ffff">&lt;/</font><font color="#ffff00">label</font><font color="#40ffff">&gt;</font> <font color="#40ffff">&lt;</font><font color="#ffff00">input</font><font color="#40ffff"> </font><font color="#60ff60">id</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;codigo&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">type</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;text&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">class</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;dvst&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">value</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;uno&#8221;</font><font color="#40ffff"> &gt;</font> <font color="#ffff00">43 </font><font color="#40ffff">&lt;</font><font color="#ffff00">label</font><font color="#40ffff"> </font><font color="#60ff60">for</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;nombre&#8221;</font><font color="#40ffff">&gt;</font>Nombre:<font color="#40ffff">&lt;/</font><font color="#ffff00">label</font><font color="#40ffff">&gt;</font> <font color="#40ffff">&lt;</font><font color="#ffff00">input</font><font color="#40ffff"> </font><font color="#60ff60">id</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;nombre&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">type</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;text&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">class</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;dvst&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">value</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;cuatro&#8221;</font><font color="#40ffff"> &gt;</font> <font color="#40ffff">&lt;</font><font color="#ffff00">br</font><font color="#40ffff"> /&gt;&lt;</font><font color="#ffff00">br</font><font color="#40ffff"> /&gt;</font><br />
<font color="#ffff00">44 </font><br />
<font color="#ffff00">45 </font><br />
<font color="#ffff00">46</font><font color="#40ffff">&lt;</font><font color="#ffff00">label</font><font color="#40ffff"> </font><font color="#60ff60">for</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;descripcion&#8221;</font><font color="#40ffff">&gt;</font>Descripcion:<font color="#40ffff">&lt;/</font><font color="#ffff00">label</font><font color="#40ffff">&gt;</font> <font color="#40ffff">&lt;</font><font color="#ffff00">input</font><font color="#40ffff"> </font><font color="#60ff60">id</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;descripcion&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">type</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;text&#8221;</font><font color="#40ffff"> </font><font color="#60ff60">class</font><font color="#40ffff">=</font><font color="#ffa0a0">&#8220;dvst&#8221;</font><font color="#40ffff"> &gt;</font><br />
<font color="#ffff00">47 </font><br />
<font color="#ffff00">48 </font><font color="#40ffff">&lt;/</font><font color="#ffff00">body</font><font color="#40ffff">&gt;</font><br />
<font color="#ffff00">49 </font><font color="#40ffff">&lt;/</font><font color="#ffff00">html</font><font color="#40ffff">&gt;</font><br />
</font></p>
<p>Sé que se puede hacer de una mejor forma, como por ejemplo usando el plugin dimension de jquery para calcular la posición del campo y luego posicionar la cruz en un z-index superior con un top y left especificos, así cuando aparece desaparece la cruz no se desplazan los elementos, pero como está ahora funciona bien. saludos</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=15&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2007/08/11/widget-de-javascript-para-limpiar-campo-de-formulario-tipo-texto/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2007/08/widgetlimpiarcampos.gif" medium="image">
			<media:title type="html">widget para limpiar campos de formulario</media:title>
		</media:content>
	</item>
		<item>
		<title>Agilizando el proceso de filtrado de peticiones (spam) en mailman usando jquery</title>
		<link>http://dvst.wordpress.com/2007/08/05/agilizando-el-proceso-de-filtrado-de-peticiones-spam-en-mailman-usando-jquery/</link>
		<comments>http://dvst.wordpress.com/2007/08/05/agilizando-el-proceso-de-filtrado-de-peticiones-spam-en-mailman-usando-jquery/#comments</comments>
		<pubDate>Sun, 05 Aug 2007 18:22:35 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[firebug]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[sotd]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/2007/08/05/agilizando-el-proceso-de-filtrado-de-peticiones-spam-en-mailman-usando-jquery/</guid>
		<description><![CDATA[De por sí es muy básico, pero para tratar seguir con la tradición de sotd (en este caso line of the day).
El problema&#8230; cuando reviso la lista de solicitudes pendientes, generalmente hay ~60-120 solicitudes en espera, de los cuales al menos el 98% es spam, solía (para agilizar el proceso) colocar la pantalla completa (F11) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=14&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>De por sí es muy básico, pero para tratar seguir con la tradición de <abbr title="Script of the day">sotd</abbr> (en este caso line of the day).</p>
<p>El problema&#8230; cuando reviso la lista de solicitudes pendientes, generalmente hay ~60-120 solicitudes en espera, de los cuales al menos el 98% es spam, solía (para agilizar el proceso) colocar la pantalla completa (F11)  de <abbr title="Firefox">FF</abbr> (ó <abbr title="Ice Weasel">IW</abbr>, como quieran) para luego hacer click en el radio con etiqueta &#8220;discard&#8221; por cada solicitud mientras iba revisando si en realidad merece ser vetado. Esto a la final me terminó aburriendo así que me busqué una forma mas práctica de hacerlo.</p>
<p><a href="http://dvst.files.wordpress.com/2007/08/mailman-jquery-radio.gif" title="mailman select radio 1by1"><img src="http://dvst.files.wordpress.com/2007/08/mailman-jquery-radio.gif" alt="mailman select radio 1by1" /></a></p>
<p>Al entrar a la interfaz administrativa para proceso de solicitudes a la lista de correos, busco algún patrón que compartan los radios con etiqueta &#8220;discard&#8221;, para mi será mas cómodo buscar qué correo <strong>no</strong> es spam a cual <strong>es</strong> spam (casi todos), conseguí que el elemento tiene como atributo valor 3, lo que se traduce en el selector de <a href="http://www.jquery.com" title="jQuery Write less, do more" target="_blank">jQuery</a> input[@type=radio][@value=3] (css a la final, pero con el arroba). Así que activo jQuery en la página haciendo uso de <a href="http://www.learningjquery.com/2006/12/jquerify-bookmarklet" target="_blank">jQuerify</a> que es un <a href="http://es.wikipedia.org/wiki/Bookmarklet" title="bookmarklet" target="_blank">bookmarklet</a> para activar jQuery en la página que estamos actualmente.</p>
<p>Una vez activado aparecerá una ventana de alerta diciendo que jQuery ya está activo en el sitio, entonces haciendo uso de <a href="http://www.getfirebug.com/" title="firebug" target="_blank">firebug</a> , ejecuto el siguiente comando en la consola:</p>
<p><code>jQuery(<font color="#ffa0a0">"input[@type=radio][@value=3]"</font>).attr(<font color="#ffa0a0">"checked"</font>,<font color="#ffa0a0">"checked"</font>)<br />
</code></p>
<p>Marcando todos los radios de discard, entonces ahora lo único que tengo que hacer es desplazarme por la pantalla sólo leyendo los asuntos de los correos, y cuando consiga un posible <strong>no-spam</strong>, veo que hago con él (no se presenta mucho el caso), en caso que no consiga correo<strong> deseado</strong> en el sitio, simplemente envio la información y listo, mucho mas cómodo que el proceso anterior.</p>
<p>Otra forma de mejorar este procedimiento pudiera ser haciendo uso de <a href="https://addons.mozilla.org/en-US/firefox/addon/748" title="Greasemonkey" target="_blank">greasemonkey </a>para no tener que hacer todos estos pasos cada vez que se entra a la pantalla administrativa de solicitudes de la lista de correo.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=14&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2007/08/05/agilizando-el-proceso-de-filtrado-de-peticiones-spam-en-mailman-usando-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2007/08/mailman-jquery-radio.gif" medium="image">
			<media:title type="html">mailman select radio 1by1</media:title>
		</media:content>
	</item>
		<item>
		<title>Cambiar de CamelCase a under_score usando RegEx</title>
		<link>http://dvst.wordpress.com/2007/06/16/cambiar-de-camelcase-a-under_score-usando-regex/</link>
		<comments>http://dvst.wordpress.com/2007/06/16/cambiar-de-camelcase-a-under_score-usando-regex/#comments</comments>
		<pubDate>Sat, 16 Jun 2007 05:03:52 +0000</pubDate>
		<dc:creator>dvst</dc:creator>
				<category><![CDATA[sotd]]></category>
		<category><![CDATA[tegz]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://dvst.wordpress.com/2007/06/16/cambiar-de-camelcase-a-under_score-usando-regex/</guid>
		<description><![CDATA[Bueno, la idea de hacer esta expresión regular empezó cuando trataba migrar (por fases) la base de datos que usé para el sistema TEGZ el cual actualmente funciona con MySQL.
TEGZ está hecho usando Catalyst, DBIx-Class y MySQL, así que lo primero que hice fue editar lib/TEGZ/Model/tegzDB.pm la línea de conexión a la base de datos, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=12&subd=dvst&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bueno, la idea de hacer esta expresión regular empezó cuando trataba migrar (por fases) la base de datos que usé para el sistema TEGZ el cual actualmente funciona con MySQL.</p>
<p>TEGZ está hecho usando Catalyst, DBIx-Class y MySQL, así que lo primero que hice fue editar lib/TEGZ/Model/tegzDB.pm la línea de conexión a la base de datos, de &#8216;dbi:mysql:tegz&#8217; a &#8216;dbi:Pg:dbname=tegz&#8217;, habiendo creado las tablas en postgres en una base de datos llamada tegz. Ahora&#8230; esto me daba error, así que despues de darme golpes por un rato hice uso del comodin de preguntarle a un amigo (aqui entra miguel de <a href="http://www.tc.com.ve" title="Technologies consulting">www.tc.com.ve</a>, el mismo que <a href="http://www.grunch.com.ve/" title="unblog">grunch</a> hace referencia en <a href="http://grunch.com.ve/2007/05/20/estandarizacion-de-bases-de-datos-postgresql/" title="estandarizacion de bases de datos postgresql" target="_blank">este post</a>) y me dice que el problema es que postgres recibe el nombre de la tabla sin ponerle comillas, y ahí hay un problema. a continuación visual.</p>
<p>Sin comillas a tabla con nombre usando camelCase&#8230; envia error.</p>
<p><a href="http://dvst.files.wordpress.com/2007/06/pg_camelcase-error.png" title="postgres error case sensitive"><img src="http://dvst.files.wordpress.com/2007/06/pg_camelcase-error.png" alt="postgres error case sensitive" /></a></p>
<p>Con comillas a tabla con nombre usando camelCase&#8230; funciona.</p>
<p><code></code><a href="http://dvst.files.wordpress.com/2007/06/pg_comillas-fine.png" title="postgres fino con comillas"><img src="http://dvst.files.wordpress.com/2007/06/pg_comillas-fine.png" alt="postgres fino con comillas" /></a></p>
<p>Así que me dí la tarea de cambiar los campos y nombres de tablas que tenía en camelCase a under_score para evitar ese problema y por recomendación de miguel, es posible que con alguna configuración de DBIx-Class me brincara esta &#8220;molestia&#8221;, pero preferí hacer el cambio de una vez por todas, para esto usé esta expresión regular usando <a href="http://www.vim.org/" title="vi mejorado" target="_blank">VIM</a> (the best editor ever <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><font color="#ff6600"><code> :% s#\([a-z]\)\([A-Z]\)#\1_\l\2#g</code> </font></p>
<p>Explico la expresión por partes, :% indica que aplica a todo el documento, s#a#b# es una sentencia para sustitución, donde sustituye a por b, así que busca todo lo que corresponda a [a-z][A-Z] (el punto del camelCase) a esa primera letra encontrada, underscore, segunda letra mayuscula pasada a minuscula. reconoce la primera letra y segunda por la agrupación \(\) \(\) (()()) -&gt; \1 \2 , la \l es para pasar a lowercase</p>
<p>Esto pasa, por ejemplo: idCedula a id_cedula. Así que cambié los modulos y la base de datos (hice un backup en plano y luego un restore con el cambio, todo fino <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pd: si se consigue con el caso de idTEG quedará id_tEG, ahí si no sé todavía como evitar ese caso (sin tener que romper con posibles encuentros con idFacturaEmpresaCualquierCosa)</p>
<p>PPd: Está pendiente el post que le seguía al anterior, solo he estado algo ocupado, ya le dedicaré tiempo, pero debo decir que me ha ido bien últimamente <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dvst.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dvst.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dvst.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dvst.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dvst.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dvst.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dvst.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dvst.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dvst.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dvst.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dvst.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dvst.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dvst.wordpress.com&blog=1065369&post=12&subd=dvst&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dvst.wordpress.com/2007/06/16/cambiar-de-camelcase-a-under_score-usando-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/003c097229da5026832f56b2c5689404?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2007/06/pg_camelcase-error.png" medium="image">
			<media:title type="html">postgres error case sensitive</media:title>
		</media:content>

		<media:content url="http://dvst.files.wordpress.com/2007/06/pg_comillas-fine.png" medium="image">
			<media:title type="html">postgres fino con comillas</media:title>
		</media:content>
	</item>
	</channel>
</rss>
