<?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>The Power of Mind &#187; python</title>
	<atom:link href="http://draxus.org/weblog/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://draxus.org/weblog</link>
	<description>El blog de DraXus</description>
	<lastBuildDate>Wed, 18 Jan 2012 13:43:27 +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>Mostrar metadatos de música, imágenes y pdf en Nautilus</title>
		<link>http://draxus.org/weblog/2011/01/05/mostrar-metadatos-de-musica-imagenes-y-pdf-en-nautilus/</link>
		<comments>http://draxus.org/weblog/2011/01/05/mostrar-metadatos-de-musica-imagenes-y-pdf-en-nautilus/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 12:45:46 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[columns]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[nautilus]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1368</guid>
		<description><![CDATA[Intentando organizar un poco los artículos en PDF que tengo, me he dado cuenta que sería útil poder visualizar el autor y el título del mismo en el navegador de archivos de Gnome (Nautilus). Buscando en Google he encontrado que ya existía algo similar, pero que solo servía para música e imágenes. Es una extensión [...]]]></description>
			<content:encoded><![CDATA[<p>Intentando organizar un poco los artículos en PDF que tengo, me he dado cuenta que sería útil poder visualizar el autor y el título del mismo en el navegador de archivos de Gnome (Nautilus).</p>
<p><a href="http://draxus.org/weblog/wp-content/uploads/2011/01/nautilus-music-columns1.png"><img src="http://draxus.org/weblog/wp-content/uploads/2011/01/nautilus-music-columns1.png" alt="" title="nautilus-music-columns" width="450" height="213" class="aligncenter size-full wp-image-1373" /></a></p>
<p>Buscando en Google he encontrado que ya existía algo similar, pero que solo servía para música e imágenes. Es una extensión que se llama <strong><a href="http://www.webupd8.org/2010/10/music-and-exif-metadata-information-in.html">nautilus-columns</a></strong> (<a href="http://ubuntuforums.org/showthread.php?t=878683">hebra en Ubuntu Forums</a>). Al ver que estaba hecha en python me he puesto a modificarla para añadirle soporte de PDFs. No ha resultado muy complicado gracias a la librería <a href="http://pybrary.net/pyPdf/">pyPdf</a>.</p>
<p>Podéis descargar el script en <a href="http://pastebin.com/WxspTtvL">http://pastebin.com/WxspTtvL</a></p>
<p>Son necesarias las siguientes dependencias: </p>
<pre><code># apt-get install python-nautilus python-mutagen python-pyexiv2 \
python-kaa-metadata libnautilus-extension1 python-pypdf</code></pre>
<p>Una vez instalado, tenéis que activar los campos Title y Artist, para mostrar el título y el autor, respectivamente.</p>
<p><strong>Editado:</strong> si usáis Ubuntu, podéis descargar la extensión con esta nueva modificación desde el repositorio oficial.</p>
<pre><code>
$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt-get update
$ sudo apt-get install nautilus-columns
$ nautilus -q
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2011/01/05/mostrar-metadatos-de-musica-imagenes-y-pdf-en-nautilus/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Enviar email con valores de una base de datos UTF-8 en Python</title>
		<link>http://draxus.org/weblog/2010/07/08/enviar-email-con-valores-de-una-base-de-datos-utf-8-en-python/</link>
		<comments>http://draxus.org/weblog/2010/07/08/enviar-email-con-valores-de-una-base-de-datos-utf-8-en-python/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 11:24:36 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[smtplib]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1351</guid>
		<description><![CDATA[Si tenemos un base de datos MySQL y queremos enviar emails usando la librería smptlib de python, nos puede dar más de un quebradero de cabeza si queremos usar la codificación UTF-8. Pongo aquí este breve manual que he hecho con la ayuda de Héctor, un compañero del proyecto en el que estoy trabajando ahora [...]]]></description>
			<content:encoded><![CDATA[<p>Si tenemos un base de datos MySQL y queremos enviar emails usando la <a href="http://docs.python.org/library/smtplib.html">librería smptlib de python</a>, nos puede dar más de un quebradero de cabeza si queremos usar la codificación UTF-8. Pongo aquí este breve manual que he hecho con la ayuda de Héctor, un compañero del proyecto en el que estoy trabajando ahora mismo.</p>
<p>Si usamos la librería <a href="http://sourceforge.net/projects/mysql-python/">MySQLdb</a>, tendremos que añadir unos parámetros adicionales para indicarle que nos vamos a conectar a una base de datos con codificación UTF-8.</p>
<div class="dean_ch" style="white-space: wrap;">con = MySQLdb.<span class="me1">connect</span><span class="br0">&#40;</span>host, <span class="kw3">user</span>, passwd, database, charset=<span class="st0">&quot;utf8&quot;</span>, init_command=<span class="st0">&quot;set names utf8&quot;</span><span class="br0">&#41;</span><br />
con.<span class="me1">names</span> = <span class="st0">&quot;utf8&quot;</span></div>
<p>Ahora creamos el mensaje a enviar:</p>
<div class="dean_ch" style="white-space: wrap;">mensaje_email = u<span class="st0">&#8216;Código de alarma: %s <span class="es0">\n</span>&#8216;</span> % codigo<br />
mensaje_email+= u<span class="st0">&#8216;ID de alarma: %s<span class="es0">\n</span>&#8216;</span>% ID_ALARMA<br />
mensaje_email+= u<span class="st0">&#8216;Descripción de alarma: %s<span class="es0">\n</span>&#8216;</span> % descripcion</p>
<p><span class="co1">#Formar mensaje de email tipo MIME.</span><br />
msg = MIMEText<span class="br0">&#40;</span>mensaje_email.<span class="me1">encode</span><span class="br0">&#40;</span><span class="st0">&#8216;utf-8&#8242;</span><span class="br0">&#41;</span>, _charset=<span class="st0">&quot;UTF-8&quot;</span><span class="br0">&#41;</span><br />
msg<span class="br0">&#91;</span><span class="st0">&#8216;Subject&#8217;</span><span class="br0">&#93;</span> = subject<br />
msg<span class="br0">&#91;</span><span class="st0">&#8216;From&#8217;</span><span class="br0">&#93;</span> = email_from<br />
msg<span class="br0">&#91;</span><span class="st0">&#8216;Reply-to&#8217;</span><span class="br0">&#93;</span> = email_reply_to<br />
msg<span class="br0">&#91;</span><span class="st0">&#8216;To&#8217;</span><span class="br0">&#93;</span> = email_to</div>
<p>Y por último, lo enviamos a través del servidor de correo:</p>
<div class="dean_ch" style="white-space: wrap;">mailServer = <span class="kw3">smtplib</span>.<span class="me1">SMTP</span><span class="br0">&#40;</span>mail_server<span class="br0">&#41;</span><br />
mailServer.<span class="me1">ehlo</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
mailServer.<span class="me1">starttls</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
mailServer.<span class="me1">ehlo</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
mailServer.<span class="me1">login</span><span class="br0">&#40;</span>username, passwd<span class="br0">&#41;</span><br />
<span class="kw1">try</span>: &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;mailServer.<span class="me1">sendmail</span><span class="br0">&#40;</span>username, to_addr, msg.<span class="me1">as_string</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="kw1">except</span> BaseException, e:<br />
&nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;Error al enviar e-mail: %s&quot;</span> % e<br />
mailServer.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2010/07/08/enviar-email-con-valores-de-una-base-de-datos-utf-8-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Haciendo un planet en python</title>
		<link>http://draxus.org/weblog/2009/05/07/haciendo-un-planet-en-python/</link>
		<comments>http://draxus.org/weblog/2009/05/07/haciendo-un-planet-en-python/#comments</comments>
		<pubDate>Thu, 07 May 2009 21:15:11 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[AAP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1205</guid>
		<description><![CDATA[La práctica 5 de AAP consistía en crear un programa que recogiese las noticias de diferentes fuentes y las mostrase en un sólo documento HTML, lo que se viene a denominar un planet en la jerga bloguera. En mi caso lo he programado en Python haciendo uso de la librería feedparser y genero una página [...]]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://geneura.ugr.es/~jmerelo/asignaturas/AAP/AAP-Practica-5.mhtml">práctica 5 de AAP</a> consistía en crear un programa que recogiese las noticias de diferentes fuentes y las mostrase en un sólo documento HTML, lo que se viene a denominar un <em>planet</em> en la jerga bloguera.</p>
<p>En mi caso lo he programado en <strong>Python</strong> haciendo uso de la librería <a href="http://www.feedparser.org/">feedparser</a> y genero una página HTML así como un feed usando la librería <a href="http://www.dalkescientific.com/Python/PyRSS2Gen.html">PyRSS2Gen</a>.</p>
<p>He usado la codificación de caracteres <strong>utf-8</strong> en todo momento, pero tengo un problema al generar el archivo html ya que no se guarda como utf-8 (si lo abrimos con un editor como geany podemos comprobar que está &#8220;sin codificación&#8221;), y luego al mostrarlo en el navegador no se ve bien. El caso es que en mi máquina sí se muestra correctamente, pero en el servidor donde lo he alojado no, como podéis ver en <a href="http://swecai.ugr.es/~planet_etsiit">http://swecai.ugr.es/~planet_etsiit</a>.  Si en el navegador seleccionáis la codificación unicode, se ve bien, e incluso en el header está el meta indicando que es utf-8. <del datetime="2009-05-07T22:42:17+00:00">¿Alguna idea de cómo solucionar esto?</del> <strong>Editado</strong>: <a href="http://bicosyes.com">blaxter</a> ha dado con la tecla en <a href="http://draxus.org/weblog/2009/05/07/haciendo-un-planet-en-python/#comment-8235">este comentario</a>. ¡Gracias!</p>
<p>Podéis descargar la aplicación libremente: <strong><a href="http://draxus.org/upload/planet.tgz">planet.tgz</a></strong>. En el fichero <em>index.html</em> viene una descripción más detallada del trabajo realizado y en la carpeta <em>scripts</em> se encuentra el fichero <em>actualizar.py</em> que se encarga de generar los ficheros <em>planet.html</em> y <em>feed.xml</em> a partir de los feeds situados en <em>sites.txt</em> cada cierto tiempo, que podemos indicar usando una tarea <em>cron</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2009/05/07/haciendo-un-planet-en-python/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>La mano inocente automágica</title>
		<link>http://draxus.org/weblog/2008/12/12/la-mano-inocente-automagica/</link>
		<comments>http://draxus.org/weblog/2008/12/12/la-mano-inocente-automagica/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 12:18:12 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[Frikadas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[amigo invisible]]></category>
		<category><![CDATA[mano inocente]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1019</guid>
		<description><![CDATA[Por segundo año consecutivo va a tener lugar en el grupo flickr de Granada el juego del amigo invisible. Se trata de regalar una fotografía imitando el estilo de la persona que te toque, que se realizará mediante sorteo entre los fotógrafos participantes. Teniendo en cuenta que hay más de 50 personas inscritas, hacer el [...]]]></description>
			<content:encoded><![CDATA[<p>Por segundo año consecutivo va a tener lugar en el <a href="http://www.flickr.com/groups/granainos/">grupo flickr de Granada</a> <strong><a href="http://www.flickr.com/groups/granainos/discuss/72157610809386195/">el juego del amigo invisible</a></strong>. Se trata de regalar una fotografía imitando el estilo de la persona que te toque, que se realizará mediante sorteo entre los fotógrafos participantes. Teniendo en cuenta que hay <strong>más de 50 personas</strong> inscritas, hacer el emparejamiento a mano es bastante tedioso, así que me he hecho un script en python que se encargará de esta tarea.</p>
<pre><code>
&lt;pre lang="python"&gt;
from random import choice
import sys

def saca_de_bolsa(bolsa, *personas):
    for persona in personas:
        if persona in bolsa:
            bolsa.remove(persona)

class MalaSuerte(Exception):
    pass

def amigo_invisible(amigos):
    resultado = []
    for persona in amigos:
        bolsa = list(amigos)

        # saco la persona actual para que no le toque ella misma
        saca_de_bolsa(bolsa, persona)

        # saco todos los que ya han salido
        saca_de_bolsa(bolsa, *resultado)

        # hago el sorteo
        if len(bolsa) == 0:
            raise MalaSuerte
        amigo = choice(bolsa)
        resultado.append(amigo)

        print 'El amigo invisible de %s es %s' % (persona, amigo)

# Comprobamos que se le pasa un fichero de entrada
if len(sys.argv)&amp;lt;2:
    print 'Sintaxis: amigo_invisible.py &amp;lt;fichero_entrada&amp;gt;'
    sys.exit()

# Leemos el fichero de entrada y creamos la lista de amigos
amigos = ()
try:
    file = open(sys.argv[1])
    for line in file:
        amigos += (line.strip() ,)
except:
    print 'Error al leer el archivo %s' % (sys.argv[1])
finally:
    file.close()

# El amigo invisible puede fallar si al sortear la ultima persona, solo esta
# ella misma en la bolsa
sorteo_valido = False
while not sorteo_valido:
    try:
        amigo_invisible(amigos)
        sorteo_valido = True
    except MalaSuerte:
        print 'Hemos tenido mala suerte, hay que repetir el sorteo\n\n\n'
&lt;/pre&gt;
</code></pre>
<p>Los datos de entrada los coge de un fichero <del datetime="2008-12-14T15:26:54+00:00">&#8220;listado.txt&#8221;, que tiene que estar en el mismo directorio que el script</del> que hay que pasarle como parámetro y estará formado por los nombres de los participantes, uno por línea. Seguramente se pueda hacer más eficiente y más bonito, pero para hacerlo en 10 minutos antes de irse a dormir, cumple perfectamente con su función :)</p>
<p><em>Trabajo futuro</em>: enviar un email al usuario con su amigo invisible.</p>
<p><strong>Actualización</strong>: corrijo el script, usando el propuesto por <a href="http://draxus.org/weblog/2008/12/12/la-mano-inocente-automagica/#comment-7846">Loren</a>, ya que podría darse algún caso en el que el amigo invisible de una persona sea ella misma y esto no se controlaba.</p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2008/12/12/la-mano-inocente-automagica/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>DjangoStack: instalador de django multiplataforma</title>
		<link>http://draxus.org/weblog/2008/06/24/djangostack-instalador-de-django-multiplataforma/</link>
		<comments>http://draxus.org/weblog/2008/06/24/djangostack-instalador-de-django-multiplataforma/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 21:51:21 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[djangostack]]></category>
		<category><![CDATA[instaladores]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[stack]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=875</guid>
		<description><![CDATA[Andaba yo líado instalando django en MacOS X para ir refrescando cosillas, y conseguí hacerlo funcionar con algún manual que encontré por ahí. Pero de un día para otro dejó de funcionar. Intenté arreglarlo pero no daba con la tecla, hasta que finalmente encontré DjangoStack, que no es ni más ni menos que un instalador [...]]]></description>
			<content:encoded><![CDATA[<p>Andaba yo líado instalando django en MacOS X para ir refrescando cosillas, y conseguí hacerlo funcionar con algún manual que encontré <a href="http://google.es">por ahí</a>. Pero de un día para otro dejó de funcionar. Intenté arreglarlo pero no daba con la tecla, hasta que finalmente encontré <strong><a href="http://bitnami.org/stack/djangostack">DjangoStack</a></strong>, que no es ni más ni menos que un instalador &#8220;todo en uno&#8221; de <a href="http://draxus.org/weblog/tag/python">Python</a>, <a href="http://draxus.org/weblog/tag/django">Django</a>, <a href="http://draxus.org/weblog/tag/mysql">MySQL</a> y <a href="http://draxus.org/weblog/tag/apache">Apache</a>, además para <a href="http://draxus.org/weblog/tag/linux">Linux</a> y <a href="http://draxus.org/weblog/tag/mac">Mac</a>. Funciona muy bien y a la primera, ¿qué más se puede pedir?</p>
<div align="center"><img src="http://draxus.org/weblog/wp-content/uploads/2008/06/djangoinstaller_default.png" alt="aspecto del instalador" /></div>
<p><span id="more-875"></span><br />
También podemos encontrar otros productos:</p>
<ul>
<li><strong><a href="http://bitnami.org/stack/jrubystack">JRubyStack</a></strong>: <em>JRuby, Rails, Java, Tomcat, GlassFish gem, MySQL y Subversion</em> para Linux, Mac y Windows</li>
<li><strong><a href="http://bitnami.org/stack/lampstack">LAMPStack</a></strong>: <em>Apache, MySQL y PHP</em> para Linux</li>
<li><strong><a href="http://bitnami.org/stack/mampstack">MAMPStack</a></strong>: <em>Apache, MySQL y PHP</em> para Mac</li>
<li><strong><a href="http://bitnami.org/stack/sampstack">SAMPStack</a></strong>: <em>Apache, MySQL y PHP</em> para Solaris</li>
<li><strong><a href="http://bitnami.org/stack/wampstack">WAMPStack</a></strong>: <em>Apache, MySQL y PHP</em> para Windows</li>
<li><strong><a href="http://bitnami.org/stack/rubystack">RubyStack</a></strong>: <em>Ruby, Rails, MySQL y Subversion</em> para Linux, Mac y Windows.</li>
</ul>
<p>Os recomiendo que le echéis un vistazo a su <a href="http://bitnami.org/stacks">sección de instaladores (stacks)</a> si queréis ahorraros tiempo y molestias en el desarrollo y uso de aplicaciones webs.</p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2008/06/24/djangostack-instalador-de-django-multiplataforma/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

