<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Raúl Ochoa</title>
	
	<link>http://rau1.com</link>
	<description>Procrastinando</description>
	<lastBuildDate>Sat, 10 Mar 2012 13:27:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rau1" /><feedburner:info uri="rau1" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>rau1</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Frau1" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/rau1" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Frau1" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Frau1" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Frau1" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Frau1" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/rau1" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><item>
		<title>Git y diff con documentos de Microsoft Word</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/si63vobBKwM/git-y-diff-con-documentos-de-microsoft-word</link>
		<comments>http://rau1.com/blog/2009/06/10/git-y-diff-con-documentos-de-microsoft-word#comments</comments>
		<pubDate>Wed, 10 Jun 2009 21:43:36 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[binary]]></category>
		<category><![CDATA[dcvs]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[pragmatic-programmer]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[word]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=202</guid>
		<description><![CDATA[Si has leído The Pragmatic Programmer probablemente te acuerdes de dos consejos básicos: Keep your knowledge in Plain Text Always Use Source Code Control El texto plano nunca se volverá obsoleto. Añadimos un software de control de versiones y estamos en una situación win-win. Te sentirás como Marty McFly con su DeLorean DMC-12, podrás viajar [...]]]></description>
				<content:encoded><![CDATA[<p>Si has leído The Pragmatic Programmer probablemente te acuerdes de <strong>dos consejos básicos</strong>:</p>
<ul>
<li><strong>Keep your knowledge in Plain Text</strong></li>
<li><strong>Always Use Source Code Control</strong></li>
</ul>
<p>El texto plano nunca se volverá obsoleto. Añadimos un software de control de versiones y estamos en una situación win-win.</p>
<p>Te sentirás como Marty McFly con su DeLorean DMC-12, podrás viajar en el tiempo comprobando como cambiaron tus archivos. Qué líneas fueron modificadas, en qué archivos, qué líneas se añadieron, cuáles se eliminaron&#8230; como mucho estarás a un par de comandos de contestar todas esas preguntas.</p>
<p>Cuando le cojas gusto querrás tener bajo control de versiones tus archivos de configuración, tus scripts <em>caseros</em>&#8230; incluso se te puede ocurrir <a href="http://alumnit.ca/~apenwarr/log/?m=200901#21">tener bajo revisión tu instalación completa de Windows</a>.</p>
<p>Aunque <a href="http://www.gnu.org/software/diffutils/manual/html_node/Binary.html">algunas versiones modernas de herramientas de comparación de archivos soportan archivos binarios</a> lo habitual es realizar una comparación línea por línea de los archivos. Por lo tanto cuando comparemos dos versiones de archivos binarios podremos saber si han cambiado o no lo han hecho, pero no podremos saber que es lo que exactamente ha cambiado.</p>
<p>Durante las últimas semanas estoy trabajando con archivos de Microsoft Word 2007, no precisamente por gusto, sino porque era estrictamente necesario trabajar con este formato. Yo hace tiempo que le cogí gusto a eso de poner <em>todo</em> bajo control de versiones.<br />
Desde hace unos cuantos meses, y siempre que puedo, suelo elegir Git como software de control de versiones. Así que uso Git para llevar un control de cambios sobre todos esos documentos de Word 2007.</p>
<p>Como ya hemos comentado el problema con ese tipo de archivos (binarios) es que no podemos hacer una comparación línea a línea entre dos versiones. De modo que cuando ejecutemos <code>git diff</code> obtendremos un mensaje diciéndonos que son archivos binarios.</p>
<p><strong>Cómo podemos solucionar esto y poder ver qué se modificó en cada archivo de Word?</strong><br />
Los archivos de Word 2007 en realidad son archivos ZIP que contienen documentos XML y otros archivos de datos. Podríamos reinventar la rueda otra vez hoy, pero como ya existen herramientas que extraen el texto (plano) de documentos Office Open XML (formato de Word 2007) nos limitaremos a usar alguna de ellas. Una búsqueda rápida para <em>docx to text</em> y tenemos un script en perl que hará el trabajo sucio: <a href="http://docx2txt.sourceforge.net/">extraer el texto de nuestros documentos Word 2007</a>.</p>
<p>A continuación voy a realizar un ejemplo en el que se mostrará lo que sucedería al tratar de comparar dos versiones de un archivo de Word 2007 y como configurar nuestro Git y nuestro repositorio para poder automatizar el proceso de compararlas usando el texto plano que produce el script en perl.</p>
<p>Mi versión actual de Git es la 1.6.3.2.</p>
<pre class="code">iMac:~ rochoa$ git --version
git version 1.6.3.2</pre>
<p>Creamos un directorio nuevo y nos cambiamos a su ubicación, iniciamos un nuevo repositorio y comprobamos su estado:</p>
<pre class="code">iMac:~ rochoa$ mkdir -p ~/git/example &amp;&amp; cd ~/git/example
iMac:example rochoa$ git init
Initialized empty Git repository in /Users/rochoa/git/example/.git/
iMac:example rochoa$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)</pre>
<p>Creamos un documento Word en este directorio, ejemplo:</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-200" title="commit_0" src="http://i0.rau1.com/2009/06/commit_0.png" alt="commit_0" width="460" height="200" /></p>
<p>Comprobamos el estado del repositorio, añadimos el fichero a nuestro repositorio, hacemos el commit inicial y volvemos a comprobar el estado del repositorio.</p>
<pre class="code">iMac:example rochoa$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#	document.docx
nothing added to commit but untracked files present (use "git add" to track)
iMac:example rochoa$ git add .
iMac:example rochoa$ git commit -m "initial commit"
[master (root-commit) 0ffe9fe] initial commit
 1 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 document.docx
iMac:example rochoa$ git status
# On branch master
nothing to commit (working directory clean)</pre>
<p>Modificamos nuestro documento, por ejemplo:</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-201" title="commit_1" src="http://i1.rau1.com/2009/06/commit_1.png" alt="commit_1" width="460" height="250" /></p>
<p>Comprobamos el estado del repositorio y hacemos commit. Lo mensajes tendían a ser largos y detallados con el fin de tener toda la información posible en el registro.</p>
<pre class="code">iMac:example rochoa$ git status
# On branch master
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#	modified:   document.docx
#
no changes added to commit (use "git add" and/or "git commit -a")
iMac:example rochoa$ git commit -am "removing info about how easy&amp;fast brandching and merging are, added projects using git as dcvs"
[master 455130a] removing info about how easy&amp;fast brandching and merging are, added projects using git as dcvs
 1 files changed, 0 insertions(+), 0 deletions(-)</pre>
<p>Se usaban mensajes largos y detallados porque a la hora de comparar versiones se obtenía el mensaje de aviso de comparación de archivos binarios.</p>
<pre class="code">iMac:example rochoa$ git diff HEAD^

diff --git a/document.docx b/document.docx
index b01c1ac..0761a57 100644
Binary files a/document.docx and b/document.docx differ</pre>
<p>Por lo que la única opción era hacer uso del log para saber que se había modificado.</p>
<pre class="code">iMac:example rochoa$ git log
commit 455130a12ae51f264c2528c1d42f306e41dc382f
Author: Raul Ochoa
Date:   Wed Jun 10 22:27:14 2009 +0200

    removing info about how easy&amp;fast brandching and merging are, added projects using git as dcvs

commit 0ffe9fedb2828678a4612ebdb1625fb4f515f94a
Author: Raul Ochoa
Date:   Wed Jun 10 22:19:42 2009 +0200

    initial commit</pre>
<p>Cómo poder comparar el texto de nuestros documentos Word?</p>
<p>Lo primero que necesitamos es tener el script perl en nuestro PATH.</p>
<pre class="code">iMac:~ rochoa$ docx2txt.pl 

Usage:	/Users/rochoa/bin/docx2txt.pl  [outfile.txt|-]

	Use '-' as the outfile name to dump the text on STDOUT.
	Output is saved in infile.txt if second argument is omitted.</pre>
<p>A continuación crearemos otro ejecutable, por ejemplo docx2plain, que deberá estar también en nuestro PATH y que tendrá el siguiente contenido:</p>
<pre class="code">#!/bin/bash
docx2txt.pl $1 -</pre>
<p>Básicamente pasará como argumento al script perl un documento Word y redigirá la salida a STDOUT.</p>
<p>Podemos probar su funcionamiento con nuestro documento:</p>
<pre class="code">iMac:example rochoa$ docx2plain document.docx
Git

Git is a free &amp; open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server.
Several high-profile software projects now use Git for revision control, most notably the Linux kernel, Perl, GNOME, Samba, X.org Server, Qt, One Laptop per Child (OLPC) core development, VLC, Wine, Ruby on Rails, and the Android mobile platform.</pre>
<p>Lo siguiente será modificar nuestro archivo de configuración de git: ~/.gitconfig<br />
En el que añadiremos las siguientes dos líneas:</p>
<pre class="code">[diff "docx"]
    textconv = docx2plain</pre>
<p>Con esto conseguimos indicarle a git que tiene una opción para convertir determinados objetos de lo repositorios en texto en caso de que se use el mecanismo de diff &#8220;docx&#8221;.</p>
<p>Ahora es necesario añadir un fichero nuevo a nuestro repositorio: .gitattributes, al que le añadiremos la siguiente línea:</p>
<pre class="code">*.docx diff=docx</pre>
<p>Con esto conseguimos forzar el uso del mecanismo de diff &#8220;docx&#8221; cuando se encuentre ficheros que cumplan con el patrón de nombre indicado.</p>
<p>Si todo está correctamente configurado y los scripts funcionan deberíamos poder comparar las diferentes versiones de nuestro documento como si de texto plano se tratase:</p>
<pre class="code">iMac:example rochoa$ git diff HEAD^
diff --git a/document.docx b/document.docx
index b01c1ac..0761a57 100644
--- a/document.docx
+++ b/document.docx
@@ -1,4 +1,5 @@
 Git

 Git is a free &amp; open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
-Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do.
+Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server.
+Several high-profile software projects now use Git for revision control, most notably the Linux kernel, Perl, GNOME, Samba, X.org Server, Qt, One Laptop per Child (OLPC) core development, VLC, Wine, Ruby on Rails, and the Android</pre>
<p>Lo mejor de todo esto es que no es necesario preocuparse de generar archivos intermedios, Git se encarga de todo (con la inestimable ayuda, en este caso, de nuestro script perl).</p>
<p>En realidad esta técnica es válida para cualquier tipo de documento que permita extraer texto (plano) de su contenido, simplemente tendrías que usar un ejecutable adecuado para cada tipo de archivo binario: PDF, Word &lt;2007 &#8230;</p>
<p>PD: Antes de que me preguntéis si conozco la herramienta de control de cambios de Microsoft Word, os diré que sí que la conozco.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=si63vobBKwM:heGLSZk_jJU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=si63vobBKwM:heGLSZk_jJU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=si63vobBKwM:heGLSZk_jJU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2009/06/10/git-y-diff-con-documentos-de-microsoft-word/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2009/06/10/git-y-diff-con-documentos-de-microsoft-word</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: Hadoop</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/S-9doWmGNTM/zero-huno-hadoop</link>
		<comments>http://rau1.com/blog/2009/04/13/zero-huno-hadoop#comments</comments>
		<pubDate>Mon, 13 Apr 2009 16:47:48 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[mapreduce]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[tech-talk]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=192</guid>
		<description><![CDATA[El jueves 23 de abril doy una charla sobre Hadoop en la Universidad de La Rioja. A partir de las 19 horas en el aula 311 del edificio Vives y durante unos 90 minutos se presentará el proyecto, los conceptos detrás de él y sus posibles usos. Además se realizará una pequeña demostración.]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2009/04/007_hadoop.png" alt="007_hadoop" title="007_hadoop" width="520" height="1080" class="alignnone size-full wp-image-243" /></p>
<p>El <strong>jueves 23 de abril</strong> doy una <strong>charla sobre <a href="http://hadoop.apache.org/">Hadoop</a></strong> en la Universidad de La Rioja. </p>
<p>A partir de las <strong>19 horas</strong> en el <strong>aula 311 del edificio Vives</strong> y <strong>durante unos 90 minutos</strong> se presentará el proyecto, los conceptos detrás de él y sus posibles usos. Además se realizará una pequeña demostración.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=S-9doWmGNTM:ZLeXiUqclTo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=S-9doWmGNTM:ZLeXiUqclTo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=S-9doWmGNTM:ZLeXiUqclTo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2009/04/13/zero-huno-hadoop/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2009/04/13/zero-huno-hadoop</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: Redes Sociales (2), los eventos</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/8m5TPC_P3xA/zero-huno-redes-sociales-2-los-eventos</link>
		<comments>http://rau1.com/blog/2009/01/29/zero-huno-redes-sociales-2-los-eventos#comments</comments>
		<pubDate>Thu, 29 Jan 2009 16:03:24 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[social-network]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[tuenti]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=187</guid>
		<description />
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2009/01/006_socialnetworks_2_events.png" alt="006_socialnetworks_2_events" title="006_socialnetworks_2_events" width="520" height="460" class="alignnone size-full wp-image-246" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=8m5TPC_P3xA:eE6edU3IcJo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=8m5TPC_P3xA:eE6edU3IcJo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=8m5TPC_P3xA:eE6edU3IcJo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2009/01/29/zero-huno-redes-sociales-2-los-eventos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2009/01/29/zero-huno-redes-sociales-2-los-eventos</feedburner:origLink></item>
		<item>
		<title>Lista de nuevos propósitos para 2009</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/GPXfXNWhv_I/lista-de-nuevos-propositos-para-2009</link>
		<comments>http://rau1.com/blog/2009/01/01/lista-de-nuevos-propositos-para-2009#comments</comments>
		<pubDate>Thu, 01 Jan 2009 20:55:22 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[resolution]]></category>
		<category><![CDATA[year]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=155</guid>
		<description><![CDATA[0.- No hacer listas de nuevos propósitos.]]></description>
				<content:encoded><![CDATA[<p>0.- No hacer listas de nuevos propósitos.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=GPXfXNWhv_I:XT65PMqOD0U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=GPXfXNWhv_I:XT65PMqOD0U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=GPXfXNWhv_I:XT65PMqOD0U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2009/01/01/lista-de-nuevos-propositos-para-2009/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2009/01/01/lista-de-nuevos-propositos-para-2009</feedburner:origLink></item>
		<item>
		<title>Puzzle, sumando y restando</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/2mrmxevjzZg/puzzle-sumando-y-restando</link>
		<comments>http://rau1.com/blog/2008/12/10/puzzle-sumando-y-restando#comments</comments>
		<pubDate>Tue, 09 Dec 2008 22:46:39 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[puzzle]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=153</guid>
		<description><![CDATA[Vamos a echar uno rápido: public class SumarRestar { public static void main(String[] args) { int i = 0; i = --i-i+++i---i+++i-i--; System.out.println(i); } } Quién me dice qué saldrá por pantalla?]]></description>
				<content:encoded><![CDATA[<p>Vamos a <em>echar uno rápido</em>:</p>
<pre class="code">public class SumarRestar {

	public static void main(String[] args) {

		int i = 0;

		i = --i-i+++i---i+++i-i--;

		System.out.println(i);

	}

}</pre>
<p>Quién me dice qué saldrá por pantalla?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=2mrmxevjzZg:szcIed7ofvw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=2mrmxevjzZg:szcIed7ofvw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=2mrmxevjzZg:szcIed7ofvw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/12/10/puzzle-sumando-y-restando/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/12/10/puzzle-sumando-y-restando</feedburner:origLink></item>
		<item>
		<title>Patrones de diseño: Con novia deja que te observen no que te llamen constantemente</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/uD5IMCxR6aM/patrones-de-diseno-con-novia-deja-que-te-observen-no-que-te-llamen-constantemente</link>
		<comments>http://rau1.com/blog/2008/11/17/patrones-de-diseno-con-novia-deja-que-te-observen-no-que-te-llamen-constantemente#comments</comments>
		<pubDate>Mon, 17 Nov 2008 01:29:53 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[design-patterns]]></category>
		<category><![CDATA[f1]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lewis-hamilton]]></category>
		<category><![CDATA[nerd]]></category>
		<category><![CDATA[observer]]></category>
		<category><![CDATA[pull]]></category>
		<category><![CDATA[push]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=143</guid>
		<description><![CDATA[ATENCIÓN: si soportas cualquier tipo de ideología/religión a la que el siguiente texto le pueda resultar molesto, reemplaza, a tu gusto, tantos términos como desees hasta que te encuentres ante un contenido coherente con tus principios/creencias. No pretendo molestar a nadie. RMS fanboys: Java ya no es malo. AVISO: probablemente lo que voy a contar [...]]]></description>
				<content:encoded><![CDATA[<p>ATENCIÓN: si soportas cualquier tipo de ideología/religión a la que el siguiente texto le pueda resultar molesto, reemplaza, a tu gusto, tantos términos como desees hasta que te encuentres ante un contenido coherente con tus principios/creencias. No pretendo molestar a nadie.</p>
<p><acronym title="Richard Matthew Stallman">RMS</acronym> fanboys: <a href="http://www.gnu.org/philosophy/java-trap.html">Java ya no es malo</a>.</p>
<p>AVISO: <em>probablemente</em> lo que voy a contar no lo haya inventado yo. No soy tan listo.</p>
<p>Qué delicado es el mundo de las relaciones. Lewis era un apuesto y joven campeón de Fórmula 1, vivía feliz y enamorado de la que entonces era su novia, Nicole, una no-famosa cantante de un no-famoso grupo pop (algo bastante común entre los campeones de F1 de aquellos años). Lewis tenía un problema: había tres chicas que estaban locamente enamoradas de él, ellas eran Katie, Price y Jordan, unas jóvenes muy atentas: <em>las observadoras</em> se hacían llamar. Tal era su obsesión por el joven inglés, que hicieron lo imposible hasta conseguir el número de teléfono de Lewis para poder llamarle y saber, en todo momento, si su estado con Nicole había cambiado.</p>
<p>Al principio recibía una llamada al día de Katie, Price y Jordan. Pero según pasaba el tiempo la cantidad de llamadas que tenía que contestar diariamente era mayor, aquello no parecía estar bien: su estado seguía siendo el mismo pero como buen caballero inglés que él era no se veía capaz de dejar de contestar a aquellas llamadas. Por otra parte a Nicole no le hacía mucha gracia lo de aquellas tres arpías.</p>
<p>Lewis era un tipo listo, un tipo con cabeza (que no con cabezón). Aquello tenía que cambiar, él no podía despreciar a aquellas maravillosas mujeres, además si el día de mañana su estado cambiaba quería que ellas fuesen las primeras en saberlo, pero por otra parte no podía soportar aquella ingente cantidad de llamadas. Entonces decidió que lo mejor era llegar a un <strong>acuerdo</strong> con Katie, Price y Jordan para, sin tener que ser ellas las que llamasen continuamente, poder avisarlas cuando su estado cambiase: era tan sencillo como tener su número y mandar un mensaje cuando su estado cambiase. Las ventajas eran claras: las observadoras podrían enterarse, Lewis no tendría que dejar de atender a Nicole para atender a llamadas intranscendentes, llamadas que iban a recibir la misma respuesta.</p>
<p>Katie, Price y Jordan estaban de acuerdo, pero a cambio le impusieron a Lewis una condición: podrían avisarle en cualquier momento para decirle que ya no estaban interesadas en él y que, por tanto, no hacía falta que fuesen notificadas de su cambio de estado. Lewis, chico listo, estaba de acuerdo, pero como no le gustaba desaprovechar ninguna posibilidad decidió que además cualquier chica debería poder suscribirse a su sistema de notificación.</p>
<p>Al principio todas seguían interesadas, Lewis era un sujeto deseado e interesaba conocer sus cambios de estado. Lewis se casó y todas las observadoras fueron avisadas, entonces Jordan decidió que ya no estaba interesada en Lewis y así se lo hizo saber. El grupo de las famosas <em>observadoras</em> ahora sólo estaba formado por Katie y Price.</p>
<p><a href="http://www.youtube.com/watch?v=xoa4m5KwobU#t=59s">Y era cuando ella</a>, Nicole, tenía que decirle a Lewis algo así: <em><a href="http://www.youtube.com/watch?v=FGx6YXdv_40">I don&#8217;t need a man</a> to make it happen / I get off being free / I don&#8217;t need a man to make me feel good / I get off doing my thing / I don&#8217;t need a ring around my finger / To make me feel complete / So let me break it down / I can get off when you ain&#8217;t around / Oh!</em>. Su estado había cambiado, nadie le iba a llamar porque así lo había acordado con las observadoras, pero Lewis era un chico listo y como había acordado un método para avisar a las observadoras sólo tenía que ejecutarlo para que Katie y Price supiesen que su estado había cambiado. Katie y Price podían llamar a Lewis para conocer su estado puesto que sabían que este había cambiado.</p>
<p>Lo más increíble de esta historia no es que esté casi-basada en personajes reales, es el hecho de que todo esto sea un patrón de diseño: observer, en este caso siguiendo un <em>protocolo</em> de <strong>pull</strong>, sólo se notifica que el estado ha cambiado y los suscriptores se tiene que encargar de obtener el nuevo <em>estado</em>. Si se hubiese escogido un <em>protocolo</em> de <strong>push</strong> el <em>estado</em> podría haber sido pasado a través del método de aviso.</p>
<p style="text-align: center;"><img class="size-full wp-image-144 aligncenter" title="Observer Pattern" src="http://i0.rau1.com/2008/11/diagram.png" alt="" width="500" height="320" /></p>
<p><strong>El acuerdo</strong>:</p>
<pre class="code">public interface SujetoDeseado {
	public void interesarse(Observadora o);
	public void desinteresarse(Observadora o);
	public void avisarObservadoras();
}</pre>
<pre class="code">public interface Observadora {
	public void avisar();
}</pre>
<p>El bueno y afable de <strong>Lewis</strong>:</p>
<pre class="code">import java.util.ArrayList;

public class Lewis implements SujetoDeseado {

	public enum Estado {
		SOLTERO, ENNOVIADO, CASADO
	};

	private ArrayList&lt;Observadora&gt; observadoras;
	private Estado estado;

	public Lewis() {
		this.observadoras = new ArrayList&lt;Observadora&gt;();
		this.estado = Estado.ENNOVIADO;
	}

	@Override
	public void avisarObservadoras() {
		for (Observadora o : this.observadoras) {
			o.avisar();
		}

	}

	@Override
	public void desinteresarse(Observadora o) {
		this.observadoras.remove(o);
	}

	@Override
	public void interesarse(Observadora o) {
		this.observadoras.add(o);
	}

	public Estado getEstado() {
		return this.estado;
	}

	public void estadoCambiado() {
		this.avisarObservadoras();
	}

	public void setEstado(Lewis.Estado estado) {
		this.estado = estado;
		this.estadoCambiado();
	}

}</pre>
<p><strong>Katie</strong>:</p>
<pre class="code">public class Katie implements Observadora {

	private SujetoDeseado lewis;

	public Katie(SujetoDeseado lewis) {
		this.lewis = lewis;
		lewis.interesarse(this);
	}

	public void loDelAmor() {
		System.out
				.println("Katie: A mi si que me vas a poder quitar todo!");
	}

	@Override
	public void avisar() {
		if (lewis instanceof Lewis) {
			Lewis l = (Lewis) lewis;
			switch (l.getEstado()) {
			case CASADO:
				this.esoNoVaADurar();
				break;
			case ENNOVIADO:
				this.loDeHacerseLaIndiferente();
				break;
			case SOLTERO:
				this.loDelAmor();
			}
		}
	}

	private void loDeHacerseLaIndiferente() {
		System.out.println("Katie: me da igual, sé que me quiere a mi.");
	}

	private void esoNoVaADurar() {
		System.out.println("Katie: esa relación no tiene futuro.");
	}

}</pre>
<p><strong>Price</strong>:</p>
<pre class="code">public class Price implements Observadora {

	private SujetoDeseado lewis;

	public Price(SujetoDeseado lewis) {
		this.lewis = lewis;
		lewis.interesarse(this);
	}

	public void loDelAmor() {
		System.out.println("Price: Lewis que voy sin bragafaja!");
	}

	@Override
	public void avisar() {
		if (lewis instanceof Lewis) {
			Lewis l = (Lewis) lewis;
			switch (l.getEstado()) {
			case CASADO:
				this.mePonenLosCasados();
				break;
			case ENNOVIADO:
				this.loDeTirarLosTrastos();
				break;
			case SOLTERO:
				this.loDelAmor();
			}
		}
	}

	private void mePonenLosCasados() {
		System.out.println("Price: Ains como me ponen los casados!");
	}

	private void loDeTirarLosTrastos() {
		System.out.println("Price: Tu padre podría vivir con nosotros.");
	}

}</pre>
<p>Y <strong>Jordan</strong>:</p>
<pre class="code">public class Jordan implements Observadora {

	private SujetoDeseado lewis;

	public Jordan(SujetoDeseado lewis) {
		this.lewis = lewis;
		lewis.interesarse(this);
	}

	public void loDelAmor() {
		System.out.println("Jordan: Vente pacá' y mira que escotazo!");
	}

	@Override
	public void avisar() {
		if (lewis instanceof Lewis) {
			Lewis l = (Lewis) lewis;
			switch (l.getEstado()) {
			case CASADO:
				this.loDeBuscarseOtro();
				break;
			case ENNOVIADO:
				this.loDeTirarLosTrastos();
				break;
			case SOLTERO:
				this.loDelAmor();
			}

		}
	}

	private void loDeTirarLosTrastos() {
		System.out.println("Jordan: Ains que guapeton es mi Hamilton!");
	}

	private void loDeBuscarseOtro() {
		System.out.println("Jordan: Que le den, yo me voy con Eddie Irvine");
	}

}</pre>
<p>La historia de amores y desamores:</p>
<pre class="code">public class Main {
	public static void main(String[] args) {
		// Katie, Price y Jordan llegan a un acuerdo para que Lewis
		// pueda mandar un aviso cuando su estado cambie.
		Lewis lewis = new Lewis();
		// Todas decicen suscribirse... Lewis es tan MONO.
		new Katie(lewis);
		new Price(lewis);
		Jordan jordan = new Jordan(lewis);
		// Lo primero que hace Lewis es avisar que está ennoviado con Nicole.
		lewis.setEstado(Lewis.Estado.ENNOVIADO);
		// Luego decide casarse, su estado cambia por tanto avisa.
		// Jordan ya le avisó que el día que su estado fuese el de casado se
		// desinteresaría.
		lewis.setEstado(Lewis.Estado.CASADO);
		// Nicole le canta eso de I don't need a man...
		// Pero ya sólo Katie y Price siguen interesadas en él, así que son las
		// únicas que se enteran de su nuevo estado
		lewis.desinteresarse(jordan);
		lewis.setEstado(Lewis.Estado.SOLTERO);
	}
}</pre>
<p>Y el <strong>resultado</strong> de toda esta historia:</p>
<pre class="code">Katie: me da igual, sé que me quiere a mi.
Price: Tu padre podría vivir con nosotros.
Jordan: Ains que guapeton es mi Hamilton!
Katie: esa relación no tiene futuro.
Price: Ains como me ponen los casados!
Jordan: Que le den, yo me voy con Eddie Irvine
Katie: A mi si que me vas a poder quitar todo!
Price: Lewis que voy sin bragafaja!</pre>
<p>Te puedes meter con la implementación todo lo que quieras, sobre todo con la visibilidad de algunos de los métodos. O por el hecho de extender <code>java.util.Observable</code>, pero esto ya es más discutible :-).</p>
<p>Y sí, probablemente debería haber aprovechado el tiempo en otra cosa, pero los domingos no suelen ser los mejores días para <em>trabajar</em>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=uD5IMCxR6aM:EjzfVUP1hn8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=uD5IMCxR6aM:EjzfVUP1hn8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=uD5IMCxR6aM:EjzfVUP1hn8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/11/17/patrones-de-diseno-con-novia-deja-que-te-observen-no-que-te-llamen-constantemente/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/11/17/patrones-de-diseno-con-novia-deja-que-te-observen-no-que-te-llamen-constantemente</feedburner:origLink></item>
		<item>
		<title>Update your WordPress installation to latest version (or die)</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/ZJof745O9t8/update-your-wordpress-installation-to-latest-version-or-die</link>
		<comments>http://rau1.com/blog/2008/11/15/update-your-wordpress-installation-to-latest-version-or-die#comments</comments>
		<pubDate>Sat, 15 Nov 2008 20:50:29 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[latest]]></category>
		<category><![CDATA[shoot-yourself-in-the-foot]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=138</guid>
		<description><![CDATA[If you don&#8217;t appreciate your WordPress blog too much you can upgrade to latest version this way: curl -s http://wordpress.org/latest.tar.gz &#124; tar zxv &#62; /dev/null &#38;&#38; \ cp -rf wordpress/* . &#38;&#38; rm -rf wordpress/* &#38;&#38; rmdir wordpress P.S.: I regularly shoot myself in the foot.]]></description>
				<content:encoded><![CDATA[<p>If you don&#8217;t appreciate your WordPress blog too much you can upgrade to latest version this way:</p>
<pre class="code">curl -s http://wordpress.org/latest.tar.gz | tar zxv &gt; /dev/null &amp;&amp; \
cp -rf wordpress/* . &amp;&amp; rm -rf wordpress/* &amp;&amp; rmdir wordpress</pre>
<p>P.S.: I regularly shoot myself in the foot.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=ZJof745O9t8:YVfo0a_RpGE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=ZJof745O9t8:YVfo0a_RpGE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=ZJof745O9t8:YVfo0a_RpGE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/11/15/update-your-wordpress-installation-to-latest-version-or-die/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/11/15/update-your-wordpress-installation-to-latest-version-or-die</feedburner:origLink></item>
		<item>
		<title>Puzzles en Java</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/db_lTnpyvCw/puzzles-en-java</link>
		<comments>http://rau1.com/blog/2008/10/15/puzzles-en-java#comments</comments>
		<pubDate>Tue, 14 Oct 2008 22:11:02 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[josh-bloch]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=134</guid>
		<description><![CDATA[A raíz de mi irónica entrada sobre PHP el jrande de Diego me recomendó ver Advanced Topics in Programming Languages: Java Puzzlers, un ameno tech talk presentado por Joshua Bloch (os debería sonar del JavaDoc) y William Pugh. Me gustó Histogram Mystery (43min 40s), así que he preparado una versión simplificada y castellanizada. Dos cervezas [...]]]></description>
				<content:encoded><![CDATA[<p>A raíz de <a href="http://rau1.com/blog/2008/08/25/why-php-rocks">mi irónica entrada sobre PHP</a> el <em>jrande</em> de Diego me recomendó ver <a href="http://youtube.com/watch?v=wDN_EYUvUq0">Advanced Topics in Programming Languages: Java Puzzlers</a>, un ameno tech talk presentado por Joshua Bloch (os debería sonar del JavaDoc) y William Pugh.</p>
<p>Me gustó <em>Histogram Mystery</em> (43min 40s), así que he preparado una versión simplificada y castellanizada. <strong>Dos cervezas para el primero</strong> que diga cuál es el resultado y además lo justifique (sin haber visto el vídeo, claro). Y cuidado con las posibles respuestas&#8230; por aquello de la rima fácil.</p>
<pre class="code">public class AbsolutVodkaPuzzle {
	public static void main(String[] args) {
		String frase = "Al anochecer llamaron al celular";
		String [] palabras = frase.split(" ");
		int i = 0;
		for (String palabra1 : palabras) {
			for (String palabra2 : palabras) {
				String dosPalabras = palabra1 + palabra2;
				int valorAbsolutoHash = Math.abs(dosPalabras.hashCode());
				if (valorAbsolutoHash &gt;= 0) {
					i++;
				}
			}
		}
		System.out.println('1' + i);
	}
}</pre>
<p>ExtraLap™: Josh Bloch es autor de <em>Effective Java</em> y coautor de <em>Java Puzzlers</em> y <em>Java Concurrency in Practice</em> (de este último todavía no he podido disfrutar). Y además es una de las personas que consigue que [ames|odies] Java.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=db_lTnpyvCw:D7INeB_WWUs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=db_lTnpyvCw:D7INeB_WWUs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=db_lTnpyvCw:D7INeB_WWUs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/10/15/puzzles-en-java/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/10/15/puzzles-en-java</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: La crisis y los minipisos</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/Y2nZJ2dXLPM/zero-huno-la-crisis-y-los-minipisos</link>
		<comments>http://rau1.com/blog/2008/10/09/zero-huno-la-crisis-y-los-minipisos#comments</comments>
		<pubDate>Thu, 09 Oct 2008 15:16:58 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[bitwise]]></category>
		<category><![CDATA[casting]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[crisis]]></category>
		<category><![CDATA[economic]]></category>
		<category><![CDATA[financial]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=130</guid>
		<description />
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2008/10/005_crisis.png" alt="005_crisis" title="005_crisis" width="520" height="520" class="alignnone size-full wp-image-248" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=Y2nZJ2dXLPM:YiyOD9jDp78:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=Y2nZJ2dXLPM:YiyOD9jDp78:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=Y2nZJ2dXLPM:YiyOD9jDp78:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/10/09/zero-huno-la-crisis-y-los-minipisos/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/10/09/zero-huno-la-crisis-y-los-minipisos</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: Redes Sociales</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/sygLHxVI2tI/zero-huno-redes-sociales</link>
		<comments>http://rau1.com/blog/2008/09/08/zero-huno-redes-sociales#comments</comments>
		<pubDate>Mon, 08 Sep 2008 19:33:57 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[social-network]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[tuenti]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=125</guid>
		<description />
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2008/09/004_socialnetworks.png" alt="004_socialnetworks" title="004_socialnetworks" width="520" height="460" class="alignnone size-full wp-image-250" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=sygLHxVI2tI:5gF1JwrgFLg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=sygLHxVI2tI:5gF1JwrgFLg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=sygLHxVI2tI:5gF1JwrgFLg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/09/08/zero-huno-redes-sociales/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/09/08/zero-huno-redes-sociales</feedburner:origLink></item>
		<item>
		<title>Why PHP rocks</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/6-Av3wtIYbs/why-php-rocks</link>
		<comments>http://rau1.com/blog/2008/08/25/why-php-rocks#comments</comments>
		<pubDate>Mon, 25 Aug 2008 12:05:22 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[best-practices]]></category>
		<category><![CDATA[bitwise]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[comparisons]]></category>
		<category><![CDATA[funniest]]></category>
		<category><![CDATA[ieee-754]]></category>
		<category><![CDATA[integers]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=116</guid>
		<description><![CDATA[Programming (aka scripting/writing) PHP is so funny you never know what is the next thing that will happen when you compare two variables or simply try to increment an integer. You can complain about its design (OOP), or its functions&#8217; names or whatever you want, but you know how cool and funny is to program [...]]]></description>
				<content:encoded><![CDATA[<p>Programming (aka scripting/writing) PHP is so funny you never know what is the next thing that will happen when you compare two variables or simply try to increment an integer.</p>
<p>You can complain about its design (OOP), or its functions&#8217; names or whatever you want, but you know how cool and funny is to program in PHP. It should be <em>a must</em> within any programming 101 course ;-).</p>
<p>Here my compilation of PHP funniest things:</p>
<pre class="code">printf("Integers and Strings\n");
echo "----------------\n";
printf("%s\n", ('0' == 0) ? 'true' : 'false');
printf("%s\n", ('0' === 0) ? 'true' : 'false');
printf("%s\n", ('string' == 0) ? 'true' : 'false');
printf("%s\n", ('string' === 0) ? 'true' : 'false');
printf("%s\n", ('string' == 1) ? 'true' : 'false');
printf("%s\n", ('string' === 1) ? 'true' : 'false');
printf("%s\n", ('0000e12345' == '0e12345') ? 'true' : 'false');
printf("%s\n", ((string) '0123' == (string) '123') ? 'true' : 'false');
printf("%s\n", ('007' == '7') ? 'true' : 'false');
printf("%s\n", ('Bond' == 'Raul') ? 'true' : 'false');
$i = null;
echo (++$i) . "\n";
echo ($i+=1) . "\n";
$i = null;
echo (--$i) . "\n";
echo ($i-=1) . "\n";

printf("\nBitwise Operators\n");
echo "----------------\n";
printf("%s\n", (~0 &amp; 0x20) ? 'true' : 'false');
printf("%s\n", (~'0' &amp; 0x20) ? 'true' : 'false');
echo (9 &amp; 8) . "\n";
printf("%s\n", (9 &amp; 8 == 8) ? 'true' : 'false');
echo (8 &amp; 8) . "\n";
printf("%s\n", (8 &amp; 8 == 8) ? 'true' : 'false');

echo "\nIEEE 754 friends et al\n";
echo "----------------\n";
echo (7 % 2.4) . "\n";
printf("%s\n", -1 % 7);
printf("%s\n", 3333333333 % 3);
printf("%s\n", 2863311530 % 25);
printf("%s\n", 2863311530 % 256);

printf("\nOther comparisons\n");
echo "----------------\n";
printf("%s\n", ($a = 0 or $a = 'string') ? $a : $a);
printf("%s\n", ($a = 0 || $a = 'string') ? $a : $a);
printf("%s\n", (array() == false) ? 'true' : 'false');
printf("%s\n", (array() === false) ? 'true' : 'false');</pre>
<p>It should produce 29 results. It&#8217;s said that one guy once was able to predict (Yeah! I meant to predict) the exact output for every single one. PHP is <em>so lovely</em>.</p>
<p><strong>Could you say what is the exact output for each and everyone of them?</strong></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=6-Av3wtIYbs:-sBrMrdc-kg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=6-Av3wtIYbs:-sBrMrdc-kg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=6-Av3wtIYbs:-sBrMrdc-kg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/08/25/why-php-rocks/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/08/25/why-php-rocks</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: Color Profiles</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/2g73idaworU/zero-huno-color-profiles</link>
		<comments>http://rau1.com/blog/2008/06/23/zero-huno-color-profiles#comments</comments>
		<pubDate>Mon, 23 Jun 2008 06:00:37 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[color-profiles]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=114</guid>
		<description />
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2008/06/003_colorprofiles.png" alt="003_colorprofiles" title="003_colorprofiles" width="520" height="320" class="alignnone size-full wp-image-251" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=2g73idaworU:oHRD-mLZfiQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=2g73idaworU:oHRD-mLZfiQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=2g73idaworU:oHRD-mLZfiQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/06/23/zero-huno-color-profiles/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/06/23/zero-huno-color-profiles</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: IEEE 754</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/L11UlZrElbg/zero-huno-ieee-754</link>
		<comments>http://rau1.com/blog/2008/06/20/zero-huno-ieee-754#comments</comments>
		<pubDate>Fri, 20 Jun 2008 07:13:31 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[binary]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[floating-point]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[ieee]]></category>
		<category><![CDATA[ieee-754]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=113</guid>
		<description />
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2008/06/002_ieee754.png" alt="002_ieee754" title="002_ieee754" width="520" height="240" class="alignnone size-full wp-image-254" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=L11UlZrElbg:SYHre-x907E:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=L11UlZrElbg:SYHre-x907E:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=L11UlZrElbg:SYHre-x907E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/06/20/zero-huno-ieee-754/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/06/20/zero-huno-ieee-754</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: Recursividad</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/ijQLNnXV2jM/zero-huno-recursividad</link>
		<comments>http://rau1.com/blog/2008/06/18/zero-huno-recursividad#comments</comments>
		<pubDate>Wed, 18 Jun 2008 20:24:09 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[recursivity]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=112</guid>
		<description><![CDATA[URL: http://itgo.es/1gm]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2008/06/001_recursividad.png" alt="001_recursividad" title="001_recursividad" width="520" height="240" class="alignnone size-full wp-image-256" /></p>
<p style="text-align: center;">URL: <a href="http://itgo.es/1gm">http://itgo.es/1gm</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=ijQLNnXV2jM:nGT8-PRNz-g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=ijQLNnXV2jM:nGT8-PRNz-g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=ijQLNnXV2jM:nGT8-PRNz-g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/06/18/zero-huno-recursividad/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/06/18/zero-huno-recursividad</feedburner:origLink></item>
		<item>
		<title>Zero&amp;Huno: Branding 2.0</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/E4yH1AA7JFk/zero-huno-branding-20</link>
		<comments>http://rau1.com/blog/2008/06/16/zero-huno-branding-20#comments</comments>
		<pubDate>Mon, 16 Jun 2008 14:07:17 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Zero&Huno]]></category>
		<category><![CDATA[binary]]></category>
		<category><![CDATA[branding]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=111</guid>
		<description />
				<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://i0.rau1.com/2008/06/000_branding.png" alt="000_branding" title="000_branding" width="520" height="240" class="alignnone size-full wp-image-257" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=E4yH1AA7JFk:G4zNb2pn0Fs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=E4yH1AA7JFk:G4zNb2pn0Fs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=E4yH1AA7JFk:G4zNb2pn0Fs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/06/16/zero-huno-branding-20/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/06/16/zero-huno-branding-20</feedburner:origLink></item>
		<item>
		<title>Zero &amp; Huno</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/WYGiZ5Hp-7s/zero-huno</link>
		<comments>http://rau1.com/blog/2008/06/16/zero-huno#comments</comments>
		<pubDate>Mon, 16 Jun 2008 13:57:22 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[strip]]></category>
		<category><![CDATA[zero-huno]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=110</guid>
		<description><![CDATA[A partir de hoy me acompañarán un par de personajes, Zero y Huno, que iréis conociendo poco a poco. Con ellos intentaré abstraerme de El Mundo Real™ durante unos minutos a la semana, y de paso poder parecer algo más informático y algo menos persona. Por supuesto, y como siempre, no prometo que vaya a [...]]]></description>
				<content:encoded><![CDATA[<p>A partir de hoy me acompañarán un par de personajes, Zero y Huno, que iréis conociendo poco a poco. Con ellos intentaré abstraerme de <em>El Mundo Real</em>™ durante unos minutos a la semana, y de paso poder parecer algo más informático y algo menos persona. Por supuesto, y como siempre, no prometo que vaya a durar ni un poquito.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=WYGiZ5Hp-7s:pKWgXsHrhKw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=WYGiZ5Hp-7s:pKWgXsHrhKw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=WYGiZ5Hp-7s:pKWgXsHrhKw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/06/16/zero-huno/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/06/16/zero-huno</feedburner:origLink></item>
		<item>
		<title>Wazooka J2EE MVC-RESTful Framework</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/gE1L-T6PQqI/bazooka-j2ee-mvc-restful-framwork</link>
		<comments>http://rau1.com/blog/2008/06/12/bazooka-j2ee-mvc-restful-framwork#comments</comments>
		<pubDate>Thu, 12 Jun 2008 16:43:55 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[app-engine]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[struts]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=108</guid>
		<description><![CDATA[I&#8217;m working in my final degree project, an interactive web document commenting system that allows people to annotate comments directly onto document elements like words at paragraphs and images. My mentor forced me to use Java as the primary language for the project. In these days choosing a J2EE Framework sucks. If you&#8217;re a fashion-victim/fancy-boy, [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m working in my final degree project, an interactive web document commenting system that allows people to annotate comments directly onto document elements like words at paragraphs and images.</p>
<p>My mentor <em>forced</em> me to use Java as the primary language for the project. In these days choosing a J2EE Framework sucks. If you&#8217;re a fashion-victim/fancy-boy, you know, you&#8217;ll end using a combination of Struts + Spring + Hibernate + AnyFlavourOfYourFavoriteJavaTrendyWebTechnology and obviously a <a href="http://www.google.com/search?q=gazillion">gazillion</a> of XML config files. Do you really need all of this stuff for <em>little projects</em> with just two SQL queries and three templates? It was driving me crazy for about two weeks. I&#8217;m not underestimating Structs or Hibernate or whatever, I&#8217;m saying it doesn&#8217;t fit for small projects.</p>
<p>You must be thinking I&#8217;m using a single approach with some Servlets and JSP files, and also you can be wrong. I don&#8217;t like how huge struts framework is, but I&#8217;m <em>a fan of trendy-best-practices </em> ;-). I love the way <a href="http://code.google.com/appengine/">Google&#8217;s App Engine</a>, <a href="http://www.rubyonrails.com/">Ruby on Rails</a> and <a href="http://www.djangoproject.com/">Django</a> enforce you to get things done. I&#8217;ve been hacking with the Java Reflection API, Tomcat and other stuff for a while, now I can tell you I have a little alpha-baby called Wazooka.</p>
<p>Wazooka is a high-level convention-over-configuration J2EE Web framework that encourages rapid development and clean, pragmatic design. (Is it possible in Java World?)</p>
<p>Currently Wazooka is under development, in its 0.2614972128 version (aka Meissel-Mertens [1]) it features:</p>
<ul>
<li>MVC paradigm</li>
<li>RESTful</li>
<li><a href="http://ehcache.sourceforge.net/">Ehcache</a> support</li>
<li><a href="http://activeobjects.dev.java.net/">ActiveObjects</a> ORM (à la ActiveRecord). It supports Derby, HSQLDB, SQL Server, MySQL, Oracle and PostgreSQL.</li>
<li>Pure Java HTML Forms (with validation&#8230;)</li>
<li>Templates with layouts (allowing you to include a view into a general layout)</li>
<li>Authentication and user-role helpers</li>
<li>JUnit and log4j integration</li>
<li>A simple app admin console to manage database migrations and cache status.</li>
<li>NO XML configuration files!</li>
</ul>
<p>For now I&#8217;m the solo user-developer, but I plan to release it under a free software license. When? I don&#8217;t know, but keep checking this blog. In the next blog-post I&#8217;ll show you how easy is to develop a simple web application with my little Wazooka baby }:-).</p>
<p>[1] One day I&#8217;ll explain how I assign version numbers.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=gE1L-T6PQqI:bL9BQIQKF78:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=gE1L-T6PQqI:bL9BQIQKF78:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=gE1L-T6PQqI:bL9BQIQKF78:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/06/12/bazooka-j2ee-mvc-restful-framwork/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/06/12/bazooka-j2ee-mvc-restful-framwork</feedburner:origLink></item>
		<item>
		<title>Download Movies from the IMDb website</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/pVnyeInor1U/download-movies-from-the-imdb-website</link>
		<comments>http://rau1.com/blog/2008/04/20/download-movies-from-the-imdb-website#comments</comments>
		<pubDate>Sun, 20 Apr 2008 19:06:21 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[bittorrent]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[imdb]]></category>
		<category><![CDATA[movie]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[torrent]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=105</guid>
		<description><![CDATA[Updated: Memiux asked through the comments about the possibility of publishing an greasemonkey user script, I have just uploaded it too. So you can choose between two flavours. I&#8217;m just releasing my brand-new Firefox plugin that allows you to direct download movie&#8217;s torrents from The Internet Movie Database. When you reach a movie page you [...]]]></description>
				<content:encoded><![CDATA[<p><span class="updated">Updated</span>: Memiux asked through the comments about the possibility of publishing an greasemonkey user script, I have just uploaded it too. So you can choose between two flavours.</p>
<p>I&#8217;m just releasing my brand-new Firefox plugin that allows you to <strong>direct <a href="http://www.flixdump.com/">download movie&#8217;s</a> torrents from The Internet Movie Database</strong>. When you reach a movie page you see a new section under the title and you can choose a torrent to download. <strong>Please spread the word</strong>. Ouch! I forgot to mention&#8230; it&#8217;s <strong>for free</strong>!</p>
<p style="text-align: center;"><img title="IMDB" src="http://i0.rau1.com/2008/04/imdbbittorrent.png" alt="" /></p>
<p><a class="download" href="http://rau1.com/dl/imdbbittorrent.xpi">Download IMDB Bittorrent Firefox Plugin</a><br />
<span class="download-info">v0.100, <a href="http://www.gnu.org/copyleft/gpl.html">GNU GPLv3</a>.</span><br />
<a class="download" href="http://rau1.com/dl/imdbbittorrent.user.js">Download IMDB Bittorrent Greasemonkey User Script</a><br />
<span class="download-info">v0.100, <a href="http://www.gnu.org/copyleft/gpl.html">GNU GPLv3</a>.</span></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=pVnyeInor1U:zsYjy2ezov4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=pVnyeInor1U:zsYjy2ezov4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=pVnyeInor1U:zsYjy2ezov4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/04/20/download-movies-from-the-imdb-website/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/04/20/download-movies-from-the-imdb-website</feedburner:origLink></item>
		<item>
		<title>apt-get install raul-kernel-headers-23</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/8iSxP_dZxfE/apt-get-install-raul-kernel-headers-23</link>
		<comments>http://rau1.com/blog/2008/04/12/apt-get-install-raul-kernel-headers-23#comments</comments>
		<pubDate>Sat, 12 Apr 2008 00:46:39 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[app-engine]]></category>
		<category><![CDATA[birthday]]></category>
		<category><![CDATA[celebration]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[friends]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jisko]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[open-pizza-night]]></category>
		<category><![CDATA[pfc]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://rau1.com/?p=102</guid>
		<description><![CDATA[Hace unos días me aburría, decidí que tener 23 podría ser más divertido que seguir con 22, sobre todo porque hasta los 29 no volveré a disfrutar de un número primo. Sí, hablaba de [cumple]años. Y es que el número 23 es uno de esos números que te cautivan, por ejemplo su representación en binario, 10111, también [...]]]></description>
				<content:encoded><![CDATA[<p>Hace unos días me aburría, decidí que tener 23 podría ser más divertido que seguir con 22, sobre todo porque hasta los 29 no volveré a disfrutar de un número primo. Sí, hablaba de [cumple]años. Y es que <a href="http://en.wikipedia.org/wiki/23_(number)">el número 23</a> es uno de esos <a href="http://www.archimedes-lab.org/numbers/Num13_23.html">números que te cautivan</a>, por ejemplo su representación en binario, 10111, también es un número primo.</p>
<p><strong>Google Open Pizza Night:</strong><br />
También estuve en la Open Pizza Night que brillantemente organizó Google España en sus oficinas de Madrid. <a href="http://raulenlasnubes.blogspot.com/">Raúl Benito</a> (qué difícil es encontrar su blog!) iba a presentar el nuevo API de Youtube, primero una pequeña introducción seguida de un workshop en el que Raúl presentó su revolucionario método de desarrollo <acronym title="Snippet-Driven Development">SDD</acronym>, estamos a la espera del RFC }:-).</p>
<p>Fue una <em>noche</em> de reencuentros, estuve con los <a href="http://lamboratory.com/blog/2008/03/29/un-gran-premio-para-una-gran-victoria/">Lamb Brothers</a> (que me tienen engañado para hacer una pequeña aplicación), con Javi (está vez acompañado por otro Raúl) y <a href="http://a1berto.es/google-pizza-night/">A1berto</a>, todos viejos conocidos de la Campus Party. También coincidí con Miguel que le tuve como compañero en un workshop del GDD del año pasado. Pude estar, por ejemplo, con <a href="http://tufuncion.com/google-open-pizza-night">Manu, de tufuncion.com</a>, al que, por cierto, le debo una disculpa por no haberme pasado a dejar el comentario que le prometí O:-) y con Igor de <a href="http://www.txurdi.net/">Txurdi</a>. También charlé con Dani y Rupert de <a href="http://www.tuenti.com/">Tuenti</a>. Seguro que me olvido a más de uno, así que&#8230; lo siento! </p>
<p>Además, y por fin, pude conocer a <a href="http://diazr.com/un-dia-de-open-pizza-night/">Rubén Díaz</a> (aka <a href="http://jisko.net/outime">outime</a>), todo un crack que está desarrollando <a href="http://jisko.net/">Jisko</a>, y aunque no me guste explicarlo así, un clon libre de Twitter con funcionalidades extras, me llamó poderosamente la atención lo involucrado que está en el proyecto, este sí que sigue aquello de <em>eating his own dog food</em>, proyecto que, por cierto, pudo presentar durante 10 minutos.</p>
<p>Por lo demás, decir que las pizzas estaban mejor que buenas, la cerveza también, pero nada como las patatas fritas de colores, lo siento, eran mi debilidad, y la de todos mis compañeros de mesa! Ahora dar las gracias a todos l@s chic@s de Google, que una vez más nos trataron fenomenal, y sobre todo a Clara por invitarnos a un evento que espero no sea el último de este tipo. Para enterarte de eventos como este y de todas las novedades de Google no dejes de leer y suscribirte al blog de oficial de Google para desarrolladores en español: <a href="http://programa-con-google.blogspot.com/">Programa con Google</a>.</p>
<p>Yo también tuve 10 minutos para presentar una pequeña <em>prueba de concepto</em> que pretendía mostrar algunas de las nuevas capacidades del API de Youtube. Todo lo había programado en tres tardes y una larga noche, una aplicación a medio camino entre Twitter y <a href="http://www.seesmic.com/">Seesmic</a>. Un servicio de <em>microvideoblogging</em> que permite grabar vídeos directamente a través de la página web, y que posteriormente son almacenados en Youtube, en los que se permite, por ejemplo, añadir videorespuestas. Podría dedicarle algo más de tiempo y publicar la aplicación (aunque todavía no tenga modelo de financiación :-P). Aplicación que estaba escrita en Java, por una vez creo que escribir en Java una aplicación web me supuso ahorrar tiempo, ya que pude usar el <a href="http://code.google.com/p/gdata-java-client/">GData API Client de Java</a>.</p>
<p><strong>Mi Proyecto Fin de Carrera:</strong><br />
La aplicación que presenté en la Open Pizza Night usaba una de las primeras versiones de un pequeño framework J2EE que estoy preparando para mi Proyecto Fin de Carrera. Framework que sigue el patrón MVC con un <em>front controller</em> que procesa todas las peticiones y usa el API de reflexión de Java para cargar clases y llamar a métodos dinámicamente en función de la URL, también usa annotations para, por ejemplo, poder especificar que métodos necesitan autentificación por parte del usuario. Y lo mejor, no hace falta escribir ni una línea de XML! El próximo día hablaré sobre mi PFC, porque lo mejor de Java es que puedes odiarlo, pero nunca lo odiarás tanto como documentar.</p>
<p><strong>Arpia49 (the distroman):</strong><br />
Por otra parte pasé dos días geniales en casa de <a href="http://arpia49.wordpress.com/">Adal</a> (aka arpia49), sin el que no hubiese podido aprender a usar mi nueva powerball, y sin el que tampoco podía haber saboreado la primera sandía del mundo que en realidad sabía a melón (priceless).</p>
<p><strong>Optimización de Aplicaciones LAMP:</strong><br />
Ayer estuve en una magnífica charla, impartida por Fernando Arconada, sobre optimización (y un poquito de escalabilidad) de aplicaciones LAMP. La charla estaba enmarcada dentro de las jornadas técnicas que se imparten en mi universidad con motivo de la celebración de la <a href="http://www.riojaparty.com/">RiojaParty</a> de este año.</p>
<p><strong>Sobre el </strong><a href="http://rau1.com/code/pywebdj/"><strong>PyWebDj</strong></a><strong>:</strong><br />
Como casi siempre me termina pasando, una vez más, no tengo tiempo para mantener la aplicación, y menos si quiero que funcione en GNU/Linux, Windows y Mac OS X. Parece que la versión actual ha dejado de funcionar, seguramente hayan cambiado los tokens asociados a los archivos, pero no quiero ni pararme a mirarlo. Además han aparecido varias herramientas similares (seguro que incluso son mejores), <em>so&#8230; google for it</em>.</p>
<p><strong>Extra Lap (parafraseando a </strong><a href="http://8000vueltas.com/author/delarosa"><strong>delarosa</strong></a><strong>):</strong><br />
Seguramente me olvide de contar algunas cosas. Como que me <span style="text-decoration: line-through;">rompí</span> rompieron un ligamento jugando al fútbol y llevo casi dos meses sin jugar. O que el número de cervezas consumidas durante el transcurso de todas estas historias es superior a dos. O todo lo que me gusta el nuevo <a href="http://code.google.com/appengine/">App Engine de Google</a>, pero de esto ya hablaremos en otro momento. En definitiva, lo que venía a decir es: <strong>sigo vivo</strong>.</p>
<p><strong>Disculpas:</strong><br />
Siento que este post tenga casi el mismo número de saltos en el tiempo que el peliculón <a href="http://video.google.com/videoplay?docid=3909854615539675694">Primer</a>, pero después de tres meses sin escribir casi se me había olvidado. Intentaré que el próximo post se publique antes de mi siguiente cumpleaños primo.<br />
Lo del título del post, no voy a intentar ni explicarlo, si no lo entiendes pasa al siguiente, siguiente, siguiente. Y hasta la vista, Vista.</p>
<p> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=8iSxP_dZxfE:tI-a6Ayed44:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=8iSxP_dZxfE:tI-a6Ayed44:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=8iSxP_dZxfE:tI-a6Ayed44:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/04/12/apt-get-install-raul-kernel-headers-23/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/04/12/apt-get-install-raul-kernel-headers-23</feedburner:origLink></item>
		<item>
		<title>PyWebDj: Free Music For EveryOne</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/0JviaggEOLc/pywebdj-free-music-for-everyone</link>
		<comments>http://rau1.com/blog/2008/01/07/pywebdj-free-music-for-everyone#comments</comments>
		<pubDate>Mon, 07 Jan 2008 02:33:06 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://rau1.com/blog/2008/01/07/pywebdj-free-music-for-everyone</guid>
		<description><![CDATA[Qué es PyWebDj (versión corta y oficial) Es un programa sin ánimo de lucro que permite extraer el audio de ficheros alojados en internet por terceros. Qué es PyWebDj (versión larga también conocida como: qué fumas?) No lea el siguiente párrafo a no ser que esté muy aburrido (o trabajando) Es la confirmación de que [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Qué es PyWebDj (versión corta y oficial)</strong><br />
Es un programa sin ánimo de lucro que permite extraer el audio de ficheros alojados en internet por terceros.</p>
<p><strong>Qué es PyWebDj (versión larga también conocida como: <em>qué fumas?</em>)</strong><br />
<small>No lea el siguiente párrafo a no ser que esté muy aburrido (o trabajando)</small><br />
Es la confirmación de que puedo ser un vago, lo que a su vez demuestra que puedo llegar a ser informático, sí, uno más de esos.<br />
Después de este comienzo tan poco gracioso me explico: aproximadamente hace un mes me preguntaron si podía encontrar (vía eDonkey2000, ares, bittorrent&#8230;<em>ponga aquí su protocolo p2p favorito</em>) una canción. Nada, no la encontraba, era algo fuera de lo común y no lo encontraba, pero al preguntar dónde habían escuchado esa canción me dijeron que en un vídeo de YouTube. Así que me puse el mono de trabajo, bajé el vídeo, tiré de <a href="http://ffmpeg.mplayerhq.hu/">ffmpeg</a> y saqué un mp3 con la canción en cuestión, <a href="http://www.youtube.com/watch?v=by8oyJztzwo">una versión rock del canon de Pachelbel</a>.</p>
<p>Hace unos días me volvieron a pedir algo parecido, así que antes de que esto se convirtiese en el <em>Raúl puedes pasarte a formatear mi ordenador 2.0</em>, <a href="http://twitter.com/rochoa/statuses/546760072">decidí que tenía que hacer un programita chorra como regalo de reyes para todo el mundo</a> y además me ahorrase el trabajo. En un principio iba a ser algo en plan: meto la URL, que baje el vídeo a cañón y que le saque el audio. Eso era feo y además lo tendría que seguir haciendo yo, sino podría pasar la de&#8230; <em>Consola? Qué Consola? Yo sólo tengo una Play2, me vale esa?</em> (Era un chiste geek, si no te ha hecho gracia, no hace falta que lo entiendas). Así que la siguiente idea fue Java + SWT, pero bueno ya se sabe, lo bonito de Java es que puedes odiarlo. Así que tras tener prácticamente todo lo necesario para bajar y extraer el audio, me puse a pegarme con SWT durante un buen rato (3 minutos), no está hecho para programarlo (sí, SWT se programa, no se diseña :D) a las tantas de la mañana o la tarde de un domingo.</p>
<p>Por qué no usar&#8230;dotNet, <em>que te preparas una interfaz en 5 minutos con WinForms</em>? Porque quería que fuese multiplataforma<sup>*</sup>. De ahí la idea de la aplicación para línea de comandos, y luego Java + SWT.</p>
<p>Entonces&#8230;? Python (webpy), SQLite, ffmpeg, XML, Flash, HTML, x cervezas, 500gr de pistachos, dos tardes de <em>ayer salí</em> y una noche un poco larga. Y como resultado una aplicación web con buscador de canciones, <em>gestor</em> de descargas y <em>gestor</em> de biblioteca musical. Probablemente no sea la mejor solución, pero era la más cómoda para mi, y al final la aplicación cumple con su función: bajar música.</p>
<p><small><sup>*</sup>Habrá versión para Mac OS X y Linux es unos días (espero).</small></p>
<p><strong>Licencia</strong><br />
Aunque todavía no he publicado el código, lo haré espero que pronto, de momento le he colocado una <a href="http://www.apache.org/licenses/LICENSE-2.0.html">licencia Apache Version 2.0</a>. Si alguien quiere hacer alguna sugerencia sobre la licencia más oportuna para esta aplicación, por favor, como siempre a través de los comentarios.</p>
<p><strong>Sí, no todo es maravilloso</strong><br />
La aplicación es bastante mejorable, muy mejorable. Sé que tiene problemas (y fallos) pero no quería alargarme, más que nada porque durante los próximos días prefiero no dedicarle más tiempo a esto. Pero ya se sabe aquello de <em>Release early, release often</em>, yo de momento voy a cumplir la primera parte.<br />
Por ejemplo, la calidad del audio está condicionada por los archivos de vídeo, así que no esperéis calidades altas. Todavía sólo he preparado la versión para Microsoft Windows. Seguramente en Internet Explorer no funcione (algún día lo hará).</p>
<p><strong>No prometo NADA</strong><br />
Viene un mes un tanto duro para mi, así que no prometo mejoras, ni corregir errores hasta que al menos llegue el 15 de febrero, más o menos.</p>
<p><strong>Sugerencias, quejas y dudas</strong><br />
Como siempre a través de los comentarios. Se bonificarán ;-).</p>
<p><strong>Sobre lo legal, lo ilegal y lo alegal</strong><br />
Yo sólo pongo la cama, y creo que es cómoda. Nada más que decir.</p>
<p><a href="http://rau1.com/dl/PyWebDj-Installer.exe" class="download">Download PyWebDj for Windows</a><br />
<span class="download-info">v0.100, <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache License, Version 2.0</a>.</span></p>
<p><strong>P.D.:</strong><br />
Podría haberme extendido más, pero estoy con el portátil en la cama y me estoy quedando sin batería. Así que perdonadme las faltas y que no haya hablado de cositas como Adobe AIR (entre otras). Y si probáis la aplicación se agradecería un comentario.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=0JviaggEOLc:PXMxMt7MB9E:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=0JviaggEOLc:PXMxMt7MB9E:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=0JviaggEOLc:PXMxMt7MB9E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2008/01/07/pywebdj-free-music-for-everyone/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2008/01/07/pywebdj-free-music-for-everyone</feedburner:origLink></item>
		<item>
		<title>Programa con Google</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/RWYwqH4HadU/programa-con-google</link>
		<comments>http://rau1.com/blog/2007/12/06/programa-con-google#comments</comments>
		<pubDate>Thu, 06 Dec 2007 14:53:39 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[spain]]></category>

		<guid isPermaLink="false">http://rau1.com/blog/2007/12/06/programa-con-google</guid>
		<description><![CDATA[Programa con Google es el nuevo blog en castellano para los desarrolladores que utilizan las herramientas de Google en el que se informará de las últimas novedades, eventos y noticias relacionadas con La Compañía ;-). Además intentarán responder al mayor número de dudas y preguntas que se planteen. Si desarrollas con herramientas de Google y [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://programa-con-google.blogspot.com/">Programa con Google</a> es el nuevo blog en castellano para los desarrolladores que utilizan las herramientas de Google en el que se informará de las últimas novedades, eventos y noticias relacionadas con <a href="http://en.wikipedia.org/wiki/The_Company_(Prison_Break)">La Compañía</a> ;-). Además intentarán responder al mayor número de dudas y preguntas que se planteen.</p>
<p>Si desarrollas con <a href="http://code.google.com/">herramientas de Google</a> y quieres compartir tus conocimientos, <strong>puedes ganar una camiseta</strong> con las <em>letritas lego</em> que tan de moda están. Para ello sólo tienes que enviar un correo a <a href="mailto:programacongoogle@google.com"><strong>programacongoogle@google.com</strong></a> con tu aportación. A esa misma dirección puedes enviar tus preguntas, dudas y sugerencias.</p>
<p>Mi enhorabuena al equipo de Google España por esta iniciativa. Ánimo Clara!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=RWYwqH4HadU:kBUVhLXp6fU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=RWYwqH4HadU:kBUVhLXp6fU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=RWYwqH4HadU:kBUVhLXp6fU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2007/12/06/programa-con-google/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2007/12/06/programa-con-google</feedburner:origLink></item>
		<item>
		<title>Skribit: de qué quieres que hable?</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/lsOJ8nSkuMA/skribit-de-que-quieres-que-hable</link>
		<comments>http://rau1.com/blog/2007/12/05/skribit-de-que-quieres-que-hable#comments</comments>
		<pubDate>Wed, 05 Dec 2007 21:21:00 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[andrew-hyde]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[business-plan]]></category>
		<category><![CDATA[entrepreneur]]></category>
		<category><![CDATA[interaction]]></category>
		<category><![CDATA[skribit]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://rau1.com/blog/2007/12/05/skribit-de-que-quieres-que-hable</guid>
		<description><![CDATA[Skribit permite que bloggers y lectores interactúen. A través de un widget que se coloca en el blog, los lectores pueden hacer sugerencias sobre los temas que quieren que escriba en el blog. Las sugerencias se pueden hacer de una forma anónima, pero también es posible registrarse en el servicio y realizar las sugerencias como usuario. [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://skribit.com/">Skribit</a> permite que bloggers y lectores interactúen. A través de un widget que se coloca en el blog, los lectores pueden hacer sugerencias sobre los temas que quieren que escriba en el blog. Las sugerencias se pueden hacer de una forma anónima, pero también es posible registrarse en el servicio y realizar las sugerencias como usuario. Además el registro nos facilita funcionalidades extra como un histórico de las sugerencias que hemos hecho. A parte de poder realizar sugerencias, se pueden votar las sugerencias que el resto de lectores han hecho.</p>
<p>Skribit nació en el <a href="http://atlanta.startupweekend.com/">Startup Weekend de Atlanta</a>, <a href="http://twitter.com/Stammy/statuses/403077242">la idea ganadora fue una propuesta de Paul Stamatiou</a>. Skribit actualmente se encuentra en estado de beta privada, pero es posible hacer una petición para poder acceder a ella e incorporar el widget a tu blog.</p>
<p>Hoy mismo he recibido un correo de <a href="http://paulstamatiou.com/">Paul Stamatiou</a> en el que me indicaba que mi cuenta había sido activada. Ya he añadido el <strong>widget en el lateral</strong> del blog, así que desde este momento <strong>puedes hacer sugerencias sobre lo que te deseas que escriba</strong>.</p>
<p><strong>Extra ball</strong><br />
Un <a href="http://startupweekend.com/">Startup Weekend</a> consiste en reunir a un grupo de emprendedores (entre 40 y 50 normalmente) durante un fin de semana para intentar crear una compañía en torno a una idea/aplicación.</p>
<p>En el transcurso de unas 54 horas, y después de haber elegido la idea a desarrollar, se forman equipos que para desarrollar la aplicación, buscar un plan de negocio, etc. Después se reparte la empresa mediante participaciones. <em>Startup Weekend</em> es ya una marca registrada por <a href="http://andrewhyde.net/">Andrew Hyde</a>, por lo que los eventos organizados bajo esa marca tienen asociados unas restricciones sobre todo a la hora de repartir las participaciones de las acciones creadas.</p>
<p>En España durante el último fin de semana se desarrollo un evento basado en el concepto de Startup Weekend, pero bajo el nombre de <a href="http://iweekend.org/">iWeekend</a>, promovido por <a href="http://luvspain.wordpress.com">Luv Sayal</a>, <a href="http://raulandres.com">Raul Andrés</a>, <a href="http://davidrc.es">David Rodríguez</a>, <a href="http://blog.ojacq.com">Ollivier Jacq</a> y <a href="http://bermi.org">Bermi Ferrer</a>. Durante el primer iWeekend se desarrollo <a href="http://www.adlemons.com/">AdLemons</a>, sobre el que <a href="http://iweekend.org/blog/iweekend/reflexiones-y-conclusiones/">todavía poco se sabe</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=lsOJ8nSkuMA:A3BhjJxzFIs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=lsOJ8nSkuMA:A3BhjJxzFIs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=lsOJ8nSkuMA:A3BhjJxzFIs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2007/12/05/skribit-de-que-quieres-que-hable/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2007/12/05/skribit-de-que-quieres-que-hable</feedburner:origLink></item>
		<item>
		<title>Tengo Proyecto Fin de Carrera, necesito sugerencias.</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/sBAct8qwPho/tengo-proyecto-fin-de-carrera-necesito-sugerencias</link>
		<comments>http://rau1.com/blog/2007/11/28/tengo-proyecto-fin-de-carrera-necesito-sugerencias#comments</comments>
		<pubDate>Tue, 27 Nov 2007 23:07:36 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[apache-ant]]></category>
		<category><![CDATA[apache-log4j]]></category>
		<category><![CDATA[apache-tomcat]]></category>
		<category><![CDATA[google-docs]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[jstl]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[pfc]]></category>
		<category><![CDATA[skd]]></category>
		<category><![CDATA[spring-framework]]></category>
		<category><![CDATA[word-processor]]></category>
		<category><![CDATA[zoho-writer]]></category>

		<guid isPermaLink="false">http://rau1.com/blog/2007/11/28/tengo-proyecto-fin-de-carrera-necesito-sugerencias</guid>
		<description><![CDATA[Desde hace ya unas semanas tengo proyecto fin de carrera, su título: Herramienta colaborativa de tutorización de contenidos para la web de una asignatura. Aunque creo que no es el título definitivo, ya es lo suficientemente confuso. Estos días estoy empezando, ya en serio, con el Documento de Objetivos del Proyecto, en el que debo [...]]]></description>
				<content:encoded><![CDATA[<p>Desde hace ya unas semanas tengo proyecto fin de carrera, su título: <strong><em>Herramienta colaborativa de tutorización de contenidos para la web de una asignatura</em></strong>. Aunque creo que no es el título definitivo, ya es lo suficientemente <em>confuso</em>.</p>
<p>Estos días estoy empezando, ya en serio, con el Documento de Objetivos del Proyecto, en el que debo determinar, entre otras cosas, el objetivo, el alcance del proyecto y las tecnologías a usar.</p>
<p>La idea, o al menos así lo he interpretado yo hasta ahora, es facilitar una herramienta que conecte al <em>publisher</em> (<acronym title="also known as">a.k.a.</acronym> editor) de un documento web con los lectores del mismo. Permitiendo la interacción, de editores y lectores, mediante comentarios y preguntas que podrán ser formuladas sobre elementos concretos del documento.</p>
<p>Algunos <em>procesadores de texto online</em> como <a href="http://writer.zoho.com/">Zoho Writer</a> o <a href="http://docs.google.com/">Google Docs</a> ya facilitan la posibilidad de añadir comentarios y notas. Pero para ello es necesario tener permiso para editar el documento. Lo que se pretende es que el <em>publisher</em> sea el único que pueda modificar el documento, y los lectores puedan añadir comentarios y preguntas al documento una vez publicado. La <em>conversación</em>, generada a través de los comentarios, permitirá la corrección de posibles errores así como la posible incorporación de información recomendada por los lectores.</p>
<p>Como ejemplos, y omitiendo muchos detalles, podríamos tener:</p>
<ul>
<li>Una pregunta sobre las 5 últimas palabras de la segunda línea de séptimo párrafo del documento</li>
<li>Un comentario sobre la celda situada en la fila 3 y la columna 4 de la primera tabla del documento</li>
<li>Otro comentario sobre la cuarta imagen del documento</li>
<li>&#8230;</li>
</ul>
<p>Entre las tecnologías a usar, ahora mismo cuento con las siguientes:</p>
<ul>
<li><a href="http://java.sun.com/">Java</a> SKD 6 ó Java EE 5 <sup>*</sup></li>
<li><a href="http://tomcat.apache.org/">Apache Tomcat</a></li>
<li><a href="http://www.springframework.org/">Spring Framework</a></li>
<li><a href="http://java.sun.com/javase/technologies/database/">JDBC</a></li>
<li><a href="http://www.oracle.com/database/">Oracle</a> o <a href="http://dev.mysql.com/">MySQL</a> <sup>*</sup></li>
<li><a href="http://java.sun.com/products/jsp/">JSP</a>/<a href="http://java.sun.com/products/jsp/jstl/">JSTL</a></li>
<li><a href="http://ant.apache.org/">Apache Ant</a></li>
<li><a href="http://junit.sourceforge.net/">JUnit</a></li>
<li><a href="http://logging.apache.org/log4j/">Apache log4j</a></li>
<li><a href="http://www.hibernate.org/">Hibernate</a> <sup>**</sup></li>
</ul>
<p><small><br />
<sup>*</sup> Puede variar según requisitos.<br />
<sup>**</sup> Garantizar la persistencia, en un principio, puede resultar más costoso, en tiempo, con Hibernate que sin él.<br />
</small><br />
Algunas de ellas están impuestas, otras han sido elegidas por mi, aunque viéndose condicionadas por las imposiciones.</p>
<p>Contestando a <a href="http://rau1.com/blog/2007/09/20/se-busca-proyecto-fin-de-carrera">mis dudas iniciales sobre el proyecto</a>:</p>
<ul>
<li><em>Me ciño a la propuesta de un profesor? De una empresa? Propongo mi propio proyecto?</em> <strong>Propuesta de un profesor.</strong></li>
<li><em>Aplicación de escritorio? <acronym title="Rich Internet Application">RIA</acronym>?</em> <strong><acronym title="Rich Internet Application">RIA</acronym>!</strong></li>
<li><em>Java? Python? PHP?</em> <strong>Java :-(</strong></li>
<li><em>Oracle? [Postgre|My]SQL?</em> <strong>Pendiente de requisitos.</strong></li>
<li><em>Software libre? Código abierto? Software privativo?</em> <strong>Tengo que leerme la normativa de proyectos y ver que se puede hacer con este delicado tema. Aunque al menos la mayoría de las herramientas que use serán libres.</strong></li>
<li><em>Posible público potencial? Cubrir expediente?</em> <strong>Dependerá también de la normativa.</strong></li>
</ul>
<p>De momento sólo estoy planteando el objetivo principal. Si tienes dudas o sugerencias, te agradecería que las plantearas a través de los comentarios de esta entrada. Gracias :-).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=sBAct8qwPho:pdRQ3lgDLCg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=sBAct8qwPho:pdRQ3lgDLCg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=sBAct8qwPho:pdRQ3lgDLCg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2007/11/28/tengo-proyecto-fin-de-carrera-necesito-sugerencias/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2007/11/28/tengo-proyecto-fin-de-carrera-necesito-sugerencias</feedburner:origLink></item>
		<item>
		<title>Enhorabuena a 8000vueltas.com</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/PJ5DKgs2oAE/enhorabuena-a-8000vueltascom</link>
		<comments>http://rau1.com/blog/2007/11/24/enhorabuena-a-8000vueltascom#comments</comments>
		<pubDate>Sat, 24 Nov 2007 21:56:25 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[8000vueltas]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[car]]></category>
		<category><![CDATA[magazine]]></category>
		<category><![CDATA[prize]]></category>
		<category><![CDATA[spanish]]></category>

		<guid isPermaLink="false">http://rau1.com/blog/2007/11/24/enhorabuena-a-8000vueltascom</guid>
		<description><![CDATA[Enhorabuena y gracias a los delarosa, Juan GTi y JMJ (les pongo en ese orden por el número de artículos publicados, espero que no se me enfaden!), ellos son los que semanalmente trabajan en los artículos de 8000vueltas.com. Trabajo reconocido con la nota más alta en la comparativa de blogs del motor realizada en la revista [...]]]></description>
				<content:encoded><![CDATA[<p>Enhorabuena y gracias a los <a href="http://8000vueltas.com/author/delarosa/">delarosa</a>, <a href="http://8000vueltas.com/author/juangti/">Juan GTi</a> y <a href="http://8000vueltas.com/author/jmj/">JMJ</a> (les pongo en ese orden por el número de artículos publicados, espero que no se me enfaden!), ellos son los que semanalmente trabajan en los artículos de <a href="http://8000vueltas.com/">8000vueltas.com</a>. Trabajo reconocido con la nota más alta en la comparativa de blogs del motor realizada en la revista <a href="http://www.luike.com/revistas/GT/">Car&amp;Tecno</a> en su edición de diciembre.</p>
<p><img src="http://i0.rau1.com/2007/11/100_5178.JPG" alt="car" /></p>
<p>Lo que más me ha gustado es que en la revista indican lo que menos les gusta sobre cada blog, en el caso de 8000vueltas señalan: <em>Subjetividad pura y dura. Muchas veces no estarás de acuerdo</em>. Lo que hace que mi felicidad sea superior, porque si algo se pretende en todo momento, en 8000vueltas, es ser subjetivos, no cortarse y opinar. Todavía hay cosas que mejorar, pero este pequeño reconocimiento resulta motivador.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=PJ5DKgs2oAE:pQAkKFhc0QQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=PJ5DKgs2oAE:pQAkKFhc0QQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=PJ5DKgs2oAE:pQAkKFhc0QQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2007/11/24/enhorabuena-a-8000vueltascom/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2007/11/24/enhorabuena-a-8000vueltascom</feedburner:origLink></item>
		<item>
		<title>Monta el puzzle de Weebly y gana 2 cervezas</title>
		<link>http://feedproxy.google.com/~r/rau1/~3/LKiT4lBjut4/monta-el-puzzle-de-weebly-y-gana-2-cervezas</link>
		<comments>http://rau1.com/blog/2007/11/15/monta-el-puzzle-de-weebly-y-gana-2-cervezas#comments</comments>
		<pubDate>Wed, 14 Nov 2007 23:53:29 +0000</pubDate>
		<dc:creator>Raúl</dc:creator>
				<category><![CDATA[Difusión]]></category>
		<category><![CDATA[beer]]></category>
		<category><![CDATA[hacker-news]]></category>
		<category><![CDATA[hackers]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[paulgraham]]></category>
		<category><![CDATA[prize]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[weebly]]></category>
		<category><![CDATA[y-combinator]]></category>

		<guid isPermaLink="false">http://rau1.com/blog/2007/11/15/monta-el-puzzle-de-weebly-y-gana-2-cervezas</guid>
		<description><![CDATA[A diario intento sacar un rato para leer Hacker News antes conocida como Startup News, es una especie de menéame sobre hackers y startups que forma parte de Y Combinator, una incubadora de startups de la que, para no extenderme en exceso, debería hablar otro día. Hoy en Hacker News se apunta que una de [...]]]></description>
				<content:encoded><![CDATA[<p>A diario intento sacar un rato para leer <a href="http://news.ycombinator.com/">Hacker News</a> antes <a href="http://ycombinator.com/hackernews.html">conocida como Startup News</a>, es una especie de menéame sobre <a href="http://www.paulgraham.com/gh.html">hackers</a> y <a href="http://www.paulgraham.com/start.html">startups</a> que forma parte de <a href="http://ycombinator.com/">Y Combinator</a>, una <a href="http://es.wikipedia.org/wiki/Incubadora_de_empresas">incubadora de startups</a> de la que, para no extenderme en exceso, debería hablar otro día.</p>
<p><a href="http://news.ycombinator.com/item?id=79723">Hoy en Hacker News se apunta</a> que una de las empresas en las que Y Combinator invirtió este invierno: <a href="http://www.weebly.com/jobs.html">Weebly, está buscando un Front-end web developer</a>. Hasta aquí todo es normal en relación con lo que se suele publicar en Hacker News. Lo curioso es que en la oferta, además de los requisitos de siempre, se indica que en el código fuente de la página se encuentra incrustado un <em>puzzle</em>, el que junto a su <em>resume</em> envíe la respuesta del puzzle tendrá un <em>extra point</em> durante el proceso de selección, ya que habrá demostrado ciertos conocimientos básicos.</p>
<p>Quizás no estés interesado en optar a ese puesto de trabajo (o tal vez sí, quién sabe), pero seguro que estás deseando tomar dos buenas y frías cervezas. <strong>Dos cervezas que te pagaré si</strong> antes de las 23:59:59 GMT+1 del jueves 15 de noviembre de 2007 (hoy) <strong>dejas la respuesta al puzzle</strong>, y como has llegado hasta ella, <strong>en los comentarios</strong> de esta entrada.</p>
<p><strong>Todo lo que necesitas</strong> está en la <a href="http://www.weebly.com/jobs.html">página de la oferta de trabajo de Weebly</a>. Decir que no es muy complicado, hasta yo he conseguido dar con la respuesta. Pero era la única forma de justificar el beberme dos cervezas.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/rau1?a=LKiT4lBjut4:7fzjvyC0wEA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/rau1?i=LKiT4lBjut4:7fzjvyC0wEA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/rau1?a=LKiT4lBjut4:7fzjvyC0wEA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rau1?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://rau1.com/blog/2007/11/15/monta-el-puzzle-de-weebly-y-gana-2-cervezas/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://rau1.com/blog/2007/11/15/monta-el-puzzle-de-weebly-y-gana-2-cervezas</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.261 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-21 10:42:45 --><!-- Compression = gzip -->
