<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Raúl Expósito</title>
	<atom:link href="http://raulexposito.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://raulexposito.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 18 Jan 2012 07:46:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Coder facts!</title>
		<link>http://raulexposito.com/blog/2011/12/coderfacts/</link>
		<comments>http://raulexposito.com/blog/2011/12/coderfacts/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 04:00:54 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Briconsejos]]></category>
		<category><![CDATA[coderfacts]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[marrón]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=718</guid>
		<description><![CDATA[¡Me han publicado una imagen en coder facts!.




Si te encuentras ante esta duda tengo dos noticias para ti: una buena y otra mala. La mala es que seguramente te encuentres en la frase de abajo. La buena es que ha aparecido ante ti la oportunidad de poder aprender algo nuevo mientras descubres qué es lo [...]]]></description>
			<content:encoded><![CDATA[<p>¡Me <a href="http://coderfacts.com/post/13873007419/creo-que-todos-alguna-vez-hemos-tenido-una-duda-de">han publicado una imagen</a> en <a href="http://coderfacts.com/">coder facts!</a>.</p>
<p align="center">
<img src="http://25.media.tumblr.com/tumblr_lvhdv95Nq11qa8zylo1_400.jpg"/>
</p>
<p><br/></p>
<p>Si te encuentras ante esta duda tengo dos noticias para ti: una buena y otra mala. La mala es que seguramente te encuentres en la frase de abajo. La buena es que ha aparecido ante ti la oportunidad de poder aprender algo nuevo mientras descubres qué es lo que realmente tienes entre manos.</p>
<blockquote><p>La duda suele ser el principio de la sabiduría.<br />
<small>M. Scott Peck</small></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2011/12/coderfacts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La teoría de las ventanas rotas</title>
		<link>http://raulexposito.com/blog/2011/10/la-teoria-de-las-ventanas-rotas/</link>
		<comments>http://raulexposito.com/blog/2011/10/la-teoria-de-las-ventanas-rotas/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 17:27:16 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Briconsejos]]></category>
		<category><![CDATA[Mundo real]]></category>
		<category><![CDATA[efectividad]]></category>
		<category><![CDATA[hábitos]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[reflexiones]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=715</guid>
		<description><![CDATA[



Gracias al bueno de Carlos Badenes he redescubierto lo que se conoce como &#8220;la teoría de las ventanas rotas&#8221;.
Es el nombre de un efecto que ya conocía hacía tiempo sólo que aplicado a otras facetas de la vida, aunque gracias a la charla que tuve con Carlos he podido ver que tiene muchas aplicaciones en [...]]]></description>
			<content:encoded><![CDATA[<p align="center">
<img src="http://raulexposito.com/img/entradas/ventanasrotas/ventanas-rotas-edific.jpg"/>
</p>
<p><br/><br />
Gracias al bueno de <a href="http://es.linkedin.com/pub/carlos-badenes/1a/805/260" target="_blank">Carlos Badenes</a> he redescubierto lo que se conoce como <em>&#8220;la teoría de las ventanas rotas&#8221;</em>.</p>
<p>Es el nombre de un efecto que ya conocía hacía tiempo sólo que aplicado a otras facetas de la vida, aunque gracias a la charla que tuve con Carlos he podido ver que tiene muchas aplicaciones en el mundo de la programación y del desarrollo de proyectos. A continuación cito una entrada de <a href="http://blog.blat.es/post/2008/12/15/el-sindrome-las-ventanas-rotas" target="_blank">Fernando Blat</a> donde se explica este concepto con bastante claridad:</p>
<blockquote><p>A principios de la década de 1980, el politólogo James Q. Wilson se juntó un buen día, puede que incluso soleado, con el criminólogo George Kelling para formular una interesante teoría que justificaría la mismísima guerra preventiva: broken window theory. El principio es muy sencillo, se parte de un edificio en un lugar concreto que se encuentra vacío o sin mantenimiento. En un momento determinado, una ventana aparece rota. Si esta ventana no es reparada o sustituida por otra nueva, pronto aparecerá una segunda ventana rota. Algunas más en poco tiempo. Tras esto, la basura empezará a amontonarse en las puertas de la entrada y en otros lugares del exterior. Una sensación de inseguridad y de abandono que irá en aumento hasta que hacen acto de presencia los primeros merodeadores y vagamundos, incluso algún que otro delincuente de poca monta. Una degradación que terminará atrayendo un foco de delincuencia alrededor del lugar en el que se encuentra el edificio.</p>
<p>Todo se degrada por una ventana rota. Es decir, si se permite una mínima infracción, todo puede terminar degenerándose. Una premisa sencilla y directa que el célebre ex Alcalde de Nueva York puso en práctica. Giulani incluyó esta teoría en su programa electoral y la puso en práctica persiguiendo las transgresiones menores como los grafitos, pequeños hurtos, viajar sin pagar el billete, detener a la gente que se colaba en el metro… Especial relevancia tuvo el último caso. El Alcalde encargó a su jefe de policía, un tal Howard Safir, que detuviese a todas aquellas personas que se colasen en el metro, sobre todo aquellas que lo hicieran de una manera brusca (es decir, corriendo y saltando la valla). Los índices de delincuencia bajaron casi un 40%, dándose la circunstancia de que muchas de estas personas que se colaban en el metro habían cometido un delito antes.</p></blockquote>
<p>Llegados a este punto me gustaría que tú, estimado compañero de profesión, fueras sincero contigo mismo y, pensando en tu trabajo, te dieses 10 segundos para responder una difícil pregunta que te va a poner en un aprieto:<br />
<span id="more-715"></span><br/></p>
<h2>
<p align="center"><strong>¿Cuántas ventanas estás rompiendo?</strong></p>
</h2>
<p><br/><br />
Fíjate en que no estoy preguntando cuántas había rotas cuando llegaste, ni quién empezó a romperlas, ni tampoco quiero que encuentres el motivo que propició que las rompieras (plazos, cambios de última hora, presiones, etc). Tan sólo quiero que tomes consciencia de que, <strong>posiblemente, tú también estás rompiendo ventanas</strong> incrementando, por tanto, la tan temida y difícil de pagar <a href="http://es.wikipedia.org/wiki/Deuda_t%C3%A9cnica" target="_blank">deuda técnica</a>.</p>
<p>Piénsalo, medítalo y, cuando acabes, date otros 10 segundos para responder a esta otra dificil pregunta:<br />
<br/></p>
<h2>
<p align="center"><strong>¿Cuántas ventanas estás arreglando?</strong></p>
</h2>
<p><br/><br />
Porque es muy sencillo quejarse:<em> &#8220;el código no lo entiende nadie&#8221;</em>, <em>&#8220;la documentación no está actualizada&#8221;</em>, <em>&#8220;no hay tests&#8221;</em>, <em>&#8220;los tests no se ejecutan porque no funcionan&#8221;</em>, <em>&#8220;no tenemos claro qué tenemos que hacer&#8221;</em>,  <em>&#8220;el código no compila&#8221;</em>, etc. y más fácil todavía entrar en el círculo de la comodidad y limitarse a cumplir con el <em>&#8220;donde fueres, hicieres lo que vieres&#8221;</em>, rompiendo ventanas.</p>
<p>Pero alguien debe ponerle el cascabel al gato y encargarse de conseguir que el código se entienda, de actualizar la documentación, de hacer tests que funcionen, de preguntar qué hay que hacer, de asegurarse de que el código compile, etc. al menos en la parcela en la cual uno tenga influencia, ¿no te parece?.</p>
<p>No es necesario parar tu actividad diaria para arreglar todas las ventanas rotas que existan a la vez. Por ejemplo puedes ir, en paralelo, documentando aunque sea brevemente aquello que vayas implementando, o haciendo tests que funcionen. Puedes preguntar qué tareas son las que habrá que realizar a medio plazo para anticipar posibles problemas que puedan surgir, o puedes instalar un servidor de integración contínua en tu ordenador y enseñarle a tu equipo lo útil que es. Alguien que se comporta así se convierte en una persona <strong>proactiva</strong> y en alguien <strong>valioso</strong> para su entorno. <strong>Dame una buena razón por la cual ese alguien no puedas ser tú.</strong></p>
<p>Fijaros si encontrar ventanas rotas es importante que incluso hay metodologías, en concreto SCRUM, que le dedican una fase a su búsqueda y propuesta de soluciones y la llaman <a href="http://es.wikipedia.org/wiki/Scrum#Retrospectiva_del_Sprint_.28Sprint_Retrospective.29" target="_blank">retrospectiva</a>.</p>
<p>Ya sabes qué son y cómo identificarlas, así que no tienes excusas ni quejas posibles. La próxima vez que te encuentres frente a un proyecto con ventanas rotas sólo tienes dos opciones: puedes romper otra, haciendo que todo sea un poco peor, o puedes tratar de arreglar alguna, intentando que todo vaya un poco mejor. <strong>Tú decides.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2011/10/la-teoria-de-las-ventanas-rotas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Conoce la temperatura del sitio que quieras con Arduino y Pachube</title>
		<link>http://raulexposito.com/blog/2011/07/conoce-la-temperatura-del-sitio-que-quieras-con-arduino-y-pachube/</link>
		<comments>http://raulexposito.com/blog/2011/07/conoce-la-temperatura-del-sitio-que-quieras-con-arduino-y-pachube/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 16:16:33 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[electrónica]]></category>
		<category><![CDATA[m2m]]></category>
		<category><![CDATA[pachube]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[prototipos]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=713</guid>
		<description><![CDATA[Estoy seguro de que acierto si digo que, en algún momento de tu vida, te enseñaron un campo que te gustó pero en el que por una cosa u otra no pudiste profundizar. Algo que te llamó la atención, que te interesó, que te motivó, que te gustó aprender, pero que finalmente tuviste que dejar [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy seguro de que acierto si digo que, en algún momento de tu vida, te enseñaron un campo que te gustó pero en el que por una cosa u otra no pudiste profundizar. Algo que te llamó la atención, que te interesó, que te motivó, que te gustó aprender, pero que finalmente tuviste que dejar de lado para dedicar tu tiempo a otras cosas quizá menos estimulantes aunque más prioritarias.</p>
<p>A mí, en mi caso, me pasó con la electrónica. Me llamó la atención desde siempre, disfruté aprendiendo algo de ella y ahora, varios años después, me he animado a retomarla y a volver a disfrutar pelando cables y juntando unos componentes con otros para hacer cosas que se mueven, suenan, se encienden y funcionan en el mundo real. Paralelamente, aprender algo que habia olvidado me ha ayudado a tener una nueva perspectiva del conocimiento que ahora mismo tengo.</p>
<p>El caso es que estoy dando mis primeros pasos con Arduino montando algunas cosas sencillitas. Hay muchísima información acerca de Arduino en la red, os recomiendo que visiteis <a href="http://arduino.cc/" target="_blank">su web</a> y la entrada en la <a href="http://es.wikipedia.org/wiki/Arduino" target="_blank">wikipedia</a>. También hay un <a href="http://vimeo.com/18390711" target="_blank">documental en castellano sobre Arduino</a> que, aunque es un poco aburrido, dice algo con lo que yo también estoy de acuerdo: es una herramienta interesantísima para utilizar en los institutos ya que permite fomentar la imaginación de los adolescentes, independientemente de que éstos estudien letras o ciencias. Lo importante es utilizar la parte derecha del cerebro.</p>
<p>En esta entrada voy a explicar un pequeño montaje que hemos hecho entre Carlos Javier Prados, mi jefe, y yo, utilizando Arduino. Como ambos nos dedicamos al <a href="http://es.wikipedia.org/wiki/M2M" target="_blank">M2M</a>, y a los dos nos gusta programar, la electrónica y el cacharrear, no ha sido muy difícil que nos pusieramos de acuerdo para hacer un pequeño prototipo conjunto y que disfrutásemos a medida que éste iba progresando y tomaba forma. </p>
<p>El funcionamiento del prototipo es muy sencillo y nos permitirá poder ver desde nuestro teléfono la temperatura que hace en un lugar que queramos. La idea es que dejes un pequeño sistema funcionando, por ejemplo, en el salón de tu casa y, ya en el trabajo, en la calle, en el cine, o en cualquier sitio con conexión a internet puedas ver qué temperatura hace en ese momento en el salón.<br />
<br/></p>
<p align="center">
<img src="http://raulexposito.com/img/projects/arduinotemperatura/diagrama0.jpg"/>
</p>
<p>Los elementos que van a entrar en juego son tres:<br />
<span id="more-713"></span></p>
<ul>
<li>El primero de ellos es un pequeño circuito que va a medir la temperatura que hay en el ambiente. Esta temperatura le llegará en forma de voltaje a una placa Arduino, la cual programaremos para convertir ese voltaje en grados centígrados.</li>
<li>El segundo es un ordenador que reciba la información directamente desde la placa Arduino y la suba a internet.</li>
<li>El tercero es un dispositivo cualquiera con acceso a internet que nos permita conocer la temperatura medida en cualquier momento y en cualquier lugar.</li>
</ul>
<p>En cuanto a los componentes que vamos a necesitar para cada uno de los elementos, son los siguientes:</p>
<p><strong>1.</strong> Para poder medir la temperatura:</p>
<ul>
<li>Una placa Arduino. En este caso vamos a utilizar una placa Arduino UNO.</li>
<li>Una placa de experimentación.</li>
<li>Un sensor de temperatura.</li>
<li>Cables <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p><strong>2.</strong> Para poder enviarla:</p>
<ul>
<li>Un ordenador con un puerto USB y conexión a internet.</li>
<li>Una cuenta en <a href="http://pachube.com/" target="_blank">http://pachube.com/</a></li>
<li><a href="http://www.python.org/" target="_blank">Python</a> y <a href="http://pyserial.sourceforge.net/" target="_blank">pyserial</a> instalados.</li>
</ul>
<p><strong>3.</strong> Para poder leerla:</p>
<ul>
<li>Un dispositivo con conexión a internet y un navegador.</li>
</ul>
<p><br/></p>
<h1>1. Cómo medir la temperatura</h1>
<p><br/></p>
<p align="center">
<img src="http://raulexposito.com/img/projects/arduinotemperatura/diagrama1.jpg"/>
</p>
<p>Si sabes algo de electrónica verás que el circuito es muy sencillo: dos cables se encargan de alimentar una resistencia cuya impedancia varía en función de la temperatura y un tercer cable devuelve el voltaje que no se ha consumido en dicha resistencia. Dicha resistencia, por tanto, actúa como un sensor de temperatura.<br />
<br/></p>
<p align="center">
<img src="http://raulexposito.com/img/projects/arduinotemperatura/arduino_temperatura.png"/>
</p>
<p>Los cables encargados de la alimentación son el rojo y el negro y el que devuelve el voltaje en función a la temperatura es el amarillo. Fijaros en que el cable amarillo se conecta en la entrada analógica 0 de la placa Arduino.</p>
<p>Una vez lo tengamos montado programamos la placa Arduino para que, en función al voltaje recibido por la resistencia, esta haga una conversión y envíe la temperatura ambiente en grados centígrados a través del puerto USB con el que se conecta la placa Arduino con el ordenador. El lenguaje, aunque parezca C, es Processing.</p>
<p><br/></p>
<pre>
<span style="color: #CC6600;">int</span> PIN_SENSOR = 0;
<span style="color: #CC6600;">int</span> TIEMPO_ENTRE_MEDICIONES = 5 * 60 * 1000;  <span style="color: #7E7E7E;">// 5 minutos</span>
<span style="color: #CC6600;">float</span> MARGEN = .5;

<span style="color: #CC6600;">float</span> temperaturaAnterior = -100;

<span style="color: #7E7E7E;">//&nbsp;---------------------------------------------------</span>
<span style="color: #7E7E7E;">//&nbsp;procedimiento&nbsp;de&nbsp;iniciacion</span>
<span style="color: #7E7E7E;">//&nbsp;---------------------------------------------------</span>

<span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>()
{
&nbsp;&nbsp;<span style="color: #CC6600;"><b>Serial</b></span>.<span style="color: #CC6600;">begin</span>(9600);
}

<span style="color: #7E7E7E;">//&nbsp;---------------------------------------------------</span>
<span style="color: #7E7E7E;">//&nbsp;procedimiento&nbsp;que&nbsp;se&nbsp;ejecuta&nbsp;permanentemente</span>
<span style="color: #7E7E7E;">//&nbsp;---------------------------------------------------</span>

<span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>loop</b></span>()
{
&nbsp;&nbsp;<span style="color: #CC6600;">float</span> temperaturaActual = getTemperature(PIN_SENSOR);
&nbsp;&nbsp;<span style="color: #CC6600;">if</span> (isInRange(temperaturaActual)) {
&nbsp;&nbsp;&nbsp;&nbsp;temperaturaAnterior&nbsp;=&nbsp;temperaturaActual;
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #CC6600;"><b>Serial</b></span>.<span style="color: #CC6600;">println</span>(temperaturaActual);
&nbsp;&nbsp;}

&nbsp;&nbsp;<span style="color: #CC6600;">delay</span>(TIEMPO_ENTRE_MEDICIONES);
}

<span style="color: #7E7E7E;">/**</span>
<span style="color: #7E7E7E;">&nbsp;*&nbsp;Metodo&nbsp;que&nbsp;devuelve&nbsp;la&nbsp;temperatura&nbsp;que&nbsp;mide&nbsp;el&nbsp;sensor&nbsp;conectado&nbsp;al&nbsp;pin</span>
<span style="color: #7E7E7E;">&nbsp;*&nbsp;recibido&nbsp;por&nbsp;parametro</span>
<span style="color: #7E7E7E;">&nbsp;*/</span>
<span style="color: #CC6600;">float</span> getTemperature(<span style="color: #CC6600;">int</span> pin)
{
&nbsp;&nbsp;<span style="color: #7E7E7E;">// recupera el voltaje leido por el sensor de temperatura</span>
&nbsp;&nbsp;<span style="color: #7E7E7E;">// teniendo en cuenta que devuelve 10 mv por cada centesima de grado centigrado</span>
&nbsp;&nbsp;<span style="color: #7E7E7E;">// con un offset de 500 mV para poder medir temperaturas por debajo</span>
&nbsp;&nbsp;<span style="color: #7E7E7E;">// de cero grados</span>
&nbsp;&nbsp;<span style="color: #CC6600;">return</span> (getVoltage(pin) - .5) * 100;
}

<span style="color: #7E7E7E;">/**</span>
<span style="color: #7E7E7E;">&nbsp;*&nbsp;Metodo&nbsp;que&nbsp;devuelve&nbsp;el&nbsp;voltaje&nbsp;que&nbsp;mide&nbsp;el&nbsp;sensor&nbsp;conectado&nbsp;al&nbsp;pin</span>
<span style="color: #7E7E7E;">&nbsp;*&nbsp;recibido&nbsp;por&nbsp;parametro</span>
<span style="color: #7E7E7E;">&nbsp;*/</span>
<span style="color: #CC6600;">float</span> getVoltage(<span style="color: #CC6600;">int</span> pin)
{
&nbsp;&nbsp;<span style="color: #7E7E7E;">// el sensor devuelve como maximo 5 voltios</span>
&nbsp;&nbsp;<span style="color: #7E7E7E;">// y la pata de arduino tiene una resolucion de 0 a 1023</span>
&nbsp;&nbsp;<span style="color: #7E7E7E;">// de tal modo que 5 / 1024 = .004882814</span>
&nbsp;&nbsp;<span style="color: #CC6600;">return</span> (<span style="color: #CC6600;">analogRead</span>(pin) * .0048828125);
}

<span style="color: #7E7E7E;">/**</span>
<span style="color: #7E7E7E;">&nbsp;*&nbsp;Metodo&nbsp;que&nbsp;indica&nbsp;si&nbsp;la&nbsp;temperatura&nbsp;medida&nbsp;esta&nbsp;dentro&nbsp;de&nbsp;los&nbsp;margenes</span>
<span style="color: #7E7E7E;">&nbsp;*&nbsp;en&nbsp;los&nbsp;cuales&nbsp;consideramos&nbsp;que&nbsp;no&nbsp;es&nbsp;necesario&nbsp;actualizar&nbsp;la&nbsp;informacion</span>
<span style="color: #7E7E7E;">&nbsp;*/</span>
<span style="color: #CC6600;">boolean</span> isInRange (<span style="color: #CC6600;">float</span> temperatura)
{&nbsp;
&nbsp;&nbsp;<span style="color: #CC6600;">return</span> ((temperatura + MARGEN) &lt;= temperaturaAnterior ||&#160;(temperatura - MARGEN) &gt;= temperaturaAnterior);
}
</pre>
<p><br/></p>
<p>El código, como veis, está muy explicado. Lee la temperatura del sensor desde la entrada analógica 0 cada 5 minutos, y si ésta ha variado en más de medio grado por encima o por debajo la envía a través del cable USB.</p>
<p>Poder programar en la placa Arduino y poder hacer pruebas leyendo del puerto USB es muy sencillo gracias a Arduino IDE, por lo que no entraré en detalles.</p>
<p>El sensor que hemos utilizado es el TMP36GZ, de tal modo que el programa funciona bien con ese sensor pero, para otro sensor diferente, será necesario hacer un programa distinto.</p>
<p><br/></p>
<h1>2. Cómo enviar la temperatura</h1>
<p><br/></p>
<p align="center">
<img src="http://raulexposito.com/img/projects/arduinotemperatura/diagrama2.jpg"/>
</p>
<p>De momento tenemos un pequeño circuito que cada 5 minutos comprueba la temperatura y, si ésta ha cambiado en más de medio grado por encima o por debajo, nos la devuelve. Ahora debemos leer esa temperatura y publicarla en internet para poder verla cuando estemos en otro sitio.</p>
<p>Para publicarla barajamos varias opciones, como por ejemplo hacer una pequeña aplicación y dejarla en Google App Engine, pero no nos aportaba mucho y nos hacía trabajar más. Otra opción era crearle una cuenta de twitter al sensor y que fuese publicando la tempertura, lo cual aunque nos pareció gracioso no terminó de cuajar. Finalmente decidimos que la mejor opción era utilizar <a href="http://pachube.com/" target="_blank">pachube</a>, que es un servicio cuya función es precisamente la de poder enviar y recibir información leida desde sensores que tienen los propios usuarios, así que creamos una cuenta gratuita en pachube y le dimos uso.</p>
<p>Pero claro, la placa Arduino por sí sola no envia la información a pachube, simplemente la envía por el puerto USB. Es por ello que hicimos un pequeño script en Python que lee desde el puerto USB y, cuando hay una nueva lectura, genera un objeto JSON y lo envía a pachube:<br />
<br/></p>
<pre><font face="Lucida,Courier New"><font color="#008000">#!/usr/bin/env python</font>

<font color="#C00000">import</font> <font color="#000000">httplib</font>
<font color="#C00000">import</font> <font color="#000000">serial</font>
<font color="#C00000">from</font> <font color="#000000">string</font> <font color="#C00000">import</font> <font color="#000000">Template</font>

<font color="#000000">ser</font> <font color="#0000C0">=</font> <font color="#000000">serial</font><font color="#0000C0">.</font><font color="#000000">Serial</font><font color="#0000C0">(</font><font color="#004080">'/dev/tty.usbmodem1a21'</font><font color="#0000C0">,</font> <font color="#0080C0">9600</font><font color="#0000C0">)</font>

<font color="#C00000">while</font> <font color="#0080C0">1</font><font color="#0000C0">:</font>

<font color="#008000">#       LEEMOS LA TEMPERATURA ENVIADA POR ARDUINO</font>
<font color="#008000">#       le quitamos los dos ultimos caracteres</font>

        <font color="#000000">readedTemperature</font> <font color="#0000C0">=</font> <font color="#000000">ser</font><font color="#0000C0">.</font><font color="#000000">readline</font><font color="#0000C0">(</font><font color="#0000C0">)</font><font color="#0000C0">[</font><font color="#0000C0">:</font><font color="#0000C0">-</font><font color="#0080C0">2</font><font color="#0000C0">]</font>
        <font color="#C00000">print</font> <font color="#004080">"The new temperature is :"</font><font color="#0000C0">,</font> <font color="#000000">readedTemperature</font>

<font color="#008000">#       CREAMOS EL OBJETO JSON</font>
<font color="#008000">#       reemplazamos los valores en una plantilla</font>

        <font color="#000000">bodyTemplate</font> <font color="#0000C0">=</font> <font color="#004080">'''{
        "version":"1.0.0",
        "datastreams":[
                {"id":"0", "current_value":"$temperature"}
        ]
        }'''</font>
        <font color="#000000">template</font><font color="#0000C0">=</font> <font color="#000000">Template</font><font color="#0000C0">(</font><font color="#000000">bodyTemplate</font><font color="#0000C0">)</font>
        <font color="#000000">bodyContent</font> <font color="#0000C0">=</font> <font color="#000000">template</font><font color="#0000C0">.</font><font color="#000000">substitute</font><font color="#0000C0">(</font><font color="#000000">temperature</font><font color="#0000C0">=</font><font color="#000000">readedTemperature</font><font color="#0000C0">)</font>

<font color="#008000">#       LO ENVIAMOS A PACHUBE</font>
<font color="#008000">#       aqui es necesario poner la key del usuario que tengais en pachube</font>
<font color="#008000">#       y subir los datos a vuestro datastream</font>

        <font color="#000000">headers</font><font color="#0000C0">=</font><font color="#0000C0">{</font><font color="#004080">"X-PachubeApiKey"</font><font color="#0000C0">:</font><font color="#004080">"VUESTRA KEY DE PACHUBE"</font><font color="#0000C0">}</font>

        <font color="#000000">connection</font> <font color="#0000C0">=</font>  <font color="#000000">httplib</font><font color="#0000C0">.</font><font color="#000000">HTTPConnection</font><font color="#0000C0">(</font><font color="#004080">'api.pachube.com'</font><font color="#0000C0">)</font>
        <font color="#000000">connection</font><font color="#0000C0">.</font><font color="#000000">request</font><font color="#0000C0">(</font><font color="#004080">'PUT'</font><font color="#0000C0">,</font> <font color="#004080">'/v2/feeds/ID DATASTREAM'</font><font color="#0000C0">,</font> <font color="#000000">bodyContent</font><font color="#0000C0">,</font> <font color="#000000">headers</font><font color="#0000C0">)</font>
        <font color="#000000">response</font> <font color="#0000C0">=</font> <font color="#000000">connection</font><font color="#0000C0">.</font><font color="#000000">getresponse</font><font color="#0000C0">(</font><font color="#0000C0">)</font>
        <font color="#C00000">print</font> <font color="#000000">response</font><font color="#0000C0">.</font><font color="#000000">status</font><font color="#0000C0">,</font> <font color="#000000">response</font><font color="#0000C0">.</font><font color="#000000">reason</font><font color="#000000"></font></font></pre>
<p><br/><br />
Como veis, este código también está muy comentado. Tan sólo mencionar que pachube os crea una key y un datastream cuando os registrais y que debeis modificar este script en Python para rellenarlo con vuestros datos.<br />
<br/></p>
<h1>3. Cómo leer la temperatura</h1>
<p><br/></p>
<p align="center">
<img src="http://raulexposito.com/img/projects/arduinotemperatura/diagrama3.jpg"/>
</p>
<p>Bueno, dejamos el sistema funcionando y nos vamos. Cuando queramos saber qué temperatura hace en el lugar donde hayamos dejado el invento nos vamos a nuestra cuenta de pachube y lo consultamos. Veremos una gráfica como la siguiente:<br />
<br/></p>
<p align="center">
<img src="http://raulexposito.com/img/projects/arduinotemperatura/grafica.jpg"/>
</p>
<p><br/></p>
<h1>4. Conclusiones</h1>
<p>Pues como veis ha sido todo muy sencillo. La electrónica es muy simple y los dos programas hacen mucho con muy poco código. Lo bueno de utilizar estas herramientas para hacer estos prototipos es que se pueden hacer infinidad de cambios y, de este modo:</p>
<ul>
<li>enviar la temperatura, la humedad, la cantidad de luz y prácticamente cualquier magnitud física que se pueda medir.</li>
<li>crear un sistema de alarmas que avise cuando la temperatura sea mayor o menor a cierta medida.</li>
<li>que nos mandase correos electrónicos.</li>
<li>que dejase mensajes en nuestro muro de Facebook.</li>
<li>etc.</li>
</ul>
<p>Me gustaría terminar esta entrada con una cita que, aunque no se de quién es, me viene en este caso como anillo al dedo:</p>
<blockquote><p>&#8220;La diferencia entre los niños y los adultos está en el precio de sus juguetes.&#8221;
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2011/07/conoce-la-temperatura-del-sitio-que-quieras-con-arduino-y-pachube/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Endomondo. Libera tus endorfinas.</title>
		<link>http://raulexposito.com/blog/2011/04/endomondo-libera-tus-endorfinas/</link>
		<comments>http://raulexposito.com/blog/2011/04/endomondo-libera-tus-endorfinas/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 17:30:20 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Briconsejos]]></category>
		<category><![CDATA[Mundo real]]></category>
		<category><![CDATA[correr]]></category>
		<category><![CDATA[deporte]]></category>
		<category><![CDATA[endomondo]]></category>
		<category><![CDATA[endorfinas]]></category>
		<category><![CDATA[pandereta]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=711</guid>
		<description><![CDATA[Aquellos a los que nos gustan los deportes y la tecnología estamos de enhorabuena: por fin tenemos una red social útil, divertida y motivante, una red social que hará que se nos vayan esos momentos de pereza, de tedio y de aburrimiento, nos vistamos de corto y salgamos a gastar suela. Os presento a Endomondo.





La [...]]]></description>
			<content:encoded><![CDATA[<p>Aquellos a los que nos gustan los deportes y la tecnología estamos de enhorabuena: por fin tenemos una red social útil, divertida y motivante, una red social que hará que se nos vayan esos momentos de pereza, de tedio y de aburrimiento, nos vistamos de corto y salgamos a gastar suela. Os presento a <a href="http://www.endomondo.com/" target="_blank">Endomondo</a>.<br />
<br/></p>
<p align="center">
<img src="http://raulexposito.com/img/entradas/endomondo/endomondo.jpg"/>
</p>
<p><br/><br />
La idea tras <a href="http://www.endomondo.com/" target="_blank">Endomondo</a> es, simplemente, la de permitirte registrar el recorrido que haces cuando sales a correr, a montar en bici, o a realizar alguna otra actividad. Gracias a esos registros puedes ver desde su web o desde tu teléfono la distancia recorrida, el tiempo empleado, las calorías quemadas, etc. y ser consciente del estado de forma en el que te encuentras.</p>
<p>Registrar el recorrido es muy sencillo. Puedes hacerlo prácticamente con cualquier teléfono con GPS, ya que hay aplicaciones para iphone, android, nokia, blackberry, etc. Simplemente sales a hacer deporte con el teléfono y él se encarga de registrar el recorrido y, si tienes internet, de publicarlo en la web cuando terminas. Si no tienes GPS no importa, puedes trazar la ruta recorrida con Google Maps y cargarla en <a href="http://www.endomondo.com/" target="_blank">Endomondo</a>.<br />
<br/></p>
<p align="center">
<img src="http://raulexposito.com/img/entradas/endomondo/movil.jpg"/>
</p>
<p><br/><br />
Pero, ¿qué tiene <a href="http://www.endomondo.com/" target="_blank">Endomondo</a> de especial y en qué se diferencia de otras redes sociales?. En <a href="http://www.endomondo.com/" target="_blank">Endomondo</a> existen los que se conocen como <strong>desafíos</strong>, los cuales harán que te pongas las pilas. Por ejemplo, puedes crearte un desafio con algunos amigos para ver quién recorre más kilómetros en un mes, y te aseguro que todos los días entrarás a ver los progresos de los demás y no te importará estirar la carrera un poco más con tal de acortar distancias, aumentarlas, o ganar puestos en el ranking. Cada desafío tiene su propia zona de comentarios donde poder hablar de las carreras, hacer piques, etc. </p>
<p>Yo desde luego que os invito a que lo probeis. Te anima a hacer deporte, es divertido y, sobre todo, es estimulante. Tus endorfinas y tu salud lo agradecerán.</p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2011/04/endomondo-libera-tus-endorfinas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gracias a todos</title>
		<link>http://raulexposito.com/blog/2011/02/gracias-a-todos/</link>
		<comments>http://raulexposito.com/blog/2011/02/gracias-a-todos/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 07:26:08 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Mundo real]]></category>
		<category><![CDATA[amplía]]></category>
		<category><![CDATA[gracias]]></category>
		<category><![CDATA[pandereta]]></category>
		<category><![CDATA[trabajo]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=710</guid>
		<description><![CDATA[




Como algunos ya sabeis esta vez he cambiado de año y de trabajo a la vez. En los tiempos que corren, con la que está cayendo y viendo cómo está el panorama, quizá pudiera parecer temerario dejar un estable puesto de trabajo en una empresa que conoces bien por otro puesto en otra empresa a [...]]]></description>
			<content:encoded><![CDATA[<p><br/></p>
<p align="center">
<img src="http://raulexposito.com/img/entradas/graciasatodos/thanks.gif" alt="¡Gracias majos!"/>
</p>
<p><br/><br />
Como algunos ya sabeis esta vez he cambiado de año y de trabajo a la vez. En los tiempos que corren, con la que está cayendo y viendo cómo está el panorama, quizá pudiera parecer temerario dejar un estable puesto de trabajo en una empresa que conoces bien por otro puesto en otra empresa a priori desconocida, pero la cosa surgió así y ya entrado el año puedo, por suerte, decir que todo ha salido muy muy bien.</p>
<p>Me gustaría dedicaros esta entrada a todas aquellas personas que, de un modo u otro, me habeis ayudado en el cambio y que no compartís conmigo el día a día. He recibido unos gestos, mensajes, correos y llamadas en estos dias que le hacen pensar a uno que al menos profesionalmente le aprecian <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Una de las cosas que más me gustaron fueron las muestras de afecto que me dieron algunos compañeros cuando se enteraron de que dejaba la empresa. Todo sucedió muy rápidamente y muchos se enteraron prácticamente en mi último día, pero sé que los panderetas seguirán haciendo el gamba aunque recuerden con nostalgia al que liaba alguna cuando veia que algún despistado se dejaba su equipo sin bloquear. Gracias por seguir llamándome, escribiéndome y por querer mantener el contacto panders!.</p>
<p>Otras personas con las que de momento he perdido vinculo profesional estaban, como ha sido natural en mi caso, en clientes. Llena de orgullo y satisfacción que vean en <a href="http://es.linkedin.com/in/raulexposito" target="_blank">linkedin</a> que has dejado la empresa en la que trabajas y que te manden un correo diciendo que va a ser una pena no poder contratarte para que les eches una mano. También llena de orgullo y satisfacción que, tras los años, un antiguo jefe tuyo se acuerde de ti, te busque y te diga que está fuera de España y que en su empresa están contratando gente por si te interesase saberlo.</p>
<p>Y que conste que no ha sido el único. Otros amigos y conocidos, aunque estos ya sabian que buscaba un cambio, me dijeron que les diese mi CV para dejarlo en sus empresas y ver si podia trabajar con ellos. De hecho con una persona en concreto se barajó la posibilidad de que me incorporase en su empresa, alguien que me conocía en persona, que conocía esta página y las cosas que hago, y que no me pidió el CV siquiera. Los chicos de <a href="http://jobsket.com/" target="_blank">Jobsket</a> tambien aportaron su granito de arena, ya que gracias a ellos mi actual empresa y yo pudimos localizarnos.</p>
<p align="center">
<img src="http://raulexposito.com/img/entradas/graciasatodos/logoani.gif" alt="Amplía)))"/>
</p>
<p>Como no podía ser de otra manera me gustaría darle las gracias a <a href="http://www.amplia.es" target="_blank">Amplía</a>, la empresa en la que trabajo ahora, por haber apostado por mi y por haberme dado la oportunidad de incorporarme a su equipo. </p>
<p>En Amplia las cosas <em>realmente</em> son diferentes. Aquí los conceptos &#8220;subcontratación&#8221;, &#8220;servicios&#8221;, &#8220;ir a cliente&#8221;, &#8220;soporte&#8221;, etc. no existen. Aqui tenemos un producto llamado <a href="http://www.opengate.es/" target="_blank">opengate</a> y vivimos de hacerlo lo más flexible, lo más robusto y lo más usable posible para que grandes empresas lo elijan y lo compren. Punto. Usamos tecnologias y metodologias recientes siempre y cuando demuestren que nos son útiles tras haber hechos pruebas de concepto con ellas. No aprendemos a usar una tecnología mientras hacemos un producto entregable ni metemos <em>buzzwords</em> en todo lo que hacemos. </p>
<p>A los desarrolladores que esteis en el mundillo y que esteis leyendo esto, ¿de verdad no os parece una empresa atipica?</p>
<p>Por suerte o por desgracia he estado en muchos clientes, he conocido a mucha gente y he visto muchos equipos de trabajo, pero pocos, de verdad, con gente tan amable, tan dispuesta a ayudar y técnicamente tan capaces. Somos pocos, hacemos piña y eso se nota. Gracias por hacer mios vuestros problemas técnicos y vuestros los mios, habeis conseguido que me haya adaptado muy rápidamente a mi nuevo puesto, y es que es un lujo trabajar codo con codo con vosotros, en serio. Hacedme caso, sé lo que digo <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Aun a riesgo de repetirme y a modo de despedida, de nuevo, <strong>muchas gracias a todos</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2011/02/gracias-a-todos/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>¡Me han baneado!</title>
		<link>http://raulexposito.com/blog/2011/01/%c2%a1me-han-baneado/</link>
		<comments>http://raulexposito.com/blog/2011/01/%c2%a1me-han-baneado/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 21:17:21 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Mundo real]]></category>
		<category><![CDATA[BOFH]]></category>
		<category><![CDATA[pander]]></category>
		<category><![CDATA[paquirrín]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[sorpresa]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=709</guid>
		<description><![CDATA[




Así es amigos, me he podido enterar de que a los empleados de cierta empresa les aparece este simpático mensaje al tratar de acceder a esta humilde página pasando por el proxy corporativo. Bueno, en realidad no es exactamente este mensaje, he puesto a Paquirrin tapando el logotipo de dicha empresa porque encima no les [...]]]></description>
			<content:encoded><![CDATA[<p><br/></p>
<p align="center">
<img src="http://raulexposito.com/img/entradas/mehanbaneado/noooooooooooooo.jpg" alt="¡Me han baneado!"  width="488" height="361"/>
</p>
<p><br/><br />
Así es amigos, me he podido enterar de que a los empleados de cierta empresa les aparece este simpático mensaje al tratar de acceder a esta humilde página pasando por el proxy corporativo. Bueno, en realidad no es <em>exactamente</em> este mensaje, he puesto a Paquirrin tapando el logotipo de dicha empresa porque encima no les voy a hacer publicidad <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>No diré quién me ha mandado la captura no sea que el <a href="http://es.wikipedia.org/wiki/Bastard_Operator_from_Hell" target="_blank">BOFH</a> que administra el proxy le lie alguna a él también, aunque el caso es que categorizándome ha estado más o menos fino y se ve que conoce las mejores páginas de internet <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p>En cualquier caso todo esto me ha sorprendido mucho, ¡gracias por el pantallazo pander!</p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2011/01/%c2%a1me-han-baneado/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Principio FIRST</title>
		<link>http://raulexposito.com/blog/2010/12/principio-first/</link>
		<comments>http://raulexposito.com/blog/2010/12/principio-first/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 12:52:35 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Documentos]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[descargas]]></category>
		<category><![CDATA[documento]]></category>
		<category><![CDATA[first]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=707</guid>
		<description><![CDATA[




El otro día, mientras escuchaba el especial número 100 del podcast de Javahispano, oí de nuevo a Alfredo Casado hablar sobre testing, TDD, análisis estático del código, el plugin de Chuck Norris para Hudson, etc.
También habló del principio FIRST, que son 5 cualidades definidas por Robert C. Martin en su libro Clean Code que deben [...]]]></description>
			<content:encoded><![CDATA[<p><br/></p>
<p align="center">
<img src="http://raulexposito.com/img/documents/first.jpg" alt="Principio FIRST"  width="328" height="178"/>
</p>
<p><br/><br />
El otro día, mientras escuchaba el especial <a href="http://www.javahispano.org/contenidos/es/javahispano_podcast__100__especial_numero_100/">número 100</a> del podcast de Javahispano, oí de nuevo a <a href="http://weblogs.javahispano.org/artesanodeprimera/">Alfredo Casado</a> hablar sobre testing, TDD, análisis estático del código, el plugin de <a href="http://wiki.hudson-ci.org/display/HUDSON/ChuckNorris+Plugin">Chuck Norris para Hudson</a>, etc.</p>
<p>También habló del principio FIRST, que son 5 cualidades definidas por <a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin">Robert C. Martin</a> en su libro <a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean Code</a> que deben seguir los tests que creemos para probar nuestro software para ser buenos tests.</p>
<p>He escrito un pequeño PDF en el que explico, una por una y de manera general, las cinco cualidades del principio FIRST. Si estás familiarizado con conceptos como TDD, test unitarios o integración contínua verás que he relajado ciertos detalles. En cambio, si no conoces nada de todo esto, no te será difícil entender los conceptos. En cualquier caso, espero que estos principios te sirvan para hacer mejores tests.<br />
<br/><br />
<a href="http://raulexposito.com/documentos/PrincipioFIRST.pdf"><img src="http://raulexposito.com/img/pdf.png" style="vertical-align:middle" width="48" height="48">Principio FIRST</a><br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2010/12/principio-first/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>¡Por fin tengo página de inicio!</title>
		<link>http://raulexposito.com/blog/2010/11/%c2%a1por-fin-tengo-pagina-de-inicio/</link>
		<comments>http://raulexposito.com/blog/2010/11/%c2%a1por-fin-tengo-pagina-de-inicio/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 01:57:08 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Esta web]]></category>
		<category><![CDATA[inicio]]></category>
		<category><![CDATA[portada]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=706</guid>
		<description><![CDATA[




Pues así es amigos, ha pasado ya más de un año desde que creé esta web y, aunque he ido cambiando algunas cosas poco a poco y he ido consiguiendo que esto tenga algo más de cuerpo y contenido, todavía tenía clavada la espinita de no tener una página de inicio. 
Hasta ahora, lo que [...]]]></description>
			<content:encoded><![CDATA[<p><br/></p>
<p style="text-align:center">
<img src="http://raulexposito.com/img/entradas/homepage/noplacelike_mat.gif" >
</p>
<p><br/><br />
Pues así es amigos, ha pasado ya más de un año desde que creé esta web y, aunque he ido cambiando algunas cosas poco a poco y he ido consiguiendo que esto tenga algo más de cuerpo y contenido, todavía tenía clavada la espinita de no tener una página de inicio. </p>
<p>Hasta ahora, lo que venia ocurriendo era que al acceder a <a href="http://raulexposito.com/" target="_blank">http://raulexposito.com/</a> eras redirigido al blog. Una solución que en un primer momento era temporal pero que al final a poco que te despistas acaba siendo definitiva, real como la vida misma <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Debo confesar que este ha sido mi enésimo intento de tener una página de inicio. En este tiempo he creado varias, pero por un motivo u otro no me he encontrado cómodo con ellas, hasta que finalmente he dado <a href="http://raulexposito.com/" target="_blank">con ésta</a>. Crear algo a mano partiendo de un editor de textos en blanco es duro, pero te ayuda a cuestionarte lo que vas haciendo paso a paso y a conseguir lo que persigues.</p>
<p>Me gustaría agradecer a <a href="http://www.minimamente.com/" target="_blank">mínimamente</a> el haber puesto a disposición de todos el estupendo set de iconos <a href="http://www.minimamente.com/sabre-snow/" target="_blank">Sabre</a>, ya que sin ellos la página de inicio no habría quedado igual.</p>
<p>Y por mi parte nada más, espero que la página de inicio os guste ya que, queridos lectores y visitantes, la he hecho para vosotros.</p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2010/11/%c2%a1por-fin-tengo-pagina-de-inicio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arquitectura de meorganizo.es</title>
		<link>http://raulexposito.com/blog/2010/10/arquitectura-de-meorganizo-es/</link>
		<comments>http://raulexposito.com/blog/2010/10/arquitectura-de-meorganizo-es/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 23:25:56 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[gaelyk]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[meorganizo.es]]></category>
		<category><![CDATA[nube]]></category>
		<category><![CDATA[spi]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=704</guid>
		<description><![CDATA[Ha pasado algo de tiempo desde que el nuevo meorganizo.es salió a la luz y todavía ni he dicho con qué está hecho, ni he soltado ningún buzzword, ni he intentado fardar, ni nada. ¿Pero qué me está pasando?, ¿me estaré volviendo mayor?  
Quiero dedicar esta entrada a contaros por encima cómo y de [...]]]></description>
			<content:encoded><![CDATA[<p>Ha pasado algo de tiempo desde que el nuevo <a href="http://meorganizo.es/" target="_blank">meorganizo.es</a> salió a la luz y todavía ni he dicho con qué está hecho, ni he soltado ningún <em>buzzword</em>, ni he intentado fardar, ni nada. ¿Pero qué me está pasando?, ¿me estaré volviendo mayor? <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p>Quiero dedicar esta entrada a contaros por encima cómo y de qué manera está hecho el nuevo meorganizo, al que yo conozco como MO (pronunciado &#8216;eme-o&#8217;). Trataré de explicarlo de un modo sencillo, de tal modo que cualquiera que tenga algo de curiosidad pueda seguirlo. Los más técnicos seguramente estéis acostumbrados a lidiar y a pelearos con arquitecturas más complejas. Eso es precisamente lo que he tratado de <strong>reducir</strong> con MO: la <strong>complejidad</strong>. Todas las piezas son muy simples, se encargan de una tarea en concreto y encajan para hacer funcionar un producto en el que ni sobra ni falta nada.</p>
<p>También aprovecho para comentaros que he cambiado el aspecto de MO. Ahora es más bonito, como podréis ver en las capturas que mostraré más adelante.</p>
<p>Empecemos por lo más sencillo. MO es una aplicación web a la cual puedes acceder desde un navegador. Igual que pones la web de tu banco y entras puedes poner <a href="http://meorganizo.es/" target="_blank">meorganizo.es</a> y entrar, así de simple.</p>
<p>Y he aqui la primera diferencia. Cuando accedes a la web del banco llegas a los servidores del banco. Sin embargo, cuando accedes a MO llegas a los servidores de Google:</p>
<p style="text-align:center;">
<img src="http://raulexposito.com/img/entradas/arquitecturaMO/usuarios_servidor.png">
</p>
<p>En este dibujo podemos ver cómo nosotros, que somos los usuarios, podemos acceder a MO usando los navegadores que vemos a la izquierda: Mozilla Firefox, Google Chrome, Safari y el navegador de Android. Que esto sea así no es casualidad: son los navegadores que uso y es por ello que la aplicación funciona bajo estos navegadores.</p>
<p>En el lado de la derecha podemos ver qué hay en el lado del servidor. Bien, como he comentado anteriormente cuando usamos la aplicación estamos utilizando los servidores de Google, ya que esta empresa tiene una infraestructura conocida como <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a> en la cual podemos hacer funcionar nuestras aplicaciones.<br />
<span id="more-704"></span><br />
Y ahora bien, ¿qué es eso de <a href="http://gaelyk.appspot.com/" target="_blank">Gaelyk</a>?. Bueno, pues es la tecnología que he utilizado para programar la aplicación y es quien atiende nuestras peticiones: guarda tareas, las borra, crear usuarios, etc. utilizando la infraestructura de Google por debajo.</p>
<p>Para los usuarios de a pie, MO es una aplicación que funciona desde un navegador y usa los servidores de Google. Para los más técnicos, MO es una aplicación desarrollada en Groovy con Gaelyk que corre en GAE, y ya puestos a soltar buzzwords, la aplicación usa jquery para manipular el árbol dom y hacer SPI mediante ajax, usa css3 para los estilos, gaelyk como framework, app engine como hosting, recibe invocaciones rest, devuelve json como valores de retorno, etc. He de decir que muchas de estas cosas eran hasta cierto punto desconocidas para mí, <strong>nunca había trabajado profesionalmente con ellas</strong>. Sin embargo no pasa nada, con voluntad lo que se desconoce se aprende y se crean cosas con el conocimiento adquirido.<br />
<br/></p>
<h2>1 Qué hace nuestro navegador</h2>
<p><br/></p>
<h3>1.1 Aspecto</h3>
<p>Lo primero es decir que el aspecto de MO es así porque quiero poder usarlo desde un navegador normal (el de casa, el trabajo, etc) y desde el navegador de mi móvil (una HTC Magic con Android)</p>
<p style="text-align:center;">
<table style="margin:20px 0;">
<tr>
<td>
<p style="text-align:center">
<img src="http://raulexposito.com/img/entradas/arquitecturaMO/mo1.jpg" width="278" height="403"></p>
</td>
<td>
<p style="text-align:center">
<img src="http://raulexposito.com/img/entradas/arquitecturaMO/mo2.jpg" width="278" height="403"></p>
</td>
</tr>
<tr>
<td>
<p style="text-align:center">Pantalla principal</p>
</td>
<td>
<p style="text-align:center">Lista de &#8220;cosas para hoy&#8221;</p>
</td>
</tr>
</table>
<p>Aunque creo que el aspecto está bien, y más teniendo en cuenta que al empezar no tenía idea alguna de diseño, seguramente cualquier diseñador podría mejorarlo. Si crees que es tu caso, por favor, <a href="http://raulexposito.com/acercade/">contacta conmigo</a>.</p>
<p>Al utilizar la aplicación puede darnos la sensación de que ésta tiene 4 páginas:</p>
<ul>
<il>1- La de login</il><br />
<il>2- La principal</il><br />
<il>3- La del listado</il><br />
<il>4- La de edición</il>
</ul>
<p>Bueno, no os confundais: <strong>página como tal sólo hay una</strong>. El servidor sólo manda la página entera la primera vez que accedes, y luego el navegador va cambiando trozos a medida que le vas pidiendo que haga cosas y el servidor va respondiendo.</p>
<p>Los más técnicos conoceréis esto como Single Page Interface y lo consigo mediante jquery y ajax.<br />
<br/></p>
<h3>1.2 Peticiones</h3>
<p>Si habéis usado la aplicación habréis descubierto que es bastante rápida: las acciones se ejecutan de manera casi instantánea, aunque vuestra conexión sea muy lenta. Quieres ir al listado y llegas enseguida, quieres guardar y guardas enseguida, quieres borrar una tarea y la borras enseguida.</p>
<p>Esto es así porque tus peticiones son asíncronas. Es decir, tú le dices que haga algo, él lo hace directamente y tras ello invoca al servidor. Esto, sin embargo, no siempre es posible. Si guardas una tarea la acción es inmediata. En cambio si guardas una fecha es necesario pasar por el servidor ya que debe decirte si la fecha es una tarea de &#8220;cosas para hoy&#8221; o &#8220;próximamente&#8221;.</p>
<p>Por otro lado todo aquello que envia el servidor (las imágenes, la página, los estilos, el javascript, etc) se encuentra comprimido, de tal modo que sólo descargas <strong>lo mínimo posible</strong>.</p>
<p style="text-align:center;">
<table style="margin:20px 0;">
<tr>
<td>
<p style="text-align:center">
<img src="http://raulexposito.com/img/entradas/arquitecturaMO/mo3.jpg" width="278" height="403"></p>
</td>
<td>
<p style="text-align:center">
<img src="http://raulexposito.com/img/entradas/arquitecturaMO/mo4.jpg" width="278" height="403"></p>
</td>
</tr>
<tr>
<td>
<p style="text-align:center">Guardar tarea: instantáneo</p>
</td>
<td>
<p style="text-align:center">Guardar fecha: necesita hacer cálculos</p>
</td>
</tr>
</table>
<p>Para los más técnicos, esto lo he solucionado con ajax e implementando una caché en el navegador. El usuario siempre utiliza la caché, y al hacer acciones éstas le llegan al servidor mediante ajax de manera asíncrona. Hacer operaciones sobre fechas anula la caché.</p>
<p>Las invocaciones se realizan invocando distintas URL como si de invocaciones REST se tratara. Hay invocaciones que no devolverán ninguna respuesta, como por ejemplo borrar u ordenar una tarea, e invocaciones que sí devolverán respuesta, como por ejemplo si el usuario y la contraseña son correctos.<br />
<br/></p>
<h2>2 Qué hace el servidor</h2>
<p style="text-align:center;">
<img src="http://raulexposito.com/img/entradas/appengineandroid/google-app-engine-logo.png">
</p>
<p>El servidor desarrolla una función primordial en la aplicación, y es que atiende las peticiones de los clientes, devuelve la información que piden, almacena o modifica datos, los borra, comprueba que el usuario y contraseña son correctos, etc.</p>
<p>Como he comentado anteriormente, los servidores donde se encuentra MO son de Google y forman parte de lo que se conoce como <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a>. Había varias razones para utilizarlos:</p>
<ul>
<ol>1- Seguramente Google tenga la mejor infraestructura del mundo.</ol>
<ol>2- Queria probar el cloud computing. Teneis un tutorial que escribí acerca de ello <a href="http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=cloudcomputing">aquí</a> y, si quereis saber más, podeis escuchar <a href="http://javahispano.org/contenidos/es/javahispano_podcast__092__introduccion_a_google_app_engine/">este podcast</a>.</ol>
<ol>3- Ofrece espacio en disco, ancho de banda y CPU de manera <strong>gratuita</strong> para lo que yo necesitaba.</ol>
</ul>
<p>Y ya para los técnicos, el framework que he utilizado ha sido <a href="http://gaelyk.appspot.com/" target="_blank">Gaelyk</a> por dos motivos:</p>
<ul>
<ol>1- Es un framework con el que hacer aplicaciones para GAE es muy sencillo con algo de idea de Java y Groovy.</ol>
<ol>2- Quería aprender algo nuevo.</ol>
</ul>
<p>Pero no os creáis que con esto doy por finalizado el desarrollo de MO, que vienen más sorpresas en camino. <em>Stay tuned!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2010/10/arquitectura-de-meorganizo-es/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Liberada una nueva versión de meorganizo.es</title>
		<link>http://raulexposito.com/blog/2010/09/liberada-una-nueva-version-de-meorganizo-es/</link>
		<comments>http://raulexposito.com/blog/2010/09/liberada-una-nueva-version-de-meorganizo-es/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 21:41:24 +0000</pubDate>
		<dc:creator>Raúl Expósito</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[efectividad]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[meorganizo.es]]></category>
		<category><![CDATA[nube]]></category>
		<category><![CDATA[proyecto]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://raulexposito.com/blog/?p=701</guid>
		<description><![CDATA[




Tras muchas horas de esfuerzo, haber probado esto y lo otro, haber mirado aqui y alla, haber aprendido una cosa y otra. Tras haber desarrollado todo desde cero, haber metido bugs, haber resuelto bugs, haberme centrado en los detalles, haberme encontrado mil y un problemas y haber tratado una y mil veces de hacerlo todo [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center; margin: 40px 0;">
<a href="http://meorganizo.es/" target="_blank"><br />
<img src="http://raulexposito.com/img/projects/meorganizo/logo.png" width="276" height="77"><br />
</a>
</p>
<p>Tras muchas horas de esfuerzo, haber probado esto y lo otro, haber mirado aqui y alla, haber aprendido una cosa y otra. Tras haber desarrollado todo desde cero, haber metido bugs, haber resuelto bugs, haberme centrado en los detalles, haberme encontrado mil y un problemas y haber tratado una y mil veces de hacerlo todo más sencillo. Tras haber pasado muchas horas de sueño, haber llegado tarde algunas veces, haber estado distraido, haber escuchado un montón de música durante un montón de horas y, sobretodo, haber hecho lo que yo quería, finalmente,<strong> he terminado la nueva versión de meorganizo</strong>. Pulsa <a href="http://meorganizo.es/" target="_blank">aquí</a> para acceder.</p>
<p>Esta nueva versión <strong>sustituye</strong> a la anterior. No es una evolución, ya que <strong>lo he cambiado todo</strong>. El nuevo meorganizo es una aplicación nueva, más práctica, más intuitiva, más potente y, ahora si, accesible desde cualquier sitio. Es, sin duda,<strong> una aplicación mejor</strong>.</p>
<p>El objetivo de esta nueva versión ha sido triple:</p>
<ul>
<li>Por un lado <strong>poder usar meorganizo desde un teléfono</strong>. El funcionamiento de la versión anterior limitaba lo que el usuario podia hacer desde cualquier dispositivo táctil.</li>
<li>Por otro lado, el hosting donde se albergaba la aplicación tenía muchos problemas. Habeis sido muchos los que me habeis avisado de que al acceder recibíais un error. A veces aparecia y a veces no, pero en cualquier caso la mala imagen se la llevaba la aplicación y, por tanto, yo.</li>
<li>Finalmente, usando la aplicación me di cuenta de que habia cosas que echaba en falta y otras que no utilizaba. También pude comprobar que en algunos aspectos era bastante lenta.</li>
</ul>
<p>Es por ello que he creado una nueva versión que:</p>
<ul>
<li>Se puede usar en un teléfono y en un navegador de un ordenador convencional.</li>
<li>Está funcionando en la que es, sin duda, la mejor infraestructura del mundo.</li>
<li>Posee una interfaz mejorada y rápida donde ni falta ni sobra nada.</li>
</ul>
<p style="text-align:center;">
<table style="margin:20px 0;">
<tr>
<td><a href="http://meorganizo.es/" target="_blank"></p>
<p style="text-align:center">
<img src="http://raulexposito.com/img/projects/meorganizo/login.jpg" width="268" height="388"></p>
<p></a></td>
<td><a href="http://meorganizo.es/" target="_blank"></p>
<p style="text-align:center">
<img src="http://raulexposito.com/img/projects/meorganizo/main.jpg" width="268" height="388"></p>
<p></a></td>
</tr>
<tr>
<td><a href="http://meorganizo.es/" target="_blank"></p>
<p style="text-align:center">
<img src="http://raulexposito.com/img/projects/meorganizo/today.jpg" width="268" height="388"></p>
<p></a></td>
<td><a href="http://meorganizo.es/" target="_blank"></p>
<p style="text-align:center">
<img src="http://raulexposito.com/img/projects/meorganizo/newdate.jpg" width="268" height="388"></p>
<p></a></td>
</tr>
</table>
<p>No os voy a engañar, estoy muy contento con lo que he conseguido con esta aplicación. Sin duda se puede ir más allá con ella, e incluso tengo ideas que desarrollaré cuando disponga de tiempo para ello.</p>
<p>También estoy seguro de que alguno se encontrará con problemas al usar la aplicación en su navegador o en su teléfono. He desarrollado y probado la aplicación con firefox, chrome, safari y el navegador de android 1.6. Si tienes problemas con otro entorno, por favor, házmelo saber. Si la aplicación no funciona con tu ipad o con tu iphone puedes <strong>regalarme uno</strong> para que haga pruebas, <strong>prometo solucionarlo si lo haces</strong> <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Sin embargo esto no queda aquí. He hecho un esfuerzo por alcanzar este hito en meorganizo pero el empuje me va a llevar a sacar en breve más cosas. Tan solo tened un poco de paciencia y estad atentos a este blog <img src='http://raulexposito.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Y si teneis alguna idea o creeis que se puede mejorar de alguna manera, por favor, hacedmelo saber:</p>
<p style="text-align:center">
raul [arroba] raulexposito [punto] com</p>
]]></content:encoded>
			<wfw:commentRss>http://raulexposito.com/blog/2010/09/liberada-una-nueva-version-de-meorganizo-es/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

