<?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>Blog de Carlos Guerrero &#187; Linux</title>
	<atom:link href="http://blog.carlosguerrero.com/category/linux-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.carlosguerrero.com</link>
	<description>Software Libre</description>
	<lastBuildDate>Fri, 09 Nov 2012 21:31:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Paypal con Python</title>
		<link>http://blog.carlosguerrero.com/paypal-con-python/</link>
		<comments>http://blog.carlosguerrero.com/paypal-con-python/#comments</comments>
		<pubDate>Fri, 09 Nov 2012 21:31:31 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=521</guid>
		<description><![CDATA[Después de pasar muchos días e incluso semanas tratando de descifrar como hacer funcionar el pago con Paypal en sitios hechos con Python (Django en mi caso) examinando el código de repositorios como django-paypal sin ningún éxito. Finalmente logré realizarlo, pero tuve que crear mi propia función, basándome en lo que sale en la críptica [...]]]></description>
			<content:encoded><![CDATA[<p>Después de pasar muchos días e incluso semanas tratando de descifrar como hacer funcionar el pago con Paypal en sitios hechos con Python (Django en mi caso) examinando el código de repositorios como <a href="https://github.com/johnboxall/django-paypal">django-paypal</a> sin ningún éxito.</p>
<p>Finalmente logré realizarlo, pero tuve que crear mi propia función, basándome en lo que sale en la críptica documentación actual de Paypal:<br />
<script type="text/javascript" src="https://gist.github.com/4048118.js?file=paypal.py"></script></p>
<p>En el lado de Paypal debes modificar la siguiente configuración, entrar en &#8220;Preferencias del sitio Web&#8221;:</p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/11/Entrar-Aqui.png"><img class="aligncenter" title="Entrar en Preferencias del sitio Web" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/11/Entrar-Aqui-300x182.png" alt="" width="300" height="182" /></a></p>
<p>Y activar &#8220;Transferencia de datos de pago&#8221; para luego copiar el campo &#8220;Código personal de identidad&#8221; que servira para el mecanismo de pago que se va a implementar con Django.</p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/11/Copiar-este-codigo1.png"><img class="aligncenter size-medium wp-image-531" title="Copiar este codigo" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/11/Copiar-este-codigo1-300x158.png" alt="" width="300" height="158" /></a></p>
<p>Una vez guardada esta configuración en el sitio de Paypal. Se puede aprovechar para crear un botón de pago, en el cual se especifica cual será la URL a la que se debe devolver al usuario justo despues de que se logra el pago con Paypal, en &#8220;3: Customize advanced features&#8221; de la siguiente manera:</p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/11/BotonNuevo1.png"><img class="aligncenter" title="BotonNuevo" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/11/BotonNuevo1-300x234.png" alt="" width="300" height="234" /></a></p>
<p>Una vez se ha puesto el botón en la pagina web, al usarlo, se redirigirá al cliente a la URL que hayamos especificado para ese botón, por lo cual debemos tener esa URL especificada en nuestro urls.py y con una funcion correspondiente en la cual usaremos la funcion paypal_check de la siguiente manera:</p>
<blockquote><p>success , info = paypal_check(request.GET['tx'],&#8217;&lt;Código personal de identidad&gt;&#8217;)<br />
if success:<br />
#Código donde se procesa el pago, recibiendo toda la información que paypal te da en la variable info</p></blockquote>
<p>Cuando Paypal te redirecciona, envia un campo GET con el nombre &#8216;tx&#8217;, con él y tu codigo personal de identidad, paypal_check realiza un request a paypal verificando si realmente es un pago que acaba de realizarse y fue exitoso. De ser así, se obtiene &#8216;SUCCESS&#8217; y una serie de campos adicionales muy utiles:</p>
<p><strong>info</strong> contiene: {&#8216;protection_eligibility&#8217;: &#8216;Ineligible&#8217;, &#8216;last_name&#8217;: &#8216;Guerrero&#8217;, &#8216;txn_id&#8217;: &#8217;8YG081780W&#8217;, &#8216;store_id&#8217;: &#8221;, &#8216;shipping_discount&#8217;: &#8217;0.00&#8242;, &#8216;receiver_email&#8217;: &#8216;guerrerocarlos%40gmail.com&#8217;, &#8216;payment_status&#8217;: &#8216;Completed&#8217;, &#8216;payment_gross&#8217;: &#8217;5.00&#8242;, &#8216;terminal_id&#8217;: &#8221;, &#8216;tax&#8217;: &#8217;0.00&#8242;, &#8216;residence_country&#8217;: &#8216;VE&#8217;, &#8216;payer_status&#8217;: &#8216;verified&#8217;, &#8216;txn_type&#8217;: &#8216;web_accept&#8217;, &#8216;pos_transaction_type&#8217;: &#8221;, &#8216;handling_amount&#8217;: &#8217;0.00&#8242;, &#8216;shipping_method&#8217;: &#8216;Default&#8217;, &#8216;payment_date&#8217;: &#8217;19%3A44%3A48+Sep+09%2C+2012+PDT&#8217;, &#8216;first_name&#8217;: &#8216;Carlos&#8217;, &#8216;btn_id&#8217;: &#8217;50793&#8242;, &#8216;item_name&#8217;: &#8217;1+Month&#8217;, &#8216;charset&#8217;: &#8216;windows-1252&#8242;, &#8216;receipt_reference_number&#8217;: &#8221;, &#8216;custom&#8217;: &#8221;, &#8216;transaction_subject&#8217;: &#8217;1+Month&#8217;, &#8216;item_number&#8217;: &#8217;1M&#8217;, &#8216;receiver_id&#8217;: &#8216;YPQJZFV6U4U&#8217;, &#8216;business&#8217;: &#8216;guerrerocarlos%40gmail.com&#8217;, &#8216;payer_business_name&#8217;: &#8216;Other&#8217;, &#8216;payer_id&#8217;: &#8216;A6E56SJCUQ&#8217;, &#8216;discount&#8217;: &#8217;0.00&#8242;, &#8216;num_offers&#8217;: &#8217;0&#8242;, &#8216;payment_fee&#8217;: &#8217;0.57&#8242;, &#8216;insurance_amount&#8217;: &#8217;0.00&#8242;, &#8216;mc_fee&#8217;: &#8217;0.57&#8242;, &#8216;mc_currency&#8217;: &#8216;USD&#8217;, &#8216;shipping&#8217;: &#8217;0.00&#8242;, &#8216;payer_email&#8217;: &#8216;client%40carlosguerrero.com&#8217;, &#8216;payment_type&#8217;: &#8216;instant&#8217;, &#8216;mc_gross&#8217;: &#8217;5.00&#8242;, &#8216;quantity&#8217;: &#8217;1&#8242;}</p>
<p>Ya con eso se tiene toda la informacion necesaria para procesar el pago del cliente, guardar su correo, el monto de su pago e incluso darle de una vez el producto que compró, si es entregable por vía digital.</p>
<p>Espero les sirva, cualquier pregunta estoy a la orden <a href="http://twitter.com/guerrerocarlos">@guerrerocarlos</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/paypal-con-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Liquidos en Blender usando Renderizador Cycles</title>
		<link>http://blog.carlosguerrero.com/liquidos-en-blender-usando-renderizador-cycles/</link>
		<comments>http://blog.carlosguerrero.com/liquidos-en-blender-usando-renderizador-cycles/#comments</comments>
		<pubDate>Sun, 16 Sep 2012 02:00:59 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Blender]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=513</guid>
		<description><![CDATA[Deslumbrantes los resultados del nuevo motor de Render de Blender, llamado &#8220;Cycles&#8221; Aquí una muestra: Para obtener ese resultado, pueden seguir este tutorial]]></description>
			<content:encoded><![CDATA[<p>Deslumbrantes los resultados del nuevo motor de Render de <a href="http://blender.org/">Blender</a>, llamado &#8220;<a href="http://wiki.blender.org/index.php/Doc:ES/2.6/Manual/Render/Cycles">Cycles</a>&#8221;</p>
<p>Aquí una muestra:<br />
<a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/09/Liquidos_Cycles.png"><img src="http://blog.carlosguerrero.com/wp-content/uploads/2012/09/Liquidos_Cycles.png" alt="" title="Liquidos_Cycles" width="600" height="300" class="aligncenter size-medium wp-image-514" /></a></p>
<p>Para obtener ese resultado, pueden seguir este <a href="http://www.blenderguru.com/videos/create-a-realistic-water-simulation">tutorial</a></p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/09/Captura-de-pantalla-2012-09-15-a-las-21.16.34.png"><img src="http://blog.carlosguerrero.com/wp-content/uploads/2012/09/Captura-de-pantalla-2012-09-15-a-las-21.16.34-300x161.png" alt="" title="Así se ve Blender 2.6" width="300" height="161" class="aligncenter size-medium wp-image-517" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/liquidos-en-blender-usando-renderizador-cycles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La mejor manera de pasar un video de FLV a MP4 (y sin pérdida)</title>
		<link>http://blog.carlosguerrero.com/la-mejor-manera-de-pasar-un-video-de-flv-a-mp4/</link>
		<comments>http://blog.carlosguerrero.com/la-mejor-manera-de-pasar-un-video-de-flv-a-mp4/#comments</comments>
		<pubDate>Thu, 06 Sep 2012 06:19:14 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=508</guid>
		<description><![CDATA[Normalmente cuando se pasa de un formato a otro con un programa tan popular como como ffmpeg, se utilizan valores que vienen con el programa por defecto que obligan renderizar de nuevo el audio y el stream del vídeo, en una nueva calidad y resolución para poder obtener el video en el formato nuevo (.mp4) [...]]]></description>
			<content:encoded><![CDATA[<p>Normalmente cuando se pasa de un formato a otro con un programa tan popular como como <a href="http://ffmpeg.org/">ffmpeg</a>, se utilizan valores que vienen con el programa por defecto que obligan renderizar de nuevo el audio y el stream del vídeo, en una nueva calidad y resolución para poder obtener el video en el formato nuevo (.mp4) tardando muchos minutos en este proceso.</p>
<p>Afortunadamente tanto los FLV como MP4, no son mas que &#8216;<a href="http://es.wikipedia.org/wiki/Formato_contenedor">contenedores</a>&#8216; y cuyo contenido en realidad se encuentra en variedad de formatos, por ejemplo un video bajado de youtube viene normalmente con el stream de video en formato h264 y audio en AAC.</p>
<p>Por lo tanto, la mejor manera de pasar un .flv a .mp4 es indicandole a ffmpeg que simplemente copie todo lo que está dentro del contenedor FLV y lo ponga dentro de un contenedor MP4 de la siguiente manera:</p>
<blockquote><p>ffmpeg -i video.flv <strong>-acodec copy -vcodec copy</strong> video.mp4</p></blockquote>
<p>Logrando con esto que la conversión dure menos de un segundo, en vez de lo que normalmente duraba (varios minutos), sin mencionar que la conversión será completamente sin pérdida.</p>
<p>Y si quieres pasar todos los archivos .flv de una carpeta determinada a .mp4, solo tienes que ejecutar esto en la linea de comandos:</p>
<blockquote><p>find /carpeta/ -name &#8216;*.flv&#8217; -exec ffmpeg -i {} -acodec copy -vcodec copy /carpeta/{}.mp4 \;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/la-mejor-manera-de-pasar-un-video-de-flv-a-mp4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Descargar] TextMate2 (ahora es GPL3)</title>
		<link>http://blog.carlosguerrero.com/descargartextmate2-ahora-es-gpl3/</link>
		<comments>http://blog.carlosguerrero.com/descargartextmate2-ahora-es-gpl3/#comments</comments>
		<pubDate>Sun, 12 Aug 2012 03:05:47 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=497</guid>
		<description><![CDATA[Celebrando que TextMate, uno de los mejores editores para MacOSX pasó a ser software libre (GPL3) me tomo el placer de compilarlo y distribuirlo listo para usar: DESCARGAR para MACOSX Blog Oficial: http://blog.macromates.com/2012/textmate-2-at-github/ Código Fuente del TextMate 2: https://github.com/textmate/textmate]]></description>
			<content:encoded><![CDATA[<p>Celebrando que TextMate, uno de los mejores editores para MacOSX pasó a ser software libre (GPL3) me tomo el placer de compilarlo y distribuirlo listo para usar:</p>
<p style="text-align: center;"><a href="http://goo.gl/xDm39"><img class="aligncenter size-medium wp-image-498" title="TextMate-2" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/TextMate-2-300x238.png" alt="" width="300" height="238" /><br />
<strong><strong><br />
</strong></strong></a><a href="http://goo.gl/xDm39"><strong>DESCARGAR para MACOSX</strong></a></p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.29.57-300x154.png"><img class="aligncenter size-medium wp-image-502" title="Descargar TextMate2 OpenSource" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.29.57-300x154.png" alt="" width="300" height="154" /></a></p>
<p>Blog Oficial: <a href="http://blog.macromates.com/2012/textmate-2-at-github/">http://blog.macromates.com/2012/textmate-2-at-github/</a><br />
Código Fuente del TextMate 2: <a href="https://github.com/textmate/textmate">https://github.com/textmate/textmate</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/descargartextmate2-ahora-es-gpl3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML: &#8220;Copiar al portapapeles&#8221; (Ctrl+C)</title>
		<link>http://blog.carlosguerrero.com/html-copiar-al-portapapeles/</link>
		<comments>http://blog.carlosguerrero.com/html-copiar-al-portapapeles/#comments</comments>
		<pubDate>Thu, 02 Aug 2012 17:50:30 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=464</guid>
		<description><![CDATA[Los navegadores no pueden acceder a la portapapeles directamente por razones de seguridad, lo cual imposibilita crear un botón Javascript que realize esta acción, por lo que no queda otra alternativa que usar Flash, pero no se preocupen que gracias a el lenguaje de programación Haxe y herramientas como swfmill no hace falta usar ningun [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://haxe.org/"><br />
<img src="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/no_flash.jpg" alt="" title="no_flash" width="100" height="100" style="float:left" /><br />
<img src="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/logo_haxe.png" alt="" title="logo_haxe" width="74" height="100" style="float:left" /><br />
</a><br />
</br><br />
</br></br><br />
Los navegadores no pueden acceder a la portapapeles directamente por razones de seguridad, lo cual imposibilita crear un botón Javascript que realize esta acción, por lo que no queda otra alternativa que usar Flash, pero no se preocupen que gracias a el lenguaje de programación <a href="http://haxe.org/">Haxe</a> y herramientas como <a href="http://swfmill.org/doc/using-swfmill.html">swfmill</a> no hace falta usar ningun software privativo para generar el .swf que se necesita para crear este botón:</p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/Copiar.png"><img src="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/Copiar.png" alt="" title="Copiar" width="134" height="28" class="aligncenter size-full wp-image-465" /></a><br />
que es el mismo que usan en github.com ya que fue de hecho, creado por uno de sus desarrolladores<br />
<a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/copy_to_clipboard.png"><img src="http://blog.carlosguerrero.com/wp-content/uploads/2012/08/copy_to_clipboard-300x28.png" alt="" title="copy_to_clipboard" width="300" height="28" class="aligncenter size-medium wp-image-466" /></a></p>
<p>Lamentablemente el código del repositorio del creador no se encuentra actualizado para funcionar con las últimas versiones de sus dependencias (haXe y swfmill), pero entre los pull request ya se encuentra la solución, a la cual ya hice &#8220;merge&#8221; y puse a la disposición en este repositorio (ya también con el botón traducido a español por cierto): </p>
<p><strong>Repositorio:</strong> <a href="https://github.com/guerrerocarlos/clippy">https://github.com/guerrerocarlos/clippy</a><br />
<strong>En .zip:</strong> <a href="https://github.com/guerrerocarlos/clippy/zipball/master">Descargar</a></p>
<p>Al descargar el código, se puede copiar directamente el archivo <b>clippy.swf</b> a su carpeta pública y solo faltaría incluir el siguiente objeto HTML en el lugar donde quieras que vaya el botón, además de reemplazar la etiqueta {text} por el texto que quieres que se copie a la portapapeles al presionar el botón, y {bgcolor} por el color de fondo que quieres que tenga el botón.</p>
<p><script src="https://gist.github.com/3239027.js?file=html_copy_button"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/html-copiar-al-portapapeles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Receta: Habilitar php en NGINX</title>
		<link>http://blog.carlosguerrero.com/receta-habilitar-php-en-nginx/</link>
		<comments>http://blog.carlosguerrero.com/receta-habilitar-php-en-nginx/#comments</comments>
		<pubDate>Mon, 30 Jul 2012 16:08:10 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=455</guid>
		<description><![CDATA[Luego de instalar nginx: # sudo aptitude install nginx solo hace falta instalar php: sudo aptitude install php5-cgi y crear este archivo /etc/init.d/php-fastcgi con el siguiente contenido: Se le dan permisos de ejecución al script: # chmod +x /etc/init.d/php-fastcgi Y se levanta el interprete de php: # /etc/init.d/php-fastcgi start Sin olvidar incluirlo en la lista [...]]]></description>
			<content:encoded><![CDATA[<p>Luego de instalar nginx:</p>
<blockquote><p># sudo aptitude install nginx</p></blockquote>
<p>solo hace falta instalar php:</p>
<blockquote><p>sudo aptitude install php5-cgi</p></blockquote>
<p>y crear este archivo <strong>/etc/init.d/php-fastcgi</strong> con el siguiente contenido:<br />
<script src="https://gist.github.com/3207979.js?file=php-fastcgi"></script></p>
<p>Se le dan permisos de ejecución al script:</p>
<blockquote><p>
# chmod +x /etc/init.d/php-fastcgi</p></blockquote>
<p>Y se levanta el interprete de php:</p>
<blockquote><p># /etc/init.d/php-fastcgi start</p></blockquote>
<p>Sin olvidar incluirlo en la lista de servicios a arrancar automaticamente al iniciar el servidor:</p>
<blockquote><p># update-rc.d php-fastcgi defaults</p></blockquote>
<p>Para probar que todo está funcionando bien, basta con agregar esto en la configuración de tu sitio en nginx:</p>
<blockquote><p>location ~ \.php$ {<br />
    fastcgi_pass    127.0.0.1:9000;<br />
    fastcgi_index   index.php;<br />
    fastcgi_param   SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;<br />
    include         fastcgi_params;<br />
}</p></blockquote>
<p>Colocar un archivo de ejemplo <strong>/var/www/nginx-default/test.php</strong></p>
<blockquote><p>
< ?php</p>
<p>phpinfo();</p>
<p>? ></p></blockquote>
<p>Y reiniciar nginx:</p>
<blockquote><p># /etc/init.d/nginx restart
</p></blockquote>
<p>Si al entrar al sitio por el navegador, ves el contendio de Php Info, estas listo <img src='http://blog.carlosguerrero.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/receta-habilitar-php-en-nginx/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Script init.d para control de instancias Django</title>
		<link>http://blog.carlosguerrero.com/script-init-d-para-control-de-instancias-django/</link>
		<comments>http://blog.carlosguerrero.com/script-init-d-para-control-de-instancias-django/#comments</comments>
		<pubDate>Sat, 28 Jul 2012 00:04:20 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=428</guid>
		<description><![CDATA[Si necesitas correr muchas aplicaciones basadas en Django en un mismo servidor y estas cansado de abrir un screen o un tmux para cada instancia, entonces esto es lo que necesitas, un script init.d que automaticamente inicie, detenga o reinicie todas las instancias Django que tengas en una carpeta determinada: Copia ese archivo en /etc/init.d/ [...]]]></description>
			<content:encoded><![CDATA[<p>Si necesitas correr muchas aplicaciones basadas en <a href="http://djangoproject.com/">Django</a> en un mismo servidor y estas cansado de abrir un <a href="http://es.wikipedia.org/wiki/GNU_Screen">screen</a> o un <a href="http://tmux.sourceforge.net/">tmux</a> para cada instancia, entonces esto es lo que necesitas, un script init.d que automaticamente inicie, detenga o reinicie todas las instancias Django que tengas en una carpeta determinada:</p>
<p><script src="https://gist.github.com/3190940.js?file=django-fastcgi"></script></p>
<p>Copia ese archivo en <strong>/etc/init.d/</strong> con el nombre &#8220;django-fastcgi&#8221; y luego ejecuta:</p>
<blockquote><p># chmod +x /etc/init.d/django-fastcgi<br />
# update-rc.d django-fastcgi defaults</p></blockquote>
<p>Con eso ya tendrás a la disposición estos comandos:</p>
<p><strong>Iniciar</strong> todas las instancias Django:</p>
<blockquote><p># /etc/init/django-fastcgi start</p></blockquote>
<p><strong>Detener</strong> todas las instancias Django:</p>
<blockquote><p># /etc/init/django-fastcgi stop</p></blockquote>
<p><strong>Reiniciar</strong> todas las instancias Django:</p>
<blockquote><p># /etc/init/django-fastcgi restart</p></blockquote>
<p>Teniendo eso ya solo tendrías que configurar NGINX para que sirva apropiadamente cada una de las aplicaciones para su acceso web, usando los puertos del 8080 en adelante, pero para eso tienes también esta guía: <a href="http://blog.carlosguerrero.com/entrada-nginx-para-django-fastcgi/">Configuración NGINX para Django</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/script-init-d-para-control-de-instancias-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entrada NGINX para Django (fastcgi)</title>
		<link>http://blog.carlosguerrero.com/entrada-nginx-para-django-fastcgi/</link>
		<comments>http://blog.carlosguerrero.com/entrada-nginx-para-django-fastcgi/#comments</comments>
		<pubDate>Sat, 28 Jul 2012 00:03:35 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=437</guid>
		<description><![CDATA[Una de las maneras mas prácticas en las que se puede poner a funcionar Django mediante NGINX es mediante fastcgi, siento dan sencillo como lanzar la aplicación de Django con un comando como el siguiente: ./manage.py runfcgi method=threaded host=127.0.0.1 port=8080 Ese sencillo comando se encarga de lanzar la aplicación Django en modo fastcgi bastando simplemente [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las maneras mas prácticas en las que se puede poner a funcionar Django mediante NGINX es mediante <strong>fastcgi</strong>, siento dan sencillo como lanzar la aplicación de Django con un comando como el siguiente: </p>
<blockquote><p>./manage.py runfcgi method=threaded host=127.0.0.1 port=8080</p></blockquote>
<p>Ese sencillo comando se encarga de lanzar la aplicación Django en modo fastcgi bastando simplemente guardar en NGINX un archivo como el siguiente &#8220;nginx-fastcgi-app&#8221;</p>
<p><script src="https://gist.github.com/3191069.js?file=gistfile1.txt"></script></p>
<p>que deberá guardarse en /etc/nginx/sites-available y posteriormente ser activado con:</p>
<blockquote><p># cd /etc/nginx/sites-enabled<br />
# ln -s ../sites-available/nginx-fastcgi-app</p></blockquote>
<p>Y listo, ya podrémos acceder a la aplicación de Django sin tener que poner el puerto 8080, sino simplemente poniendo la URL que se configuró en NGINX.</p>
<p>Si deseas ponerle seguridad de manera que no cualquiera pueda aún entrar a la aplicación, puedes <a href="http://blog.carlosguerrero.com/restricciones-de-acceso-en-nginx/">agregarle seguridad mediante archivo access de nginx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/entrada-nginx-para-django-fastcgi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Restricciones de acceso en NGINX</title>
		<link>http://blog.carlosguerrero.com/restricciones-de-acceso-en-nginx/</link>
		<comments>http://blog.carlosguerrero.com/restricciones-de-acceso-en-nginx/#comments</comments>
		<pubDate>Sat, 28 Jul 2012 00:01:33 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=446</guid>
		<description><![CDATA[Para restringir el acceso a cualquier sitio en nginx, basta con agregar las siguientes lineas a cualquier servidor &#8220;nginx&#8221;: auth_basic &#8220;Acceso restringido, solo permitido mediante credencial&#8221;; auth_basic_user_file /var/www/archivo.access; Quedando algo parecido a esto: De manera que solo puedan acceder los usuarios y contraseñas especificados en el archivo /var/www/archivos.access, cuyo contenido deberá ser por ejemplo: # [...]]]></description>
			<content:encoded><![CDATA[<p>Para restringir el acceso a cualquier sitio en nginx, basta con agregar las siguientes lineas a cualquier servidor &#8220;nginx&#8221;:</p>
<blockquote><p>auth_basic &#8220;Acceso restringido, solo permitido mediante credencial&#8221;;<br />
auth_basic_user_file /var/www/archivo.access;</p></blockquote>
<p>Quedando algo parecido a esto:</p>
<p><script src="https://gist.github.com/3191132.js?file=app_with_auth"></script></p>
<p>De manera que solo puedan acceder los usuarios y contraseñas especificados en el archivo <strong>/var/www/archivos.access</strong>, cuyo contenido deberá ser por ejemplo:</p>
<blockquote><p># usuario:contraseña:comentario<br />
carlos:saEZ6MlWYV9nQ:bienvenido<br />
andres:saUbI5w9Auf32</p></blockquote>
<p>La contraseña se genera usando una de dos opciones:</p>
<p>1.- Comando en Perl:</p>
<blockquote><p>perl -le &#8216;print crypt(&#8220;contraseña&#8221;, &#8220;salt-hash&#8221;)&#8217;</p></blockquote>
<p>2.- Script en python:</p>
<p>Descargar el script: <a href="https://gist.github.com/3191120">https://gist.github.com/3191120</a> (original: <a href="http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py">http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py</a>) y para ejecutarlo sería: htpasswd.py -b archivoaccess usuario password</p>
<p>Y el script se encarga de automaticamente revisar si el usuario ya existe y de ser así, no agrega otra entrada sino que simplemente actualiza su contraseña.</p>
<p>Así que queda a elección de lo que te sea mas practico/útil. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/restricciones-de-acceso-en-nginx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Receta: Instalar OpenERP 6.1 en Ubuntu/Debian</title>
		<link>http://blog.carlosguerrero.com/receta-instalar-openerp-6-1-en-ubuntudebian/</link>
		<comments>http://blog.carlosguerrero.com/receta-instalar-openerp-6-1-en-ubuntudebian/#comments</comments>
		<pubDate>Fri, 27 Jul 2012 02:08:25 +0000</pubDate>
		<dc:creator>guerrerocarlos</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.carlosguerrero.com/?p=389</guid>
		<description><![CDATA[Primero que nada, instalar todo lo básico para compilar paquetes: # aptitude install gnulib Segundo hay que instalar Postgres, pero para eso ya hice esta otra guia: Receta para Instalar Postgres Ahora instalamos lo básico para instalar paquetes python: # aptitude install python-setuptools Inmediatamente instalamos pip para no ir a la caer en la instalación [...]]]></description>
			<content:encoded><![CDATA[<p>Primero que nada, instalar todo lo básico para compilar paquetes:</p>
<blockquote><p># aptitude install gnulib</p></blockquote>
<p>Segundo hay que instalar Postgres, pero para eso ya hice esta otra guia: <a href="http://blog.carlosguerrero.com/receta-instalar-postgres/">Receta para Instalar Postgres</a></p>
<p>Ahora instalamos lo básico para instalar paquetes python:</p>
<blockquote><p># aptitude install python-setuptools</p></blockquote>
<p>Inmediatamente instalamos <a href="http://www.pip-installer.org">pip</a> para no ir a la caer en la instalación de seguir usando easy_install:</p>
<blockquote><p># easy_install pip</p></blockquote>
<p>Procedemos a instalar todos los paquetes necesarios, usando los paquetes en los repositorios de ubuntu:</p>
<blockquote><p># aptitude install postgresql-server-dev-8.4 python2.7-dev python-lxml python-yaml python-reportlab python-mako python-pychart python-werkzeug python-babel python-dateutil python-openid</p></blockquote>
<p>Instalamos el modulo que permitirá a python comunicarse con postgres usando <a href="http://www.pip-installer.org">pip</a>:</p>
<blockquote><p># pip install psycopg2</p></blockquote>
<p>Por ultimo una librería que se llama <a href="http://pytz.sourceforge.net/">pytz</a> muy útil para manejar múltiples zonas horarias en las aplicaciones basadas en python:</p>
<blockquote><p># pip install pytz</p></blockquote>
<p>Nos conectamos a postgres mediante PgAdminIII como y creamos un nuevo usuario dedicado para postgres, yo lo llamé &#8220;openerp1&#8243;, no olviden de darle permiso para crear tablas:</p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-17.07.41.png"><img class="aligncenter size-medium wp-image-416" title="Crear nuevo usuario de Postgres" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-17.07.41-300x185.png" alt="" width="300" height="185" /></a></p>
<p>Luego de creado el usuario que usará <em>OpenERP</em> para acceder a <em>postgres</em>, descargamos el código fuente desde <a href="http://www.openerp.com/downloads">OpenERP Downloads</a>:</p>
<blockquote><p># wget http://nightly.openerp.com/6.1/releases/openerp-6.1-latest.tar.gz</p></blockquote>
<p>Descomprimimos el tar.gz que se descargó:</p>
<blockquote><p># tar zxvf http://nightly.openerp.com/6.1/releases/openerp-6.1-latest.tar.gz</p></blockquote>
<p>Nos movemos al interior de esa carpeta y <strong>sin ser root</strong> ejecutamos:</p>
<blockquote><p>./openerp-server &#8211;database=openerp1 &#8211;db_user=openerp1 &#8211;db_password=contraseñaopenerp1 &#8211;db_host=127.0.0.1</p></blockquote>
<p>Y ya podemos acceder a nuestra instancia de OpenERP, abriendo en el navegador http://127.0.0.1:8069/ o la ip pública del servidor donde lo estén instalando.</p>
<p>Una vez allí, lo primero a hacer es crear una nueva base de datos para OpenERP, haciendo clic en el enlace &#8220;Manage Databases&#8221;:</p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-21.32.19.png"><img class="aligncenter size-medium wp-image-418" title="Botón Manage Databases" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-21.32.19-300x218.png" alt="" width="300" height="218" /></a></p>
<p>Habiendo entrado al &#8220;Database Manager&#8221; basta con rellenar los campos para darle una contraseña al que será el Administrador de esa instancia, y ponerle un nombre a esa instancia. La contraseña que dice &#8220;Master password&#8221; no hace falta cambiarla, es la que viene por defecto y se define es en los archivos de configuración internos de OpenERP.</p>
<p><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-21.33.25.png"><img class="aligncenter size-medium wp-image-419" title="Database Manager" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-21.33.25-300x141.png" alt="" width="300" height="141" /></a>Se le da ahora &#8220;Create&#8221; y a esperar un par de minutos que OpenERP se encargue de inicializar todo, luego basta con seleccionar con qué modulos desea comenzar su instalación, y empezar a disfrutar de las bondades de este tremendo Framework para empresas:</p>
<p style="text-align: center;"><a href="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-17.26.03.png"><img class="aligncenter size-medium wp-image-420" title="Modulos OpenERP 6.1" src="http://blog.carlosguerrero.com/wp-content/uploads/2012/07/Captura-de-pantalla-2012-07-26-a-las-17.26.03-300x131.png" alt="" width="347" height="151" /></a><strong>(clic para ampliar)</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carlosguerrero.com/receta-instalar-openerp-6-1-en-ubuntudebian/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
