Novedades: actualmente estoy impulsando el proyecto Argentina en Python, desde aquí (ver mapa)

Parseando un feed

Note

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

Hace como una hora que llegué a mi casa, me bañe y me puse a buscar algo para hacer con Python. Le pregunté a perrito666 sobre el facundario, ya que había estado teniendo algunos problemas. Y me dijo que todavía no lo había visto, asique seguí buscando otra cosa.

Me acordé que mi amigo personal, aunque desconocido, Leo (leo_rockaway... ups perdón leo_rockway) estaba buscando un feed que le informara como era el cambio entre una moneda a otra de forma actualizada. Hacía algún tiempo que estaba buscando eso, pero hacía unos días me había comentado que lo había encontrado. Busqué en los logs de las conversaciones y no encontré la dirección asique busqué en Google: "currency feed" y era el primer link, lo que me hizo pensar que fue bastante vago para buscar este pibe.

Como nunca había parseado un archivo de feed, ni sabía que tan complicado era, o que tan fácil, me puse a ver qué podía hacer. Hacía un tiempo que yo le había recomendado a Leo el módulo feedparserde Python, aunque nunca lo había utilizado.

Lo primero que hice fue fijarme si lo tenía instalado. Como lo tenía, me leí la documentación de ejemplo que hay en esa página web y me fue suficiente para hacer lo que Leo necesitaba. Busqué cómo estaban ordenados los cambios del feed de pesos argentinos a alguna otra moneda, el que me interesabaera el cambio con respecto a dólares estadounidenses. Éste aparecía en la antepenúltima ubicación.

Con un par de líneas me dí cuenta que obtenía lo que quería. No puedo dejar de sorprenderme con Python, no puede ser todo tan fácil. ¿O yo soy muy inteligente? :) [1]

>>> import feedparser

>>> import re

>>> rss = 'http://currencysource.com/RSS/ARS.xml'

>>> feed = feedparser.parse(rss)

>>> title = feed['entries'][-3]['title']

>>> title

u'1 ARS = USD (0.331388)'

>>> regex = re.compile('(.+)')

>>> result = regex.search(title)

>>> result

<_sre.SRE_Match object at 0xcc9510>

>>> title[result.start():result.end()]

u'(0.331388)'

>>> title[result.start()+1:result.end()-1]

u'0.331388'

>>>

Y ahí sale andando fácil ahora Leo. Ya tenés la equivalencia que necesitabas. Espero que te sirva de algo. Podés encarar tu problema de varias forma ahora, esto era lo más fácil de hacer, por eso lo hice yo... ;)

[1] no lo creo, después se me complicó con la expresión regular y era una boludés.


Una lucha que nunca va a terminar

Note

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

Como comenté en un post anterior, una de las veces que llamé a Arnet me dijeron que me iban a cambiar el modem, pero no me habían dado número de recibo, por lo que pensé que nunca llegaría.

Cerca de las 11 de la mañana del día de hoy me tocan el portero. Era el de OCA que me traía el modem. Yo esperando a que sea un modem de lo más cho** como el Huawei alfajorcito, que sólo tiene conexión USB y a mi no me sirve, o por lo menos no lo quiero.

Asique lo primero que me fijé era lo que decía en la caja. La primer línea debajo de "En su interior encontrarás", decía: Modem ADSL **Wi-Fi**... Si! Wi-Fi, lo que me pareció bastante raro. Pero igual firmé todo lo que había que firmar, y cuando empiezo a volver a mi casa, el tipo me dice que le tenía que dar el modem que yo tenía porque el comprobante decía "Cambio de modem", lo cual no me gustó nada, porque no me quería llevar ninguna sorpresa después. Pero bueno, no me quedaba otra. Subí, busqué el modem y lo cambiamos.

Cuando abro la caja, me encuentro con un Modem Wireless, Ethernet con 4 bocas, USB. La verdad muy lindo a simple vista. El transformador correspondiente, los microfiltros y los cables correspondientes. Ya era un paso bastante grande. Algunas fotos:

image0

image1

image2

image3

image4

Lo primero que hago es conectar todo como se debe, viendo que tenía 4 bocas de ethernet, saqué el switch que tenía antes, ya que no lo iba a necesitar, si sólo tengo tres máquinas. Entro a la dirección 10.0.0.2 que es dónde se configuraba mi modem anterior. Selecciono que tengo arnet y demás. Cuando me pregunta el nombre de usuario y contraseña, pongo lo que me acordaba de haber registrado en la web de Arnet cuando contraté el servicio username: humitos password: ******* le doy Conectary quedaba mostrando un cartelito que decía Conectando... con una barra de progreso que nunca se modificaba.

