Viernes y sábado, charlas

Python — Lunes 29 de Octubre de 2007, 04:59

El viernes Lucio y yo tenemos una cita en el ITBA para dar nuevamente nuestra charla "Python más rápido que C", invitados especialmente en el marco de charlas que se dan periódicamente en tal establecimiento.

El sábado, sin embargo, ¡hay conferencia todo el día! Nos convoca el Ciclo de Charlas Unlux 2007, "Conectando puntos", en la Universidad de Luján, auspiciado por Python Argentina, :)



Es un día completo de charlas de todo tipo, donde Python tiene varios espacios asignados (miren el cronograma), como nos tienen bien acostumbradas las últimas conferencias de Software Libre.

Allí daremos nuevamente la charla antedicha. Pero también daré nuevamente mi "Introducción a Python", con algunas pequeñas modificaciones resultantes de comentarios luego de la presentación en CaFeConf 07.

Pueden encontrar ambas charlas aquí. Tengan en cuenta que pueden browsear esos directorios con el navegador, pero también pueden hacer un checkout anónimo con Subversion (si no entendieron nada después de la última coma, descártenlo y usen el browser para entrar en esa dirección :) ).

Por otro lado, estoy preparando una sorpresita para Luján, veamos si puedo llegar :)

Decimal, binario y el asado

Python — Viernes 21 de Septiembre de 2007, 10:48

Resulta que era sábado a la noche, no tenía mucho que hacer porque Moni estaba en Bariloche, y hubo una pregunta interesante en la lista de PyAr. Y la respuesta me salió bastante bizarra, en general fue bastante comentada. Motivado por un comentario en la reunión del otro día, la busqué y la releí (por primera vez). Y como me causó gracia, la rescato acá. La pregunta era por qué al redondear 39.285714285714285, el usuario no veía un 39.29, sino algo raro:

> Sin redondear:
>
> >>> chargeandprop("EEARGPLRGKGDQKSAVSQKPRSRGILH")[1]
> 39.285714285714285
>
> Con round a 2 decimales:
>
> >>> round(chargeandprop("EEARGPLRGKGDQKSAVSQKPRSRGILH")[1],2)
> 39.289999999999999

El detalle acá es que te están mostrando un número binario en su forma decimal. ¿Por qué en forma decimal? Porque hace rato que tenemos 10 dedos en las manos, y contar en esa base nos es natural. ¿Por qué el número es binario? Parecerá arcaico a esta altura, pero seguimos teniendo procesadores que trabajan en forma binaria: a nivel de silicio la FPU (floating point unit) de tu micro guarda el nro en binario.

Hagamos una analogía, para que resulte más fácil de entender. Viene tu sobrinito de 12 años, y te dice "tío, tío, enseñame algo que no entiendo de matemática". Vos, envalentonado por demostrar tus conocimientos, y viendo que es la única manera de salvar el fin de semana luego de que Argentina haya perdido 3 a 0 en la Copa América, le contestás "Obvio, lo que quieras". Entonces tu sobrino te da un lapiz y un papel y te dice... "escribí 'un tercio'".

Vos sonreís, aunque una gota resbala sobre tu frente, temiendo lo peor, y le escribís, con suspenso, un "1/3". El nene, casi como un enviado del diablo (no reconocés tanta maldad en sus ojos), sonrie levemente, sabiendo que caiste en su trampa, y que a partír de ahí él seguira subiendo y vos en decadencia, y te dice "no, pero con coma".

Entonces, vos, con una cintura hábil, luego de tantos años de enfrentarte con la AFIP, le escribís un "0,3...". Y cuando casi empezás a explicarle el significado de los tres puntos, el te sacude un lapidario "no, pero hasta el final". Ahí vos sabés que perdiste, de que no hay una maldita manera de escribir infinitos 3, y menos en una sola hoja, y le contestás "no, nene, las gallinitas no hablan", y te vas a revisar como anda el asado.

Ok, el procesador hace algo parecido, pero en binario. Cuando vos en decimal le decís redondeame un "39.285" a dos decimales, el tipo intenta anotar un "39.29" en su lápiz y papel binario, pero no puede.  Aunque a nosotros, *ese* nro nos resulta fácil, a él no, porque a nivel binario no tiene suficientes dígitos para escribirlo.

