Python Argentina •  Sólo Python

lunes, 15 marzo

23:40

Juan Pedro Fisanotti: n900

un detalle que vale mas que mil palabras: el n900 trae de fabrica una consola de linux instalada :)

18:00

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.

08:14

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:

  • New TOC code (supports dots between title and page number)
  • New extension framework
  • New preprocessor extension
  • New vectorpdf extension
  • Support for nested stylesheets
  • New headerSeparator/footerSeparator stylesheet options
  • Foreground image support (useful for watermarks)
  • Support transparency (alpha channel) when specifying colors
  • Inkscape extension for much better SVG support
  • Ability to show total page count in header/footer
  • New RSON format for stylesheets (JSON superset)
  • Fixed Issue 267: Support :align: in figures
  • Fixed Issue 174 regression (Indented lines in line blocks)
  • Fixed Issue 276: Load stylesheets from strings
  • Fixed Issue 275: Extra space before lineblocks
  • Fixed Issue 262: Full support for Reportlab 2.4
  • Fixed Issue 264: Splitting error in some documents
  • Fixed Issue 261: Assert error with wordaxe
  • Fixed Issue 251: added support for rst2pdf extensions when using sphinx
  • Fixed Issue 256: ugly crash when using SVG images without SVG support
  • Fixed Issue 257: support aafigure when using sphinx/pdfbuilder
  • Initial support for graphviz extension in pdfbuilder
  • Fixed Issue 249: Images distorted when specifiying width and height
  • Fixed Issue 252: math directive conflicted with sphinx
  • Fixed Issue 224: Tables can be left/center/right aligned in the page.
  • Fixed Issue 243: Wrong spacing for second paragraphs in bullet lists.
  • Big refactoring of the code.
  • Support for Python 2.4
  • Fully reworked test suite, continuous integration site.
  • Optionally use SWFtools for PDF images
  • Fixed Issue 231 (Smarter TTF autoembed)
  • Fixed Issue 232 (HTML tags in title metadata)
  • Fixed Issue 247 (printing stylesheet)

domingo, 14 marzo

22:54

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:

Schedule de PyCamp 2010

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.

Familia en PyCamp

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:

Torneo de ping pong

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.

Trabajando

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í.

14:35

Diego Sarmentero: Monologo Rabinovich

Un Genio!!

14:05

Diego Sarmentero: Mejores Practicas de Java

Presentación mostrando algunas buenas practicas de Java

sábado, 13 marzo

19:45

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 [...]

17:24

Diego Sarmentero: Fundamentos de QuickDB

Esta es una Presentación de 6 Slides solamente que muestra las partes fundamentales de QuickDB:

08:19

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 [...]

viernes, 12 marzo

11:41

Diego Sarmentero: Code Bubble

Repensando el paradigma de interfaz de usuario de entornos de desarrollo integrado

Parece un muy buen IDE, hace rato pensaba que sería re practico tener un IDE que te permita plasmar todas tus ideas y analizar el código bien de forma gráfica en un solo lugar.

11:33

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

jueves, 11 marzo

23:57

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 [...]

