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

<channel>
	<title>python &#8211; El Blog de Marcelo!</title>
	<atom:link href="http://blog.marcelofernandez.info/category/python/feed/" rel="self" type="application/rss+xml" />
	<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>Thu, 10 Dec 2020 12:44:16 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
		<item>
		<title>Taller de Programación de Sockets TCP/IP</title>
		<link>http://blog.marcelofernandez.info/2018/02/taller-programacion-de-sockets-tcp-ip/</link>
					<comments>http://blog.marcelofernandez.info/2018/02/taller-programacion-de-sockets-tcp-ip/#comments</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Tue, 27 Feb 2018 03:38:25 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://blog.marcelofernandez.info/?p=1555</guid>

					<description><![CDATA[En este mes de febrero tuve la suerte de llevar adelante en la UNLu un breve pero conciso taller de programación de sockets basado en Python. Dejo los slides, ejemplos de código y ejercicios planteados en el apartado de Charlas de mi blog, y en este post. Agenda: Clase 1: Introducción Sockets API. Modelo OSI, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>En este mes de febrero tuve la suerte de llevar adelante en la UNLu un breve pero conciso taller de programación de sockets basado en Python. Dejo los slides, ejemplos de código y ejercicios planteados en el apartado de <a href="https://blog.marcelofernandez.info/charlas/">Charlas</a> de mi blog, y en este post.</p>
<p>Agenda:</p>
<ul>
<li>Clase 1: Introducción Sockets API. Modelo OSI, entornos de ejecución.Introducción a Python. Socket API para UDP. Ejercicios.
<ul>
<li>Descargar en Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C1.odp">ODP</a> / Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C1.pdf">PDF</a>.</li>
<li>Código de ejemplo: <a href="http://marcelofernandez.info/sockets/code/Clase%201%20-%20UDP.zip">ZIP</a>.</li>
</ul>
</li>
<li>Clase 2: Socket API para TCP. Código de ejemplo y ejercicios.
<ul>
<li>Descargar en Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C2.odp">ODP</a> / Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C2.pdf">PDF</a>.</li>
</ul>
</li>
<li>Clase 3: Multiprogramación, concurrencia, paralelismo. Syscall fork() y relacionados. Ejemplos de servidor multiproceso. Procesos vs. Threads.
<ul>
<li>Descargar en Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C3.odp">ODP</a> / Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C3.pdf">PDF</a>.</li>
<li>Código de ejemplo: <a href="http://marcelofernandez.info/sockets/code/Clase%203%20-%20Procesos.zip">ZIP</a>.</li>
</ul>
</li>
<li>Clase 4: Sockets asincrónicos. Modelo de trabajo, syscall select(). Ejemplos de código. Introducción a Scapy.
<ul>
<li>Descargar en Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C4.odp">ODP</a> / Formato <a href="http://marcelofernandez.info/sockets/slides/Taller%20Sockets-C4.pdf">PDF</a>.</li>
<li>Código de ejemplo: <a href="http://marcelofernandez.info/sockets/code/Clase%204%20-%20Select.zip">ZIP</a>.</li>
</ul>
</li>
</ul>
<p>¡Saludos!</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.marcelofernandez.info/2018/02/taller-programacion-de-sockets-tcp-ip/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Pwning hardware</title>
		<link>http://blog.marcelofernandez.info/2014/11/pwning-hardware/</link>
					<comments>http://blog.marcelofernandez.info/2014/11/pwning-hardware/#comments</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Sat, 01 Nov 2014 16:00:51 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://blog.marcelofernandez.info/?p=1404</guid>

					<description><![CDATA[El video dura media hora, pero a mí me gustó muchísimo, aprendí mucho. Mikah Scott es una genia, y se propone investigar cómo customizar el firmware de una lectora/grabadora de CD/DVD/Blu-Ray, para dominarlo por completo, empezando por el microcontrolador ARM que posee. Por ejemplo, moviendo el láser en la posición que uno quiera y dispararlo. Habla un [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><iframe src="//player.vimeo.com/video/110257380" width="600" height="337" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>El video dura media hora, pero a mí me gustó muchísimo, aprendí mucho. <a title="Scanlime - One girl's diary of improvisational engineering" href="http://scanlime.org/" target="_blank">Mikah Scott</a> es <a title="Mikah Scott - Resume" href="http://scanlime.org/resume/" target="_blank">una</a> <a title="Micah Scott Art Portfolio" href="http://www.misc.name/" target="_blank">genia</a>, y se propone investigar cómo customizar el firmware de una lectora/grabadora de CD/DVD/Blu-Ray, para dominarlo por completo, empezando por el microcontrolador ARM que posee. Por ejemplo, moviendo el láser en la posición que uno quiera y dispararlo. Habla un excelente y puntilloso inglés, así que se le entiende palabra por palabra, sugiero que lo vean incluso para practicar su inglés técnico.</p>
<p>Es muy interesante cómo usa Photoshop para visualizar el contenido de un firmware (?!??!?! ¡nunca se me hubiera ocurrido!), y cómo usa <a title="IDA Disassembler" href="https://www.hex-rays.com/products/ida/index.shtml" target="_blank">IDA</a> (este sí es más lógico) para interpretar el código binario.</p>
<p>Además, usa <a title="Virtual USB Analyzer" href="http://vusb-analyzer.sourceforge.net/" target="_blank">vusb-analyzer</a> en Ubuntu para visualizar el tráfico USB dumpeado con usbmon o similares, por ejemplo <em>snifeado</em> de una máquina virtual.</p>
<p>Por último, usa iPython para hacer que el ARM y el resto de los chips con los que interactúa (<a title="MT1939 - Rewritable Blu-ray drive platform" href="http://www.mediatek.com/en/products/home-entertainment/optical-disc-drive/blu-ray/mt1939/" target="_blank">mt1939</a>, dsp) haga lo que uno quiera (todavía está en avance).</p>
<p>Es increíble cómo en el ámbito de seguridad se usa Python (lo confirmé en la <a title="Ekoparty Security Conference" href="http://www.ekoparty.org/" target="_blank">Ekoparty</a> en estos días).</p>
<p>Insisto, se aprende muchísimo viendo este tipo de videos: herramientas, técnicas, trucos y fundamentalmente cómo abordar estos desafíos.</p>
<p>Saludos</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.marcelofernandez.info/2014/11/pwning-hardware/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Algunos videos de PyCon US 2013</title>
		<link>http://blog.marcelofernandez.info/2013/03/algunos-videos-de-pycon-us-2013/</link>
					<comments>http://blog.marcelofernandez.info/2013/03/algunos-videos-de-pycon-us-2013/#respond</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Thu, 21 Mar 2013 12:29:11 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://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. [&#8230;]]]></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 loading="lazy" 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 loading="lazy" 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 loading="lazy" 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 loading="lazy" 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>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.marcelofernandez.info/2013/03/algunos-videos-de-pycon-us-2013/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PyConAr 2012: Charla sobre el protocolo SPDY – Video</title>
		<link>http://blog.marcelofernandez.info/2013/01/pyconar-2012-charla-sobre-el-protocolo-spdy-video/</link>
					<comments>http://blog.marcelofernandez.info/2013/01/pyconar-2012-charla-sobre-el-protocolo-spdy-video/#respond</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Wed, 02 Jan 2013 18:53:28 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://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 «vergüencita», je&#8230; (encima todavía no lo vi): Cualquier duda me pueden consultar o comentar este mismo post. Espero próximamente escribir [&#8230;]]]></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 «vergüencita», je&#8230; (encima todavía no lo vi):</p>
<p><iframe loading="lazy" 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>
]]></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>
		
		
			</item>
		<item>
		<title>PyConAr 2012: Charla sobre el protocolo SPDY &#8211; Slides</title>
		<link>http://blog.marcelofernandez.info/2012/11/pyconar-2012-charla-sobre-el-protocolo-spdy-slides/</link>
					<comments>http://blog.marcelofernandez.info/2012/11/pyconar-2012-charla-sobre-el-protocolo-spdy-slides/#respond</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Mon, 19 Nov 2012 16:08:12 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://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 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a title="PyCon Argentina 2012" href="http://ar.pycon.org/2012/" target="_blank"><img loading="lazy" decoding="async" class="size-full wp-image-1234 aligncenter" title="PyCon Argentina 2012" src="https://blog.marcelofernandez.info/wp-content/uploads/2012/11/header_pyconar2012.png" alt="PyCon Argentina 2012" width="400" height="121" srcset="http://blog.marcelofernandez.info/wp-content/uploads/2012/11/header_pyconar2012.png 400w, http://blog.marcelofernandez.info/wp-content/uploads/2012/11/header_pyconar2012-300x90.png 300w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a></p>
<p style="text-align: left;"><a href="https://blog.marcelofernandez.info/wp-content/uploads/2012/11/spdy.png"><img loading="lazy" decoding="async" class="alignright size-thumbnail wp-image-1240" title="Speedy Gonzalez - Spdy protocol supporter :-)" src="https://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="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>En definitiva, los slides de mi charla, «<strong>Introducción a SPDY, ¿futuro HTTP 2.0?</strong>» 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 loading="lazy" 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>
]]></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>
		
		
			</item>
		<item>
		<title>Investigando el protocolo SPDY</title>
		<link>http://blog.marcelofernandez.info/2012/07/investigando-el-protocolo-spdy/</link>
					<comments>http://blog.marcelofernandez.info/2012/07/investigando-el-protocolo-spdy/#comments</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Sun, 15 Jul 2012 15:57:22 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://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 «viejito pero cumplidor» 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 [&#8230;]]]></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 «viejito pero cumplidor» 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á :-P).</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 «atado con alambre», 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 loading="lazy" src="http://www.youtube.com/embed/zN5MYf8FtN0" frameborder="0" width="560" height="315"></iframe></p>
<p>Saludos</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.marcelofernandez.info/2012/07/investigando-el-protocolo-spdy/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Jornada de Python en Luján: PyDay Luján 2012</title>
		<link>http://blog.marcelofernandez.info/2012/03/jornada-de-python-en-lujan-pyday-lujan-2012/</link>
					<comments>http://blog.marcelofernandez.info/2012/03/jornada-de-python-en-lujan-pyday-lujan-2012/#respond</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Wed, 28 Mar 2012 13:29:04 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://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 [&#8230;]]]></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 loading="lazy" decoding="async" class="alignright size-full wp-image-1154" style="border-style: initial; border-color: initial;" title="python_lujan" src="https://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>
]]></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>
		
		
			</item>
		<item>
		<title>Estableciendo conexiones HTTPS «bien seguras» en Python</title>
		<link>http://blog.marcelofernandez.info/2011/02/estableciendo-conexiones-https-bien-seguras-en-python/</link>
					<comments>http://blog.marcelofernandez.info/2011/02/estableciendo-conexiones-https-bien-seguras-en-python/#comments</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Sat, 19 Feb 2011 19:45:55 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ubuntu-ar]]></category>
		<guid isPermaLink="false">https://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 [&#8230;]]]></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 «especial» entre ambos.  Allí se intercambian certificados con el fin de autenticar contra quién se «está hablando», 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 «candadito» e informa que la sesión «es segura». 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>