Quizás porque esté programado así, o quizás porque no tiene un asado que atender, la FPU hace su mejor esfuerzo y guarda internamente el número más cercano al "39.29". Y eso es:

>>> 39.29
39.289999999999999


Acá entra Python, quien en el intérprete interactivo, te muestra "la realidad posta posta, patente patente" (en inglés esta frase es distinta). Escribir directamente el nro, es como llamar a la función repr(), quien es lo más fiel posible con el ordenamiento de los átomos en el Universo:

>>> repr(39.29)
'39.289999999999999'


Ahora, si vos querés ser engañado, podés decirle a Python que te muestre algo más humano. ¿Cómo le decís que te convierta un objeto a su representación en cadena de texto de una forma más "humana"? Con str():

>>> str(39.29)
'39.29'


Ahí, lo que hace Python, sabiendo en parte cómo funcionan las FPU de nuestra época, y en parte porque aunque vayas ahora a revisar el asado los chorizos están quemados y los chinchulines te apagaron el fuego, es "redondear" ese nro a los quinces dígitos decimales.

Notar que el statement "print" llama automáticamente a str() para convertir los objetos a mostrar:

>>> print 39.29
39.29

Python tickets

Python — Lunes 10 de Septiembre de 2007, 12:16

En Python decidimos hace tiempo irnos de SourceForge. El primer paso fue migrar el repositorio de código, desde ahí a nuestro server. Y hace algunos días, terminamos migrando el tracker.

O sea, sacamos toda la administración de bugs y parches y los pusimos en nuestro server, manejándolos con Roundup (adivinen con qué está hecha este administrador, ;).

Yo tenía una herramienta que iba a SourceForge y hacía un resumen de los tickets (había hablado de eso acá). Obviamente la tuve que cambiar, y acabo de terminar de hacerlo.

Como ahora los bugs y parches están en la misma lista (son, genéricamente, tickets), quedó genericamente un sólo resumen. Obviamente, dejé este link en la barra derecha...

Python 3000

Python — Viernes 31 de Agosto de 2007, 09:06

Acaba de salir, calentito calentito recién salido del horno, el primer alfa de Python 3.0.

Lo pueden buscar aquí.

Pensar que hace un par de años se hablaba de esto como algo en el futuro, no del todo probable. Ahora está ahí, al alcance de la mano.

Yo ya lo instalé, :D

Subiendo fotos raras para gente normal

Python — Viernes 06 de Julio de 2007, 11:41

Hace algunas semanas tomé la decisión de subir todas mis fotos a la red (ya hay bastantes, pero creo que recién voy por la mitad...). Compré el servicio de Flickr, porque por poca guita anual te da espacio ilimitado.

Obviamente, no todas las fotos son públicas, así que si les interesa acceder a la parte de amigos y/o familia, me ponen un mail y listo.

La idea está buena, porque no tengo que andar distribuyendo fotos luego de un evento (ya sea público como una conferencia, o familiar como un cumpleaños), tengo backup, puedo acceder en cualquier momento a una foto mía, etc.

Pero había dos trabas operativas que evitó que lo haya hecho antes. Una es que hay que "limpiar" las fotos. Normalmente, luego de sacar fotos, las subo a la PC de casa y listo. Pero hay muchas fotos que no sirven (demasiado oscuras, movidas, etc.), y también sucede que en ocasiones hay que rotarlas. Ambos trabajos son inevitablemente humanos (por ahora), así que lo voy haciendo de a poco.

La otra traba es la acción de subirlas. Hay dos maneras clásicas. Una es ir al sitio de Flickr, entrar a tu cuenta, e ir subiendo fotos de a 5; comprenderán rapidamente que no es la mejor manera de subir miles y miles de fotos (a menos que les guste los trabajos manuales y repetitivos sin sentido, no vengan a mi por ello). La segunda manera clásica es utilizar algún programita, que corre en la máquina local, con interfaz gráfica y todo, que te permita ordenar las fotos, administrarlas, y de paso subirlas a Flickr. En Linux ya viene, por supuesto, pero esta manera tampoco me gustó: no quiero tener que pasar a ordenarlas por otro método (mis fotos están basicamente en un directorio por evento, con el nombre del mismo y la fecha, y no quiero, por ahora, mayor info que esa).

