<?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>La fatiga del Geek &#187; Python</title>
	<atom:link href="http://nauj27.com/blog/category/programacion/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://nauj27.com/blog</link>
	<description>Reflexiones y cacharreos de nauj27</description>
	<lastBuildDate>Fri, 09 Mar 2012 08:14:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Fuse layer for ADB &#8211; adbfuse</title>
		<link>http://nauj27.com/blog/2012/02/01/fuse-layer-for-adb-adbfuse/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fuse-layer-for-adb-adbfuse</link>
		<comments>http://nauj27.com/blog/2012/02/01/fuse-layer-for-adb-adbfuse/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 19:17:55 +0000</pubDate>
		<dc:creator>nauj27</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[fuse]]></category>

		<guid isPermaLink="false">http://nauj27.com/blog/?p=912</guid>
		<description><![CDATA[En los últimos días he estado trabajando en un proyecto que permite mostrar el contenido de un móvil con Android como si fuese una unidad de disco externa. Las ventajas que tiene respecto a activar la conexión por USB que trae Android de serie son varias, entre ellas: Acceso completo al sistema de ficheros del [...]]]></description>
			<content:encoded><![CDATA[<p>En los últimos días he estado trabajando en un proyecto que permite mostrar el contenido de un móvil con <a href="http://www.android.com/">Android</a> como si fuese una unidad de disco externa.</p>
<p>Las ventajas que tiene respecto a activar la conexión por USB que trae Android de serie son varias, entre ellas:</p>
<ul>
<li><strong>Acceso completo al sistema de ficheros</strong> del teléfono. La tarjeta de memoria interna es accesible en <em>/mnt/sdcard</em>.</li>
<li><strong>Acceso simultáneo desde el teléfono y desde el ordenador</strong>. De este modo no dejarán de funcionar las aplicaciones que han sido pasadas a la tarjeta de memoria mientras la usamos desde el ordenador.</li>
</ul>
<p>Se trata de una primera versión y en directorios donde hay muchos archivos, por ejemplo la carpeta de fotos o de música, el acceso puede ser algo lento. Las siguientes versiones de <a title="Fuse layer for ADB" href="http://code.google.com/p/adbfuse/">adbfuse</a> irán mejorando este y otros aspectos.</p>
<p>Se trata de algo para usuarios avanzados, ya que el teléfono ha de estar <em>rooteado</em>, tener instalado BusyBox, y saber montar un sistema de archivos FUSE en Linux.</p>
<p>Se puede descargar en <a href="http://code.google.com/p/adbfuse/">la web del proyecto</a> tanto la <a href="http://code.google.com/p/adbfuse/downloads/detail?name=adbfuse.tar.bz2">versión empaquetada</a> como el código fuente con <a href="http://mercurial.selenic.com/">Mercurial</a>. El proyecto ha sido liberado bajo la licencia <a href="http://gplv3.fsf.org/">GNU GPLv3</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nauj27.com/blog/2012/02/01/fuse-layer-for-adb-adbfuse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MetaWatch Firmware</title>
		<link>http://nauj27.com/blog/2011/11/03/metawatch-firmware/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=metawatch-firmware</link>
		<comments>http://nauj27.com/blog/2011/11/03/metawatch-firmware/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 18:32:11 +0000</pubDate>
		<dc:creator>nauj27</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[metawatch]]></category>

		<guid isPermaLink="false">http://nauj27.com/blog/?p=895</guid>
		<description><![CDATA[Este verano me compré un reloj MetaWatch. Este reloj nace según sus creadores como una plataforma para desarrollo de manera que está documentado desde antes de venderse. La documentación la actualizan, el firmware lo actualizan y la aplicación para Android la actualizan también. Además proporcionan el código fuente tanto de la aplicación para Android como [...]]]></description>
			<content:encoded><![CDATA[<p>Este verano <a href="https://estore.ti.com/MSP-WDS430BT2000D-Bluetooth-Wearable-Watch-development-system-with-Digital-display-P2447.aspx">me compré</a> un reloj <a href="http://www.metawatch.org">MetaWatch</a>. Este reloj nace según sus creadores como una <a href="http://www.metawatch.org/developers/">plataforma para desarrollo</a> de manera que está documentado desde antes de venderse. La documentación la actualizan, el firmware lo actualizan y la aplicación para Android la actualizan también.</p>
<p>Además proporcionan el código fuente tanto de la <a href="https://github.com/MetaWatchOpenProjects/MWM-for-Android">aplicación para Android</a> como del <a href="https://github.com/MetaWatchOpenProjects/MetaWatch-WDS11x-IAR">Firmware</a> del mismo. Se me ocurrió hacerle una modificación, y es que cuando se pulsa el primer botón, el de arriba a la derecha, aparece mi tarjeta de visita. En este artículo explicaré de forma resumida el proceso para conseguir mi objetivo.</p>
<p>Lo primero es generar un <a href="http://es.wikipedia.org/wiki/C%C3%B3digo_QR">qrcode</a> en la web de <a href="http://zxing.appspot.com/generator/">zxing</a>. Se rellena la información pertinente y se genera de tamaño S para que quepa en la pantalla de 96&#215;96 del reloj. Aunque la imagen generada es un poco más grande aprovecharemos el hecho de que tiene un marco blanco alrededor despreciable sin pérdida de información. Una vez generado se abre con Gimp y se cambia el tamaño del lienzo a 96&#215;96 recortando la zona blanca del alrededor tanto como sea necesario para que entre, sin redimensionar la imagen. Se guarda como BMP indexado de dos colores sin comprimir y ya tenemos la imagen preparada.</p>
<p>En el código fuente del firmware del reloj, las imágenes se encuentran directamente en el formato aceptado por el búfer de la pantalla, es decir, como array de bytes. Al tener la pantalla 96&#215;96 píxeles como ya decíamos antes, se tiene un array de 96 filas con 12 bytes por fila. Doce bytes por ocho bits por byte hacen un total de 96 columnas.</p>
<p>Para convertir cualquier imagen BMP indexada con dos colores a array de bytes he realizado este pequeño script en python usando parte del código de <a href="https://github.com/travisgoodspeed/PyMetaWatch">PyMetaWatch</a>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> Image
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
  image = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
  pix = image.<span style="color: black;">load</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">for</span> y <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">96</span><span style="color: black;">&#41;</span>:
    rowdat = <span style="color: #483d8b;">&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">96</span>,<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span>:
      byte=<span style="color: #ff4500;">0</span>
      <span style="color: #ff7700;font-weight:bold;">for</span> pindex <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span>:
        pixel=pix<span style="color: black;">&#91;</span>x+pindex,y<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>pixel <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:
          pixel = <span style="color: #ff4500;">1</span>
&nbsp;
        byte=<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>byte<span style="color: #66cc66;">&gt;&gt;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>|<span style="color: black;">&#40;</span>pixel<span style="color: #66cc66;">&lt;&lt;</span><span style="color: #ff4500;">7</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
      rowdat=<span style="color: #483d8b;">&quot;%s%s&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>rowdat,<span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>byte<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    myrow = <span style="color: #483d8b;">&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> dat <span style="color: #ff7700;font-weight:bold;">in</span> rowdat:
      myrow += <span style="color: #483d8b;">&quot;0x%02x,&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: #008000;">ord</span><span style="color: black;">&#40;</span>dat<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> myrow
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
  main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Pasando como parámetro el nombre del archivo BMP devuelve un bloque de caracteres que habrá que usar en el código fuente del firmware. Lo que hice fue volcar la salida a un fichero y después copiar y pegar el resultado. Con eso es suficiente para nuestro objetivo final, no buscábamos hacer un programa de conversión sino que tan solo ha sido una herramienta intermedia.</p>
<p>Finalmente hay que buscar en el fichero <a href="https://github.com/MetaWatchOpenProjects/MetaWatch-WDS11x-IAR/blob/master/Watch/Application/LcdDisplay.c">LcdDisplay.c</a> la definición de <a href="https://github.com/MetaWatchOpenProjects/MetaWatch-WDS11x-IAR/blob/master/Watch/Application/LcdDisplay.c#L2019">pBarCodeImage</a> y sustituir su valor por el generado por el script anterior. Se compila el proyecto y se programa el nuevo firmware al reloj siguiendo las mismas instruciones que existen para la <a href="http://www.metawatch.org/assets/images/developers/MetaWatch_Reflash_your_Watch_Firmware_1.0.pdf">actualización oficial</a>. Y <a href="https://twitter.com/#!/nauj27/status/131725636778725376">ya está</a>.</p>
<p>Gracias a <a href="http://draxus.org/">draxus</a> por encontrar la ubicación del QRCode original en el código fuente del firmware.</p>
]]></content:encoded>
			<wfw:commentRss>http://nauj27.com/blog/2011/11/03/metawatch-firmware/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usar Javascript desde Python</title>
		<link>http://nauj27.com/blog/2009/01/02/usar-javascript-desde-python/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usar-javascript-desde-python</link>
		<comments>http://nauj27.com/blog/2009/01/02/usar-javascript-desde-python/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 20:29:36 +0000</pubDate>
		<dc:creator>nauj27</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://nauj27.com/blog/?p=534</guid>
		<description><![CDATA[Desde la web de Caja GRANADA se pueden enviar 30 SMS al mes si se tiene acceso a la caja electrónica. Cuando estoy en casa y envío un SMS desde el iPhone usando la conexión wifi es realmente incómodo. La web de Caja GRANADA es&#8230; increíble. Y lo digo en el más irónico de los [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_536" class="wp-caption alignleft" style="width: 251px"><img class="size-full wp-image-536" title="python-logo" src="http://nauj27.com/blog/wp-content/uploads/2009/01/python-logo.png" alt="Python" width="241" height="101" /><p class="wp-caption-text">Python</p></div>
<p style="text-align: justify;">Desde la web de <a href="httphttp://caja.caja-granada.es/">Caja GRANADA</a> se pueden enviar 30 SMS al mes si se tiene acceso a la <a href="https://www.caja-granada.es/2031/01LOGIN1.htm">caja electrónica</a>.</p>
<p style="text-align: justify;">Cuando estoy en casa y envío un SMS desde el iPhone usando la conexión wifi es <em>realmente incómodo</em>. La web de Caja GRANADA es&#8230; increíble. Y lo digo en el más irónico de los sentidos, o no. Es frame sobre frame, tabla sobre tabla, una encrucijada de código que al iPhone se le atraganta un poco.</p>
<p style="text-align: justify;">Se puede llegar a usar pero para colmo tiene un contador de caracteres mientras se escribe el mensaje para el SMS que quita el foco al campo de entrada. Como consecuencia el teclado virtual se esconde con cada letra y no hay manera de escribir unas palabras sin desesperarse.</p>
<p style="text-align: justify;">Por otro lado hay algo en esta web que hacen bien en mi opinión, y es cuidar la seguridad. Sin entrar en detalles diré que la clave que escribes para entrar no es enviada, sino que se envía el resultado de un cifrado <a href="http://es.wikipedia.org/wiki/Triple_DES">triple des</a> de la misma. Hace unos meses usaban tan solo <a href="http://es.wikipedia.org/wiki/Data_Encryption_Standard">des</a> y gracias a una librería en python conseguí el mismo resultado. Esta vez no sé por qué por más parámetros que probé no conseguía el mismo resultado así que tenía básicamente dos opciones:</p>
<h2 style="text-align: justify;"><strong>Implementar el código javascript de caja granada en python</strong></h2>
<p style="text-align: justify;">Me daba mucha pereza y quise buscar algo más antes de ponerme manos a la obra.</p>
<h2 style="text-align: justify;">Ejecutar javascript desde python</h2>
<p>Aquí es donde entra en juego <a href="http://code.google.com/p/python-spidermonkey/">python-spidermonkey</a>. La instalación consiste en seguir los pasos indicados en la web para ello, bajando la versión de SVN. Su uso es muy sencillo de modo que esto es básicamente lo que hice:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> spidermonkey <span style="color: #ff7700;font-weight:bold;">import</span> Runtime
<span style="color: #ff7700;font-weight:bold;">def</span> js_des<span style="color: black;">&#40;</span>clave, pin<span style="color: black;">&#41;</span>:
    runtime = Runtime<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    context = runtime.<span style="color: black;">new_context</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    context.<span style="color: black;">eval_script</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;var mod3 = function() {}&quot;</span><span style="color: black;">&#41;</span>
    context.<span style="color: black;">eval_script</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&quot;&quot;
        mod3.prototype.des = function(hexKey, message, encrypt, mode, iv, padding) {
            // código de la función pegado literalmente del js de cajagranada
            // ...
    &quot;&quot;&quot;</span><span style="color: black;">&#41;</span>
    context.<span style="color: black;">eval_script</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&quot;&quot;
        mod3.prototype.des_createKeys = function(key) {
            // blah blah blah...
    &quot;&quot;&quot;</span><span style="color: black;">&#41;</span>
    <span style="color: #808080; font-style: italic;"># ...</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> context.<span style="color: black;">eval_script</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;m = new mod3(); m.des('%s', '%s');&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>clave, pin<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Y finalmente para usarlo tan solo habrá que hacer algo similar a lo siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> md3
&nbsp;
<span style="color: #808080; font-style: italic;"># [...]</span>
pin_cifrado = mod3.<span style="color: black;">js_des</span><span style="color: black;">&#40;</span>clave, credenciales.<span style="color: black;">PIN</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Y de este modo la variable pin_cifrado tomará el valor devuelto por la función en javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://nauj27.com/blog/2009/01/02/usar-javascript-desde-python/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Migración a WordPress completada</title>
		<link>http://nauj27.com/blog/2008/06/15/migracion-a-wordpress-completada/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=migracion-a-wordpress-completada</link>
		<comments>http://nauj27.com/blog/2008/06/15/migracion-a-wordpress-completada/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 19:36:54 +0000</pubDate>
		<dc:creator>nauj27</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://nauj27.com/blog/?p=453</guid>
		<description><![CDATA[Bueno pues al fin he realizado la migración. Por el camino he perdido alguna información como las categorías, los usuarios registrados y el estilo visual de la web, pero en el fondo ha merecido la pena. Hace un par de años migré el blog antiguo a utf8, por lo que los caracteres acentuados se quedaron [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno pues al fin he realizado <a title="Migración de pmachine a wordpress" href="http://nauj27.com/blog/2008/06/14/diez-motivos-por-los-que-migrar-a-wordpress/">la migración</a>. Por el camino he perdido alguna información como las categorías, los usuarios registrados y el estilo visual de la web, pero en el fondo ha merecido la pena. Hace un par de años migré el blog antiguo a <strong>utf8</strong>, por lo que los caracteres acentuados se quedaron un poco regular. Ahora se habían quedado peor aún así que me he hecho un pequeño programa para arreglarlo.</p>
<p>Después de tener la base de datos con todos los artículos y comentarios he realizado un volcado de la base de datos completa y he aplicado el siguiente script en python:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- encoding: utf-8 -*-</span>
&nbsp;
inputFile = <span style="color: #483d8b;">'post_wordpressnauj27.sql'</span>
outputFile = <span style="color: #483d8b;">'post-out-wordpressnauj27.sql'</span>
&nbsp;
fin = <span style="color: #008000;">file</span><span style="color: black;">&#40;</span>inputFile, <span style="color: #483d8b;">'rt'</span><span style="color: black;">&#41;</span>
fout = <span style="color: #008000;">file</span><span style="color: black;">&#40;</span>outputFile, <span style="color: #483d8b;">'wt'</span><span style="color: black;">&#41;</span>
&nbsp;
finBuffer = fin.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
fin.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
foutBuffer = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
badChars =  <span style="color: black;">&#40;</span>u<span style="color: #483d8b;">&quot;Ã¡&quot;</span>, u<span style="color: #483d8b;">&quot;Ã©&quot;</span>, u<span style="color: #483d8b;">&quot;Ã­&quot;</span>, u<span style="color: #483d8b;">&quot;Ã³&quot;</span>, u<span style="color: #483d8b;">&quot;Ãº&quot;</span>, u<span style="color: #483d8b;">&quot;Â¿&quot;</span>, u<span style="color: #483d8b;">&quot;â‚¬&quot;</span>, u<span style="color: #483d8b;">&quot;Ã±&quot;</span>, u<span style="color: #483d8b;">&quot;Â¡&quot;</span>, u<span style="color: #483d8b;">&quot;Â¬&quot;</span><span style="color: black;">&#41;</span>
fixedChars = <span style="color: black;">&#40;</span>u<span style="color: #483d8b;">&quot;á&quot;</span>, u<span style="color: #483d8b;">&quot;é&quot;</span>, u<span style="color: #483d8b;">&quot;í&quot;</span>, u<span style="color: #483d8b;">&quot;ó&quot;</span>, u<span style="color: #483d8b;">&quot;ú&quot;</span>, u<span style="color: #483d8b;">&quot;¿&quot;</span>, u<span style="color: #483d8b;">&quot;€&quot;</span>, u<span style="color: #483d8b;">&quot;ñ&quot;</span>, u<span style="color: #483d8b;">&quot;¡&quot;</span>, u<span style="color: #483d8b;">&quot;¬&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> finBuffer:
    line = line.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> index <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>badChars<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
        line = line.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>badChars<span style="color: black;">&#91;</span>index<span style="color: black;">&#93;</span>, fixedChars<span style="color: black;">&#91;</span>index<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
    foutBuffer.<span style="color: black;">append</span><span style="color: black;">&#40;</span>line.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
fout.<span style="color: black;">writelines</span><span style="color: black;">&#40;</span>foutBuffer<span style="color: black;">&#41;</span>
fout.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
fout.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Una vez hecho esto he volcado el resultado de nuevo en la base de datos y listo. Lo siguiente será personalizar el aspecto de la web y dejar de usar la plantilla por defecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://nauj27.com/blog/2008/06/15/migracion-a-wordpress-completada/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

