viernes, 9 de noviembre de 2012

PyCon Argentina 2012 es la próxima semana!

¡La conferencia de Python comienza el próximo Lunes 12, y se extiende hasta el Sábado 17!

http://ar.pycon.org/2012

Por mi parte, más allá de los temas generales, estaré coordinando una reunión de desarrollo de PyAfipWs (acérquense si están interesados en el tema de factura electrónica) y presentando un poster sobre Rad2Py.

Otras reuniones de desarrollo interesantes incluyen "Core Python"  (para colaborar con el desarrollo del lenguaje) y "web2py" (marco de trabajo web para desarrollo rápido, fácil y simple). Hay muchas más reuniones y actividades, pueden ver lista completa de Proyectos para Sprints, Pósters y Charlas Aceptadas.

Este año también hay talleres y seminarios prácticos para sumergirse más profundamente en estas tecnologías  sin perder de vista las charlas para tradicionales y charlas "extremas" mucho más enfocadas en temas particulares, junto con un eje de Ciencia para usos de Python en Educación, Ingeniería e Investigación.

Las actividades especiales incluyen una Jornada Intensiva de PostgreSQL, un SugarDay y un Desafío "Aprendiendo a programar con Python y Robots".

Por último, no se pierdan los eventos sociales, ya que son una oportunidad única de conocer otros desarrolladores e interconectarse con la comunidad, en un ambiente más informal y ameno.

La agenda completa en: http://ar.pycon.org/2012/schedule