Entonces, como ya estarán imaginando, me hice un programita en Python (je!) al que uno le pasa las fotos y algo de metadata: los tags para marcar todas esas fotos, la clasificación de privacidad (ver más abajo), la descripción de todas esas fotos, el nombre del set (o conjunto en Flickr bajo el cual se agruparán esas fotos), y una foto inicial para el set (Flickr tiene una foto "especial" que marca como del tag, y la muestra siempre represantando al mismo).

Con respecto a la privacidad, se pueden marcar las fotos como...
  • familia: sólo para familia
  • amigos: sólo para familia y amigos
  • pública: las ve cualquiera
El tipo de contacto, familia o amigos, es lo que les decía arriba que me pidan por mail.

Para poder conectarme fácil a Flickr y utilizar todos sus servicios, utilicé la Beej's Python Flickr API, que tuve que modificar levemente para que me dejara poner tags y descripciones utilizando caracteres acentuados. Aquí les dejo un zip con los dos archivos, el módulo con la API levemente modificada y mi programita.

Para probarlo, bajen el archivo y lo descomprimen obteniendo dos archivos en el mismo directorio, y ejecuten subeFlickr.py sin parámetros, que les sale un mensaje de ayuda (obviamente tienen que tener Python instalado, si están en Linux o en MacOS X ya está, y si están Windows, bájenlo gratis de acá). Tengan en cuenta de que en subeFlickr.py hay unas anotaciones que tienen que seguir (busquen las XXX), por autenticaciones que obliga Flickr y eso).

Cualquier feedback es muy bienvienido, :)

[*] El título no es más que una vaga referencia al tema de Divididos, sólo eso.

Día Python, Santa Fe 2007

Python — Miércoles 13 de Junio de 2007, 10:12

Viaje de ida

El viernes me rajé temprano de la oficina, me econtré con Leito en el estacionamiento, y fuimos a buscar a Moni al jardín. Tuve que pasar por casa porque me había olvidado los regalos, pero terminamos agarrando la Panamericana antes del quilombo (estuvo lenta en una parte por un choque, pero luego muy bien).

En la ruta nos encontramos con Dave, Alecu y Matías, en una estación de servicio, y fuimos casi juntos hasta Sta Fe. Llegamos relativamente temprano, lo pasamos a buscar a Nico, y fuimos para el hotel donde estaba el resto de la gente. Y todos en masa a comer: mucha charla, mucha cerveza, y una milanesas buenísimas. Luego al sobre, que el sábado era largo.


El sábado

Nos levantamos temprano, no tanto como hubiéramos debido, y luego de desayunar en el hotel nos fuimos a la UTN. Allí nos encontramos con los organizadores: César, Juanjo y Diego.

Llegamos un rato antes del comienzo de la charla, pero se me complicó al configurar la laptop con el proyector: no lo podía sacar de 640x480 de resolución. Finalmente reinicié la laptop, como que reconoció una mayor resolución, en lo proyectado se vió todo bien, pero yo no tenía imagen en mi pantalla.

Con esa pequeña molestia y todo, la charla salió muy bien, pude terminar con casi todo el contenido, y recibí feedback interesante para seguir puliendola.



Una vez terminada mi charla, ya quedé como "espectador solamente", y me deleité con las charlas de "Turbogears" (Matías Gieco), y de "PyWeek: un juego en 7 días" (Alecu y Daniel Moisset).

Luego almorzamos, todos los disertantes en una mesa grandota, donde nos atendieron muy bien. El almuerzo estuvo bueno, pero no es estratégico: ¡¡¡nos agarró una modorra espantosa!!!



A la tarde habían dos tracks de charlas, con lo que había que elegir cuales ver. Yo me decidí por "Desarrollando aplicaciones web con Zope 3" (Pablo Ambrosio), en la que aprendí bastante; "Creando juegos 3D de la mano de Python" (Silvestre Huens), muy bien llevada, especialmente por las demostraciones; "Usando Python para testeos de seguridad mediante simulación automática de ataques" (Dave y Matías Eissler), donde vi que hay mucho para investigar en programación automática de tareas; y finalmente "Programando para la OLPC" (Dave y Alecu), que fue super interesante.