<pre lang="python">#!/usr/bin/env python
#-*- coding: utf-8 -*-

import socket
import ssl
import httplib

class HTTPSClientAuthConnection(httplib.HTTPSConnection):
    """ Class to make a HTTPS connection, with support for full client-based
        SSL Authentication.
    """

    def __init__(self, host, port, key_file, cert_file, ca_file, timeout=None):
        httplib.HTTPSConnection.__init__(self, host, key_file=key_file,
                                                   cert_file=cert_file)
        self.key_file = key_file
        self.cert_file = cert_file
        self.ca_file = ca_file
        self.timeout = timeout

    def connect(self):
        """ Connect to a host on a given (SSL) port.
            If ca_file is pointing somewhere, use it to check Server Certificate.

            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.
        """
        sock = socket.create_connection((self.host, self.port), self.timeout)
        if self._tunnel_host:
            self.sock = sock
            self._tunnel()
        # If there's no CA File, don't force Server Certificate Check
        if self.ca_file:
            self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file,
                        ca_certs=self.ca_file, cert_reqs=ssl.CERT_REQUIRED)
        else:
            self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file,
                                              cert_reqs=ssl.CERT_NONE)

if __name__ == '__main__':
    # Little test-case of our class
    import sys
    if len(sys.argv) != 6:
        print 'usage: ./https_auth_handler.py host port key_file cert_file ca_file'
        sys.exit(1)
    else:
        host, port, key_file, cert_file, ca_file = sys.argv[1:]
    conn = HTTPSClientAuthConnection(host, port, key_file=key_file,
                                           cert_file=cert_file, ca_file=ca_file)
    conn.request('GET', '/')
    response = conn.getresponse()
    print response.status, response.reason
    data = response.read()
    print data
    conn.close()</pre>