La entrada es libre y gratuita, la inscripción online cierra hoy (http://ar.pycon.org/2012/user/register), útil para evitar demoras y contratiempos, pero igualmente podrán acercarse e inscribirse manualmente en el sitio si lo desean.

Los esperamos

martes, 18 de septiembre de 2012

Programación Python con Robots - charla abierta


Charla Abierta

“Programación Python con Robots”

Jornada Institucional - Instituto Pascal - Jueves 20 de Septiembre - desde las 18 hs

Aprender con Python es aprender con Software Libre en un ambiente de programación 
sencilla, que tiene una motivación ideal: escribir aplicaciones para el “mundo real”



Temario:

  • Conceptos básicos de programación
  • Implementación de algoritmos sencillos.
  • Introducción al lenguaje Python.
  • Primeros pasos: instalación de hardware y software
  • Funciones para manipulación del robot
  • Ejercicios básicos y demostraciones

Basado en el Proyecto de Extensión “Programando con robots y software libre” dirigido por la Lic. Claudia Banchoff, LINTI, Universidad Nacional de La Plata

Destinado a alumnos y docentes del nivel secundario y terciario



Instituto Superior Tecnológico Blaise Pascal

www.institutopascal.edu.ar

Puerto Argentino 4238
Gonzalez Catán
Provincia de Buenos Aires
Argentina

miércoles, 23 de mayo de 2012

web2py Application Development Cookbook


Hemos escrito un libro de recetas para el desarrollo de aplicaciones con web2py, el cual fue publicado por Packt Publishing en Marzo y ya está disponible para la venta, tanto en formato e-book como impreso.

Hasta el 28 de mayo, entrá a la página y participá en la encuenta y ganá 5 libros gratuitos donados por Packt:

http://web2py.com/cookbook

En dicha página también está publicado el código fuente, erratas.

La página para comprarlo en Packt Publishing es:

http://link.packtpub.com/di3Bc5

También buscamos revisores, contactame si estás interesado.

Con el anticipo de las comisiones por ventas del libro hemos consituido un fondo para continuar fomentando el desarrollo de web2py, python y el software libre.

Visión General:

  • Lleva tus habilidades de web2py al próximo nivel al sumergirte en recetas deliciosas y útiles de este "libro de cocina"
  • Aprende web2py avanzado, desde el uso de formularios a creación de reportes PDF
  • Escrito por los desarrolladores del proyecto web2py con cantidad de ejemplos para un aprendizaje comprehensivo e interesante

Tabla de Contenidos:

Detalles del libro:

  • Idioma : Íngles
  • Impresión : 364 páginas
  • Publicación : Marzo de 2012
  • ISBN : 1849515468
  • ISBN 13 : 978-1-84951-546-7
  • Autores : Mariano Reingart, Bruno Cezar Rocha, Jonathan Lundell, Pablo Martin Mulone, Michele Comitini, Richard Gordon, Massimo Di Pierro
  • Temas y Tecnologías : All Books, Cookbooks, Open Source, Python


miércoles, 28 de marzo de 2012

PyCon US 2012 ("lo que nunca te contaron...")

El siguiente texto nació como una especie de rant escrito en una madrugada de insomnio (tratando de escribirlo antes de olvidarme la mayoría de las cosas), pero ya está más depurado. Sepan disculpar los inconvenientes.

La Previa

Envío de Propuestas

Para 2011 había enviado dos propuestas, una charla sobre factura elctrónica (pdf, webservices, etc.) y un poster sobre "pyreplica" (replicación para postgresql con python). 
El poster fue aceptado, la charla no tuvo la misma suerte, pero recibí un correo de notificación explicando los motivos (resumido: la facturación es un nicho, y hay charlas mejores). Lo mismo me paso en 2009 en la primer Conferencia de Python Argentina, por lo que posiblemente la redacción de la propuesta no fue lo suficientemente clara y adecuada para este evento, dado que a mi humilde entender, la charla trataba sobre otros temas más generales como servicios web, pdf, cli/gui, rpc con otros lenguajes legados, bases de datos, etc.

Charla "Python Caveats: Fixing Broken Windows"

Para este año intenté mejorar la descripción de la charla, con un abtract abarcativo y un bosquejo detallado, citando referencias, links a código fuente, estadísticas, etc. Estaba inspirado por el cuasi-panel "Python Apesta" de PyConAr 2011.
Al día de hoy desconozco puntualmente el motivo de rechazo, pero seguramente este año hubo charlas mejores (de hecho las propuestas superaron en 4 veces la cantidad de espacio disponible para charlas).
Ver más adelante en la sección revisión algunos temas "no del todo documentados" relacionados con la selección de charlas. 
Posiblemente haga una entrada de este blog para ir refinando el tema.  

Poster "RAD2PY: platform+IDE for solid & predictable Rapid Application Development"

Basado en mi trabajo de tesis de licenciatura, prepare un poster para presentar:


Como toda la propuesta no entró en el poster principal, arme dos carteles complementarios (web2py y gui2py):



Felizmente el poster fue aceptado: https://us.pycon.org/2012/schedule/presentation/147/

El poster tenía contenidos similares a los de la charla, resumiendo las 200 hojas de investigación.
Un consejo: si desean presentar algo en PyCon, por las dudas, preparen un póster (hasta tienen más posibilidades que una charla relámpago, ver más adelante...)
Además, los posters se aprueban a medida que llegan (con una demora de 1 mes aproximadamente), por lo que es útil para solicitar una Carta de Invitación para ir tramitando la Visa.

Por el presente agradezco públicamente a JuanBC que me ayudó con la tipografía y temas de diseño (y lo más importante, diseño el logo de rad2py).

Revisión de Charlas

Como voluntario, participe en algunas etapas de la selección de charlas. 
Comenzar es sencillo, un email introductorio al Comité de Programa (indicando nombre de usuario del sitio web y una breve biografía) y te habilitan el acceso a todas las charlas, con la posibilidad de hacer comentarios y la correspondiente revisón. 

La revisión se basa en la técnica Identify the Champion, básicamente un puntaje entre +1, 0, -1, para literarmente defender u oponerse en alguna medida a cada charla. 
Traté de revisar algunas, revisar todas era físicamente imposible y además uno debería tener conocimientos en la materia, por lo que me limité a charlas de web, gui, postgresql, educación, etc.

Hasta donde recuerdo, como reglas generales, se debía priorizar proyectos reconocidos con una base de usuarios considerable, con código funcionando, documentación, etc. (de lo contrario, sugerían poster). Las charlas de comunidad fueron casi todas rechazadas (ver más adelante charlas relámpago). La biografia del autor era muy influyente (haber dado una charla previamente y ser experto en la materia era casi excluyente). Las propuestas poco detalladas serían rechazadas si el autor no contestaba los comentarios o no proveía más información (con algunas excepciones de autores reconocidos o temas puntuales).
En teoría se debía calificar respecto a la propuesta concreta, no sobre la hipotética charla que nos gustaría ver.

Si mal no recuerdo, las charlas con todos los votos negativos se descartaron directamente. Las que no tenían algún +1 quedaban en el limbo como dudosas. Las que tenían exclusivamente +1 se aceptaban casi automáticamente, pero fueron las menos (IIRC). El esquema es parecido al que se usó en PyConAr los primeros dos años.

Luego vino el thunderdome, un "campo de batalla virtual" por chat para "luchar" a favor o en contra de cada charla (generalmente divididas en grupos de a 3-4, por afinidad, donde se debía aceptar, separar y descartar las propuestas). En mi caso no pude seguir el rítmo (perdí la cuenta de la cantidad de reuniones por IRC, a veces dos por día) y no llegué a comprender del todo algunos argumentos (en ocasiones parecieran bastante intuitivos en los escasos minutos que había disponibles para tomar una decisión sobre cada charla).

Por último, quedaron algunos espacios vacantes por lo que se resucitarón algunas charlas (aquellas separadas en el thunderdome) a criterio del coordinador de programa, que solicitó previamente algunos comentarios no vinculantes.
En mi humilde opiñon, este sistema es bueno para conferencias científicas/académicas donde uno tiene el artículo (paper) por anticipado y realmente hay pares expertos. Para conferencias comunitarias, creo que es mejor un sistema de voto alternativo por preferencias ponderadas (similar al sistema de Python Brasil y PyConAr en las últimas ediciones, incluyendo en ciertos casos una consulta al público que en definitiva es el que va a ver las charlas, como en EuroPython y PyConAr). 

Asistencia Financiera

Una de las principales barreras para asistir a PyCon US es el costo de los pasajes, estadía y entrada al evento (no es gratuito). Si bien no es algo impagable, los importes y el tipo de cambio son considerables para ir desde Argentina (desde 300 dólares la inscripción individual, 190 dólares la noche de alojamiento, 150 dólares cada tutorial, 1400 dólares el pasaje de avión, sin contar los costos de tramites visa, seguros, etc.).

El año pasado, luego de completar el formulario,  dado la gran cantidad de solicitantes, me ofrecieron la entrada sin costo y 1/5 del pasaje. Finalmente luego de algunos días de espera para ver si se podía conseguir fondos adicionales, lo decliné para dejarle lugar a otra persona a la que le cierren mejor los números.

Este año me ofrecieron algo similar (esta vez incluyendo noches de alojamiento, pero solo 50% de descuento en la registración bonificada). Luego pudieron ampliar la beca un poco y gracias a que pude sacar el pasaje con anticipación (bajo una promoción) y una mejor situación financiera personal, decidí emprender el viaje.

La Conferencia

Tutoriales

Tomé dos tutoriales:
  • Faster Python Programs through Optimization
  • How to get the most out of your PyPy
Para decirlo en criollo, tuvieron gusto a poco. En el primero tuve que compilar una herramienta (otras directamente no estaban soportadas) y en lineas generales no tuvo la profundidad esperada. En el segundo, termine encontrando un bug (feature no implementado) que me imposibilitó seguir.

Parece que no fue algo aislado, el día previo ayude a una señora que tenía problemas para instalar Qt en su Mac, y luego al cruzarmela en la registración habiendo tomado el tutorial, no lo pudo instalar ni con la ayuda del instructor (por el tiempo que requiere), por lo que lo tomo con humor decidiendo que no era para ella, a lo que le recomendé wxPython como alternativa antes de Tkinter, que estaba por empezar a ver.

Seguramente tuve mala suerte al elegir tutoriales que no eran para mi, ya que luego hablando con Tatiana Alchueyr, me comento que había asistido a un tutorial que estuvo muy bueno.

WebDev Summit

De lo mejor que vi en la conferencia. Un día entero dedicado al desarrollo web, con varios paneles tratando las distintas problemáticas:

Me tocó reemplazar a Massimo Di Pierro como disertante en el panel "Factoring Code for Reuse", ya que por tema de horario él no podía asistir. Espero haber cumplido, lamentablemente mi Inglés no es perfecto pero viendo al moderador y charla informal posterior, entiendo que el mensaje llegó satisfactoriamente.

Lo interesante fue ver como web2py encara satisfactoriamente algunos temas planteados, que no fueron considerados (calculo por desconocimiento) en la mayoría de ocasiones, como el despliegue simil .WAR con un paquete todo-incluido; reuso de otros modelos/componentes intercambiable entre bibliotecas; y promoción de Python para la Web (windows, educación, diseñadores y no programadores, etc.).

Afortunadamente Massimo llegó luego del almuerzo y pudo dar una charla relámpago mencionando el modo en que web2py esta afrontando estos temas, espero que sirva para hacer de Python realmente una comunidad más diversa...

Más alla de esto, fue muy interesante la jornada, viendo un poco cual es la tendencia actual, cuales son los problemas que enfrentan otros frameworks y buscar formas de colaborar (que discutimos luego en los sprints).

Backstage, Registración y Desayuno

La noche del Jueves se realizó el armado de bolsas (todavía no entiendo como se llenaron 2000 bolsas en un par de horas, teniendo en cuenta que incluía bastantes materiales e incluso otra bolsa). No tengo la cuenta, pero todos fueron voluntarios, tanto disertantes como organizadores y participantes ayudaron por igual.


Por la mañana del viernes fue el grueso de registración (pasabas el código de barras impreso en la hoja, te entregaban otra hoja troquelada para hacer origami y armar el identificador con el colgante, a lo que se le pegaban las cintas según el tipo de participación):


Ayude en lo que pude en ambos, fue útil para conversar y conocer gente, por ej. le entregue la remera a Armin Ronacher, y de paso le pregunté si quería venir a Argentina.

El desayuno en el lugar también fue útil para charlar con gente y aprovechar mejor el día, lo que se complementaba con el almuerzo también en el lugar, donde por ej. nos juntamos con Tatiana para conversar temas de PyConAr 2012 y PythonBrasil 2012, y de casualidad me sente en la misma mesa que Brett Cannon, asique aproveche para comentarle sobre PyConAr (Ricardo Kirkner había hablado algo con él previamente).

Charlas 

El Viernes, Sábado y Domingo fue el evento principal. Más de 100 charlas llenaron el cronograma:

Apertura, Keynotes y Plenarias


La apertura fue muy entretenido, con un show de robots comandados por python (hubo una mínima demora esperando que la mayoria apague sus notebooks por la interferencia). Luego en el stand se pudo apreciar de cerca (ver abajo).

La primer keynote, Stormy Peters de Mozilla, no tuvo mucho que ver con Python pero si con la comunidad, el open source. Si mal no recuerdo, arrancó como la web influye hoy por hoy nuestras vidas, habló de no maltratar ni espantar a los nuevos usuarios, no imponer el software libre a toda costa, etc.
Para la segunda keynote estaba ayudando en la registración, pero por lo que escuche, fue más orientada a startups.

La plenaria del Sábado (David Beazley) fue mucho más interesante y orientada a python (anunciada como técnica y diabólica), pero me quedo un sabor agridulce al ver la conclusión final sobre el futuro (no quiero faltar a la verdad con mi mala memoria, les recomiendo que la vean ya que es muy llevadera, tiene el estilo de Roberto Alsina).
La plenaria del Domingo (Guido) obviamente fue 100% python, con un mensaje sobre el GIL y Android para pensar. En general, los consejos fueron interesantes, y el panorama del mundo Python creo que lo dejo en claro.

Charlas Programadas

Hubo charlas muy interesantes para mí como la de Armin Ronacher ("Code Generation in Python: Dismantling Jinja") y en menor medida, "Stop Writing Classes", "Web Server Bottlenecks And Performance Tuning", "RESTful APIs With Tastypie", "How CherryPy supports Python 2 and 3", "Spatial data and web mapping with Python", "Deep Freeze: building better stand-alone apps with Python". 
Si bien ninguna tuvo la verdad revelada (dificil para 30 o 40 minutos), me llevé consejos utiles de ellas para procesar luego con más tranquilidad (que todavía no tuve).

A la de Raymond Hettinger ("The art of subclassing") no pude entrar porque estaba llenno, pero aparentemente también fue muy buena.
Otras, como "Putting Python in PostgreSQL" y "web2py: ideas we stole and ideas we had", me fueron útiles desde otra perspectiva, mas que nada, el modo de presentación, la interacción y preguntas.


Una frase que me quedo dando vuelta fue "For the questions I warn you: I'm an architect so I don't know the details". Me pareció raro en una conferencia de este tipo (dado el tipo y descripción de charla). En estos casos, creo que tener de antemano el borrador de la presentación o un articulo/paper ayudaría a que no haya malos entendidos. 

También me llamó la atención que la mayoría de las charlas terminaban con un mensaje tipo "Tenemos un startup, estamos reclutando empleados!", algunas llegando al punto de sobrevolar los temas técnicos para directamente recomendar contratar la solución comercial que ofrecían. 
No digo que este mal, de hecho me parece útil conocer todas las opciones, solo que algunas me tomaban desprevenido.

En algunas charlas trate de ayudar como session runner, no sin los sobresaltos típicos (el disertante no aparecía en una charla, el session chair no aparecía en otra, el session runner -yo- llegaba tarde y temas menores), igualmente fue enriquecedor y sirvió para romper un poco la rutina. La "green room" donde se reunía a los disertantes antes de la charla y se los obligaba a terminar (grabar en el pendrive) y probar la charla en el proyector fue bastante útil. 

Charlas Relampago

Las charlas relámpago de 5 minutos que ví fueron muy interesante, lastima que el video de PyAr que habíamos hecho (JuanBC principalmente, con la colaboración de todos) no fue seleccionado...


Este año cambiaron las reglas y la selección en vez de ser por orden de llegada fue aleatoria (y el cronograma era bastante rígido, al punto de no poder cambiar el contenido de los slots que fueron adjudicados a otros miembros de PyAr). De haberlo sabido, quizás hubiera armado un poster o pedido  un stand comunitario. 


Particularmente no se si es el mejor método para elegir charlas relámpago, ya que las hojas se llenaban estando hasta dos días disponible sin limite práctico (o sea, se anotaron 2 o 3 veces más propuestas del tiempo disponible). Creo que de este modo se pierde un poco la mística, en cambio, limitar a 10 charlas + backups me parece que le da más entidad, obligando a preocuparse y negociar un poco más con otros disertantes y el coordinador  (salvo que falle la interfaz humana, como en este caso).

De hecho, este tema (expresado en un email de "feedback" en la lista de organización por quien escribe), sumado a que se rechazaron la mayoría de charlas de comunidad, quizás dé nacimiento a un track "comunidad" valga la redundancia, para agrupar las charlas que no cumplen los criterios de "notoriedada" y "audiencia" necesarios para las charlas generales.

Espacios Abiertos

Prácticamente me los perdí, estaban un poco alejados y no estaba muy atento a los temas que se presentaron. 
De hecho, con Massimo armamos un espacio abierto de web2py al que no asistí porque se me superpuso con una charla y al llegar ya era tarde (en realidad me olvidé...). 
Todavía me arrepiento ya que la charla no estuvo muy buena y me perdí de hablar con Guido, que estaba interesado en el depurador web (si, leíste bien, aparentemente GvR fue al OpenSpace de web2py...).

El Testing BOF lleno mucha gente, no me pude quedar porque ya estábamos cansados, pero tenían proyector y todo, también me queda como asignatura pendiente para la próxima.

Salón de Exposición

Expositores

El Viernes y Sábado armaron los stands de los expositores (Sponsors) y comunidad (PyLadies, Women Who Code, Pyramid). Eran varios stands, la disposición se asemeja mas a una evento comercial de TI (a diferencia de los eventos de software libre que he visto regionalmente).

Más allá del merchandising, no alcanzaban los intervalos para recorrerlo completamente e interiorizarse con cada Stand, lo que le aportaba mucho a la conferencia.   
Incluso cada tanto en el stand de NAO, los robot bailaban bajo la influencia pythónica:

 

(perdonen la calidad de la foto, la camara tenía problemas con poca luz, por suerte la perdí...)

Posters y Feria de Empleos

Los posters fueron otro punto fuerte de la conferencia a mi entender. Del hall de esposiciones levantaron los stands y cada uno armo su poster. Durante una hora y media la gente se mostró muy interesada en los más de 40 posters, incluso el mismo GvR recorrió algunos y converso con los expositores. 


El pizarron con mi poster (en ocasiones, flanqueado por Massimo en el poster secundario de web2py)


En el fondo se ubicó la  Feria de Empleos, un lugar con mesas para que los Sponsors pudieran realizar entrevistas laborales y hablar con los interesados.

Sprints de desarrollo

Las reuniones de desarrollo fueron otro punto considerable de la conferencia. Según los organizadores, se lograron juntar alrededor de 700 desarrolladores el primer día.

Si bien había proyectos para todos los gustos, estuve organizando un sprint de web2py, con varios interesados, principalmente:
  • Discutiendo temas surgidos del summit como gluino (un mini web2py que corre sobre flask, bottle, e incluso django) 
  • Implementando nuevos features, como el editor Ace para web2py, soporte para toscawidgets, coffeescript, etc.
  • Resolviendo algunos bugs y recibiendo feedback de los usuarios
El resultado fue positivo, si bien Massimo tuvo que partir temprano, estuvimos trabajando varios días y la interacción con otros desarrolladores fue muy buena, abriendo un camino para que el año que viene otro desarrollador de web2py tome la posta y continuemos expandiendo nuestra comunidad.


web2py sprint

Hallway track, cenas y Party Nights

Los pasillos en los intervalos fueron el mejor lugar para conocer gente, charlar y coordinar otras actividades, como las cenas y salidas (por cierto, no había muchos lugares cerca y encima casi todos cerraban a las 8pm por ser zona comercial, y como el transporte público existe y es regular -cada 1 hora-, conviente alquilar un auto o quedarse en el hotel).

También conversé con Josh Berkus (core de PostgreSQL) acerca de que quizás sea interesante armar un PgDay en paralelo/cerca de la PyCon y aprovechar speakers en común (me vino a la mente Hannu Krosing, quién fue DBAs de Skype y miembro del proyecto SkyTools: replicación + python, ha dado charlas en otras PyCons, etc).

Me encontré con usuarios de web2py de diversas partes del mundo (España/Finlandia, Brasil, India, Canada y por supuesto de EEUU). También me cruzé y con gente de Reino Unido, Austria, Singapur y otros países que ya no recuerdo.


Algunos días hubo fiesta, PyCon Party y PyLaydies. A la primera, si bien tenìa la entrada, no fui ya que estabamos reunidos con gente que no tenía entrada. A la segunda, fuimos y ahí con Massimo nos encontramos con Tatiana, donde lo invitamos a ambas conferencias.

Cerrando la reseña, en el lobby del Hyatt había un Pizarrón para grafitis lleno de mensajes, como ejercicio se puede comparar el  antes y después (¿por que es la progamación tu pasión? qbasic rules!): 


Yapa

Santa Clara esta en el medio del Silicon Valley, asique había cerca varios museos, incluyendo el de Intel (con su frase inspiradora: "Don't be encumbered by history. Go off and do something wonderful") y el Museo de la Historia de la Computadora (donde se exhibe el libro "The Mythical Man Month", referencia inicial de mi tesis y del póster):


 

También se puede observar el botón "Steal From Your Friends" de la comunidad DECUS, y un recordatorio sobre "Sharing Software and Advice", como muestras de cooperación de hace más de 50 años.

Post-Conferencia

Aprovechando que estabá alla, como mini vacaciones me tome unos días para recorrer San Francisco y los Parques Nacionales de la zona.

En el Sprint conocí a Ramiro da Luz, miembro de Python Brasil y organizador de varios eventos, asique pasamos el fin de semana conociendo California y entre las sequoias conversamos sobre Python, web2py, PyConAr, PythonBrasil, PyAr, APyB, el trabajo y la familia.

 
 

"La fiesta termino ... y todo sigue igual", es hora de arrancar con la organización de PyCon Argentina 2012, cualquier cosa nos vemos en la próxima reunión. Traje merchandizing para repartir!

YMMV

viernes, 3 de febrero de 2012

A new web2py online python debugger

I've finished a new online debugger, based on my previous work on qdb module (bdb/pdb enhancement):


In contrast with pdb, this debugger is based on a client/server model, so it should be more stable and extensible than my previous approach (a piped command line loop, see current debug.py module, a naive attempt to use pdb in a web environment, it is mostly undocumented as it requires some advanced python skills to use pdb commands without blocking the whole web2py server).
In fact, qdb is based on the python bdb debugger framework (borrowing most commands from pdb), and it comes with a CLI, a separate GUI frontend (using wxpython), and for web2py, this totally web based interface.

Although this blog post is about web2py, qdb can be used to make debuggers for other frameworks too, you can use WebDebugger as a base to make controller/views with your favourite web stack.

Currently, this web2py debug implementation uses threads (debug and web ui, automatically managed by default web2py development server) and queues to communicate between them, but this can be extended to use multiprocessing client/listeners or anything with that interface (send, recv and poll, using socket or pipes).

Download:

The web2py package with integrated debugger can be downloaded from my site:

http://www.sistemasagiles.com.ar/soft/web2py_src_debug.zip

The full source code and revisions are in my web2py repo clone in googlecode:


You can download it with mercurial: 


Also, if you have the latest trunk, you can patch it with:


(the changes are in the default branch so will not create nasty repository effects)

Brief Changelog:

web2py is great because it is small and concise, so most changes are less than 100 lines (and some were trivial):
  • added gluon.contrib.qdb , the debug backend and basic frontend
  • updated gluon.debug to create the qdb client/server debug queues and the web frontend
  • updated applications/admin/controller/debug with interact and breakpoints controllers
  • added applications/admin/views/debug/interact.html and breakpoints.html
  • updated applications/admin/views/default/edit.html to add toggle breakpoint button
  • updated applications/admin/models/menu.py to add top-level debug menu
  • updated applications/admin/js/static/ajax_editor.js (toggle breakpoints) and style.css
  • updated gluon.html.CODE and gluon.highligh to show the context relevant lines 
The full change log is available in the repository here. It took me less than 8 hours to add a debugger to web2py, very nice!

Usage:

Basic interaction (step, next, continue, return, stop, etc.), with the highlighted code, locals/globals and a interactive console to execute python statements in the debug environment.
Access it from the added "Debug" main menu button (or go to http://localhost:8000/admin/debug/interact):



To evaluate an expression, enter it in the second textarea, press enter and it will be executed in the debugger.

The result, if any, will be shown in the upper textarea. You can execute any valid python command, including python assignment statements.

To execute the current statement, press step. If you do not want to enter to functions, press next. To run the program until it finish or a breakpoint is reached, press continue. To cancel execution, press stop.


Breakpoints (including temporary and conditional ones, with hit count) can be accessed from the Breakpoints button at the main debug page (or go to http://localhost:8000/admin/debug/breakpoints):



Temporary breakpoints are deleted automatically after the first hit, and conditional breakpoints only matches if the associated python expression evaluates to True. 
Also, the breakpoint page can show the context source code according to the line number specified.

The breakpoints can also be added and removed from the edit window (new Toggle Button near back/docs, for example, in http://localhost:8000/admin/default/edit/welcome/controllers/default.py):


 


It also can debug exceptions (handled or unhandled, note the exception info and traceback). After you inspect the local or global variables, press continue so normal exception handling will be done:


  


With this changes, web2py can offer a complete online and ubiquitous Integrated Development Environment, so you don't need to learn any external tool to create web sites!

This debugger was tested this on Ubuntu and Windows XP, but it should work in mac and other linux flavours too, as it is pure-python and no third-party dependencies are required.

Future enhancements (supported by the backend, but not implemented already in the web frontend):
  • Jump to line and Run to line
  • Moving Up/down through the stack trace
  • Watch variable list (now they can be manually inspected with the interactive console)
Current drawbacks and limitations:
  • from gluon.debug import dbg;  dbg.do_debug() or dbg.set_trace() should be called from the model/controller to run under debug control (if not, normal web2py dispatch occurs, no breakpoint is honoured). UPDATE: the debugger is automatically started if debug interaction page is opened or breakpoints are set (see wsgibase web2py entry point to run controllers)
  • The debugger is threaded, so beware of apache prefork and similar (the backend supports remote debugging, but it is more trickier to set the breakpoints). This also applies to the current shell and similar tools like paste. See modwsgi Debugging Techniques (Browser Based Debugger). Anyway, I'm working in a full remote multiprocess debugger (that is supported by qdb CLI and GUI right now)
  • Secondary effects can appear if debug more than a function at a time (it will not die, but it is more difficult to follow)
  • I didn't find a way to add markers to editarea yet (ie. a red circle near the line number to indicate a breakpoint)
  • Debugging cannot be limited per application (FILTER_APPS and multi user mode cannot be enforced)
  • Compiled apps cannot be debugged as easily as non-compiled ones (breakpoints must be set manually with set_trace)
  • Some style/layout details are missing

So, if you want to try it, just set breakpoints and execute your controller to start debugging and enjoy ;-)

miércoles, 4 de enero de 2012

pg8000 1.09 maintenance version (fork) released

pg8000 is a DB-API 2.0 compatible Pure-Python interface to the PostgreSQL database engine.
It is one of many PostgreSQL interfaces for the Python programming language. pg8000 is somewhat distinctive in that it is written entirely in Python and does not rely on any external libraries (such as a compiled python module, or PostgreSQL’s libpq library).
This pure-python connector approach allows to run it where C compiled libraries cannot be installed, it allows deeper access to PostgreSQL protocol internals and it enables easier flexibility and extensibility for Python developers (like support for parameterized prepared statements using qmark, numeric, named, format or pyformat DBAPI paramstyle).

The highlights of this 1.09 maintenance release are: two-phase commit support, autocommit feature, server_version property and bug fixes for almost all reported issues since 1.08 (2010-06-08) 


For details of the changes in this release, please see the notes at:

http://html.pg8000.googlecode.com/hg/changelog.html

pg8000 maintenance version may be downloaded from:

http://code.google.com/p/pg8000/downloads/list

For more information see:

http://code.google.com/p/pg8000/

For the original version see:

https://github.com/mfenniak/pg8000

Acknowledgements to Mathieu Fenniak for the original version and thanks to the contributors that reported and/or sent patches applied for this release.


PS: I've been working with this library since the last year, it helped me where psycopg2 couldn't be installed (dependency compilation issues in older systems) or when I needed more flexibility (i.e. paramstyle). As it seems that the original author don't maintain it anymore, I've decided to make a fork in googlecode, with the hope it could be useful to other people too.

pg8000 1.09 versión de mantenimiento (fork) liberado (conector python para postgresql)

pg8000 es una interface DB-API 2.0 compatible puramente hecha en Python para el motor de base de datos  PostgreSQL.
Al no depender de bibliotecas externas (libpq) o modulos compilados, puede ser instalada practicamente en todos los entornos, y habilita un acceso más profundo al protocolo de PostgreSQL, permite flexibilidad y extensibilidad más simple y para los desarrolladores Python como ser el soporte para sentencias preparadas parametrizadas usando qmark, numeric, named, format o pyformat según el paramstyle de la DBAPI).

Las características principales de esta versión 1.09 de mantenimiento son: commit en dos fases, soporte para autocommit, propiedad server_version property y corrección de errores para casi todas las incidencias reportadas desde la versión 1.08 (2010-06-08)

Para los detalles de los cambios en esta liberación, ver las notas en:
http://html.pg8000.googlecode.com/hg/changelog.html


La versión de mantenimiento de pg8000 puede ser descargada de:
http://code.google.com/p/pg8000/downloads/list


Para más información ver:
http://code.google.com/p/pg8000/


Para la versión original ver:
https://github.com/mfenniak/pg8000


Mis agradecimientos a Mathieu Fenniak por la versión original y a los contribuidores que han reportado y/o enviado sus correcciones que se han aplicado en esta versión.


PD: Vengo trabajando con esta bibilioteca hace más de un año, me ayudo donde psycopg2 no pudo ser instalado (por no poder compilarlo por cuestiones de dependencias viejas) y cuando necesité más flexibilidad (el tema de paramstyle). Como se ve que el autor original no la mantiene más, decidí hacer el fork en googlecode, con la esperanza de que les sea útil a otros.

Licencia y Aviso Legal

CC BY-SACopyright (C) 2009 - 2013 Mariano Reingart reingart@gmail.com - Visite el sitio http://reingart.blogspot.com/ para novedades. Salvo indicación contraria, el texto de esta página está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0 Unported; podrían ser aplicables cláusulas adicionales.

Se solicita mantener el aviso de copyright (enlazando al texto original), compartir las obras derivadas bajo la misma licencia, y si es, posible comunicando al autor cualquier mejora. No utilizar logotipos ni marcas sin la debida autorización de sus titulares.

Toda información es proporcionada a Titulo Informativo y se entrega como está, sin garantías explícitas ni implicitas de ningún tipo, incluyendo sin limitación, pérdida de ganancias, interrupción de negocios, pérdida de programas u otros datos en sistemas de computación o cualquier otro reclamo. Al usarla acepta hacerlo bajo su propia responsabilidad, conociendo la normativa y reglamentaciones existentes. En caso de controversias respecto del presente, usted acepta presentarlas y resolverlas exclusivamente en la jurisdicción de los Tribunales Ordinarios Civiles y Comerciales del Departamento Judicial de Morón, Provincia de Buenos Aires, Argentina, renunciando expresamente a cualquier otro fuero que pudiere corresponder.