En la última charla se me complicó cual elegir, porque se pisaba con "Concurrencia en Python" (Lucio). Pero ya había dicho que iba a filmar la charla de OLPC, así que no tuve opción. Espero poder ver la charla de Lucio en otro lugar...

Luego de todas las charlas, se sortearon algunos de los regalos que Lucio y Alecu habían traido de la última PyCon, haciendo el sorteo con cuatro lineas de código hechas por Alecu en el momento, mostrándolas en el proyector y explicándole al público qué iba haciendo... ¡muy bien!  Hasta tuvo una secretaria de lujo:



Los nombres se sacaron de una lista suministrada por los organizadores, pero había gente que ya no estaba. Los elegidos pasaban al frente y elegían algunos de los regalos (remeras, bolsitos, etc.).



Se produjeron los cierres de rigor, algunas palabras de los organizadores, etc, y nos fuimos para el bar de la terminal de colectivos de Santa Fe, donde tuvimos muchas mesas a nuestra disposición, WiFi, y hasta la onda de desenchufar un toque la tele para poder enchufar nuestras zapatillas.

La idea era hacer un sprint, y nos pusimos a trabajar en Typus Pocus, arreglando detalles, limpiando código, y tocando cosas para que pueda correr en la OLPC.



Nos quedamos hastas altas horas de la madrugada (bueno, las dos de la mañana, pero había sido un sábado super intenso). Se avanzó bastante, y quedamos muy contentos con la experiencia.


Cerrando el finde


El domingo nos levantamos con Moni algo tarde, y ya estaban los chicos desayunando (no todos, tuvimos que esperar a otros, pero lo aprovechamos para jugar al Crystal Towers, :).

Despues de desayunar, preparamos los autos para partir y nos fuimos a comprar alfajores y dulce de leche. Recién despues de eso arrancamos. Lo pasé a buscar a Nico y fuimos todos a lo de Chiquito, un restaurant especialista en pescados, a la vera del río, que estuvo muy muy bien.

Empanada de pescado (no sé de qué), milanesas de surubí, milaneas de otro pescado más, albóndigas de surubí, boga la parrilla (para caranchear), mimoso (servido de la misma manera), una cazuelita de tampoco me acuerdo qué, etc. Comimos como cerdos, porque estaba todo riquísimo.

Como corresponde despues de tanta comida, más a la tarde fuimos caminando a tomar un helado, y a la vuelta, con Moni, Alecu, César y otro chico que no me acuerdo el nombre, nos tiramos por un tobogán de esos gigantes y ondulados.



Esa fue como la última actividad, y luego de los saludos de rigor y de dejar a Nico en la casa, partimos para Buenos Aires.


Conclusiones

Un fin de semana muy bueno, para repetir y recomendar.

A nivel de software, estas jornadas ayudan muchísimo a la difusión del mismo, capacitación de la gente, e integración de conceptos. Pero también es muy importante en su aspecto social. Reunir movimientos separados geograficamente es una tarea que hay que realizar. Como siempre, fuimos muy bien atendidos por toda la gente de Santa Fe. Pueden ver acá todas las fotos del finde.

Muchas gracias a los organizadores, fue un honor participar de las jornadas.

Un Python por chico

Python — Jueves 07 de Junio de 2007, 12:52

Hace casi dos años atrás, yo escribía sobre un proyecto del MIT, One Laptop Per Child. Hoy por hoy, ese proyecto es mucho más conocido, así que no voy a repetir características.

Ha pasado mucha agua bajo el puente, y aunque todavía no está en producción masiva, ya existen muchas de estas máquinas distribuídas alrededor del mundo, para que los desarrolladores experimenten, creen contenidos, programas, etc.

Esto es principalmente porque aunque el sistema operativo es más o menos estándar (un Fedora adaptado), tiene una nueva interfaz gráfica: Sugar. La misma tiene algunos conceptos totalmente revolucionarios, y otros que aunque probados, no son "normales". Un ejemplo del segundo, es que es un sistema de ventanas, pero las ventanas no son solapables.

