Juan Pedro Fisanotti: n900
un detalle que vale mas que mil palabras: el n900 trae de fabrica una consola de linux instalada :)
Walter Alini: Un libro siempre en la mochila
Colas de banco, filas de colectivo, viajes en colectivo, caminatas por rectas en calles sin regalos perrunos, “aguantame un cachito”, tiempos muertos entre reunión y reunión, #2 del baño, llegadas temprano, filas para comprar cospeles, espera en aeropuertos, trasbordos, “llego en 15″ cuando ya estás ahí, re centrifugada de la ropa, colas en el súper, reuniones del colegio, salas de espera, clases aburridas y sobremesas.
¿Qué tienen estas cosas en común? En todas es un buen momento para leer un libro. Desde hace algunos años acostumbro a llevar siempre un libro en mi mochila, y lo saco sin temor cada vez que se me presenta la oportunidad. Los tiempos muertos se hacen mucho más cortos con un buen libro en la mano. Además, me da la sensación de que no estoy perdiendo el tiempo, sino ganándolo.
Cada vez que saco un libro entre miles de caras de culo en una cola (valga la redundancia) me siento el más campeón de los campeones, el que se avivó, el loco pistola que se dió cuenta dónde estaba la papa. Y me la paso leyendo.
Este 2010 quiero leer por lo menos 20 libros. Los tengo a todos en una pilita en mi pieza, aunque siempre voy agregando más y si pudiera, leería más de lo que tengo. Con 20 me alcanza. Vamos a ver si antes de final de año puedo hacer un post que los enumere a todos.
Mientras tenga que pagar impuestos tiempo no me va a faltar.
Roberto Alsina: rst2pdf 0.13 released!
I've just uploaded the 0.13 version of rst2pdf, a tool to convert reStructured text to PDF using Reportlab to http://rst2pdf.googlecode.com
rst2pdf supports the full reSt syntax, works as a sphinx extension, and has many extras like limited support for TeX-less math, SVG images, embedding fragments from PDF documents, True Type font embedding, and much more.
This is a major version, and has lots of improvements over 0.12.3, including but not limited to:
Facundo Batista: PyCamp 2010
Viernes
En realidad llegamos a Veronica el jueves. Viajamos a la tarde/noche con Alecu, Ricardo y Joac, para llegar, cenar, acostarnos, y levantarnos temprano para armar lo que era energía e internet.
El plan estuvo muy bien, nos levantamos casi a las ocho, desayunamos, y empezamos a armar todo... para cuando empezó a llegar la gente, ya teníamos todo andando.
La mañana estuvo tranquila, charlando de cosas varias mientras iban llegando los participantes, y recién luego de comer arrancamos con la organización del schedule para todos los días:

El primer tema me interesaba (tower defense); no para programarlo, sino para participar en la charla inicial. Las ideas estuvieron muy bien, veamos como evoluciona.
También participé de la segunda sesión (hacer un server XMPP en Twisted), pero llegamos a la conclusión que no tiene sentido ponernos a hacer todo ese trabajo, porque para las funcionalidades locas que quisieramos implementar, es suficiente con hacer un cliente o un componente (y ya hay soporte para eso en Twisted).
Luego me pegué un regio baño, y llegó la hora de la cena. Y con el fin de la comida, pasamos a la parte de juegos.
Como siempre, se armaron distintos grupos jugando a distintas cosas. Yo jugué al Settlers of Catan con Perrito, Robert, y Luciano. Un rato después de que terminamos de jugar (y de que nos habíamos terminado el Legui), llegó Moni con Felipe, que venían de Buenos Aires en el auto de John, así que fuimos a terminar de armar las cosas en la habitación y a dormir, que eran como las dos de la mañana.
Sábado
Por suerte no arrancamos temprano, ya que el desayuno es a las nueve de la mañana, así que me levanté ocho y media, y a las nueve estábamos desayunando con la familia.
Durante la mañana no hice nada específico, más que nada charlas, cargué muchos bugs de Enjuewemela, y le eché algo de laburo a Typus Pocus: nos fuimos de Google Code, ahora estamos en Launchpad, y empecé a darle forma para poder utilizarlo de ejemplo en la clase de empaquetamiento de Luciano (ver más abajo).
A las 13 almorzamos, y luego jugamos a la pelota como media hora (sí, ¡deporte!). Cortamos a las 14 porque arrancaba la sesión de Lalita. Nos juntamos obviamente al aire libre (estabamos la mitad transpirados por el fúbol), y charlamos cosas para hacerle. Me anoté un bug doble (o dos bugs muy parecidos, como quieran), pero antes de empezar a hacer eso me fui a bañar.