<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>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.marcelofernandez.info/2011/02/estableciendo-conexiones-https-bien-seguras-en-python/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Navegador simple con wxPython + Webkit/GTK</title>
		<link>http://blog.marcelofernandez.info/2010/10/navegador-simple-con-wxpython-webkitgtk/</link>
					<comments>http://blog.marcelofernandez.info/2010/10/navegador-simple-con-wxpython-webkitgtk/#comments</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Sun, 10 Oct 2010 01:28:54 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ubuntu-ar]]></category>
		<guid isPermaLink="false">https://blog.marcelofernandez.info/?p=995</guid>

					<description><![CDATA[Hace algunos posts (¡casi un año ya!) escribí sobre una manera fácil y rápida de tener un componente «navegador web» en Python sobre Linux/BSD, gracias a PyGTK y WebkitGTK, llamado lógicamente, pyWebkitGTK. En pocas líneas de código uno puede disponer de un navegador potente y completo en un panel de su aplicación basada en PyGTK, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Hace algunos posts (¡casi un año ya!) <a href="https://blog.marcelofernandez.info/2009/11/navegador-simple-con-pywebkitgtk/" target="_blank">escribí</a> sobre una manera fácil y rápida de tener un componente «navegador web» en Python sobre Linux/BSD, gracias a <a href="http://www.pygtk.org" target="_blank">PyGTK</a> y <a href="http://webkitgtk.org/" target="_blank">WebkitGTK</a>, llamado lógicamente, <a href="http://code.google.com/p/pywebkitgtk/" target="_blank">pyWebkitGTK</a>. En pocas líneas de código uno puede disponer de un navegador potente y completo en un panel de su aplicación basada en <a href="http://www.pygtk.org">PyGTK</a>, ideal para integrar aún más la cada omnipresente Web.</p>
<p>Las vueltas de la vida y las ganas de experimentar y aprender te llevan a probar otros frameworks/librerías, como lo es <a href="http://www.wxpython.org" target="_blank">wxPython</a>; tanto es así que de vez en cuando tengo el placer de dar <a href="/charlas/" target="_blank">alguna charla</a> al respecto <a href="#nota1">[1]</a>, y una de las debilidades que le usualmente le encontraba es la falta de un componente «browser web» nativo y soportado en todas las plataformas (wxPython sólo incluye IE embebible como ActiveX en Windows).</p>
<p>En búsqueda de alternativas existe <a href="http://wxwebkit.wxcommunity.com/" target="_blank">wxWebKit</a>, pero al proyecto le faltan terminar algunas cosas para tener lista su versión «1.0», y si bien <a href="http://www.kirix.com/labs/wxwebconnect/" target="_blank">wxWebConnect</a> funciona, no da soporte para wxPython, sólo wxWidgets desde C++. Eso nos deja con que en Linux/BSD no tenemos componente que nos dé esta posibildad, pero&#8230; si wxPython en estas plataformas utiliza GTK por debajo, ¿no podríamos usar pyWebkitGTK como componente para embeberlo en nuestra aplicación Python?</p>
<p>La respuesta por suerte es afirmativa, y en una rápida búsqueda en la <a href="http://wiki.wxpython.org" target="_blank">Wiki de wxPython</a> encontré <a href="http://wiki.wxpython.org/wxGTKWebKit" target="_blank">un ejemplo de cómo hacerlo</a>. Si bien podría copiar y pegar la receta, me gustaría «<em>aggiornarla</em>» un poquito, al menos traduciendo y explicando un poco más los comentarios.</p>
<p>Primero vamos a mostrar cómo se vería el módulo que incluye un widget HtmlPanel, wxwebkitgtk.py:</p>
<pre lang="python">#!/usr/bin/env python
# coding:utf-8

"""
    wxWebkitGTK - Componente wxPython que embebe un navegador
                   utiliza la biblioteca Webkit GTK desde Python (PyWebkitGTK).

    Marcelo Fidel Fernández - http://www.marcelofernandez.info
    Basado en: http://wiki.wxpython.org/wxGTKWebKit
"""
import os
import wx
import gobject
gobject.threads_init()
import gtk, gtk.gdk
import webkit

class HtmlPanel(wx.Panel):

    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        # Aquí es donde se hace la "magia" de embeber webkit en wxGTK.
        whdl = self.GetHandle()
        window = gtk.gdk.window_lookup(whdl)
        # Debemos mantener la referencia a "pizza", sino obtenemos un segfault.
        self.pizza = window.get_user_data()
        # Obtengo el padre de la clase GtkPizza, un gtk.ScrolledWindow
        self.scrolled_window = self.pizza.parent
        # Saco el objeto GtkPizza para poner un WebView en su lugar
        self.scrolled_window.remove(self.pizza)
        self.webview = webkit.WebView()
        self.scrolled_window.add(self.webview)
        self.scrolled_window.show_all()</pre>
<p>La «magia» consiste en que, sabiendo que pyWebkitGTK necesita un componente <a href="http://library.gnome.org/devel/pygtk/stable/class-gtkscrolledwindow.html" target="_blank">ScrolledWindow</a> GTK como padre para funcionar correctamente, se utiliza la biblioteca PyGTK para buscar el ScrolledWindow GTK donde está embebido el wx.Panel de la clase (su «abuelo»), y reemplazar el hijo GTKPizza (un componente inventado por wxWidgets para funcionar) por el WebView de Webkit.</p>
<p>Aquí hay un ejemplo de cómo se puede utilizar este panel como widget de wxPython completo e independiente, copiando la funcionalidad básica del <a href="https://blog.marcelofernandez.info/2009/11/navegador-simple-con-pywebkitgtk/">post de PyWebkitGTK</a>, el archivo wxwebkitgtk_demo.py:</p>
<pre lang="python">#!/usr/bin/env python
# coding: utf-8

"""
    wxSimpleBrowser - Navegador muy muy simple de internet, sólo de ejemplo,
                      que utiliza la biblioteca Webkit GTK desde wxPython.

    Marcelo Fidel Fernández - http://www.marcelofernandez.info
    Licencia: BSD. Disponible en: http://www.freebsd.org/copyright/license.html
"""

import sys
import wx
from wxwebkitgtk import HtmlPanel

DEFAULT_URL = 'http://www.python.org'

class wxSimpleBrowser(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None)
        self.TxtUrl = wx.TextCtrl(self, wx.ID_ANY, style=wx.TE_PROCESS_ENTER)
        self.TxtUrl.Bind(wx.EVT_TEXT_ENTER, self.OnTxtURL)
        self.Box = wx.BoxSizer(wx.VERTICAL)
        self.Box.Add(self.TxtUrl, proportion=0, flag=wx.EXPAND)
        self.SetSizer(self.Box)
        self.SetSize((800,600))
        self.Show()
        # Necesitamos tener mostrado el componente padre del Panel para que funcione,
        # por eso mostramos primero el Frame y después creamos el HtmlPanel
        self.HtmlPanel = HtmlPanel(self)
        self.Box.Add(self.HtmlPanel, proportion=1, flag=wx.EXPAND)
        self.SendSizeEvent() # Para acomodar el panel al tamaño del frame

    def OnTxtURL(self, event):
        self.Open(self.TxtUrl.GetValue())

    def Open(self, url):
        # Podemos acceder a todos los métods del objeto WebView
        # http://webkitgtk.org/reference/webkitgtk-webkitwebview.html
        self.HtmlPanel.webview.load_uri(url)
        self.TxtUrl.SetValue(url)
        self.SetTitle('wxSimpleBrowser - %s' % url)

if __name__ == '__main__':
    if len(sys.argv) &gt; 1:
        url = sys.argv[1]
    else:
        url = DEFAULT_URL
    app = wx.App()
    browser = wxSimpleBrowser()
    browser.Open(url)
    app.MainLoop()</pre>
<p>Creo que para la enorme funcionalidad que nos brinda el proceso de ponerlo en práctica es bastante simple, y aunque depende de PyGTK, ésta biblioteca hoy está disponible «de fábrica» en cualquier distribución moderna de GNU/Linux. </p>
<p>De aquí en más es ser muy sencillo dejar al lector el armado de un widget para wxPython que en Windows muestre el componente navegador de IE y en Linux un navegador Webkit.</p>
<p><a name="nota1"></a>[1] ¡La semana que viene voy a estar en la <a href="http://ar.pycon.org/2010/about/" target="_blank">PyCon Argentina 2010</a> dando una charla de <a href="http://ar.pycon.org/2010/conference/schedule/event/55/" target="_blank">Introducción a wxPython</a>! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>¡Saludos!</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.marcelofernandez.info/2010/10/navegador-simple-con-wxpython-webkitgtk/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>PyDay Rafaela 2010 &#8211; Introducción a wxPython</title>
		<link>http://blog.marcelofernandez.info/2010/05/pyday-rafaela-2010-introduccion-a-wxpython/</link>
					<comments>http://blog.marcelofernandez.info/2010/05/pyday-rafaela-2010-introduccion-a-wxpython/#comments</comments>
		
		<dc:creator><![CDATA[Marcelo]]></dc:creator>
		<pubDate>Mon, 10 May 2010 17:32:48 +0000</pubDate>
				<category><![CDATA[codear]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ubuntu-ar]]></category>
		<guid isPermaLink="false">https://blog.marcelofernandez.info/?p=687</guid>

					<description><![CDATA[Para no ser menos que Juanjo y Fisa, ¡qué bueno estuvo el PyDay Rafaela 2010! Muchos (muchos) asistentes, muy buena onda, y una chorizeada + fernet a la noche inolvidables&#8230; En la sección de Charlas del blog están los slides de mi «Introducción a wxPython», más los ejemplos de rigor. También hice propaganda de Ubuntu [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Para no ser menos que <a href="http://www.juanjoconti.com.ar/2010/05/09/charla-entendiendo-decoradores-en-python/" target="_blank">Juanjo</a> y <a href="http://fisadev.blogspot.com/2010/05/pyday-rafaela-2010_09.html" target="_blank">Fisa</a>, ¡qué bueno estuvo el <a href="www.pyday.com.ar/rafaela2010/" target="_blank">PyDay Rafaela 2010</a>!</p>
<p>Muchos (muchos) asistentes, muy buena onda, y una chorizeada + fernet a la noche inolvidables&#8230; En la sección de <a href="/charlas/">Charlas</a> del blog están los <a href="http://marcelofernandez.info/charlas/Introduccion%20a%20wxPython.pdf">slides</a> de mi «Introducción a wxPython», más los <a href="http://marcelofernandez.info/charlas/Introduccion%20a%20wxPython.zip">ejemplos</a> de rigor. También <a href="http://marcelofernandez.info/charlas/Ubuntu Lightning Talk.pdf">hice propaganda</a> de Ubuntu en las Lightning Talks. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Acá hay un par de fotos&#8230; con los días van a ir apareciendo más cosas en el sito del evento&#8230; incluso los videos de las charlas. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<a href='http://blog.marcelofernandez.info/wp-content/uploads/2010/05/08052010022.jpg'><img loading="lazy" decoding="async" width="150" height="150" src="http://blog.marcelofernandez.info/wp-content/uploads/2010/05/08052010022-150x150.jpg" class="attachment-thumbnail size-thumbnail" alt="" /></a>
<a href='http://blog.marcelofernandez.info/wp-content/uploads/2010/05/023.jpg'><img loading="lazy" decoding="async" width="150" height="150" src="http://blog.marcelofernandez.info/wp-content/uploads/2010/05/023-150x150.jpg" class="attachment-thumbnail size-thumbnail" alt="" /></a>

<p><strong>Actualización</strong>: <a href="http://pydayrafaela.blip.tv/" target="_blank">Acá</a> están los videos de las charlas.</p>
<p>Gracias a los chicos de PyRafaela por la organización, dedicación y aguante&#8230;. ¡espero que se repita!</p>
<p>Saludos</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.marcelofernandez.info/2010/05/pyday-rafaela-2010-introduccion-a-wxpython/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
