<?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>Evil Robot Blog</title>
	<atom:link href="http://blog.crazyrobot.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.crazyrobot.net</link>
	<description>There&#039;s a brand new talk, but it&#039;s not very clear</description>
	<lastBuildDate>Wed, 14 Mar 2012 17:19:05 +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>Commodore 64</title>
		<link>http://blog.crazyrobot.net/?p=560</link>
		<comments>http://blog.crazyrobot.net/?p=560#comments</comments>
		<pubDate>Wed, 14 Mar 2012 14:38:45 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[editorial]]></category>
		<category><![CDATA[tecnología]]></category>
		<category><![CDATA[vida cotidiana]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=560</guid>
		<description><![CDATA[El primer computador que usé con algo de conciencia fue un Commodore 64. Uno de los multiples eslabones de la cadena evolutiva que transformó al ordenador primitivo en el aparato domesticado y aséptico que es hoy en día. El commodore 64 era una especie de teclado que se conectaba al televisor. No había mouse. Era [...]]]></description>
			<content:encoded><![CDATA[<p>El primer computador que usé con algo de conciencia fue un Commodore 64. Uno de los multiples eslabones de la cadena evolutiva que transformó al ordenador primitivo en el aparato domesticado y aséptico que es hoy en día. El commodore 64 era una especie de teclado que se conectaba al televisor. No había mouse. Era posible conectarle una unidad de lectura de discos (Diskettes de 5.25 pulgadas. Dysan, por favor). Cuando uno prendía el Commodore lo primero que veía era unos mensajes informando que se disponía de 64 kilobytes de memoria (de los cuales 32 ya estaban siendo usados por el sistema operativo). Y luego uno se quedaba sólo en la linea de comandos.</p>
<p>Con Fidel nos la pasamos muchos fines de semana transcribiendo programas en Basic, sacados de libros que vendían en la Librería Nacional. A pesar de que ya iba muy adelante en el camino hacia su uso masivo en los hogares, el computador todavía se concebía antes que nada como una máquina programable. No se notaba mayor esfuerzo en disfrazar al computador de algo distinto a eso. Al usuario no se le trataba como alguién al que hubiese que proteger de las asperezas de una máquina abierta y compleja.</p>
<p>A cada cual sus nostalgias. Mi primer carro lo compré hace solo dos años. Es un mazda 5. Solo abro el <em>capot</em> para cambiar el líquido de los parabrisas, nunca se me ocurriría meterle la mano a nada más.</p>
<p><a href="http://blog.crazyrobot.net/wp-content/uploads/2012/03/batallas.jpg"><img class="aligncenter size-medium wp-image-570" title="batallas" src="http://blog.crazyrobot.net/wp-content/uploads/2012/03/batallas-240x300.jpg" alt="" width="240" height="300" /></a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D560&amp;title=Commodore%2064" id="wpa2a_2"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=560</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sobre las corridas de toros y el consumo de carne</title>
		<link>http://blog.crazyrobot.net/?p=525</link>
		<comments>http://blog.crazyrobot.net/?p=525#comments</comments>
		<pubDate>Mon, 13 Feb 2012 21:50:16 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=525</guid>
		<description><![CDATA[Está de moda entre el progresismo de las clases acomodadas colombianas declararse en contra de las corridas de toros. De todas las preguntas que surgen alrededor de este tema me interesa la siguiente: es coherente indignarse por las corridas de toros y al tiempo pasar por alto el sacrificio de animales para el consumo de [...]]]></description>
			<content:encoded><![CDATA[<p>Está de moda entre el progresismo de las clases acomodadas colombianas declararse en contra de las corridas de toros. De todas las preguntas que surgen alrededor de este tema me interesa la siguiente: es coherente indignarse por las corridas de toros y al tiempo pasar por alto el sacrificio de animales para el consumo de carne?</p>
<p>La respuesta más usual del campo anti-taurino es que hay una diferencia fundamental, el sacrificio de animales en un matadero se justifica dada la necesidad del ser humano de proteina animal. Me parece que este argumento es debil: es bien sabido que (por lo menos en los paises donde hay corridas de toros) el consumo de carne es en general muy muy superior a lo necesario para una nutrición adecuada. Es decir, a las vacas las matamos por <em>el placer</em>, y no por<em> la necesidad</em>, de comer carne.</p>
<p>Viene entonces el siguiente argumento: a diferencia de la corrida, el objetivo en el matadero no es causar sufrimiento en el animal, por lo tanto es menos reprobable. Me parece muy facil darse buena conciencia de esa manera. Cualquiera que haya visto imagenes de mataderos o de las condiciones en las que se crían los animales, se puede dar cuenta de que toda esa cadena genera muchisimo mas sufrimiento que unas cuantas corridas.</p>
<p>Habiendo mostrado que con respecto al &#8220;volumen&#8221; de sufrimiento de los animales, si es que se puede hablar de eso, las corridas no son sino un detalle irrisorio comparado con la industria cárnica, falta abordar el aspecto simbólico. Argumentan los anti-taurinos que la corrida es la celebración de la crueldad y que por lo tanto es inaceptable como símbolo y debe ser proscrito. Sea, pero, mas alla de lo curioso que resulta andar peleando rabiosamente contra un símbolo mientras aceptamos una masacre muy real, innecesaria y cotidiana de animales bajo nuestras narices, cabe preguntarse por qué el símbolo que tiene la corrida para los anti-taurinos (la muerte, el sufrimiento, etc) va a tener más valor que aquel que tiene para sus entusiastas (celebración del valor, de la vida, de la voluntad de poder, o de lo que sea). Creo que, de hecho, el matadero simboliza algo mucho más feo: simboliza la capacidad que tiene el hombre de destruir y asesinar de manera mecanica, sistemática, sin necesidad de ver ni untarse las manos de sangre y olvidandose del asunto.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D525&amp;title=Sobre%20las%20corridas%20de%20toros%20y%20el%20consumo%20de%20carne" id="wpa2a_4"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=525</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>La literatura fantastica envejece mal</title>
		<link>http://blog.crazyrobot.net/?p=521</link>
		<comments>http://blog.crazyrobot.net/?p=521#comments</comments>
		<pubDate>Mon, 30 Jan 2012 15:25:06 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=521</guid>
		<description><![CDATA[Terminé de leer un libro que me recomendaron: Legend, de David Gemmell. Se trata de otro clásico con una gran fanaticada que uno no sabe muy bien de donde sale. Porque &#8230; que libro tan malo! La historia usa la formula típica de un ejercito que se enfrenta a otro mil veces mas grande, prepara [...]]]></description>
			<content:encoded><![CDATA[<p>Terminé de leer un libro que me recomendaron: <strong>Legend</strong>, de David Gemmell. Se trata de otro clásico con una gran fanaticada que uno no sabe muy bien de donde sale. Porque &#8230; que libro tan malo! La historia usa la formula típica de un ejercito que se enfrenta a otro mil veces mas grande, prepara la defensa con tezón, y &#8230; bueno, no cuento más, ya se imagan por donde va la cosa. Que la historia sea basada en una fórmula ya bien gastada no me molesta, al fin y al cabo los libros de fantasía heróica siguen casi siempre unas lineas y unos códigos bien establecidos, eso es lo que uno espera, pero la narración es tan primaria que, en mi opinión, pone a este libro no solo en la categoria de &#8220;novela para adolescentes&#8221; sino en el de &#8220;novela que parece escrita por adolescentes&#8221;. No lo lean.</p>
<p>Luego de leer <strong>Duna</strong>, unos cuentos viejos de ciencia ficción y <strong>Legend</strong>, me queda la impresión que, en lo que tiene que ver con la literatura fantastica, todo tiempo pasado fue peor. Ultimamente he leido bastantes libros de este género (y ahi meto ciencia ficción, fantasía heroica, weird fiction&#8230;) y lo mejor que he leido ha sido lo mas reciente. Por ejemplo, recomiendo mil veces Perdido Street Station o la saga de Game of Thrones (bueno, esta no es tan reciente).</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D521&amp;title=La%20literatura%20fantastica%20envejece%20mal" id="wpa2a_6"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=521</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Duna</title>
		<link>http://blog.crazyrobot.net/?p=513</link>
		<comments>http://blog.crazyrobot.net/?p=513#comments</comments>
		<pubDate>Wed, 28 Sep 2011 13:11:32 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=513</guid>
		<description><![CDATA[Es Duna, mega best-seller de la ciencia ficción, la gran novela que sus fans creen? Yo diría que no. Pero cabe preguntarse si alcanza a ser una buena novela. Hay mucho que reconocerle a Duna: el libro explora varios temas originales (sobre todo para la época) y además propone un universo que es una delicia [...]]]></description>
			<content:encoded><![CDATA[<p>Es Duna, mega best-seller de la ciencia ficción, la gran novela que sus fans creen? Yo diría que no. Pero cabe preguntarse si alcanza a ser una buena novela.</p>
<p>Hay mucho que reconocerle a Duna: el libro explora varios temas originales (sobre todo para la época) y además propone un universo que es una delicia para el amante de la fantasia/ciencia ficción. Se trata de un futuro bastante oscuro, tecnológicamente avanzado (dominan el viaje espacial), controlado por aristócratas en constante forcejeo de poder. Se sabe que en el pasado la humanidad tuvo que entrar en guerra contra las máquinas inteligentes, que en algún momento se salieron de control (como suele ocurrir). En consecuencia, la inteligencia artificial está prohibida. Para suplir el vacio que dejaron las máquinas pensantes, ciertos humanos han desarrollado habilidades mentales excepcionales gracias a diferentes técnicas de entrenamiento y, sobre todo, al uso de una sustancia llamada &#8220;melange&#8221;.</p>
<p>Un elemento bastante original es que la navegación espacial es controlada por un tipo de seres con este tipo de especialización mental y que se han convertido en una organización esencialmente apolítica, por fuera del control del imperio. El transporte del resto de la gente, incluidos los aristócratas, el emperador y sus ejercitos, depende de ellos. Esto, junto a toda la simbologia aristocratica, la ausencia de computadores y la inutilidad de las armas de proyectil debido a &#8220;escudos de energía&#8221; personales, logra crear una seductora atmosfera pre-electrónica/pre-armas de fuego, en un futuro avanzado (sin ser steam-punk).</p>
<p>La ciencia ficción moderna probablemente le debe mucho a esta serie, que exploró temas como la ecología y la ingenieria social (me parece que el cuento de haber &#8220;plantado&#8221; una religión como parte del plan de las bene-gessirit era una idea excelente que el autor no desarrolló tanto como hubiera podido, al menos en el primer libro. Es Paul Atreides efectivamente un mesías o una fabricación manejada  por otras fuerzas?). Recordando los viejos capítulos de Star Trek puede darse uno cuenta de que la influencia de Duna fue enorme.</p>
<p>La historia en si misma es prometedora y con personajes potencialmente interesantes (sobre todo del lado de los malos, los buenos son mas bien sosos, comenzando por el personaje principal, el heroe mas aburridor de la galaxia). Desafortunadamente, luego de un buen comienzo, la novela entra completamente en el modo &#8220;joven con super-poderes predestinado a salvar el mundo&#8221; que siempre he encontrado insoportable. Hay dialogos en abundancia, casi todos sin interés. El destino del universo parece decidirse en una serie de escenas a recinto cerrado con conversaciones sobreactuadas, como de telenovela. Luego están los elementos misticos de la novela, que son como artefactos regados por todos lados sin que el lector sepa que hacer con ellos o para que están ahi. Hay varios huecos en la lógica de la historia (por nombrar solo uno: como es posible que el imperio nunca se haya interesado seriamente en conocer a fondo el unico planeta que produce la sustancia de la que depende TODO el universo?) pero personalmente soy indulgente con ese tipo de problemas en la narración.</p>
<p>En resumen, una historia del todo bien contada en un universo genial. Hay que verlo sin embargo con los lentes de hace 40 años, tal vez el estilo de narración &#8220;space opera&#8221; tenia mas sentido en ese entonces, pero creo que no ha resistido bien del todo el paso del tiempo.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D513&amp;title=Duna" id="wpa2a_8"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=513</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Presencia pasiva en las redes sociales</title>
		<link>http://blog.crazyrobot.net/?p=505</link>
		<comments>http://blog.crazyrobot.net/?p=505#comments</comments>
		<pubDate>Wed, 03 Aug 2011 14:40:43 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[opinion]]></category>
		<category><![CDATA[tecnología]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=505</guid>
		<description><![CDATA[Las &#8220;redes sociales&#8221; se están conviertiendo en los sitios donde ocurren todas las conversaciónes en internet. Pienso, como muchos otros, que sería mas sano que las conversaciones ocurrieran en blogs y paginas personales. Varios personas que conozco estan dejando de usar las redes sociales y yo he pensando varias veces hacer lo mismo. De Facebook cada vez me interesa menos participar en discusiones, ni mantener [...]]]></description>
			<content:encoded><![CDATA[<p>Las &#8220;redes sociales&#8221; se están conviertiendo en los sitios donde ocurren todas las conversaciónes en internet. Pienso, como muchos otros, que sería mas sano que las conversaciones ocurrieran en blogs y paginas personales. Varios personas que conozco estan dejando de usar las redes sociales y yo he pensando varias veces hacer lo mismo. De Facebook cada vez me interesa menos participar en discusiones, ni mantener al día mi información personal ni lista de contactos, ni enterarme por ese medio de las &#8220;noticias&#8221; de los demás, etc. Sin embargo, mantengo abierta mi cuenta porque me parece util que la gente pueda encontrarme facilmente y escribirme mensajes si así lo desean.</p>
<p>Esta mañana estaba pensando que en vez de cerrar completamente la cuenta, podria simplemente dejar de usarla y poner un mensaje con el url de mi blog. Esto sin embargo deja abierto el problema de que la gente podria seguir escribiendome por facebook, agregando informacion sobre mi (contactos, tagging), etc, lo cual me obliga a estar pendiente de mi cuenta. Estaba pensando que en las redes sociales uno deberia poder<strong> reclamar su identidad </strong>sin tener que participar en los demás servicios, y que esto deberia ser soportado tecnicamente por la red social. Es decir,<strong> uno deberia poder <em>existir</em> en facebook sin que la gente asuma que uno <em>usa</em> facebook</strong>. En este modo de utilización, los demas usuarios de facebook deberian ser capaces de encontrarme, pero no deberian poder enviarme mensajes ni agregarme a su lista de contactos, etc. Simplemente podrian ver algún mensaje de mi parte (por ejemplo el url a mi pagina personal, o a otra red social en la que sí participe). Supongo que no hay mayor incentivo para las redes sociales hoy en día en soportar esta idea. Es posible que la distincion entre &#8220;google+&#8221; y &#8220;google profiles&#8221; de cierta manera se asemeje a esto, pero no he mirado realmente.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D505&amp;title=Presencia%20pasiva%20en%20las%20redes%20sociales" id="wpa2a_10"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=505</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PixelArt fun</title>
		<link>http://blog.crazyrobot.net/?p=420</link>
		<comments>http://blog.crazyrobot.net/?p=420#comments</comments>
		<pubDate>Tue, 12 Jul 2011 14:54:41 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=420</guid>
		<description><![CDATA[I recently stumbled upon this neat algorithm by Johannes Kopf and Dani Lischinski. In short, their algorithm takes a pixelart image, such as  those found in 8-bit video games, and produces a new image that somehow makes you think &#8220;hey, that looks like what the artist actually had in mind&#8221;. In other words, it tries to generate the ideal image [...]]]></description>
			<content:encoded><![CDATA[<p>I recently stumbled upon<a title="depixelizing pixel art" href="http://research.microsoft.com/en-us/um/people/kopf/pixelart/index.html"> this neat algorithm </a>by <a href="http://research.microsoft.com/en-us/people/kopf/" target="new">Johannes Kopf</a> and <a href="http://www.cs.huji.ac.il/~danix/" target="new">Dani Lischinski</a>. In short, their algorithm takes a pixelart image, such as  those found in 8-bit video games, and produces a new image that somehow makes you think &#8220;hey, that looks like what the artist actually had in mind&#8221;. In other words, it tries to generate the ideal image for which the pixel art is only an imperfect representation. The results explain it better:</p>
<div id="attachment_435" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-comparison.png"><img class="size-medium wp-image-435  " title="mario-comparison" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-comparison-300x155.png" alt="Mario - before, after" width="300" height="155" /></a><p class="wp-caption-text">Mario from Super Mario Bros 3, using my own implementation. Click to zoom.</p></div>
<p>If you are interested in this kind of stuff, I really recommend you read their paper, it is well written, easy to understand even for people with no deep knowledge of computer graphics (like myself) or for people with no programming training. I <strong>partially</strong> implemented their algorithm using Common Lisp and Zach Beane&#8217;s <a title="vecto" href="http://www.xach.com/lisp/vecto/">Vecto</a> library, here&#8217;s a very very short description, just to illustrate the different steps. Some eye-candy at the end!</p>
<p><strong>Finding Vicinities</strong></p>
<p>First, we find which regions of the original image are part of a single feature.</p>
<div id="attachment_440" class="wp-caption aligncenter" style="width: 300px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-vecinities.png"><img class="size-medium wp-image-440 " title="mario-vecinities" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-vecinities-290x300.png" alt="" width="290" height="300" /></a><p class="wp-caption-text">Different regions are found. Notice the blue cross near the center of the image, where we need to decide which diagonal should be kept as part of a single feature</p></div>
<p><strong>Re-shaping Pixels</strong></p>
<p>Once different regions have been found, pixels are re-shaped so that each region has a well defined contour.</p>
<div id="attachment_443" class="wp-caption aligncenter" style="width: 300px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/matio-voronoi.png"><img class="size-medium wp-image-443" title="matio-voronoi" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/matio-voronoi-290x300.png" alt="" width="290" height="300" /></a><p class="wp-caption-text">Each pixel is re-shaped to a voronoi cell calculated using the center point of each cell and points defined by its vicinities</p></div>
<p><strong>Smoothing Edges</strong></p>
<p>Finally, edges are identified &#8230;</p>
<div id="attachment_446" class="wp-caption aligncenter" style="width: 300px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-borders.png"><img class="size-medium wp-image-446" title="mario-borders" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-borders-290x300.png" alt="Edges are identified" width="290" height="300" /></a><p class="wp-caption-text">Edges are identified</p></div>
<p>&#8230; and smoothed</p>
<div id="attachment_447" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-smooth.png"><img class="size-medium wp-image-447" title="mario-smooth" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mario-smooth-300x142.png" alt="Smoothing" width="300" height="142" /></a><p class="wp-caption-text">Smooth edges. Have a look at Mario&#39;s eyes.</p></div>
<p>Keep in mind that this is only a partial implementation, the original algorithm also re-shapes edges to make them look more natural, reducing zig-zag curves for example. (they also use a different type of curve, <em>b-splines</em>, which works better than what I&#8217;m using, <em>catmull rom</em>) and therefore produces much better results. Have a look at their examples in the linked article.</p>
<p><strong>Some Examples!</strong></p>
<p>Click on the images to enlarge</p>
<div id="attachment_469" class="wp-caption aligncenter" style="width: 553px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/spartan.png"><img class="size-full wp-image-469 " title="spartan" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/spartan.png" alt="" width="543" height="372" /></a><p class="wp-caption-text">Spartan</p></div>
<div id="attachment_450" class="wp-caption aligncenter" style="width: 538px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/dk.png"><img class="size-full wp-image-450    " title="dk" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/dk.png" alt="" width="528" height="593" /></a><p class="wp-caption-text">Donkey Kong</p></div>
<div id="attachment_492" class="wp-caption aligncenter" style="width: 470px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/zelda.png"><img class="size-full wp-image-492" title="zelda" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/zelda.png" alt="" width="460" height="400" /></a><p class="wp-caption-text">zelda</p></div>
<div id="attachment_474" class="wp-caption aligncenter" style="width: 547px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/karate.png"><img class="size-full wp-image-474" title="karate" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/karate.png" alt="" width="537" height="464" /></a><p class="wp-caption-text">karate champ</p></div>
<div id="attachment_477" class="wp-caption aligncenter" style="width: 614px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/avengers.png"><img class="size-full wp-image-477" title="avengers" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/avengers.png" alt="" width="604" height="291" /></a><p class="wp-caption-text">Captain America and the Avengers</p></div>
<div id="attachment_491" class="wp-caption aligncenter" style="width: 495px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mariokart1.png"><img class="size-full wp-image-491" title="mariokart" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/mariokart1.png" alt="mario kart" width="485" height="223" /></a><p class="wp-caption-text">mario kart</p></div>
<div id="attachment_494" class="wp-caption aligncenter" style="width: 615px"><a href="http://blog.crazyrobot.net/wp-content/uploads/2011/07/sf2.png"><img class="size-full wp-image-494" title="sf2" src="http://blog.crazyrobot.net/wp-content/uploads/2011/07/sf2.png" alt="" width="605" height="1008" /></a><p class="wp-caption-text">sagat ftw</p></div>
<p style="text-align: left;"> Thanks to Javier Moreno, Norman Garcia and Angie Bloor for their comments.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D420&amp;title=PixelArt%20fun" id="wpa2a_12"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=420</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>¡Calcio!</title>
		<link>http://blog.crazyrobot.net/?p=406</link>
		<comments>http://blog.crazyrobot.net/?p=406#comments</comments>
		<pubDate>Sat, 21 May 2011 15:47:49 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[editorial]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=406</guid>
		<description><![CDATA[Me gustó el libro ¡Calcio! de Juan Esteban Constain, es un libro divertido y además está escrito con cuidado. Ya solo por eso está por encima de mucho de lo que se escribe en Colombia, según las malas lenguas. En todo caso, lo recomiendo para pasar un buen rato leyendo. El libro cuenta dos historias, [...]]]></description>
			<content:encoded><![CDATA[<p>Me gustó el libro ¡Calcio! de Juan Esteban Constain, es un libro divertido y además está escrito con cuidado. Ya solo por eso está por encima de mucho de lo que se escribe en Colombia, según las malas lenguas. En todo caso, lo recomiendo para pasar un buen rato leyendo.</p>
<p>El libro cuenta dos historias, una contada dentro de la otra, sobre dos enfrentamientos iguales en extravagancia. En la primera se enfrentan dos intelectuales europeos y en segundo se enfrentan el imperio español y los habitantes de una ciudad libre, en Italia.</p>
<p>En el contexto del enfrentamiento entre los dos maestros del mundo antiguo, el autor se excede un poco listando demasiados datos sabios y curiosos, tal vez para crear la atmosfera del mundo erudito en cuestión. A veces se vuelve un poco fastidioso y uno no sabe si en la exageración hay más bien burla o admiración. Otro punto que me pareció debil es que pareciera que el autor se esfuerza mucho en que a uno le caiga bien el personaje del sabio judio italiano, cuando el tamaño del libro y su estilo no dan para que los personajes lleguén a parecerle a uno suficientemente reales.</p>
<p>Dejando de lado esos detalles, me parece que ambas historias lo agarran a uno y tienen buen ritmo. Recurren a temas  tradicionales y lo hacen con éxito. Se nota que el autor se  divirtió escribiendolas y eso contagia al lector.</p>
<p>Otra nota sobre el libro <a title="calcio" href="http://www.finiterank.com/notas/2011/05/10/martes-%C2%A1calcio/">aca</a>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D406&amp;title=%C2%A1Calcio%21" id="wpa2a_14"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=406</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to extend Oasis Montaj using C#</title>
		<link>http://blog.crazyrobot.net/?p=371</link>
		<comments>http://blog.crazyrobot.net/?p=371#comments</comments>
		<pubDate>Tue, 10 May 2011 15:34:19 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=371</guid>
		<description><![CDATA[Oasis Montaj allows its users to program their own extensions. The &#8220;standard&#8221; way of creating an Oasis Montaj extension is by using the GX language, a C-like language, and its companion user interface definition language. I find this good enough for most cases. Actually, the standard actions in Oasis Montaj seem to be implemented as GX scripts [...]]]></description>
			<content:encoded><![CDATA[<p>Oasis Montaj allows its users to program their own extensions. The &#8220;standard&#8221; way of creating an Oasis Montaj extension is by using the <a title="oasis montaj gx toolkit" href="http://www.geosoft.com/downloads/whatisit/gxdevtools.asp">GX language</a>, a C-like language, and its companion user interface definition language. I find this good enough for most cases. Actually, the standard actions in Oasis Montaj seem to be implemented as GX scripts that validate user input and then calls some inner functionality.</p>
<p>However, for more complex programs, I like to have all the bells and whistles of a main stream high level language, such as C#. In this post I will explain step by step how to create a &#8220;Hello World&#8221; C# Oasis Montaj extension.</p>
<p>I will be using Microsoft Visual C# 2010 express, you can download for free <a title="visual c#" href="http://www.microsoft.com/express/downloads/#2010-Visual-CS">here</a>. You will also need to have a licensed copy of Oasis Montaj installed (I&#8217;m using version 7.2.1). Finally, you&#8217;ll need the corresponding GX developer toolkit that you can download for free <a title="GX developer toolkit" href="http://www.geosoft.com/support/devtools/index.asp">here</a>.</p>
<p>1. Create a <strong>new project</strong> in Visual C# 2010 express.  Choose <strong>class library</strong> as the type of project and name it <strong>HelloWorld</strong>, for example.</p>
<p>2. Save the project.</p>
<p>3. Go to the project properties (Project -&gt; HellowWorld Properties) and change the <strong>Target framework</strong> to <strong>.NET framework 3.5</strong>. This is the version that seem to work well for Oasis Montaj 7.2.1, but I guess it might change in the future. Anyway, version 4.0 does not seem to work.</p>
<p>4. In the <strong>Solution Explorer</strong> tab, right-click the HelloWorld project and then choose <strong>Add Reference</strong>. Select <strong>Browse</strong> in the dialog window and then navigate to the folder where you installed GX Developer (usually C:\Program Files\Geosoft\GX Developer). Then navigate through the folders apps -&gt; redist -&gt; bin. Select <strong>geonet.dll</strong> and <strong>Geosoft.GX.Controls.dll</strong></p>
<p>5. Repeat the previous step to add a new reference, but instead of selecting the Browse tab, select <strong>.NET</strong>, then add <strong>System.Windows.Forms</strong></p>
<p>6. Create a new class named  HelloWorld:</p>
<pre class="brush: csharp; title: ; notranslate">

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Geosoft.GX.Controls;
using Geosoft.GXNet;
using System.Windows.Forms;

namespace HelloWorldGX
{
 class HelloWorldGX : BaseForm
 {
 public HelloWorldGX(int i) : base(i) { InitializeForm(); }
 public int Run() {
 MessageBox.Show(&quot;Hello World&quot;);
 return 0;
 }
 }
}
</pre>
<p>7. In Visual C#, click on Build -&gt; Build Solution. Then go to your project folder -&gt; bin -&gt; Release, and copy the HelloWorld.dll to the<strong> bin</strong> folder of your Oasis Montaj install</p>
<p>8. Create a new menu file named <strong>HelloWorld.omn</strong> in the omn folder of your Oasis Montaj install folder (C:\Program Giles\Geosoft\Oasis Montaj, usually) with the following content:</p>
<pre><code>
<pre class="brush: plain; title: ; notranslate">
MENU &quot;&amp;HelloWorld&quot;
ITEM  &quot;&amp;HelloWorld&quot; ,HelloWorld.dll(HelloWorldGX.HelloWorldGX;Run)       &lt;standard.bmp[1]&gt;
</pre>
<p> </code></pre>
<p>9. Copy the <strong>geonet.dll</strong>, <strong>Geosoft.GX.Controls.dll </strong>and<strong> geoexceptions.dll from the GX Developer -&gt; apps -&gt; redist -&gt; bin </strong>to the<strong> bin folder of your Oasis Montaj install. </strong>Important note: you might need to copy other dll&#8217;s when you start using some real functions from the oasis montaj API.<strong><br />
</strong></p>
<p>10. From Oasis Montaj, load the HelloWorld Menu (GX -&gt; Load Menu), and then run the Hello World item.<strong><br />
</strong></p>
<p>At <a title="Abitibi Geophysics" href="http://www.ageophysics.com/">Abitibi Geophysics</a> we have been writing Oasis Montaj&#8217;s extensions using C# with very good results.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D371&amp;title=How%20to%20extend%20Oasis%20Montaj%20using%20C%23" id="wpa2a_16"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=371</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TweetMix</title>
		<link>http://blog.crazyrobot.net/?p=364</link>
		<comments>http://blog.crazyrobot.net/?p=364#comments</comments>
		<pubDate>Fri, 04 Mar 2011 13:04:21 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[tecnología]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=364</guid>
		<description><![CDATA[Hagamos un recuento desordenado de TweetMix. La idea se me ocurrió hace un par de semanas: coger un &#8220;chat-bot&#8220;, alimentarlo con los tweets de un usuario y ponerlo a decir bobadas. El chat-bot que usé fue escrito en perl y funciona al estilo de mega-hal, un viejo chat-bot con el que Alejo, Javier y yo [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.tweetmix.me"><img class="aligncenter" title="tweetmix" src="http://a3.twimg.com/profile_images/1255425986/icon_reasonably_small.jpg" alt="" width="128" height="128" /></a></p>
<p>Hagamos un recuento desordenado de <a href="http://www.tweetmix.me">TweetMix</a>. La idea se me ocurrió hace un par de semanas: coger un &#8220;<a href="http://en.wikipedia.org/wiki/Chatterbot">chat-bot</a>&#8220;, alimentarlo con los tweets de un usuario y ponerlo a decir bobadas. El chat-bot que usé fue escrito en perl y funciona al estilo de mega-hal, un viejo chat-bot con el que <a href="http://wiki.freaks-unidos.net/weblogs/azul/index">Alejo</a>, <a href="http://www.finiterank.com/notas/">Javier</a> y yo jugabamos hace ya mas de diez años, cuando el internet todavía tenía gracia. Si quieren documentarse al respecto pueden buscar por cadenas de Markov. Hice una primera implementación en alrededor de una hora, usando bash, el API sin autenticación de <a href="http://www.twitter.com">twitter</a> y unas cuantas herramientas de linea de comando de unix (curl, recode, cut, etc). La idea resulto buena y al cabo de un par de horas ya cerca de 150 personas le estaban sacando incongruencias a sus cerebros artificiales.</p>
<p>Twitter solo permite un numero limitado de <em>hits </em>por hora, lo que se convirtió en el primer obstaculo para que más gente usara el sitio. Muy rápido, la aplicación estaba llegando al limite en cada intervalo, así que tuve que apagarla. Decidí hacer una implementación que superara esta limitación para de paso jugar con las técnicas asociadas. Escribí entonces una nueva implementacion en lisp, usando una librería de <a href="http://oauth.net/">oauth</a>. En pocas palabras, esto permite acceder a twitter a nombre de cada usuario, multiplicando así el limite de hits por hora por el número de usuarios. Como no hay nada complicado en el programa, en unos dias de trabajo muy esporadico saque una nueva version, que volvió a tener bastante exito.</p>
<p>El siguiente obstaculo fue hacer el programa suficientemente robusto para soportar la alta demanda. El problema aqui era que obtener los datos de twitter y transformarlos y procesarlos es un proceso que toma tiempo y que se realiza en un proceso aparte, un llamado a perl. Esto hacia que el servidor web de lisp despachara demasiados hilos, lo que estaba terminando mal. Aplicamos entonces dos ideas. La primera fue idea de fidel: en vez de generar una frase por cada request, generar bastantes de un solo golpe e irlos consumiendo poco a poco. Así disminuimos drasticamente el número de procesos a lanzar por cada carga de la página. Comenzamos a usar <a href="http://redis.io">redis</a> para guardar los mixs en vez de tenerlos en el espacio de memoria del servidor web. La segunda idea fue extraer del servidor web el proceso de obtención y procesamiento de los tweets de cada usuario. Asi, cuando un usuario nuevo llega, el servidor web pone en una cola el nombre del usuario y uno (o varios) proceso aparte va tratando los diferentes nombres de la cola. Aprovechamos el redis para implementar la cola de demandas. De esa manera mantenemos bajo control el número de procesos y liberamos al servidor web de los problemas asociados con ese tratamiento. El código de tratamiento de tweets lo re-escribió Fidel en Perl. Algo que hay que notar es que los llamados a twitter fallan muy muy frecuentemente. La alta frecuencia de este tipo de problemas (los errores al llamar a un servicio exterior) es una de las dificultades particulares que enfrenta el programador en la red.</p>
<p>En paralelo,<a href="http://twitter.com/#!/tatuajefalso"> Juan Diego</a> hizo un excelente diseño que es el que usamos actualmente.</p>
<p>Luego de un estallido de popularidad inicial, las visitas han bajado bastante, pero el uso sigue siendo importante. A la gente le gusta. Creo que puede volverse mas popular aún.</p>
<p>Viendo por encima, es un programa muy muy sencillo, pero que de cierta manera ilustra bien el tipo de estrategia que se puede usar en sitios de alto tráfico. Cosas cheveres que se descubrieron: redis y oauth. Igualmente he podido jugar con los amazon web-services, que me parecen bastante prácticos y muy bien implementados, pero ligeramente caros (sobre todo el costo en ancho de banda de S3).</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D364&amp;title=TweetMix" id="wpa2a_18"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=364</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The truth about Lisp</title>
		<link>http://blog.crazyrobot.net/?p=358</link>
		<comments>http://blog.crazyrobot.net/?p=358#comments</comments>
		<pubDate>Mon, 10 Jan 2011 13:51:46 +0000</pubDate>
		<dc:creator>Sergio</dc:creator>
				<category><![CDATA[humor]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://blog.crazyrobot.net/?p=358</guid>
		<description><![CDATA[&#8220;Lisp was invented a long time ago, before java, before C, before fortran, before computers, before people, before the earth was built. The universe itself is a lisp program so trivial that no true lisper would even bother implementing it.&#8221; Ver el resto]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;Lisp was <a href="http://www-formal.stanford.edu/jmc/history/lisp/lisp.html">invented a long time ago</a>,  before java, before C, before fortran, before computers, before people,  before the earth was built. The universe itself is a lisp program so  trivial that no true lisper would even bother implementing it.&#8221;</p></blockquote>
<p><a title="La verdad sobre lisp" href="http://secretgeek.net/lisp_truth.asp">Ver el resto</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.crazyrobot.net%2F%3Fp%3D358&amp;title=The%20truth%20about%20Lisp" id="wpa2a_20"><img src="http://blog.crazyrobot.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.crazyrobot.net/?feed=rss2&#038;p=358</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

