<?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>RoblesHermoso - TechnoBot</title>
	<atom:link href="http://robleshermoso.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://robleshermoso.wordpress.com</link>
	<description>Tecnologia, Programación, Filosofia y bichos!</description>
	<lastBuildDate>Thu, 29 Dec 2011 16:21:17 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='robleshermoso.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>RoblesHermoso - TechnoBot</title>
		<link>http://robleshermoso.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://robleshermoso.wordpress.com/osd.xml" title="RoblesHermoso - TechnoBot" />
	<atom:link rel='hub' href='http://robleshermoso.wordpress.com/?pushpress=hub'/>
		<item>
		<title>[Tip] Montar partición que está dentro de un dump de disco</title>
		<link>http://robleshermoso.wordpress.com/2011/09/01/montar-particion-dump-disco/</link>
		<comments>http://robleshermoso.wordpress.com/2011/09/01/montar-particion-dump-disco/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 16:54:53 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[disk]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[loopback]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[scandrive]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1685</guid>
		<description><![CDATA[En el desarrollo de sw/fw embebido, es habitual hacer un diskdump del contenido de la memoria flash o disco duro una vez está listo para salir. Con esta imagen hecha, es sencillo replicar dicha configuración software para producción de más equipos. Puede ocurrir que sea necesario acceder a dichos ficheros para consulta, generación de una [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1685&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En el desarrollo de sw/fw embebido, es habitual hacer un <em><a href="http://en.wikipedia.org/wiki/Dd_(Unix)">diskdump</a></em> del contenido de la memoria <em>flash</em> o disco duro una vez está listo para salir.</p>
<p>Con esta imagen hecha, es sencillo replicar dicha configuración software para producción de más equipos.</p>
<p>Puede ocurrir que sea necesario acceder a dichos ficheros para consulta, generación de una nueva versión, etc.</p>
<p>Con software para equipos embebidos suele resultar difícil o imposible acceder al <em>rootfs</em> desde el propio sistema.</p>
<p>Voy a explicar un procedimiento que uso para poder montar dichas particiones desde cualquier equipo con GNU/Linux a partir del &#8220;<em>dumpeo</em>&#8221; de disco creado mediante DD.<br />
Básicamente lo que vamos a hacer es localizar donde es probable que empiece nuestra partición y luego crear un dispositivo <em><a href="http://infolinux.bitacoras.com/archivos/2006/02/17/creando-un-dispositivo-de-loopback">loopback</a></em> aplicando un <em>offset</em> donde posiblemente empiece dicha partición.</p>
<p>Para localizar la partición haremos uso de la utilidad <strong><a href="http://www.unixwiz.net/techtips/scandrive.cpp">scandrive</a></strong> de <strong>Stephen J. Frield</strong>. Esta utilidad busca la palabra mágica que representa un <em>header</em> de ext2 (<strong>0xEF53</strong>). Además, y esto es casi lo más importante, localiza un potencial inodo-root (vamos, el directorio raiz). Esto sirve para intentar idefintificar correctamente donde comienza nuestra partición. <strong>¿Cómo?</strong> Miramos el <em>offset</em> donde se encuentra el <em>header</em> de ext2 justo anterior a la localización del directorio raiz (depende del tamaño del disco, es posible que nos encontremos con muchos &#8220;falsos positivos&#8221;).</p>
<p>He modificado la utilidad <strong>scandrive</strong>, para que nos de el posible <strong>offset</strong> real para hacer el montaje correcto. Dicha posición se calcula restando al <em>offset</em> donde se encuentra el <em>header</em> de partición, los 1024 bytes de <em>offset</em> donde se encuentra el superbloque.</p>
<p>Este seria el procedimiento:</p>
<div>1º) Ejecutar</div>
<div>           <code> % scandrive /v &lt;dumpfile&gt;</code></div>
<div>  Os saldrá algo parecido a esto:</div>
<div style="text-align:left;"><code><br />
scandrive 1.01 - 2009-11-08 - http://unixwiz.net/tools/<br />
I/O buffer: 256 sectors of 512 bytes<br />
Device disk_dump_final is open<br />
Loop 0: scanning sector 0...<br />
Found ptable magic at sector 0<br />
Found ptable magic at sector 63<br />
Found ptable magic at sector 78372<br />
Found ptable magic at sector 85352<br />
Found ptable magic at sector 90764<br />
Found ptable magic at sector 94740<br />
Found ptable magic at sector 96924<br />
Found ext2 magic at offset 50359296 (part in: 50358272, size 669973493)<br />
Loop 806: scanning sector 206336...<br />
<strong><span style="color:#ff0000;">Found ext2 magic at offset 131089408 (part in: 131088384, size 179172)     </span></strong><br />
<strong><span style="color:#ff0000;"> ---&gt; Found ext2 root dir at sector 259800 ***</span></strong><br />
Found ext2 magic at offset 138658816 (part in: 138657792, size 179172)<br />
Found ext2 magic at offset 138970112 (part in: 138969088, size 179172)<br />
---&gt; Found ext2 root dir at sector 271664 ***<br />
Found ext2 magic at offset 139101184 (part in: 139100160, size 179172)<br />
Found ext2 magic at offset 139183104 (part in: 139182080, size 179172)<br />
Found ext2 magic at offset 139342848 (part in: 139341824, size 179172)<br />
---&gt; Found ext2 root dir at sector 272344 ***<br />
Found ext2 magic at offset 139449344 (part in: 139448320, size 179172)<br />
Found ext2 magic at offset 139510784 (part in: 139509760, size 179172)<br />
Found ext2 magic at offset 139682816 (part in: 139681792, size 179172)<br />
<strong>(recortado)</strong><br />
Found ext2 magic at offset 265306112 (part in: 265305088, size 179172)<br />
Loop 2167: scanning sector 554752...<br />
Found ptable magic at sector 842680<br />
Found ptable magic at sector 862888<br />
Loop 3558: scanning sector 910848...<br />
Found ext2 magic at offset 533741568 (part in: 533740544, size 179172)<br />
Found ptable magic at sector 1167464<br />
Loop 4919: scanning sector 1259264...<br />
Found ptable magic at sector 1328685<br />
Found ptable magic at sector 1499456<br />
Found ext2 magic at offset 802177024 (part in: 802176000, size 179172)<br />
Found ptable magic at sector 1583125<br />
Loop 6281: scanning sector 1607936...<br />
Found ptable magic at sector 1634968<br />
Loop 7673: scanning sector 1964288...<br />
Got EOF on sector 1966080<br />
Finished scanning.</code></div>
<div> 2º)  Localizar el primer &#8220;&#8211;&gt; Found ext2 root dir&#8221; (Marcado en rojo en el ejemplo)</div>
<div> 3º)  Si hay una entrada ext2 header anterior, es muy probable que el inicio de partición se encuentre en -1024 bytes (En el ejemplo, seria un offset de <strong>131088384</strong>)</div>
<div> 4º) Llamar a:</div>
<div>           <code>% losetup -o&lt;offset-dado-por-scandrive&gt; /dev/loop0 &lt;dumpfile&gt;</code></div>
<div> 5º) Hacer el mount normal</div>
<div>          <code> % mount /dev/loop0 /mnt</code></div>
<div>Aquí teneis &#8220;<a href="http://dl.dropbox.com/u/2304719/scandrive.cpp">scandrive.cpp</a>&#8220;</div>
<div>Hasta otra!</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1685/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1685&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/09/01/montar-particion-dump-disco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>
	</item>
		<item>
		<title>Medir el tiempo de respuesta de Django</title>
		<link>http://robleshermoso.wordpress.com/2011/06/03/medir-tiempo-respuesta-django/</link>
		<comments>http://robleshermoso.wordpress.com/2011/06/03/medir-tiempo-respuesta-django/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 16:42:08 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[middleware]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[response]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1662</guid>
		<description><![CDATA[El tiempo de respuesta de un servicio web es el tiempo que transcurre desde que se realiza una petición hasta que se envía el último byte de respuesta al cliente. Es vital para las aplicaciones web medir este tiempo con el objeto de optimizar la capacidad de respuesta. Nos interesa por tanto minimizar el tiempo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1662&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_1674" class="wp-caption alignnone" style="width: 510px"><a href="http://robleshermoso.files.wordpress.com/2011/06/django_tiempos.jpg"><img class="size-full wp-image-1674" title="Midiendo tiempos de respuesta en Django" src="http://robleshermoso.files.wordpress.com/2011/06/django_tiempos.jpg?w=630" alt="Midiendo tiempos de respuesta en Django"   /></a><p class="wp-caption-text">Midiendo tiempos de respuesta en Django</p></div>
<p>El tiempo de respuesta de un servicio web es el tiempo que transcurre desde que se realiza una petición hasta que se envía el último <em>byte</em> de respuesta al cliente.</p>
<p>Es vital para las aplicaciones web medir este tiempo con el objeto de optimizar la capacidad de respuesta. Nos interesa por tanto <strong>minimizar el tiempo de respuesta</strong>.</p>
<p>Para aplicaciones web desarrolladas con el <em>framework</em> <strong><a href="https://www.djangoproject.com/">Django</a></strong> he desarrollado un <strong><em><a href="https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs">middleware</a></em></strong> sencillo que mide el tiempo de respuesta de proceso desde que <strong>Django</strong> es &#8220;consciente&#8221; (<strong><em>Python</em></strong>).</p>
<p>Sin duda el <em>middleware</em>, es una de las características que más me gusta de <strong>Django</strong>. Permite, entre otras tantas cosas, añadir objetos al <em>request</em>.</p>
<p>Una clase <em>middleware</em> debe tener al menos un método: <strong>process_request</strong>.</p>
<p>En nuestro caso, tenemos 3 métodos:<strong> process_request</strong>, <strong>process_response</strong> y <strong>__init__</strong>.</p>
<p>La idea es simple. Cuando llega un <em>request</em>, añadimos una marca de tiempo al <em>request</em> (process_request).</p>
<p>Cuando ese <em>request</em> es procesado, obtenemos la diferencia de tiempo y la &#8220;logueamos&#8221; (process_response).</p>
<p>En <strong>__init__</strong> simplemente inicializamos el contexto de <em><a href="http://docs.python.org/library/logging.html">logging</a></em>.</p>
<p>Os dejo el código.</p>
<p>¡Que aproveche! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><pre class="brush: python;">
import logging
from datetime import datetime
from django.conf import settings
class LogTime(object):

        def __init__(self):

                self.log = logging.getLogger(&quot;tm&quot;)
                self.log.setLevel(logging.INFO)
                formatter = logging.Formatter('[%(asctime)s] &quot;%(message)s&quot;','%Y-%m-%d %a %H:%M:%S')
                if len(self.log.handlers) == 0:
                        hdlr = logging.FileHandler(settings.LOG_TIME_FILE)
                        hdlr.setFormatter(formatter)
                        self.log.addHandler(hdlr)

        def process_request(self,request):

                request.dtLogTimeStart = datetime.now()

        def process_response(self,request,response):
                if 'dtLogTimeStart' in dir(request):
                        delta = datetime.now()-request.dtLogTimeStart
                        self.log.info(&quot;req: %s - time: %i.%06i&quot; % (request.path,delta.seconds,delta.microseconds))
                return response

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1662/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1662&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/06/03/medir-tiempo-respuesta-django/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>

		<media:content url="http://robleshermoso.files.wordpress.com/2011/06/django_tiempos.jpg" medium="image">
			<media:title type="html">Midiendo tiempos de respuesta en Django</media:title>
		</media:content>
	</item>
		<item>
		<title>#nolesvotes: por un voto responsable</title>
		<link>http://robleshermoso.wordpress.com/2011/05/17/nolesvotes-por-un-voto-responsable/</link>
		<comments>http://robleshermoso.wordpress.com/2011/05/17/nolesvotes-por-un-voto-responsable/#comments</comments>
		<pubDate>Tue, 17 May 2011 09:59:28 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[Filosofía]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[política]]></category>
		<category><![CDATA[Redes sociales]]></category>
		<category><![CDATA[democracia]]></category>
		<category><![CDATA[elecciones]]></category>
		<category><![CDATA[nolesvotes]]></category>
		<category><![CDATA[pp]]></category>
		<category><![CDATA[psoe]]></category>
		<category><![CDATA[real]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1657</guid>
		<description><![CDATA[OBJETIVO DE #NOLESVOTES. Las personas que apoyamos a la iniciativa #nolesvotes desde sus inicios, a la vista de la catarata de tergiversaciones vertidas por políticos y medios de comunicación, queremos recordar y subrayar que la iniciativaen ningún modo promueve la abstención, y que surgió para hacer una llamada al ejercicio del voto responsable el próximo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1657&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>
<div id="attachment_1658" class="wp-caption alignnone" style="width: 610px"><a href="http://robleshermoso.files.wordpress.com/2011/05/nolesvotes03.png"><img class="size-full wp-image-1658" title="#nolesvotes" src="http://robleshermoso.files.wordpress.com/2011/05/nolesvotes03.png?w=630" alt="#nolesvotes"   /></a><p class="wp-caption-text">#nolesvotes</p></div>
</div>
<div><strong><br />
</strong></div>
<ol>
<li><strong>OBJETIVO DE #NOLESVOTES</strong>. Las personas que apoyamos a la iniciativa #nolesvotes desde sus inicios, a la vista de la catarata de tergiversaciones vertidas por políticos y medios de comunicación, queremos recordar y subrayar que la iniciativa<strong>en ningún modo promueve la abstención</strong>, y que surgió para hacer una llamada al ejercicio del voto responsable el próximo 22-M. La iniciativa pide específicamente que no se vote a los partidos que responden a intereses distintos a los de la ciudadanía: PP, PSOE y CiU, pero recomienda que en su lugar se examinen otras opciones. La iniciativa no pide el voto para ninguna opción concreta: el voto es responsabilidad de cada ciudadano.</li>
<li><strong>HAZ DE TU PÁGINA UN CARTEL ELECTORAL</strong>. Las calles están llenas de carteles electorales, pero muchas personas no se ven representadas en ellos: la intermediación hizo que la política sea cada vez más lejana al ciudadano. Para subsanar tal déficit democrático, proponemos que todo ciudadano que así lo desee pueda convertir su blog, su web, su muro o su twitter en un “cartel electoral” del movimiento. Si quieres respaldar esta iniciativa, convierte tu sitio en Internet en un cartel electoral antes de las 24 horas del próximo día 20 de mayo, con el <a href="http://wiki.nolesvotes.org/wiki/Archivo:Nolesvotes_blanco_A4.png">logotipo de #nolesvotes</a> o de las plataformas con las que simpatices, y el texto “ni PP, ni PSOE, ni CiU”.</li>
<li><strong>COLABORACIÓN DISTRIBUIDA</strong>. Te invitamos a copiar este texto y construir páginas de enlaces que referencien todos los sitios que dan apoyo a la iniciativa. De igual modo, invitamos a los demás colectivos que comparten nuestra propuesta a que lleven a cabo acciones similares. La fuerza de la red reside en la distribución y colaboración entre sus nodos.</li>
<li><strong>TÚ ERES EL ALTAVOZ</strong>. Tan importante es la red como la calle: no te limites a actuar en internet. Levántate y explícaselo a todos tus conocidos, especialmente a aquellos más vulnerables a la propaganda en los medios de comunicación masivos.</li>
<li><strong>ACCIÓN</strong>. No te quedes en casa el domingo 22. Sal a la calle y ejerce tu derecho al voto. No votes a quienes, actuando abiertamente en contra de la voluntad e intereses de los ciudadanos, han convertido la democracia en una burla de sí misma. Por la participación democrática activa: ni PP, ni PSOE, ni CiU.</li>
</ol>
<p>#nolesvotes</p>
<h3>MÁS INFORMACIÓN</h3>
<p>Manifiesto de #Nolesvotes |<a href="http://www.nolesvotes.com/"> </a><a href="http://www.nolesvotes.com/">http://www.nolesvotes.com/</a><br />
Wiki colaborativo #nolesvotes | <a href="http://wiki.nolesvotes.org/wiki/Portada">http://wiki.nolesvotes.org/wiki/Portada</a><br />
Twitter #nolesvotes | <a href="http://twitter.com/#!/search/nolesvotes">http://twitter.com/#!/search/nolesvotes</a><br />
Facebook #nolesvotes<a href="http://goo.gl/4Nmj1"> | http://goo.gl/4Nmj1</a><br />
Material gráfico #nolesvotes | <a href="http://goo.gl/dbGAb">http://goo.gl/dbGAb</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1657/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1657/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1657/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1657/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1657/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1657/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1657/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1657/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1657/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1657/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1657/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1657/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1657/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1657/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1657&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/05/17/nolesvotes-por-un-voto-responsable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>

		<media:content url="http://robleshermoso.files.wordpress.com/2011/05/nolesvotes03.png" medium="image">
			<media:title type="html">#nolesvotes</media:title>
		</media:content>
	</item>
		<item>
		<title>¿Sony almacena las contraseñas sin cifrar?</title>
		<link>http://robleshermoso.wordpress.com/2011/04/27/%c2%bfsony-almacena-las-contrasenas-sin-cifrar/</link>
		<comments>http://robleshermoso.wordpress.com/2011/04/27/%c2%bfsony-almacena-las-contrasenas-sin-cifrar/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 20:58:33 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[Filosofía]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[md5]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[plain]]></category>
		<category><![CDATA[psn]]></category>
		<category><![CDATA[sony]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1644</guid>
		<description><![CDATA[Hoy, como muchos (futuros ex-)usuarios de la PSN Network, he recibido un mail de Sony diciendome que han atacado la base de datos de PSN Network y han podido robar mis datos personales. No existe sistema 100% seguro e impenetrable y afirmo que jamás lo existirá. Puedo entender por tanto que se realice un ataque y roben [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1644&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hoy, como muchos (futuros ex-)usuarios de la <strong>PSN Network</strong>, he recibido un mail de Sony diciendome que <strong>han atacado la base de datos de PSN Network</strong> y han podido <strong>robar mis datos personales</strong>.</p>
<p><strong>No existe sistema 100% seguro</strong> e impenetrable y afirmo que jamás lo existirá.</p>
<p>Puedo entender por tanto que se realice un ataque y roben la valiosa base de datos.</p>
<p>Pero lo que me parece <strong>INADMISIBLE</strong> es leer lo siguiente del comunicado oficial:</p>
<blockquote><p>fecha de nacimiento, nombre de acceso y <span style="text-decoration:underline;"><strong>contraseña</strong></span> de PlayStation Network/ Qriocity</p></blockquote>
<p>No especifican nada de cómo está almacenada la contraseña.</p>
<p>Cualquier <em>webmaster amateur</em>, sabe que las contraseñas JAMÁS deben de almacenarse como tal.</p>
<p>El procedimiento habitual es realizar un cálculo <em>hash</em> sobre la contraseña y almacenar este resultado en la BBDD.</p>
<p>Cuando un usuario quiere autenticarse, basta con calcular el <em>hash</em> al valor introducido como contraseña y enviarlo al servidor.</p>
<p>Si ambos <em>hash</em> coinciden, bingo, es Fulano.</p>
<p>Si por ejemplo tu contraseña es &#8220;mypassword&#8221;, el <em>hash</em> con md5 seria: 34819d7beeabb9260a5c854bc85b3e44 (si queréis probarlo en GNU/Linux, echo -n &#8220;mypassword&#8221; | md5sum).</p>
<p>En fin, estoy realmente enfadado con la noticia y espero que den detalles de cómo almacenan las contraseñas.</p>
<p>Como he leido hoy en Twitter: &#8220;<em><strong>menos abogados y más ingenieros de calidad</strong></em>&#8220;</p>
<p>¬¬</p>
<p><strong>ACTUALIZACIÓN</strong>: Sony no afirma que se hayan efectuado el robo de los datos de las tarjetas de crédito.  Hay que estar atentos a los movimientos bancarios y denunciar cualquier cargo no realizado lo antes posibles (creo que hay un plazo para anular cobros).</p>
<p><strong>ACTUALIZACIÓN 2: </strong> Añado una conversación obtenida en red IRC donde &#8220;hackers&#8221; hablan sobre la poca seguridad de los servidores de PSN Network. La fuente original esta en <a href="http://psx-scene.com/forums/f6/sony-admits-psn-personal-data-not-encrypted-85693/">PSX-SCENE</a>.</p>
<p><a href="http://robleshermoso.files.wordpress.com/2011/04/psnhackerirclog.pdf">PSN Hacker IRC Lo</a>g</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1644/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1644&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/04/27/%c2%bfsony-almacena-las-contrasenas-sin-cifrar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>
	</item>
		<item>
		<title>ZX Launcher: Lanzador de juegos para Instituto Cervantes</title>
		<link>http://robleshermoso.wordpress.com/2011/04/14/zx-launcher-lanzador-de-juegos-para-instituto-cervantes/</link>
		<comments>http://robleshermoso.wordpress.com/2011/04/14/zx-launcher-lanzador-de-juegos-para-instituto-cervantes/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 18:20:30 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[Arte]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Cervantes]]></category>
		<category><![CDATA[dinamic]]></category>
		<category><![CDATA[emulador]]></category>
		<category><![CDATA[fuse]]></category>
		<category><![CDATA[fx]]></category>
		<category><![CDATA[instituto]]></category>
		<category><![CDATA[spectrum]]></category>
		<category><![CDATA[videogame]]></category>
		<category><![CDATA[videojuegos]]></category>
		<category><![CDATA[Zx]]></category>

		<guid isPermaLink="false">https://robleshermoso.wordpress.com/2011/04/13/zx-launcher-lanzador-de-juegos-para-el-instituto-cervantes/</guid>
		<description><![CDATA[Os traigo mi último desarrollo:  ZX Launcher. En otra ocasión, os presente el lanzador de juegos para Intermediae: artLauncher. Se trata de un lanzador de juegos de Spectrum desarrollado para mis amigos de arsGames de cara a la exposición &#8220;Videojuegos en español&#8221; que recorrerá los centros del Instituto Cervantes mostrando el pasado y presente de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1618&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_1624" class="wp-caption alignnone" style="width: 510px"><a href="http://robleshermoso.files.wordpress.com/2011/04/videojuegos_en_espac3b1ol.jpg"><img class="size-full wp-image-1624" title="Videojuego en Español" src="http://robleshermoso.files.wordpress.com/2011/04/videojuegos_en_espac3b1ol.jpg?w=630" alt="Videojuego en Español, Fuente: arsGames"   /></a><p class="wp-caption-text">Videojuego en Español, Fuente: arsGames</p></div>
<p>Os traigo mi último desarrollo:  <strong>ZX Launcher</strong>.</p>
<p>En otra ocasión, os presente el lanzador de juegos para <strong>Intermediae</strong>: <strong><a href="http://robleshermoso.wordpress.com/2010/06/26/artlauncher-lanzador-aplicaciones-pyclutter/">artLauncher</a></strong>.</p>
<p>Se trata de un <strong>lanzador de juegos de Spectrum</strong> desarrollado para mis amigos de <strong><a href="http://www.arsgames.net/">arsGames</a></strong> de cara a la exposición &#8220;<strong><a href="http://videojuegosenelcervantes.es/">Videojuegos en español</a></strong>&#8221; que recorrerá los centros del <strong><a href="http://www.cervantes.es/default.htm">Instituto Cervantes</a></strong> mostrando el <strong>pasado y presente de los videojuegos en Español</strong>.</p>
<p>Es gratificante saber que <strong>ZX Launcher</strong> se ejecutará por todo el mundo. La primera parada ha sido <strong>Tetuán</strong> (Marruecos). <strong><a href="http://videojuegosenelcervantes.es/?p=163">Aquí</a></strong> podéis ver fotos y vídeos del primer éxito de la exposición.</p>
<p>Los años 80 fueron sin duda la época de esplendor del sector de los videojuegos en España. Compañías como <strong><a href="http://blogs.gamefilia.com/apohell/22-04-2009/21949/dinamic-software-25%C2%BA-aniversario-homenaje-a-un-grande-del-videojuego-espano">Dinamic</a></strong> (actual <strong><em><a href="http://www.fxinteractive.com/home.htm">FX Interactive</a></em></strong>) fueron líderes internacionales del sector.</p>
<p>Este lanzador recoge algunos de esos magníficos juegos que seguro provocaran alguna sonrisa melancólica al &#8220;treintañero&#8221; que lo pruebe.</p>
<p>Gracias a <strong>FX Interactive</strong> se puede distribuir. Podéis bajaros <a href="http://dl.dropbox.com/u/605024/ZXLauncher_Cervantes.zip">aquí</a> el instalador.</p>
<p>Gracias también a <strong>arsGames</strong> por el magnífico trabajo gráfico del lanzador.</p>
<p style="font-size:14pt;margin:10px;"><strong>Aspectos técnicos</strong></p>
<p>La aplicación esta escrita en <strong>Python</strong> y utiliza el <em>framework</em> de <strong>Qt</strong> para la interfaz gráfica.<br />
A pesar de ser Python, sólo corre en sistemas Windows ya que se hace uso de algunas llamadas al API de <strong>Win32</strong> (librería <strong>pywin32</strong>)</p>
<p>La pieza clave del software es el <strong>emulador de Spectrum</strong>. Después de valorar los emuladores disponibles <strong>FOSS,</strong> opté por <strong><a href="http://fuse-emulator.sourceforge.net/">FUSE</a></strong> debido a la opción de carga directa de juegos, que es multiplataforma y por su organización del código (<em>backend</em> y <em>frontend</em>).</p>
<p>Para integrarlo con <strong>Python</strong> y <strong>Qt</strong>, tuve que modificar el código de <strong>FUSE</strong> para hacerlo embebido a una ventana de <strong>Qt</strong>. Lo que hice fue, sin entrar en detalles, obtener el <em>handle</em> de la ventana para que <strong>FUSE</strong> dibujara directamente dentro. Además, para controlar y pasar los eventos de teclado, tuve que implementar un paso de mensajes entre <strong>Python</strong> y <strong>FUSE</strong> usando Win32 SendMessage con mensajes tipo <strong>WM_COMMAND</strong>.</p>
<p>Os dejo con un vídeo demostrativo.</p>
<span style="text-align:center; display: block;"><a href="http://robleshermoso.wordpress.com/2011/04/14/zx-launcher-lanzador-de-juegos-para-instituto-cervantes/"><img src="http://img.youtube.com/vi/ND4bK4Oy3ss/2.jpg" alt="" /></a></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1618/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1618&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/04/14/zx-launcher-lanzador-de-juegos-para-instituto-cervantes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>

		<media:content url="http://robleshermoso.files.wordpress.com/2011/04/videojuegos_en_espac3b1ol.jpg" medium="image">
			<media:title type="html">Videojuego en Español</media:title>
		</media:content>
	</item>
		<item>
		<title>Control LED con libusb</title>
		<link>http://robleshermoso.wordpress.com/2011/03/09/control-led-con-libusb/</link>
		<comments>http://robleshermoso.wordpress.com/2011/03/09/control-led-con-libusb/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 17:15:09 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[libusb]]></category>
		<category><![CDATA[sniffer]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1583</guid>
		<description><![CDATA[Hoy me ha llegado un chinagadget comprado en DealExtreme. Se trata de un notificador de nuevos emails o eventos de mensajería. Como era de esperar el driver/software sólo funciona para sistemas Windows pero me gustaría poder utilizar este &#8220;cachibache&#8221; en mi Ubuntu. He supuesto que encender una bombilla vía USB no debía ser muy complicado [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1583&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_1604" class="wp-caption alignnone" style="width: 470px"><a href="http://robleshermoso.files.wordpress.com/2011/03/led.png"><img class="size-full wp-image-1604" title="LedController for GNU/Linux" src="http://robleshermoso.files.wordpress.com/2011/03/led.png?w=630" alt="LedController for GNU/Linux"   /></a><p class="wp-caption-text">LedController for GNU/Linux</p></div>
<p>Hoy me ha llegado un <em><a href="http://www.dealextreme.com/p/usb-universal-e-mail-webmail-im-notifier-gmail-outlook-outlook-express-pop3-27062">chinagadget</a></em> comprado en <strong>DealExtreme</strong>.</p>
<p>Se trata de un notificador de nuevos emails o eventos de mensajería.</p>
<p>Como era de esperar el driver/software sólo funciona para sistemas Windows pero me gustaría poder utilizar este &#8220;cachibache&#8221; en mi Ubuntu.</p>
<p>He supuesto que encender una bombilla vía USB no debía ser muy complicado y me he puesto manos a la obra.</p>
<p>Lo primero que tenia que averiguar era la configuración y el protocolo del driver para encender/apagar el LED a voluntad.</p>
<p>Para hacer esta mini ingeniería inversa he utilizado <a href="http://es.wikipedia.org/wiki/VirtualBox">VirtualBox</a> y <a href="http://es.wikipedia.org/wiki/Wireshark">Wireshark</a>.</p>
<p><strong>Wireshark</strong> es ampliamente usado como sistema de captura y análisis de paquetes de red. Ahora además nos permite &#8220;<em>sniffar&#8221;</em> el tráfico USB.</p>
<p>Con <strong>VirtualBox</strong> se crea una maquina virtual Windows donde instalamos los drivers oficiales del notificador.</p>
<p>Con nuestra máquina virtual corriendo, ponemos a escuchar a nuestro <em>sniffer</em>.</p>
<p>Es necesario saber en que bus se encuentra nuestro dispositivo. Ésto se soluciona con un simple <em><a href="http://linux.about.com/library/cmd/blcmdl8_lsusb.htm">lsusb</a></em>.</p>
<p>Ahora le indicamos a WireShark que escuche en dicho bus y ejecutamos un escenario donde se encienda/apague el led.</p>
<p>El resultado es un gran fichero de captura con mucha <em>morralla</em>.</p>
<p>Analizando el tráfico se observa un incontable número de paquetes enviados por interrupción pero cuyo contenido es siempre el mismo. Desconozco su propósito (¿quizás un sistema rudimentario de <em>heartbeat</em>?).</p>
<p>Filtrando por <em><a href="http://usuarios.multimania.es/kurganz/datos_tecnicos/flujo.html">endpoint</a></em>, se ve que hay dos <em>endpoints</em>, 1 y 2 (además del EP de control 0).</p>
<p>El EP 1 es el que usa para transferencias por interrupción del mensaje repetitivo.</p>
<p>El EP 2 es el que se usa para el envio de comandos de encendido.</p>
<p>En concreto, después de jugar con la aplicación de notificación, detecte la siguiente trama para encender el led rojo:</p>
<p><pre class="brush: plain;">

0x02 0x04 0x04 0x04 0x04

</pre></p>
<p>Para apagarlo, se usa ésta otra:</p>
<p><pre class="brush: plain;">

0x00 0x04 0x04 0x04 0x04

</pre></p>
<p>Con el protocolo (<em>a priori</em>) detectado, decidí hacer el driver en espacio de usuario para GNU/Linux.</p>
<p>Para acometer ésto, opté por usar la librería de acceso a USB, <strong><a href="http://www.libusb.org/">libusb</a></strong>.</p>
<p>Esta librería permite el desarrollo rápido de drivers/aplicaciones USB en GNU/Linux (también está disponible para Windows). Para dispositivos sencillos como este se ajusta perfectamente. Si por el contrario queremos controlar un dispositivo con alta intesidad de E/S, es recomendable implementarlo mediante un módulo <em>kernel</em>.</p>
<p>La implementación es sencilla. Se pasa como parámetro el color del LED a encender (en la secuencia, 2 = rojo, 1 = azul, 2 = verde).</p>
<p>Lo relevante está en la línea 55. Aquí es donde se envía por interrupción, el comando por el EP 2.</p>
<p>También es interesante la línea 41. Aquí se descarga el manejador kernel de dispositivo en caso de que algún <em>driver</em> lo haya reclamado (en este caso el driver <a href="http://es.wikipedia.org/wiki/HID">HID</a>).</p>
<p><pre class="brush: cpp; highlight: [55,41];">

#include &lt;stdio.h&gt;
#include &lt;libusb.h&gt;
#include &lt;errno.h&gt;

#define VID 0x1294
#define PID 0x1320

static struct libusb_device_handle *devh = NULL;

int main(int argc,char** argv)
{
 int ret;
 unsigned char code = 0;
 if (argc != 2 )
 {
    printf(&quot;syntax: %s red | green | blue | off\n&quot;,argv[0]);
    return -1;
 }
 if ( strcmp(argv[1],&quot;red&quot;) == 0 )
 {
     code = 2;
 }
 else if ( strcmp(argv[1],&quot;green&quot;) == 0 )
 {
     code = 3;
 }
 else if ( strcmp(argv[1],&quot;blue&quot;) == 0 )
 {
     code = 1;
 }
 libusb_init(NULL);
 devh = libusb_open_device_with_vid_pid(NULL, VID, PID);
 if (devh == NULL )
 {
	printf(&quot;not found\n&quot;);
        return -1;
 }
 if ( libusb_kernel_driver_active(devh,0) )
 {
	printf(&quot;detach from kernel\n&quot;);
        ret = libusb_detach_kernel_driver(devh,0);
        if (ret &lt; 0 )
        {
		printf(&quot;can't detach\n&quot;);
                return -1;
        }
 }
 char data[5];
 data[0] = code;
 data[1] = 0x4;
 data[2] = 0x4;
 data[3] = 0x4;
 data[4] = 0x4;
 int dummy;
 ret =  libusb_interrupt_transfer(devh,0x2,data,5,&amp;dummy,0);
 if ( ret &lt; 0 )
 {
  perror(&quot;error&quot;);
 }
return 0;
}

</pre></p>
<p>Os dejo el fuente de programa, una versión compilada dinámicamente y otra estáticamente.<br />
Fuente: <a title="LedController.tar.gz" href="http://dl.dropbox.com/u/2304719/ledcontroller.tar.gz">ledcontroller.tar.gz</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1583/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1583&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/03/09/control-led-con-libusb/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>

		<media:content url="http://robleshermoso.files.wordpress.com/2011/03/led.png" medium="image">
			<media:title type="html">LedController for GNU/Linux</media:title>
		</media:content>
	</item>
		<item>
		<title>[Tip] Copiar ficheros usando nc (netcat)</title>
		<link>http://robleshermoso.wordpress.com/2011/02/11/tip-copiar-ficheros-usando-nc-netcat/</link>
		<comments>http://robleshermoso.wordpress.com/2011/02/11/tip-copiar-ficheros-usando-nc-netcat/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 17:19:13 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[archivos]]></category>
		<category><![CDATA[copiar]]></category>
		<category><![CDATA[copy]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[nc]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[telnet]]></category>
		<category><![CDATA[transfer]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1568</guid>
		<description><![CDATA[Netcat (más conocido por nc) es sin duda una herramienta sencilla y poderosa. Permite establecer comunicaciones TCP/IP y tiene un tamaño bastante discreto. Suele estar incluido en los firmwares de nuestros periféricos debido a su versatilidad y poco tamaño. Os voy a explicar como transferir archivos por red usando netcat. Supongamos que tenemos el fichero [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1568&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://es.wikipedia.org/wiki/Netcat">Netcat</a></strong> (más conocido por <em>nc</em>) es sin duda una herramienta sencilla y poderosa. Permite establecer comunicaciones TCP/IP y tiene un tamaño bastante discreto. Suele estar incluido en los <em>firmwares</em> de nuestros periféricos debido a su versatilidad y poco tamaño.</p>
<p>Os voy a explicar como transferir archivos por red usando <strong>netcat</strong>.</p>
<p>Supongamos que tenemos el fichero &#8220;vmlinuz&#8221; que queremos transferir a un nuevo equipo (con IP 192.168.1.2) .</p>
<p>Lo primero es poner el equipo receptor en modo escucha para recepcionar el fichero:</p>
<p><pre class="brush: bash;">

nc -l -p 10000 &gt; vmlinuz

</pre></p>
<p>Los parámetros son sencillos. Con -l ponemos a <strong><em>nc</em></strong> en modo escucha y con -p especificamos el puerto.  Usamos redirección para indicar donde almacenar el fichero (vmlinuz).</p>
<p>Vamos a enviar el fichero</p>
<p><pre class="brush: bash;">

nc 192.168.1.2 10000 &lt; vmlinuz

</pre></p>
<p>Poco que explicar: IP, puerto de destino y fichero de entrada (vmlinuz).</p>
<p>Espero que os sirva.</p>
<p><strong>ACTUALIZACIÓN</strong>: El otro día no me funciono este tip usando clientes distintos de <em>nc</em>, tuve que añadir al emisor el <em>flag</em> &#8220;-q 0&#8243; (nc -q 0 192.168.1.2 10000 &lt; vmlinuz) para que cerrara la transferencia justo al terminar el envío.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1568/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1568&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/02/11/tip-copiar-ficheros-usando-nc-netcat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>
	</item>
		<item>
		<title>PS3 hackeada, ¿por qué no OpenPS3?</title>
		<link>http://robleshermoso.wordpress.com/2011/01/05/ps3-hackeada-root-key-openps3/</link>
		<comments>http://robleshermoso.wordpress.com/2011/01/05/ps3-hackeada-root-key-openps3/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 16:03:13 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[Filosofía]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[fail0ver]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[geohot]]></category>
		<category><![CDATA[hacked]]></category>
		<category><![CDATA[metldr]]></category>
		<category><![CDATA[piracy]]></category>
		<category><![CDATA[ps3]]></category>
		<category><![CDATA[psp]]></category>
		<category><![CDATA[SL]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1553</guid>
		<description><![CDATA[La seguridad de la PS3 ha sido comprometida al 100% . Después de presumir de 5 años sin sucumbir al &#8220;ataque&#8221; de los hackers, a día de hoy se conoce hasta la clave root (a.k.a. metldr key) de cifrado. Esto es muy grave. Es un gran palo para la industria y especialmente para Sony. El [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1553&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_1563" class="wp-caption alignnone" style="width: 510px"><a href="http://robleshermoso.files.wordpress.com/2011/01/ps3epicfail.jpg"><img class="size-full wp-image-1563" title="PS3 EPIC FAIL" src="http://robleshermoso.files.wordpress.com/2011/01/ps3epicfail.jpg?w=630" alt="PS3 EPIC FAIL"   /></a><p class="wp-caption-text">PS3 EPIC FAIL</p></div>
<p>La seguridad de la PS3 ha sido comprometida al 100% . Después de presumir de 5 años sin sucumbir al &#8220;ataque&#8221; de los <em>hackers</em>, a día de hoy se conoce hasta la clave <em>root</em> (<em>a.k.a. metldr key</em>) de cifrado.</p>
<p><strong>Esto es muy grave</strong>. Es un gran palo para la industria y especialmente para Sony.</p>
<p>El mérito de esta gesta no pertenece a un único <em>hacker</em>, sino a la contribución de varios grupos y &#8220;artistas&#8221; en solitario.</p>
<p>Voy a resumir los principales hitos hasta la fecha.</p>
<ul>
<li><a href="http://wiki.ps2dev.org/ps3:rsx">Acceso al RSX desde GNU/Linux instalado en la PS3</a>.</li>
<li><a href="http://www.ps3news.com/forums/ps3-hacks/ps3-hacked-george-hotz-hello-hypervisor-im-geohot-109519.html">Geohot accedió al Hypervisor</a></li>
<li><a href="http://www.ps3news.com/PS3-Hacks/Fail0verflow-27C3-PS3-Exploit-Hacker-Conference-2010-Highlights/">El grupo fail0verflow demuestra cómo se puede obtener las claves de cifrado de PS3</a> (<strong>EPIC FAIL</strong>)</li>
<li><a href="http://geohot.com/">Geohot comunica que ya tenia la clave </a><span style="color:#0000ee;"><span style="text-decoration:underline;">raíz</span></span>.</li>
</ul>
<p>Insisto en la gravedad del asunto. Son muchos los desarrolladores a los que sin duda afectará esto.</p>
<p>La pregunta es,<strong> ¿cómo se ha tardado tanto tiempo en conseguir esto?</strong></p>
<p>Cuando Sony saco la PS3, incluyo la posibilidad de ejecutar otro sistema operativo en la consola (<em>OtherOS</em>). La mayoria de los <em>hackers </em>optó por usar GNU/Linux dada su inmediatez, disponibilidad y soporte de IBM.</p>
<p>A raíz del acceso ilegítimo al RSX, Sony creyó conveniente quitar el acceso a <em>OtherOS </em>(primero con la PS3 <em>Slim </em>sin <em>OtherOS </em>y luego con un revisión de <em>firmware </em>que denegaba el acceso a las PS3 &#8220;<em>fat</em>&#8220;). Esto incluso provocó que <a href="http://www.facebook.com/note.php?note_id=424343660015">usuarios demandarán a Sony</a>.</p>
<p><strong>ERROR</strong>. Sony quitó el caramelo gamusino que tenia entretenidos a los <em>hackers</em>. A raíz de ahí, la comunidad se propuso el reto de devolver la opción de instalar <em>OtherOS </em>de nuevo en la consola. Han ido mucho más alla.</p>
<p>Los ingenieros de Sony se centraron en que el <strong>Cell </strong>y su <em><a href="http://reference.kfupm.edu.sa/content/c/e/cell_broadband_engine_support_for_privac_66927.pdf">SPE security isolation</a></em> hacian que no fuera posible acceder al código descifrado en ejecución dentro de SPE. Dejaron a un lado aspectos criptográficos importantes  (como <a href="http://www.elotrolado.net/hilo_fail0verflow-ps3-destripada-por-completo_1545195">delvolver una constante en una función que genera números aleatorios</a>) que han permitido el<strong> EPIC FAIL</strong>.</p>
<p>Esto <strong>no </strong>sólo permite la piratería. Abre un camino para que cualquiera pueda sacar software legítimo técnicamente a espaldas de Sony. Dada su alta conectividad en red, no creo que tarde tiempo en aparecer incluso virus. Ya existen numerosas utilidades para firmar código como si la misma Sony se tratara.</p>
<p>No sólo la PS3 ha sido comprometida, la <a href="http://psx-scene.com/forums/f6/psp-now-also-open-console-developers-74290/">PSP también lo ha sido</a>. Parece ser que la clave raíz de la PSP se incluye dentro del <em>firmware </em>de PS3, luego ha sido cuestión de buscar un poco.</p>
<p><strong>¿Qué debería hacer Sony ahora?</strong></p>
<p>Dos buenos refranes encajan aquí:  &#8221;<em>S<strong>i no puedes con el enemigo, únete a él</strong></em>&#8221; y &#8220;<strong><em>No hay mal que por bien no venga</em></strong>&#8220;.</p>
<p>Desde mi punto de vista,  tres cosas:</p>
<ol>
<li><strong>Centrarse en PS4</strong>. Reestructurar recursos para sacar en la mayor brevedad posible una nueva versión. Puede ser muy conveniente aceptar la demanda de trabajo de <strong>geohot </strong>(tal y como reza en su web:  &#8221;<em>it&#8217;d be fun to be on the other side</em>&#8220;)</li>
<li><strong>PSN y </strong><strong>periféricos</strong>. Desconozco como quedará de comprometido el PSN después de esto.  No sé si se podrá conectar  la consola al PSN. Teniendo control total sería posible cambiar información básica como ID/MAC siempre y cuando no se corrobore ese número de serie con la BBDD de Sony. El caso es que tiene que mejorar los contenidos de PSN para sacarle rendimiento ecónomico a la plataforma. Otra opción mucho más sencilla es sacar juegos que requieran periféricos especiales.  De esta forma se venden tantos juegos, como periféricos. Son buenos ejemplos: Singstar, EyePet, Buzz, etc.</li>
<li><strong>OpenPS3</strong>. Más radical. El <em>OtherOS </em>mantuvo a la comunidad <em>hacker </em>(no confundir con <em>cracker</em>) entretenida durante más de 3 años. ¿Por qué no abrir la PS3 a todos? Bastaría con hacer un sitio web y poner al frente a un pequeño grupo de trabajadores. Esto ayudaría a mejorar la imagen de Sony mientras  mantiene distraidos a los <em>hackers. </em>Esta opción no tiene porque prescindir de una contraprestación económica. Un modelo de negocio <em><a href="http://es.wikipedia.org/wiki/Freemium">freemium </a></em>podría funcionar bien.</li>
</ol>
<p><strong> ¿se te ocurre alguna opción más?</strong></p>
<p>En fin, un <strong>EPIC FAIL</strong> como la copa de un pino que espero no hunda a la miseria a más de uno.</p>
<p>P.D. Esta mañana fué liberado el primer <em>custom firmware</em> basado en 3.55 firmado como si fuera legítimo. Éste se puede instalar perfectamente desde un <em>pendrive </em>en cualquier consola. Sony debe mover ficha.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1553/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1553&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2011/01/05/ps3-hackeada-root-key-openps3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>

		<media:content url="http://robleshermoso.files.wordpress.com/2011/01/ps3epicfail.jpg" medium="image">
			<media:title type="html">PS3 EPIC FAIL</media:title>
		</media:content>
	</item>
		<item>
		<title>[Tip] Python: imprimir el traceback</title>
		<link>http://robleshermoso.wordpress.com/2010/12/22/imprimir-traceback-python/</link>
		<comments>http://robleshermoso.wordpress.com/2010/12/22/imprimir-traceback-python/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 17:05:55 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[stringio]]></category>
		<category><![CDATA[traceback]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1546</guid>
		<description><![CDATA[Cuando programamos es habitual encontrarnos con errores que son difíciles de depurar si no tenemos información sobre lo que ha pasado. En Python, lo normal es que de forma automática aparezca el traceback cuando se produce una excepción: Traceback (most recent call last): File "&#60;stdin&#62;", line 1, in &#60;module&#62; NameError: name 'ls' is not defined Hay ocasiones [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1546&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cuando programamos es habitual encontrarnos con errores que son difíciles de depurar si no tenemos información sobre lo que ha pasado.</p>
<p>En Python, lo normal es que de forma automática aparezca el <em>traceback</em> cuando se produce una excepción:</p>
<pre>Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
NameError: name 'ls' is not defined</pre>
<p>Hay ocasiones en los que obtener esta información no es tan trivial.<br />
Un ejemplo común es el desarrollo de servicios webs. En este caso no sirve de nada imprimir por pantalla el error, ya que no queda registrado en ningún sitio.</p>
<p>Para poder obtener el <em>traceback</em> y depurar correctamente el servicio, podemos hacer uso del módulo <em>traceback</em>.</p>
<p>El siguiente <em>codesnippet</em> permite imprimir en el archivo de log el correspondiente traceback:</p>
<p><pre class="brush: python;">

try:

# Código bajo sospecha

....
except:

import traceback
import StringIO
s=StringIO.StringIO()
traceback.print_exc(file=s)
s.seek(0)
msg=s.read()
logging.debug(&quot;TRACEBACK: %s&quot; % msg)

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1546/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1546&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2010/12/22/imprimir-traceback-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial Amazon Route 53</title>
		<link>http://robleshermoso.wordpress.com/2010/12/21/tutorial-amazon-route-53/</link>
		<comments>http://robleshermoso.wordpress.com/2010/12/21/tutorial-amazon-route-53/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 17:32:46 +0000</pubDate>
		<dc:creator>Chema</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[53]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[route]]></category>
		<category><![CDATA[route53]]></category>
		<category><![CDATA[turorial]]></category>

		<guid isPermaLink="false">http://robleshermoso.wordpress.com/?p=1517</guid>
		<description><![CDATA[&#160; ACTUALIZACIÓN: (17/11/2011)  Amazon acaba de anunciar que ha incluido la gestión de Route53 desde la consola de gestión. Sin duda un gran avance que facilita enormemente la gestión DNS. &#160; Amazon Web Services no para de sacar productos interesantes y económicos. Si las bases de datos se volvieron más simples con Amazon RDS, ahora [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1517&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_1538" class="wp-caption alignnone" style="width: 510px"><a href="http://robleshermoso.files.wordpress.com/2010/12/tutorial_route_53.jpg"><img class="size-full wp-image-1538" title="Tutorial Amazon Route 53" src="http://robleshermoso.files.wordpress.com/2010/12/tutorial_route_53.jpg?w=630" alt="Tutorial Amazon Route 53"   /></a><p class="wp-caption-text">Tutorial Amazon Route 53</p></div>
<p>&nbsp;</p>
<p><strong>ACTUALIZACIÓN</strong>: (17/11/2011)  Amazon acaba de anunciar que ha incluido la gestión de Route53 desde la consola de gestión. Sin duda un gran avance que facilita enormemente la gestión DNS.</p>
<p>&nbsp;</p>
<p><a href="http://aws.amazon.com/">Amazon Web Services</a> no para de sacar productos interesantes y económicos. Si las bases de datos se volvieron más simples con <a href="http://aws.amazon.com/rds/">Amazon RDS</a>, ahora &#8220;desaparece&#8221; el problema de la gestión DNS (más bien, se simplifica bastante) con <a href="http://aws.amazon.com/route53/">Amazon Route 53</a>.</p>
<p>Voy a explicar cómo podemos hacer un uso sencillo de <strong>Route 53</strong> para nuestra pequeña web en nube. Vamos a suponer que tenemos corriendo una instancia de EC2 con la IP elástica 123.123.123.123.</p>
<p>A día hoy no se puede gestionar Route 53 desde la consola de AWS. Hay que recurrir a invocar directamente los servicios web mediante cURL.</p>
<p>Como ocurre en muchas ocasiones, la comunidad SL va por delante de las corporaciones y ya existe una utilidad CLI que nos permite operar con Route 53 de una manera más sencilla.</p>
<p>La utilidad se llama <strong>cli53</strong> y ha sido desarrollada por <a href="https://forums.aws.amazon.com/thread.jspa?threadID=56852&amp;tstart=0">bee11149</a>. Lo primero que haremos será instalar tanto la utilidad como sus prerequisitos (<a href="https://github.com/boto/boto">Boto</a> y <a href="http://www.dnspython.org/">dnspython</a>).</p>
<p><pre class="brush: bash;">
git clone git://github.com/boto/boto &amp;&amp; cd boto &amp;&amp; python setup.py install
easy_install dnspython
git clone git://github.com/barnybug/cli53
</pre></p>
<p>En la primera línea instalamos <strong>Boto</strong> (Control de Amazon Web Services para Python).<br />
Luego se instala <strong>dnspython</strong> y por último nos descargamos la utilidad <strong>cli53</strong>.</p>
<p>Para que funcione cli53, debemos establecer dos variables de entorno con nuestros credenciales de acceso a AWS.</p>
<p><pre class="brush: bash;">

export AWS_ACCESS_KEY_ID=&lt;nuestra_clave_id&gt;
export AWS_SECRET_ACCESS_KEY=&lt;nuestra_clave_privada&gt;
cd cli53

</pre></p>
<p>Ya esta preparado el entorno para empezar a usar <strong>cli53</strong>. Lo primero que haremos será crear nuestra <em>hostedzone</em>. Vamos a suponer que nuestro dominio es caramelos.com y queremos poder acceder a la web mediante &#8220;caramelos.com&#8221; y &#8220;www.caramelos.com&#8221;</p>
<p><pre class="brush: bash;">
./cli53.py create caramelos.com
</pre></p>
<p>Si todo va bien, nos debe devolver algo similar a esto:</p>
<p><pre class="brush: bash; highlight: [5,8,13,14,15,16];">
HostedZone:
CallerReference: xxxxxxxx-8efb-4947-yyyy-53489dxxxxxxx
Config:
Comment:
Id: /hostedzone/Z2JZCX7IR3C3O9
Name: caramelos.com.
ChangeInfo:
Status: PENDING
SubmittedAt: 2010-12-21T10:16:05.719Z
Id: /change/C2JH25LA6TOVE9
DelegationSet:
NameServers:
- ns-739.awsdns-28.net
- ns-118.awsdns-14.com
- ns-1414.awsdns-48.org
- ns-1829.awsdns-36.co.uk
</pre></p>
<p>Esta información nos indica que se ha creado correctamente la <em>hostedzone</em> con ID Z2JZCX7IR3C3O9 (línea 5), que esta pendiente de sincronizar (8) y nos da<br />
los servidores DNS a donde debemos apuntar el dominio (13-16).  Ahora debemos de contactar con el registrador de nuestro dominio &#8220;caramelos.com&#8221; y especificar estos servidores DNS.<br />
Lo normal es que dejen establecer entre 2 y 4 servidores. A más servidores, mayor disponibilidad.</p>
<p>Por último, necesitamos crear las entradas DNS para que se pueda acceder a nuestra web. Recordemos que la IP del servidor donde tenemos nuestra web es <strong>123.123.123.123</strong>.  Vamos a crear una entrada tipo A y otra CNAME. En formato BIND sería:</p>
<p>&nbsp;</p>
<p><pre class="brush: bash;">
./cli53.py rrcreate caramelos.com @ A 123.123.123.123 --ttl 3600
./cli53.py rrcreate caramelos.com www CNAME caramelos.com --ttl 3600

</pre></p>
<p>Con la primera linea creamos un registro <strong>A</strong> que mapea nuestro dominio (<strong>caramelos.com</strong>, representado por @) a la IP <strong>123.123.123.123</strong>, mientras que<br />
con la segunda, asociamos el nombre <strong>www.caramelos.com</strong> a <strong>caramelos.com</strong> usando un registro <strong>CNAME</strong>. El parametro TTL (<em>Time to live</em>) sirve para indicar con<br />
qué frecuencia se debería de refrescar la lectura de dicho registro por parte de clientes DNS.</p>
<p>Si todo ha ido bien, después de darle un tiempo para que se sincronice toda la cadena DNS, nuestro navegador web deberia mostrar la página si introducimos<br />
&#8220;<strong>caramelos.com</strong>&#8221; o &#8220;<strong>www.caramelos.com</strong>&#8220;.</p>
<p><a href="http://en.wikipedia.org/wiki/List_of_DNS_record_types">Aquí</a> podéis obtener más información sobre los distintos tipos de registros DNS.<br />
¡A migrar DNS! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/robleshermoso.wordpress.com/1517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/robleshermoso.wordpress.com/1517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/robleshermoso.wordpress.com/1517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/robleshermoso.wordpress.com/1517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/robleshermoso.wordpress.com/1517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/robleshermoso.wordpress.com/1517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/robleshermoso.wordpress.com/1517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/robleshermoso.wordpress.com/1517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/robleshermoso.wordpress.com/1517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/robleshermoso.wordpress.com/1517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/robleshermoso.wordpress.com/1517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/robleshermoso.wordpress.com/1517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/robleshermoso.wordpress.com/1517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/robleshermoso.wordpress.com/1517/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=robleshermoso.wordpress.com&amp;blog=10232557&amp;post=1517&amp;subd=robleshermoso&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://robleshermoso.wordpress.com/2010/12/21/tutorial-amazon-route-53/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9fe4bf7b2222e03187701a5d1ac273d1?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Chema</media:title>
		</media:content>

		<media:content url="http://robleshermoso.files.wordpress.com/2010/12/tutorial_route_53.jpg" medium="image">
			<media:title type="html">Tutorial Amazon Route 53</media:title>
		</media:content>
	</item>
	</channel>
</rss>
