<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>El blog de Sensotron</title>
	<atom:link href="http://sensotron.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sensotron.wordpress.com</link>
	<description>Tecnología y otros asuntos</description>
	<lastBuildDate>Thu, 28 Jan 2010 09:57:42 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sensotron.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>El blog de Sensotron</title>
		<link>http://sensotron.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sensotron.wordpress.com/osd.xml" title="El blog de Sensotron" />
	<atom:link rel='hub' href='http://sensotron.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Prueba player</title>
		<link>http://sensotron.wordpress.com/2010/01/28/prueba-player/</link>
		<comments>http://sensotron.wordpress.com/2010/01/28/prueba-player/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 09:57:42 +0000</pubDate>
		<dc:creator>Sensotron</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://sensotron.wordpress.com/2010/01/28/prueba-player/</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=23&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=23&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sensotron.wordpress.com/2010/01/28/prueba-player/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22c8f5fd80e7226971f0477c4bbd82a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sensotron</media:title>
		</media:content>
	</item>
		<item>
		<title>Ahora en Rockola.fm están escuchando</title>
		<link>http://sensotron.wordpress.com/2009/05/14/ahora-en-rockola-fm-estan-escuchando/</link>
		<comments>http://sensotron.wordpress.com/2009/05/14/ahora-en-rockola-fm-estan-escuchando/#comments</comments>
		<pubDate>Thu, 14 May 2009 15:58:50 +0000</pubDate>
		<dc:creator>Sensotron</dc:creator>
				<category><![CDATA[Rockola.fm]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://sensotron.wordpress.com/?p=17</guid>
		<description><![CDATA[Algunas veces los que codificamos olvidamos que nuestros programas tendrán que ejecutarse tarde o temprano sobre máquinas reales (o virtuales). Al margen de los tradicionales roces entre la gente de desarrollo y “los de sistemas”, se trata de un punto de riesgo que puede acentuarse en un entrono de desarrollo ágil. Rockola.fm tiene un claro [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=17&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Algunas veces los que codificamos olvidamos que nuestros programas tendrán que ejecutarse tarde o temprano sobre máquinas reales (o virtuales). Al margen de los tradicionales roces entre la gente de desarrollo y “los de sistemas”, se trata de un punto de riesgo que puede acentuarse en un entrono de desarrollo ágil.</p>
<p>Rockola.fm tiene un claro ejemplo de este conflicto en la implementación de la funcionalidad “Ahora en Rockola.fm están escuchando”. Se trata de una lista que aparece al final de nuestra <em>home</em> mostrando qué escuchan los seis últimos usuarios con actividad. Esta información se refresca cada cinco minutos.</p>
<p>Siguiendo el lema “<a href="http://es.wikipedia.org/wiki/Principio_KISS">mantenlo simple</a>”, la primera implementación se limitaba a realizar una consulta sobre la BBDD cada vez que vencía un temporizador <em>JavaScript</em>. Asombrados por la rapidez del desarrollo (como media jornada) la nueva funcionalidad subió a producción en el siguiente pase. En esa época descorchábamos botellas de cava cada vez que superábamos los cien usuarios concurrentes. Nuestras infraestructuras estaban en consonancia con esa audiencia (una máquina para todo) y el riesgo de tener problemas de rendimiento era muy pequeño.</p>
<p>Sin embargo, con 1.000 usuarios concurrentes, esta petición se realiza casi dos veces por segundo que no te tira el servidor pero te lo ocupa de forma absurda.</p>
<p>Conscientes de que la BBDD sería uno de nuestros cuellos de botella (con  “los de sistemas” identificando entradas sospechosas en el <a href="http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html">mysql-slow.log</a>), afrontamos nuestra segunda refactorización incluyendo una gestión de <a href="http://es.wikipedia.org/wiki/Cach%C3%A9">cacheo</a> de contenidos. El resultado fue espectacular hasta el punto que en algunos momentos las graficas para los servidores de BBDD (dos en balanceo por entonces) daban “respuesta plana”.</p>
<p>La gestión de cache complica el desarrollo pero la codificamos una sola vez en las clases base de nuestro patrón MVC. Para usarla basta implementar dos funciones virtuales que informan sobre la localización física de fichero y la duración del mismo. El cambio se limito a copiar el antiguo código sobre las nuevas clases y definir cinco minutos como duración del caché.</p>
<p>Sin embargo, con unos 5.000 usuarios concurrentes, el vencimiento de la caché ocurre símultáneamente para entre 20 y 50 usuarios que lanzaban a la vez una consulta bastante pesada generando picos innecesarios en la BBDD.</p>
<p>En esta ocasión, resolvimos el problema añadiendo un valor aleatorio al tiempo de vencimiento de la cache de modo que la función virtual para gestionar esto devolvía algo así como 300+rnd(50). De esta forma, limitamos las peticiones de refresco de caché entre 1 y 5 simultaneas. Una idea tonta pero efectiva y que seguro que empieza a dar problemas con 10,000 usuarios simultáneos.</p>
<p>Actualmente el “Ahora en Rockola.fm están escuchando” se genera mediante un proceso planificado lanzado cada cinco minutos. Muchas vueltas para llegar a la solución mejor y también la más sencilla.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sensotron.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sensotron.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sensotron.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sensotron.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sensotron.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sensotron.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sensotron.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sensotron.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sensotron.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sensotron.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sensotron.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sensotron.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sensotron.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sensotron.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=17&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sensotron.wordpress.com/2009/05/14/ahora-en-rockola-fm-estan-escuchando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22c8f5fd80e7226971f0477c4bbd82a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sensotron</media:title>
		</media:content>
	</item>
		<item>
		<title>Desarrollo especulativo</title>
		<link>http://sensotron.wordpress.com/2009/04/08/desarrollo-especulativo/</link>
		<comments>http://sensotron.wordpress.com/2009/04/08/desarrollo-especulativo/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 15:51:50 +0000</pubDate>
		<dc:creator>Sensotron</dc:creator>
				<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://sensotron.wordpress.com/?p=5</guid>
		<description><![CDATA[Alex me envió hace tres o cuatro meses un comentario sobre “desarrollo especulativo” y desde entonces ando dándole vueltas al asunto. El fenómeno aparece cuando un programador se dice a si mismo: “Estoy seguro de que más tarde voy a necesitar funcionalidad adicional, me adelantaré y la escribiré ahora”. Algunos llegan al extremo de considerarlo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=5&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Alex me envió hace tres o cuatro meses un comentario sobre “desarrollo especulativo” y desde entonces ando dándole vueltas al asunto. El fenómeno aparece cuando un programador se dice a si mismo: “Estoy seguro de que más tarde voy a necesitar funcionalidad adicional, me adelantaré y la escribiré ahora”. Algunos llegan al extremo de considerarlo como una lacra a erradicar dentro del movimiento de las metodologías “ágiles”. Visto así, diría que se trata de un asunto que al menos debe tenerse en cuenta.</p>
<p>He repartido por algunos proyectos código monstruosamente complejo para una solución general que nunca llegará más allá de resolver un simple caso particular. Muchas horas perdidas y quien lo mantenga sufrirá para entenderlo.</p>
<p>También soy un convencido de las metodologías ágiles porque las he probado y realmente funcionan. Presentan resultados rápidos con un nivel de tensión razonable en el equipo y sin exigir heroicidades.</p>
<p>Son dos razones que me obligan a darle una vuelta al tema del desarrollo especulativo o al menos buscar donde está el límite.</p>
<p>Aunque un proyecto es irrepetible y comienza con una gran indefinición, hay que disponer de las herramientas mínimas para afrontarlo y que son necesariamente especulativas. Estas herramientas definen modos generales de hacer las cosas como <a href="http://es.wikipedia.org/wiki/Proceso_Unificado">USDP</a> y algunas veces afectan directamente al código como el <a href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador">MVC</a>. Ambos ejemplos están en la parte superior de mi pirámide de proyecto cuya base ocupan los desarrollos específicos:</span></p>
<p style="text-align:center;">
<div id="attachment_6" class="wp-caption aligncenter" style="width: 367px"><img class="size-full wp-image-6" title="piramide_proyecto" src="http://sensotron.files.wordpress.com/2009/04/piramide_proyecto.png?w=357&#038;h=216" alt="Porámide de proyecto" width="357" height="216" /><p class="wp-caption-text">Arriba lo especulativo, abajo la cruda realidad del código</p></div>
<p class="MsoNormal"><span lang="ES">La metodología general de gestión del proyecto y la arquitectura de desarrollo puede ser definida por el equipo técnico pero no debería ser puesta en cuestión durante la codificación pura. Un poco más abajo, parece razonable que decisiones como usar <a href="http://es.wikipedia.org/wiki/Prototype">Prototype</a>, <a href="http://es.wikipedia.org/wiki/Mootools">Mootools</a> o <a href="http://es.wikipedia.org/wiki/Jquery">jQuery</a> para framework de JavaScript no dependa de cada programador sino que sea consenso de todos. </span></p>
<p class="MsoNormal"><span lang="ES"> </span></p>
<p class="MsoNormal"><span lang="ES">Los beneficios derivados de la homogeneidad y capacidad de reutilización diría que están fuera de toda duda. La definición de soluciones generales y librerías reutlizables son críticas para facilitar futuros desarrollos y hacer el código mantenible. La dificultad está en saber cuando tomar la decisión de abordar una solución general (y por lo tanto especulativa) o limitarse a cubrir los requerimientos funcionales de la forma más ajustada y <a href="http://es.wikipedia.org/wiki/Principio_KISS">simple</a>. </span></p>
<p class="MsoNormal"><span lang="ES"> </span></p>
<p class="MsoNormal"><span lang="ES">La solución está en tomarse muy en serio la palabra <a href="http://es.wikipedia.org/wiki/Refactorizar">refactorización</a> y asumir todo lo que conlleva. Entender que no sólo significa estar dispuesto a modificar tu código para mejorarlo en aspectos como el rendimiento sino como una forma de extraer soluciones genéricas en base a sistemas que están funcionando.</span></p>
<p class="MsoNormal"><span lang="ES"> </span></p>
<p class="MsoNormal"><span lang="ES">Basta con la experiencia de un par de proyectos para comprender que gran parte del conocimiento necesario se adquiere durante el propio desarrollo y que, al final, siempre le queda a uno la sensación de que si pudiera empezar de nuevo lo haría mucho mejor. Esa <span> </span>segunda oportunidad la ofrece cada refactorización y la programación no especulativa acelera los resultados de forma espectacular. </span></p>
<p class="MsoNormal"><span lang="ES"> </span></p>
<p class="MsoNormal"><span lang="ES">Es importante recordar que lo construido funciona y que su refactorización no es obligatoria para el siguiente ciclo. De hecho, en Rockola.fm vamos por nuestra tercera refactorización y parte del código sigue en la primera versión. Probablemente ese código, que funciona perfectamente, siga así hasta el próximo ciclo.</span></p>
<p class="MsoNormal"><span lang="ES"><br />
</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sensotron.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sensotron.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sensotron.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sensotron.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sensotron.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sensotron.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sensotron.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sensotron.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sensotron.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sensotron.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sensotron.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sensotron.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sensotron.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sensotron.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=5&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sensotron.wordpress.com/2009/04/08/desarrollo-especulativo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22c8f5fd80e7226971f0477c4bbd82a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sensotron</media:title>
		</media:content>

		<media:content url="http://sensotron.files.wordpress.com/2009/04/piramide_proyecto.png" medium="image">
			<media:title type="html">piramide_proyecto</media:title>
		</media:content>
	</item>
		<item>
		<title>La aventura continúa</title>
		<link>http://sensotron.wordpress.com/2008/12/21/la-aventura-continua/</link>
		<comments>http://sensotron.wordpress.com/2008/12/21/la-aventura-continua/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 12:40:33 +0000</pubDate>
		<dc:creator>Sensotron</dc:creator>
				<category><![CDATA[Andi]]></category>
		<category><![CDATA[Pensamiento]]></category>
		<category><![CDATA[Rockola.fm]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://sensotron.wordpress.com/?p=3</guid>
		<description><![CDATA[El blog de Rockola.fm ha sido mi primera experiecia en estos asuntos. Esta siendo bastante entretenido pero por tratarse de un blog &#8220;corporativo&#8221; uno no se siente todo lo libre que quisiera a la hora de usarlo. Por ejemplo, creo que el blog de Rockola.fm no es lugar para: Escribir un artículo tostonazo sobre metodología [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=3&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>El blog de Rockola.fm ha sido mi primera experiecia en estos asuntos. Esta siendo bastante entretenido pero por tratarse de un blog &#8220;corporativo&#8221; uno no se siente todo lo libre que quisiera a la hora de usarlo.</p>
<p>Por ejemplo, creo que el blog de Rockola.fm no es lugar para:</p>
<ul>
<li>Escribir un artículo tostonazo sobre metodología de gestión de proyectos ya que, probablemente, sólo interesará al 1% de los lectores.</li>
<li>Incluir fotos de mi perro y sus aventuras que sólo van dirigidas a mi familia y amigos</li>
<li>Cualquier otra cosa politicamente incorrecta no relacionada, aunque puede que si, con música o tecnología</li>
</ul>
<p>Si escribo algo aquí que crea merece estar en Rockola.fm lo copiaré allí también.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sensotron.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sensotron.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sensotron.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sensotron.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sensotron.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sensotron.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sensotron.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sensotron.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sensotron.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sensotron.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sensotron.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sensotron.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sensotron.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sensotron.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sensotron.wordpress.com&amp;blog=5919973&amp;post=3&amp;subd=sensotron&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sensotron.wordpress.com/2008/12/21/la-aventura-continua/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22c8f5fd80e7226971f0477c4bbd82a4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sensotron</media:title>
		</media:content>
	</item>
	</channel>
</rss>