Cuando salí encontré que ya había empezado la charla de cocos2d, y me metí para la charla/discusión sobre qué era y cual es el futuro (llegamos a la conclusión de que lo que habría que hacerle a la biblioteca es: mejor manejo de sonido, implementar colisiones, mejor documentación, y bugfixing en general).
La noche pintaba tranqui, porque no habíamos podido armar el fogón entonces no sabíamos que íbamos a hacer con la reunión de PyAr. Pero al final la hicimos, repartimos merchandising que Nati y Matías habían traido de USA, repartimos tutoriales impresos para que lleven a las Universidades, hablamos del PyCon en Argentina pasado y futuro, del recién terminado PyCon USA, de Python y la evolución del lenguaje, de cómo estaba Python en Argentina a nivel laboral, etc. Muchos temas. Y terminó derivando en charlas políticas muy interesantes.
A eso de las dos y media de la mañana, luego de charlar en varios grupos y con ya demasiado vino en sangre, me fuí a dormir.
Domingo
El domingo arranqué con un poco de resaca, pero llegué bien a desayunar.
Durante la mañana estuve trabajando en Typus Pocus, para que esté listo para la clase de la tarde de Luciano Bello sobre empaquetar proyectos para Debian. Esa clase fue muy útil, y recorrimos casi todos los pasos para que se pueda meter el juego en esa distro de Linux (todavía faltan sacarle unos warnings de lintian, ya anunciaré aquí como evoluciona eso).
Luego se hizo un pequeño Bug Day de Python, en la cual muchos chicos aprendieron cómo trabajar en el proyecto de Python en sí, y cómo buscar bugs y proponer soluciones, y hasta se corrigieron un par de cosas!
Durante la tarde, también, se realizó el primer Torneo Universal de Ping Pong Durante Un PyCamp (o más fácil: TUPPDUPC). Yo perdí en cuartos a manos de (o "a paletas de") el que sería el campeón, Nico Echaniz:

Estuvimos también charlando un rato largo sobre el modelo del juego que construiremos durante el próximo PyWeek (el juego más grande del mundo, ¡ya les contaré cómo participar!).
Finalmente, volví a trabajar en la laptop, en el bug doble de Lalita que había comenzado a resolver el día anterior. Y estando ahí trabajando, al lado de Riq, no se bien cómo surgió pero me terminó explicando cómo se usaban matrices para resolver los cambios a imágenes (redimensionarlas, rotarlas, desplazarlas, etc.; lean esto que lo explica bien).
Lunes
Durante la mañana del último día logré corregir los bugs que venía trabajando de Lalita, antes de comer me puse a trabajar en un juego que estoy armando, Enjuewemela, un juego loco con un montón de gemas que tienden a desaparecer siguiendo extrañamente acciones del usuario.
Luego del almuerzo tuvimos una charla entre todos sobre el PyCamp mismo: cómo había sido, que cosas estuvieron mal, cuales bien, qué deberíamos corregir, y hasta terminamos tirando la idea de hacer un segundo PyCamp a continuación de PyCon Argentina 2010, en Córdoba.
Luego de esta charla seguí trabajando en Enjuewemela, hasta que se acabó el tiempo.
Ahí empecé a ordenar todo lo mío y a limpiar un poco los lugares donde habíamos trabajado, armé el auto, y emprendimos el regreso.