Esta nueva interfaz abandona un poco el tradicional concepto de escritorio que usan la mayoría de interfaces y se centra más en el usuario, el cual dispondrá de cuatro tipos de vista distintos: Inicio, Amigos, Vecinos y Actividades. En Amigos se podrá charlar con los amigos del usuario, en Vecinos se podrán crear comunidades y realizar actividades en grupo (imaginemos un trabajo en grupo en la escuela) y en Actividades será donde se realicen estas propiamente dichas.

Sugar misma está integralmente hecha en Python, así como también gran parte los programas, lo que permite que siempre esté accesible el código fuente del programa que estás usando, pensado esto principalmente como herramienta pedagógica.

Entonces, se pueden imaginar que esta laptop tiene una importancia estratégica para Python en general, y para PyAr en particular. Por este motivo, nos acercamos a la gente de educ.ar, y hoy tuvimos una reunión con Laura Marés Serra quien en dicho acto nos prestó (por tiempo indeterminado) dos de estas preciosuras, :D.

Alecu y Dave van a dar una charla de la OLPC este finde en Python Santa Fe, y ya tenemos pensado meternos a participar en el desarrollo de estas máquinas. Por lo pronto, vamos a migrar Typus Pocus, :)

Con respecto al Python Day en Santa Fe, ya salimos en los diarios y todo (en La Nación, pero no pongo el link porque los turros, después de un tiempo, te imponen que seas de su club para mostrarte el artículo, y en El Litoral).

Agregando valor

Python — Martes 05 de Junio de 2007, 12:50

Leyendo un magnífico cuestionario, que se aplicó a muchos lenguajes, pero acá está contestado (y muy bien) con respecto a Python, me crucé con esta pregunta, y una respuesta que sintetiza tan bien el poder y la simplicidad de Python, que quise reproducirla aquí (la pongo directamente en castellano, si la quieren en el inglés original, la tienen en el cuestionario).

F77: ¿Cuál es el valor del lenguaje para los desarrolladores?

Aprendelo una vez, usalo en todos lados: aplicaciones web, aplicaciones con interfaz gráfica, scripts de línea de órdenes, integración de sistemas, usar bibliotecas de otros lenguajes, multi-plataforma, escala de tareas rápidas a sistemas grandes y complejos.

Encaja en tu cerebro: permite al desarrollador pensar en el espacio del problema en lugar del espacio de la solución, dejándolo concentrarse en la aplicación en lugar de administrar memoria y detalles. Python le permite a los desarrolladores trabajar más eficientemente que en otros lenguajes, por medio de su práctica sintáxis que enfatiza la elegancia y la claridad a través de lo minimalista, y es una gran herramienta pedagógica en si misma.

Pilas incluidas: viene con un extenso conjunto de módulos estándares maduros, y hay disponible en Internet una rica selección de módulos de terceros, ambos multi-plataforma o nativos.  Jython e IronPython también permiten al desarrollador aprovechar los módulos existentes en los entornos Java y .NET.

Conciso y legible: mantenible, fácil de colaborar con otros desarrolladores; todo hace algo, no hay cosas superfluas.

Accesible: a desarrolladores dentro de un equipo con distintos niveles de habilidad, de principiantes que se vuelven rápidamente productivos a desarrolladores experimentados que necesitan conceptos avanzados. Un desarrollador no tiene que conocer todo el lenguaje para construir cosas poderosas; facilitado todo por las pruebas interactivas, exploración de ideas, y un gran uso de la introspección.

Este fin de semana es el segundo Python Day de Santa Fe, ¡vamos todavía! (acá y acá tienen info sobre la primera). Python Argentina y la Python Software Foundation patrocinan, entre otras empresas y organizaciones, esta jornada (gracias a la Fundación Vía Libre por hacernos de "fundación paraguas" para poder recibir fondos de afuera).

Nuevamente mentor

Python — Jueves 19 de Abril de 2007, 09:57

Se cerró la elección de proyectos para el Google Summer of Code 2007. Nuevamente, igual que el año pasado, soy mentor de uno de los proyectos.

