<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>El Blog de Marcelo!</title>
	
	<link>http://blog.marcelofernandez.info</link>
	<description>Blog Informático sobre Programación, Software Libre y/o Open Source, Linux, Python y alguna que otra cosa más...</description>
	<lastBuildDate>Fri, 22 Mar 2013 18:45:18 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ElBlogDeMarcelo" /><feedburner:info uri="elblogdemarcelo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>ElBlogDeMarcelo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FElBlogDeMarcelo" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/ElBlogDeMarcelo" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FElBlogDeMarcelo" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FElBlogDeMarcelo" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FElBlogDeMarcelo" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FElBlogDeMarcelo" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/ElBlogDeMarcelo" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><item>
		<title>Algunos videos de PyCon US 2013</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/tC0Fo_J3Kmw/</link>
		<comments>http://blog.marcelofernandez.info/2013/03/algunos-videos-de-pycon-us-2013/#comments</comments>
		<pubDate>Thu, 21 Mar 2013 12:29:11 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1281</guid>
		<description><![CDATA[Ya están subiéndose al sitio PyVideo los videos de la PyCon US 2013 que está cerrando hoy. Algunas de las charlas que quería compartir, de temas que son particularmente de mi interés, son: PyPy without the GIL &#8211; Armin Rigo: PyPy has a version without the Global Interpreter Lock (GIL). It can run multiple threads concurrently. [...]]]></description>
				<content:encoded><![CDATA[<p>Ya están subiéndose al sitio <a title="Python related video indexed so you can find it" href="http://pyvideo.org/" target="_blank">PyVideo</a> los videos de la <a title="PyCon US 2013" href="https://us.pycon.org/2013/" target="_blank">PyCon US 2013</a> que está cerrando hoy. Algunas de las charlas que quería compartir, de temas que son particularmente de mi interés, son:</p>
<p><strong><a title="PyPy without the GIL" href="http://pyvideo.org/video/1739/pypy-without-the-gil" target="_blank">PyPy without the GIL &#8211; Armin Rigo</a></strong>:<br />
PyPy has a version without the Global Interpreter Lock (GIL). It can run multiple threads concurrently. But the real benefit is that you have other, new ways of using all your cores. In this talk I will describe how it is possible (STM) and then focus on some of these new opportunities, e.g. show how we used multiple cores in a single really big program without adding thread locks everywhere.<br />
<iframe src="http://www.youtube.com/embed/Q9wf63flICs" height="390" width="640" allowfullscreen="" frameborder="0"></iframe></p>
<p><strong><a title="Python Profiling Talk" href="http://pyvideo.org/video/1770/python-profiling" target="_blank">Python Profiling &#8211; Amjith Ramanujam</a></strong>:<br />
This talk will give a tour of different profiling techniques available for Python applications. We&#8217;ll cover specific modules in Python for doing function profiling and line level profiling. We&#8217;ll show the short comings of such mechanisms in production and discuss how to do sampled profiling of specific functions. We&#8217;ll finish with statistical profilers that use thread stack interrogation.<br />
<iframe src="http://www.youtube.com/embed/QJwVYlDzAXs" height="390" width="640" allowfullscreen="" frameborder="0"></iframe></p>
<p><strong><a title="Making Apache suck less for hosting Python web apps" href="http://pyvideo.org/video/1773/making-apache-suck-less-for-hosting-python-web-ap" target="_blank">Making Apache suck less for hosting Python web applications &#8211; Graham Dumpleton</a></strong>:<br />
It is not hard to find developers who will tell you that Apache sucks for running Python web applications. Is there a valid basis to such claims or have they simply been misguided by the views of others? This talk will endeavor to shine a light on the realities of and limitations in working with Apache, as well as the challenges in implementing the mod_wsgi module for Apache.<br />
<iframe src="http://www.youtube.com/embed/k6Erh7oHvns" height="390" width="640" allowfullscreen="" frameborder="0"></iframe></p>
<p><strong><a title="Using futures for async GUI programming in Python 3.3" href="http://pyvideo.org/video/1762/using-futures-for-async-gui-programming-in-python" target="_blank">Using futures for async GUI programming in Python 3.3 &#8211; Dino Viehland</a></strong>:<br />
In Python 3.2 a new feature was added for concurrent programming &#8211; futures. In Python 3.3 generators have been extended to allow returning from a generator with a value. In this talk we&#8217;ll show how these features can be combined to create a rich and easy to use asynchronous programming model which can be used for creating highly responsive GUI applications or easy async programming.<br />
<iframe src="http://www.youtube.com/embed/oJQdX_w1vXY" height="390" width="640" allowfullscreen="" frameborder="0"></iframe></p>
<p><strong><a title="Kivy Talk" href="http://pyvideo.org/video/1701/kivy-building-gui-and-mobile-apps-with-python" target="_blank">Kivy: Building GUI and Mobile apps with Python &#8211; Mathieu Virbel / Thomas Hansen</a></strong>:<br />
This talk will introduce the Kivy project (http://kivy.org). Kivy’s mission is to make building graphical user interfaces on any device fun, efficient, and pythonic.<br />
The talk will focus on giving attendees an overview of how they can use kivy to build exiting UIs and mobile apps.<br />
<iframe src="http://www.youtube.com/embed/yPWj6k5MRak?feature=player_embedded" height="360" width="640" allowfullscreen="" frameborder="0"></iframe></p>
<p><strong><a href="http://pyvideo.org/video/1798/make-more-responsive-web-applications-with-socket" title="Make More Responsive Web Applications with SocketIO and gevent" target="_blank">Make More Responsive Web Applications with SocketIO and gevent &#8211; Luke Sneeringer</a></strong>:<br />
An explanation of how to implement a socket.io server in Python to serve websocket requests from browsers.<br />
<iframe width="640" height="360" src="http://www.youtube.com/embed/TH-ZCuOdrQE?feature=player_embedded" frameborder="0" allowfullscreen></iframe></p>
<p>El resto de los videos del evento, acá: <a href="http://pyvideo.org/category/33/pycon-us-2013">http://pyvideo.org/category/33/pycon-us-2013</a></p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/tC0Fo_J3Kmw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2013/03/algunos-videos-de-pycon-us-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2013/03/algunos-videos-de-pycon-us-2013/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=algunos-videos-de-pycon-us-2013</feedburner:origLink></item>
		<item>
		<title>PyConAr 2012: Charla sobre el protocolo SPDY – Video</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/qp166ySPnDI/</link>
		<comments>http://blog.marcelofernandez.info/2013/01/pyconar-2012-charla-sobre-el-protocolo-spdy-video/#comments</comments>
		<pubDate>Wed, 02 Jan 2013 18:53:28 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1260</guid>
		<description><![CDATA[Con el nuevo año, aparecieron en su totalidad los videos de la PyConAr 2012 subidos a Youtube por Mariano Reingart, el Coordinador del evento. Dejo en este post el mío, no sin un dejo de &#8220;vergüencita&#8221;, je&#8230; (encima todavía no lo vi): Cualquier duda me pueden consultar o comentar este mismo post. Espero próximamente escribir [...]]]></description>
				<content:encoded><![CDATA[<p>Con el nuevo año, aparecieron en su totalidad los <a title="Videos PyConAr 2012" href="http://www.youtube.com/user/mreingart/videos" target="_blank">videos de la PyConAr 2012</a> subidos a Youtube por Mariano Reingart, el Coordinador del evento.</p>
<p>Dejo en este post el mío, no sin un dejo de &#8220;vergüencita&#8221;, je&#8230; (encima todavía no lo vi):</p>
<p><iframe src="http://www.youtube.com/embed/BCB2Vbw-XJQ" height="338" width="600" allowfullscreen="" frameborder="0"></iframe></p>
<p>Cualquier duda me pueden consultar o comentar este mismo post. Espero próximamente escribir más en profundidad de ciertos aspectos que me quedaron afuera de la charla.</p>
<p>¡Saludos!</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/qp166ySPnDI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2013/01/pyconar-2012-charla-sobre-el-protocolo-spdy-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2013/01/pyconar-2012-charla-sobre-el-protocolo-spdy-video/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pyconar-2012-charla-sobre-el-protocolo-spdy-video</feedburner:origLink></item>
		<item>
		<title>PyConAr 2012: Charla sobre el protocolo SPDY – Slides</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/zoJitniex-0/</link>
		<comments>http://blog.marcelofernandez.info/2012/11/pyconar-2012-charla-sobre-el-protocolo-spdy-slides/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 16:08:12 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1232</guid>
		<description><![CDATA[Terminó la PyCon Argentina 2012, y con ella vienen semanas menos movidas (espero). Este post es para agradecer a la organización, Mariano, Juan BC, y a todos aquellos que concurrieron y compartieron conmigo este evento que tanto nos gusta a los fanáticos de este lenguaje de programación. Además, tuve el placer de dar una charla [...]]]></description>
				<content:encoded><![CDATA[<p><a title="PyCon Argentina 2012" href="http://ar.pycon.org/2012/" target="_blank"><img class="size-full wp-image-1234 aligncenter" title="PyCon Argentina 2012" src="http://blog.marcelofernandez.info/wp-content/uploads/2012/11/header_pyconar2012.png" alt="PyCon Argentina 2012" width="400" height="121" /></a></p>
<p style="text-align: left;"><a href="http://blog.marcelofernandez.info/wp-content/uploads/2012/11/spdy.png"><img class="alignright size-thumbnail wp-image-1240" title="Speedy Gonzalez - Spdy protocol supporter :-)" src="http://blog.marcelofernandez.info/wp-content/uploads/2012/11/spdy-150x150.png" alt="" width="150" height="150" /></a>Terminó la <a title="PyCon Argentina 2012" href="http://ar.pycon.org/2012/" target="_blank">PyCon Argentina 2012</a>, y con ella vienen semanas menos movidas (espero). Este post es para agradecer a la organización, Mariano, Juan BC, y a todos aquellos que concurrieron y compartieron conmigo este evento que tanto nos gusta a los fanáticos de este lenguaje de programación.</p>
<p style="text-align: left;">Además, tuve el placer de dar una charla introductoria del protocolo SPDY, que pretende reemplazar a HTTP 1.1, y que muy probablemente ya estés usando sin darte cuenta. <img src='http://blog.marcelofernandez.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>En definitiva, los slides de mi charla, &#8220;<strong>Introducción a SPDY, ¿futuro HTTP 2.0?</strong>&#8221; se pueden ver más abajo en esta página, y también se pueden descargar en formato <a title="Charla SPDY en formato Open Document" href="http://www.marcelofernandez.info/charlas/SPDY.odp">ODP</a> y <a title="Charla SPDY en formato PDF" href="http://www.marcelofernandez.info/charlas/SPDY.pdf">PDF</a>.<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/15251128" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="600" height="485"></iframe></p>
<p>En cuanto tenga el video, lo pondré a disposición también.</p>
<p>¡Muchas Gracias PyConAr!</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/zoJitniex-0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2012/11/pyconar-2012-charla-sobre-el-protocolo-spdy-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2012/11/pyconar-2012-charla-sobre-el-protocolo-spdy-slides/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pyconar-2012-charla-sobre-el-protocolo-spdy-slides</feedburner:origLink></item>
		<item>
		<title>Investigando el protocolo SPDY</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/rZlTk1f78cg/</link>
		<comments>http://blog.marcelofernandez.info/2012/07/investigando-el-protocolo-spdy/#comments</comments>
		<pubDate>Sun, 15 Jul 2012 15:57:22 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1187</guid>
		<description><![CDATA[Un tiempo atrás venía buscando áreas de investigación para estudiar, y me encontré con una interesante propuesta de Google, de renovar el ya &#8220;viejito pero cumplidor&#8221; protocolo HTTP 1.1, llamada SPDY (no sin algo de sentido comercial, se nota). De ahí en adelante (dado que el desarrollo es abierto a la discusión en general) me [...]]]></description>
				<content:encoded><![CDATA[<p>Un tiempo atrás venía buscando áreas de investigación para estudiar, y me encontré con una interesante propuesta de Google, de renovar el ya &#8220;viejito pero cumplidor&#8221; protocolo <a title="RFC 2616: HTTP/1.1" href="http://tools.ietf.org/html/rfc2616" target="_blank">HTTP 1.1</a>, llamada <a title="SPDY Whitepaper" href="http://dev.chromium.org/spdy/spdy-whitepaper" target="_blank">SPDY</a> (no sin algo de sentido comercial, se nota).</p>
<p>De ahí en adelante (dado que el desarrollo <a title="SPDY-Dev Group" href="http://groups.google.com/group/spdy-dev" target="_blank">es abierto</a> a la discusión en general) me dediqué <a title="SPDY v3 Protocol Specification" href="http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3" target="_blank">a profundizar en él</a>, entender sus ventajas (lo cual implica entender algunas cosas feas de HTTP 1.1 y la Web de hoy en día), limitaciones, y cosas que faltan implementar. Me apasionó el tema, tanto es así que lo propuse como tema de Tesis para mis estudios y hasta ahora vengo bien (bien con las promesas a mi Director, claro está <img src='http://blog.marcelofernandez.info/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ).</p>
<p>Mi idea era con este post abrir una serie de artículos para documentar lo que voy aprendiendo sobre este protocolo, que cada vez tiene más <em>hype</em> en la industria, tanto que <a title="Twitter adopta SPDY" href="http://www.genbeta.com/redes-sociales/twitter-adopta-spdy-por-defecto-en-los-navegadores-que-lo-soportan" target="_blank">Twitter</a> y Google ya lo implementan en sus servidores (<a title="Facebook HTTP2 Expression of Interest" href="http://lists.w3.org/Archives/Public/ietf-http-wg/2012JulSep/0251.html" target="_blank">Facebook está en camino</a>), mientras que Chrome/Chromium y Firefox (<a title="Opera SPDY release" href="http://dev.opera.com/articles/view/opera-spdy-build/" target="_blank">Opera se está sumando</a>) también lo usan si está disponible.</p>
<p>Personalmente me puse a probarlo y a tratar de implementarlo usando Python, <a title="Python-Spdy on Github" href="https://github.com/marcelofernandez/python-spdy" target="_blank">forkeando un proyecto</a> que ya existía y arreglando los problemas más obvios que encontré. Todavía tengo todo el código &#8220;atado con alambre&#8221;, no bien testeado, y no estoy seguro si funciona del todo (jua!), pero de ahora en más voy a tratar de mejorarlo y mantenerlo mientras pueda, además de dejar algún rastro por aquí y por mi trabajo de investigación formal.</p>
<p>En resumen, el IETF draft de SPDY <a title="IETF Draft - SDPY v3" href="http://tools.ietf.org/html/draft-mbelshe-httpbis-spdy-00" target="_blank">está disponible acá</a>; tanto parece estar movilizando este protocolo, que el <a title="HTTP 2 Proposals" href="http://trac.tools.ietf.org/wg/httpbis/trac/wiki/Http2Proposals" target="_blank">HTTPbis Working Group</a>, encargado de definir un futuro HTTP 2.0, se está moviendo desde hace un tiempo para discutir las propuestas de SPDY. Y esto recién empieza&#8230;</p>
<p>Les dejo un video del último Google IO 2012 que es un excelente acercamiento técnico al tema:<br />
<iframe src="http://www.youtube.com/embed/zN5MYf8FtN0" frameborder="0" width="560" height="315"></iframe></p>
<p>Saludos</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/rZlTk1f78cg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2012/07/investigando-el-protocolo-spdy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2012/07/investigando-el-protocolo-spdy/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=investigando-el-protocolo-spdy</feedburner:origLink></item>
		<item>
		<title>Instalando DD-WRT en un TP-Link TL-WR941ND</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/5wpa7iVK0_M/</link>
		<comments>http://blog.marcelofernandez.info/2012/06/instalando-dd-wrt-en-un-tp-link-tl-wr941nd/#comments</comments>
		<pubDate>Sat, 02 Jun 2012 08:34:56 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1167</guid>
		<description><![CDATA[Uno compra un Router/Access Point estos días con la esperanza de que el firmware (software en el equipo) que tiene cargado sea eficiente, no tenga bugs (o al menos tenga actualizaciones periódicas del fabricante que los corrija), e incorpore muchas capacidades interesantes para sacarle el jugo, como el uso de conexiones VPN, priorización de tráfico, [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.tp-link.com/ar/products/details/?model=TL-WR941ND"><img class="alignright size-medium wp-image-1169" title="TP-Link TL-WR941ND" src="http://blog.marcelofernandez.info/wp-content/uploads/2012/06/TL-WR941ND-01-300x180.jpg" alt="" width="300" height="180" /></a>Uno compra un Router/Access Point estos días con la esperanza de que el firmware (software en el equipo) que tiene cargado sea eficiente, no tenga bugs (o al menos tenga actualizaciones periódicas del fabricante que los corrija), e incorpore muchas capacidades interesantes para sacarle el jugo, como el uso de conexiones VPN, priorización de tráfico, poder regular el poder de la antena, gráficos/estadísticas de uso de la conexión, y muchas &#8220;cositas&#8221; que a nosotros (la gente técnica) nos gusta aprovechar del dispositivo, todo por el mismo precio.</p>
<p>Pero lo más común es que suceda todo lo contrario. Mi router <a href="http://www.tp-link.com/ar/products/details/?model=TL-WR941ND">TP-Link TL-WR941ND</a>, apenas lo compré, le actualicé el firmware oficial, y de ahí en más, a los dos o tres días de estar prendido, mágicamente &#8220;se cae&#8221;, dejando de responder, acudiendo obligatoriamente a apagar y encenderlo nuevamente. Ni hablar de <a href="http://www.tp-link.com/ar/support/download/?model=TL-WR941ND&amp;version=V3#tbl_j">actualizaciones posteriores</a>, ni funcionalidades &#8220;copadas&#8221;. Casi que me sentí estafado; siendo previo poseedor de un mítico <a href="http://es.wikipedia.org/wiki/WRT54G">Linksys WRT54G</a>, lo cambié por el TP-Link que es de norma 802.11N, por ende prometía más velocidad y alcance en mi red.</p>
<p>Pasaron unos meses, hasta que en el <a href="http://flisol.info/FLISOL2011/Argentina/Lujan">FLISOL Luján de este año</a>, <a href="http://www.linkedin.com/pub/efraim-wainerman/b/3b5/3b5">Efraim</a> me instaló en el Linksys un firmware libre, <a href="http://www.dd-wrt.com/site/content/about">basado en Linux</a>, llamado <a href="http://www.dd-wrt.com/">DD-WRT</a> que funciona en muchísimos modelos de Access Points/Routers (más de 200 según la página, aunque seguro son más). De antemano sabía de la existencia de estos proyectos/distros de Linux, aunque ignoraba lo bien logrado que estaba y las muchísimas capacidades que le agregaba automáticamente al tenerlo instalado.</p>
<p>Es por todo eso que tenía pendiente instalar DD-WRT en mi TP-Link para liberarlo&#8230; hasta hoy: migración exitosa.</p>
<p>Puedo comentar que:</p>
<ul>
<li>El proceso de instalación tiene bastantes particularidades, dependiendo mucho del dispositivo y de la versión del hardware que se tiene; sí, dentro de un mismo dispositivo, hay como diferentes &#8220;releases&#8221; o versiones del hardware (1.0, 2.0, 3.0&#8230;), donde el fabricante agrega/saca características, y puede influir tranquilamente en la versión del firmware a instalar.</li>
<li>Por lo anterior, sugiero encarecidamente<a href="http://www.dd-wrt.com/wiki/index.php/Installation"> leer toda la documentación</a>, foros y wiki disponible, además de tomar todas las precauciones del caso, ya que un error se puede pagar tirando el router al tacho de basura.</li>
<li>Yendo más a mi situación particular, el router TL-WR941ND figura en el <a href="http://www.dd-wrt.com/site/support/router-database">Router Database del proyecto</a>, y dice que funciona con la versión 15778 del firmware dd-wrt (que entre otras cosas, ¡parece ser del 2010!). Además está dentro de la página de <a href="http://www.dd-wrt.com/wiki/index.php/Atheros">dispositivos con hardware Atheros soportado</a>.</li>
<li>Yo tengo la versión 3.6 del hardware, lo compré hace algunos meses nomás en Galería Jardín, así que es bastante probable que todavía y por un tiempo haya versiones iguales dando vueltas.</li>
<li>Lo único que hice fue buscar, en foros, como documentación, <a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=40041&amp;start=345">y encontré que el &#8220;router database&#8221; estaba desactualizado</a>, y había una versión mucho más actualizada y probada que no estaba linkeada en la página (está <a href="ftp://dd-wrt.com/others/eko/BrainSlayer-V24-preSP2/2012/03-19-12-r18777/tplink_tl-wr941ndv3/">en este FTP</a>).</li>
<li>La parte más fácil fue el upgrade en sí: sólo tuve que ir a &#8220;Upload firmware&#8221; en el administrador web del TP-Link, subí el archivo &#8220;factory-to-ddwrt.bin&#8221; que bajé del FTP, apagar/prender y listo. <img src='http://blog.marcelofernandez.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>Ahora tengo muchísimas más opciones y potencia que antes en mi equipo y la casi certeza de que va a funcionar correctamente. En este mismo FTP también se van subiendo periódicamente las versiones nuevas del dd-wrt (del 2012), separada por equipo/versión de hardware: <a href="ftp://dd-wrt.com/others/eko/BrainSlayer-V24-preSP2/2012/">ftp://dd-wrt.com/others/eko/BrainSlayer-V24-preSP2/2012/</a></p>
<p>A disfrutar del Software Libre se ha dicho. <img src='http://blog.marcelofernandez.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>¡Saludos!</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/5wpa7iVK0_M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2012/06/instalando-dd-wrt-en-un-tp-link-tl-wr941nd/feed/</wfw:commentRss>
		<slash:comments>86</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2012/06/instalando-dd-wrt-en-un-tp-link-tl-wr941nd/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=instalando-dd-wrt-en-un-tp-link-tl-wr941nd</feedburner:origLink></item>
		<item>
		<title>Jornada de Python en Luján: PyDay Luján 2012</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/LzV7P2xt0x4/</link>
		<comments>http://blog.marcelofernandez.info/2012/03/jornada-de-python-en-lujan-pyday-lujan-2012/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 13:29:04 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1148</guid>
		<description><![CDATA[PyAr, el grupo de usuarios de Python Argentina, está orgulloso de presentar una nueva Jornada del lenguaje de programación Python 2012 (PyDay) en la Universidad Nacional de Luján, el día Sábado 5 de Mayo de 2012 de 11Hs a 18Hs. Durante el Python Day se darán pequeños cursos y charlas relacionadas a este lenguaje, creando un espacio [...]]]></description>
				<content:encoded><![CDATA[<p><a title="Página del Evento: PyDay Luján 2012" href="http://www.pyday.com.ar/lujan2012" target="_blank"><img class="alignright size-full wp-image-1154" style="border-style: initial; border-color: initial;" title="python_lujan" src="http://blog.marcelofernandez.info/wp-content/uploads/2012/03/python_lujan.png" alt="PyDay Luján 2012" width="100" height="139" /></a> <a title="PyAr" href="http://www.python.org.ar" target="_blank">PyAr</a>, el grupo de usuarios de Python Argentina, está orgulloso de presentar una nueva Jornada del lenguaje de programación <a title="Lenguaje de Programación Python" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a> 2012 (<a title="PyDay Lujan 2012" href="http://www.pyday.com.ar/lujan2012/" target="_blank">PyDay</a>) en la <a title="Universidad Nacional de Luján" href="http://www.unlu.edu.ar" target="_blank">Universidad Nacional de Luján</a>, el día Sábado 5 de Mayo de 2012 de 11Hs a 18Hs.</p>
<p>Durante el Python Day se darán pequeños cursos y charlas relacionadas a este lenguaje, creando un espacio en donde cualquier persona interesada pueda acercarse para preguntar, aprender y experimentar con esta herramienta.</p>
<p>Python es un lenguaje moderno, sencillo de aprender pero muy poderoso en cuanto a la cantidad de aplicaciones en las que es usado profesional y académicamente: en sitios web, en juegos, aplicaciones de escritorio y en scripting en general, etc&#8230;</p>
<p>El publico al que nos dirigimos es de todos los niveles, pero estamos muy interesados en acercar Python a quienes solo lo conocen de oído o directamente no saben de que tipo de lenguaje se trata. Tendremos charlas especiales para ellos.</p>
<p>Con esta misma invitación damos por iniciado el Call For Charlas; aquellos interesados ya pueden proponer nuevas charlas y son bienvenidos los colaboradores y empresas/entidades interesadas en participar y auspiciar la jornada.</p>
<p>Cualquier duda o consulta, puede visitar <a title="PyDay Luján 2012" href="http://www.pyday.com.ar/lujan2012/" target="_blank">la página del evento</a>, o contactarse vía mail a <a href="mailto:pydaylujan@gmail.com">pydaylujan@gmail.com</a>.</p>
<p>El encuentro se llevará a cabo en el pabellón 400 de la sede central de la UNLu (ver página <a title="Cómo llegar a la UNLu" href="http://www.unlux.com.ar/como-llegar/" target="_blank">Cómo Llegar</a>)</p>
<p>La entrada libre y gratuita (previa inscripción web), ¡los esperamos!</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/LzV7P2xt0x4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2012/03/jornada-de-python-en-lujan-pyday-lujan-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2012/03/jornada-de-python-en-lujan-pyday-lujan-2012/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=jornada-de-python-en-lujan-pyday-lujan-2012</feedburner:origLink></item>
		<item>
		<title>Cursos Asterisk 2011</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/qBnoVPl4WBE/</link>
		<comments>http://blog.marcelofernandez.info/2011/03/cursos-asterisk/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 02:18:00 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[misceláneos]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1134</guid>
		<description><![CDATA[Hola, paso a dejar un lindo chivo aviso sobre cursos de Asterisk que están armando un grupo de gente conocida y amiga, en su versión 2011: Bitsense, empresa dedicada a la implementación de soluciones telefónicas, dará comienzo a su curso de capacitación de Telefonía IP denominado BiaC (Bitsense Initial Asterisk Course) edición 2011, el mismo [...]]]></description>
				<content:encoded><![CDATA[<p>Hola, paso a dejar un lindo <del>chivo</del> aviso sobre cursos de <a href="http://www.asterisk.org/" target="_blank">Asterisk</a> que están armando un grupo de gente conocida y amiga, en su versión 2011:</p>
<p><a href="http://www.bitsense.com.ar" target="_blank">Bitsense</a>, empresa dedicada a la implementación de soluciones telefónicas, dará comienzo a su curso de capacitación de Telefonía IP denominado BiaC (Bitsense Initial Asterisk Course) edición 2011, el mismo es el primer curso en la Argentina dictado por dos instructores certificados dCAP (Digium-certified Asterisk Professional) junto con el apoyo de certificados Cisco y Juniper. Este curso está orientado a brindarle las herramientas y conocimientos necesarios para implementar una infreastructura de Telefonía IP basado en Asterisk desde su inicio.</p>
<p>Para solicitar mas informacion envienos un mail a <a href="mailto:capacitacion@bitsense.com.ar" target="_blank">capacitacion@bitsense.com.ar</a> y un representante se comunicará con usted o llamenos al telefono 5353.9858 (opción 2).</p>
<p>Le informamos también que referenciando esta publicación (si, ¡este blog!) usted accederá a un descuento especial.</p>
<p><a href="http://www.bitsense.com.ar/cursos/biac/" target="_blank">http://www.bitsense.com.ar/cursos/biac/</a></p>
<p>Saludos</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/qBnoVPl4WBE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2011/03/cursos-asterisk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2011/03/cursos-asterisk/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=cursos-asterisk</feedburner:origLink></item>
		<item>
		<title>Estableciendo conexiones HTTPS “bien seguras” en Python</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/X1vhsPeA7Ws/</link>
		<comments>http://blog.marcelofernandez.info/2011/02/estableciendo-conexiones-https-bien-seguras-en-python/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 19:45:55 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ubuntu-ar]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1112</guid>
		<description><![CDATA[Hace unos días que tenía pendiente colgar esto acá, ya que a alguien en PyAr le fue útil. HTTPS es la manera de establecer conexiones HTTP pero seguras, en el sentido de que previo al diálogo HTTP estándar pero luego de establecerse la conexión TCP contra el servidor, se negocia entre los participantes una conexión/sesión [...]]]></description>
				<content:encoded><![CDATA[<p>Hace unos días que tenía pendiente colgar esto acá, ya que a alguien en <a href="http://www.python.org.ar" target="_blank">PyAr</a> <a href="http://comments.gmane.org/gmane.org.user-groups.python.argentina/44953" target="_blank">le fue útil</a>.</p>
<p><a href="http://es.wikipedia.org/wiki/Https" target="_blank">HTTPS</a> es la manera de establecer conexiones HTTP pero <em>seguras</em>, en el sentido de que previo al diálogo HTTP estándar pero luego de establecerse la conexión TCP contra el servidor, se negocia entre los participantes una conexión/sesión &#8220;especial&#8221; entre ambos.  Allí se intercambian certificados con el fin de autenticar contra quién se &#8220;está hablando&#8221;, para luego, si hubo éxito en la dicha comprobación, encriptar (o no) todo lo que va para el otro lado, tanto del Servidor al Cliente (generalmente un navegador), como del Cliente al Servidor.</p>
<p>Todo eso forma parte de SSL 3.0 (hoy <a href="http://es.wikipedia.org/wiki/Transport_Layer_Security" target="_blank">TLS 1.0</a>), y si bien se puede utilizar para cualquier conexión TCP (SMTP, IMAP, etc., lo pueden usar también), su uso más común se da cuando uno entra a su casilla de Webmail o su cuenta del Banco desde el navegador;  lo que sucede allí es que nuestro navegador autentica al Servidor, y si todo va bien nos muestra el famoso &#8220;candadito&#8221; e informa que la sesión &#8220;es segura&#8221;. Ahora bien, en esos casos, el Banco o Webmail no nos autentica a nosotros como Cliente y deja que cualquiera se conecte a su página, ya que eso requiere varios pasos más (sería realmente engorroso que sea obligatorio).</p>
<p>Sin embargo, en nuestra vida de programadores nos solemos encontrar con necesidades del entorno que nos obliguen a esta situación un tanto extrema y bastante más segura: que tanto el Cliente que desarrollamos autentique al Servidor como que el Servidor autentique al Cliente, amén de que la conexión muy probablemente deberá estar encriptada. <strong>Esto nos permitirá asegurarnos que los Clientes (software) que se conecten a nuestro Servidor sean únicamente quienes queremos que sean</strong> (o casi).</p>
<p>Python, dentro del módulo <a href="http://docs.python.org/library/httplib.html" target="_blank">httplib</a> nos provee de la clase <strong>HTTPSConnection</strong>, que maneja y nos abstrae en varias de estas cuestiones de SSL/TLS y nos deja trabajar a nivel HTTP (una capa más arriba). Lo que hay que observar bien (y que recién en la versión 2.7 de la documentación apareció en rojo), es que esta clase aún cuando uno le puede pasar como parámetro los paths a certificados, <strong>en realidad no hace ninguna comprobación de validez del certificado que el Servidor exporta</strong>. Con lo cual, hay un potencial problema: que nuestro cliente mande los datos a cualquier lado menos a nuestro Servidor de confianza.</p>
<p>¿Y cómo se fuerza a que nuestro programa Cliente chequee el certificado del Servidor? Armé esta clase que extiende sólo lo necesario a HTTPSConnection, que funciona en Python 2.6.x y que me permite hacer eso.</p>
<p>Le agregué un ejemplo en la llamada a __main__ para mostrar cómo se usa:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;">#-*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">socket</span>
<span style="color: #ff7700;font-weight:bold;">import</span> ssl
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">httplib</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> HTTPSClientAuthConnection<span style="color: black;">&#40;</span><span style="color: #dc143c;">httplib</span>.<span style="color: black;">HTTPSConnection</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot; Class to make a HTTPS connection, with support for full client-based
        SSL Authentication.
    &quot;&quot;&quot;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> host<span style="color: #66cc66;">,</span> port<span style="color: #66cc66;">,</span> key_file<span style="color: #66cc66;">,</span> cert_file<span style="color: #66cc66;">,</span> ca_file<span style="color: #66cc66;">,</span> timeout<span style="color: #66cc66;">=</span><span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
        <span style="color: #dc143c;">httplib</span>.<span style="color: black;">HTTPSConnection</span>.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> host<span style="color: #66cc66;">,</span> key_file<span style="color: #66cc66;">=</span>key_file<span style="color: #66cc66;">,</span>
                                                   cert_file<span style="color: #66cc66;">=</span>cert_file<span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">key_file</span> <span style="color: #66cc66;">=</span> key_file
        <span style="color: #008000;">self</span>.<span style="color: black;">cert_file</span> <span style="color: #66cc66;">=</span> cert_file
        <span style="color: #008000;">self</span>.<span style="color: black;">ca_file</span> <span style="color: #66cc66;">=</span> ca_file
        <span style="color: #008000;">self</span>.<span style="color: black;">timeout</span> <span style="color: #66cc66;">=</span> timeout
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> connect<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot; Connect to a host on a given (SSL) port.
            If ca_file is pointing somewhere, use it to check Server Certificate.
&nbsp;
            Redefined/copied and extended from httplib.py:1105 (Python 2.6.x).
            This is needed to pass cert_reqs=ssl.CERT_REQUIRED as parameter
            to ssl.wrap_socket(), which forces SSL to check server certificate
            against our client certificate.
        &quot;&quot;&quot;</span>
        sock <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">socket</span>.<span style="color: black;">create_connection</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">host</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">port</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">timeout</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>._tunnel_host:
            <span style="color: #008000;">self</span>.<span style="color: black;">sock</span> <span style="color: #66cc66;">=</span> sock
            <span style="color: #008000;">self</span>._tunnel<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;"># If there's no CA File, don't force Server Certificate Check</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">ca_file</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">sock</span> <span style="color: #66cc66;">=</span> ssl.<span style="color: black;">wrap_socket</span><span style="color: black;">&#40;</span>sock<span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">key_file</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">cert_file</span><span style="color: #66cc66;">,</span>
                        ca_certs<span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">ca_file</span><span style="color: #66cc66;">,</span> cert_reqs<span style="color: #66cc66;">=</span>ssl.<span style="color: black;">CERT_REQUIRED</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">sock</span> <span style="color: #66cc66;">=</span> ssl.<span style="color: black;">wrap_socket</span><span style="color: black;">&#40;</span>sock<span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">key_file</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">cert_file</span><span style="color: #66cc66;">,</span>
                                              cert_reqs<span style="color: #66cc66;">=</span>ssl.<span style="color: black;">CERT_NONE</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'__main__'</span>:
    <span style="color: #808080; font-style: italic;"># Little test-case of our class</span>
    <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">!=</span> <span style="color: #ff4500;">6</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'usage: ./https_auth_handler.py host port key_file cert_file ca_file'</span>
        <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        host<span style="color: #66cc66;">,</span> port<span style="color: #66cc66;">,</span> key_file<span style="color: #66cc66;">,</span> cert_file<span style="color: #66cc66;">,</span> ca_file <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:<span style="color: black;">&#93;</span>
    conn <span style="color: #66cc66;">=</span> HTTPSClientAuthConnection<span style="color: black;">&#40;</span>host<span style="color: #66cc66;">,</span> port<span style="color: #66cc66;">,</span> key_file<span style="color: #66cc66;">=</span>key_file<span style="color: #66cc66;">,</span>
                                           cert_file<span style="color: #66cc66;">=</span>cert_file<span style="color: #66cc66;">,</span> ca_file<span style="color: #66cc66;">=</span>ca_file<span style="color: black;">&#41;</span>
    conn.<span style="color: black;">request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'GET'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'/'</span><span style="color: black;">&#41;</span>
    response <span style="color: #66cc66;">=</span> conn.<span style="color: black;">getresponse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> response.<span style="color: black;">status</span><span style="color: #66cc66;">,</span> response.<span style="color: black;">reason</span>
    data <span style="color: #66cc66;">=</span> response.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> data
    conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>En cuanto a la generación de las claves de Cliente, Servidor y CA <a href="http://www.google.com.ar/search?q=openssl+certificate+client+server+creation" target="_blank">hay unos cuantos artículos</a> y es relativamente sencillo una vez que se entiende qué se está haciendo. Por otra parte que en estos casos es muy común que el Servidor exija que el Cliente si o sí envíe su certificado o sino la conexión se deberá caer; esto en el caso del Servidor Apache está <a href="http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html#allclients" target="_blank">bien documentado</a>.</p>
<p>Entiendo que en Python 3.2 esto está resuelto en la misma API standard de Python (en su momento abrí <a href="http://bugs.python.org/issue3466" target="_blank">un ticket similar</a> para usar esto con urllib2, que incluye cosas importantes como el manejo de cookies, por ejemplo), y comentaron eso.</p>
<p>Según me dijeron en PyAr, es casi seguro que este ejemplo no funcione en Python 2.7, así que en un futuro no muy lejano espero poder adaptar este código a dicha versión y seguramente lo estaré subiendo en esta página.</p>
<p>Saludos</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/X1vhsPeA7Ws" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2011/02/estableciendo-conexiones-https-bien-seguras-en-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2011/02/estableciendo-conexiones-https-bien-seguras-en-python/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=estableciendo-conexiones-https-bien-seguras-en-python</feedburner:origLink></item>
		<item>
		<title>Virtualizando sólo una partición de una máquina física</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/HFMA0FTdCqY/</link>
		<comments>http://blog.marcelofernandez.info/2011/01/virtualizando-solo-una-particion-de-una-maquina-fisica/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 00:26:20 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[ubuntu-ar]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1059</guid>
		<description><![CDATA[Hace poquito un amigo me contó que estuvo leyendo el post anterior de Consolidación y &#8220;Shrinking&#8221; de discos físicos para pasarlos a una máquina virtual, pero tenía un pequeño obstáculo relacionado con el espacio en disco necesario, que más o menos era así: Quería consolidar un disco real de 80 GB que tiene XP instalado [...]]]></description>
				<content:encoded><![CDATA[<p>Hace poquito un amigo me contó que estuvo leyendo <a href="http://blog.marcelofernandez.info/2010/08/achicando-imagenes-de-maquinas-virtuales-kvm-qcow2/" target="_blank">el post anterior</a> de Consolidación y &#8220;Shrinking&#8221; de discos físicos para pasarlos a una máquina virtual, pero tenía un pequeño obstáculo relacionado con el espacio en disco necesario, que más o menos era así:</p>
<blockquote><p>Quería consolidar un disco real de 80 GB que tiene XP instalado en su C:, pero en total el disco tiene 4 particiones (primarias). Sólo me interesaba el disco C:, con lo que ahorraba espacio en el proceso ya que la partición del C: sólo ocupa 25 GB.</p>
<p>Entonces hice la copia con &#8220;dd if=/dev/sdb1 of=imagen.raw&#8221;. Como uso VirtualBox, con un comando lo convertí de .raw a .vdi. Pero no logré bootear.</p>
<p>Hice varias pruebas, siempre con VirtualBox y no lo logré. Supongo que es porque no se copió el MBR. En cambio, cuando copié el disco completo, booteó sin problemas.</p>
<p>La pregunta es: ¿Cómo debería haber hecho para trabajar solo con esa partición y de esa forma evitar trabajar con los 80GB?</p></blockquote>
<p>Bueno, el problema era que, efectivamente, al hacer el dd sobre /dev/sdb1 sólo se copian los bytes dentro de la partición y no el <a href="http://en.wikipedia.org/wiki/Master_boot_record" target="_blank">MBR</a>+Bootloader (la vieja &#8220;<a href="http://en.wikipedia.org/wiki/Track_0" target="_blank">pista 0</a>&#8221; del disco). <strong>Para resolver el problema habría que copiar los bytes de la pista 0 más los bytes de la partición en cuestión</strong>, siguiendo estos pasos:</p>
<p>Ejecutar el comando parted sobre /dev/sdb (en mi caso, voy a usar /dev/sda como ejemplo):</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;">marcelo@jupiter:~$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> parted <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda u s print
Modelo: ATA WDC WD3200BEVT-<span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>scsi<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Disco <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda: 625142448s
Tamaño de sector <span style="color: #7a0874; font-weight: bold;">&#40;</span>lógico<span style="color: #000000; font-weight: bold;">/</span>físico<span style="color: #7a0874; font-weight: bold;">&#41;</span>: 512B<span style="color: #000000; font-weight: bold;">/</span>512B
Tabla de particiones. msdos
&nbsp;
Numero  Inicio     Fin         Tamaño      Tipo      Sistema de ficheros  Banderas
 <span style="color: #000000;">1</span>      63s        32001479s   32001417s   primary   ext4                 arranque
 <span style="color: #000000;">2</span>      32001541s  94494329s   62492789s   extended
 <span style="color: #000000;">5</span>      32001543s  94494329s   62492787s   logical   ext4
 <span style="color: #000000;">3</span>      94494330s  98494514s   4000185s    primary   linux-swap<span style="color: #7a0874; font-weight: bold;">&#40;</span>v1<span style="color: #7a0874; font-weight: bold;">&#41;</span>
 <span style="color: #000000;">4</span>      98494515s  625137344s  526642830s  primary   ext4</pre></td></tr></table></div>

<p>El parámetro &#8220;print&#8221; le dice a parted que me imprima la tabla de particiones, y &#8220;u s&#8221; que imprima los tamaños en sectores (que en los discos &lt;=1.0TB son siempre de 512 bytes, sino mismo parted lo dice en la salida, ver <a href="http://blog.marcelofernandez.info/2010/06/discos-rigidos-con-sectores-de-4kb-en-linux/" target="_blank">este post</a> para más detalles).</p>
<p>De esta manera se tienen todos los sectores a copiar de /dev/sda directamente; en mi caso, 63 sectores de la pista 0, que contiene al MBR, más los de la primera partición, 32001417, total: 32001480 sectores.</p>
<p>Luego el dd que sólo copia los bytes que nos interesan (Pista 0 + Partición &#8220;C:&#8221;) es fácil:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">if</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda <span style="color: #007800;">of</span>=imagen.raw <span style="color: #007800;">bs</span>=<span style="color: #000000;">512</span> <span style="color: #007800;">count</span>=<span style="color: #000000;">32001480</span></pre></td></tr></table></div>

<p>Y listo. Eso sí, luego hay que particionar la imagen con Parted, Fdisk, <a href="http://gparted.sourceforge.net/" target="_blank">GParted</a> o el software que se quiera utilizar a tal efecto. Es necesario hacerlo porque el MBR copiado va a reportar las 4 particiones que se tenían previamente en el disco y ahora sólo se va a disponer de una sola.</p>
<p>Asumo que este procedimiento también se puede aplicar para copiar una partición que no sea la primera, usando las opciones &#8220;skip&#8221; y &#8220;append&#8221; del comando dd; por ejemplo, si quisiera hacer un disco de sólo mi partición 5, tendría que:</p>
<ol>
<li>Copiar la pista 0 en un archivo con algo así como &#8220;dd if=/dev/sda of=imagen.raw bs=512 count=63&#8243;.</li>
<li>Ejecutar otro dd con la partición a copiar, salteando (&#8220;skipeando&#8221;) N sectores con la opción &#8220;skip&#8221; y especificando la opción &#8220;append&#8221; para agregar al archivo anterior de salida: &#8220;dd if=/dev/sda of=imagen.raw bs=512 count=62492787 skip=32001543 append&#8221;.</li>
</ol>
<p>Lógicamente esto último no lo probé, acepto comentarios de si funcionó o no <img src='http://blog.marcelofernandez.info/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Espero que a alguien le sirva&#8230;</p>
<p>¡Saludos!</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/HFMA0FTdCqY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2011/01/virtualizando-solo-una-particion-de-una-maquina-fisica/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2011/01/virtualizando-solo-una-particion-de-una-maquina-fisica/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=virtualizando-solo-una-particion-de-una-maquina-fisica</feedburner:origLink></item>
		<item>
		<title>Comparativas de Virtualización KVM</title>
		<link>http://feedproxy.google.com/~r/ElBlogDeMarcelo/~3/oCpxjyW4aLE/</link>
		<comments>http://blog.marcelofernandez.info/2011/01/comparativas-de-virtualizacion-kvm/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 10:47:10 +0000</pubDate>
		<dc:creator>Marcelo</dc:creator>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[ubuntu-ar]]></category>

		<guid isPermaLink="false">http://blog.marcelofernandez.info/?p=1037</guid>
		<description><![CDATA[Ultimamente por diferentes cuestiones personales estoy bastante desconectado de la lectura de noticias, blogs y demás. Sin embargo, me pareció útil dejar por acá dos comparativas sobre KVM de Phoronix.com, que si bien en algunos lados me encontré que se quejan de la &#8220;calidad&#8221; de su suite de benchmarks para software libre/abierto, por el otro, ¡hey! [...]]]></description>
				<content:encoded><![CDATA[<p>Ultimamente por diferentes cuestiones personales estoy bastante desconectado de la lectura de noticias, blogs y demás. Sin embargo, me pareció útil dejar por acá dos comparativas sobre KVM de <a href="http://www.phoronix.com/" target="_blank">Phoronix.com</a>, que si bien en algunos lados me encontré que se quejan de la &#8220;calidad&#8221; de su suite de <a href="http://www.phoronix-test-suite.com/" target="_blank">benchmarks</a> para software libre/abierto, por el otro, ¡hey! ¡al menos se preocupan en hacerlo! <img src='http://blog.marcelofernandez.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong><a href="http://www.phoronix.com/scan.php?page=article&amp;item=linux_kvm_virtualbox4&amp;num=1" target="_blank">Linux KVM vs. VirtualBox 4.0 Virtualization Benchmarks</a></strong><br />
Este es un test de performance entre <a href="http://www.linux-kvm.com/" target="_blank">KVM</a> y <a href="http://www.virtualbox.org/" target="_blank">Virtualbox</a>. En resumen, y con los parámetros por defecto en cuanto a I/O, VBox gana, pero parece que es debido a que no hace los <a href="http://pubs.opengroup.org/onlinepubs/007908799/xsh/fsync.html" target="_blank">fsync</a> del guest en el host y termina utilizando su caché; muy probablemente este comportamiento es configurable (¿ver <a href="http://www.virtualbox.org/manual/ch05.html#iocaching" target="_blank">acá</a>?), pero así y todo ¡es bueno saberlo!. De todas maneras, de alguna manera es peligroso para un entorno de servidores ya que hay riesgo de pérdida de datos, pero por ejemplo, para mi notebook (<em>target </em>primario adonde Virtualbox siempre estuvo orientado) está bien.</p>
<p>Por el otro lado, cuando hay que usar la CPU, KVM &#8220;le pasa el trapo&#8221; a VBox. Hay un test de I/O de red (TCP) que a KVM le dio mal, tan mal, que seguro es debido a que los <span style="text-decoration: line-through;">salames</span> testers no habilitaron <a href="http://wiki.libvirt.org/page/Virtio#Network_driver" target="_blank">VirtIO</a> en los guests KVM.</p>
<p><a href="http://www.phoronix.com/scan.php?page=article&amp;item=linux_kvm_scaling&amp;num=1" target="_blank"><strong>Multi-Core Scaling In A KVM Virtualized Environment</strong></a><br />
Este test trata de dilucidar si es mito o no que el Hyperthreading (las VCPUs) de los microprocesadores <a href="http://en.wikipedia.org/wiki/Intel_Xeon#Nehalem_based_Xeon" target="_blank">Intel Xeon basados en Nehalem</a> hacen más lentas o más rápidas las VMs que corren sobre KVM. Esto es algo que pregunté personalmente en el IRC de KVM (#kvm en <a href="http://freenode.net/" target="_blank">Freenode</a>, dicho sea de paso), y me sugirieron lo mismo que dió en los tests: hay veces en donde las VMs aprovechan todas las CPUs virtuales (VCPUs) y otras en que no, con lo cual hay que probar en cada caso en particular y dejar la configuración que nos dé mejores resultados.</p>
<p>Interesante de leer y experimentar.</p>
<p>Saludos</p>
<img src="http://feeds.feedburner.com/~r/ElBlogDeMarcelo/~4/oCpxjyW4aLE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.marcelofernandez.info/2011/01/comparativas-de-virtualizacion-kvm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.marcelofernandez.info/2011/01/comparativas-de-virtualizacion-kvm/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=comparativas-de-virtualizacion-kvm</feedburner:origLink></item>
	</channel>
</rss>