Así terminó el tercer PyCamp en Argentina, uno de los eventos de programación más interesantes que conozco, y uno de los que más cumplen a la hora de aprender y divertirse. Todas las fotos, aquí.
Diego Sarmentero: Monologo Rabinovich
Un Genio!!
Diego Sarmentero: Mejores Practicas de Java
Presentación mostrando algunas buenas practicas de Java
Javier Castrillo: La ola está de fiesta
Luego de Herodes, Alejandro, Cicerón, Julio César, Fidel, Perón, Eva, el mismo Alfonsín, de Gaulle, el Ché, Mao, M. L. King, Salvador Allende o Hugo Chávez, la historia reconocerá en Mauricio Macri a uno de sus oradores más entradores en la conciencia e influyentes en la masa popular. Sus discursos serán recordados por siglos. La capacidad [...]
Diego Sarmentero: Fundamentos de QuickDB
Esta es una Presentación de 6 Slides solamente que muestra las partes fundamentales de QuickDB:
Javier Castrillo: Cyberconvocatoria popular en la Plaza
Muy a mi pesar(?), tengo que reconocer que Facebook puede servir para algo útil. En el día de ayer, los seguidores del excelente programa “6, 7, 8″ se congregaron en la Plaza de Mayo para defender el modelo nacional y popular de la compañera Cristina. La convocatoria se hizo, justamente, a través de la red [...]
Diego Sarmentero: Code Bubble
Repensando el paradigma de interfaz de usuario de entornos de desarrollo integrado
Mariano Guerra: nuevo intento de viejo proyecto
queres probar algo nuevo? tenes algun lugar para recomendar? ayudame a cargar datos http://pleinu.appspot.com (consejos/quejas bienvenidas)
esta vez empieza desde lo basico y se arma con tu feedback
para los nionios como yo, esta hecho en python sobre appengine usando tubes*
* http://a-series-of-tubes.appspot.com/ y http://github.com/marianoguerra/tubes
Javier Castrillo: Infiltrado en el MST
Según una denuncia de Vilma Ripoll, se ha detectado un infiiltrado en el MST. Parece que se dieron cuenta porque: No lo vieron apoyar con mucho énfasis a la mesa de enlace Cuando Vilma se abrazó con el sojero De Ángelis, sospecharon de la risa falsa del espía. Según testigos, el espía pronunció las palabras, “pueblo”, “libertad” y hasta [...]
Evita: Comunicado de la CGT - Movilización de programadores de juegos
Comunicado de la Confederación General del Trabajo:
Trabajadores de la Patria:
En este año del bicentenario, en plena lucha contra el liberalismo, el neoliberalismo, el gorilaje cipayo y los medios hegemónicos; la CGT, liderados por la compañera Eva Perón, convocamos a todos los compañeros para otra gesta histórica del peronismo de base.
Nuestra acción se desempeñará en dos flancos bien definidos:
1 - Movilización constante para defender la democracia, los logros de la Compañera Presidenta en el marco de los derechos humanos, la vuelta a los valores de solidaridad, hermandad y trabajo comunitario. Solamente el pueblo salvará al pueblo, contra el ataque impiadoso de los monopolios, la derecha y los gorilas de toda la vida.
Matías E. Gieco: (Enie)a Mar(i acentuada) a Elena tiene raz(o acentuada)n
A los que programamos computadoras y somos de los que nos gusta la consola, solemos ver bastante seguido el problema de la ñ y de los los signos de apertura de admiración y pregunta en esto de las computadoras, internet y demases.
No es un tema simple de resolver, siempre pienso que si los yankees hubieran escrito en español, francés y/o ruso, la programación hubiera sido mas simple ya que hubieran tenido en cuenta los 'caracteres especiales'.
Sobre ésto, de un link de la lista de python Argentina, copio y pego este espectacular texto, de doña María Elena Walsh:
La eñe también es gente
La culpa es de los gnomos que nunca quisieron ser ñomos. Culpa tienen la nieve, la niebla, los nietos, los atenienses, el unicornio. Todos evasores de la eñe. ¡Señoras, señores, compañeros, amados niños! ¡No nos dejemos arrebatar la eñe! Ya nos han birlado los signos de apertura de interrogación y admiración. Ya nos redujeron hasta la apócope. Ya nos han traducido el pochoclo. Y como éramos pocos, la abuelita informática ha parido un monstruoso # en lugar de la eñe con su gracioso peluquín, el ~. ¿Quieren decirme qué haremos con nuestros sueños? ¿Entre la fauna en peligro de extinción figuran los ñandúes y los ñacurutuces? ¿En los pagos de Añatuya cómo cantarán Añoranzas? ¿A qué pobre barrigón fajaremos al ñudo? ¿Qué será del Año Nuevo, el tiempo de ñaupa, aquel tapado de armiño y la ñata contra el vidrio? ¿Y cómo graficaremos la más dulce consonante de la lengua guaraní? "La ortografía también es gente", escribió Fernando Pessoa. Y, como la gente, sufre variadas discriminaciones. Hay signos y signos, unos blancos, altos y de ojos azules, como la W o la K. Otros, pobres morochos de Hispanoamérica, como la letrita segunda, la eñe, jamás considerada por los monóculos británicos, que está en peligro de pasar al bando de los desocupados después de rendir tantos servicios y no ser precisamente una letra ñoqui. A barrerla, a borrarla, a sustituirla, dicen los perezosos manipuladores de las maquinitas, sólo porque la ñ da un poco de trabajo. Pereza ideológica, hubiéramos dicho en la década del setenta. Una letra española es un defecto más de los hispanos, esa raza impura formateada y escaneada también por pereza y comodidad. Nada de hondureños, salvadoreños, caribeños, panameños. ¡Impronunciables nativos! Sigamos siendo dueños de algo que nos pertenece, esa letra con caperuza, algo muy pequeño, pero menos ñoño de lo que parece. Algo importante, algo gente, algo alma y lengua, algo no descartable, algo propio y compartido porque así nos canta. No faltará quien ofrezca soluciones absurdas: escribir con nuestro inolvidable César Bruto, compinche del maestro Oski. Ninios, suenios, otonio. Fantasía inexplicable que ya fue y preferimos no reanudar, salvo que la Madre Patria retroceda y vuelva a llamarse Hispania. La supervivencia de esta letra nos atañe, sin distinción de sexos, credos ni programas de software. Luchemos para no añadir más leña a la hoguera dónde se debate nuestro discriminado signo.
Letra es sinónimo de carácter. ¡Avisémoslo al mundo entero por Internet! La eñe también es gente.
Roberto Alsina: Cómo encontrar un programador que sepa programar.
Si todavía no leíste Why Can't Programmers.. Program? de Jeff Atwood andá, leélo y volvé.
¿Ya te asustaste? No lo hagas, el problema es el proceso de contratación.
Sí, hay montones de personas que se presentan para trabajos de programador y no saben programar. Eso es normal.
Está relacionado con una cosa que escribió Joel Spolsky (extrañamente, socio de Atwood en stackoverflow.com).
Suponéte que querés contratar a alguien en el top 1% de los programadores.
Tenés 100 postulantes, de ellos 99 no pueden programar. 1 puede, y lo contratás.
Después la empresa de al lado necesita lo mismo. Tienen 100 postulantes, 99 no pueden programar... ¡y 80 son los mismos que la otra compañía rechazó!
Así que no, contratar al mejor de 100 no es la manera de tener un programador "top 1%", es simplemente tu intuición estadística que te hace equivocar.
No querés contratar a alguien en el top 1% de los postulantes, querés uno en el top 1% de programadores. Diferentes universos.
Estas dos cosas son los dos lados de la misma moneda. 99% de los postulantes son inútiles, por eso son postulantes, porque no pueden conseguir trabajo y no tienen trabajo porque son inútiles como programadores.
Juzgar a los programadores por el standard de los postulantes que se presentan es como juzgar la calidad de un restaurante lamiendo su tacho de basura.
Ahora, habiendo entendido esto, ¿cómo se encuentra un programador que pueda programar?
¡Fácil! ¡Buscás uno que tenga programas para mostrarte!
Nunca contrataría a un programador que no me pueda mostrar código. Tiene que tener un problema porque los programadores programan.
Es lo que hacemos. ¿Si no lo hacemos que somos? ¿Teóricos?
Veamos algunas objeciones obvias:
Programó para su trabajo anterior y no lo puede mostrar.
Ok, lohizo. ¿Qué más escribió? ¿Algo open source? ¿fragmentos en un blog? ¿Respuestas en stackoverflow?
¿Nada? ¿No escribió nada sin cobrar? No es el que quiero. Si sólo programa por dinero no tiene pasión por la programación, o no lo disfruta. Probablemente no es muy bueno tampoco.
Está terminando la universidad, todavía no escribió mucho.
¿Porqué? ¿Qué está esperando? ¿Qué lo detiene? Lleva años estudiando como programar! ¿Qué hizo con el conocimiento que fué adquiriendo? ¿Lo guarda para cuando cumpla 25? ¿No practicó su arte? No es el programador que buscamos.
Pero conseguir alguien que te muestre código no es suficiente por supuesto. También tiene que ser buen código, si estás seriamente tratando de contratar programadores excelentes.
Así que aquí hay unos criterios extra:
Y después está lo obvio, referencias, entrevistas, ejercicios, pero esos son filtros secundarios, lo importante es que pueda programar, y mostrarte su código es la forma de hacerlo.
John Lenton: Thank you vates
A veces creo que debería sucumbir y unirme a Facebook. Por suerte,
cuando eso pasa nunca falta quien me convenza de postergarlo un año
más.