Llamo al servicio técnico por primera vez para ver si estaba mal mi nombre de usuario. Me comunican que estaba fallando la validación de la contraseña, asique verificamos con otros usuarios de prueba, tampoco funcionaban. A esta altura ya les había dado mi número de cliente, nombre del titular, dónde se encuentra vacacionando mi mamá y como se llama la persona que la estaba acompañando, dónde trabaja y algunos datos más. En lo más lindo del proceso de comunicación (la musquita) con el servicio técnico... ¡¡¡SE CORTA!!! Asique, otra vez a volver a empezar...

Llamo por segunda vez 0800-555-9999, ingreso todo tipo de datos, hablo de mi familia y demás, como las quichisientas reiteradas veces anteriores. Me dicen que ya tengo varios reclamos hechos. Y otra vez empezamos el proceso de verificación de usuarios de prueba. Mientras estoy haciendo esto, abro una máquina virtual con virtualbox que tiene Windows XP y entro a un Internet-Explorer. Le digo que me aguarde un momento y descubro que la página del modem no es compatible con Firefox ni con Konqueror, funciona únicamente con IE. El tipo que hizo el driver del modem un grande, ¡esa esa la gente que necesita el mundo!

Para este momento, el flaco ya me había cambiado la clave. Asique probé conectarme y funcionó. Le pregunté como era el passwordde la sección de administrador del modem y me dijo que no me lo podía decir, que no tenía esa información. Llamé de nuevo y me lo dieron (previos 15-20 minutos de espera y charla).

Siguiente paso: habilitar los puertos para amule, ssh, torrent y demás. Como el firmware de este modem es distinto del anterior. Busqué, busqué, busqué y no encontraba la configuración, hasta que caí en una página muy buena en la que hay muchos problemas típicos explicados ahí. El ejemplo de cómo habilitar puertos era de un firmware viejo, del 2006... Y al parecer cambió bastante con el del 2007 que es el que tengo yo. Igual logré hacerlo funcionar sin demasiadas complicaciones.

Por el momento, está funcionando como debería... Al menos puedo abrir páginas, descargar con aMule, y algunas otras cosas más. Vamos a ver como sigue esto.


Bongó

Note

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

Hace un mes por lo menos ya que me compré un Bongó. Siempre quise tener un instrumento de percusión, ya que justamente tengo problemas con el tiempo en la guitarra. Algo que sea un poco difícil en cuestiones de tiempo, se me complica y mucho más si lo que estoy tocando tiene contratiempos.

Asique para hacerle contra a este problema y además que me parece un instrumento re divertido, me lo compré. En este mes estuve tocando algo, bastante más al principio. Después empecé a estudiar para la facu y se me terminaron los tiempos y/o ganas cuando tenía el tiempo.

Además de practicar lo que me parecía, porque no tenía idea ni siquiera de cómo se agarraba, empecé a buscar técnicas de distintos golpes en internet (para esto iba a la casa de un amigo, lo cual era bastante incómodo) y practicaba éstas técnicas también. Algunas me hacían sufrir bastante porque me partía los dedos con los bordes de madera del bongó en reiteradas ocasiones cuando le "pifiaba".

Conseguí algunos ejemplos en MP3 de distintos ritmos, pero la mayoría bastantes complicados. Un amigo que es percusionista me dijo algunas cositas a tener en cuenta, además de afinarme el bongó ya que sonaba bastante feito. Yo no me daba cuenta porque era la primera vez que escuchaba uno en vivo y pensé que era así, pero cuando lo afinó se notó bastante la diferencia.

La afinación consiste en la tensión que tiene el parche, de modo que si está más tenso suena más agudo, de lo contrario más grave. Influye mucho el gusto de cada uno acá, no es que hay una afinación específica, como en la guitarra por ejemplo. Pero si deben tener relación los sonidos de un tambor y el del otro, si queda un cambio muy brusco entre ambos sonidos queda "mal".

Ahora que volví a Santa Fé y tengo internet acá, me puse a buscar clases de bongó en YouTube, encontré algunas cosas interesantes y otras demasiadas complicadas para alguien que recién empieza.

Dejo algunas fotos del instrumento y algunos ritmos que hice recién para webear un rato. Arriba de estos ritmos simples se puede improvisar mucho, y pasar varias horas tocando sobre un mismo patrón, eso es lo divertido. Ah! me olvidab, están grabados con un micrófono de $3 no busquen mucha calidad :D

