<?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>g013m&#039;s Weblog</title>
	<atom:link href="http://blog.g013m.com.ve/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.g013m.com.ve</link>
	<description>Linux, Debian, Perl y algo más ... ;)</description>
	<lastBuildDate>Thu, 19 Aug 2010 19:00:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>App::Perlbrew, probando distintas versiones de Perl de forma fácil</title>
		<link>http://blog.g013m.com.ve/?p=177#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=177#comments</comments>
		<pubDate>Sat, 14 Aug 2010 16:29:34 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=177</guid>
		<description><![CDATA[<p>La mayoría de los sistemas operativos basados en Unix vienen con una versión de Perl instalada, dependiendo de que tan actualizado este el sistema podemos tener la última versión del lenguaje. Por ejemplo en Debian Testing (Squeeze aún) tenemos la versión 5.10.1, en Mac OSX Snow Leopard la versión 5.10.0 (pongo estos 2 ejemplos por que [...]]]></description>
			<content:encoded><![CDATA[<p>La mayoría de los sistemas operativos basados en Unix vienen con una versión de Perl instalada, dependiendo de que tan actualizado este el sistema podemos tener la última versión del lenguaje. Por ejemplo en Debian Testing (Squeeze aún) tenemos la versión 5.10.1, en Mac OSX Snow Leopard la versión 5.10.0 (pongo estos 2 ejemplos por que son los sistemas operativos que uso). Si quisiéramos probar alguna versión más nueva de Perl podríamos instalar desde las fuentes o quizás usando los paquetes .deb en el caso de Debian, pero quizás tengamos algunos problemas con las dependencias y podríamos dañar nuestro sistema base.</p>
<p>Hay una herramienta que facilita la instalación y el manejo de distintas versiones de Perl de forma simultanea en una misma máquina <a href="http://search.cpan.org/perldoc?App::perlbrew">App::Perlbrew</a>. Esta aplicación se encarga de crear un entorno completo de Perl en nuestro directorio home, que podemos manejar sin necesidad de tener permisos de administrador, esto trae muchas ventajas ya que nos permite probar cualquier cosa sin necesidad de utilizar (dañar) nuestro sistema base. Todo lo que instalemos (módulos CPAN) estará dentro de este entorno, las aplicaciones que quisiéramos probar usarán este entorno también, entonces podemos ver el funcionamiento de la misma en distintas versiones de Perl, con distintas versiones de módulos, etc. las posibilidades son muchas. Incluso podremos tener una versión antigua de Perl, quizás la 5.8, ya que existe mucha gente que aún no ha migrado a la 5.10 y así podemos asegurarnos que nuestros programas corran en cualquiera de las distintas versiones de Perl.</p>
<p>La instalación es bastante sencilla, no se necesita permisos de administrador y todo será almacenado en el directorio de nuestro usuario. Lo recomendable para la instalación es obtenerlo directamente desde el sitio del desarrollador:</p>
<p><code> curl -LO http://xrl.us/perlbrew</code></p>
<p>luego darle permisos de ejecución al script:</p>
<p><code>chmod +x perlbrew</code></p>
<p>y finalmente ejecutar el script:</p>
<p><code>./perlbrew install</code></p>
<p>Ya con eso tenemos instalado perlbrew y podemos empezar a usarlo, para las configuraciones básicas ejecutamos el siguiente comando:</p>
<p><code>perlbrew init</code></p>
<p>y seguimos las instrucciones que nos aparecen, que en realidad es agregar algunas variables de entorno al archivo <em>.bashrc</em>. Una vez realizado este paso de configuración, estamos listos para instalar cualquier versión de Perl que necesitemos, por ejemplo:</p>
<p><code>perlbrew install perl-5.12.1</code></p>
<p>luego de esperar que la descargue y configure, podemos hacer uso de esa versión de Perl de la siguiente manera:</p>
<p><code>perlbrew switch perl-5.12.1</code></p>
<p>esto cambiara nuestro entorno, la documentación recomienda que se ejecute el comando <em> hash -r </em> para limpiar el cache de la variable <em>PATH</em>, luego de esto al ejecutar <em> perl -v </em> deberíamos estar trabajando con la versión de Perl recientemente instalada. Todo lo que instalamos usando <a href="http://search.cpan.org">CPAN </a>estará dentro de este entorno.</p>
<p>Si luego queremos &#8220;desactivar&#8221; este entorno podemos ejecutar el comando:</p>
<p><code>perlbrew off</code></p>
<p>y volveremos a nuestra aburrida instalación de Perl del sistema base.</p>
<p>Podemos instalar la cantidad de versiones que queramos, para listar cuales hemos instalado ejecutamos el comando:</p>
<p><code>perlbrew installed</code></p>
<p>Esta es una buena forma de empezar a probar Perl, si es que aún no lo has hecho ya.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=177</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bailando con Perl &#8211; Dancer</title>
		<link>http://blog.g013m.com.ve/?p=165#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=165#comments</comments>
		<pubDate>Wed, 31 Mar 2010 18:18:00 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=165</guid>
		<description><![CDATA[<p>Dancer es un framework web ligero, que nos permite hacer aplicaciones de forma rápida y sencilla. Es una alternativa excelente cuando no quieras escribir los scripts CGI a mano y Catalyst es demasiado engorroso para implementar. Como cualquier otro framework trae un servidor web embebido para hacer pruebas y puede correr con otros servidores web usando [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://perldancer.org/">Dancer</a> es un framework web ligero, que nos permite hacer aplicaciones de forma rápida y sencilla. Es una alternativa excelente cuando no quieras escribir los scripts CGI a mano y Catalyst es demasiado engorroso para implementar. Como cualquier otro framework trae un servidor web embebido para hacer pruebas y puede correr con otros servidores web usando <a href="http://plackperl.org/">PSGI/Plack</a>.</p>
<p>Para instalarlo podemos hacerlo directamente desde CPAN, ejecutando el comando:<br />
<code><br />
sudo cpan Dancer<br />
</code></p>
<p>No hay aún paquetes oficiales para Debian (o derivados), yo hice el paquete y las dependencias que necesita, pueden descargarlos desde aquí:</p>
<p><a href="http://g013m.com.ve/debian/libhttp-server-simple-perl/">libhttp-server-simple-perl</a>, se necesita la versión >=0.42, en Debian aún está la 0.41<br />
<a href="http://g013m.com.ve/debian/libhttp-server-simple-psgi-perl/">libhttp-server-simple-psgi-perl </a><br />
<a href="http://g013m.com.ve/debian/libdancer-perl/">libdancer-perl</a></p>
<p>Luego de tener Dancer instalado, crear una aplicación nueva es tan simple como:<br />
<code><br />
dancer -a miaplicacion<br />
</code></p>
<p>Este comando crea una estructura sencilla de la aplicación, lo siguiente sería modificar las <em>rutas</em> que se van a usar, en este caso eso está en el archivo <em>miaplicacion.pm</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">use</span> Dancer<span style="color: #339933;color: #CCC;">;</span>
&nbsp;
get <span style="color: #ff0000;">'/'</span> <span style="color: #339933;color: #CCC;">=&gt;</span> <span style="color: #000000; font-weight: bold;color: #577A61;">sub</span> <span style="color: #009900;color: #CCC;">&#123;</span>
    <span style="color: #000066;color: #8FB394;">return</span> <span style="color: #ff0000;">'Hola Mundo!'</span>
<span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
get <span style="color: #ff0000;">'/hola/:nombre'</span> <span style="color: #339933;color: #CCC;">=&gt;</span> <span style="color: #000000; font-weight: bold;color: #577A61;">sub</span> <span style="color: #009900;color: #CCC;">&#123;</span>
  <span style="color: #000066;color: #8FB394;">return</span> <span style="color: #ff0000;color: #666666;">&quot;Hola &quot;</span> <span style="color: #339933;color: #CCC;">.</span> params<span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #009900;color: #CCC;">&#123;</span>nombre<span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
dance<span style="color: #339933;color: #CCC;">;</span></pre></td></tr></table></div>

<p>Dancer tiene muchas más opciones, como por ejemplo devolver el contenido en formatos JSON, XML, YAML directamente sin necesidad de procesar o ejecutar acciones distintas (piensa en un webservice que devuelve contenido en JSON para otra aplicación&#8230;), uso de plantillas, manejo de sesiones, etc. Además que se puede integrar con otros módulos de CPAN para lograr aplicaciones más elaboradas.</p>
<p>Una buena opción para aplicaciones sencillas, y sin mucho esfuerzo <img src='http://blog.g013m.com.ve/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=165</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Juego de la vida en Perl</title>
		<link>http://blog.g013m.com.ve/?p=147#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=147#comments</comments>
		<pubDate>Fri, 05 Mar 2010 02:57:41 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=147</guid>
		<description><![CDATA[<p>Revisando algunos archivos guardados de trabajos que hice para las clases en la universidad, conseguí un programa que hice en Perl para un curso que se llamaba Computación Emergente. Es una implementación de el juego de la vida bastante sencilla, lo interesante de esto es que nadie en el curso conocía algo sobre Perl, y todos [...]]]></description>
			<content:encoded><![CDATA[<p>Revisando algunos archivos guardados de trabajos que hice para las clases en la universidad, conseguí un programa que hice en Perl para un curso que se llamaba Computación Emergente. Es una implementación de <a href="http://es.wikipedia.org/wiki/Juego_de_la_vida">el juego de la vida</a> bastante sencilla, lo interesante de esto es que nadie en el curso conocía algo sobre Perl, y todos hicieron la implementación en Matlab, por que según era más fácil para manejar las matrices, y hacer las iteraciones, etc, etc .. así que pensé en hacerlo usando otras herramientas, y esto fue lo que salió, la idea es crear una matriz de N x N y ejecutar todas las reglas o algoritmos en un determinado número de iteraciones. El código quizás se pueda mejorar, pero con esto bastó para sacar 20 en esta asignación <img src='http://blog.g013m.com.ve/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> :</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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;color: #FCFFBA;"><span style="color: #666666; font-style: italic;color: #CDC;">#!/usr/share/bin/perl</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> Modern<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">Perl</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> Math<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">MatrixReal</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
say<span style="color: #ff0000;color: #666666;">&quot;Indique el valor de N, se creara un grid NxN: &quot;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$n</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000066;color: #8FB394;">chomp</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$n</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
say <span style="color: #ff0000;color: #666666;">&quot;Indique la cantidad de iteraciones: &quot;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$iter</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000066;color: #8FB394;">chomp</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$iter</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$x</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$y</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$grid</span> <span style="color: #339933;color: #CCC;">=</span> Math<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">MatrixReal</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">new_random</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$n</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$n</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #009900;color: #CCC;">&#123;</span>bounded_by<span style="color: #339933;color: #CCC;">=&gt;</span><span style="color: #009900;color: #CCC;">&#91;</span><span style="color: #339933;color: #CCC;">-</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #cc66cc;color: #DDD;">2</span><span style="color: #009900;color: #CCC;">&#93;</span><span style="color: #339933;color: #CCC;">,</span> integer<span style="color: #339933;color: #CCC;">=&gt;</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#125;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">display_precision</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #000066;color: #8FB394;">system</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;">'clear'</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
say <span style="color: #ff0000;color: #666666;">&quot;INICIO&quot;</span><span style="color: #339933;color: #CCC;">;</span>
impgrid<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$grid</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000066;color: #8FB394;">sleep</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">2</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">for</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$it</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$it</span> <span style="color: #339933;color: #CCC;">&lt;=</span> <span style="color: #0000ff;">$iter</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$it</span><span style="color: #339933;color: #CCC;">++</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$gridtemp</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">clone</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$gridtemp</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">each</span><span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #000000; font-weight: bold;color: #577A61;">sub</span><span style="color: #009900;color: #CCC;">&#123;</span> 	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000066;color: #8FB394;">undef</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$j</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;color: #CCC;">;</span> 
			<span style="color: #666666; font-style: italic;color: #CDC;">#say &quot;$i -- $j&quot;;</span>
			<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$newval</span> <span style="color: #339933;color: #CCC;">=</span> evalua<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$j</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
			<span style="color: #0000ff;">$gridtemp</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">assign</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$j</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$newval</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> 
		<span style="color: #009900;color: #CCC;">&#125;</span> 
		<span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #000066;color: #8FB394;">system</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;">'clear'</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$gridtemp</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">display_precision</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
say <span style="color: #ff0000;color: #666666;">&quot;Iteracion = $it&quot;</span><span style="color: #339933;color: #CCC;">;</span>
impgrid<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$gridtemp</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000066;color: #8FB394;">sleep</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
&nbsp;
<span style="color: #0000ff;">$grid</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$gridtemp</span> <span style="color: #339933;color: #CCC;">;</span>
<span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">display_precision</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">sub</span> impgrid <span style="color: #009900;color: #CCC;">&#123;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$pgrid</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #000066;color: #8FB394;">shift</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">for</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">=</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">&lt;=</span><span style="color: #0000ff;">$n</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">++</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
	 <span style="color: #b1b100;color: #B83A24;">for</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$ii</span> <span style="color: #339933;color: #CCC;">=</span><span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$ii</span> <span style="color: #339933;color: #CCC;">&lt;=</span> <span style="color: #0000ff;">$n</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #0000ff;">$ii</span><span style="color: #339933;color: #CCC;">++</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
	 	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$valc</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$pgrid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$ii</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
		<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$printc</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #ff0000;color: #666666;">&quot;*&quot;</span><span style="color: #339933;color: #CCC;">;</span>
		<span style="color: #0000ff;">$printc</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #ff0000;color: #666666;">&quot; &quot;</span> <span style="color: #b1b100;color: #B83A24;">if</span> <span style="color: #0000ff;">$valc</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #339933;color: #CCC;">;</span>
		<span style="color: #000066;color: #8FB394;">print</span> <span style="color: #ff0000;color: #666666;">&quot;$printc &quot;</span><span style="color: #339933;color: #CCC;">;</span>
	 <span style="color: #009900;color: #CCC;">&#125;</span>
	 <span style="color: #000066;color: #8FB394;">print</span> <span style="color: #ff0000;color: #666666;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #009900;color: #CCC;">&#125;</span>
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">sub</span> evalua <span style="color: #009900;color: #CCC;">&#123;</span>
	<span style="color: #0000ff;">$x</span><span style="color: #339933;color: #CCC;">=</span> <span style="color: #000066;color: #8FB394;">shift</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$y</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #000066;color: #8FB394;">shift</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xant</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$xsig</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$yant</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$ysig</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">=</span> vecinos<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$x</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$y</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$newval</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$celula</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$x</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$y</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xant</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$y</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xant</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$ysig</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$x</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$ysig</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xsig</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$ysig</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xsig</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$y</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xsig</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$yant</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$x</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$yant</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #0000ff;">$grid</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">element</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xant</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$yant</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #0000ff;">$newval</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #b1b100;color: #B83A24;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$celula</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">&amp;&amp;</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">2</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">||</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">3</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">||</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$celula</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">&amp;&amp;</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$tot</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">3</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #000066;color: #8FB394;">return</span> <span style="color: #0000ff;">$newval</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">sub</span> vecinos <span style="color: #009900;color: #CCC;">&#123;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$x</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #000066;color: #8FB394;">shift</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$y</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #000066;color: #8FB394;">shift</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$xant</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$x</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">?</span> <span style="color: #0000ff;">$n</span> <span style="color: #339933;color: #CCC;">:</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$x</span> <span style="color: #339933;color: #CCC;">-</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$xsig</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$x</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #0000ff;">$n</span> <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">?</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #339933;color: #CCC;">:</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$x</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$yant</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$y</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">?</span> <span style="color: #0000ff;">$n</span> <span style="color: #339933;color: #CCC;">:</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$y</span> <span style="color: #339933;color: #CCC;">-</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$ysig</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$y</span> <span style="color: #339933;color: #CCC;">==</span> <span style="color: #0000ff;">$n</span> <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">?</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #339933;color: #CCC;">:</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$y</span> <span style="color: #339933;color: #CCC;">+</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
	<span style="color: #000066;color: #8FB394;">return</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$xant</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$xsig</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$yant</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$ysig</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #009900;color: #CCC;">&#125;</span></pre></td></tr></table></div>

<p>Estoy usando el modulo <a href="http://search.cpan.org/~leto/Math-MatrixReal-2.05/lib/Math/MatrixReal.pm">Math::MatrixReal </a>que permite interactuar de una manera rápida y sencilla con matrices.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=147</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando OpenERP en Debian Lenny</title>
		<link>http://blog.g013m.com.ve/?p=98#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=98#comments</comments>
		<pubDate>Wed, 10 Feb 2010 03:47:06 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=98</guid>
		<description><![CDATA[<p>OpenERP es una de las mejores soluciones en software libre para el sector empresarial y de negocios. Tiene muy bien estructurado el esquema de extensiones de modulos y puede adaptarse fácilmente a cualquier escenario de negocios.
Existen paquetes preparados para instalarlo en Debian Squeeze (testing), pero no los hay para Debian Lenny (stable), se puede instalar desde [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="OpenERP" src="http://openerp.com/templates/tiny/images/openlogo.jpg" title="OpenERP" class="alignleft" width="202" height="61" /><a href="http://www.openerp.com/">OpenERP</a> es una de las mejores soluciones en software libre para el sector empresarial y de negocios. Tiene muy bien estructurado el esquema de extensiones de modulos y puede adaptarse fácilmente a cualquier escenario de negocios.<br />
Existen paquetes preparados para instalarlo en Debian Squeeze (testing), pero no los hay para Debian Lenny (stable), se puede instalar desde las fuentes bajando algunas dependencias a mano y haciendo algunos ajustes, pero  esa no es la Debian Way <img src='http://blog.g013m.com.ve/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Se puede descargar los paquetes de Squeeze a mano e instalarlos pero igual hay que resolver algunas dependencias, así que una opción es utilizar directamente los repositorios de Squeeze en Lenny. Esto podría ocasionar algunos problemas en algún servidor en producción, por que algunos paquetes pueden ser actualizados a versiones más recientes y romper dependencias con otros, por eso hay que tener en cuenta esto antes de hacer algo así y estar atento a los cambios que se van a realizar antes de instalar cualquier cosa.</p>
<ul>
<li>Lo primero que hacemos es modificar la lista de repositorios y agregar una línea con algún repositorio de Squeeze, puede ser una de las mismas que tenemos en &#8220;/etc/apt/sources.list&#8221; y se cambia &#8220;<em>stable</em>&#8221; o &#8220;<em>lenny</em>&#8221; por &#8220;<em>squeeze</em>&#8220;, guardamos los cambios y actualizamos la lista de paquetes con &#8220;aptitude update&#8221;.</li>
<li>OpenERP trabaja con <a href="http://www.postgresql.org/">PostgreSQL</a> así que vamos a necesitar instalarlo, este se instala como una recomendación de OpenERP y al estar usando los repositorios de Squeeze va a solicitar instalar la ultima versión disponible, a la fecha es la 8.4, así que si ya se tiene instalado el servidor PostgreSQL se usa la siguiente línea para instalar solo el servidor de OpenERP y las dependencias necesarias:<code>aptitude install --without-recommends openerp-server</code><br />
Con esto instalamos solo lo necesario para tener el servidor de OpenERP corriendo.</li>
<li>Luego podemos instalar algunas otros paquetes de los recomendados por el paquete openerp-server<br />
aptitude install python-imaging python-openssl python-pyparsing libxslt1-dev</li>
<li>Necesitamos un usuario postgresql para el servidor openerp, lo podemos crear con el siguiente comando:<br />
<code>su - postgres -c "createuser --createdb --no-createrole --pwprompt openerp"</code><br />
Con esta línea estamos creando un usuario llamado &#8220;openerp&#8221; se puede usar otro nombre, además va a pedir una contraseña que es la que vamos a utilizar posteriormente para hacer la conexión a la BD</li>
<li> Tenemos que editar el archivo <em>/etc/openerp-server.conf</em> para agregar el password del usuario de la BD</li>
<li>Reiniciamos el servicio openerp:<br />
<code>/etc/init.d/openerp-server restart</code></li>
</ul>
<p>Con estos pasos ya tenemos configurado y funcionando el servidor OpenERP, lo que queda es configurarlo, eso lo podemos hacer utilizando el cliente OpenERP, existe una versión escrita en GTK, que se puede instalar directamente con: aptitude install openerp-client. La otra forma, es usar el cliente web, como estás usando un servidor lo podemos instalar en la misma máquina y acceder desde cualquier máquina directamente solo usando un navegador. No hay un paquete Debian aún para el cliente web, existe uno que están preparando, pero no funcionó bien luego de instalarlo, así que utilicé la opción de instalarlo a mano, los pasos para hacerlo funcionar serían los siguientes:</p>
<ul>
<li>Descargamos el <a href="http://www.openerp.com/download/stable/source/openerp-web-5.0.6.tar.gz">cliente web</a> de la página de OpenERP</li>
<li>El cliente web está escrito en Python y necesitamos instalar algunas librerías para que pueda funcionar correctamente,  podemos instalar estos paquetes con la siguiente línea:<br />
<code>sudo aptitude install python-cherrypy3 python-formencode python-simplejson python-mako python-pybabel</code></li>
<li>Este cliente ejecuta un servicio que corre por defecto en el puerto 8080, así que podemos ejecutarlo desde donde queramos, en mi caso copié el contenido de la carpeta en<em>/opt/openerp-web/</em>, desde ahí podemos probarlo ejecutando el comando: <br />
<code>python openerp-web.py</code><br />
Si no genera ningún error, ya esta funcionando perfectamente y podemos acceder desde cualquier navegador con la dirección: <em>http://ip.del.servidor:8080</em>, al ingresar la primera vez se necesita configurar la BD y crear la instancia que vamos a usar, además de poder crear usuarios.
</li>
</ul>
<p>Lo ideal sería configurar el cliente para que se inicie como un servicio del sistema y no tener que estar levantando cada vez que queramos usarlo, para esto podemos hacer lo siguiente:</p>
<ul>
<li> El cliente web provee un script que podemos utilizar para usarlo como un servicio del sistema, este script lo podemos copiar a la carpeta /etc/init.d :<br />
<code>cp /opt/scripts/openerp-web /etc/init.d/</code>
</li>
<li> Debes modificar ese script, buscamos la línea donde aparece &#8220;<em>DAEMON</em>&#8221; que contiene la ruta donde está el ejecutable del cliente web y ponemos la que corresponde con nuestra instalación:<br />
<code>DAEMON=/opt/openerp-web/openerp-web.py</code>
</li>
<li>Tambien es necesario copiar el archivo de configuración del cliente web a la carpeta /etc:<br />
<code>cp config/openerp-web.cfg /etc/</code>
</li>
<li>Esto es opcional, pero podemos crear la carpeta de logs y darle los permisos necesarios:<br />
<code>mkdir -p /var/log/openerp-web</code><br />
<code>chmod -R openerp:adm /var/log/openerp-web</code></li>
<li>Luego, lo más importante, configurar openerp-web para que sea cargado al arrancar el sistema, lo hacemos con el comando update-rc.d de Debian:<br />
<code>update-rc.d openerp-web start 70 2 3 4 5 . stop 20 0 1 6 </code>.
</li>
<li>Y listo, una vez realizado esto, simplemente podemos iniciar el servicio con el comando:<br />
<code>/etc/init.d/openerp-web start</code>
</li>
</ul>
<p>Con estos pasos podemos tener OpenERP completamente funcionando en un servidor con Debian Lenny, si hicieron la parte de utilizar directamente los repositorios de Debian Squeez debe volver a quitarlos del archivo <em>/etc/apt/sources.list</em> para evitar problemas en próximas actualizaciones.</p>
<p>Se puede configurar el cliente web para que funcione directamente con Apache, y poder accederlo usando https, eso lo estaré publicando en otra entrada <img src='http://blog.g013m.com.ve/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=98</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usando Perl para extraer datos de archivos Excel</title>
		<link>http://blog.g013m.com.ve/?p=100#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=100#comments</comments>
		<pubDate>Mon, 04 Jan 2010 02:51:25 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=100</guid>
		<description><![CDATA[<p>Existe una (mala) costumbre de almacenar datos en archivos excel en muchas organizaciones, grandes o pequeñas, esto funciona cuando los datos no son muchos y se pueden manejar rápidamente, pero por lo general esta información va creciendo y se va haciendo más difícil mantener la integridad de los datos, a veces se tienen varias versiones del [...]]]></description>
			<content:encoded><![CDATA[<p>Existe una (mala) costumbre de almacenar datos en archivos excel en muchas organizaciones, grandes o pequeñas, esto funciona cuando los datos no son muchos y se pueden manejar rápidamente, pero por lo general esta información va creciendo y se va haciendo más difícil mantener la integridad de los datos, a veces se tienen varias versiones del archivo .xls, a veces se pierden o se borran por equivocación, etc.</p>
<p>Luego de pasar por todos estos problemas, se decide implementar algún sistema de información que permite manejar todos los datos de manera más eficiente, y claro no van a empezar a generar los registros otra vez por que ya los tienen en muchos archivos .xls. Ahí es cuando se empiezan a buscar soluciones para poder extraer estos datos rápidamente, y ahí es cuando viene Perl al rescate <img src='http://blog.g013m.com.ve/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Existe un modulo (entre muchos) que nos permiten trabajar con archivos .xls sin necesidad de estar abriéndolos uno por uno <a title="Spreadsheet::ParseExcel" href="http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.56/" target="_blank">Spreadsheet::ParseExcel</a>, este modulo nos permite abrir archivos excel y extraer toda la información que contiene. Voy a poner un pequeño ejemplo del funcionamiento del modulo, supongamos que tenemos un archivo excel con la siguiente estructura:</p>
<div class="wp-caption alignnone" style="width: 595px"><img title="personas.xls" src="http://files.droplr.com/files/3389621/8oY96.personasxls.png" alt="Archivo Excel" width="585" height="201" /><p class="wp-caption-text">Archivo Excel</p></div>
<p>Un archivo con 4 columnas, en este caso corresponden a la siguiente información: Nombre, Apellido, Cédula y Correo. Estos datos serán almacenados en la tabla &#8220;persona&#8221; en una BD Postgresql.</p>
<p>Se deben extraer los registros del archivo excel, identificar los campos, y luego almacenarlos en la BD, un ejemplo de como se puede hacer esto con Perl y SpreadSheet::ParseExcel es el siguiente script:</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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;color: #FCFFBA;"><span style="color: #666666; font-style: italic;color: #CDC;">#!/usr/bin/perl</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> Modern<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">Perl</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> Spreadsheet<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">ParseExcel</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> DBI<span style="color: #339933;color: #CCC;">;</span>
<span style="color: #000000; font-weight: bold;color: #577A61;">use</span> DBD<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">Pg</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$userbd</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #ff0000;color: #666666;">&quot;prueba&quot;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">#Nombre de usuario para la BD</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$passbd</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #ff0000;color: #666666;">&quot;prueba&quot;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">#Password del usuario</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$bd</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #ff0000;color: #666666;">&quot;prueba&quot;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">#Nombre de la BD</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#conexión a la BD</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$dbh</span> <span style="color: #339933;color: #CCC;">=</span> DBI<span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">connect</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;color: #666666;">&quot;dbi:Pg:dbname=$bd&quot;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$userbd</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$passbd</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #b1b100;color: #B83A24;">or</span> <span style="color: #000066;color: #8FB394;">die</span> <span style="color: #0000ff;">$DBI</span><span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">errstr</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#sentencia SQL a ejecutar</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$query</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #ff0000;color: #666666;">&quot;INSERT INTO persona (nombre, apellido, cedula, email) VALUES (?, ?, ?, ?)&quot;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#se crea un objeto nuevo</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$parser</span> <span style="color: #339933;color: #CCC;">=</span> Spreadsheet<span style="color: #339933;color: #CCC;">::</span><span style="color: #006600;">ParseExcel</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#se utiliza el metodo &quot;Parse&quot; para indicar el archivo .xls a usar</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$workbook</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$parser</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">Parse</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #ff0000;">'personas.xls'</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#si no puedo &quot;parsear&quot; el archivo se termina el programa</span>
<span style="color: #000066;color: #8FB394;">die</span> <span style="color: #0000ff;">$parser</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">error</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #ff0000;color: #666666;">&quot;.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;color: #B83A24;">if</span> <span style="color: #339933;color: #CCC;">!</span><span style="color: #000066;color: #8FB394;">defined</span> <span style="color: #0000ff;">$workbook</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#indicamos que vamos a trabajar con la primera hoja</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$worksheet</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$workbook</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">worksheet</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #cc66cc;color: #DDD;">0</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
<span style="color: #666666; font-style: italic;color: #CDC;">#obtenemos el rango de las filas usadas en la hoja</span>
<span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$row_min</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #0000ff;">$row_max</span> <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$worksheet</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">row_range</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #b1b100;color: #B83A24;">for</span> <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$row</span> <span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #cc66cc;color: #DDD;">0</span> <span style="color: #339933;color: #CCC;">..</span> <span style="color: #0000ff;">$row_max</span> <span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #009900;color: #CCC;">&#123;</span>
&nbsp;
 <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$nombre</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$worksheet</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">get_cell</span><span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$row</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">0</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$apellido</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$worksheet</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">get_cell</span><span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$row</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">1</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$cedula</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$worksheet</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">get_cell</span><span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$row</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">2</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$email</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$worksheet</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">get_cell</span><span style="color: #009900;color: #CCC;">&#40;</span> <span style="color: #0000ff;">$row</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">3</span> <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
 <span style="color: #b1b100;color: #B83A24;">my</span> <span style="color: #0000ff;">$sth</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #0000ff;">$dbh</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">prepare</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$query</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #0000ff;">$sth</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">execute</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">$nombre</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$apellido</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$cedula</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$email</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #0000ff;">$sth</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">finish</span><span style="color: #339933;color: #CCC;">;</span>
 say <span style="color: #ff0000;color: #666666;">&quot;Persona: &quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #0000ff;">$nombre</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #ff0000;color: #666666;">&quot; &quot;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;">$apellido</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #ff0000;color: #666666;">&quot; - Cedula: &quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #0000ff;">$cedula</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #ff0000;color: #666666;">&quot; - Email:&quot;</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #0000ff;">$email</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #006600;">value</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">,</span><span style="color: #ff0000;color: #666666;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #009900;color: #CCC;">&#125;</span></pre></td></tr></table></div>

<p>En la línea 2 estamos haciendo uso del modulo Modern::Perl, que activa varias opciones al usar Perl 5.10, para más información puedes ver el post en Perliscopio: <a href="http://perliscopio.blogspot.com/2009/09/usando-perl-moderno.html">Usando Perl Moderno</a>. De la línea 7 a la 11 está toda la información relacionada a la BD. En la línea 21 especificamos con cual de las hojas del archivo .xls vamos a trabar, en este caso con la primera que correspondería a la número 0, se pueden usar varias hojas en caso de que existan, en vez de  &#8220;worksheet&#8221;  usaríamos &#8220;worksheets&#8221;.</p>
<p>En la línea 25 obtenemos el rango de columnas que son utilizadas en la hoja, con esto podemos conocer donde están los registros dentro de la hoja, se puede además conocer la cantidad de columnas utilizadas usando la opción &#8220;col_range&#8221;. Luego en la linea 27 empezamos un ciclo recorriendo todas las filas para obtener los datos, para acceder a una celda se usa el método &#8220;get_cell&#8221;, con esto podemos tener acceso a varios atributos de la celda entre las cuales está la que más nos interesa que la que contiene el dato que vamos a usar para guardar el registro, y al que podemos acceder directamente con el metodo &#8220;value&#8221;.</p>
<p>En las líneas 32 al 34 se hacen las operaciones en la BD utilizando los métodos tradicionales de DBI, quizás para algunos casos más complicados se podría usar DBIx::Class, pero como en este caso solo utilizamos una tabla no es necesario. </p>
<p>Esto es solo un ejemplo sencillo de como realizar una tarea tan tediosa como puede ser extraer información de este tipo de archivos, además que se puede sacar más provecho al usar un lenguaje con tanta flexibilidad como Perl.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=100</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu sirve hasta para las agencias de festejos ..</title>
		<link>http://blog.g013m.com.ve/?p=93#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=93#comments</comments>
		<pubDate>Sat, 07 Nov 2009 02:48:55 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=93</guid>
		<description><![CDATA[<p>Y no es que lo usen como plataforma tecnológica, sino como base para el diseño gráfico de su logo, y es que el parecido entre el logo de &#8220;Dgala&#8221; y el Ubuntu da mucho que pensar, ¿quizás el diseñador usa ubuntu?, ¿quizás no tenía mucha inspiración y vió el logo por ahí?, ¿o quizás es demasiada [...]]]></description>
			<content:encoded><![CDATA[<p>Y no es que lo usen como plataforma tecnológica, sino como base para el diseño gráfico de su logo, y es que el parecido entre el logo de &#8220;Dgala&#8221; y el Ubuntu da mucho que pensar, ¿quizás el diseñador usa ubuntu?, ¿quizás no tenía mucha inspiración y vió el logo por ahí?, ¿o quizás es demasiada casualidad y no sabía que es casi identico al logo de esta distribución? ..</p>
<div id="attachment_94" class="wp-caption alignleft" style="width: 269px"><img class="size-full wp-image-94" title="Logo Dgala" src="http://blog.g013m.com.ve/wp-content/uploads/2009/11/dgalalogo.jpg" alt="logo dgala" width="259" height="131" /><p class="wp-caption-text">logo dgala</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=93</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Hacklab Sábado 4 de Julio</title>
		<link>http://blog.g013m.com.ve/?p=90#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=90#comments</comments>
		<pubDate>Sat, 27 Jun 2009 16:03:57 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Venezuela]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=90</guid>
		<description><![CDATA[

<p>Con la gente de Lugma estamos tratando de organizar un Hacklab para el Sábado 4 de Julio en la sede del ISEIT en Maracay. Esta es una reunión informal donde se tratarán diversos tópicos relacionados con redes, programación, seguridad informática, o cualquier tema que salga ese día.</p>
<p>Para participar solo tienes que venir (si puedes con tu [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>
<p>Con la gente de <a title="Lugma" href="http://www.lugma.org.ve/2009/06/hacklab-sabado-4-de-julio.html" target="_blank">Lugma</a> estamos tratando de organizar un Hacklab para el Sábado 4 de Julio en la sede del <a href="http://ve.iseit.net/Sedes">ISEIT en Maracay</a>. Esta es una reunión informal donde se tratarán diversos tópicos relacionados con redes, programación, seguridad informática, o cualquier tema que salga ese día.</p>
<p>Para participar solo tienes que venir (si puedes con tu máquina, aunque seguro dispondremos de algunas allá), no se cobrará entrada, pero si sería bueno colaborar con algo para comprar comida y bebidas. La idea es que todos participen, no se trata de charlas sino de debates y de que cada quién de sus tips o ideas sobre los temas que estemos tratando.</p>
<p>Hasta ahora vamos a hablar de LDAP y su integración con distintos servicios y aplicaciones. Si tienes algún tema que quieras compartir avísanos y llega a la reunión. Están todos invitados.</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=90</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Padre, el IDE para Perl</title>
		<link>http://blog.g013m.com.ve/?p=62#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=62#comments</comments>
		<pubDate>Fri, 19 Jun 2009 06:27:07 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Catalyst]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://blog.g013m.com.ve/?p=62</guid>
		<description><![CDATA[<p>Me gusta mucho programar en Perl, y para eso siempre he usado vim, o algun otro editor como Komodo, Gedit, etc. Casi siempre termino usando vim por la sencillez y versatilidad que tiene. Pero últimamente he estado usando Padre, que es un IDE para Perl en etapa de desarrollo, están en la versión 0.36 y hasta [...]]]></description>
			<content:encoded><![CDATA[<p>Me gusta mucho programar en Perl, y para eso siempre he usado vim, o algun otro editor como Komodo, Gedit, etc. Casi siempre termino usando vim por la sencillez y versatilidad que tiene. Pero últimamente he estado usando <a title="Padre" href="http://padre.perlide.org/trac/" target="_blank">Padre</a>, que es un IDE para Perl en etapa de desarrollo, están en la versión 0.36 y hasta ahora funciona bien. Funciona en Linux, Mac y Windows.</p>
<p>La forma más fácil de instalar, si usas Debian, es agregar los repositorios de la rama inestable, con un simple: <em>aptitude install  padre</em> tendremos todo instalado y configurado, hacer la instalación manualmente desde CPAN es muy complicado ya que requiere muchas dependencias.</p>
<p>Padre tiene bastantes características interesantes, todas las que debe tener un editor decente y la posibilidad de agregarle plugins. Los plugins se pueden conseguir en CPAN o los puedes crear tu mismo. Unos de los plugins que mas me ha gustado es <a title="Padre Plugin" href="http://search.cpan.org/~garu/Padre-Plugin-Catalyst-0.04/lib/Padre/Plugin/Catalyst.pm" target="_blank">Padre::Plugin::Catalyst</a>, que permite agregar al editor un menú contextual para crear/administrar aplicaciones creadas con<a title="Catalyst" href="http://www.catalystframework.org/" target="_blank"> Catalyst</a>, algo así como una &#8220;interfaz gráfica&#8221; para el framework.</p>
<p>El equipo de desarrollo es bastante activo y estan haciendo un excelente trabajo, hay muchas ideas de agregados y funcionalidades que quieren ofrecer en las próximas versiones, vale la pena probarlo, otra alternativa más para programar en Perl.</p>
<p>Algunas capturas de Pantalla:</p>
<div class="wp-caption alignnone" style="width: 232px"><a href="http://blog.g013m.com.ve/wp-content/uploads/2009/06/padre2.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img title="Crear aplicación Catalyst" src="http://blog.g013m.com.ve/wp-content/uploads/2009/06/padre2-thumb.png" alt="Padre" width="222" height="132" /></a><p class="wp-caption-text">Crear aplicación Catalyst</p></div>
<div class="wp-caption alignnone" style="width: 302px"><a href="http://blog.g013m.com.ve/wp-content/uploads/2009/06/padre3.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img title="Menu Contextual Catalyst" src="http://blog.g013m.com.ve/wp-content/uploads/2009/06/padre3-thumb.png" alt="Menu Contextual Catalyst" width="292" height="175" /></a><p class="wp-caption-text">Menu Contextual Catalyst</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=62</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrado a WordPress</title>
		<link>http://blog.g013m.com.ve/?p=55#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=55#comments</comments>
		<pubDate>Sun, 14 Jun 2009 03:04:04 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[serendipity]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://estoesvenezuela.com/~csanchez/wordpress/?p=55</guid>
		<description><![CDATA[<p>Pues eso, acabo de migrar de Serendipity a WordPress. El proceso fue algo tedioso por que el plugin que hay para migrar la BD de un sistema al otro funciona solo con MySQL, asi que tuve que editar algunas cosas a mano en los scripts de migración, pero a la final resultó bien.</p>
<p>Voy a tratar de [...]]]></description>
			<content:encoded><![CDATA[<p>Pues eso, acabo de migrar de <a title="Serendipity" href="http://www.s9y.org/" target="_blank">Serendipity</a> a <a title="Wordpress" href="http://wordpress.org/" target="_blank">WordPress</a>. El proceso fue algo tedioso por que el <a title="plugin" href="http://www.dobschat.de/v20/index.php/dobschat/entry/serendipity-s9y-importer-for-wordpress-13#englishversion" target="_blank">plugin</a> que hay para migrar la BD de un sistema al otro funciona solo con MySQL, asi que tuve que editar algunas cosas a mano en los scripts de migración, pero a la final resultó bien.</p>
<p>Voy a tratar de mantener actualizado el Blog, tenía muchísimo tiempo que no escribía nada :S .. Pero ya volví <img src='http://blog.g013m.com.ve/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=55</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XML-RPC con Catalyst</title>
		<link>http://blog.g013m.com.ve/?p=48#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.g013m.com.ve/?p=48#comments</comments>
		<pubDate>Sun, 10 Feb 2008 17:27:57 +0000</pubDate>
		<dc:creator>Christian Sánchez</dc:creator>
				<category><![CDATA[Catalyst]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[xml-rpc]]></category>

		<guid isPermaLink="false">http://estoesvenezuela.com/~csanchez/wordpress/?p=48</guid>
		<description><![CDATA[<p>Me ha tocado hacer una aplicaci&#243;n que lea datos de una pistola lectora de c&#243;digos de barras que se conectan a un puerto serial, para leer los datos utilic&#233; un script en Perl que usa POE y que consegu&#237; en su cookbook, al cual le hice algunas modificaciones.</p>
<p>Ahora, no solo se necesita que se lean los [...]]]></description>
			<content:encoded><![CDATA[<p>Me ha tocado hacer una aplicaci&oacute;n que lea datos de una pistola lectora de c&oacute;digos de barras que se conectan a un puerto serial, para leer los datos utilic&eacute; un script en Perl que usa <a href="http://poe.perl.org" name="Perl Object Environment">POE</a> y que consegu&iacute; en su <a href="http://poe.perl.org/?POE_Cookbook/Serial_Ports">cookbook</a>, al cual le hice algunas modificaciones.</p>
<p>Ahora, no solo se necesita que se lean los c&oacute;digos, sino que estos sean enviados a una aplicaci&oacute;n hecha en <a name="Catalyst" href="http://catalyst.perl.org">Catalyst</a> y que env&iacute;e una respuesta. Esto ser&iacute;a sencillo con las pistolas que se conectan al puerto del teclado, ya que se podr&iacute;a usar la aplicaci&oacute;n directamente desde, por ejemplo, un navegador, pero el problema est&aacute; en que los datos son recibidos por el puerto serial, si se hace un: &quot;cat /dev/ttyS0&quot; podemos ver los c&oacute;digos que va recibiendo el lector, pero no podemos hacer mucho con solo verlos. El script en POE me permite tener una especie de c&oacute;nsola que permite monitorizar lo que pasa en el puerto serial, adem&aacute;s se captura el dato como una variable cualquiera, ahora solo quedar&iacute;a enviar este c&oacute;digo a la aplicaci&oacute;n y que esta lo procese. La forma que me pareci&oacute; m&aacute;s sencilla de implementar esto fue utilizando XML-RPC para hacer las peticiones a la aplicaci&oacute;n y que esta env&iacute;e las respuestas.</p>
<p><span id="more-48"></span>
<p>Para poder hacer todo esto, simplemente se necesita instalar el m&oacute;dulo <a href="http://search.cpan.org/~rjray/RPC-XML-0.59/lib/RPC/XML.pm">   RPC::XML</a>  (aptitude install librpc-xml-perl) y el plugin xml-rpc para Catalyst <a href="http://search.cpan.org/~sri/Catalyst-Plugin-XMLRPC-1.0/lib/Catalyst/Plugin/XMLRPC.pm">Catalyst::Plugin::XMLRPC</a> (si est&aacute;s usando Debian ya deber&iacute;as tenerlo instalado, se encuentra en el paquete libcatalyst-perl-modules).</p>
<p>Ahora la idea general es poder hacer que la aplicaci&oacute;n Catalyst permita recibir peticiones xml-rpc y env&iacute;e las respuestas en esta misma v&iacute;a, para implementar esto, lo primero que tenemos que hacer es agregar es el plugin xml-rpc en la lista de plugins de nuestra aplicaci&oacute;n, para eso, editamos el archivo <em>lib/MyApp.pm </em>(esto es suponiendo que ya creamos una aplicacion que se llame MyApp &#8230;) y editamos la l&iacute;nea:</p>
<p><code>use Catalyst qw/-Debug ConfigLoader Static::Simple XMLRPC/;</code></p>
<p>con eso, estamos cargando el plugin del m&oacute;dulo RPC::XML en nuestra aplicaci&oacute;n, luego, simplemente creamos un controlador que maneje y despache estas peticiones:</p>
<p><code>$ script/myapp_create.pl controller XMLRPC</code></p>
<p>&nbsp;una vez que creamos el controlador, lo abrimos y editamos el metodo <em>index</em> para que quede en algo como:</p>
<p><code>sub index : Private { </code></p>
<p><code>&nbsp; my ( $self, $c ) = @_;</code><code>   </code><code>   </code></p>
<p><code>&nbsp; $c-&gt;xmlrpc; </code></p>
<p><code>}</code></p>
<p>Con esto, estamos indicando que este controlador se accede v&iacute;a xmlrpc al igual que todos sus m&eacute;todos. Luego queda agregar los m&eacute;todos que queramos usar, por ejemplo, se podr&iacute;a usar un m&eacute;todo para buscar el titulo de un Libro con el c&oacute;digo que obtenemos de la lectora. Un ejemplo ser&iacute;a (suponiendo que tenemos nuestro <em>Modelo</em> configurado ):</p>
<p>sub buscar : XMLRPC {</p>
<p>&nbsp;&nbsp; <code>my ( $self, $c, $codigo ) = @_;</code></p>
<p>&nbsp;&nbsp; my $libro = $c-&gt;model(&#8216;MyAppDB::Libro&#8217;)-&gt;find($codigo);</p>
<p>&nbsp;&nbsp; if ($libro) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $libro-&gt;nombr<span style="font-family: Arial,Verdana,sans-serif;">e;</span></p>
<p><span style="font-family: Arial,Verdana,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="font-family: Arial,Verdana,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {</span></p>
<p><span style="font-family: Arial,Verdana,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;Libro no encontrado&quot;;</span></p>
<p><span style="font-family: Arial,Verdana,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>}</p>
<p>&nbsp;Bueno, ahora, para acceder a este controlador es necesario hacerlo usando alg&uacute;n &quot;cliente&quot; xmlrpc, al instalar RPC::XML podemos crear esta funcionalidad en nuestros programas, yo lo estoy usando para el programa que lee los puertos seriales, en todo caso, ser&iacute;a algo como esto:</p>
<p><code>use strict;<br />
use warnings;</p>
<p>use RPC::XML;<br />
use RPC::XML::Client;</p>
<p>
print &quot;Introduzca el codigo a buscar: \n&quot;;<br />
my $codigo = &lt;STDIN&gt;;<br />
my $cli = RPC::XML::Client-&gt;new('http://localhost:3000/xmlrpc');<br />
my $resp = $cli-&gt;send_request(&quot;xmlrpc.buscar&quot;,$codigo);<br />
print&nbsp; $resp-&gt;value , &quot;\n&quot;;</code><br />
&nbsp;</p>
<p>Con un peque&ntilde;o script como el anterior podemos hacer uso de nuestro servidor xmlrpc, la l&iacute;nea:</p>
<p><em><code>my $cli = RPC::XML::Client-&gt;new('http://localhost:3000/xmlrpc');</code></em></p>
<p>crea la conexi&oacute;n al servidor, simplemente colocamos la direcci&oacute;n donde est&aacute; escuchando el servidor xmlrpc, fijense que se est&aacute; indicando el controlador que vamos a utilizar, por que si no, por defecto la aplicaci&oacute;n servir&iacute;a http y nos dar&iacute;a un error. Luego hacemos la petici&oacute;n con la l&iacute;nea:</p>
<p><em><code>my $resp = $cli-&gt;send_request(&quot;xmlrpc.buscar&quot;,$codigo);</code></em></p>
<p>&nbsp;el m&eacute;todo <em>send_request</em> toma como argumentos: el m&eacute;todo al que hacemos la petici&oacute;n y los argumentos o datos que necesitamos procesar, en este caso el c&oacute;digo del libro.&nbsp; El servidor recibe la petici&oacute;n, la proces y env&iacute;a la respuesta que es lo que estamos imprimiendo al final del script.</p>
<p>Ahora, esta es una forma sencilla de enviar peticiones, hay muchas formas m&aacute;s de utilizar y aprovechar xmlrpc, como el caso de <a title="SOAP" href="http://es.wikipedia.org/wiki/SOAP">SOAP</a>, lo que nos permite extender mucho m&aacute;s las posibilidades. Para hacer una prueba de esto, podemos usar el m&oacute;dulo de Perl <a title="SOAP::Lite" href="http://search.cpan.org/~byrne/SOAP-Lite-0.69/lib/OldDocs/SOAP/Lite.pm">SOAP::Lite</a> (aptitude install libsoap-lite-perl), el cual nos provee de una c&oacute;nsola interactiva para hacer peticiones xmlrpc, luego que lo instalamos podemos iniciar la c&oacute;nsola:</p>
<p><code>$ XMLRPCsh http://localhost:3000/xmlrpc </code></p>
<p><code>Usage: method[(parameters)]<br />
&gt; </code></p>
<p>al iniciar la c&oacute;nsola podemos empezar a probar nuestro servidor xmlrpc:</p>
<p><code>&gt; xmlrpc.buscar(123456)<br />
--- XMLRPC RESULT ---<br />
'Libro no encontrado'</code><br />
&nbsp;</p>
<p>Con eso, podemos hacer varias pruebas, xmlrpc tiene bastantes utilidades, esto es solo un peque&ntilde;o ejemplo de todo lo que se puede hacer, y adem&aacute;s de una manera sencilla, con Perl y Catalyst <img src='http://blog.g013m.com.ve/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.g013m.com.ve/?feed=rss2&amp;p=48</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