Mariano Guerra: si los profesores de fisica explicaran asi..
recomiendo ver los 12
John Lenton: PyCamp
El fin de semana me pude hacer una escapada el PyCamp. Fue muy lindo ver cómo seguía teniendo la misma idea (por demás simple) de juntar pythoneros para que hueveen hasta el hartazgo (o hasta quedarse sin voz de hablar de cómo arreglar el país y el mundo, o darse cuenta a las 5am que era la hora que era y que el resto se había ido a dormir horas antes mientras vos cazabas ese bug tan interesante).
Me pude desenchufar por dos días de la carrera contra reloj que es meter cosas nuevas en Lucid (que es mi trabajo). Y, mientras estuve ahí, construí una cosa. Bah, dos.
Por un lado, hice una aplicacioncita GTK+ que te deja bajar videos de YouTube eligiendo su resolución. Como soy super original, le puse YouTube Downloader.

Por otro lado, como parte de lo anterior, hice una librería para bajar cosas asincrónicamente desde aplicaciones hechas en pygtk. Usa solamente gio, sin usar threads ni nada así (por lo menos que uno se entere). Y por ahora, es parte de ytd. Se usa así:
AsyncDownloader('http://pyvore.com/bg.jpg', file_factory, done_cb)
con eso, cuando termina de bajar el archivo se llama a done_cb con el
objeto que devolvió file_factory (por ejemplo, file_factory puede ser
tempfile.NamedTemporaryFile). Es así de fácil! Tiene ganchos para
complicarla, por ejemplo para mostrar progreso, pero es la misma idea.
Sebastian Bassi: Downgrade pago
Evita: Paso a la inmortalidad del compañero Lucho
Es un dolor enorme comunicar al pueblo, que el compañero Lucho, Ubuntero y, (aunque no peronista) seguidor incansable de la causa del pueblo, ha dejado de acompañarnos y se ha ido para siempre a lo que él llamaba "la tierra sin mal".
Este amigo, que literalmente ha dado su vida por los demás, sin esperar nada a cambio, ha sido un ejemplo de vida, sirviendo constantemente a todos los que necesitaron ayuda. Inquieto, participador, comprometido,ejemplo que los que aquí quedamos debemos tomar como otra bandera del pueblo hacia la victoria definitiva.
Marcos Vanetta: Tutorial de Bazaar
Hace algunas semanas hable sobre Bazaar [1] en este post. Lo he probado durante algún tiempo y me ha parecido muy simple! por supuesto, yo trabajo solo y casi nunca tengo conflictos con… migo mismo, pero en fin. Aquí presento un pequeño tutorial al respecto:

Primero básico e imprescindible: Iniciar un proyecto. Podemos empezar uno nosotros mismos o clonar uno de algún repositorio. (Es decir copiarnos el de alguien para modificarlo nosotros).
1) Creamos nosotros un nuevo proyecto
mkdir proyecto_nuevo
cd proyecto_nuevo
bzr init
2) hacemos branch de un proyecto:
bzr branch lp:lalita
Configuramos nuestro repositorio: Principalmente, se seleccionan que archivos no queremos formen parte del repositorio: archivos propios del IDE, configuraciones exclusivas de nuestro sistemas, la base de datos que estemos usando, backups del sistema, *.pyc, etc. Si bien ya hay un archivo que se encarga de esto en Bazaar, también podemos crear el nuestro .bzrignore. Ojo! debe estar dentro de un commit (ver más adelante)
*.o
*~
*.tmp
*.py[co]
bzr ignore
bzr ignore –old-default-rules
Listo! ya podemos empezar a trabajar en nuestro proyecto. Una vez que tengamos algunos cambios y estemos seguros de que funcionan deberíamos hacer commit. En el caso de que hayamos creado o borrado algunos archivos a drede antes deberíamos avisarle a Bazaar:
bzr add nombre_del_archivo
bzr add . #agregamos todos los archivos nuevos
bzr remove nombre_del_archivo
bzr commit -m “esto es un commit”
bzr commit -m “solo comiteamos un archivo” file_name
bzr commit –author “Patricio Rey “
Revisemos como vamos:
bzr status # nos dice si hicimos cambios desde el último commit
bzr diff # nos muestra todos los cambios desde el último commit
bzr diff file.py #exclusivo para un archivo
bzr diff –diff-options –side-by-side foo.py #a probar!
bzr log # nos muestra un historial de commits
bzr log foo.py # el historial de un solo archivo
bzr cat -r X file #la versión X del archivo file
bzr viz # Herramienta gráfica!
¡Errores! Supongamos que hemos hecho algunos cambios y … no nos gusta ninguno. Podemos hacer un:
bzr revert # y eliminar los cambios hasta el último commit
bzr revert archivo # elimina los cambios de un archivo
bzr uncommit # elimina el último commit
bzr uncommit -r -3 # vuelve 3 commits para atrás
A veces, tenemos una versión funcional, pero le queremos agregar algunas opciones nuevas. A riesgo de no “romper” el programa que ya está andando, lo que hacemos es crear un branch y luego, cuando nos aseguramos que las nueva features funcionan genial, hacemos un merge entre las dos versiones:
#no ubicamos un directorio antes en el árbol:
pwd -> /home/malev/code/lalita
cd..
bzr branch lalita nuevo_branch
# jugamos en nuevo_branch y cuando nos convence
# en el directorio de lalita hacemos
pwd -> /home/malev/code/lalita
bzr merge ../nuevo_branch
# y si no hay conflictos, YA ESTÁ!
Preparando un release! Esta opción nos permite copiar todos los archivos y directorios de un branch y empaquetarlos en un archivo o directorio. También es posible taggear o etiquetar un conjunto de archivos con un número de versión.
bzr export ../releases/my-stuff-1.5.tar.gz
bzr tag version-1-5
bzr diff -r tag:version-1-5
bzr tag 2.0-beta-4 –delete #si nos confundimos![]()
Todo este tutorial ha sido extraído de [2]. Aunque también recibí ayuda de Facu, Dermi y Gonzalo, todos del canal de IRC de PyAr [3]
También existe una aplicación visual [4], pero todavía no descubrí como instalarla ![]()
Y por último, he encontrado otro tutorial en español que parece interesante aquí en [5]
[1] http://bazaar.canonical.com
[2] http://doc.bazaar.canonical.com
[3] http://python.org.ar
[4] http://doc.bazaar.canonical.com/explorer/en/visual-tour-gnome.html
[5] http://palangano.com.ar/tag/bazaar/
Paul M. Dorr: SlimStats, estadísticas web open source
SlimStat es una aplicación open source de análisis y estadísticas para páginas web.
Está creada con PHP y MySQL, así que se puede integrar fácilmente en nuestros sitios mediante JavaScript (como Google Analytics) o PHP.
Para un determinado período, la aplicación muestra:
También hay una opción llamada “paths”, que muestra el camino recorrido por un usuario desde su navegador, página por página.
La gran ventaja de Slimstat ante Google Analitycs es que muestra las estadísticas en vivo, con tan sólo presionar F5.
Hace unos minutos lo he instalado en www.shooteando.com.ar, mediante un proceso extremadamente sencillo que lo dejó funcionando en el acto. Para probarlo “en vivo“, entré varias veces desde esta misma pc y desde una con otra ip [ gracias @rulski =P ] mientras actualizaba con F5 para ver los cambios. Los resultados fueron más que satisfactorios; me mostró la cantidad de “hits” [ 5 en total, 4 desde mi pc ] y las visitas “reales” [ que eran 2 ]. Lo único que le faltaría es permitir que el gráfico se muestre por visitas y no por hits/día, aunque los números en la parte superior sobran para hacerse una idea correcta de la cantidad de visitas “reales”.
Espero que les sea útil y no dejen de comentar si lo probaron o tienen dudas.
Mariano Guerra: Bad Wildbad
Javier Castrillo: Un amigo se nos ha ido
Vivías el sueño, soñabas la vida…. así te presentabas. Nos contó tu mamá que estabas comiendo, y luego te fuiste, así rápido, sin quejarte de nada, sin protestar, sin saludar, sin darnos tiempo a acostumbrarnos a estar sin vos. Justamente sin vos que nos malacostumbraste a tus correos del día de la madre, de tu [...]
Juan Pedro Fisanotti: PyCamp 2010, día 4
Bueno, ya estoy en Retiro, en un rato estoy saliendo para Rafaela. Así que posteo el resumen de hoy. Probablemente después haga un post más completo con mis conclusiones de lso 4 días.
Algo muy interesante de hoy fué el hacking con OpenCV. Se hizo un programita que detecta cuando hay una cara cerca del monitor, si no hay nadie pone solo el protector de pantalla, y si hay alguien lo saca. Está genial :).
Y a la tarde se hizo el cierre, donde se expuso brevemente las cosas que se habían logrado en cada uno de los proyectos, y se charlaron algunas ideas para el próximo PyCamp, y PyCon.
Estoy muerto, pero estuvo todo muy, muy bueno. Después haré el resumen. Saludos!!
Diego Sarmentero: Aprender a Programar en 21 Dias
Muy bueno!! La verdadera (y posiblemente unica) forma de aprender a programar en 21 dias en C++:
Visto en: http://mundogeek.net/
Mariano Guerra: Neuschwanstein
el sábado con pato fuimos al neuschwanstein, aunque el nombre no suene conocido es bastante conocido por el castillo que hay ahí.
Para bien o para mal después de semanas sin nieve nos despertamos para salir a las 5:30 de la ma~nana con una tormenta de nieve importante por decir poco, durante el viaje no importo mucho porque los trenes tienen calefacción, pero una vez allá estaba fresquito por decirlo de alguna manera.
paseamos por los alrededores, hicimos una visita guiada por el castillo mas chico y a la hora de subir al castillo grande nos agarro una tormenta de nieve como nunca había visto y nos dejo con una pared blanca alrededor nuestro que no nos dejaba ver nada.
Como no sabíamos a que hora iba a parar decidimos bajar la monta~na con la tormenta. Una vez abajo mientras tomábamos un café para pasar el frió y darle tiempo a mi cerebro de que recuerde que tiene que hacer que sienta mis manos. milagrosamente salio el sol y me dejo sacar algunas fotos que son las que muestro.
No creo que quieran ver monta~nas escondidas atrás de una pared blanca :D.
En resumen estuvo muy bueno, tuvimos una llegada con nieve suave y aguantable, una experiencia de tormenta de nieve y un final despejado que estuvo muy bueno.
Juan Pedro Fisanotti: Pycamp 2010, día 3
Resumen de hoy :)
A la mañana me quedé medio dormido, jeje, porque anoche nos habíamos quedado hasta las 4 a.m.
A la siesta participé en un mini-cursito de empaquetado de aplicaciones Python para Debian. La verdad que era más complejo de lo que esperaba, pero nada que un programador no pueda hacer. Conclusión: tengo que aprender setuptools
Más tarde participé en el Bug Day de Python: cada uno elegía algún bug de Python y trataba de mandar un parche con la corrección. No pude hacer ningún parche, pero aprendí un poco viendo código de cómo está hecho Python, lo que estuvo bueno.
Y ahora a la noche, después de comer empanadas y panqueques, vuelvo a programar un poco el juego que empezamos el sábado.
Saludos!!
update!: me acabo de enganchar en una reunión de otro juego que se va a desarrollar para una competencia, veremos que onda :)
Diego Sarmentero: Navegador Web en 63 Lineas de Codigo!
Gracias a Python y PyQt es posible programar un Navegador Web en solo 63 lineas de código (e incluso menos).