image0

image1

image2

image3


Python Bug Day

Note

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

El sábado pasado hubo un Python Bug day, en el cuál se "juntan" en el canal de IRC #python-dev de freenode.net y entre todos cooperan para solucionar todos los Bugs, errores de documentación, y demás problemas que tiene Python, porque, que sea el mejor lenguaje que exista actualmente no lo hace que esté libre de Bugs ;) .

El viernes por la tarde estuve hablando con los chicos de PyAr, bah, hinchando como siempre. Les pregunté qué es lo que tenía que saber, probar y hacer para poder participar. Facundo me recomendó que lea unos slides que hablaban sobre el tema de forma muy reducida, pero que explicaba los puntos claves.

Bueno, me leí esto, bajé el código, compilé y probé... ¡Funcionaba!, con la única diferencia, que de hecho no sé a qué se debe, en el python que me compilé no andan las flechitas del teclado para desplazarte por la línea actual.

Después de esto consulté la página de Facundo, que muestra todos los Tickets que están abiertos todavía, y además permite hacer algunos filtrados. Busqué los que tenían de llave "Easy" (Fácil), para ver si podía resolver alguno.

El primero que agarré, era sobre el módulo ConfigParser, que sirve para trabajar con archivos de configuración, estilo .ini. El problema era que al agregar una sección con el nombre "DEFAULT" y luego agregarle a esta sección un valor, se duplicaba. Osea, quedaban dos secciones "DEFAUL" lo cuál está mal... Perdón, 'estaba' mal :) .

El ejemplo que mostraba el autor de la apertura del Ticket es este:

>>> import sys, ConfigParser
>>> c = ConfigParser.ConfigParser()
>>> c.add_section('DEFAULT')
>>> c.write(sys.stdout)  [DEFAULT]
>>> c.set('DEFAULT', 'color', 'yellow')
>>> c.write(sys.stdout)
[DEFAULT]
color = yellow
[DEFAULT]

Me puse a ver bien cuál era el problema, preguntando en PyAr si me podían ayudar, investigué un poco, leía todos los comentarios, intentaba traducirlos. La verdad es que estaba bastante en bolas. Después de un tiempo buscando algo (pero no sabía qué) encontré que ya había un parche hecho, incluso documentado y demás. Lo descargué y lo probé. Funcionaba perfecto. Sólo que le faltaba agregar algunas cositas, como testeos y modificar el archivo NEWS, que es donde se ponen todos los cambios entre las versiones.

Asique subí la versión completa del parche y comenté que lo había probado, funcionaba bien y estaba todo OK. Le avisé a Facundo y él cerró el ticket ese. Gracias Facu!

Me hice unos mates, dí un par de vueltas en casa (toqué el bongó y la guitarra un rato) y volví a buscar algún ticket que pueda llegar a solucionar. Encontré este. Y ví que el tipo pedía un agregado de una funcionabilidad, pero esta ya existía. Asique pregunté en python-dev algo así como: "Why this ticket http://bugs.python.org/issue2130 is open yet?" (estuve 15 minutos formulando esta pregunta) a lo que enseguida Facundo me contestó "Thanks humitos!" y lo cerró.

Ya le había agarrado el gustito a esto y estaba bastante embalado. Está bueno poder ayudar aunque sea en lo más mínimo a un lenguaje que me dió tantas satisfacciones y me enseñó muchas cosas. Ademas de darme unos pesitos también. Asique busqué otro y encontré uno que venía como anillo al dedo con lo que había rendido yo (Sistemas Operativos), era sobre el módulo mutex de python y decía que esta función no hacía nada automáticamente. Osea, permitía que dos procesos se ejecuten simultáneamente estando en su región crítica.

Me costó bastante entender bien algunas cosas. Porque decían que esta clase no se tenía que utilizar para multithreading, pero justamente es para eso que están hechos los mutex. Asique bueno, después de unas discusiones ¿filosóficas? sobre si este módulo lo utilizaba alguien o no, y si debía seguir estando en Python, llegamos a un acuerdo en lo que pensábamos entre todos. Facundo envió un mail a python-dev preguntado estas cosas y por lo que tengo entendido este módulo va a desaparecer en Python 3 o al menos lo van a ocultar.

Resumiendo, en una mañana y una parte de la siesta, con los chicos de PyAr cerramos 3 tickets, lo que me parece para ser la primera vez que intento ayudar acá está bien.