<?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>Linux Hispano &#187; python</title> <atom:link href="http://www.linuxhispano.net/etiqueta/python/feed/" rel="self" type="application/rss+xml" /><link>http://www.linuxhispano.net</link> <description>Noticias, tira, podcast, juegos, Linux y software libre</description> <lastBuildDate>Fri, 10 Feb 2012 14:00:58 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>GMapCatcher, un visualizador de mapas offline</title><link>http://www.linuxhispano.net/2010/04/19/gmapcatcher-un-visualizador-de-mapas-offline/</link> <comments>http://www.linuxhispano.net/2010/04/19/gmapcatcher-un-visualizador-de-mapas-offline/#comments</comments> <pubDate>Mon, 19 Apr 2010 18:11:42 +0000</pubDate> <dc:creator>Alberto Hornero Luque</dc:creator> <category><![CDATA[Noticias]]></category> <category><![CDATA[google maps]]></category> <category><![CDATA[libre]]></category> <category><![CDATA[mapas]]></category> <category><![CDATA[maps]]></category> <category><![CDATA[python]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=2210</guid> <description><![CDATA[GMapCatcher es un visor de mapas en línea, el cual permite cargar los mapas de CloudMade, OpenStreetMap, Yahoo Maps o Google Maps. Nos muestra su contenido por pantalla y nos permite descargarlo para poder usarlo a posteriori, con lo que &#8230; <a
href="http://www.linuxhispano.net/2010/04/19/gmapcatcher-un-visualizador-de-mapas-offline/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>GMapCatcher es un visor de mapas en línea, el cual permite cargar los mapas de CloudMade, OpenStreetMap, Yahoo Maps o Google Maps. Nos muestra su contenido por pantalla y nos permite descargarlo para poder usarlo a posteriori, con lo que podremos ver los mapas que deseemos sin conexión a Internet.</p><div
id="attachment_2211" class="wp-caption aligncenter" style="width: 660px"><img
class="size-full wp-image-2211" title="GMapCatcher_linuxhispano" src="http://www.linuxhispano.net/wp-content/uploads/2010/04/GMapCatcher_linuxhispano.jpg" alt="" width="650" height="453" /><p
class="wp-caption-text">GMapCatcher, un visualizador de mapas offline</p></div><p>Básicamente de lo que se trata es de una simple herramienta que nos permite descargar los mapas de los principales proveedores.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/04/19/gmapcatcher-un-visualizador-de-mapas-offline/feed/</wfw:commentRss> <slash:comments>10</slash:comments> </item> <item><title>IronPython, una implementación de Python para Mono/.NET</title><link>http://www.linuxhispano.net/2010/03/18/ironpython-una-implementacion-de-python-para-mono-net/</link> <comments>http://www.linuxhispano.net/2010/03/18/ironpython-una-implementacion-de-python-para-mono-net/#comments</comments> <pubDate>Thu, 18 Mar 2010 16:46:02 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Noticias]]></category> <category><![CDATA[.net]]></category> <category><![CDATA[boo]]></category> <category><![CDATA[ironpython]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[python]]></category> <category><![CDATA[sharpdevelop]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=1981</guid> <description><![CDATA[Debido a que utilizo SharpDevelop, software libre para desarrollo .NET en plataformas Windows, en el trabajo hace tiempo ya descubrí que existía la posibilidad de hacer desarrollos para el intérprete de .NET/Mono en lenguaje Python. Posteriormente, hace no mucho viendo un &#8230; <a
href="http://www.linuxhispano.net/2010/03/18/ironpython-una-implementacion-de-python-para-mono-net/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/03/ironpython-logo-linuxhispano.png"><img
class="aligncenter size-full wp-image-1984" title="ironpython-logo-linuxhispano" src="http://www.linuxhispano.net/wp-content/uploads/2010/03/ironpython-logo-linuxhispano.png" alt="" width="202" height="50" /></a></p><p>Debido a que utilizo <a
target="_blank" href="http://es.wikipedia.org/wiki/SharpDevelop" target="_blank">SharpDevelop</a>, software libre para desarrollo .NET en plataformas Windows, en el trabajo hace tiempo ya descubrí que existía la posibilidad de hacer desarrollos para el intérprete de .NET/Mono en lenguaje <a
target="_blank" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a>. Posteriormente, hace no mucho viendo <a
target="_blank" href="http://www.vivalinux.com.ar/articulos/videos-miguel-de-icaza" target="_blank">un vídeo de Miguel de Icaza</a>, comprobé que el padre de Gnome también hablaba de esta misma posibilidad.</p><p>Pasado el tiempo y como veo que es un tema que puede interesar a muchos os presento a <strong><a
target="_blank" href="http://es.wikipedia.org/wiki/IronPython" target="_blank">IronPython</a></strong>.</p><p><strong>¿Qué es IronPython?</strong></p><p><strong></strong>Es una implementación del intérprete de <a
target="_blank" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a> sobre en entorno de trabajo de .NET/Mono de forma que podemos compilar código <a
target="_blank" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a> a código intermedio CLI de entornos .NET/Mono con las ventajas que puede traernos ésto en entornos Windows.</p><p><strong>Boo</strong></p><p>Los que estéis metido dentro del mundo del software libre en plataformas Windows y sobre todo en el mundo del Proyecto Mono, conoceréis a <a
target="_blank" href="http://es.wikipedia.org/wiki/Boo_(programaci%C3%B3n)" target="_blank">Boo</a>. <a
target="_blank" href="http://es.wikipedia.org/wiki/Boo_(programaci%C3%B3n)" target="_blank">Boo</a> es un lenguaje de programación de la familia .NET/Mono con una sintaxis muy parecida a Python pero que no llega a ser exactamente igual. El desarrollador de <a
target="_blank" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a> se sentirá cómodo con Boo pero no llegará a poder compilar ni interpretar su código <a
target="_blank" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a> directamente.</p><p><strong>IronPython</strong></p><p>Con <a
target="_blank" href="http://es.wikipedia.org/wiki/IronPython" target="_blank">IronPython</a> este problema no existe porque de hecho se pueden incluso compilar paquetes de <a
target="_blank" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a>, tal como pude leer <a
target="_blank" href="http://community.sharpdevelop.net/blogs/mattward/archive/2010/03/16/CompilingPythonPackagesWithIronPython.aspx" target="_blank">hace dos días en el blog oficial de desarrollo de SharpDevelop</a>. Las ventajas de usar <a
target="_blank" href="http://es.wikipedia.org/wiki/IronPython" target="_blank">IronPython</a> son muchas y todo el que esté obligado a desarrollar en Windows por cualquier razón lo debería contemplar como una opción.</p><p>Aparte de las ventajas y de la facilidad que nos transmite Python tenemos a nuestra disposición las bibliotecas propias de .NET con las ventajas de integración y facilidad de desarrollo que esto supone en los sistemas de la factoría de Redmond.</p><p>Os dejo <a
target="_blank" href="http://ironpython.net/" target="_blank">un enlace a la web oficial de IronPython</a> y os invito a que probéis esta tecnología con el IDE libre para .NET/Mono en Windows, <a
target="_blank" href="http://es.wikipedia.org/wiki/SharpDevelop" target="_blank">SharpDevelop</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/03/18/ironpython-una-implementacion-de-python-para-mono-net/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Meld, comparador de ficheros para Gnome</title><link>http://www.linuxhispano.net/2010/02/09/meld-comparador-de-ficheros-para-gnome/</link> <comments>http://www.linuxhispano.net/2010/02/09/meld-comparador-de-ficheros-para-gnome/#comments</comments> <pubDate>Tue, 09 Feb 2010 16:10:07 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Noticias]]></category> <category><![CDATA[comparar]]></category> <category><![CDATA[fichero]]></category> <category><![CDATA[gnome]]></category> <category><![CDATA[gtk]]></category> <category><![CDATA[meld]]></category> <category><![CDATA[python]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=1650</guid> <description><![CDATA[Probablemente en más de una ocasión habréis necesitado comparar dos ficheros de texto para encontrar, por ejemplo, pequeñas diferencias entre dos códigos en el que uno funciona y otro no. Como los IDE cada día están más extendidos y cada &#8230; <a
href="http://www.linuxhispano.net/2010/02/09/meld-comparador-de-ficheros-para-gnome/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/02/gnome1.png"><img
class="aligncenter size-full wp-image-1665" title="gnome" src="http://www.linuxhispano.net/wp-content/uploads/2010/02/gnome1.png" alt="" width="267" height="320" /></a></p><p>Probablemente en más de una ocasión habréis necesitado comparar dos ficheros de texto para encontrar, por ejemplo, pequeñas diferencias entre dos códigos en el que uno funciona y otro no. Como los <a
target="_blank" href="http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado" target="_blank">IDE</a> cada día están más extendidos y cada vez traen más funcionalidades, los programas que se dedican sólo a comparar dos ficheros son cada vez más bien partes o complementos de entornos o editores.</p><p>Sin embargo, sigue existiendo software específico de calidad como <a
target="_blank" href="http://meld.sourceforge.net/" target="_blank">Meld</a>. <a
target="_blank" href="http://meld.sourceforge.net/" target="_blank">Meld</a> es un <strong>comparador de ficheros</strong> para <strong>Gnome</strong>, implementado en <strong>Python</strong>, que nos permite compara de manera <strong>muy intuitiva</strong> gracias a la<strong> sintaxis coloreada</strong>, el <strong>resaltado de las diferencias</strong> o la posibilidad de comparar no dos, sino tres ficheros o incluso directorios completos (comparando pares de ficheros).</p><p>Otras alternativas para esta misma tarea (interesantes sobre todo si no utilizáis Gnome) son:</p><ul><li><strong>diff</strong>: El programa de consola en que se basan en el fondo los demás.</li><li><a
target="_blank" href="http://en.wikipedia.org/wiki/Kompare" target="_blank"><strong>Kompare</strong></a>: El comparador para KDE</li></ul><p>Para instalarlo podéis descargaros el código fuente o buscar el paquete <strong>meld</strong> en vuestro repositorio.</p><p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/02/meld.png"><img
class="aligncenter size-full wp-image-1662" title="meld" src="http://www.linuxhispano.net/wp-content/uploads/2010/02/meld-e1265731502264.png" alt="" width="550" height="333" /></a></p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/02/09/meld-comparador-de-ficheros-para-gnome/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Instalar y configurar Django manualmente desde el repositorio</title><link>http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/</link> <comments>http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/#comments</comments> <pubDate>Thu, 28 Jan 2010 13:46:50 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[configurar]]></category> <category><![CDATA[django]]></category> <category><![CDATA[instalar]]></category> <category><![CDATA[programación]]></category> <category><![CDATA[python]]></category> <category><![CDATA[repositorio]]></category> <category><![CDATA[tutorial]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=1467</guid> <description><![CDATA[Aunque en la entrada de la presentación de Django se habla de la instalación del framework, a través de dos métodos: script install.py e instalación de paquete desde el repositorio; vamos a explicar otro método más, algo más largo pero &#8230; <a
href="http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/01/python-django.png"><img
class="aligncenter size-full wp-image-1504" title="python-django" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/python-django.png" alt="" width="211" height="192" /></a></p><p>Aunque en la entrada de la presentación de Django se habla de la instalación del framework, a través de dos métodos: script install.py e instalación de paquete desde el repositorio; <strong>vamos a explicar otro método más, algo más largo pero a la vez más compatible</strong>. Nos quita la limitación del paquete de que la versión no sea la más reciente (limitación que no tiene el método de instalación con <em>install.py</em>).</p><p>Doy por supuesto que tenéis instalado Python en vuestro equipo.</p><ol><li>Nos <strong>dirigimos </strong>a nuestro directorio $HOME</li><li><strong>Descargamos la última revisión</strong> del proyecto: <em>svn co http://code.djangoproject.com/svn/django/trunk/ djtrunk</em></li><li>Averiguamos cuál es el <strong>directorio en el que Python guarda los paquete</strong>s:  <em>python -c &#8220;from distutils.sysconfig import get_python_lib; print get_python_lib()&#8221;</em></li><li>Nos dirigimos al directorio que nos indique y <strong>creamos un fichero de nombre </strong><em><strong>django.pth</strong></em> (el fichero podéis crearlo con nano mismo <em>nano django.pth</em>).</li><li>En dicho fichero <strong>indicamos </strong>sólo una línea con <strong>el directorio</strong> en el que hemos <strong>descargado</strong> el código de Django (en nuestro caso será /home/miusuario/djtrunk).</li><li><strong>Añadimos </strong>a la variable <strong>PATH </strong>la ruta de los <strong>binarios de Django</strong>:<ol><li>Editamos el fichero con las variables de entorno <em>/etc/environment</em></li><li>Añadimos a la variable PATH la ruta:<em> PATH=”lo_que_haya_antes: $HOME/djtrunk/djtrunk/django/bin”</em></li></ol></li></ol><p><strong>Ya podemos probar la instalación de Django</strong>. Podéis probar a importar el módulo Django desde Python o podéis probar a crear un sitio y lanzar el servidor de prueba:</p><ol><li><em>django-admin.py startproject misitio</em></li><li><em>python manage.py runserver</em></li><li>Lanzamos el navegador para escuchar el puerto 8000 del host local: <em>http://localhost:8000</em></li></ol><p>Deberías ver algo así:</p><p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/01/prueba.jpg"><img
class="aligncenter size-full wp-image-1502" title="prueba" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/prueba-e1264684650202.jpg" alt="" width="450" height="119" /></a>Y a partir de aquí seguid <a
href="http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/" target="_blank">leyendo el ejemplo que colgamos ayer</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Conocer Django: presentación, introducción y ejemplo de desarrollo</title><link>http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/</link> <comments>http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/#comments</comments> <pubDate>Wed, 27 Jan 2010 12:32:49 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[configuración]]></category> <category><![CDATA[django]]></category> <category><![CDATA[ejemplo]]></category> <category><![CDATA[instalación]]></category> <category><![CDATA[programación]]></category> <category><![CDATA[python]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=1398</guid> <description><![CDATA[A lo largo de la presentación que adjuntamos en este enlace y con motivo del trabajo voluntario planteado en las prácticas de Programación Avanzada, José Antonio Sánchez Pallero y yo, hemos tratado de transmitir una idea general acerca de Django, &#8230; <a
href="http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p
style="text-align: center;"><a
target="_blank" href="http://www.djangoproject.com/"><img
class="aligncenter size-full wp-image-1399" title="django-logo" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/django-logo.png" alt="" width="504" height="216" /></a></p><p>A lo largo de la presentación que adjuntamos en este enlace y con motivo del trabajo voluntario planteado en las prácticas de Programación Avanzada, <strong>José Antonio Sánchez Pallero y </strong><a
target="_blank" href="http://www.linuxhispano.net/author/carazo/" target="_blank"><strong>yo</strong></a>, hemos tratado de transmitir una idea general acerca de <a
href="http://es.wikipedia.org/wiki/Django" target="_blank"><strong>Django</strong></a>, <strong>el framework libre basado en Python orientado a la creación rápida de aplicaciones web</strong>. Al final del mismo y para completar la explicación, presentamos un pequeño ejemplo de desarrollo haciendo uso de esta herramienta.</p><p>Toda persona que haya tenido contacto con el desarrollo web, <strong>sabrá de los inconvenientes</strong> que crean temas como: el control de las entradas del usuario, la interacción con la base de datos, la creación de direcciones amigables para los buscadores (tan necesario para <a
target="_blank" href="http://es.wikipedia.org/wiki/Search_engine_optimization" target="_blank">el SEO</a>), la modificación de las estructuras de datos una vez creadas o la definición de distintos roles de permisos para los usuarios del sistema.</p><p><strong>Todo este tipo de problemas los soluciona </strong><a
target="_blank" href="http://es.wikipedia.org/wiki/Django" target="_blank"><strong>Django</strong></a><strong> de una manera muy intuitiva</strong>, con la potencia añadida de un lenguaje tan amable y completo como <a
target="_blank" href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a>.</p><p>A continuación os dejo la presentación y adjunto también capturas de pantalla del ejemplo desarrollado y el código fuente del ejemplo para descargar. Los objetivos y la funcionalidad del ejemplo están comentados en la presentación; la implementación en sí explicada está comentado directamente sobre el código.</p><p><a
target="_blank" style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Django - Plataforma de sitios web" href="http://www.slideshare.net/jcarazo/django-plataforma-de-sitios-web">Django &#8211; Plataforma de sitios web</a></p><p
style="text-align: center;"><object
style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param
name="allowFullScreen" value="true" /><param
name="allowScriptAccess" value="always" /><param
name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=djangopa0910-100125054751-phpapp02&amp;stripped_title=django-plataforma-de-sitios-web" /><param
name="allowfullscreen" value="true" /><embed
style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=djangopa0910-100125054751-phpapp02&amp;stripped_title=django-plataforma-de-sitios-web" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><ul><li><strong>Descargar: ejemploDjango.tar.gz (código fuente del ejemplo)</strong></li></ul><p><em>Los datos personales que aparecen en los ejemplos son inventados. Algunos datos sobre grupos y centros de investigación sí son reales.</em></p><p><strong>Vista índice</strong></p><p><strong><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_indice.png"><img
class="aligncenter size-full wp-image-1456" title="vista_indice" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_indice-e1264591596180.png" alt="" width="450" height="171" /></a>Vista Instituto</strong></p><p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_instituto-e1264591776909.png"><img
class="aligncenter size-full wp-image-1458" title="vista_instituto" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_instituto-e1264591776909.png" alt="" width="449" height="168" /></a></p><p><strong>Vista grupo</strong></p><p><em><a
style="text-decoration: none;" href="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_grupo1.png"><img
class="aligncenter size-full wp-image-1460" title="vista_grupo" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_grupo1-e1264592489739.png" alt="" width="450" height="170" /></a></em></p><p><em>Esta entrada <a
target="_blank" href="http://aprendepython.blogspot.com/2010/01/extra-django-presentacion-introduccion.html" target="_blank">también ha sido publicada en un blog sobre Python</a> que ha creado un compañero de la clase. Desde aquí darle la enhorabuena y recomendároslo a todos: <a
target="_blank" href="http://aprendepython.blogspot.com/2010/01/extra-django-presentacion-introduccion.html" target="_blank">Aprende Python como si estuvieras en primero</a>.</em></p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/feed/</wfw:commentRss> <slash:comments>13</slash:comments> </item> <item><title>Empezar a programar en Pygame</title><link>http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/</link> <comments>http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/#comments</comments> <pubDate>Thu, 21 Jan 2010 15:06:19 +0000</pubDate> <dc:creator>Alberto Hornero Luque</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[gráficos]]></category> <category><![CDATA[introduccion]]></category> <category><![CDATA[Juegos]]></category> <category><![CDATA[programación]]></category> <category><![CDATA[pygame]]></category> <category><![CDATA[python]]></category> <category><![CDATA[tutorial]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=1369</guid> <description><![CDATA[A través de esta entrada vamos a introducirnos en el mundo del desarrollo de aplicaciones gráficas usando una librería llamada pygame que nos proporciona las herramientas necesarias para crear de forma relativamente sencilla nuestros juegos en el lenguaje de programación &#8230; <a
href="http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-1387" title="pygame_logo" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_logo.gif" alt="" width="200" height="60" /></p><p>A través de esta entrada vamos a introducirnos en el mundo del desarrollo de aplicaciones gráficas usando una librería llamada <strong><em>pygame </em></strong>que nos proporciona las herramientas necesarias para crear de  forma relativamente sencilla nuestros juegos en el lenguaje de programación <strong>Python</strong>.</p><h1><strong>¿Qué es Pygame?</strong></h1><p><em>Pygame </em>es un conjunto de módulos que nos ayudan a crear videojuegos o aplicaciones gráficas (no necesariamente videojuegos) en dos dimensiones. <em>Pygame </em>incluye gráficos y bibliotecas de sonido diseñados para ser utilizados directamente bajo <strong>Python</strong>. Está construido bajo Simple DirectMedia Layer (<strong>SDL</strong>), que a su vez son un conjunto de bibliotecas desarrolladas en <strong>lenguaje C</strong>, proporcionando las funciones básicas para realizar operaciones de dibujado 2D, gestión de efectos de sonido y música, y carga y gestión de imágenes. De esta manera, a través de <em>Pygame </em>podemos abstraernos de la lógica del juego (o aplicación) en si mismo, haciendo posible el uso de un lenguaje de alto nivel como Python para estructurar el juego.</p><p><em>Pygame </em>fue contruido como sustituto de <a
target="_blank" href="http://sourceforge.net/projects/pysdl/" target="_blank">pySDL</a>, después del poco éxito del mismo, ya que la forma de interactuar no llegó a recoger tantas opciones y tan simples como las del entorno de <em>Pygame</em>.</p><p>Escrito originalmente por Shinners Pete se distribuye bajo la <em>GNU Lesser General Public License</em>. Desde 2004 se trata de un proyecto de código abierto de la comunidad de software libre.</p><h1>Instalando Pygame y el entorno</h1><p>Antes de comenzar a ver una serie de ejemplos generales a modo de introducción en el mundo de <em>Pygame </em>vamos a configurar nuestro sistema para poder importar los módulos de <em>Pygame </em>desde Python, como cualquier otra librería.</p><p>La instalación es bastante simple. Suponiendo que nuestro sistema corre una distribución basada en <strong>Debian </strong>y que ya corre la versión más reciente de Python, de tal forma bastará con usar un gestor de paquetes e instalar el paquete <em><strong>python-pygame</strong></em> y satisfacer todas sus dependencias. Así, y de la forma más intuitiva usaremos las dos vías principales, usando el adminstrador de paquetes en modo texto APT y su versión gráfica <strong>Synaptic</strong>.</p><p>En el primero de los casos la instalación es bastante sencilla, abrimos un terminal y ejecutando como superusuario (<em>root</em>) lanzamos la herramienta apt-get como se indica a continuación y cómo se observa en la <strong>figura 1</strong>.</p><blockquote><p><em>$ sudo apt-get install python-pygame</em></p></blockquote><p>Y nos preguntará si deseamos instalar todos los paquetes anexos y dependencias, a lo que responderemos afirmativamente.</p><div
id="attachment_1370" class="wp-caption aligncenter" style="width: 526px"><img
class="size-full wp-image-1370" title="pygame_terminal" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_terminal.png" alt="" width="516" height="197" /><p
class="wp-caption-text">Figura 1 Instalación mediante el gestor de paquetes APT</p></div><p
style="text-align: center;"><p>Usando el gestor de paquetes <em>Synaptic </em>la operación es similar, nos dirigimos a <em>System → Administration → Synaptic Package Manager</em>, localizamos el paquete <strong><em>python-pygame</em></strong> y lo marcamos para instalar, cómo se muestra en la <strong>figura 2</strong>. Aplicamos los cambios aceptando todas las dependencias y listo, ya tenemos nuestro entorno preparado nuestro entornor para empezar a trabajar con <em>Pygame</em>.</p><div
id="attachment_1371" class="wp-caption aligncenter" style="width: 510px"><img
class="size-full wp-image-1371 " title="pygame_synaptic" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_synaptic.png" alt="" width="500" /><p
class="wp-caption-text">Figura 2 Instalación mediante el gestor de paquetes Synaptic</p></div><p>Uno de mis entornos de programación preferidos es Geany, un IDE desarrollado en GTK y que se define así mismo como: A fast and lightweight IDE. Aconsejo su uso ya que nos resultará bastante sencillo probar los ejemplos planteados.</p><p>Para su instalación, y de forma análoga a <em>Pygame</em>, localizaremos el paquete geany y satisfaceremos sus dependencias si se precisan, así con APT y cómo se muestra en la <strong>figura 3</strong>:</p><blockquote><p><em>$ sudo apt-get install geany</em></p></blockquote><div
id="attachment_1381" class="wp-caption aligncenter" style="width: 502px"><img
class="size-full wp-image-1381" title="pygame_geany" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_geany.png" alt="" width="492" height="231" /><p
class="wp-caption-text">Figura 3: Instalación del IDE Geany</p></div><h1>Nuestro primer programa&#8230;</h1><p>Vamos a proceder con un ejemplo muy básico de uso. Abrimos nuestro <strong>IDE de Python (Geany)</strong> y probamos con el siguiente código, en este se dibujará un fondo sobre una ventana y dos lineas diagonales que cruzarán los extremos de izquierdas a derechas y de arriba a abajo y al contrario. Así, el código comentado:</p><blockquote><p><em># -*- coding: utf-8 -*-</em></p><p><em># Importamos las librería de Pygame y las del sistema, necesarias para forzar el cierre<br
/> import pygame, sys<br
/> from pygame.locals import *</em></p><p><em># Inicializamos Pygame<br
/> pygame.init()</em></p><p><em># Definimos el color de fondo y el de la diagonal<br
/> COLOR_FONDO = (50, 150, 200)<br
/> COLOR_LINEA1 = (255, 0, 0)<br
/> COLOR_LINEA2 = (0, 0, 255)</em></p><p><em># Definimos el tamaño de la aplicación y la tasa de refresco<br
/> pantalla = pygame.display.set_mode((800, 600))<br
/> refresco = pygame.time.Clock()</em></p><p><em>while True:<br
/> time_passed = refresco.tick(30)<br
/> # Comprobamos el cierre de la aplicación y en caso afirmativo lanzamos la función salir<br
/> for event in pygame.event.get():<br
/> if event.type == QUIT:<br
/> sys.exit()</em></p><p><em># Fijamos el color de fondo y las lineas de diferentes colores, y lo sacamos por display<br
/> pantalla.fill(COLOR_FONDO)<br
/> pygame.draw.aaline(pantalla, COLOR_LINEA1, (1, 1), (799, 599))<br
/> pygame.draw.aaline(pantalla, COLOR_LINEA2, (799, 1), (1, 599))<br
/> pygame.display.flip()</em></p></blockquote><p><strong><em>NOTA</em></strong><em>: Para lanzar directamente la aplicación desde el <strong>IDE Geany</strong> podemos hacerlo pulsando </em>F5 <em>o desde el icono designado para esta operación.</em></p><p>De esta forma, el resultado que obtenemos tras ejecutar nuestra primera aplicación es el mostrado en la <strong>figura 4</strong>.</p><div
id="attachment_1380" class="wp-caption aligncenter" style="width: 510px"><img
class="size-medium wp-image-1380 " title="pygame_primer_programa" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_primer_programa-300x209.png" alt="" width="500" /><p
class="wp-caption-text">Figura 4: Ejecutando nuestro primer programa</p></div><p
style="text-align: center;"><h1>Controlando los eventos</h1><p>Es posible que al empezar en la programación de aplicaciones gráficas mediante <em>Pygame </em>nos surjan dudas acerca del manejo de eventos a través del programa desarrollado. Es por ello que vamos a dedicar este pequeño apartado a tratar de aclarar las diferentes maneras que tenemos para registrar los eventos que se suceden en nuestra aplicación.</p><p>Será importante diferenciar los métodos que pueden ayudarnos a registrarlos a guardarlos de una forma temporal antes de ser analizados. Así:</p><ul><li><strong>pygame.event.get:</strong> Obtenemos los eventos mediante una cola. Esta función es la usada en el ejemplo anterior, de forma que definimos un tiempo de refresco a partir del cual recorremos los eventos registrados y ejecutamos sus acciones asociadas. Esta es quizás la forma más común de registro de eventos no forzado, y de esta manera no nos obliga a realizar una pulsación o control del flujo del programa en un punto.</li><li><strong>pygame.event.poll:</strong> Obtenemos un evento simple de la cola. Simplemente es capaz de guardar el último evento sucedido. Resulta práctica cuando únicamente queremos dejar constancia de un evento registrado en un intervalo de tiempo definido.</li><li><strong>pygame.event.wait:</strong> Espera un evento de la cola. Este lo he usado en el ejemplo planteado a continuación, de forma que podamos ir viendo algunos de los eventos que podemos controlar así como estudiar las posibilidades que nos ofrece esta vía de registrar eventos.</li></ul><p>Podemos ver el resto de eventos accesibles por teclado en el siguiente enlace: <a
target="_blank" href="http://www.pygame.org/docs/ref/key.html" target="_blank">Documentación oficial de Python</a>.</p><p>El ejemplo que muestra su uso, a continuación:</p><blockquote><p><em># -*- coding: utf-8 -*-</em></p><p><em>import pygame<br
/> from pygame.locals import *</em></p><p><em>pygame.init()<br
/> pygame.display.set_mode((200, 200))<br
/> pygame.display.flip()<br
/> event = pygame.event.poll()</em></p><p><em>while True:<br
/> cursor = pygame.mouse.get_pos()<br
/> evento = pygame.event.wait()<br
/> if evento.type == QUIT or evento.type == K_ESCAPE:<br
/> print &#8221;Has abandonado la aplicación&#8221;<br
/> raise SystemExit<br
/> if pygame.mouse.get_pressed()[0]:<br
/> print &#8221;Has usado el botón izquierdo del ratón&#8221;<br
/> if pygame.mouse.get_pressed()[1]:<br
/> print &#8221;Has usado el botón central del ratón&#8221;<br
/> if pygame.mouse.get_pressed()[2]:<br
/> print &#8221;Has usado el botón derecho del ratón&#8221;<br
/> if evento.type == KEYDOWN and evento.key == K_SPACE:<br
/> print &#8221;Has pulsado espacio&#8221;<br
/> if evento.type == KEYDOWN and evento.key == K_BACKSPACE:<br
/> print &#8221;Has pulsado backspace&#8221;</em></p></blockquote><p><em><span
style="font-style: normal;">La <strong>figura 5</strong> muestra su ejecución:</span></em></p><p><em><span
style="font-style: normal;"> </span></em></p><div
id="attachment_1383" class="wp-caption aligncenter" style="width: 560px"><img
class="size-full wp-image-1383 " title="pygame_eventos" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_eventos.png" alt="" width="550" /><p
class="wp-caption-text">Figura 5: Controlando los eventos de la aplicación</p></div><h1><em><span
style="font-style: normal;">Más figuras e imágenes</span></em></h1><p><em><span
style="font-style: normal;">Al estar basado en </span><span
style="font-style: normal;"><strong>SDL</strong></span><span
style="font-style: normal;">, </span><span
style="font-style: normal;">Pygame </span><span
style="font-style: normal;">tiene la capacidad de poder mostrar imágenes así como formas básica de una forma casi trivial, las primitivas que se encargan de realizar estas operaciones las comentamos en el siguiente ejemplo y vemos su resultado:</span></em></p><blockquote><p><em># -*- coding: utf-8 -*-</em></p><p><em># Importamos las librería de Pygame y las del sistema, necesarias para forzar el cierre<br
/> import pygame<br
/> from pygame.locals import *</em></p><p><em># Inicializamos Pygame<br
/> pygame.init()</em></p><p><em># Definimos el color de fondo y el de las figuras<br
/> COLOR_FONDO = (50, 100, 50)<br
/> COLOR_CUADRADO = (255, 0, 0)<br
/> COLOR_CIRCULO = (0, 0, 255)<br
/> # Cargamos la imagen y hacemos transparente el fondo (antes verde)<br
/> imagen_nave = pygame.image.load(&#8216;nave.bmp&#8217;)<br
/> imagen_nave.set_colorkey((0, 255, 0))</em></p><p><em># Definimos el tamaño de la aplicación y la tasa de refresco<br
/> pantalla = pygame.display.set_mode((800, 600))</em></p><p><em>while True:<br
/> time_passed = pygame.time.Clock().tick(30)<br
/> # Comprobamos el cierre de la aplicación y en caso afirmativo lanzamos la función salir<br
/> for event in pygame.event.get():<br
/> if event.type == QUIT:<br
/> raise SystemExit</em></p><p><em># Fijamos el color de fondo y dibujamos las figuras y la imagen<br
/> pantalla.fill(COLOR_FONDO)<br
/> pygame.draw.rect(pantalla, COLOR_CUADRADO, (50, 50, 100, 100))<br
/> pygame.draw.circle(pantalla, COLOR_CIRCULO, (400, 300), 75 )<br
/> pantalla.blit(imagen_nave, (500, 400))<br
/> # Actualizamos la pantalla<br
/> pygame.display.flip()</em></p></blockquote><p><em><strong>NOTA</strong>: Podemos ver cómo al no disponer de transparencia la imagen de la nave se la fijamos mediante el método set_colorkey().</em></p><p>Y el resultado lo podemos ver en la <strong>figura 6</strong>.</p><div
id="attachment_1384" class="wp-caption aligncenter" style="width: 460px"><img
class="size-medium wp-image-1384 " title="pygame_figuras" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_figuras-300x191.png" alt="" width="450" /><p
class="wp-caption-text">Figura 6: Ejemplo con figuras e imágenes</p></div><h1>Y el sonido</h1><p>Para terminar con esta introducción a Pygame vamos a realizar un test de sonido, para lo cual usaremos la el módulo mixer. El ejemplo:</p><blockquote><p><em># -*- coding: utf-8 -*-</em></p><p><em>import pygame, os<br
/> from pygame.locals import*</em></p><p><em># Iniciamos el módulo mixer<br
/> pygame.mixer.init()<br
/> # Cargamos la pista de audio haciendo uso del sistema, mediante el cual podemos indicar rutas relativas sin dependencia del sistema operativo<br
/> pygame.mixer.music.load(os.path.join(&#8220;1vs0_JuniorGroove.ogg&#8221;))<br
/> # Y reproducimos la pista cargada de forma continua, valor -1.<br
/> pygame.mixer.music.play(-1)</em></p></blockquote><p>Podéis consultar el resto de opciones desde la <a
target="_blank" href="http://www.pygame.org/docs/ref/mixer.html" target="_blank">documentación de Python</a>.</p><p><strong><em>NOTA</em></strong><em>: La pista de audio utilizada tiene licencia Creative Commons, <a
target="_blank" href="http://01audiovideo.free.fr/ogg/1vs0_JuniorGroove.ogg" target="_blank">1vs0 – Junior Groove</a>.</em></p><h1><em><span
style="font-style: normal;">Bibliografía</span></em></h1><ul><li><a
target="_blank" href="http://www.koders.com/python/fidAFB2ABFFF98CE27FCF61D63A217756C7BD7B0A2F.aspx?s=pygame#L10" target="_blank">Koders.com</a></li><li><a
target="_blank" href="http://en.wikipedia.org/wiki/Pygame" target="_blank">Wikipedia.org</a></li><li><a
target="_blank" href="http://sourceforge.net/projects/pysdl/" target="_blank">SourceForge [pySDL]</a></li><li><a
target="_blank" href="http://code.activestate.com/recipes/521884/" target="_blank">ActiveState.com</a></li><li><a
target="_blank" href="http://www.01audio-video.com/download_ogg.htm" target="_blank">01audio-video.com [OGG Files]</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/feed/</wfw:commentRss> <slash:comments>7</slash:comments> <enclosure
url="http://01audiovideo.free.fr/ogg/1vs0_JuniorGroove.ogg" length="4239996" type="audio/ogg" /> </item> <item><title>Métodos estáticos en Python</title><link>http://www.linuxhispano.net/2009/10/29/metodos-estaticos-en-python/</link> <comments>http://www.linuxhispano.net/2009/10/29/metodos-estaticos-en-python/#comments</comments> <pubDate>Thu, 29 Oct 2009 10:43:00 +0000</pubDate> <dc:creator>Alberto Hornero Luque</dc:creator> <category><![CDATA[Noticias]]></category> <category><![CDATA[programación]]></category> <category><![CDATA[python]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=339</guid> <description><![CDATA[Ayer por la tarde me surgió una duda sobre Python. Como en cualquier lenguaje orientado a objetos y para realizar una llamada a un método de una clase que no hemos instanciado, esta deberá de ser estática. ¿Realmente se puede &#8230; <a
href="http://www.linuxhispano.net/2009/10/29/metodos-estaticos-en-python/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Ayer por la tarde me surgió una duda sobre <a
target="_blank" href="http://en.wikipedia.org/wiki/Python_%28programming_language%29">Python</a>. Como en cualquier lenguaje orientado a objetos y para realizar una llamada a un método de una clase que no hemos instanciado, esta deberá de ser estática. ¿Realmente se puede hacer esto en Python? No directamente. Me puse a buscar sobre el tema y a través de <a
target="_blank" href="http://code.activestate.com/recipes/52304/" target="_blank">ActiveState</a> descubro como resolver esto, no se trata de un problema del lenguaje si no de poder compatibilizar algo que sí podemos hacer en otros lenguajes como Java, C++ o .NET.</p><p>Vamos a verlo sobre un ejemplo, os lo iré comentando entre línas.</p><p><code># Directamente, tal como os comentaba, no funciona<br
/> class Clase:<br
/> def estatica(nombre):</code><code> print "Imprime ",nombre</code></p><p><code># Para comprobarlo, lo vamos a llamar como un método de la clase:<br
/> Clase.estatica("ahornero Linux Hispano")<br
/> # Fallará con un TypeError, ya que "estatica" se ha convertido en<br
/> un objeto independiente del método, no en una función normal</code></p><p><code># Lo podemos resolver de una manera relativamente sencilla:<br
/> class Llamador:<br
/> def __init__(self, cualquierLlamada):<br
/> self.__call__ = cualquierLlamada</code></p><p><code># Y un práctico ejemplo de su uso:<br
/> class Clase2:<br
/> def estatica(nombre):<br
/> print "Imprime ",nombre<br
/> estatica = Llamador(estatica)</code></p><p><code># ahora, lo lanzamos como antes:<br
/> Clase.estatica("ahornero en Linux Hispano")<br
/> # funciona correctamente, como esperábamos</code></p><p>Espero que os sirva de ayuda si os surge la situación. <strong>¿Conocéis alguna otra alternativa?</strong></p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2009/10/29/metodos-estaticos-en-python/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