Juan Pedro Fisanotti: PyCamp 2010, día 2
Ayer no postee porque no tuve tiempo en todo el día, así que posteo ahora el resumen. Supongo que esta noche volveré a postear con el resumen de hoy
Lo más interesante de ayer fue el sprint de Django. Sprint = gente que se junta a programar, Django = framework para hacer desarrollo web usando Python, el mejor que probé hasta ahora. O sea, los que querían se juntaron para sobre todo corregir bugs en Django, para la versión nueva que va a salir dentro de unos días. Sinceramente fui más que nada para ver y aprender, porque pensaba que estaba a un nivel en el que yo no podía aportar mucho. Pero para mi sorpresa, terminamos corrigiendo un bug de Django juntos con Javi :). Mi granito de arena para Django, así devuelvo algo de todo lo que me está sirviendo.
Por la tarde me enganché en el momento de cocos2d (el framework para juegos que nació en un PyCamp anterior, que estamos usando para el juego que empezamos el sábado). Me enganché medio tarde, pero estuvo bueno, me ayudó a entenderlo mejor.
Finalmente, a la noche tuvimos el "fogón", pero sin fuego porque no se consiguió leña. Se empezó hablando de los temas más comunitarios, objetivos, realidad de Python en Argentina, etc. Se habló también de PyCon Atlanta 2010 y PyCon Argentina 2010. Y después se terminó hablando de política, sociedad, valores, ideologías, etc. Discusiones acaloradas pero muy interesantes. Algo parecido a los threads de PyAr, jajaja.
Hoy viene siendo interesante también, pero esta noche hago el resumen. Saludos!
Diego Sarmentero: PyQT: Aplicacion en SystemTray
La idea de este Post es explicar de forma simple, como realizar una aplicación en Python, utilizando PyQt, donde esta aplicación corra en el SystemTray (o pueda minimizarse al SystemTray) y tengamos un menu desplegable al presionar el icono de la aplicación en el SystemTray.
import sys
from PyQt4 import QtGui, QtCore
import sys
from PyQt4 import QtGui, QtCore
class PyTest(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
#cargar imagen para icono
pixmap = QtGui.QPixmap('pytv.png')
#setear el nombre de la ventana
self.setWindowTitle('PyTest!')
#colocar el icono cargado a la ventana
self.setWindowIcon(QtGui.QIcon(pixmap))
#creamos objeto Style para hacer uso de los iconos de Qt
self.style = self.style()
#MenuAhora que contamos con el Menu creado, vamos a conectar las distintas señales del Menu con operaciones que queremos que se realicen para responder a los eventos del usuario.
self.menu = QtGui.QMenu('PyTv')
#accion mostrar
show = self.menu.addAction(self.style.standardIcon
(QtGui.QStyle.SP_ArrowRight), 'Show Window')
#accion salir
exit = self.menu.addAction(self.style.standardIcon
(QtGui.QStyle.SP_TitleBarCloseButton), 'exit')
#SIGNAL->SLOT"QtCore.QObject.connect" nos permite conectar una señal de alguno de nuestros objetos de QtGui con una acción que queremos que se realice.
QtCore.QObject.connect(exit, QtCore.SIGNAL("triggered()"),
lambda: sys.exit())
QtCore.QObject.connect(self.menu, QtCore.SIGNAL("clicked()"),
lambda: self.menu.popup(QtGui.QCursor.pos()))
QtCore.QObject.connect(show, QtCore.SIGNAL("triggered()"),
self.showWindow)
#SystemTrayAhora procedemos a crear la función que se ejecuta al presionar la acción del Menu: "Show Window" (este método lo que hara es mostrar la ventana del programa cuando este evento es disparado)
self.tray = QtGui.QSystemTrayIcon(QtGui.QIcon(pixmap), self)
self.tray.setToolTip('PyTest')
self.tray.setVisible(True)
self.tray.setContextMenu(self.menu)
def showWindow(self):Ahora si queremos que al cerrar la ventana no se cierre la aplicación sino que se minimice al SystemTray, lo que tenemos que hacer es sobreescribir el método "closeEvent" de la clase QWidget de la que heredamos de la siguiente forma:
self.setVisible(True)
def closeEvent(self, event):
event.ignore()
self.hide()
def show(self):Debido a esto, cuando necesitemos mostrar la ventana, como en el caso de la acción "Show Window", deberemos invocar el metodo "setVisible(bool)" como se puede ver en el método mas arriba, ya que si llamaramos a "self.show()" no sucederia nada.
pass
app = QtGui.QApplication(sys.argv)Para descargar el ejemplo completo: pytest.zip
pytest = PyTest()
pytest.show()
sys.exit(app.exec_())
Diego Sarmentero: Los Piratas de las Aguas Negras
Javier Castrillo: “Saque eso de acá, compañero Lula!” (?)
Sí Cristina, a mí me da la misma sensación. Ni de lejos esos colores Macristas. Los mismos que defienden los de la mesa de engarque. Vade retro!
Diego Sarmentero: Cuento: Una Historia Realista
Anoche mientras leia un libro me colgue pensando como muchas veces los principales de la historia son extremadamente grosos, esta claro que tienen que tener algo que los haga resaltar, pero a veces parece ya demasiado y algunas cosas me causaban gracia, entonces me puse a pensar como sería una historia mas realista y escribi este cuento:
Diego Sarmentero: PyTv! 1.0


Juan Pedro Fisanotti: PyCamp 2010, día 1
No voy a hacer un post muy completo, eso lo dejo para cuando vuelva. Pero cada día voy a postear un breve resumen de como pasé/pasamos el día.
El viaje fue largo... salí de Rafaela el jueves a las 11 de la noche, y recién llegamos al lugar hoy a las 13, justo para la comida :).
El lugar muy bueno. Todavía no pude recorrer mucho, pero tiene hasta para hacer cayack (o como se escriba, jeje).
Está todo super organizado el tema de wifi, hay cables y antenas atadas con cinta por las paredes, jeje. Y por suerte no se necesitó usar mi router (hubiese sido para renegar nomás).
Lo primero que se hizo a la tarde fué presentar todos los proyectos, y anotar cuántos interesados había en cada uno. A partir de eso se organizó un cronograma, armado como para favorecer la participación el los proyectos más votados. Pero todos los proyectos quedaron en el cronograma, y cada uno elije en cuáles participar y cuáles no :).
De hoy, el proyecto en el que más participé y me interesó fue el de desarrollo de un juego de tipo "Tower Defense", usando la librería para juegos en Python COCOS2D. Es una librería que se había empezado a desarrollar en un PyCamp anterior, jeje.
La verdad que tenía miedo de no poder aportar mucho, pero en un rato nomás ya estaba a tono y codeando para modificar la lógica de disparo de las torres :D.
Y ahora, a la noche, algunos seguimos codeando, mientras otros están con juegos de mesa, o más relajados.
La gente hasta ahora genial!
Paul M. Dorr: Nuevo blog de fotos: Shooteando
Aquellos que seguían mi proyecto Una por día, habrán notado que he dejado de publicar fotos ahí hace casi un mes. La razón es simple: no tengo tiempo para sacar una foto por día y que quede copada.
Cuando me di cuenta de esto, surgieron dos posibilidades; bien podría haber seguido posteando una foto cualquiera por día, sin preocuparme por la calidad, o hacer un blog de fotos nuevo, donde publicar sólo las que más me gustaran.
Pero Shooteando va un poco más allá. La idea es que en este blog pueda publicar cualquier fotógrafo/a aficionado/a que quiera mostrar sus fotos, bien como parte constante del blog o como invitado, proyectando la creación de una comunidad donde compartir nuestro trabajo. Cualquiera que quiera formar parte de este proyecto puede enviar un mail a contacto@shooteando.com.ar.
Espero que les guste este nuevo blog y que se sumen más fotógrafos aficionados así lo hacemos copado =).
¡Espero sus comentarios! [ Se aceptan críticas constructivas =P ]
Juan Pedro Fisanotti: Apple vs HTC
Alguien vio el detalle de las pantentes que Apple esta usando para demandar a HTC? Es un desastre, tienen patentadas cosas que existen desde hace 20 años, que existían mucho antes de cualquier iPhone. No se cómo les da la cara para hacer algo así...
Una de las pantentes por ejemplo, es sobre tener objetos en memoria que se refieren a elementos en la pantalla. Cualquier programa con ventanas tiene eso! Existe desde hace décadas!!
Cualquiera que sabe de programación, viendo el detalle de las patentes aquí, puede darse cuenta del fraude que esto es. La mayoría de las pantentes son sobre cosas que no inventó Apple, y que existían desde hacía años antes que el iPhone...
Nunca me había gustado mucho Apple, pero después de esto, sinceramente la imagen que tenía de ellos cayó hasta lo más hondo. En lugar de competir haciendo mejores productos, están tratando de matar a la competencia con un fraude legal...
Mariano Guerra: CLQLGHCCQUA: cosas locas que la gente hace con cosas que uno hace
un tal mariano verdu hizo lo siguiente con repiola (un proyecto de un rato para programar pseudo assembler que hace dibujos)
set r0 150
set r1 50
put 0
set r0 225
set r1 200
put 0
set r0 75
set r1 200
put 0
rnd r0
mod r0 300
rnd r1
mod r1 300
: start
rnd r2
mod r2 3 #modificar por 3
eq r2 0 punto1
eq r2 1 punto2
eq r2 2 punto3
: punto1
add r0 150
div r0 2
add r1 50
div r1 2
put 0
jmp start
: punto2
add r0 225
div r0 2
add r1 200
div r1 2
put 0
jmp start
: punto3
add r0 75
div r0 2
add r1 200
div r1 2
put 0
jmp start

