<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Javier Perez</title>
	<atom:link href="https://dvst.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://dvst.wordpress.com</link>
	<description>Mostly about tech, business and productivity</description>
	<lastBuildDate>Sun, 13 Nov 2016 23:01:07 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<site xmlns="com-wordpress:feed-additions:1">1065369</site><cloud domain='dvst.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s0.wp.com/i/buttonw-com.png</url>
		<title>Javier Perez</title>
		<link>https://dvst.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://dvst.wordpress.com/osd.xml" title="Javier Perez" />
	<atom:link rel='hub' href='https://dvst.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Importar contactos ovi (nokia) al iphone</title>
		<link>https://dvst.wordpress.com/2010/12/30/importar-contactos-ovi-nokia-al-iphone/</link>
					<comments>https://dvst.wordpress.com/2010/12/30/importar-contactos-ovi-nokia-al-iphone/#respond</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Thu, 30 Dec 2010 16:16:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://dvst.wordpress.com/?p=68</guid>

					<description><![CDATA[El problema: Instalé Whatsapp en mi ipod, pero como esta aplicación de mensajería trabaja con los contactos del teléfono (ipod en este caso) no tengo amigos para usar este servicio. Así que pienso cargar todos los contactos que tenga para poder saber quien tiene la aplicación y poder chatear con ellos. La idea: tengo algunos&#8230; <a href="https://dvst.wordpress.com/2010/12/30/importar-contactos-ovi-nokia-al-iphone/" class="more-link">Continúa leyendo <span class="screen-reader-text">Importar contactos ovi (nokia) al&#160;iphone</span></a>]]></description>
										<content:encoded><![CDATA[<p><strong>El problema:</strong> Instalé <a href="http://www.whatsapp.com/">Whatsapp</a> en mi ipod, pero como esta aplicación de mensajería trabaja con los contactos del teléfono (ipod en este caso) no tengo amigos para usar este servicio. Así que pienso cargar todos los contactos que tenga para poder saber quien tiene la aplicación y poder chatear con ellos.</p>
<p><strong>La idea:</strong> tengo algunos contactos en <a href="https://contactsui.ovi.com/">https://contactsui.ovi.com</a> que sincronicé justo antes que me robaran el teléfono, así que tengo que tomar esos contactos, formatearlos (csv, ldif, vcf, etc), para luego importarlos en el ipod.</p>
<p>Primero pensé en hacer un script usando <a href="http://search.cpan.org/dist/WWW-Mechanize/">WWW::Mechanize</a> para obtener los contactos y guardarlos en un archivo .csv pero revisando la página noté que se pueden mostrar como lista (por defecto muestra miniatura), así que para mi fue más fácil simplemente copiar y pegar en una hoja de cálculo.</p>
<p><img data-attachment-id="72" data-permalink="https://dvst.wordpress.com/2010/12/30/importar-contactos-ovi-nokia-al-iphone/imagen-21/" data-orig-file="https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png" data-orig-size="800,477" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="imagen-21" data-image-description="" data-image-caption="" data-medium-file="https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png?w=300" data-large-file="https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png?w=730" class="alignnone size-full wp-image-72" src="https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png?w=730" alt="imagen-21"   srcset="https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png 800w, https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png?w=150&amp;h=89 150w, https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png?w=300&amp;h=179 300w, https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png?w=768&amp;h=458 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>Luego guardé el documento como archivo .csv para trabajar mejor con los datos. Quedando de esta forma:</p>
<pre>nombre,apellido,organizacion,telefono,correo,
aaa,bbb,ccc,333,correo@algo.com</pre>
<p>La aplicación que estoy usando para importar los contactos al ipod es <a href="http://www.ttrix.com/apple/iphone/contactstool/contactstool.html">Contacts tool</a>, que trabaja con el formato LDIF. Lo primero que hice fue crear un contacto directamente con el ipod con los campos que me interesaban (nombre,apellido, organización, teléfono,correo) y lo exporté desde esta aplicación para usarlo como plantilla al generar este archivo (es muy cómodo compartir estos archivos porque permite enviarlos por correo y para obtener datos levanta un servidor web).</p>
<p>El archivo generado tiene este formato:</p>
<p>version: 1<br />
dn: cn=vida boheme<br />
objectclass: top<br />
objectclass: person<br />
objectclass: organizationalPerson<br />
objectclass: inetOrgPerson<br />
objectclass: ctoolPerson<br />
cn: vida boheme<br />
givenName: vida<br />
sn: boheme<br />
mobile: 001122334455<br />
description: mal tripeo lo del 27/12/2010 11:41:36 p.m. en mcy</p>
<p>A partir de aquí hice un script en perl (básico) para obtener como archivo de entrada un .csv y devolver el LDIF, para luego importar este a Contact tools.</p>
<pre>#!usr/bin/perl
print "version: 1\n";
while(&lt;&gt;){
	@linea = split(",",$_);
	print "dn: cn=$linea[0] $linea[1] \n";
print &lt;&lt;BLOQ1;
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: ctoolPerson
BLOQ1
	print "cn: $linea[0] $linea[1]\n";
	print "givenName: $linea[0]\n";
	print "sn: $linea[1]\n" if $linea[1];
	print "mobile: $linea[3]\n";
	print "o: $linea[2]\n" if $linea[2] ;
	print "ctoolHomeMail: $linea[4]\n" if $linea[4] ;
	print "\n";
}</pre>
<p>el modo de uso es:</p>
<pre>perl script-perl.pl archivo.csv &gt; nuevoarchivo.ldif</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2010/12/30/importar-contactos-ovi-nokia-al-iphone/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">68</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2010/12/imagen-21.png" medium="image">
			<media:title type="html">imagen-21</media:title>
		</media:content>
	</item>
		<item>
		<title>Generar números de páginas para imprimir en ambas caras</title>
		<link>https://dvst.wordpress.com/2010/12/28/generar-numeros-de-paginas-para-imprimir-en-ambas-caras/</link>
					<comments>https://dvst.wordpress.com/2010/12/28/generar-numeros-de-paginas-para-imprimir-en-ambas-caras/#respond</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Tue, 28 Dec 2010 23:44:46 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://dvst.wordpress.com/?p=97</guid>

					<description><![CDATA[Este es un script que hago una y otra vez cada vez que necesito imprimir (algo poco tree-friendly (de ahí salió el formato WWF), pero no me veo leyendo un libro en el ipod ni pienso comprar un kindle a corto/mediano plazo). Lo bueno (aquí limpio mi reputación de persona poco ecológica) es que no&#8230; <a href="https://dvst.wordpress.com/2010/12/28/generar-numeros-de-paginas-para-imprimir-en-ambas-caras/" class="more-link">Continúa leyendo <span class="screen-reader-text">Generar números de páginas para imprimir en ambas&#160;caras</span></a>]]></description>
										<content:encoded><![CDATA[<p>Este es un script que hago una y otra vez cada vez que necesito imprimir (algo poco tree-friendly (de ahí salió el formato <a href="http://www.redboxinnovation.com/blog/2010/12/10/wwf-format/" target="_blank">WWF</a>), pero no me veo leyendo un libro en el ipod ni pienso comprar un kindle a corto/mediano plazo).</p>
<p>Lo bueno (aquí limpio mi reputación de persona poco ecológica) es que no imprimo una página por cara, ni imprimo una cara de la hoja. sino al menos 2 páginas por cara e imprimo por los dos lados. El problema es que no siempre consigo una impresora que permita imprimir de esa forma, entonces tengo que generar una lista de números para la página frontal y trasera. y esto es lo que hice.</p>
<pre>#!/usr/bin/perl -w

use strict;
use warnings;

my @rango = (1..12);
my $pags_cara = 4;
my (@pares,@impares);

my $vuelta = 0 ;

foreach (@rango) {
	$vuelta &lt; $pags_cara ? push(@impares,$_) : push(@pares,$_) ; 
	$vuelta++ ;
 	$vuelta &gt;= $pags_cara*2 ? $vuelta = 0 : 1 ;
}
print "IMPARES: " . join(",",@impares) . "\n";
print "PARES:   " . join(",",@pares) . "\\n";</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2010/12/28/generar-numeros-de-paginas-para-imprimir-en-ambas-caras/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">97</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>DBDesigner en Debian</title>
		<link>https://dvst.wordpress.com/2009/06/21/dbdesigner-en-debian/</link>
					<comments>https://dvst.wordpress.com/2009/06/21/dbdesigner-en-debian/#respond</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Sun, 21 Jun 2009 18:14:48 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://dvst.wordpress.com/?p=75</guid>

					<description><![CDATA[Para ir al grano, descargar los paquetes DBDesigner (a la fecha la última versión disponible 4.0.5.4) y kylixlibs3-borqt (a la fecha la ultima versión disponible es 3.0-2). En debian no es tan sencillo como descargar el DBDesigner, descomprimirlo/desempaquetarlo y esperar que levante la aplicación, ¿por que?, mensaje a continuación: cd /home/jperez/Desktop/dbd/DBDesigner4 ./DBDesigner4 libborqt-6.9-qt2.3.so: no se&#8230; <a href="https://dvst.wordpress.com/2009/06/21/dbdesigner-en-debian/" class="more-link">Continúa leyendo <span class="screen-reader-text">DBDesigner en Debian</span></a>]]></description>
										<content:encoded><![CDATA[<p>Para ir al grano, descargar los paquetes <strong><a href="http://fabforce.net/downloadfile.php?iddownloadfile=2" target="_blank">DBDesigner</a> </strong>(a la fecha la última versión disponible 4.0.5.4) y <a href="http://kylixlibs.sourceforge.net/down.html" target="_blank"><strong>kylixlibs3-borqt</strong></a> (a la fecha la ultima versión disponible es 3.0-2).</p>
<p>En debian no es tan sencillo como descargar el DBDesigner, descomprimirlo/desempaquetarlo y esperar que levante la aplicación, ¿por que?, mensaje a continuación:</p>
<pre>cd /home/jperez/Desktop/dbd/DBDesigner4
./DBDesigner4
libborqt-6.9-qt2.3.so: no se puede abrir el fichero del objeto compartido: No existe el fichero o el directorio</pre>
<p>Esta libreria esta presente en el segundo paquete que sugerí descargar, si descargan la versión tarball (tar.gz) no tendrán mayor problema, simplemente lo descomprimen/desempaquetan y ejecutan el <em>install </em>, el se encarga de instalar el módulo en /usr/lib/kylix , ahora solo nos falta a nosotros crear un enlace simbólico en /usr/lib de la siguiente forma:</p>
<pre>cd /usr/lib
ln -s kylix3/libborqt-6.9-qt2.3.so</pre>
<p>Con esto es suficiente para mi, ahora&#8230; en caso que descarguen «kylixlibs3-borqt_3.0-1_i386.deb» en vez del tarball, no nos dejará instalar el .deb ya que no podrá cumplir la dependencia del paquete <em>xkeyboard-config </em>que en debian es un paquete virtual, el paquete que cumple estas funciones se llama <a href="http://packages.debian.org/search?keywords=xkb-data" target="_blank"><em>xkb-data</em></a> pero aun teniéndolo instalado no lo toma en cuenta, así que se puede proceder a extraer el contenido del .deb, se puede hacer con alguno de los siguientes comandos:</p>
<pre>ar x kylixlibs3-borqt_3.0-1_i386.deb
dpkg -x kylixlibs3-borqt_3.0-1_i386.deb <em>directorio_destino</em>
o navegando con el comando mc</pre>
<p>Del contenido del .deb lo que nos interesa es el modulo (.so) para trabajarlo de la misma forma como en el tarball (explicado mas arriba).</p>
<p>Enlaces de interés:</p>
<ul>
<li><a href="//fabforce.net/downloadfile.php?iddownloadfile=2" target="_blank">http://fabforce.net/downloadfile.php?iddownloadfile=2</a></li>
<li><a href="//kylixlibs.sourceforge.net/down.html" target="_blank">http://kylixlibs.sourceforge.net/down.html</a></li>
</ul>
<p>Nota:</p>
<ul>
<li>Ha sido probado en Debian 4 (etch) y 5 (lenny).</li>
<li>El comando ar pertenece al paquete <a title="Repositorio debian" href="http://packages.debian.org/dpkg-dev" target="_blank">dpkg-dev</a>.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2009/06/21/dbdesigner-en-debian/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">75</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>Synergy : compartiendo KM</title>
		<link>https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/</link>
					<comments>https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/#respond</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Tue, 24 Mar 2009 19:09:28 +0000</pubDate>
				<category><![CDATA[sotd]]></category>
		<category><![CDATA[Uncategorized]]></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 :P) el programita.&#8230; <a href="https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/" class="more-link">Continúa leyendo <span class="screen-reader-text">Synergy : compartiendo&#160;KM</span></a>]]></description>
										<content:encoded><![CDATA[<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 :P) 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 :P), etc.).</p>
<p>He preparado unas imágenes que permitirán entender mas rápidamente que es y como se comporta.</p>
<figure data-shortcode="caption" id="attachment_49" aria-describedby="caption-attachment-49" style="width: 470px" class="wp-caption alignnone"><img data-attachment-id="49" data-permalink="https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/soho21/" data-orig-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png" data-orig-size="470,314" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="soho" data-image-description="" data-image-caption="&lt;p&gt;Equipo linux y windows compartiendo teclado y mouse&lt;/p&gt;
" data-medium-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png?w=300" data-large-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png?w=470" class="size-full wp-image-49" title="soho" src="https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png?w=730" alt="Equipo linux y windows compartiendo teclado y mouse"   srcset="https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png 470w, https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png?w=150&amp;h=100 150w, https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png?w=300&amp;h=200 300w" sizes="(max-width: 470px) 100vw, 470px" /><figcaption id="caption-attachment-49" class="wp-caption-text">Equipo Linux y Windows compartiendo teclado y mouse</figcaption></figure>
<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>
<figure data-shortcode="caption" id="attachment_50" aria-describedby="caption-attachment-50" style="width: 470px" class="wp-caption alignnone"><strong><strong><img data-attachment-id="50" data-permalink="https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/kvm_dot1/" data-orig-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png" data-orig-size="470,399" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="kvm_dot1" data-image-description="" data-image-caption="&lt;p&gt;kvm &amp;#8211; keyboard, video y mouse&lt;/p&gt;
" data-medium-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png?w=300" data-large-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png?w=470" class="size-full wp-image-50" title="kvm_dot1" src="https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png?w=730" alt="kvm - keyboard, video y mouse"   srcset="https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png 470w, https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png?w=150&amp;h=127 150w, https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png?w=300&amp;h=255 300w" sizes="(max-width: 470px) 100vw, 470px" /></strong></strong><figcaption id="caption-attachment-50" class="wp-caption-text">kvm - keyboard, video y mouse</figcaption></figure>
<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>
<figure data-shortcode="caption" id="attachment_53" aria-describedby="caption-attachment-53" style="width: 470px" class="wp-caption alignnone"><strong><strong><img loading="lazy" data-attachment-id="53" data-permalink="https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/xinerama2/" data-orig-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png" data-orig-size="470,352" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="xinerama2" data-image-description="" data-image-caption="&lt;p&gt;xinerama&lt;/p&gt;
" data-medium-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png?w=300" data-large-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png?w=470" class="size-full wp-image-53" title="xinerama2" src="https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png?w=730" alt="xinerama"   srcset="https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png 470w, https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png?w=150&amp;h=112 150w, https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png?w=300&amp;h=225 300w" sizes="(max-width: 470px) 100vw, 470px" /></strong></strong><figcaption id="caption-attachment-53" class="wp-caption-text">xinerama</figcaption></figure>
<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>
<figure data-shortcode="caption" id="attachment_56" aria-describedby="caption-attachment-56" style="width: 470px" class="wp-caption alignnone"><img loading="lazy" data-attachment-id="56" data-permalink="https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/fundacite1/" data-orig-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png" data-orig-size="470,55" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="fundacite1" data-image-description="" data-image-caption="&lt;p&gt;cuatro monitores en linea&lt;/p&gt;
" data-medium-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png?w=300" data-large-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png?w=470" class="size-full wp-image-56" title="fundacite1" src="https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png?w=730" alt="cuatro monitores en linea"   srcset="https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png 470w, https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png?w=150&amp;h=18 150w, https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png?w=300&amp;h=35 300w" sizes="(max-width: 470px) 100vw, 470px" /><figcaption id="caption-attachment-56" class="wp-caption-text">cuatro monitores en linea</figcaption></figure>
<p>Otro caso mas complejo pudiera ser el siguiente.</p>
<figure data-shortcode="caption" id="attachment_57" aria-describedby="caption-attachment-57" style="width: 362px" class="wp-caption alignnone"><img loading="lazy" data-attachment-id="57" data-permalink="https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/iutlv21/" data-orig-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png" data-orig-size="362,250" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="iutlv21" data-image-description="" data-image-caption="&lt;p&gt;Esquema mas complejo de ordenacion de monitores&lt;/p&gt;
" data-medium-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png?w=300" data-large-file="https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png?w=362" class="size-full wp-image-57" title="iutlv21" src="https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png?w=730" alt="Esquema mas complejo de ordenacion de monitores"   srcset="https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png 362w, https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png?w=150&amp;h=104 150w, https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png?w=300&amp;h=207 300w" sizes="(max-width: 362px) 100vw, 362px" /><figcaption id="caption-attachment-57" class="wp-caption-text">Esquema mas complejo de ordenación de monitores</figcaption></figure>
<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>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2009/03/24/synergy-compartiendo-km/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">34</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2009/03/soho21.png" medium="image">
			<media:title type="html">soho</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2009/03/kvm_dot1.png" medium="image">
			<media:title type="html">kvm_dot1</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2009/03/xinerama2.png" medium="image">
			<media:title type="html">xinerama2</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2009/03/fundacite1.png" medium="image">
			<media:title type="html">fundacite1</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2009/03/iutlv21.png" medium="image">
			<media:title type="html">iutlv21</media:title>
		</media:content>
	</item>
		<item>
		<title>Semana de trabajo interesante</title>
		<link>https://dvst.wordpress.com/2009/01/31/semana-de-trabajo-interesante/</link>
					<comments>https://dvst.wordpress.com/2009/01/31/semana-de-trabajo-interesante/#respond</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Sat, 31 Jan 2009 20:47:03 +0000</pubDate>
				<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,&#8230; <a href="https://dvst.wordpress.com/2009/01/31/semana-de-trabajo-interesante/" class="more-link">Continúa leyendo <span class="screen-reader-text">Semana de trabajo&#160;interesante</span></a>]]></description>
										<content:encoded><![CDATA[<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 :D. 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 :).</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] <a href="http://ubuntulife.wordpress.com/2007/03/23/compilar-tora-con-soporte-de-oracle/" rel="nofollow">http://ubuntulife.wordpress.com/2007/03/23/compilar-tora-con-soporte-de-oracle/</a></p>
<p>A pesar que esto es solo «un monton de caracteres», quiero agradecer por estar ahí y compartirlos.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2009/01/31/semana-de-trabajo-interesante/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">27</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;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>https://dvst.wordpress.com/2008/06/16/dia-de-descarga-de-mozilla-firefox/</link>
					<comments>https://dvst.wordpress.com/2008/06/16/dia-de-descarga-de-mozilla-firefox/#respond</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Mon, 16 Jun 2008 13:14:11 +0000</pubDate>
				<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&#8230; <a href="https://dvst.wordpress.com/2008/06/16/dia-de-descarga-de-mozilla-firefox/" class="more-link">Continúa leyendo <span class="screen-reader-text">Día de descarga de Mozilla&#160;Firefox</span></a>]]></description>
										<content:encoded><![CDATA[<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 :P.</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>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2008/06/16/dia-de-descarga-de-mozilla-firefox/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">26</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>Primeros screencast de tutoriales de Catalyst</title>
		<link>https://dvst.wordpress.com/2008/05/07/primeros-screencast-de-tutoriales-de-catalyst/</link>
					<comments>https://dvst.wordpress.com/2008/05/07/primeros-screencast-de-tutoriales-de-catalyst/#comments</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Wed, 07 May 2008 21:53:03 +0000</pubDate>
				<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&#8230; <a href="https://dvst.wordpress.com/2008/05/07/primeros-screencast-de-tutoriales-de-catalyst/" class="more-link">Continúa leyendo <span class="screen-reader-text">Primeros screencast de tutoriales de&#160;Catalyst</span></a>]]></description>
										<content:encoded><![CDATA[<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>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2008/05/07/primeros-screencast-de-tutoriales-de-catalyst/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">25</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>
	</item>
		<item>
		<title>Catalyst, el framework web elegante.</title>
		<link>https://dvst.wordpress.com/2008/04/23/catalyst-el-framework-web-elegante/</link>
					<comments>https://dvst.wordpress.com/2008/04/23/catalyst-el-framework-web-elegante/#comments</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Wed, 23 Apr 2008 18:23:43 +0000</pubDate>
				<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&#8216;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.&#8230; <a href="https://dvst.wordpress.com/2008/04/23/catalyst-el-framework-web-elegante/" class="more-link">Continúa leyendo <span class="screen-reader-text">Catalyst, el framework web&#160;elegante.</span></a>]]></description>
										<content:encoded><![CDATA[<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>&#8216;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: <a href="http://mi.dominio.com/mantenimiento/empleado/11222333/editar" rel="nofollow">http://mi.dominio.com/mantenimiento/empleado/11222333/editar</a> (Basadas en segmentos) en vez de <a href="http://mi.dominio.com/mantenimiento/empleado.cgi?cedula=11222333&#038;operacion=editar" rel="nofollow">http://mi.dominio.com/mantenimiento/empleado.cgi?cedula=11222333&#038;operacion=editar</a> (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 />
«CPAN es el lenguaje, perl es sólo la sintaxis» 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>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2008/04/23/catalyst-el-framework-web-elegante/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">24</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;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>https://dvst.wordpress.com/2008/04/15/script-generador-de-trigger-para-auditoria-en-postgres/</link>
					<comments>https://dvst.wordpress.com/2008/04/15/script-generador-de-trigger-para-auditoria-en-postgres/#comments</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Tue, 15 Apr 2008 17:43:39 +0000</pubDate>
				<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&#8230; <a href="https://dvst.wordpress.com/2008/04/15/script-generador-de-trigger-para-auditoria-en-postgres/" class="more-link">Continúa leyendo <span class="screen-reader-text">script generador de trigger para auditoría en&#160;Postgres</span></a>]]></description>
										<content:encoded><![CDATA[<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 «row» esté marcada.</li>
<li>En el campo «trigger» 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 «DELETE» 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>
]]></content:encoded>
					
					<wfw:commentRss>https://dvst.wordpress.com/2008/04/15/script-generador-de-trigger-para-auditoria-en-postgres/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">23</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;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>https://dvst.wordpress.com/2007/08/12/crear-imagen-disabled-like-para-ser-usada-con-css-estado-de-botones/</link>
					<comments>https://dvst.wordpress.com/2007/08/12/crear-imagen-disabled-like-para-ser-usada-con-css-estado-de-botones/#respond</comments>
		
		<dc:creator><![CDATA[dvst]]></dc:creator>
		<pubDate>Sun, 12 Aug 2007 18:36:54 +0000</pubDate>
				<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 «modo» 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&#8230; <a href="https://dvst.wordpress.com/2007/08/12/crear-imagen-disabled-like-para-ser-usada-con-css-estado-de-botones/" class="more-link">Continúa leyendo <span class="screen-reader-text">Crear imagen disabled-like para ser usada con CSS (estado de&#160;botones)</span></a>]]></description>
										<content:encoded><![CDATA[<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 «modo» 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 «disabled», 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="https://dvst.wordpress.com/wp-content/uploads/2007/08/css-img-disabled-add.png" title="boton de agregar"><img src="https://dvst.wordpress.com/wp-content/uploads/2007/08/css-img-disabled-add.png?w=730" alt="boton de agregar" /></a>  y necesito que el resutado sea:<br />
<a href="https://dvst.wordpress.com/wp-content/uploads/2007/08/add-result.png" title="boton de agregar con gris, resultado"><img src="https://dvst.wordpress.com/wp-content/uploads/2007/08/add-result.png?w=730" 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="https://dvst.wordpress.com">https://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 &#8211;<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>«</strong></font><font color="#ff00ff">Imagen: </font><font color="#a020f0">$file</font><font color="#ff00ff"> terminada </font><font color="#a52a2a"><strong>«</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(«/img/icons/add.png») ;<br />
background-repeat : no-repeat ;<br />
background-position : 6px -16px ;<br />
padding-left : 25px ;<br />
}</p>
<p><a href="https://dvst.wordpress.com/wp-content/uploads/2007/08/estado_botones.gif" title="estado botones formulario, enabled/disabled"><img src="https://dvst.wordpress.com/wp-content/uploads/2007/08/estado_botones.gif?w=730" 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>
]]></content:encoded>
					
					<wfw:commentRss>https://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>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">17</post-id>
		<media:content url="https://0.gravatar.com/avatar/33e7d82730cd632e8ccf7aa353978a289466adb0b9478654ec59506d6b3f27b7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dvst</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2007/08/css-img-disabled-add.png" medium="image">
			<media:title type="html">boton de agregar</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2007/08/add-result.png" medium="image">
			<media:title type="html">boton de agregar con gris, resultado</media:title>
		</media:content>

		<media:content url="https://dvst.wordpress.com/wp-content/uploads/2007/08/estado_botones.gif" medium="image">
			<media:title type="html">estado botones formulario, enabled/disabled</media:title>
		</media:content>
	</item>
	</channel>
</rss>