20:22

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.

  
2 - Participación de todos y de todas en "The Most Biggest Gamest In The Worldst", un emprendimiento solidario, en el que trabajaremos programando durante una semana, un juego en Python, el lenguaje de programación peronista. No importa si el compañero/a  es experto o novato. Si sabe programar o no, mientras sepa tipear, habrá trabajo para todos. No quedará un solo trabajador sin poder participar. En esta semana de labor, crearemos el juego más grande que el peronismo unido pueda crear. La cita es desde el 28 de marzo del corriente en adelante. No importa si el grasita puede aportar cinco minutos o siete días, todos somos uno, un movimiento obrero en marcha y movilizado.


    La Confederación General del Trabajo, sabedora de la capacidad de organización de toda la masa obrera, augura un acontecimiento histórico, que pondrá, una vez más, el listón del trabajo por sobre el pobre, lamentable, patético, caradurezco papel de la oposición privativa, golpista y gorila. Por un gobierno nacional y popular, sin opresores, sin canallas, sin ajustes, sin  olvidos, sin perdones. Con coraje, con decisión, defendiendo los conceptos de pueblo y de patria. No el discurso de los que se creen dueños, sino el convencimiento del pueblo peronista.

    15:33

    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.

    12:09

    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:

    1. 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.

    2. 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:

    1. Fijáte en qué lenguakes programa. Si programa COBOL por gusto puede o no ser lo que necesitás.
    2. Open source == bonus points: quiere decir que no lo avergüenza su código, y hace que sus credenciales sean triviales de verificar.
    3. Si es el líder de un proyecto con múltiples colaboradores y lo hace bien, está a mitad de camino de ser un programador/manager, muchos bonus points!
    4. Proyectos con un historial de commits largo muestran responsabilidad y criterio.
    5. Listas de correo de desarrollo te permiten estimar su personalidad. ¿Es irritante? ¿Es sensible? ¿Es molesto?

    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.

    08:27

    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. Vates me invita a Facebook

    miércoles, 10 marzo

    12:50

    Mariano Guerra: si los profesores de fisica explicaran asi..

    recomiendo ver los 12

    12:23

    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.

    YouTube Downloader screenshot

    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.

    10:52

    Sebastian Bassi: Downgrade pago


    Downgrade pago
    Cargado originalmente por sbassi
    Cartel visto en una librería en el barrio de Congreso. Proponen pagar para hacer un downgrade. Como para no tenerle lástima a los usuarios de Windows.

    07:46

    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.



    Compañero Lucho, Presente Carajo!

    00:37

    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/

    martes, 09 marzo

    16:18

    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:

    • La cantidad de “hits”, visitas y páginas vistas.
    • Las URLs y dominios de origen de los links.
    • Términos de búsqueda.
    • Navegadores, sistemas operativos, países, resoluciones de pantalla.

    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.

    Vía WebResourcesDepot


    07:17

    Mariano Guerra: Bad Wildbad

    viaje cortito de domingo a un pueblo que ni conocía pero que esta bastante bueno, esta en la selva negra y es característico por sus aguas termales.



    viajamos con unos amigos desde pforzheim y pasamos unas horas paseando por el lugar.


    para allá vas a ver a U2 (?)

    lunes, 08 marzo

    21:32

    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 [...]

    18:55

    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!!

    16:20

    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/

    12:50

    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.


    domingo, 07 marzo

    20:49

    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 :)

    19:42

    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).

    Utilizamos QtWebKit para el manejo de la página web y el componente que renderiza la página, etc.

    Este simple navegador permite:
    • Navegar por las paginas de forma tradicional
    • Muestra una barra de progreso para poder ver como se va cargando la página
    • Posee boton para cargar la página anterior
    • Boton para ir a la siguiente página
    • Boton recargar la página actual
    • Boton para parar la carga de la página actual
    • Y en la barra de direcciones podemos escribir una url, o tambien escribir simplemente las palabras que estamos buscando y nos realiza automaticamente la busqueda en Google (al mejor estilo Chrome)
    Screenshots del Navegador:



    Para ver el código: PyBrowser.py
    Para descargarlo: Descarga

    18:33

    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!

    13:34

    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.


    Primero que nada necesitamos importar algunos modulos que seran usados por nuestra aplicación:
    import sys
    from PyQt4 import QtGui, QtCore
    • El modulo "sys", nos permite poner a correr la aplicación usando utilidades del sistema.
    • El modulo PyQt4, es el binding de Qt para Python y contiene todos los componentes graficos que podamos precisar, manejo de eventos de los componentes, etc. Principalmente se usara "QtGui" para crear instancias de los componentes gráficos, y "QtCore" para conectar señales de estos componentes con alguna operación.
    Una vez importados los modulos necesarios, procedemos a crear una clase que extienda de QWidget para construir la aplicación, y le daremos un icono y nombre a la ventana cuando se muestre:
    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()

    En la primer linea del método lo que debemos hacer es invocar el constructor de la clase Padre, luego creamos un objeto QPixmap pasandole la ruta del archivo imagen (en este caso es una ruta relativa en el mismo directorio de ejecución), y luego le damos el nombre e icono a la ventana.

    Ahora para crear un Menu y agregarle Acciones (cada elemento del menu) hay diversas formas, podemos crear un objeto accion y luego agregarlo al menu pasandole ese objeto, tambien podemos llamar al método "addAction" de menu pero esta vez pasarle un String y nos devolvera una instancia de un objeto QAction con ese nombre ya inicializado, y diversas formas mas.
    En este caso vamos a usar la opción del String que es más fácil y directa:
    #Menu
    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')
    Ahora 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.
    #SIGNAL->SLOT
    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)
    "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.
    La conexión SIGNAL->SLOT es una forma de decir que con determinada señal se va a ejecutar determinado fragmento de código. En Python a diferencia de C++ no hace falta que implementemos un método SLOT, simplemente podemos pasarle el nombre del método que deseamos que se ejecute como se ve en el tercer caso donde se conecta la señal "triggered()" del objeto QAction "show" con el método "showWindow(self)" de la actual Clase.
    En cambio, las otras 2 señales se prentenden conectar a métodos que o no pertenecen a la Clase actual, o deben recibir algún parametro al ser invocado, para estos casos podemos hacer uso de "lambda" en Python y llamar a cualquier función que deseemos.
    En el caso del menu, es necesario que sea definido como una variable de la Clase, porque sino es posible que la señal asociada al menu deje de responder en algún momento.

    Ahora vamos a crear el icono de SystemTray, hacerlo visible en el SystemTray y agregarle el Menu que ya creamos para que este se despliegue al presionar el boton derecho del mouse sobre el icono:
    #SystemTray
    self.tray = QtGui.QSystemTrayIcon(QtGui.QIcon(pixmap), self)
    self.tray.setToolTip('PyTest')
    self.tray.setVisible(True)
    self.tray.setContextMenu(self.menu)
    Ahora 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)
        def showWindow(self):
    self.setVisible(True)
    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:
        def closeEvent(self, event):
    event.ignore()
    self.hide()
    • "event.ignore()" lo que hace es ignorar la señal de cierre de la aplicación que esta por ejecutarse.
    • "self.hide()" oculta la ventana pero mantiene corriendo la aplicación
    Ahora supongamos que queremos que al abrirse la aplicación no se muestre ninguna ventana, sino que se inicie directamente solo con el icono en el SystemTray, para ello debemos sobreescribir el método "show" de la Clase padre QWidget:
        def show(self):
    pass
    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.

    Y por último, hacer que nuestra aplicación pueda ser ejecutable:
    app = QtGui.QApplication(sys.argv)
    pytest = PyTest()
    pytest.show()

    sys.exit(app.exec_())
    Para descargar el ejemplo completo: pytest.zip

    01:04

    Diego Sarmentero: Los Piratas de las Aguas Negras


    Esto si que se llama "nostalgia"!! jeje
    De la nada me acorde de este dibujito que veia cuando era chico: "Los Piratas de las Aguas Negras"
    Y me dieron ganas de volverlo a ver... probablemente pase como con todas las cosas viejas, donde el recuerdo difiere muchisimoooooo de lo que es en realidad... pero bueno, hay que sacarse las ganas.

    sábado, 06 marzo

    22:26

    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!

    15:38

    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:


    viernes, 05 marzo

    21:48

    Diego Sarmentero: PyTv! 1.0


    PyTv! Terminado!

    Despues de colgarme un par de días programando, termine lo que considero una versión estable de PyTv.
    PyTv es un programa bastante util para aquellos que sean tan fanaticos de las series de televisión como yo. Con PyTv lo unico que hacemos es decirle el nombre de la serie que nos interesa (por ejemplo: "the big bang theory"), y listo!
    El programa se encargara de buscar en Google la lista de episodios de esa serie, de los resultados obtenidos abrira la pagina correspondiente de Wikipedia, comprobara cual es la ultima temporada disponible, y bajara toda la información de numero de temporada y episodio, nombre del episodio y fecha de emisión del mismo.
    Se guarda localmente esa información para no tener que hacer uso de internet cada vez que el programa se abre, y PyTv se encargara de avisarnos cada vez que se estrene un nuevo capitulo de alguna de las series que seguimos.

    SystemTray

    Menu

    Pantalla Principal

    Notificaciones


    Preferencias/Configuración

    Calendario

    Detalle de Calendario

    Información de la Serie

    Tambien esta la opción de abrir un pequeño calendario y presionando en alguno de los días nos mostrara la información de los episodios que sean estrenado ese día, como asi tambien, se puede elegir ese episodio y consultar la información referente a la serie en IMDB presionando un boton o ver el trailer del episodio en YouTube.
    Si una Serie terminara su temporada, PyTv comprobaria cuando comienza la nueva temporada de dicha serie y al estar disponible, descargaria la información de la misma, sin tener que preocuparnos por andar pendiente de cuando empiezan los nuevos episodios, etc.

    Código: pytv-1.0.zip
    Instaladores DEB: i386, amd64

    21:34

    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!


    12:16

    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 ]


    jueves, 04 marzo

    15:45

    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...

    13:21

    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


    pueden probarlo copypasteando el codigo ya sea en repiola desktop o en repiola web (que fue hecho por dos usuarios de repiola :D)

    no creo que lo quieras tipear en tu celular, probablemente se derrita :D

    para los impacientes, dibuja esto:


    parece que estos chicos se emocionaron con dibujar cosas y j0hn se mando unas cuantas mas, esta vez con canvas y javascript

    mandelbrot
    Sierpinski triangle

    miércoles, 03 marzo

    22:15

    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:

  1. Contiene números como 1.1 que no tienen representación binaria
  2. Más exacto: 0.1 + 0.1 + 0.1 – 0.3 = 0 pero cero en serio! y no 5.5511151231257827e-017 como en los floats
  3. Tiene precisión regulable (28 lugares por defecto), pero extensible.
  4. 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

    17:50

    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...

     


    16:28

    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:

    editando2

    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

    Grazr OPML - FOAF - RSS - Log

    Blogs

    Anthony Lenton
    Leito Monk
    Gustavo Carmona
    Manuel Muradás
    Gonzalo Sainz Trápaga
    Marcos Vanetta
    Nicolás César
    Alberto Paparelli
    Santiago Peresón (Yaco)
    Margarita Manterola
    Javier Castrillo
    Santiago Bruno
    Mariano Draghi (cHagHi)
    Paul M. Dorr
    Esteban Ordano
    Evita
    Alejandro Santos
    Manuel Kaufmann (Humitos)
    Joaquin Sorianello
    Angel Freire (cuerty)
    Marcelo Fernández
    Roberto Alsina
    Pablo Benjamín Arroyo
    Juan Pedro Fisanotti
    Gabriel Patiño
    Guillermo Heizenreder
    Marcos Dione
    John Lenton
    José C. Massón
    Ezequiel Gutesman
    Mauro Lizaur
    Mariano Guerra
    Matías E. Gieco
    Nicolás Miyasato
    Martín Gaitán
    Pablo Alejandro Costesich
    Mario Zorz
    PyAr en la OLPC
    Carlos Joel Delgado Pizarro
    Mariano Reingart
    Ramiro Morales
    Roberto Allende
    San Cayetano
    Alejandro Alvarez
    Martín Cerdeira
    Diego Sarmentero
    Walter Alini
    Sebastian Bassi
    César Portela
    Nicolás Echániz
    Fabián Gallina
    Juanjo Conti
    Héctor Sánchez (Karucha)
    Patricio Molina
    Andrés Gattinoni
    Facundo Batista
    Francisco Malbrán