<?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>nachopro &#187; Informática</title>
	<atom:link href="http://blog.nachopro.com.ar/category/informatica/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nachopro.com.ar</link>
	<description>yendo de la cama a la compu...</description>
	<lastBuildDate>Sat, 19 Nov 2011 01:34:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Borrar MBR y tabla de partición</title>
		<link>http://blog.nachopro.com.ar/borrar-mbr-y-tabla-de-particion/</link>
		<comments>http://blog.nachopro.com.ar/borrar-mbr-y-tabla-de-particion/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 01:34:00 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[Cómo era...]]></category>
		<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false">http://blog.nachopro.com.ar/?p=389</guid>
		<description><![CDATA[Hola a todos! En esta oportunidad les cuento cómo, desde Linux/OSX, reventar un disco rígido para dejarlo "0km". # dd if=/dev/zero of=/dev/sda bs=1M count=2 Con esto lo que hacemos es llenar de ceros los primeros 2MB del disco rígido, donde se encuentra el MBR y la tabla de parción (o parte de ella). Con esto [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos!</p>
<p>En esta oportunidad les cuento cómo, desde Linux/OSX, reventar un disco rígido para dejarlo "0km".</p>
<p><code># dd if=/dev/zero of=/dev/sda bs=1M count=2</code></p>
<p>Con esto lo que hacemos es llenar de ceros los primeros 2MB del disco rígido, donde se encuentra el MBR y la tabla de parción (o parte de ella). Con esto dejamos el disco preparado para ser particionado sin dejar basura en él.</p>
<p>pd: esto no deja el disco vacío, de hecho sus datos pueden ser recuperados!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/borrar-mbr-y-tabla-de-particion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Telmex, Claro, HG850a y la repú</title>
		<link>http://blog.nachopro.com.ar/telmex-claro-hg850a-y-la-repu/</link>
		<comments>http://blog.nachopro.com.ar/telmex-claro-hg850a-y-la-repu/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 00:19:13 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://blog.nachopro.com.ar/?p=381</guid>
		<description><![CDATA[Bueno, todos mis allegados conocen las peripecias que vivo con Telmex/Claro en mi conexión hogareña a internet. Voy a pegar dos emails que mandé y en los que me responden cosas como "es un problema en su red internar, no podemos hacer nada". Tengo un GPON Huawai HG850a y Telmex de 5Mb. Estimados, necesito hacerles [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, todos mis allegados conocen las peripecias que vivo con Telmex/Claro en mi conexión hogareña a internet. Voy a pegar dos emails que mandé y en los que me responden cosas como "es un problema en su red internar, no podemos hacer nada".</p>
<p>Tengo un GPON Huawai HG850a y Telmex de 5Mb.</p>
<blockquote><p>Estimados, necesito hacerles una consulta técnica. Intenté evacuarla por teléfono pero nunca me pudieron dar una solución.</p>
<p>La prueba consiste en bajar del mismo servidor una imagen de CD de Ubuntu o ver un mismo video HD en Youtube.</p>
<p>Cuando conecto:<br />
* una PC con determinadas placas de red (Realtek, Nvidia);<br />
* notebooks;<br />
* playstation;</p>
<p>directamente al módem de ustedes la conexión anda de mil maravillas:<br />
Descarga de 400KB/s a 600KB/s aprox (ya sea que use Windows o Mac OS X).</p>
<p>El problema viene cuando conecto routers (tengo uno Linksys, TPLink, NetGear y una PC Linux que tengo desde siempre).<br />
En ese caso por más que haya una única PC conectada al router, no logro bajar a más de 90KB/s.</p>
<p>Por otro lado usando una PC con Windows XP y su Internet Connection Sharing como router se navega perfectamente teniendo 2 o 3 PCs descargando simultaneamente.</p>
<p>Quisiera saber si el módem que ustedes me proveen detecta de alguna manera que conecté un router y en base a eso activa algún sistema de QoS, porque si no no encuentro razón alguna para que suceda esto.</p>
<p>En los routers que tengo he desactivado siempre el QoS, verificado que el MTU esté bien, que las reglas de NAT y routing sean las correctas pero no logré mejorar esta situación. También, sospechando que el módem pueda detectar mis routers probé cambiando la Mac Address por alguna de Realtek, Intel o Nvidia... pero tampoco funcionó.</p>
<p>Realmente me gustaría que me den una respuesta concreta, ya que telefónicamente me dicen que es un problema del router, que lo reinicie y cosas de ese estilo. Llevando mi mismo router y con la misma configuración a la casa de un vecino que tiene el mismo servicio todo funciona correctamente. Esto lo he comentado telefónicamente e insisten en que el problema es mío y no del servicio o configuración del módem de fibra óptica.</p>
<p>Espero poder resolver este problema, porque la realidad es que si bien la latencia de la fibra óptica es genial para jugar en internet, estoy pagando 170 pesos para navegar a 100KB/s y me parece un despropósito.</p>
<p>Muchas gracias.</p></blockquote>
<p>Luego mandé este segundo, mucho más jugoso!</p>
<blockquote><p>Estimados, me vuelvo a contactar para ampliar la consulta en base a<br />
unas pruebas que he realizado.</p>
<p>Hoy cuando charlé con la persona de soporte técnico me encontraba en<br />
mi lugar de trabajo. Al llegar a mi domicilio realicé las siguientes<br />
pruebas:</p>
<p>Prueba 1</p>
<p>1. Conecté un switch (no un router, un simple switch) directo al módem<br />
de fibra que ustedes me asignaron.<br />
2. A este switch conecté por cable dos PCs, una Laptop y una playstation.</p>
<p>* Al verificar los equipos, todos habían adquirido IPs públicas del<br />
tipo 186.182.122.x;<br />
* Cada uno de ellos navegaba a un máximo de 90KB/s;</p>
<p>Prueba 2</p>
<p>1. Conecté un switch directo al módem de fibra de ustedes.<br />
2. A este switch conecté una única PC.</p>
<p>* dicha PC tomó una IP pública y navegaba a un máximo de 90KB/s</p>
<p>Prueba 3</p>
<p>1. Conecté una PC con Windows XP e Internet Connection Sharing como<br />
router directo al módem.<br />
2. Conecté un Router (con la misma configuración que lleva cuando lo<br />
conecto directo al módem de ustedes) a esa PC con Windows XP.<br />
3. Conecté mis otras PCs al router.</p>
<p>* Todas las PCs conectadas el router navegaban de mil maravillas,<br />
entre 150KB/s a 600KB/s</p>
<p>Con estos resultados se da por entendido que:</p>
<p>* el módem que ustedes me dieron efectivamente detecta cuando hay un<br />
switch conectado a él y reparte el ancho de banda de forma fija aunque<br />
haya un único equipo conectado;</p>
<p>* el módem detecta cuando se conecta una PC y entonces le asigna todo<br />
el ancho de banda (asignado por el plan que tengo) a ese único equipo;</p>
<p>* el módem interpreta que se le conectó un switch cuando en realidad<br />
se le conecta un router, entonces todas las PCs conectadas a dicho<br />
router quedan limitadas a 90KB/s que es lo que el módem le da al<br />
router.</p>
<p>Una duda que me surge es que cómo yo contratando un servicio<br />
residencial puedo gozar de tantas IPs públicas.</p>
<p>A esta altura, y con todas las pruebas que realicé no caben dudas algo<br />
en la configuración del módem está mal, y no me refiero a los valores<br />
del GPON, si no a su configuración operativa.</p>
<p>Por las dudas adjunto la Mac Address del módem: 28 6e d4 xx xx xx<br />
(esto lo hago, porque hace un tiempo tuve una serie de problemas con<br />
la conexión y me decían que estaba todo bien cuando el módem<br />
directamente no sincronizaba y resultó ser que tenían otra mac address<br />
en su sistema)</p>
<p>Bueno, quedo a la espera de una respuesta.</p>
<p>Muchas gracias.</p></blockquote>
<p>Por lo pronto, navego a 1Mb :/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/telmex-claro-hg850a-y-la-repu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Colas para gente como yo</title>
		<link>http://blog.nachopro.com.ar/colas-para-gente-como-yo/</link>
		<comments>http://blog.nachopro.com.ar/colas-para-gente-como-yo/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 02:52:17 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://blog.nachopro.com.ar/?p=354</guid>
		<description><![CDATA[En esta oportunidad les contaré sobre las colas y mi incursión en ellas Primero que nada, amo las colas... las amo por el doble sentido que generan en nuestro idioma, seguramente tendré miles de hits con intenciones de dudooosa moralidad ¿Qué es una cola? Una cola es una estructura de datos, es un elemento en [...]]]></description>
			<content:encoded><![CDATA[<p>En esta oportunidad les contaré sobre las colas y mi incursión en ellas <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Primero que nada, amo las colas... las amo por el doble sentido que generan en nuestro idioma, seguramente tendré miles de hits con intenciones de dudooosa moralidad <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>¿Qué es una cola?</p>
<p>Una cola es una estructura de datos, es un elemento en el que podemos <em>poner</em> datos por un lado y <em>sacarlos</em> por el otro <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>¿Para qué sirve una cola?</p>
<p>Según lo recién expuesto, para ponerla y sacarla <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Esto aplicado a la informática serviría para que un programa, encargado de cierta tarea, pueda poner su resultado en la cola; luego, otro programa encargado de procesar esos resultados los tome y haga algo.</p>
<p><img class="alignleft" title="RabbitMQ" src="http://www.rabbitmq.com/img/rabbitmq_logo_strap.png" alt="RabbitMQ" width="361" height="76" />Pasando a la parte seria del asunto voy a contarles de mi experiencia con <a href="http://www.rabbitmq.com/" target="_blank">RabbitMQ</a>. Jaja, no puedo evitar reirme: colas, meter, sacar, rabbit (conejito), saquen sus conclusiones <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  -aunque claro que PlayBoy no es algo del ambiente nerd-</p>
<p>Entendamos la infraestructura y aclaremos los tantos: RabbitMQ implementa el protocolo <a href="http://www.amqp.org/" target="_blank">AMQP</a>, cosa que no conozco en detalle -saliendo de que es un sistema de colas abierto- ni me interesa por el momento. Así hablaré basándome en RabbitMQ (siendo que la mayoría va a ser aplicable a colas basadas en AMQP).</p>
<p>Teoría de colas x $2.-</p>
<p>Vayamos por partes, en todo sistemas basados en colas tenemos tres elementos principales:</p>
<ol>
<li>Un emisor: Es el que origina un dato y lo pone en la cola.</li>
<li>La cola: Es el lugar donde ese dato reside.</li>
<li>Un receptor: Es el que toma un dato y hace algo con él.</li>
</ol>
<p>Nos vamos a enfocar en el punto dos: La cola.</p>
<p>La cola en realidad comprende un concepto algo más complejo que un simple lugar donde se tiran cosas y de dónde se las sacan. En ella encontraremos:</p>
<ol>
<li>El <strong>message</strong>: Será el portador de nuestra información.</li>
<li>El <strong>exchange</strong>: Será el recepcionista de nuestro mensaje y deberá saber qué hace con él.</li>
<li>La <strong>routing key</strong>: Será una simple palabra o texto que nuestro exchange deberá conocer.</li>
<li>La <strong>queue</strong>: Será la cola en donde realmente residirá nuestro message.</li>
<li>El <strong>binding</strong>: Será el encargado de decirle al exchange en qué queue guardará el message dado según su routing key.</li>
</ol>
<p>El message es un objeto que contiene la información concreta que le damos nosotros y una serie de propiedades, en la que destacamos el <strong>delivery_mode</strong>, que acepta dos valores 1: mensaje temporal, 2: mensaje persistente.</p>
<blockquote><p>Las colas son demasiado flexibles para los que estamos acostumbrados a las cosas viejas de la informática, por ejemplo: Se declaran en tiempo de ejecución; se borran cuando el último cliente se desconecta y éstas están vacías; por parte del servidor no hace falta configurar un corno; etc; etc.</p></blockquote>
<p>El exchange es un broker, es con quién charla directamente el programa que se conecta a la cola para meter un message. Él sabe, o debería saber, qué hacer con el mensaje que le damos -es decir, en qué cola guardarlo- y cómo distribuirlo: <strong>direct</strong>: es un método de trabajo donde una routing key define una única cola de destino, <strong>fanout</strong>: es un método en el que no importa nada, todo lo que llega va a todas las colas definidas, entre otros modos que hay y que no voy a tratar.</p>
<p>La routing key es un simple texto idenfiticativo, pero que no trataré en mayor detalle.</p>
<p>La queue es la amada cola, que puede ser o no persistente: es decír que puede existir mientras se use y luego desaparecer o bien durar en el tiempo, soportando que el servidor sea reiniciado.</p>
<p>El binding es la acción de crear la siguiente regla: exchange-routing key va a la cola queue.</p>
<p>Hasta aquí, no van a entender un carajo... y mi idea no es ayudarlos, sino quedar como un duque en el tema y ganar minitas <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Ahora vamos a las acciones básicas que tenemos en la cola:</p>
<ol>
<li>publish: Se le da el message deseado, el exchange a usar y la routing key.</li>
<li>get: Se le da el nombre de la cola, para obtener un mensaje.</li>
<li>consume: Se le da el nombre de la cola y queda a la escucha de mensajes.</li>
<li>tx_select: Se usa para activar transacciones.</li>
<li>tx_commit: Se usa para confirmar la transacción y automáticamente inicia otra.</li>
<li>tx_rollback: Se usa para abortar la transacción y automáticamente inicia otra.</li>
</ol>
<p>En fin, acá hay conceptos básicos y otros complejos... realmente esto lo pensé para mí mismo pero les prometo que en breve publicaré unos ejemplos en Python para que puedan aprender un poco más de cómo implementar esta teoría.</p>
<p>Hasta la próxima <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/colas-para-gente-como-yo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Firewall o no?</title>
		<link>http://blog.nachopro.com.ar/firewall-o-no/</link>
		<comments>http://blog.nachopro.com.ar/firewall-o-no/#comments</comments>
		<pubDate>Thu, 06 May 2010 20:39:55 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://blog.nachopro.com.ar/?p=280</guid>
		<description><![CDATA[Hace un buen tiempo estoy a cargo de unos servidores, por así decirlo, y tuve que poner manos a las obras en cuanto a la seguridad de los mismos. Según un referente en la materia (?), Ángel Freire, y con quién coincido: Es mejor controlar qué servicios se brindan y dónde escuchan, que desconocerlos y [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un buen tiempo estoy a cargo de unos servidores, por así decirlo, y tuve que poner manos a las obras en cuanto a la seguridad de los mismos.</p>
<p>Según un referente en la materia (?), <a href="http://blog.cuerty.com/">Ángel Freire</a>, y con quién coincido: Es mejor controlar qué servicios se brindan y dónde escuchan, que desconocerlos y a causa de eso cargar reglas mediante iptables a nuestro querido net filter.</p>
<p>Pero algo se escapa, qué pasa con los ataques por fuerza bruta a servicios vitales como SSH? Bien, a continuación mi solución.</p>
<p><span id="more-280"></span>Una vez que decidimos qué servicios brindaremos, tenemos que ver que escuchen donde realmente lo queremos.</p>
<pre>~ # netstat -an | grep LISTEN
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:1978          0.0.0.0:*               LISTEN</pre>
<p>Aquí vemos varios servicios, cada uno de ellos escuchando en distintas interfaces y no por casualidad. Las bases de datos (3306, MySQL y 1978, TokyoTyrant) escuchando en loopback, localhost o como le quieran decir <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  y por otro lado los servicios públicos (8000, 80, 25 y 22) escuchando tanto en loopback como el resto de las interfaces <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si tuviésemos todo a la bartola, necesitaríamos bloquear, por ejemplo, el acceso a MySQL y Tokyo con unas reglas de iptables. No es más lindo así?</p>
<p>Bien, es más lindo así <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ahora, qué pasa con el puerto 22 de SSH? Necesitamos que escuche en las interfaces externas, si no no tendría sentido que exista, pero al hacerlo está suceptible a los inescrupulosos intentos de cientos y miles de idiotas por hacerse del control de nuestros servidores.</p>
<p>Un buen día me harté de ver miles y miles de ráfagas de intentos de autenticación a mi SSH, gestionados por scripts, con usuarios básicos o clásicos de sistemas Unix.</p>
<p>¿La solución? Usar net filter (mediante reglas de iptables) cuando se lo necesita:</p>
<pre>#!/bin/bash
# Borramos todas las reglas existentes
iptables -F

# Permitimos la comunicación desde nuestra casa
iptables -A INPUT  -i eth0 -s DNS_DE_MI_CASA -d IP_DE_MI_SERVIDOR -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -s IP_DE_MI_SERVIDOR -d DNS_DE_MI_CASA -p tcp --sport 22 -j ACCEPT

# Permitimos la comunidación desde nuestro trabajo
iptables -A INPUT  -i eth0 -s DNS_DE_MI_TRABAJO -d IP_DE_MI_SERVIDOR -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -s IP_DE_MI_SERVIDOR -d DNS_DE_MI_TRABAJO -p tcp --sport 22 -j ACCEPT

# Denegamos el resto de accesos
iptables -A INPUT  -i eth0 -s 0/0 -d IP_DE_MI_SERVIDOR -p tcp --dport 22 -j DROP</pre>
<p>Con un script como ese, sólo permitimos que al puerto 22 lleguen peticiones de nuestros dominios dinámicos <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Lo cual es muy cómodo, aunque en el caso de tener IPs dinámica, tendrán que ejecutar este script, sea mediante cron u otro método, para que las mismas sean actualizadas con las reglas de iptables.</p>
<p>En fin, hasta la próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/firewall-o-no/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>crear un alias en Bash?</title>
		<link>http://blog.nachopro.com.ar/crear-un-alias-en-bash/</link>
		<comments>http://blog.nachopro.com.ar/crear-un-alias-en-bash/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 15:22:24 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[Cómo era...]]></category>
		<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false">http://blog.nachopro.com.ar/?p=238</guid>
		<description><![CDATA[Simple y sensillo! $ gvim ~/.bashrc y luego agreamos algo como alias lsa='ls -lha'' lsa va a ser el nombre del comando al que llamaremos desde la terminal. Lo seguido del igual, y entrecomillado, es lo que se va a ejecutar]]></description>
			<content:encoded><![CDATA[<p>Simple y sensillo!</p>
<p><code>$ gvim ~/.bashrc</code></p>
<p>y luego agreamos algo como</p>
<p><code>alias lsa='ls -lha''</code></p>
<p><em>lsa</em> va a ser el nombre del comando al que llamaremos desde la terminal. Lo seguido del igual, y entrecomillado, es lo que se va a ejecutar <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/crear-un-alias-en-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>excluir extensiones de archivo del svn?</title>
		<link>http://blog.nachopro.com.ar/excluir-extensiones-de-archivo-del-svn/</link>
		<comments>http://blog.nachopro.com.ar/excluir-extensiones-de-archivo-del-svn/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 01:44:08 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[Cómo era...]]></category>
		<category><![CDATA[Subversion (svn)]]></category>

		<guid isPermaLink="false">http://blog.nachopro.com.ar/?p=216</guid>
		<description><![CDATA[Siempre me pasa que al crear un nuevo proyecto y agregarlo al repositorio SVN, se me añaden archivos .pyc .pyo y .swp, entre otros ¬¬ Para evitarnos dolores de cabeza hacemos lo siguiente: 1. nos situamos en el raíz de nuestro proyeco y creamos un archivo llamado .svnignore con un contenido similar a éste: .pyc [...]]]></description>
			<content:encoded><![CDATA[<p>Siempre me pasa que al crear un nuevo proyecto y agregarlo al repositorio SVN, se me añaden archivos .pyc .pyo y .swp, entre otros ¬¬</p>
<p>Para evitarnos dolores de cabeza hacemos lo siguiente:</p>
<p>1. nos situamos en el raíz de nuestro proyeco y creamos un archivo llamado .svnignore con un contenido similar a éste:</p>
<p><code>.pyc<br />
.pyo<br />
.tmp<br />
.swp</code></p>
<p>y luego ejecutamos el siguiente comando:</p>
<p><code>svn ps svn:ignore . -F .svnignore -R</code></p>
<p>Con esto logramos que se aplique recursivamente la exclusión del monitoreo en todo nuestro proyecto <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/excluir-extensiones-de-archivo-del-svn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>levantar un webserver con Python?</title>
		<link>http://blog.nachopro.com.ar/levantar-un-webserver-con-python/</link>
		<comments>http://blog.nachopro.com.ar/levantar-un-webserver-con-python/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 02:45:17 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[Cómo era...]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.nachopro.com.ar/?p=212</guid>
		<description><![CDATA[Muchas veces queremos compartir archivos entre dos o más PCs y Samba o Windows o lo que haya en el medio no coopera, por eso la mejor solución es situarse en el directorio que queremos compartir y ejecutar: python -m SimpleHTTPServer para tener un servidor compartiendo los ficheros por http]]></description>
			<content:encoded><![CDATA[<p>Muchas veces queremos compartir archivos entre dos o más PCs y Samba o Windows o lo que haya en el medio no coopera, por eso la mejor solución es situarse en el directorio que queremos compartir y ejecutar:</p>
<p><code>python -m SimpleHTTPServer</code></p>
<p>para tener un servidor compartiendo los ficheros por http <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/levantar-un-webserver-con-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar y configurar lighttpd + PHP + MySQL en Ubuntu</title>
		<link>http://blog.nachopro.com.ar/instalar-y-configurar-lighttpd-php-mysql-en-ubuntu/</link>
		<comments>http://blog.nachopro.com.ar/instalar-y-configurar-lighttpd-php-mysql-en-ubuntu/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 14:50:39 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Si bien hay cientos de artículos de cómo instalar y echar a andar la fórmula lighttpd + PHP + MySQL, la gran mayoría peca de estar apuntada a un público intermedio/avanzado, y la poca minoría es difícil de encontrar . Es obvio que tanto un intermedio como un neófito de GNU/Linux puede compilar desde las [...]]]></description>
			<content:encoded><![CDATA[<p>Si bien hay cientos de artículos de cómo instalar y echar a andar la fórmula lighttpd + PHP + MySQL, la gran mayoría peca de estar apuntada a un público intermedio/avanzado, y la poca minoría es difícil de encontrar <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Es obvio que tanto un intermedio como un neófito de GNU/Linux puede compilar desde las fuentes aunque seguramente utilice algún gestor de paquetes, pero no que la media de novatos logre hacer andar (configurar correctamente) los programas que instale. Por eso voy a ir paso a paso por el camino de instalar y configurar la fórmula antes mencionada.</p>
<p><span id="more-160"></span></p>
<p>Primero vamos a instalar los servicios (web y de base de datos, respectivamente):</p>
<pre class="codigofuente">$ sudo aptitude install lighttpd
$ sudo aptitude install mysql-server</pre>
<p>Terminada la instalación de MySQL, se nos solicitará que ingresemos una clave para el usuario root mediante una caja de diálogo de ncurses <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Ahora vamos por el intérprete de PHP:</p>
<pre class="codigofuente">$ sudo aptitude install php5-cgi</pre>
<p>En este momento, si nada grave ocurrió, tenemos andando a lighttpd y MySQL en nuestra PC. Pero hay que meter mano en unos archivos para que PHP funcione con ellos <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Abrimos el archivo de configuración de PHP ...</p>
<pre class="codigofuente">$ sudo gedit /etc/php5/cgi/php.ini</pre>
<p>... y descomentamos la línea que dice "cgi.fix_pathinfo=0" y cambiamos ese 0 por un 1. quedando</p>
<pre class="codigofuente">cgi.fix_pathinfo=1</pre>
<p> y guardamos.</p>
<p>Ahora tenemos que activar en lighttpd su módulo de FastCGI y configurar el intérprete de PHP, para lo cual...</p>
<pre class="codigofuente">$ sudo gedit /etc/lighttpd/lighttpd.conf</pre>
<p>y buscamos la línea que diga "server.modules", ahí agregamos "mod_fastcgi", quedando algo como:</p>
<pre class="codigofuente">server.modules              = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_compress",
            "mod_fastcgi",
#           "mod_rewrite",
#           "mod_redirect",
#           "mod_status",
#           "mod_evhost",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
#           "mod_expire",
#           "mod_flv_streaming",
#           "mod_evasive"
 )</pre>
<p>Antes de cerrar el archivo, vamos a la opción "server.document-root" y cambiamos el /var/www/ por</p>
<pre class="codigofuente">server.document-root       = "/home/TU_NOMBRE_DE_USUARIO/webs/"</pre>
<p>así podemos trabajar tranquilamente en nuestro propio home sin lidiar con permisos de root a la hora de crear o modificar los archivos que vamos a hospedar <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Y ahora sí, guarden los cambios y listo.</p>
<p>Ahora nos queda la siguiente linea de comandos</p>
<pre class="codigofuente">$ sudo cp /etc/lighttpd/conf-available/10-fastcgi.conf /etc/lighttpd/conf-enabled/</pre>
<p>con la que copiaremos la configuración por defecto que trae lighttpd para operar con PHP. Si somos experimentados en el tema, podemos "enchular" (jaja) esas opciones... pero por ahora no es necesario <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Seguro te lo estabas preguntando... y es ahora! vamos a reiniciar lighttpd para que tome los cambios:</p>
<pre class="codigofuente">$ sudo /etc/init.d/lighttpd restart</pre>
<p>Sí señores, ya está "todo" andando <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Para probarlo créen un "prueba.php" cuyo contenido sea como el siguiente y a navegar se ha dicho!</p>
<pre class="codigofuente">&lt;?
phpinfo();
?&gt;</pre>
<p>Aclaración: dije que "ya está "todo" andando" porque legalmente está todo regio, pero seguramente nos hará falta el soporte de las GD y MySQL para PHP, como quizás otras librerías. Por eso debemos hace un...</p>
<pre class="codigofuente">$ sudo aptitude install php5-gd php5-mysql</pre>
<p>... y volver a reiniciar lighttpd</p>
<pre class="codigofuente">$ sudo /etc/init.d/lighttpd restart</pre>
<p>para que los cambios sean efectuados.</p>
<p>Para consultar el resto de librerías disponibles, y que quizás debamos instalar según nuestras necesidades, basta con</p>
<pre class="codigofuente">$ sudo aptitude search php5</pre>
<p>Descargo: Al momento de escribir este artículo en los repositorios del Ubuntu Gutsy Gibbon se encuentran los siguientes paquetes: lighttpd 1.4.18-1ubuntu1; php5-cgi 5.2.3-1ubuntu6.2; mysql-server 5.0.45-1ubuntu3.1.</p>
<p>Ahora sí, hasta la próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/instalar-y-configurar-lighttpd-php-mysql-en-ubuntu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>cdrdao: Crear imágenes .bin con .toc y .cue de PlayStation 1</title>
		<link>http://blog.nachopro.com.ar/cdrdao-crear-imagenes-bin-con-toc-y-cue-de-playstation-1/</link>
		<comments>http://blog.nachopro.com.ar/cdrdao-crear-imagenes-bin-con-toc-y-cue-de-playstation-1/#comments</comments>
		<pubDate>Sun, 06 Jan 2008 03:07:15 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Con la llegada del pSX a mi Ubuntu (gracias a Ensoñaciones y Linux) ya puedo resusitar mis queridos clásicos de PlayStation 1 que tenía tirados por ahí a causa de la rotura de mi consola. Me encantó lo bien que emula al aparato de Sony, pero a los minutos me irritó tener que poner y [...]]]></description>
			<content:encoded><![CDATA[<p>Con la llegada del <a href="http://psxemulator.gazaxian.com/">pSX</a> a mi Ubuntu (gracias a <a href="http://miqueridopinwino.blogspot.com/2007/10/psx-emulator-posiblemente-el-mejor.html" title="Leer artículo">Ensoñaciones y Linux</a>) ya puedo resusitar mis queridos clásicos de PlayStation 1 que tenía tirados por ahí a causa de la rotura de mi consola.</p>
<p>Me encantó lo bien que emula al aparato de Sony, pero a los minutos me irritó tener que poner y sacar los CDs de mi lectora por lo que empecé a buscarle la vuelta como para poder ejecutar grandiosos títulos como "Collin McRae Rally 2" o "Legend" desde el disco rígido de la PC.</p>
<p><span id="more-159"></span></p>
<p>Así que vayamos al grano:</p>
<pre class="codigofuente">$ sudo cdrdao scanbus</pre>
<p>Con eso obtenemos la dirección, en el sistema, de nuestras lectoras de CDs. Nos devolverá algo similar a "ATAPI:0,1,0          SONY    , DVD RW DW-D26A  , JYS3".</p>
<p>Ahora, con ese dato, procedemos a extrar el contenido del disco para generar el .bin y .toc <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre class="codigofuente">$ cdrdao read-cd --read-raw --device ATAPI:0,1,0 --datafile NOMBRE_DEL_JUEGO.bin NOMBRE_DEL_JUEGO.toc</pre>
<p>A esta altura tenemos el .bin (con el contenido crudo del CD leido) y el .toc (la tabla de contenido del .bin). Para poder usar esta imagen con el pSX necesitamos un archivo .cue (cumple la misma función que el .toc pero utiliza otro formato).</p>
<pre class="codigofuente">$ toc2cue NOMBRE_DEL_JUEGO.toc NOMBRE_DEL_JUEGO.cue</pre>
<p>Y voilá! Más linda que nunca!, tenemos una imagen idéntica a la del CD que podemos usar directamente, mediante el .cue, con el pSX o a modo de back-up para grabarla en un CD-R en caso de pérdida o rotura del original <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Un saludo para todos!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/cdrdao-crear-imagenes-bin-con-toc-y-cue-de-playstation-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajustando la hora según zona horaria en PHP</title>
		<link>http://blog.nachopro.com.ar/ajustando-la-hora-segun-zona-horaria-en-php/</link>
		<comments>http://blog.nachopro.com.ar/ajustando-la-hora-segun-zona-horaria-en-php/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 12:25:33 +0000</pubDate>
		<dc:creator>nachopro</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Muchas veces, los programadores, tenemos que resolver problemas y cálculos en donde alguna de sus variables es el tiempo. Un ejemplo clásico es guardar la hora en la que se realizó un ingreso al sistema o la registración de un cliente. Generalmente, y más que nada en PHP, uno utiliza tanto servidores locales (ubicados en [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces, los programadores, tenemos que resolver problemas y cálculos en donde alguna de sus variables es el tiempo. Un ejemplo clásico es guardar la hora en la que se realizó un ingreso al sistema o la registración de un cliente.</p>
<p><span id="more-147"></span></p>
<p>Generalmente, y más que nada en PHP, uno utiliza tanto servidores locales (ubicados en país de uno, con la hora en dicha zona horaria) como servidores de Estados Unidos, Alemania o cualquier otra zona del mundo. En este segundo caso surgen los problemas porque cada servidor va a tener la hora que corresponde a su ubicación geográfica, sigamos el siguiente ejemplo:</p>
<p>Yo, nachopro, hago un trabajo para un cliente que tiene su sistema acá, en Argentina. Este cliente contrató un servidor de última generación que se ubica en Texas (Estados unidos). Resultando que la hora que mi cliente necesita es la GMT-3 mientras que la hora que tiene el servidor es GMT-8.</p>
<p>El problema es que al usar la función date() de PHP, siendo las 9:42 AM acá en Argentina, me va a devolver 4:42 AM. Una notable diferencia de 5 horas, nada menos <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>La solución consiste en generar la hora en base a la hora GMT-0 y sumarle nuestra diferencia respecto a ella. Es decir, nosotros estamos en GMT-3. Quiere decir que si la hora GMT es 12:46 y le sumamos nuestra zona horaria (-3) obtenemos 12:46 + (-3:00) = 9:46! En el caso de Texas realizamos 12:46 + (-8:00) = 4:46!</p>
<p>Esto es amazing y se resuelve con el siguiente código de PHP:</p>
<pre class="codigofuente">
?php

function hora_local($zona_horaria = 0)
{
	if ($zona_horaria > -12.1 and $zona_horaria < 12.1)
	{
		$hora_local = time() + ($zona_horaria * 3600);
		return $hora_local;
	}
	return 'error';
}

echo gmdate('d-m-Y H:i:s', hora_local(-8));

?
</pre>
<p>Esta función recibe una zona horaria y nos devuelve los segundos de la hora actual más los segundos de dicha zona horaria. Se debe emplear como segundo parámetro de la función gmdate() para que genere correctamente la hora <img src='http://blog.nachopro.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>En caso de que se ingrese una zona horaria mayor a 12 o menor a -12 la función retorna un string para generar un error en la función gmdate(), la cual acepta sólo enteros como segundo parámetro, y así reconocer fácilmente un error de zona horaria.</p>
<p>Espero que les sirva. Hasta la próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nachopro.com.ar/ajustando-la-hora-segun-zona-horaria-en-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