Marcos Vanetta: Decimal, la evolución de los floats
Desde Python 2.4 se nos ha unido un módulo con un nuevo tipo de datos: Decimal, que permite manejar las matemáticas de punto flotante con algunas ventajas respecto a float:
El módulo se centra en 3 conceptos: el número decimal, el contexto aritmético y las señales.
Número decimal: inmutable, tiene un signo, coeficientes y un exponente. No trunca ceros a la derecha y posee los valores especiales: infinito, – infinito y NaN (no es un número). También diferencia entre -0 y +0.
El contexto aritmético es el ambiente donde se especifica la precisión, las reglas de redondeo, los límites en los exponentes, banderas que indican los resultados de las operaciones y “trampas” que permiten que ciertas señales sean tratadas como excepciones. La opciones de redondeo incluyen: ROUND_CEILING, ROUND_DOWN, ROUND_FLOOR, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_UP, and ROUND_05UP.
Las señales son un conjunto de condiciones que surgen durante el proceso de cálculo. Y dependiendo de las necesidades de la aplicación, pueden ser ignoradas, consideradas información o tratadas como excepciones. Las señales en el módulo decimal son: Clamped, InvalidOperation, DivisionByZero, Inexact, Rounded, Subnormal, Overflow, and Underflow.
Para cada señal hay una flag (bandera) y una trap (trampa¿?). Cuando se encuentra una señal, la flag se pone a uno, luego si la habilitador de la trap está puesto en uno, entonces se envía una excepción (exception). Las flags quedan en uno, por lo que es necesario reiniciarlas antes de monitorear el cálculo.
Probando:
1 2 3 4 | from decimal import * getcontext() # Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[Overflow, DivisionByZero, InvalidOperation]) getcontext().prec = 7 # Set a new precision |
Los objetos decimal se instancian a partir de integers, string o tuplas. Para convertir una desde un float primero es recomendable convertilo primero a string.
Ya se, este post parece una traducción de [1] y medio que lo es, pero lo hice para obligarme a leer toda la documentación
También les dejo un tutorial más que interesante en [2].
El contra de decimal: No se pueden realizar operaciones entre números Decimal y floats. Antes los floats deben ser convertidos a string y luego a decimal. Bastante molesto cuando cargamos constantes, o algunos valores numéricos de una ecuación. Seguro hay alguna forma de hacer esto simple, pero todavía no la he encontrado ![]()
[1] http://docs.python.org/library/decimal.html
[2] http://broadcast.oreilly.com/2009/08/pymotw-decimal—fixed-and-flo.html
Mariano Draghi (cHagHi): Desarrollar software te hace mal
Extracto de una conversación real por IM en el trabajo, con alguien a quien no vamos a delatar TAN de frente ;)
(5:48:07 PM) cHagHi: te transfiero o queres el cash?
(5:48:29 PM) XXXXX: si tenés cash prefiero el cash, si estás corto de cash, transferime, 0 drama
(5:49:04 PM) XXXXX: pero si me das a elegir.... entre tú y... las estrellas... me quedo con ellas... porque tu.....
(5:49:21 PM) XXXXX: de pronto flash! La IDE del cosito azul!
(5:49:28 PM) XXXXX: zarazaaaa
(5:49:30 PM) XXXXX: toy limado
(5:49:37 PM) cHagHi: AH BUENO
Si desarrollás software, tené cuidado. A la larga, es perjudicial para la salud...
Roberto Alsina: Un par de horitas hackeando Kuatia...
Como he comentado hace un tiempito, de a ratos ando tratando de hacer un procesador de texto tipo "prueba de concepto". Por ahora está hsoteado en googlecode y se llama kuatia.
Obviamente no está ni cerca de ser útil para algo, pero... puede hacer listas itemizadas o numeradas anidadas.
Acá hay una captura del editor y de la salida PDF que produce vía reStructured Text:

No me parece que esté tan mal.
Administración y hosting cortesía de Net Managers SRL
Tema por Andrés Antista
Banner por Joaquín Sorianello