<?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; Programación</title>
	<atom:link href="http://draxus.org/weblog/category/programacion/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>Saving and loading tasks in MOA</title>
		<link>http://draxus.org/weblog/2011/05/17/saving-and-loading-tasks-in-moa/</link>
		<comments>http://draxus.org/weblog/2011/05/17/saving-and-loading-tasks-in-moa/#comments</comments>
		<pubDate>Tue, 17 May 2011 18:15:25 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[moa]]></category>
		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1418</guid>
		<description><![CDATA[MOA (Massive Online Analysis) is a great opensource and free software for data stream mining. If you are an enthusiastic of machine learning, classification or clustering, you should try it. You can work with MOA using the GUI, as well as the command line interface via Java. If you are using the graphical interface, you [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://moa.cs.waikato.ac.nz/">MOA</a> (Massive Online Analysis)</strong> is a great opensource and free software for data stream mining. If you are an enthusiastic of machine learning, classification or clustering, you should <a href="http://moa.cs.waikato.ac.nz/downloads/">try it</a>.</p>
<p>You can work with MOA using the GUI, as well as the command line interface via Java. If you are using the graphical interface, you can&#8217;t save and load previous tasks. Because of this, i have done some modifications in order to make my work easy.</p>
<div align="center"><a href="http://draxus.org/weblog/wp-content/uploads/2011/05/moa_buttons.png"><img src="http://draxus.org/weblog/wp-content/uploads/2011/05/moa_buttons-300x134.png" alt="" title="moa_buttons" width="300" height="134" class="aligncenter size-medium wp-image-1419" /></a></div>
<p>As you can see in the image, I have add a couple of buttons to the interface:</p>
<ul>
<li><strong>Save Log</strong>: create a log file with the strings of the tasks previously executed (you can select one or more from the task list).</li>
<li><strong>Set task manually</strong>: load a panel in which you can write the command of the task to run (for example, you can copy and paste a task from a previous log file).</li>
</ul>
<p>The patch for <strong>moa.gui.TaskManagerPanel</strong> class is available in <a href="http://pastebin.com/tJXHWb58">pastebin</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2011/05/17/saving-and-loading-tasks-in-moa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>boxee-miso: first steps</title>
		<link>http://draxus.org/weblog/2011/01/10/boxee-miso-first-steps/</link>
		<comments>http://draxus.org/weblog/2011/01/10/boxee-miso-first-steps/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 22:02:44 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[boxee]]></category>
		<category><![CDATA[boxee-miso]]></category>
		<category><![CDATA[miso]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1381</guid>
		<description><![CDATA[Some months ago, Miso team announced that they will be release an API. If you don&#8217;t know, Miso is a social platform for sharing your media activities (something like Foursquare but for tv shows and movies). So, a few days ago, this API was released and I registered an application named boxee-miso. My goal is [...]]]></description>
			<content:encoded><![CDATA[<p>Some months ago, <a href="http://gomiso.com">Miso</a> team announced that they will be release an API. If you don&#8217;t know, Miso is a social platform for sharing your media activities (something like <a href="http://foursquare.com">Foursquare</a> but for tv shows and movies). So, a few days ago, <a href="http://gomiso.com/developers">this API was released</a> and I registered an application named <strong><a href="http://code.google.com/p/boxee-miso/">boxee-miso</a></strong>. My goal is have a nice way to integrate Miso into <a href="http://www.boxee.tv/">Boxee</a> fabulous interface. If you haven&#8217;t Boxee, don&#8217;t wait to <a href="http://www.boxee.tv/download">download it</a>!</p>
<p>The first thing I did was looking for the code which paint the &#8220;share&#8221; window in Boxee. I&#8217;m using MacOS X, so I found it in
<pre><code>/Applications/Boxee.app/Contents/Resources/Boxee/skin/boxee/720p/boxee_share.xml</code></pre>
<p>. This XML file has a lot of elements, but what we need is to paint a button for checking in our Miso account. I add a new item (the middle one) like you can see in the next code:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="sc3"><span class="re1">&lt;content<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;label<span class="re2">&gt;</span></span></span>$LOCALIZE[53463]<span class="sc3"><span class="re1">&lt;/label<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;controlid<span class="re2">&gt;</span></span></span>700<span class="sc3"><span class="re1">&lt;/controlid<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;onclick<span class="re2">&gt;</span></span></span>-<span class="sc3"><span class="re1">&lt;/onclick<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>icons/icon_osd_share.png<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;label<span class="re2">&gt;</span></span></span>$LOCALIZE[53463]<span class="sc3"><span class="re1">&lt;/label<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;controlid<span class="re2">&gt;</span></span></span>710<span class="sc3"><span class="re1">&lt;/controlid<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;onclick<span class="re2">&gt;</span></span></span>RunScript(/Applications/Boxee.app/Contents/Resources/Boxee/scripts/Miso/test.py, $INFO[Container(5000).ListItem.Label], $INFO[Container(5000).ListItem.TVShowTitle], $INFO[Container(5000).ListItem.Season], $INFO[Container(5000).ListItem.Episode])<span class="sc3"><span class="re1">&lt;/onclick<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>icons/miso_top_logo.png<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;label<span class="re2">&gt;</span></span></span>$LOCALIZE[53464]<span class="sc3"><span class="re1">&lt;/label<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;controlid<span class="re2">&gt;</span></span></span>720<span class="sc3"><span class="re1">&lt;/controlid<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;onclick<span class="re2">&gt;</span></span></span>-<span class="sc3"><span class="re1">&lt;/onclick<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>icons/icon_custom_text.png<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/content<span class="re2">&gt;</span></span></span><br />
&nbsp;</div>
<p>I still don&#8217;t know what is the purpose of &#8220;controlid&#8221; param, but the others is quite easy to understand. The key of problem is to use well the &#8220;onclick&#8221; param. Fortunately, Boxee is based in <a href="xbmc.org">XBMC</a>, and I could found good documentation in <a href="http://wiki.xbmc.org/index.php?title=List_of_Built_In_Functions">this wiki</a>. So we will use RunScript in order to execute a python script which will receive some params (like name of the show, season or episode).</p>
<p>The image specified by &#8220;thumb&#8221; param is stored in
<pre><code>/Applications/Boxee.app/Contents/Resources/Boxee/skin/boxee/media/icons/miso_top_logo.png</code></pre>
<p>.</p>
<p>Thanks to all of this, I have reached write some content in the Boxee log using the script test.py specified in the &#8220;onclick&#8221; param. Now, I am working with the <a href="http://gomiso.com/developers/authentication">OAuth authentication of Miso API</a>. I will keep you informed.</p>
<div align="center"><a href="http://draxus.org/weblog/wp-content/uploads/2011/01/boxee-miso.png"><img src="http://draxus.org/weblog/wp-content/uploads/2011/01/boxee-miso-300x187.png" alt="" title="boxee-miso" width="300" height="187" class="size-medium wp-image-1389" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2011/01/10/boxee-miso-first-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extensiones útiles para MediaWiki</title>
		<link>http://draxus.org/weblog/2011/01/07/extensiones-utiles-mediawiki/</link>
		<comments>http://draxus.org/weblog/2011/01/07/extensiones-utiles-mediawiki/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 15:10:32 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[descuadrando]]></category>
		<category><![CDATA[extensiones]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1376</guid>
		<description><![CDATA[Estoy trabajando con Esteban Romero para migrar Descuadrando a MediaWiki, ya que actualmente funciona con DokuWiki. Por si no lo sabéis, MediaWiki es un software para wikis libre (GPL) y es el que usa Wikipedia. La puesta en marcha de un sistema MediaWiki es bastante más compleja que con DokuWiki, pero a largo plazo tiene [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy trabajando con <a href="http://estebanromero.com">Esteban Romero</a> para migrar <a href="http://descuadrando.com">Descuadrando</a> a <strong><a href="http://www.mediawiki.org/">MediaWiki</a></strong>, ya que actualmente funciona con <a href="http://www.dokuwiki.org/">DokuWiki</a>. Por si no lo sabéis, MediaWiki es un software para wikis libre (GPL) y es el que usa <a href="http://es.wikipedia.org/">Wikipedia</a>.</p>
<p>La puesta en marcha de un sistema MediaWiki es bastante más compleja que con DokuWiki, pero a largo plazo tiene mucha más flexibilidad y muchas extensiones (plugins) que permiten ampliar funcionalidades. En este post os voy a enumerar las que estamos usado en Descuadrando.</p>
<ul>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:ReCAPTCHA">reCAPTCHA</a></strong>: permite la integración de un captcha en el registro de usuarios.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:SelectCategoryTagCloud">SelectCategoryTagCloud</a></strong>: añade una nube de categorías en la creación de un post, para que sea más sencillo seleccionar una.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:Widgets">Widgets</a></strong>: permite añadir multitud de <a href="http://www.mediawikiwidgets.org/">widgets</a> a nuestras páginas.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:ParserFunctions">ParserFunctions</a></strong>: permite añadir sintaxis más compleja como <a href="http://www.mediawiki.org/wiki/Help:Extension:ParserFunctions">sentencias if o switch</a>.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:ExpandTemplates">ExpandTemplates</a></strong>: similar a la anterior, pero con otro tipo de expresiones. Especialmente útil para plantillas.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:InputBox">InputBox</a></strong>: permite añadir formularios a las páginas.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:AntiBot">AntiBot</a></strong>: bot para evitar spam y otras técnicas maliciosas.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:UsabilityInitiative">UsabilityInitiative</a></strong>: proporciona mejoras de usabilidad, sobre todo en el editor.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:ImageMap">ImageMap</a></strong>: permite crear <a href="http://en.wikipedia.org/wiki/Image_map">image maps</a>, es decir, una imagen con diferentes enlaces definidos por coordenadas.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:StubManager">StubManager</a></strong>: framework necesario para otras extensiones.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:ImageLink">ImageLink</a></strong>: permite insertar imágenes con enlaces y añadirles ciertos atributos.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:Cite">Cite</a></strong>: permite crear notas a pie de página.</li>
<li><strong><a href="http://www.mediawiki.org/wiki/Extension:CategoryTree">CategoryTree</a></strong>: permite ver las categorías de forma jerarquizada.</li>
</ul>
<p>En cada uno de los enlaces a la página de MediaWiki explican como se instalan cada una. Para la mayoría basta con subir los archivos al directorio &#8220;<strong>extensions</strong>&#8221; y luego añadir una línea al fichero LocalSettings.php.</p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2011/01/07/extensiones-utiles-mediawiki/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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>Uso del comando date en cron</title>
		<link>http://draxus.org/weblog/2010/03/16/uso-del-comando-date-en-cron/</link>
		<comments>http://draxus.org/weblog/2010/03/16/uso-del-comando-date-en-cron/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 08:17:19 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[logs]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1335</guid>
		<description><![CDATA[Si queremos crear un fichero de log con el resultado de un script que vamos a lanzar periódicamente usando cron, conviene tener en cuenta un detalle de sintaxis. $ crontab -e # m h dom mon dow command 00 03 * * * /ruta/script.sh &#62; /ruta/fichero_`date +\%y_\%m_\%d`.log Esto sería un ejemplo de la lista de [...]]]></description>
			<content:encoded><![CDATA[<p>Si queremos crear un fichero de log con el resultado de un script que vamos a lanzar periódicamente usando cron, conviene tener en cuenta un detalle de sintaxis.</p>
<pre><code>
$ crontab -e

# m h  dom mon dow   command
00 03  * * * /ruta/script.sh &gt; /ruta/fichero_`date +\%y_\%m_\%d`.log
</code></pre>
<p>Esto sería un ejemplo de la lista de tareas de cron, si os fijáis en el detalle de `date +\%d_\%m_\%y` se han escapado los símbolos de %. Esto se explica perfectamente en el man 5 crontab, pero lo escribo aquí para no olvidarme y por si de paso le sirve a alguien más.</p>
<blockquote><p>The  ‘‘sixth’’ field (the rest of the line) specifies the command to be run.  The entire command portion of the line, up  to  a  newline  or  % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the crontab file.  Percent-signs (%) in the  command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent  to  the  command  as standard  input.  There  is  no way to split a single command line onto multiple lines, like the shell’s trailing &#8220;\&#8221;.</p></blockquote>
<p><strong>Más información</strong>: <a href="http://en.wikipedia.org/wiki/Cron">cron</a> y <a href="http://en.wikipedia.org/wiki/Date_%28Unix%29">date</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2010/03/16/uso-del-comando-date-en-cron/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>substr HTML seguro en PHP</title>
		<link>http://draxus.org/weblog/2009/09/18/substr-html-seguro-en-php/</link>
		<comments>http://draxus.org/weblog/2009/09/18/substr-html-seguro-en-php/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 18:12:03 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[safe]]></category>
		<category><![CDATA[substr]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1250</guid>
		<description><![CDATA[Si habéis programado en PHP seguramente habréis utilizado la función substr que sirve para obtener una subcadena de una cadena de texto mayor tamaño. Por ejemplo: $cadena = &#8216;Hola Mundo!&#8217;; $subcadena = substr&#40;$cadena, 0, 4&#41;; print $subcadena; &#160; Obtendríamos como resultado &#8216;Hola&#8217;. Pero si estamos usando una cadena que contiene código HTML, es posible que [...]]]></description>
			<content:encoded><![CDATA[<p>Si habéis programado en PHP seguramente habréis utilizado la <strong>función <a href="http://es.php.net/substr">substr</a></strong> que sirve para obtener una subcadena de una cadena de texto mayor tamaño. Por ejemplo:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="re0">$cadena</span> = <span class="st0">&#8216;Hola Mundo!&#8217;</span>;<br />
<span class="re0">$subcadena</span> = <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$cadena</span>, <span class="nu0">0</span>, <span class="nu0">4</span><span class="br0">&#41;</span>;<br />
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="re0">$subcadena</span>;<br />
&nbsp;</div>
<p>Obtendríamos como resultado <em>&#8216;Hola&#8217;</em>.</p>
<p>Pero si estamos usando una cadena que contiene código HTML, es posible que se queden <strong>etiquetas abiertas</strong> y nos de problemas. Por ejemplo:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="re0">$cadena</span> = <span class="st0">&#8216;&lt;a href=&quot;helloworld.php&quot;&gt;Hola Mundo!&lt;/a&gt;&#8217;</span>;<br />
<span class="re0">$subcadena</span> = <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$cadena</span>, <span class="nu0">0</span>, <span class="nu0">4</span><span class="br0">&#41;</span>;<br />
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="re0">$subcadena</span>;<br />
&nbsp;</div>
<p>Obtendríamos como resultado <em>&#8216;&lt;a h&#8217;</em>. Y no es lo que quería.</p>
<p>He encontrado una <strong>solución</strong> en los <a href="http://es.php.net/manual/en/function.substr.php#52893">comentarios</a> de la propia web de PHP. Sería usar la siguiente función en vez de substr.</p>
<div class="dean_ch" style="white-space: wrap;">
&lt; ?php</p>
<p><span class="coMULTI">/**<br />
&nbsp;* string csubstr ( string string, int start [, int length] )<br />
&nbsp;*<br />
&nbsp;* @author FanFataL<br />
&nbsp;* @param string string<br />
&nbsp;* @param int start<br />
&nbsp;* @param [int length]<br />
&nbsp;* @return string<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> csubstr<span class="br0">&#40;</span><span class="re0">$string</span>, <span class="re0">$start</span>, <span class="re0">$length</span>=<span class="kw2">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$pattern</span> = <span class="st0">&#8216;/(<span class="es0">\[</span><span class="es0">\w</span>+[^<span class="es0">\]</span>]*?<span class="es0">\]</span>|<span class="es0">\[</span><span class="es0">\/</span><span class="es0">\w</span>+<span class="es0">\]</span>|&lt;<span class="es0">\w</span>+[^&gt;]*?&gt;|&lt; <span class="es0">\/</span><span class="es0">\w</span>+&gt;)/i&#8217;</span>;<br />
&nbsp; &nbsp; <span class="re0">$clean</span> = <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="re0">$pattern</span>, <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>, <span class="re0">$string</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!<span class="re0">$length</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> = <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$clean</span>, <span class="re0">$start</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> = <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$clean</span>, <span class="re0">$start</span>, <span class="re0">$length</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> = <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$clean</span>, <span class="re0">$start</span>, <span class="re0">$length</span> + <a href="http://www.php.net/substr_count"><span class="kw3">substr_count</span></a><span class="br0">&#40;</span><span class="re0">$str</span>, <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="re0">$pattern</span> = <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>,<span class="st0">&#8216;(.*?)&#8217;</span>,<a href="http://www.php.net/preg_quote"><span class="kw3">preg_quote</span></a><span class="br0">&#40;</span><span class="re0">$str</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/&#8217;</span>.<span class="re0">$pattern</span>.<span class="st0">&#8216;/is&#8217;</span>, <span class="re0">$string</span>, <span class="re0">$matched</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$matched</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$string</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw2">?&gt;</span> <br />
&nbsp;</div>
<p>Por tanto, si ahora cambiamos <strong>substr</strong> por <strong>csubstr</strong>, obtendríamos como resultado &#8216;&lt;a href=&#8221;helloworld.php&#8221;&gt;Hello&lt;/a&gt;&#8217;. Que a la hora de imprimirlo en una web quedaría correctamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2009/09/18/substr-html-seguro-en-php/feed/</wfw:commentRss>
		<slash:comments>2</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>Cómo clonar ramas (branch) en git</title>
		<link>http://draxus.org/weblog/2009/04/18/como-clonar-ramas-branch-en-git/</link>
		<comments>http://draxus.org/weblog/2009/04/18/como-clonar-ramas-branch-en-git/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 15:17:53 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1197</guid>
		<description><![CDATA[Escenario Tienes tu proyecto en un repositorio de github.com con dos ramas (master y foo) y quieres clonarlas a tu disco duro. Solución git clone git@github.com:usuario/proyecto.git Con esto obtendremos la rama principal (master). git fetch git checkout --track -b foo origin/foo Y con esto otro la rama foo. ¿Conocéis alguna forma más sencilla? En este [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Escenario</strong><br />
Tienes tu proyecto en un repositorio de github.com con dos ramas (<em>master</em> y <em>foo</em>) y quieres clonarlas a tu disco duro.</p>
<p><strong>Solución</strong></p>
<pre><code>git clone git@github.com:usuario/proyecto.git</code></pre>
<p>Con esto obtendremos la rama principal (<em>master</em>).</p>
<pre><code>git fetch
git checkout --track -b foo origin/foo</code></pre>
<p>Y con esto otro la rama <em>foo</em>.</p>
<p>¿Conocéis alguna forma más sencilla? En este caso tenemos dos ramas, pero si hubiese N+1, ¿tendremos que descargar todas una a una?</p>
<p><a href="http://groups.google.com/group/github/browse_thread/thread/71f944b925467ab6">Vía</a></p>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2009/04/18/como-clonar-ramas-branch-en-git/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AAP Práctica 3 &#8211; Script para Greasemonkey</title>
		<link>http://draxus.org/weblog/2009/03/30/aap-practica-3-script-para-greasemonkey/</link>
		<comments>http://draxus.org/weblog/2009/03/30/aap-practica-3-script-para-greasemonkey/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 22:01:24 +0000</pubDate>
		<dc:creator>DraXus</dc:creator>
				<category><![CDATA[AAP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[swad]]></category>
		<category><![CDATA[ugr]]></category>

		<guid isPermaLink="false">http://draxus.org/weblog/?p=1177</guid>
		<description><![CDATA[Greasemonkey es un plugin para el navegador Firefox que nos permite modificar el comportamiento de la página web que estemos visitando gracias a los diferentes scripts que tengamos instalados. Estos scripts se programan en Javascript, de manera que tenemos una versatilidad increíble para cambiar el aspecto y dotar de más funcionalidad a una web. Para [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="https://addons.mozilla.org/es-ES/firefox/addon/748">Greasemonkey</a></strong> es un plugin para el navegador Firefox que nos permite modificar el comportamiento de la página web que estemos visitando gracias a los <a href="http://userscripts.org/">diferentes scripts</a> que tengamos instalados. Estos scripts se programan en Javascript, de manera que tenemos una versatilidad increíble para cambiar el aspecto y dotar de más funcionalidad a una web.</p>
<p>Para mi práctica he hecho un script muy simple pero útil para <strong>los foros de <a href="http://swad.ugr.es">Swad</a></strong>, la plataforma de apoyo a la docencia con más uso de la Universidad de Granada. La funcionalidad que he añadido es la de citar en tu respuesta el trozo de texto que selecciones de un mensaje anterior.</p>
<p>Los que tengáis cuenta en Swad podéis <strong>instalar</strong> el script simplemente pinchando en: <strong><a href="http://draxus.org/weblog/wp-content/uploads/2009/03/replyswad.user.js">replyswad.user.js</a></strong> (previamente has de tener instalado <a href="https://addons.mozilla.org/es-ES/firefox/addon/748">Greasemonkey</a>).</p>
<p>Este sería el botón extra añadido:</p>
<div align="center" style="border:1px solid gray; padding:2px"><img src="http://draxus.org/weblog/wp-content/uploads/2009/03/replyswad_boton.png" alt="boton citar texto swad"/></div>
<p>Y este el aspecto que presentaría nuestro mensaje:</p>
<div align="center" style="border:1px solid gray; padding:2px"><img src="http://draxus.org/weblog/wp-content/uploads/2009/03/replyswad_mensaje.png" alt="mensaje con texto citado swad"/></div>
]]></content:encoded>
			<wfw:commentRss>http://draxus.org/weblog/2009/03/30/aap-practica-3-script-para-greasemonkey/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

