<?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/"
	>

<channel>
	<title>Open Minded &#187; Software Libre</title>
	<atom:link href="http://nacho.larrateguy.com.ar/category/software-libre/feed/" rel="self" type="application/rss+xml" />
	<link>http://nacho.larrateguy.com.ar</link>
	<description>lo que pueda decir, que no se haya dicho ya...</description>
	<lastBuildDate>Wed, 09 Nov 2011 13:35:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Traducir un archivo PO con Google Translator y Python</title>
		<link>http://nacho.larrateguy.com.ar/2010/02/22/traducir-archivo-po-python/</link>
		<comments>http://nacho.larrateguy.com.ar/2010/02/22/traducir-archivo-po-python/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 12:27:30 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[Código Experimental]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=400</guid>
		<description><![CDATA[Mediante el uso de POedit, uno puedo crear traducciones para internacionalización sobre un archivo base, el cuál contiene las cadenas de texto de cierto software. Sin embargo si las cadenas son muchas, podemos hacer uso de alguna herramienta de traducción, y limitarnos a luego revisar y encontrar la traducción más adecuada para el contexto en [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://nacho.larrateguy.com.ar/wp-content/uploads/HLIC/e4a68e0fa541a98b68c918e92ada95bc.jpg" alt="" width="263" height="245" />Mediante el uso de POedit, uno puedo crear traducciones para internacionalización sobre un archivo base, el cuál contiene las cadenas de texto de cierto software. Sin embargo si las cadenas son muchas, podemos hacer uso de alguna herramienta de traducción, y limitarnos a luego revisar y encontrar la traducción más adecuada para el contexto en el que se encuentra cada texto.</p>
<p>Particularmente necesitaba traducir un tema de WordPress que traía su propio archivo .po en inglés (en-EN.po). Hice un pequeño script en Python que hace uso de <a href="http://code.google.com/p/py-gtranslate">py-translate</a>. Este módulo hace uso de la API de Google Translate. Quizá a alguno le resulte útil o pueda adaptarlo a sus necesidades (ya que está todo harcodeado dentro <img src='http://nacho.larrateguy.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ).</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># coding=utf-8</span>
<span style="color: #ff7700;font-weight:bold;">import</span> gtrans
&nbsp;
fo = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;en_EN.po&quot;</span>,<span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span>
fi = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;es_ES.po&quot;</span>,<span style="color: #483d8b;">&quot;w&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> fo:
    <span style="color: #ff7700;font-weight:bold;">if</span> line.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;msgid&quot;</span><span style="color: black;">&#41;</span> == <span style="color: #ff4500;">0</span>:
        cad = gtrans.<span style="color: black;">translate</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;en&quot;</span>,<span style="color: #483d8b;">&quot;es&quot;</span>,line.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;">#print line.encode(&quot;utf-8&quot;),</span>
        fi.<span style="color: black;">write</span><span style="color: black;">&#40;</span>line.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        fi.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;msgstr <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>+cad.<span style="color: black;">rstrip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> line.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;msgstr&quot;</span><span style="color: black;">&#41;</span> == <span style="color: #ff4500;">0</span>:
        <span style="color: #ff7700;font-weight:bold;">pass</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #808080; font-style: italic;">#print line.encode(&quot;utf-8&quot;),</span>
        fi.<span style="color: black;">write</span><span style="color: black;">&#40;</span>line.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
fo.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
fi.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Sé que Mancho hizo algo parecido en PHP. Apenas pueda lo enlazo.<br />
<a href="http://www.manchoweb.com.ar/automatizar-la-traduccion-de-un-archivo-po-i18n/trackback">Enlace al artículo de Mancho</a></p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2010/02/22/traducir-archivo-po-python/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eliminar contenido XSS (cross site scripting)</title>
		<link>http://nacho.larrateguy.com.ar/2009/09/21/eliminar-contenido-xss-cross-site-scripting/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/09/21/eliminar-contenido-xss-cross-site-scripting/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 14:31:49 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[quick-fixes]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=338</guid>
		<description><![CDATA[Mini post: Encontré en uno de los sitios web que mantengo, un código de XSS (cross site scripting). Aún no determiné el punto de entrada, pero me enteré gracias a un mail de Google. Con grep y sed es bastante sencillo eliminarlo, ni que hablar con un script en Python Con grep busco los archivos, [...]]]></description>
			<content:encoded><![CDATA[<p>Mini post:</p>
<p>Encontré en uno de los sitios web que mantengo, un código de XSS (cross site scripting). Aún no determiné el punto de entrada, pero me enteré gracias a un mail de Google.</p>
<p>Con grep y sed es bastante sencillo eliminarlo, ni que hablar con un script en Python <img src='http://nacho.larrateguy.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p>Con grep busco los archivos, y con xargs convierto la salida el pipe en un parámetro para sed, y con sed reemplazo el código. Como el código insertado está al final del archivo, la expresión regular hubiese podido ser mucho más sencilla.</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">grep ./ -l  -R -e &quot;http://reycross.com/lib/index.php&quot;  | xargs sed -i  -e &quot;s/&lt;iframe.*reycross.*&gt;.*&lt;\/iframe&gt;/ /g&quot;</pre></div></div>

<p>El código a eliminar era este (no agrego los tags de apertura a propósito):</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">iframe
src=&quot;http://reycross.com/lib/index.php&quot; width=0 height=0 style=&quot;hidden&quot; framebord
er=0 marginheight=0 marginwidth=0 scrolling=no
iframe</pre></div></div>

<p>¿Alguien que le haya ocurrido esto?</p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/09/21/eliminar-contenido-xss-cross-site-scripting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Drivers de SIS 771/671 para Xorg 1.6 -Mandriva 2009.1, Ubuntu Jaunty 9.04</title>
		<link>http://nacho.larrateguy.com.ar/2009/07/11/drivers-de-sis-771671-para-xorg-1-6-mandriva-2009-1-ubuntu-jaunty-9-04/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/07/11/drivers-de-sis-771671-para-xorg-1-6-mandriva-2009-1-ubuntu-jaunty-9-04/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 20:51:49 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[linux drivers]]></category>
		<category><![CDATA[sis 771/671]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=325</guid>
		<description><![CDATA[La versión corta para los impacientes y cansados de probar, aquí está, el driver para la placa de video con chip SIS 771/671 para Xorg 1.6, Ubuntu Jaunty Jackalope 9.04. Generalmente las computadoras que traen estas placas son las Olivetti 520 y algunas Bangho. Publicidad Aquí están los drivers binarios (sisimedia compilados por Mandriva) xorg-driver-sisimedia_0.9-1_i386 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="SIS 771/671 logo" src="http://nacho.larrateguy.com.ar/wp-content/uploads/HLIC/img.article.pchome.net/00/16/37/54/sis771s28.jpg" alt="" width="217" height="144" />La versión corta para los impacientes y cansados de probar, aquí está, el driver para la placa de video con chip SIS 771/671 para Xorg 1.6, Ubuntu Jaunty Jackalope 9.04. Generalmente las computadoras que traen estas placas son las Olivetti 520 y algunas Bangho.</p>
<div style="width:320px;padding:10px; border:0px solid black;clear:both;">
<strong>Publicidad</strong><br />
<script type="text/javascript"><!--
google_ad_client = "pub-5910408294814102";
/* medio_post_300x250, creado 19/02/08 */
google_ad_slot = "3764716884";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<p>Aquí están los drivers binarios (sisimedia compilados por Mandriva)<br />
<a href="http://nacho.larrateguy.com.ar/wp-content/uploads/2009/07/xorg-driver-sisimedia_0.9-1_i386.deb">xorg-driver-sisimedia_0.9-1_i386</a></p>
<p>Agregar o modificar lo siguiente en /etc/X11/xorg.conf</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Section <span style="color: #ff0000;">&quot;Device&quot;</span>
    Driver <span style="color: #ff0000;">&quot;sisimedia&quot;</span>
EndSection</pre></div></div>

<p>Luego reiniciar el servidor X.</p>
<p>Si querés saber que otras opciones tenés y como llegamos a estos drivers seguí leyendo.<br />
Fuente: <a href="http://www.linuxconsulting.ro/xorg-drivers/">http://www.linuxconsulting.ro/xorg-drivers/</a></p>
<p></p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/07/11/drivers-de-sis-771671-para-xorg-1-6-mandriva-2009-1-ubuntu-jaunty-9-04/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Combinación de comandos útiles para Linux</title>
		<link>http://nacho.larrateguy.com.ar/2009/06/02/combinacion-de-comandos-utiles-para-linux/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/06/02/combinacion-de-comandos-utiles-para-linux/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 17:14:15 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Probando herramientas]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[snippets]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=279</guid>
		<description><![CDATA[En este post voy a ir agregando comandos útiles que vamos encontrando entre los conocidos (y los que aporten), que permiten realizar tareas desde la consola sin tener que recurrir a programas sofisticados. Confirmar todas las acciones que pregunte un programa interactivo. $ yes &#124; programa devuelve una &#8220;y&#8221; cada vez que el programa quiere [...]]]></description>
			<content:encoded><![CDATA[<p>En este post voy a ir agregando comandos útiles que vamos encontrando entre los conocidos (y los que aporten), que permiten realizar tareas desde la consola sin tener que recurrir a programas sofisticados.</p>
<h2>Confirmar todas las acciones que pregunte un programa interactivo.</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">yes</span> <span style="color: #000000; font-weight: bold;">|</span> programa</pre></div></div>

<p>devuelve una &#8220;y&#8221; cada vez que el programa quiere leer de la entrada estandar</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">yes</span> s <span style="color: #000000; font-weight: bold;">|</span> programa</pre></div></div>

<p>devuelve una &#8220;s&#8221; cada vez que el programa quiere leer de la entrada estandar</p>
<h2>Encontrar archivos duplicados y conservar uno.</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">yes</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> fdupes <span style="color: #660033;">-d</span> .<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>fdupes encuentra mediante md5 archivos duplicados en la carpeta indicada. El parámetro d, le dice que borre el resto conservando el que le indiquemos. Mediante &#8220;yes 1&#8243; le decimos que conserve el primero que encuentra. Cuidado con md5 <img src='http://nacho.larrateguy.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<h2>Generar un PDF con varias páginas en una sola partiendo de otro PDF.</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ pdfnup salida.pdf <span style="color: #660033;">--nup</span> 2x5 <span style="color: #660033;">--orient</span> portrait <span style="color: #660033;">--frame</span> <span style="color: #c20cb9; font-weight: bold;">true</span></pre></div></div>

<p>Dai me contó acerca de una aplicación llamada<strong> pdfnup</strong>. Permite hacer lo que uno quiera con un PDF, como recortarlo (cortarle los márgenes excesivos), agrupar en disposición de tabla varias páginas dentro de cada una (para poder imprimir por ejemplo 2&#215;3 páginas or carilla). Tiene muchas opciones, pero a la vez configuradas por defecto para no necesitar agregar muchas cosas. El archivo de salida se llamará igual que el de entrada más la disposición, por ejemplo &#8220;salida-2&#215;5.pdf&#8221;.</p>
<h2>Recortar varias imágenes y convertirlas en PDF (una por página).</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ convert <span style="color: #660033;">-crop</span> <span style="color: #ff0000;">'750x350+110+200'</span> +repage resp?<span style="color: #000000; font-weight: bold;">/*</span>.png salida.pdf</pre></div></div>

<p>convert es una de las aplicaciones de ImageMagick. Conserva los originales, permitiendo mientras convertimos de formato, modificarle brillo, contraste, recortarla, rotarla, y muchos etcéteras. Si quisieramos que convierta cada imagen en un archivo separado, bastaría con combinarlo con</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">find</span> .<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-iname</span> <span style="color: #ff0000;">'*.png'</span> <span style="color: #660033;">-exec</span> convert <span style="color: #ff0000;">'{}'</span> <span style="color: #ff0000;">'{}.pdf'</span> <span style="color: #ff0000;">';'</span></pre></div></div>

<p>donde {} representa el nombre del archivo y &#8216;;&#8217; finaliza el comando.</p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/06/02/combinacion-de-comandos-utiles-para-linux/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Cantidad de líneas visibles en una terminal</title>
		<link>http://nacho.larrateguy.com.ar/2009/05/13/cantidad-de-lineas-visibles-en-una-terminal/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/05/13/cantidad-de-lineas-visibles-en-una-terminal/#comments</comments>
		<pubDate>Wed, 13 May 2009 23:59:40 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=275</guid>
		<description><![CDATA[Mini post: Estaba corriendo jBoss y la salida de logging quería ir leyéndola en la consola. Si bien voy guardando logging en un archivo, me molestaba que se pudieron ver &#8220;pocas&#8221; líneas en la Gnome Terminal. Buscando entre las preferencias encontré la solapa Desplazamiento, donde podía elegiar la cantidad de líneas. Una curiosidad tonta, pero [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><em><strong>Mini post</strong></em>: Estaba corriendo jBoss y la salida de logging quería ir leyéndola en la consola. Si bien voy guardando logging en un archivo, me molestaba que se pudieron ver &#8220;pocas&#8221; líneas en la Gnome Terminal.<br />
Buscando entre las preferencias encontré la solapa Desplazamiento, donde podía elegiar la cantidad de líneas. Una curiosidad tonta, pero que no había visto en 4 años de uso Gnome.<br />
<a href="http://nacho.larrateguy.com.ar/wp-content/uploads/2009/05/editando-perfil-consola.png"><img class="aligncenter size-full wp-image-274" title="editando-perfil-consola" src="http://nacho.larrateguy.com.ar/wp-content/uploads/2009/05/editando-perfil-consola.png" alt="editando-perfil-consola" width="526" height="357" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/05/13/cantidad-de-lineas-visibles-en-una-terminal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aprovecha cada núcleo de tu procesador</title>
		<link>http://nacho.larrateguy.com.ar/2009/05/02/aprovecha-cada-nucleo-de-tu-procesador/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/05/02/aprovecha-cada-nucleo-de-tu-procesador/#comments</comments>
		<pubDate>Sat, 02 May 2009 14:55:30 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[customizing]]></category>
		<category><![CDATA[doble núcleo]]></category>
		<category><![CDATA[dual core]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[taskset]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=264</guid>
		<description><![CDATA[Este es un mini post. Si tenés un procesador doble núcleo (intel, amd,dual core, core 2 duo, quad core, etc) o más de un procesador, podés designar procesos a cada uno de estos, para que no interfieran entre ellos. Si bien esta es una tarea del planificado del sistema, uno puede indicarle cómo quiere que [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://nacho.larrateguy.com.ar/wp-content/uploads/2009/05/00_limpito.png" alt="00_limpito" title="00_limpito" width="430" height="255" class="alignright size-full wp-image-265" />Este es un mini post. Si tenés un procesador doble núcleo (<em>intel, amd,dual core, core 2 duo, quad core, etc</em>) o más de un procesador, podés designar procesos a cada uno de estos, para que no interfieran entre ellos. Si bien esta es una tarea del planificado del sistema, uno puede indicarle cómo quiere que trate a algunos proceso (por ejemplo con la utilidad <a href="http://en.wikipedia.org/wiki/Nice_(Unix)">nice</a>). </p>
<p>La idea es mostrarles cómo elegir en cuál núcleo, o en cuáles núcleos quiero que se ejecute un proceso. Esto se llama afinidad o <em>affinity</em> en inglés.</p>
<p>La utilidad que me permite hacer esto se conoce como <a href="http://linux.die.net/man/1/taskset">taskset</a> y permite tanto arrancar un proceso en los determinados procesadores de nuestro sistema, así como también cambiar su afinidad luego de estar corriendo estos (mediante el PID).</p>
<p>Para elegir los procesadores basta con pensar en cada procesador (o núcleo) como un bit en la siguiente máscara:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">0 0 0 0 0 0 0 1      Procesador 1
0 0 0 0 0 0 1 0      Procesador 2
0 0 0 0 0 1 0 0      Procesador 3
0 0 0 0 1 0 0 0      Procesador 4
&nbsp;
0 0 0 0 0 0 1 1      Procesador 1,2
0 0 0 0 0 1 1 0      Procesador 2,3</pre></div></div>

<p>Como los valores deben ser escritos en hexa, el comando se termina ejecutando como:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">Para el núcleo 2:
taskset 0x00000002 ./proceso</pre></div></div>

<p><img src="http://nacho.larrateguy.com.ar/wp-content/uploads/2009/05/01_un_core.png" alt="01_un_core" title="01_un_core" width="424" height="255" class="aligncenter size-full wp-image-266" /></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">Para el núcleo 1:
taskset 0x00000001 ./proceso</pre></div></div>

<p><img src="http://nacho.larrateguy.com.ar/wp-content/uploads/2009/05/02_el_otro_core.png" alt="02_el_otro_core" title="02_el_otro_core" width="425" height="252" class="aligncenter size-full wp-image-267" /></p>
<p>Espero haya sido útil <img src='http://nacho.larrateguy.com.ar/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/05/02/aprovecha-cada-nucleo-de-tu-procesador/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Autocompletado en bash personalizado (para tus programas!)</title>
		<link>http://nacho.larrateguy.com.ar/2009/04/09/autocompletado-bash-personalizado-programas/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/04/09/autocompletado-bash-personalizado-programas/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 23:32:20 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Probando herramientas]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=218</guid>
		<description><![CDATA[Bash incorpora una característica que permite el autocompletado en una terminal de los parámetros que acepta un programa. Para esto utiliza un script con diversas funciones, y permite que incorporando un archivo y ciertos comandos, podamos definir como se autcompletarán los programas que querramos. Por ejemplo, tenemos hecho un programa con Milton y Daiana, que [...]]]></description>
			<content:encoded><![CDATA[<p>Bash incorpora una característica que permite el autocompletado en una terminal de los parámetros que acepta un programa. Para esto utiliza un script con diversas funciones, y permite que incorporando un archivo y ciertos comandos, podamos definir como se autcompletarán los programas que querramos.</p>
<p>Por ejemplo, tenemos hecho un programa con Milton y Daiana, que acepta varios parámetros. Hay algunos que no los usamos hace tiempo, y para no estar consultando la ayuda, pensamos que estaría bueno que se autocompletara.</p>
<p>El programa está hecho en mono, y se ejecuta haciendo</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">$ ./programa.exe</pre></div></div>

<p>o bien</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ mono programa.exe</pre></div></div>

<p>Aquí el archivo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Author: Nacho</span>
<span style="color: #666666; font-style: italic;"># /etc/bash_completion.d/programa</span>
<span style="color: #666666; font-style: italic;"># copy it there and enjoy magic, compadre!</span>
<span style="color: #666666; font-style: italic;">#</span>
_programa<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> 
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #7a0874; font-weight: bold;">local</span> cur prev opts
&nbsp;
    <span style="color: #007800;">COMPREPLY</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
    <span style="color: #007800;">cur</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${COMP_WORDS[COMP_CWORD]}</span>&quot;</span>
    <span style="color: #007800;">prev</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${COMP_WORDS[COMP_CWORD-1]}</span>&quot;</span>
    <span style="color: #007800;">opts</span>=<span style="color: #ff0000;">&quot;-h -? --help -r --reemp -e -f --extrae-flex -c -g -d --vft&quot;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${cur}</span>&quot;</span> == -<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #007800;">COMPREPLY</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">compgen</span> <span style="color: #660033;">-W</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${opts}</span>&quot;</span> <span style="color: #660033;">--</span> <span style="color: #800000;">${cur}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">else</span>
        _filedir  <span style="color: #ff0000;">'@(xml|sql)'</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-F</span> _programa <span style="color: #007800;">$filenames</span> programa.exe
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-F</span> _command <span style="color: #007800;">$filenames</span> mono</pre></td></tr></table></div>

<p>La línea 12 indica las opciones que acepta el programa.<br />
La línea 17 indica que se listen (si no es que estoy intentando poner alguna opción) los directorios y archivos pero los XML y SQL únicamente.<br />
La línea 20 indica bajo que nombre de ejecutable se completará y qué función es la encargada de tal tarea.<br />
La línea 21 es la que indica que &#8220;mono&#8221; es un &#8220;command&#8221; al igual que otros definidos (sudo, fakeroot, nohup) que requieren autocompletado luego para el programa que le sigue.</p>
<p>En vez de listar la línea 12, se podría haber hecho que el programa en cuestión devuelva por defecto la lista de los parámetros que acepta. La forma de hacer esto sería reemplazar esa línea por:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>12
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">    <span style="color: #007800;">opts</span>=<span style="color: #000000; font-weight: bold;">`</span>mono programa.exe -p<span style="color: #000000; font-weight: bold;">`</span></pre></td></tr></table></div>

<p>Python tiene un módulo para realizar esto en forma más sencilla: <a href="http://furius.ca/optcomplete/">optcomplete</a>.</p>
<p>Espero les sea de utilidad!</p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/04/09/autocompletado-bash-personalizado-programas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retornando arrays con PlPython</title>
		<link>http://nacho.larrateguy.com.ar/2009/04/09/retornando-arrays-con-plpython/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/04/09/retornando-arrays-con-plpython/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 20:01:35 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Probando herramientas]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[bases de datos]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=224</guid>
		<description><![CDATA[PlPython es un lenguaje procedural (PL) que permite utilizar Python en una base de datos PostreSQL para poder escribir los procedimientos almacenados. En realidad actualmente es un lenguaje no confiado (untrusted). Se puede leer más aquí: PlPythonu. Si bien Python maneja listas, diccionarios y otras estructuras de datos con bastante simpleza, no encontramos una manera [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.postgresql.org/docs/8.2/interactive/plpython.html">PlPython</a> es un lenguaje procedural (PL) que permite utilizar Python en una base de datos PostreSQL para poder escribir los procedimientos almacenados. En realidad actualmente es un lenguaje no confiado (untrusted). Se puede leer más aquí: <a href="http://www.python.com.ar/moin/PlPython">PlPythonu</a>.</p>
<p>Si bien Python maneja listas, diccionarios y otras estructuras de datos con bastante simpleza, no encontramos una manera de hacer casting a un array o vector de PostgreSQL. Particularmente, en el ejemplo debajo, se puede ver que implementamos un wrapper para poder utilizar el motor de expresiones regulares de Python, dentro de la DB, ya que tiene algunas cuestiones más avanzadas que el que trae PgSQL por defecto.</p>
<p>Lo que hicimos fue crear una cadena, con la representación serializada de un Array y dejar que haga el casting PgSQL. Les dejo el código para que lo adapten a sus necesidades. En este caso devuelve un vector de TEXT (TEXT[]) con la idea de emular el resultado devuelto por <em>regexp_matches()</em> en <em>plsql</em>. la signatura de la función es esta:</p>

<div class="wp_syntax"><div class="code"><pre class="plsql" style="font-family:monospace;">regexp_python<span style="color: #00F;">&#40;</span>text<span style="color: #00F;">,</span>text<span style="color: #00F;">&#41;</span>  RETURNS text<span style="color: #00F;">&#91;</span><span style="color: #00F;">&#93;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="plsql" style="font-family:monospace;"><span style="color: #080; font-style: italic;">-- Function: regexp_python(text, text)</span>
&nbsp;
<span style="color: #080; font-style: italic;">-- DROP FUNCTION regexp_python(text, text);</span>
&nbsp;
<span style="color: #00F;">CREATE</span> <span style="color: #00F;">OR</span> <span style="color: #000;">REPLACE</span> <span style="color: #00F;">FUNCTION</span> regexp_python<span style="color: #00F;">&#40;</span>p_str text<span style="color: #00F;">,</span> p_ereg text<span style="color: #00F;">&#41;</span>
  RETURNS TEXT<span style="color: #00F;">&#91;</span><span style="color: #00F;">&#93;</span> <span style="color: #00F;">AS</span>
$BODY$import re
import string
m <span style="color: #00F;">=</span> re<span style="color: #00F;">.</span>search<span style="color: #00F;">&#40;</span>p_ereg<span style="color: #00F;">,</span> p_str<span style="color: #00F;">,</span>re<span style="color: #00F;">.</span>I<span style="color: #00F;">&#41;</span>
<span style="color: #00F;">IF</span> m <span style="color: #00F;">IS</span> None<span style="color: #00F;">:</span>
    <span style="color: #00F;">RETURN</span> None
<span style="color: #00F;">ELSE</span><span style="color: #00F;">:</span>
    <span style="color: #00F;">RETURN</span> <span style="color: #00F;">&#40;</span><span style="color: #F00;">'{&quot;'</span><span style="color: #00F;">+</span><span style="color: #F00;">'&quot;,&quot;'</span><span style="color: #00F;">.</span>join<span style="color: #00F;">&#40;</span><span style="color: #00F;">&#91;</span>re<span style="color: #00F;">.</span>escape<span style="color: #00F;">&#40;</span>x<span style="color: #00F;">&#41;</span> <span style="color: #00F;">FOR</span> x <span style="color: #00F;">IN</span> m<span style="color: #00F;">.</span>groups<span style="color: #00F;">&#40;</span><span style="color: #F00;">'NULL'</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">&#93;</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">+</span><span style="color: #F00;">'&quot;}'</span><span style="color: #00F;">&#41;</span><span style="color: #00F;">.</span><span style="color: #000;">REPLACE</span><span style="color: #00F;">&#40;</span><span style="color: #F00;">'&quot;NULL&quot;'</span><span style="color: #00F;">,</span><span style="color: #F00;">'NULL'</span><span style="color: #00F;">&#41;</span>$BODY$
  LANGUAGE <span style="color: #F00;">'plpythonu'</span> VOLATILE
  COST <span style="color: #800;">100</span><span style="color: #00F;">;</span>
<span style="color: #00F;">ALTER</span> <span style="color: #00F;">FUNCTION</span> regexp_python<span style="color: #00F;">&#40;</span>text<span style="color: #00F;">,</span> text<span style="color: #00F;">&#41;</span> OWNER <span style="color: #00F;">TO</span> postgres<span style="color: #00F;">;</span></pre></div></div>

<p>Los arrays en PgSQL son serializados como una colección de datos entre llaves:<br />
<strong>{&#8216;text1&#8242;,&#8217;text2&#8242;}</strong>.</p>
<p>Gracias <a href="http://www.miltonpividori.com.ar">Milton</a> y <a href="http://daianamurgan.blogspot.com">Daiana</a> por investigar y aplicar todas estas cosas conmigo <img src='http://nacho.larrateguy.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/04/09/retornando-arrays-con-plpython/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convirtiendo de rm a mp3 usando ffmpeg</title>
		<link>http://nacho.larrateguy.com.ar/2009/04/09/convirtiendo-rm-to-mp-ffmpeg/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/04/09/convirtiendo-rm-to-mp-ffmpeg/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 19:45:16 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Probando herramientas]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[rm]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=225</guid>
		<description><![CDATA[En realidad se puede utilizar para convertir a cualquier formato que soporte ffmpeg. Lo cómodo es que no necesite un archivo fifo y pude hacerlo bastante sencillo y con una sola línea en la consola. find ./ -iname *.rm -exec ffmpeg -i &#34;{}&#34; -acodec libmp3lame -aq 9 &#34;{}.mp3&#34; -y ';' El comando find encuentra los [...]]]></description>
			<content:encoded><![CDATA[<p>En realidad se puede utilizar para convertir a cualquier formato que soporte ffmpeg. Lo cómodo es que no necesite un archivo fifo y pude hacerlo bastante sencillo y con una sola línea en la consola.</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">find ./ -iname *.rm -exec ffmpeg -i &quot;{}&quot; -acodec libmp3lame -aq 9 &quot;{}.mp3&quot; -y ';'</pre></div></div>

<p>El comando <em>find</em> encuentra los archivos, y por cada uno ejecuta <em>ffmpeg&#8230;</em>. Los &#8220;{}&#8221; se reemplazan por el nombre del archivo.</p>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/04/09/convirtiendo-rm-to-mp-ffmpeg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generador de password en PHP</title>
		<link>http://nacho.larrateguy.com.ar/2009/02/11/generador-de-password-en-php/</link>
		<comments>http://nacho.larrateguy.com.ar/2009/02/11/generador-de-password-en-php/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 23:39:06 +0000</pubDate>
		<dc:creator>nacho</dc:creator>
				<category><![CDATA[Aplicaciones Web]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snippets]]></category>

		<guid isPermaLink="false">http://nacho.larrateguy.com.ar/?p=196</guid>
		<description><![CDATA[Un generador de passwords en PHP que escribí rapidito. Para no tener que pensar el problema 2 veces se los dejo. Seguro salta algún pythonero o rubiero (o smalltalkero??) y dice que lo hace mejor y más rápido. Si lo hacen, dejen el código en un comentario para el resto de los internautas (que palabra [...]]]></description>
			<content:encoded><![CDATA[<p>Un generador de passwords en PHP que escribí rapidito. Para no tener que pensar el problema 2 veces se los dejo. Seguro salta algún pythonero o rubiero (o smalltalkero??) y dice que lo hace mejor y más rápido. Si lo hacen, dejen el código en un comentario para el resto de los internautas (que palabra gastada).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">function</span> _generarPassword<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$voc</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">'aeiouAEIOU'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$cons</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'bcdfghjkmnpqrstvwxyzBCDFGHJKMNPQRSTVWXYZ'</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">srand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>double<span style="color: #009900;">&#41;</span><span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">1000000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pass</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">&lt;=</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$n1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$n2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">41</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$pass</span> <span style="color: #339933;">.=</span>  <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$voc</span><span style="color: #339933;">,</span> <span style="color: #000088;">$n1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cons</span><span style="color: #339933;">,</span> <span style="color: #000088;">$n2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$pass</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>]]></content:encoded>
			<wfw:commentRss>http://nacho.larrateguy.com.ar/2009/02/11/generador-de-password-en-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

