<?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>Codigo Manso</title>
	<atom:link href="http://www.codigomanso.com/es/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codigomanso.com</link>
	<description>Programación, informática y tecnología</description>
	<lastBuildDate>Sat, 05 Jan 2013 10:11:00 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>Diseñar webs y aplicaciones móviles rápido y fácil</title>
		<link>http://www.codigomanso.com/es/2013/01/disenar-webs-y-aplicaciones-moviles-rapido-y-facil/</link>
		<comments>http://www.codigomanso.com/es/2013/01/disenar-webs-y-aplicaciones-moviles-rapido-y-facil/#comments</comments>
		<pubDate>Fri, 04 Jan 2013 08:47:53 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1091</guid>
		<description><![CDATA[A la hora de diseñar ventanas, webs, y aplicaciones para móviles, más de una vez he intentado usar alguna aplicación como mockingbird o Pencil Project. La primera, mockingbird, es una aplicación web a la que se puede acceder desde cualquier navegador y te permite diseñar varias páginas con distintos elementos. En cuanto a la segunda aplicación, Pencil Project, [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.wireframe.cc"><img class="alignleft size-medium wp-image-1103" alt="Wireframe" src="http://www.codigomanso.com/wp-content/uploads/2013/01/wireframe-website-300x176.jpg" width="300" height="176" /></a>A la hora de diseñar ventanas, webs, y aplicaciones para móviles, más de una vez he intentado usar alguna aplicación como <a title="Mockingbird mockups" href="https://gomockingbird.com/" target="_blank">mockingbird</a> o <a title="Pencil Project sketching and prototyping" href="http://www.evolus.vn/Pencil/Home.html" target="_blank">Pencil Project</a>. La primera, mockingbird, es una aplicación web a la que se puede acceder desde cualquier navegador y te permite diseñar varias páginas con distintos elementos. En cuanto a la segunda aplicación, Pencil Project, nació inicialmente como una extensión de Firefox, pero ya dispone de versión multiplataforma de escritorio. La verdad es que también va muy bien.</p>
<p style="text-align: justify;">El inconveniente de estas dos aplicaciones, es que por alguna razón, al final siempre me resulta más sencillo coger papel y lápiz y hacer cuatro garabatos mal hechos que me ayudan a organizar mis ideas mejor. Supongo que la razón es que al no ser diseñador, lo mismo me da hacer un diseño churro en papel en 2 minutos, que un diseño churro en un programa con elementos bonitos, donde suelo tardar 3 o 4 veces más&#8230; porque al final te lias, te lias&#8230; y el tiempo pasa y pasa.</p>
<p style="text-align: justify;">Sea como fuere, el otro día descubrí <a title="Fast mockup designs" href="http://www.wireframe.cc" target="_blank">Wireframe.cc</a>, y la verdad es que quedé bastante impresionado por el UI. Es supersencillo, arrastras el ratón y listo, ya tienes un elemento. Haces click en el tipo de elemento que quieres, y ya lo tienes&#8230; haces doble click sobre el elemento, y puedes cambiar atributos, etc&#8230;</p>
<p style="text-align: justify;">Realmente, es la primera vez que siento que una aplicación de este tipo no me hace perder el tiempo.  Por lo que he visto, esta aplicación está comenzando, y le faltan varios aspectos que pulir y funcionalidades que añadir, y supongo que se irán añadiendo, pero desde luego para hacer un diseño rápido y sencillo me sobra <img src='http://www.codigomanso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Os recomiendo que les echeis un vistazo a las tres aplicaciones que os he comentado, todas tienen sus cosas buenas o malas, y supongo que como todo en la vida, depende de las necesidades y preferencias que uno tenga. Yo de momento me quedo con <a title="Wireframe: design fast" href="http://www.wireframe.cc" target="_blank">wireframe.cc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2013/01/disenar-webs-y-aplicaciones-moviles-rapido-y-facil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oferta de trabajo: buscamos programador</title>
		<link>http://www.codigomanso.com/es/2012/08/oferta-de-trabajo-buscamos-programador/</link>
		<comments>http://www.codigomanso.com/es/2012/08/oferta-de-trabajo-buscamos-programador/#comments</comments>
		<pubDate>Sun, 05 Aug 2012 10:38:17 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1072</guid>
		<description><![CDATA[&#160; Update:  Ya hemos cerrado el plazo para enviar solicitudes. En mi empresa estamos buscando ingeniero desarrollador de software para mi equipo, lo que viene siendo un programador, pero de los buenos ;p Los detalles de la oferta, así como los datos de contacto, los podeis encontrar en el siguiente enlace: https://dl.dropbox.com/u/20600084/JobOffer_SDE-Aug2012.pdf No es una [...]]]></description>
				<content:encoded><![CDATA[<p><img class=" wp-image-1075 " title="David en la cocina nueva" src="http://www.codigomanso.com/wp-content/uploads/2012/08/562808_10151993442160593_824095488_n.jpg" alt="" width="500" height="400" /></p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>Update:</strong>  Ya hemos cerrado el plazo para enviar solicitudes.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">En mi empresa estamos buscando ingeniero desarrollador de software para mi equipo, lo que viene siendo un programador, pero de los buenos ;p</p>
<p style="text-align: justify;">Los detalles de la oferta, así como los datos de contacto, los podeis encontrar en el siguiente enlace:</p>
<p style="text-align: justify;"><strong><a href="https://dl.dropbox.com/u/20600084/JobOffer_SDE-Aug2012.pdf" rel="nofollow" target="_blank">https://dl.dropbox.com/u/<wbr>20600084/<wbr>JobOffer_SDE-Aug2012.pdf</wbr></wbr></a></strong></p>
<p style="text-align: justify;">No es una oferta para un programador normal, <strong>es una oferta para alguien a quien le apasione programar</strong>. Alguien a quien le guste resolver problemas complejos y se sienta cómodo trabajando con proyectos grandes. Alguien con experiencia programando en C/C++, HTML/JS/CSS, Python, &#8230; y en lo que le echen. C/C++ hay que dominarlo, lo demás ya es más opcional&#8230; alguien que sepa esto se puede adaptar y aprender fácilmente. Tienes puntos extra si has programado en ensamblador y si tienes años demostrables en la industria. Buscamos a alguien autosuficiente, con ganas de hacer cosas nuevas y ganas de mantener productios viejos :p  &#8230;hombre, todo no va a ser bueno&#8230;</p>
<p style="text-align: justify;">Lo malo es que habrá productos &#8220;viejos&#8221; y complejos que mantener, lo bueno es que también hay proyectos nuevos y siempre hay tiempo para innovar, mejorar los productos existentes y hacer  prototipos de nuevos productos <img src='http://www.codigomanso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: justify;">La oferta es para trabajar en El Campello, Alicante (España). Si no eres de por la zona, pero te llama la atención la oferta, te diré que como cosas buenas, tienes alquiler de apartamentos a 2 minutos de la oficina, con vistas a la playa y al mar, te diré que el ambiente de trabajo es cojonudo, y te diré que la oficina es bastante amplia (también se ve el mar desde la oficina), tenemos cocina, y realizamos compras mensuales en el supermercado para tener un poco de todo para almorzar. El horario es de 8 horas y salvo contadas ocasiones, no se hacen horas extra, cuando se hacen, se suelen cambiar por días de vacaciones/horas de descanso. Hay 25 días de vacaciones al año, y salvo muy contadas excepciones puedes elegir las fechas a tu gusto. Sé que todo esto suena raro para España, por eso lo comento.</p>
<p style="text-align: justify;">Desde mi punto de vista, el currículum sirve para descartar, pero no para contratar, así que si no tienes demasiada experiencia, pero te encanta programar, y tienes ganas de aprender, manda un e-mail, igual eres tú el candidato que buscamos. Habrá una o varias pruebas para contratar/descartar candidatos, y en las pruebas habrá que calentarse un poco la cabeza&#8230; y cómo no, tendrás que demostrar que tienes aptitudes para programar y resolver problemas programando.</p>
<p style="text-align: justify;">Esta oferta de trabajo es una recomendación personal a los lectores del blog. A mi me gusta programar y me gusta mi trabajo, si no no gastaría el tiempo en escribir un post en un día de vacaciones. El trabajo mola y está bien pagado (estamos hablando siempre de Alicante, España). Las cosas que desarrolles afectarán luego a millones de personas, osea que haciendo las cosas bien, también es un trabajo gratificante.</p>
<p style="text-align: justify;">Dicho esto, si conoces a alguien a quien le pueda intersar esta oferta, mándale el PDF.</p>
<p style="text-align: justify;">Suerte!</p>
<p style="text-align: justify;"><strong>Nota final:</strong> este artículo refleja mis opiniones y valoraciones personales, no los de la empresa</p>
<p style="text-align: justify;"><strong>Nota 2:</strong> la foto es de David, un compañero de la oficina que me ha dejado poner su foto con la nueva cocina <img src='http://www.codigomanso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2012/08/oferta-de-trabajo-buscamos-programador/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hack Manso: Mejorar la velocidad de SQLite en Google App Engine SDK</title>
		<link>http://www.codigomanso.com/es/2011/08/manso-trick-speedup-sqlite-database-in-google-app-engine-sd/</link>
		<comments>http://www.codigomanso.com/es/2011/08/manso-trick-speedup-sqlite-database-in-google-app-engine-sd/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 10:54:29 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[google app engine]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[truco manso]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[hack manso]]></category>
		<category><![CDATA[mansohack]]></category>
		<category><![CDATA[mansotrick]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1065</guid>
		<description><![CDATA[Estaba tratando de inicializar una base de datos en local, con el Google App Engine SDK y me estaba volviendo loco. Ni siquiera era factible usar &#8211;use_sqlite que introdujeron en la versión 1.3.3. La velocidad de los inserts a la base de datos iban superlentos, en plan, diez por segundo. Infumable. Vale, vale, es el [...]]]></description>
				<content:encoded><![CDATA[<p>Estaba tratando de inicializar una base de datos en local, con el Google App Engine SDK y me estaba volviendo loco.</p>
<p>Ni siquiera era factible usar &#8211;use_sqlite que introdujeron en la versión 1.3.3. La velocidad de los inserts a la base de datos iban superlentos, en plan, diez por segundo. Infumable.</p>
<p>Vale, vale, es el SDK, y el objetivo es desarrollar la aplicación y la velocidad no es lo más importante&#8230; pero si para insertar 1000 datos, tienen que pasar 10 minutos, pues mal vamos. Si me dijeras 1 millón, pues aún lo entendería minimamente&#8230; pero ¿1000 miseros inserts? ¿10 minutos? ¿estamos todos locos?</p>
<p>Así que, partiendo de que SQLite parece funcionar de puta madre, pues no me cuadraba&#8230; Mirando el FAQ de SQLite, me he encontrado con que la pregunta 19:</p>
<p><a href="http://www.sqlite.org/faq.html#q19" target="_blank"><strong>(19) INSERT is really slow &#8211; I can only do few dozen INSERTs per second</strong></a></p>
<p>La respuesta es, SQLite puede hacer fácil 50.000 inserts/segundo peeeeeeeero para garantizar la integridad de los datos, se espera a que el disco confirme que los datos se han escrito bien, por si se va la luz, etc&#8230; Vamos, un cuello de botella enorme, cuando a mi los datos me dan un poco igual porque es un entorno de prueba, lo que quiero es que vayan rápido los inserts porque si no me muero del asco desarrollando.</p>
<p>En fin, que la solución que dan es usar &#8220;<a href="http://www.sqlite.org/pragma.html#pragma_synchronous" target="_blank">PRAGMA synchronous=OFF</a>&#8220;. La única forma de usar ese pragma, es editar el SDK del Google App Engine, y ejecutar esa línea tras inicializar la base de datos.</p>
<p>Hay que editar el archivo:</p>
<p>google_appengine/google/appengine/datastore/datastore_sqlite_stub.py</p>
<p>Vamos al constructor &#8220;__init__&#8221;, y después de que inicialize la conexión a la base de datos &#8220;self.__connection = sqlite3.connect [...]&#8221; pues metemos la siguiente linea:</p>
<p>self.__connection.execute(&#8216;PRAGMA synchronous=OFF&#8217;)</p>
<p>Y, afotunadamente, cambiando esta línea he pasado de 10 inserts por segundo a más de 100 inserts por segundo. Más de 10x más rápido cambiando sólo una linea.</p>
<p>Ahora ya puedo continuar con lo que estaba haciendo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2011/08/manso-trick-speedup-sqlite-database-in-google-app-engine-sd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Truco Manso: obtener una cadena hexadecimal aleatoria en python</title>
		<link>http://www.codigomanso.com/es/2011/07/truco-manso-obtener-una-cadena-hexadecimal-aleatoria-en-python/</link>
		<comments>http://www.codigomanso.com/es/2011/07/truco-manso-obtener-una-cadena-hexadecimal-aleatoria-en-python/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 07:22:53 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[truco manso]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1058</guid>
		<description><![CDATA[Obtener una cadena de bytes aleatoria es una de esas cosas que hacen falta de vez en cuando. La opción más sencilla en python es importar uuid y hacer la siguiente llamada: uuid.uuid4().hex Ale, con esa llamada ya tenemos 32 caracteres hexadecimales aleatorios (16 bytes aleatorios). ¿Sabes de algún otro método?]]></description>
				<content:encoded><![CDATA[<p>Obtener una cadena de bytes aleatoria es una de esas cosas que hacen falta de vez en cuando.<br />
La opción más sencilla en python es importar uuid y hacer la siguiente llamada:</p>
<p><code>uuid.uuid4().hex</code></p>
<p>Ale, con esa llamada ya tenemos 32 caracteres hexadecimales aleatorios (16 bytes aleatorios).</p>
<p>¿Sabes de algún otro método?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2011/07/truco-manso-obtener-una-cadena-hexadecimal-aleatoria-en-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TrucoManso: Transformar el tiempo en formato 24h a formato 12h (Python)</title>
		<link>http://www.codigomanso.com/es/2011/05/trucomanso-transformar-el-tiempo-en-formato-24h-a-formato-12h-python/</link>
		<comments>http://www.codigomanso.com/es/2011/05/trucomanso-transformar-el-tiempo-en-formato-24h-a-formato-12h-python/#comments</comments>
		<pubDate>Sat, 28 May 2011 18:13:24 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[truco manso]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[formatting]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1052</guid>
		<description><![CDATA[Truco manso para transformar una cadena de tiempo en formato de 24h en formato de 12h (AM/PM) def ampmformat (hhmmss): """ This method converts time in 24h format to 12h format Example: "00:32" is "12:32 AM" "13:33" is "01:33 PM" """ ampm = hhmmss.split (":") if (len(ampm) == 0) or (len(ampm) > 3): return hhmmss [...]]]></description>
				<content:encoded><![CDATA[<p>Truco manso para transformar una cadena de tiempo en formato de 24h en formato de 12h (AM/PM)</p>
<pre><code>
def ampmformat (hhmmss):
  """
    This method converts time in 24h format to 12h format
    Example:   "00:32" is "12:32 AM"
               "13:33" is "01:33 PM"
  """
  ampm = hhmmss.split (":")
  if (len(ampm) == 0) or (len(ampm) > 3):
    return hhmmss

  # is AM? from [00:00, 12:00[
  hour = int(ampm[0]) % 24
  isam = (hour >= 0) and (hour < 12)

  # 00:32 should be 12:32 AM not 00:32
  if isam:
    ampm[0] = ('12' if (hour == 0) else "%02d" % (hour))
  else:
    ampm[0] = ('12' if (hour == 12) else "%02d" % (hour-12))

  return ':'.join (ampm) + (' AM' if isam else ' PM')
</code></pre>
<p>Y un ejemplo de uso:</p>
<pre><code>ampmformat ("00:00:00") # devuelve "12:00:00 AM"
ampmformat ("12:00:00") # devuelve "12:00:00 PM"

ampmformat ("01:23:45") # devuelve "01:23:45 AM"
ampmformat ("13:23:45") # devuelve "01:23:45 PM"
ampmformat ("05:43:21") # devuelve "05:43:21 AM"
ampmformat ("17:43:21") # devuelve "05:43:21 PM"
    
ampmformat ("11:59:59") # devuelve "11:59:59 AM"
ampmformat ("23:59:59") # devuelve "11:59:59 PM"
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2011/05/trucomanso-transformar-el-tiempo-en-formato-24h-a-formato-12h-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine SDK 1.4.0 released</title>
		<link>http://www.codigomanso.com/es/2010/12/google-app-engine-sdk-1-4-0-released/</link>
		<comments>http://www.codigomanso.com/es/2010/12/google-app-engine-sdk-1-4-0-released/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 12:54:32 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1045</guid>
		<description><![CDATA[Ya está disponible la versión 1.4.0 del SDK de Google App Engine. Particularmente resaltaría 3 cosas de este release: Los taskqueues ya forman parte del API oficial, han dejado de ser experimentales Han multiplicado por 20 los tiempos máximos de ejecución de las tareas cron y de las tareas del task queue de 30 segundos [...]]]></description>
				<content:encoded><![CDATA[<p>Ya está disponible la versión 1.4.0 del SDK de Google App Engine.</p>
<p>Particularmente resaltaría 3 cosas de este release:</p>
<ul>
<li>Los <a href="http://code.google.com/appengine/docs/python/taskqueue/">taskqueues</a> ya forman parte del API oficial, han dejado de ser experimentales <img src='http://www.codigomanso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Han multiplicado por 20 los tiempos máximos de ejecución de las <a href="http://code.google.com/appengine/docs/python/config/cron.html">tareas cron </a>y de las tareas del <a href="http://code.google.com/appengine/docs/python/taskqueue/">task queue</a> de 30 segundos a 600 segundos (10 minutos). Esto es fantástico, aunque puede ser peligroso. Habrá que usarlo sabiamente <img src='http://www.codigomanso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>El uso del <a href="http://code.google.com/appengine/docs/python/channel/">Channel API</a> ya está disponible para todo el mundo de forma oficial.</li>
</ul>
<p>El Channel API me impresionó cuando le eché un vistazo por allá por Mayo. A continuación el video del Channel API. Es bastante técnico y sólo tiene sentido si programas en GAE o si por ejemplo quieres hacer un API para comunicación <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">Comet</a> entre cliente-servidor:</p>
<p><object width="480" height="290"><param name="movie" value="http://www.youtube.com/v/oMXe-xK0BWA&#038;hl=en_US&#038;feature=player_embedded&#038;version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/oMXe-xK0BWA&#038;hl=en_US&#038;feature=player_embedded&#038;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="480" height="290"></embed></object></p>
<p>Enlaces:</p>
<ul>
<li><a href="http://code.google.com/appengine/downloads.html">Google App Engine SDK Download Page</a></li>
<li><a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes">Google App Engine Release Notes</a></li>
<li><a href="http://www.google.com/events/io/2010/sessions/building-real-time-apps-app-engine-feed-api.html">Building real-time web apps with App Engine and the Feed API</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2010/12/google-app-engine-sdk-1-4-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Truco Manso: Obtener la latitud/longitud a partir de una dirección</title>
		<link>http://www.codigomanso.com/es/2010/11/truco-manso-obtener-la-latitudlongitud-a-partir-de-una-localizacion-o-direccion/</link>
		<comments>http://www.codigomanso.com/es/2010/11/truco-manso-obtener-la-latitudlongitud-a-partir-de-una-localizacion-o-direccion/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 11:27:32 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[truco manso]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[latitude]]></category>
		<category><![CDATA[longitude]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1038</guid>
		<description><![CDATA[Para un proyecto que espero que pronto vea la luz, he estado investigando cómo determinar la localización geográfica de cualquier sitio. Esto es, determinar la latitud/longitud a partir de una frase en plan &#8220;Elche, Alicante, Spain&#8221; A esto se le llama Geocoding y a poco que he buscado tanto Google como Yahoo tienen APIs REST [...]]]></description>
				<content:encoded><![CDATA[<p>Para un proyecto que espero que pronto vea la luz, he estado investigando cómo determinar la localización geográfica de cualquier sitio. Esto es, determinar la latitud/longitud a partir de una frase en plan &#8220;Elche, Alicante, Spain&#8221;</p>
<p>A esto se le llama Geocoding y a poco que he buscado tanto Google como Yahoo tienen APIs REST que te permiten enchufar queries en un servidor (aunque con unos términos de uso limitados).</p>
<p>En el caso de Yahoo, hace falta darse de alta para que te den un appid y poder hacer los queries.</p>
<p>En el caso de Google, no es así, y preguntar la latitud y longitud de &#8220;Elche, Alicante, Spain&#8221; es tan fácil como:</p>
<p><a href="http://maps.googleapis.com/maps/api/geocode/json?address=Elche,+Alicante,+Spain&amp;sensor=false">http://maps.googleapis.com/maps/api/geocode/json?address=Elche,+Alicante,+Spain&amp;sensor=false</a></p>
<p>Esto devuelve un churrasco en JSON (también lo puedes pedir en XML) y dentro de este churrasco, dice que la latitud/longitud es:<br />
&#8220;lat&#8221;: 38.2671765,<br />
&#8220;lng&#8221;: -0.6952196</p>
<p>También existe GeoNames, que es menos preciso, pero puede resultar interesante también (ver enlace más abajo).</p>
<p>Para más información:</p>
<ul>
<li>Google Geocoding API:<br />
<a href="http://code.google.com/apis/maps/documentation/geocoding/index.html">http://code.google.com/apis/maps/documentation/geocoding/index.html</a></li>
<li>Yahoo! Place Finder:<br />
<a href="http://developer.yahoo.com/geo/placefinder/">http://developer.yahoo.com/geo/placefinder/</a></li>
<li>GeoNames geographical database:<br />
<a href="http://www.geonames.org/">http://www.geonames.org/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2010/11/truco-manso-obtener-la-latitudlongitud-a-partir-de-una-localizacion-o-direccion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Soporte de unicode en Python: Frustraciones y Soluciones</title>
		<link>http://www.codigomanso.com/es/2010/09/unicode-support-in-python-frustrations-and-solutions/</link>
		<comments>http://www.codigomanso.com/es/2010/09/unicode-support-in-python-frustrations-and-solutions/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 23:49:55 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[frustracion]]></category>
		<category><![CDATA[pesadillas]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1032</guid>
		<description><![CDATA[Personalmente el soporte de unicode en Python anterior a Python 3, siendo finos, es una puta mierda. Casi prefiero el soporte que tiene PHP 5.x de unicode (cero patatero). Sinceramente es para volverse loco, porque cosas que a priori van, luego petan, o realmente no petan, sólo petan cuando intentas mostrarlas por la consola haciendo [...]]]></description>
				<content:encoded><![CDATA[<p>Personalmente el soporte de unicode en Python anterior a Python 3, siendo finos, es una puta mierda. Casi prefiero el soporte que tiene PHP 5.x de unicode (cero patatero).</p>
<p>Sinceramente es para volverse loco, porque cosas que a priori van, luego petan, o realmente no petan, sólo petan cuando intentas mostrarlas por la consola haciendo print&#8230;</p>
<p>En fin, que tratando de solucionar mis frustraciones con python y el unicode, he encontrado el siguiente enlace:</p>
<p><a href="http://packages.python.org/kitchen/unicode-frustrations.html">Overcoming unicode frustrations in Python 2</a></p>
<p>El enlace anterior es lectura obligada para cualquiera que de vez en cuando le salte una excepción tipo UnicodeEncodeError, como:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">UnicodeEncodeError: <span style="color: #ff0000;">'ascii'</span> codec can<span style="color: #ff0000;">'t encode character u'</span>\xe1<span style="color: #ff0000;">' in position 654: ordinal not in range(128)</span></pre></td></tr></table></div>

<p>Finalmente, mi esperanza es que en Python 3 todo esto se solucione, y a juzgar por lo que he ido leyendo parece que si&#8230; pero ¡habrá que ver para creer!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2010/09/unicode-support-in-python-frustrations-and-solutions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Serializando datos nativos en Python</title>
		<link>http://www.codigomanso.com/es/2010/09/serializing-native-data-variables-in-python/</link>
		<comments>http://www.codigomanso.com/es/2010/09/serializing-native-data-variables-in-python/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 10:47:07 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[serialization]]></category>
		<category><![CDATA[serialize]]></category>
		<category><![CDATA[yaml]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=1026</guid>
		<description><![CDATA[Resulta que para un proyecto en Python en el que estoy trabajando necesitaba serializar algunas estructuras. El tema es que únicamente hacía falta serializar tipos nativos como listas, diccionarios, cadenas, enteros, etc&#8230; Lo que me hacía falta era: representación compacta serialización/deserialización rápida legible / editable por un humano Así que después de pensar un rato, [...]]]></description>
				<content:encoded><![CDATA[<p>Resulta que para un proyecto en Python en el que estoy trabajando necesitaba serializar algunas estructuras. El tema es que únicamente hacía falta serializar tipos nativos como listas, diccionarios, cadenas, enteros, etc&#8230;</p>
<p>Lo que me hacía falta era:</p>
<ul>
<li>representación compacta</li>
<li>serialización/deserialización rápida</li>
<li>legible / editable por un humano</li>
</ul>
<p>Así que después de pensar un rato, he encontrado 3 posibles soluciones para serializar datos arbitrarios:</p>
<ul>
<li>pickle/cPickle que serializa cualquier cosa, viene con python, pero no es legible/editable</li>
<li>simplejson que serializa en formato JSON (el resultado es legible y editable)</li>
<li>PyYAML que serializa en YAML (el resultado es legible y editable)</li>
</ul>
<p>El siguiente paso era coger un buen montón de datos, y hacer tests para ver que tal funcionan los encoders/decoders en cada uno de esos módulos. </p>
<p>A continuación puedes ver los gráficos de los tiempos de encoding/decoding para dos conjuntos de datos empleando cada uno de los formatos anteriores:</p>
<p><img src="http://chart.apis.google.com/chart?chxl=1:|YAML|JSON|pickle+raw|pickle+highest&#038;chxp=1,0.5,1.5,2.5,3.5&#038;chxr=1,0,4&#038;chxt=y,x&#038;chbh=a,4,0&#038;chs=500x320&#038;cht=bvs&#038;chco=3072F3,FF9900,FF9900&#038;chd=s:oBBB,,&#038;chdlp=l&#038;chtt=Python+Serialization+Speed+Test+(Tiny+Dataset)&#038;chts=000000,10.5" width="500" height="320" alt="Python Serialization Speed Test (Tiny Dataset)" /></p>
<p><img src="http://chart.apis.google.com/chart?chxl=1:|YAML|JSON|pickle+raw|pickle+highest&#038;chxp=1,0.5,1.5,2.5,3.5&#038;chxr=1,0,4&#038;chxs=0,676767,15.5,-0.5,l,676767&#038;chxt=y,x&#038;chbh=a,4,0&#038;chs=500x320&#038;cht=bvs&#038;chco=3072F3&#038;chd=s:5CBB&#038;chdlp=l&#038;chtt=Python+Serialization+Speed+Test+(Huge+Dataset)&#038;chts=000000,10.5" width="500" height="320" alt="Python Serialization Speed Test (Huge Dataset)" /></p>
<p>A parte de la velocidad, también me interesaba medir la longitud de las cadenas generadas (cuanto menos, mejor):</p>
<ul>
<li>yaml   tiny = 32604  // huge = 912912</li>
<li>json   tiny = 31305 // huge = 876540</li>
<li>pickle-raw    tiny = 34504 // huge = 986531</li>
<li>pickle-highest   tiny = 37541 // huge = 1101480</li>
</ul>
<h5>Conclusión:</h5>
<p>Como se puede ver en las gráficas, y en la tabla anterior, considero que JSON es el que me hace mejor papel.  Codifica / decodifica ligeramente más despacio que pickle (un 4% más despacio) pero la cadena resultante es legible y editable y además ocupa menos espacio que picke y que yaml.</p>
<p>Todos los tests han sido realizados con Python 2.5</p>
<h5>El código:</h5>
<p>Finalmente, aquí dejo un fragmento de código usado para obtener los tiempos que aparecen en los gráficos anteriores:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;">    start <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <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: #66cc66;">,</span> <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span>:
      yaml.<span style="color: black;">safe_load</span> <span style="color: black;">&#40;</span>yaml.<span style="color: black;">safe_dump</span> <span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">write</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;YAML TIME = %.2f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> % <span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - start<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    start <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <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: #66cc66;">,</span> <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span>:
      JSONDecoder<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">decode</span> <span style="color: black;">&#40;</span>JSONEncoder<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">encode</span> <span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">write</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;JSON TIME = %.2f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> % <span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - start<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    start <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <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: #66cc66;">,</span> <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span>:
      <span style="color: #dc143c;">pickle</span>.<span style="color: black;">loads</span> <span style="color: black;">&#40;</span><span style="color: #dc143c;">pickle</span>.<span style="color: black;">dumps</span> <span style="color: black;">&#40;</span>data<span style="color: #66cc66;">,</span> <span style="color: #dc143c;">pickle</span>.<span style="color: black;">HIGHEST_PROTOCOL</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">write</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;PICKLE TIME = %.2f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> % <span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - start<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    start <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <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: #66cc66;">,</span> <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span>:
      <span style="color: #dc143c;">pickle</span>.<span style="color: black;">loads</span> <span style="color: black;">&#40;</span><span style="color: #dc143c;">pickle</span>.<span style="color: black;">dumps</span> <span style="color: black;">&#40;</span>data<span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">write</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;PICKLE-RAW TIME = %.2f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> % <span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - start<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2010/09/serializing-native-data-variables-in-python/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>bbcodeutils: BBCode parser and BBCode to HTML for Python</title>
		<link>http://www.codigomanso.com/es/2010/09/bbcodeutils-bbcode-parser-and-bbcode-to-html-for-python/</link>
		<comments>http://www.codigomanso.com/es/2010/09/bbcodeutils-bbcode-parser-and-bbcode-to-html-for-python/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 11:54:00 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[bbcode]]></category>
		<category><![CDATA[bbcode2html]]></category>
		<category><![CDATA[parser]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=947</guid>
		<description><![CDATA[Ayer anduve buscando algún módulo para Python para parsear Bulletin Board Code (bbcode para los amigos) o que fuera capaz de transformarlo en HTML. Como ninguna solución cumplía mis necesidades al 100% he creado bbcodeutils que no es mas que un conjunto de clases en Python para parsear, generar y transformar bbcode. He intentado que [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Ayer anduve buscando algún módulo para Python para parsear Bulletin Board Code (bbcode para los amigos) o que fuera capaz de transformarlo en HTML.</p>
<p style="text-align: justify;">Como ninguna solución cumplía mis necesidades al 100% he creado <strong>bbcodeutils</strong> que no es mas que un conjunto de clases en Python para parsear, generar y transformar bbcode. He intentado que sea lo más simple de usar posible.</p>
<p>Dentro de bbcodeutils encontrarás estas clases:</p>
<ul style="text-align: justify;">
<li><strong>bbcodeparser</strong>: permite parsear y corregir código bbcode</li>
<li><strong>bbcode2html</strong>: permite generar HTML a partir de un código BBCode parseado</li>
<li><strong>bbcodebuilder</strong>: permite generar BBCode a partir de sentencias en Python</li>
</ul>
<p style="text-align: justify;">Aquí teneis el enlace para descargar <a href="http://www.codigomanso.com/archives/python/bbcodeutils-v1.0.tgz">bbcodeutils v1.0</a>. Puedes usar este módulo libremente (ver readme.txt para más detalles).
</p>
<p style="text-align: justify;">A continuación voy a poner algunos ejemplos de uso de las operaciones más típicas.</p>
<h5>Ejemplos:</h5>
<p>En los siguientes ejemplos se asume que habrás hecho algo para cargar los módulos, en plan:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> bbcodeutils <span style="color: #ff7700;font-weight:bold;">import</span> bbcodebuilder<span style="color: #66cc66;">,</span> bbcodeparser</pre></td></tr></table></div>

<h6>Parsear cadenas bbcode</h6>
<p>Parsear una cadena BBCode se puede hacer de dos maneras, usando el constructor, o invocando a parse:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;</span> bbcode <span style="color: #66cc66;">=</span> bbcodeparser<span style="color: black;">&#40;</span><span style="color: #483d8b;">'[b]bold string[/b]'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>o bien:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;</span> bbcode <span style="color: #66cc66;">=</span> bbcodeparser<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;</span> bbcode.<span style="color: black;">parse</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">'[b]first string[/b]'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Esto tampoco tiene más utilidad que la de ilustrar como parsear una cadena, pero al final uno lo que querrá será bien corregir el código BBCode, o bien producir HTML válido a partir de la cadena parseada</p>
<h6>Corregir una cadena BBCode invalida</h6>
<p>Para corregir una cadena BBCode mal formada, símplemente habría que parsear la cadena en cuestión y llamar al método <b>bbcode</b> que construye la cadena de nuevo, o bien transformar el objeto a cadena.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;</span> bbcode <span style="color: #66cc66;">=</span> bbcodeparser<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;This is [b]bold and [i]this bold and italics[/b].[/color]&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;</span> bbcode.<span style="color: black;">bbcode</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;This is [b]bold and [i]this bold and italics[/i][/b].&quot;</span>
&nbsp;
<span style="color: #66cc66;">&gt;</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>bbcode<span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;This is [b]bold and [i]this bold and italics[/i][/b].&quot;</span></pre></td></tr></table></div>

<p>Nótese como se elimina el tag [/color] y se añade el tag [/i] que faltaba.</p>
<h6>Transformar una cadena BBCode en HTML</h6>
<p>La clase bbcodeparser implementa el método <b>html</b> que transforma el código parseado<br />
en HTML válido.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;</span> bbcode <span style="color: #66cc66;">=</span> bbcodeparser<span style="color: black;">&#40;</span><span style="color: #483d8b;">'[b]bold string[/b]'</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;</span> bbcode.<span style="color: black;">html</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;&lt;b&gt;bold string&lt;/b&gt;&quot;</span></pre></td></tr></table></div>

<h6>Generar código BBCode</h6>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;</span> bbcode <span style="color: #66cc66;">=</span> bbcodebuilder<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;</span> bbcode.<span style="color: black;">b</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'string in bold'</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;[b]string in bold[/b]&quot;</span>
&nbsp;
<span style="color: #66cc66;">&gt;</span> bbcode.<span style="color: black;">url</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'http://www.codigomanso.com/'</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;[url]http://www.codigomanso.com/[/url]&quot;</span>
&nbsp;
<span style="color: #66cc66;">&gt;</span> bbcode.<span style="color: black;">url</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Welcome to Codigo Manso'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'http://www.codigomanso.com/'</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;[url=http://www.codigomanso.com/]Welcome to Codigo Manso[/url]&quot;</span>
&nbsp;
<span style="color: #66cc66;">&gt;</span> bbcode.<span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'item 1'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'item 2'</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;[list]
   [*]item 1
   [*]item 2
[/list]&quot;</span></pre></td></tr></table></div>

<h6>Operaciones típicas en una linea de código</h6>
<p>Corregir cadenas inválidas en una linea:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>bbcodeparser<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;[color=red]Fix this [b]string&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">&quot;[color=red]Fix this [b]string[/b][/color]&quot;</span></pre></td></tr></table></div>

<p>Transformar bbcode a HTML en una linea:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>bbcodeparser<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;[color=red]Fix this [b]string&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #483d8b;">'&lt;span style=&quot;color: red;&quot;&gt;Fix this &lt;b&gt;string&lt;/b&gt;&lt;/span&gt;'</span></pre></td></tr></table></div>

<p>Ale, ¡Ya está!</p>
<p>Si alguien se anima a usar este módulo y quiere algún ejemplo más, o tiene alguna duda sobre su utilización, le animo a que deje un comentario en este post.</p>
<p>Enlaces de interés:</p>
<ul>
<li><a href="http://www.codigomanso.com/archives/python/bbcodeutils-v1.0.tgz">bbcodeutils v1.0 for Python</a></li>
<li><a href="http://www.bbcode.org/reference.php">Referencia de BBCode</a></li>
<li><a href="http://en.wikipedia.org/wiki/BBCode">Entrada sobre BBCode en la Wikipedia</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2010/09/bbcodeutils-bbcode-parser-and-bbcode-to-html-for-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