Este año la Python Software Foundation funcionó oficialmente como organización /paraguas/ de otros proyectos (SymPy, PyPy, Pyjamas, etc; proyectos que están hechos en Python, pero que no son Python itself).

Google, en total, nos aprobó 34 proyectos, :D. Pueden ver todos los proyectos aprobados y demás info aquí. Si les interesa revisar tooooodos los proyectos de todas las organizaciones involucradas, hay un resumen aquí.

El proyecto del cual soy mentor se basa basicamente en mejorar casos de pruebas de la biblioteca estándar de Python. Alan McIntyre (la persona que va a ejectuar el proyecto propiamente dicho), va a hacer un análisis para determinar a qué módulos les falta mejorar sus casos de prueba, definiremos los tres o cuatros que va a atacar, y se pondrá a hacerlo.

Si están leyendo esto, y piensan "Ufa! Lástima que yo curso en esta época en lugar de tener vacaciones", sepan que Google estaba barajando la posibilidad de hacer esto mismo pero en los meses de nuestro verano, para que los estudiantes del hemisferio sur puedan participar mejor.

Curso de Python

Python — Martes 27 de Marzo de 2007, 14:16

La semana pasada me contactaron de dos lugares diferentes, para dar un curso de Python, y en ambos casos me preguntaron cómo sería un temario básico.

Yo dí varios cursos de Python, en empresas, universidades y terciarios (incluso a particulares), siempre utilizando una técnica de enseñanza que probó ser dinámica, productiva y eficiente, :).

Preparé entonces dicho temario, que sería lo básico que se puede enseñar sobre Python, más un último punto en que hay varios temas no tan estándares (quizás necesites saber sobre bases de datos, o XMl, o threads, quizás no).

Dejé el temario acá (también puse el enlace en la barra de la derecha).

Resumen de parches y bugs

Python — Jueves 22 de Marzo de 2007, 07:37

A principios de Marzo hubo una discusión en python-dev sobre parches y bugs que teóricamente no se revisaban. La discusión iba por el lado de cómo involucrar más gente en la revisión de patchs y bugs, y de imprimirle otra dinámica al asunto.

A partír de esa discusión, yo me pregunté "¿Cómo puedo saber la ubicación temporal de un patch/bug?". ¿Hay muchos patchs/bugs viejos? ¿Esos que son viejos no tienen update o hay toda una discusión con cada uno? ¿Están abandonados?

Para ayudarme con ese análisis, hice una herramienta que a partir de la info en SourceForge arma un cuadro resumen, tanto de los patchs como de los bugs.

Agregué ambos enlaces en la barrita de la derecha ( ---> ).

Mi idea es actualizarlos periódicamente (algo así como una vez por día, al final del html tienen la fecha y hora de actualización).

Me es útil, y a otra gente también, e incluso ya me dieron ideas para mejorarlo (por ejemplo, una barrita negra justo en el momento en que hubo un comentario o update, aunque no es tan fácil sacar esa info de SourceForge).

¿Por qué gusta lo complicado?

Python — Jueves 07 de Diciembre de 2006, 12:00

Los veo programar, en VisualBasic, por ejemplo, o en Java... y están todo el tiempo abriendo y cerrando llaves, escriben el IF, y luego abajo escriben el END IF....pero dudan, no saben que poner adentro, todavía, entonces borran el END IF...

¿Cuánto más eficiente es esa persona si no tuvo que escribir el ENDIF y borrarlo las tres veces? ¿Se puede concentrar mejor si no lo tiene que hacer (como en Python)? Si supiera concentrarse, de entrada, ¿lo escribiría una sola vez y listo?

La sintáxis del lenguaje, ¿ayuda en estos casos? En muchos casos estoy seguro de que sí. ¿Y en estos?

Muchas veces leo que Java, por ejemplo, es muy dificil de programar sin una IDE que te automatice todo esto... ¿entonces por qué no dejarlo de lado? Si voy a poner llaves para abrir y cerrar, pero no lo quiero poner y dependo de que me lo haga la IDE, ¿para que tener llaves? Porque después, si no tengo la IDE, no puedo programar... ¿No puedo usar algo más intuitivo para mí, y no para la máquina?

Powered by LifeType