A Django site.
Junio 10, 2010
» Paseo en barco – Estocolmo

Al final del primer día de SWITS en Estocolmo tuvimos un evento para socializar: cena y paseo en un barco. Mientras navegábamos pregunté si estabamos en un río o en un lago. Me sonrieron y me contestaron que era el océano (*). Weird. Estocolmo es una ciudad de islas unidas por puentes.

El barco tenía un bar, camareras y hasta música en vivo (en un momento se armó la pachanga). Navegamos hasta las 11 de la noche y aún no se había terminado de ocultar el sol. Increible. Aproveché y salí a la cubierta a filmar un video:

La música de fondo es The Man de John Dankworth

(*) creo que recordaba mal la conversación. Me dijeron que era el mar y que si seguíamos navegando podíamos salir al océano.

Junio 9, 2010
» Dormir en una celda – Langholmen Hotel – Estocolmo

Luego de mi llegada retrasada a Gotemburgo a las 12:30 de la noche, tomé un taxi y llegué al hotel dónde voy a estar por varios días. Entre pito y flauta terminé acostándome a las 3 de la mañana para a las 5:30 salir a la estación de trenes para viajar a Estocolmo.

El objetivo de la visita a esta ciudad fue participar de un evento de dos días llamado SWITS en el que se reúnen estudiantes de PhD de Suecia interesados en seguridad informática. Voy a hacer un post separado sobre esto.

El evento se desarrolló en el hotel Langholmen, la antigua prisión de Estocolmo. Una de sus características distintivas es que las habitaciones fueron hechas en las celdas de los reclusos:

La música de fondo es Prison Break de Irving Joseph.

Un atractivo turístico del lugar es disfrazarse de preso y ser llevado por todas las instalaciones guiado por un policía para finalmente declarar ante un juez:

Se divierten barato :)

» El Sahara desde el cielo

Como ya le conté a casi todos, tuvimos un inconveniente en el viaje de ida, entre Bs As y Alemania que retreasó 5 horas el vuelo. Eso hizo que, por supuesto, pierda mi conección a Gotemburgo, pero por fortuna hubo una tormenta en Alemania que retrasó otros tantos viajes y luego de una gran carrera por el aeropuerto terminé tomando uno que me llegó a la medianoche.

Durante el viaje trasatlántico aproveché para filmar el desierto del Sahara desde una de las ventanillas. Es enorme! viajabamos a 1000 km/h y tardamos más de una hora en dejar de verlo. Son 3 videos:

La música de fondo es de Bach.


Criado Indomable
Sebastian D. Criado
Criado Indomable trata sobre »
» criadoindomable

Soy de esas personas a las que los días de lluvia le encantan, muy capaz de poner un pedazo de chapa en el patio para que la misma se sienta más fuerte.

El sonido de la lluvia es muy relajante y puede ser muy útil en los días que uno esta o muy nervioso o quiere dormir bien.

Desde hace tiempo busco algunos fragmentos de ruido a lluvia y demás para escuchar, pero hoy me encontré con un sitio muy interesante en el cual uno puede formar su propio sonido relajante. El sitio se llama Sound Sleeping y mediante un cómodo set de perillas en el cual se pueden incorporar sonidos,  variar su volumen y balance, permite crear el sonido relajante que se quiera y escucharlo el tiempo que quiera.

Prueben un rato de relajación mientras trabajan. Les recomiendo que usen auriculares o un muy buen sistema de sonido.


Junio 8, 2010

Boris Quiroz
cereal_bars
wreeeeoooowww trata sobre »
» Asiginar VCPU a una DomU.

Derrepente al crear una DomU nos quedamos cortos de VCPU. Quizás al momento de instalar la máquina necesitabamos pocos recuersos (en este caso, cpu) pero con el tiempo y con el cambio de requerimientos nos dimos cuenta que necesitabamos más capacidad de procesamiento. Qué hacer? Agregar más espacio en disco, memoria y CPU.

El comando común sería:

[root@bitch ~]# xe vm-param-set uuid=3071a497-fcb8-1e63-1322-5205ca016cfb VCPUs-at-startup=4
The value given is invalid
field: VCPU values must satisfy: 0 < VCPUs_at_startup ≤ VCPUs_max
value: 4

El comando anterior dice que a la DomU con el uuid 3071a497-fcb8-1e63-1322-5205ca016cfb le agreguemos 4 VCPUs al inicio. El error adjunto nos dice que el numero de VCPUs que queremos agregar (4) no es válido, ya que debemos ingresar un numero mayor a 0 y menor o igual que el número máximo de VCPUs.

Para solucionar esto debemos aumentar el número máximo de VCPUs que la DomU puede usar. Esto lo hacemos con el siguiente comando:

[root@bitch ~]# xe vm-param-set uuid=3071a497-fcb8-1e63-1322-5205ca016cfb VCPUs-max=8

Una vez hecho eso podemos aumentar el número de VCPUs que nuestra DomU usará al inicio (el numero *siempre* debe ser mayor a 0 (obvio) y menor o igual que el número máximo de VCPUs (obvio tambien).

Junio 4, 2010
» Experimento Cirujano-Copiloto

(Note: There's an English version of this article here ) Los últimos meses en el equipo Ubuntu One Foundations, en Canonical, estuvimos experimentando con la metodología cirujano-copiloto. ¿Qué es eso de cirujano-copiloto? El concepto viene de un libro de los setentas, The Mythical Man Month , donde Frederick Brooks describe un provocativo esquema (propuesto primero por Harlan Mills) para un equipo de desarrollo de diez personas. En el libro, Brooks intenta manejar el hecho de que proyectos grandes de software no pueden ser escritos por una persona, o por un equipo chico, por lo que propone partir el proyecto en partes más pequeñas, prestando especial atención a la optimización de las comunicaciones dentro y entre los equipos. En el libro, la organización propuesta es poner a un desarrollador Cirujano rodeado de un gran equipo de ayudantes. Hoy en día el entorno de desarrollo es otro; tenemos herramientas como lenguajes de alto nivel, y repositorios de software, y versionado de código, etc. Seguramente no necesitamos a alguien para que nos clasifique las tarjetas perforadas, :) Sin embargo, este es un concepto que podemos usar hoy, pero achicando el equipo a sólo dos personas: el cirujano, y el copiloto. Traducido del libro... (el copiloto) es el alter ego del cirujano, capaz de hacer cualquier parte del trabajo, pero menos experimentado. Su función principal es compartir la etapa de diseño, pensando y discutiendo, y evaluando. El cirujano intenta ideas con él, pero no está atado a sus recomendaciones. El copiloto frecuentemente representa a su equipo en discusiones con otros equipos sobre funcionalidades e interfaces. Conoce todo el código íntimamente. Investiga estrategias alternativas de diseño. Nuestra experiencia Este experimento fue valioso para nosotros, ya que generó un equipo de dos que al ejecutar el experimento probó ser más eficiente que las dos personas por separado. Alguno de los casos donde esto fue evidente durante el experimento fue que al discutir problemas o nuevas características, el cirujano (teniendo un conocimiento más profundo del sistema) podía prever fácilmente situaciones, cómo podría diseñarse la característica, resolverse el problema, etc. Entonces el cirujano discutía eso con el copiloto, necesitando explicar el razonamiento lo suficiente como para que se entienda (pero a alguien con experiencia en el sistema), lo que provocaba algunos buenos efectos secundarios: Tener que poner el razonamiento en palabras lo hace más claro tanto para el cirujano como para el copiloto; sin embargo esto no es un gasto notable, ya que ambos conocen el sistema, lo que hace más sencillo la transferencia de conocimientos. Se descubren temprano posibles fallas en el razonamiento, y también se pueden incorporar en este momento ideas frescas del copiloto. Luego que el copiloto entendió la idea, él o ella pueden ayudar al cirujano a implementarla (o directamente hacerlo todo, liberando al cirujano para otras tareas). Quiero dejar en claro que esto no implica que el copiloto dependa siempre del cirujano para el trabajo diario. Normalmente el copiloto trabaja creativamente y trae nuevas ideas y conocimiento al equipo; sin embargo discutir esta nueva información con el cirujano, de manera de integrarla mejor al sistema actual, hace más eficientes estas contribuciones. Esto está muy relacionado con otro beneficio interesante del dúo dinámico cirujano/copiloto: entrenamiento. Cuando el copiloto es nuevo al equipo y al sistema, tener a alguien que sabe exactamente los avances que está haciendo al ganar velocidad, revisando y guiando el trabajo, hace más fácil y disfrutable esta etapa inicial (lo que se traduce a una mayor eficiencia y mejores resultados). Más aún, este equipo altamente acoplado es especialmente bueno para atacar problemas complejos. Esto se debe principalmente a tener cuatro ojos en lugar de dos, pero con la ventaja que ambas personas tienen baja impedancia entre ellas. Sin embargo, ser explícitos sobre quien es responsable de tomar las decisiones es algo muy bueno en la interacción entre el equipo y otros jugadores externos (jefes, líderes técnicos, usuarios): queda claro que el cirujano es responsable por las  decisiones tomadas, de una manera u otra. Una ventaja adicional de formar el par cirujano/copiloto es que si el equipo prueba ser exitoso (lo cual depende de muchos otros factores más allá de esta configuración en particular, somos mayormente humanos) se puede mantener a futuro, sabiendo que esas dos personas trabajando juntas son buenas para determinadas tareas, y usarse de esa manera (lo cual concuerda con el concepto de desarrollo ágil de asignar trabajo a equipos, no personas a tareas). Un caso real Quiero explicar uno de los casos donde trabajamos como cirujano/copiloto durante estos meses, sólo como una muestra que quizás ayude a entender mejor los conceptos anteriores. Este fue uno de los problemas más grandes encontrados en el Ubuntu One Syncdaemon luego de la liberación de Karmic, generando de los usuarios un quintillón de reportes de bugs: el States de Syncdaemon. Era un pedazo de código que arrancó chico y creció orgánicamente mientras aprendíamos qué debía hacer para manejar todas las complejidades de Syncdaemon. Al final, era un módulo grande, construido de una manera que no permitía realmente ser probado, y difícil de leer y entender, que generó un montón de problemas muy visibles (normalmente, hacía que Syncdaemon se trabara y no trabajara más hasta que se lo reiniciase). El objetivo para el equipo era simplemente "arreglarlo". Sin embargo, un análisis simple probó que se necesitaba reescribir desde cero, y el reemplazo debía estar literalmente libre de problemas (no podíamos darnos el lujo de perder dos meses encontrando detalles en el nuevo código estando tan cerca de Lucid). Ejecutamos el proceso de "arreglar States" en varios pasos bien definidos: Análisis: Acá estudiamos el código anterior, encontrando los casos explícitos e implícitos que manejaba. Definimos qué necesitábamos cambiar, y qué necesitábamos escribir de nuevo (notablemente, encontramos acá algo inesperado: debíamos rehacer el cómo Syncdaemon manejaba las conexiones de red a través de Twisted). En esta etapa, el tener un equipo altamente acoplado funcionó muy, muy bien. La misma tarea no podría haber sido ejecutada tan eficientemente si la hacía una sola persona, o si un equipo se involucraba en profundas discusiones. Debo mencionar que este trabajo se hizo cara a cara durante un sprint (difícilmente se podría haber hecho remotamente y tener el mismo resultado). (click para ver la imagen en una resolución entendible) Diseño: También durante el sprint diseñamos un nuevo modelo para la bestia, tratamos de simplificar y generalizarlo, y discutimos todo esto con los autor(es) anterior(es) del módulo. El tener un cirujano con más experiencia en esta fase, mezclado con las nuevas ideas del copiloto, provocaron un buen diseño, simple y poderoso. Una sola persona o dos trabajando por separado no podrían haber diseñado el nuevo States de forma tan limpia como sucedió en este caso. Implementación: esto se hizo completamente en paralelo y remotamente, en las semanas siguientes al sprint. Sin embargo también incluyeron largas conversaciones por teléfono donde se discutieron detalles específicos o nuevas ideas. En esta etapa también notamos que el equipo tenía el tamaño ideal: un sólo par de ojos seguramente no habrían visto los detalles más complicados, y más gente no podría haber trabajado en paralelo en la misma implementación como lo hicieron dos personas. (click para descargar los tres .SVG actualizados del diseño) Puesta en funcionamiento: realmente no fue un paso, ya que no hubo ningún problema... fue sólo un tema de hacer el commit a trunk, y hacer un seguimiento los próximos días. El resultado de esta experiencia fue muy satisfactorio: reemplazamos algo que era muy doloroso para usuarios y desarrolladores en favor de algo que fue invisible luego de la instalación: funcionó tan bien que nadie lo notó más. Conclusiones Estoy muy contento con el resultado de este experimento, y con los objetivos que logramos mientras lo hacíamos. El trabajo producido durante esos meses fue muy bueno, considerando especialmente que venía Lucid. Sin embargo, es mucho más valioso encontrar dos personas que trabajen tan bien juntos, incluso si no hay una diferencia de experiencia entre ellos para que califique dentro de la estructura cirujano/copiloto. No siempre se tiene que un equipo de dos desarrolladores produce más que los dos desarrolladores por separado... entonces cuando se encuentra, es buena idea mantenerlo. Recomiendo hacer experimentos similares en Canonical, especialmente como una oportunidad de aprendizaje para personas que recién entraron en la compañía, o al hacer rotaciones entre equipos. En estos casos, el tener un entrenador que tiene más experiencia al menos en lo que está haciendo el departamento, ayuda mucho al desarrollador nuevo, y al final mejora el rendimiento de todo el equipo.

» Tips de svn y bash

Descomprimir masivamente

Descomprimir masivamente en directorio sites/all/modules cuando me baje los .tar.gz de los modulos usando wget

for i in `ls *.tar.gz`;do tar zxvf $i;done

Script agregar archivos

for i in $(svn st | grep ? | awk "{print $2}");do svn add $i;done

Junio 1, 2010
» Cuál es el sistema operativo más usado

A la pregunta sobre cuál es el sistema operativo más usado, hace ya tiempo que vengo respondiendo “depende para qué“. Solemos pensar que las computadoras son aquellas que colocamos sobre los escritorios y con las cuales accedemos a Internet, pero qué pasa con las computadoras empotradas en equipos (aparatos de audio, consolas de juegos, asensores, automatismos y muchos etcétera). Si consideramos el universo completo de CPU (para manejar un concepto de computadora básico), ya comienzan mis dudas a la hora de decir cuál es el sistema operativo más usado.

Yo sabía por el sitio Top500, que las computadoras más grandes del mundo utilizan Linux como sistema operativo. Top500 es un sitio que mantiene la lista de las 500 computadoras con mayor poder de cálculo que se han construído, de ellas, unas 405 (81%) están corriendo Linux como sistema operativo (seguidas de unas 40 más que corren SuSE, Redhat, Centos y que este sitio los considera distinto sistema operativo).

Ahora la gente de BBC News acaban de publicar unas gráficas que muestran esto, y es realmente impactante verlo así presentado:

Supercomputing superpowers

Las gráficas fueron producidas utilizando el software Prefuse Flare, desarrollado por la University of California Berkeley.


Boris Quiroz
cereal_bars
wreeeeoooowww trata sobre »
» Ahora solo queda uno por eliminar&#8230;

Mañana (técnicamente en un rato), sabremos quién será el último eliminado de la lista de 23 jugadores que representarán a Chile en el mundial de Sudafrica.

Los candidatos para verlo por TV son varios… Principalmente Fierro, Cereceda y Estrada. Pero a estos, yo no dejaría fuera a Tello e Ismael Fuentes.

Si escucharon bien Bielsa después del segundo partido, este dijo que ningun jugador rendia exámen, y que el no decide en base a un partido. Con esto en mente, el que claramente deberia quedarse abajo es Gonzalo Fierro. Por qué? Simple: Le pesa la camiseta Roja…

Eso. Anótelo por ahí. Yo ya dije que el que se queda abajo es Fierro…

Mayo 31, 2010
» Más videos de Felipe

Venimos atrasados con el procesamiento de fotos, pero acá ya tenemos los videos del cuarto y quinto mes de Felipe (click en la foto para verlos en YouTube).   Si quieren, pueden bajarlos de acá y acá con más resolución.

» Opera más rápido que la papa hervida

El video de Google sobre las pruebas de velocidad de Chrome demuestra que éste es más rápido que la papa frita:

pero la respuesta de Opera para su navegador no se ha hecho esperar y en este video se prueba claramente que es más rápido que la papa hervida:

ahora el reto queda para Firefox, tal vez demostrando que es más rápido que el puré de papa ó alguna otra receta en base a papa.

Fuente: 7neuronas

» VENTA de articulos de bazaar / restaurant

Los interesados, comunicarse conmigo asi los pongo en contacto con el vendedor.

Platinas  de acero inox. 2 Grandes – 4 medianas – 6 chicas

Azucareras de acero inox. 2

Queseras de acero inox. 2

Bandejas de Mozo 2

Fuente de horno 1

Paelleras de acero inox 4

Hieleras de acero inox. 4

Tubos para salsa de acero inox. 4

Fuentes para picadas en acero inox grandes 6

Fuentes para picadas medianas 6

Triolet en acero inox 5

Copas de Martini 8

Copas de Vino 16

Vasos de gaseosa 14

Vasos Whisky 12

Vasos trago largo 14

Paneras de mimbre redondas 6

Cucharas soperas 20

Cucharitas para té y café 27

Tenedores 30

Tenedores de postre 14

Cucharas de postre 8

Cuchillos 49 (tramontina y de acero)

Sartén grande 1

Sartén chica 1

Panchera en acero inox con calienta pan 1

Saleros y pimenteros 13

Platos de postre de vidrio 19

Platos porcelana hondos 10

Platos porcelana playos 18

Platos playos de vidrio 8

Tazas de café con plato 12

Tazas de té con plato 10

Jarritos de café 10

Bols de vidrio 6

Fuente enlozada grande 1

Aceiteras y vinagreras 5

Jarra de vidrio 1

Tablas de madera diferentes tamaño 4

Cacerola grande 1

Varios Tupper de diferentes tamaño

Ceniceros plásticos

Servilleteros plásticos (servipress) 10

Palo de amasar

Ensaladeras plásticas 4

Moldes de aluminio grandes 2

Pinza para parrilla 1

Maderas para pizza grandes 3

Moldes para flan individuales 24

Moldes pizzeros grandes (curados) 10

Moldes pizzeros chicos (curados) 5

Si algo ya no esta en stock… es porque me lo compre yo :P

Mayo 30, 2010
» Nueva cumbre de blogueros

Este lunes tendremos una nueva entrevista colectiva de blogueros latinoamericanos al Secretario de Estado de Iberoamérica del Gobierno de España, discutiendo y profundizando en las conclusiones de la Cumbre EuroLatinoamericana.

Mañana lunes 31 de mayo, el Secretario se reunirá nuevamente con los blogueros para trasladarles los principales acuerdos y vías de trabajo a desarrollar a partir de este encuentro. Pero lo más importante es que por segunda vez se realizará una entrevista en vivo que será retransmitida y transcrita a texto plano en tiempo real.

Este lunes tendremos una nueva entrevista colectiva de blogueros latinoamericanos al Secretario de Estado de Iberoamérica del Gobierno de España, discutiendo y profundizando en las conclusiones de la Cumbre EuroLatinoamericana.

Se podrán enviar preguntas en directo, a través de los comentarios en:

http://lasindias.coop/cumbre-eurolatinoamericana-debatiendo-conclusiones/

En esa entrada también se irá transcribiendo a texto plano toda la entrevista. El video se podrá ver aquí:

En directo con las respuestas para toda Iberoamérica el lunes, en los siguientes horarios:

* México D.F: 10 horas
* Tegucigalpa, San Salvador, Guatemala, Managua, San José: 9 horas
* Santo Domingo, La Habana: 11 horas
* Bogotá, Quito, Lima: 10 horas
* La Paz, Santiago de Chile: 11 horas
* Buenos Aires, Montevideo: 12 horas
* Venezuela: 10:30 horas

Mayo 29, 2010
» Expand Short URL

40587Ahora están de moda las URL cortas y hasta Google tiene un servicio para acortar las URL y poder escribir con pocas letras un enlace largo. Pero, a dónde llevan esas URL cortas?  Cómo podemos saber, antes de dar click, a donde llegaremos? Qué pasa si el destino es una página no deseada? O es una página que esconde phisning?

Una solución que encontré es Expand Short URL, un complemento para Firefox el cuál, una vez instalado, permite hacer click derecho sobre un enlace y concer la URL correcta que está detras de la URL accortada. También es posible copiar la URL de destino para pegarla en una nueva solapa, antes de dar enter para navegar por ella.

Me resultó otra extensión muy interesante para contrarrestar, aunque sea en algo, a los efectos de los inescrupulosos que esconden sus URL perjudiciales detrás de URL cortas.

» De libros electrónicos, agua seca y otras quimeras

Nomen est omen Rápido: antes de seguir leyendo, pensá en un libro. Lo más probable es que ante ese pedido, hayas pensado en algún título, algo estilo “Cien Años de Soledad”, “El Capital” o incluso “Manual Práctico de Electricidad del Automotor”. Estas, y muchas otras, son respuestas tan razonables como incorrectas: esos no son libros sino, respectivamente, [...]

» Lo que P2P da, DRM te lo quita

Una versión de este artículo fue publicada en el libro“Libres de Monopolios sobre el conocimiento y la vida” de Fundación Vía Libre Peer-To-Peer El costo de publicar y distribuir obras ha sido, durante toda la historia de nuestra especie, uno de los obstáculos más formidables a la divulgación de la cultura y el conocimiento. Tradicionalmente, publicar una [...]

Mayo 26, 2010
» Haciendo pruebas

(Note: There's an English version of this report here ) Mandé este mail originalmente a la lista interna de Canonical donde discutimos temas técnicos: "Testing" (o testeo , o realizar pruebas ) es un terreno resbaladizo en el desarrollo de software. Es como dejar de fumar: todo el mundo sabe que es algo bueno, pero pocos tienden naturalmente a hacerlo. Además tiene facetas muy diferentes: pruebas de unidad, pruebas de integración, interfaces gráficas. Incluso en las interfaces gráficas, no es lo mismo hacer pruebas en PyGTK, o en interfaces web. Por ejemplo, yo estoy convencido de que debemos hacer pruebas cuando desarrollamos software, que es una buena manera de evitar (o minimizar) deuda técnica, y que no sólo te mejora la calidad del producto, sino que tiene características más difíciles de medir (como innovación: nadie va a tocar un proyecto grande que no tiene pruebas sólo para probar algo nuevo). Pero, todavía tengo algunas dudas, y mucho que aprender en este campo. ¿Es valioso en todos los casos? ¿Cual es el balance correcto entre pruebas de unidad y pruebas de integración? ¿Y qué hacemos con las interfaces gráficas? Y un tópico probablemente controversial: yo sé que tenemos que hacer pruebas, pero gente en mi equipo no, ¡ayúdenme a convencerlos! En cualquier caso, es algo para hablar. Podemos arrancar una charla acá, y luego agendar un par de reuniones para cubrir algunos temas particulares, una vez que sepamos cuales, o quizás encontrarnos en el UDS para discutirlo personalmente. Estoy seguro que dentro de Canonical "Testing" se usa en todos lados, y podemos aprender unos de otros. Ideas? Preocupaciones? Experiencias? Esto generó un gran árbol de discusiones, con un montón de puntos en los que todos estaban de acuerdo, y un montón que fueron un poco controvertidos. Entonces, luego de que el polvo se asentó, escribí un resumen de toda la conversación: Esto es una especie de resumen con conclusiones y comentarios del hilo sobre Testing de los últimos días. Es mejor mostrar ventajas sobre algo a la gente que forzarlos a usarlo. Hay un par de situaciones "fáciles de ver" donde las pruebas de unidad son claramente algo bueno. Jamu K. agregó algunos puntos a lo que yo mencioné en el correo original: Te dicen cuando cometiste un error y rompiste algo. Cuanto antes detectes el error será más barato arreglarlo. Si un problema entra a un sistema en producción y afecta a los clientes, costará mucho en términos de satisfacción del usuario y tiempo para arreglarlo. Son material educativo que ayuda un principiante (o alguien experimentado) a entender la lógica en una manera que no es posible simplemente al leer el código mismo. Esto es especialmente verdad cuando las pruebas ejercitan condiciones de error que no se desprenden de forma obvia del código. Te ayudan a mantener una velocidad consistente. Es mucho menos probable que encuentres un problema que te haga perder dos días revisando y corrigiendo cuanto tenés buenas pruebas. Te permiten optimizar la implementación con la confianza de que no rompiste ninguna API . "Primero hacelo bien, luego hacelo rápido" es bastante duro, y lo es aún más sin buenas pruebas. Por definición, hacen que tu implementación se pueda probar. Te ayudan a entender cuando amontonaste demasiados detalles y te llevan a un mejor diseño. Algunas ventajas son más conceptuales: muy claras a la gente que ya probó pruebas de unidad, pero no tan fáciles de ver para gente que realmente nunca lo hizo. Un ejemplo de esto es que diseñar para ser probado frecuentemente lleva a una mejor API (sin embargo, algunas veces lleva a una API más fea, porque estás forzado a agregar parámetros que sólo son útiles en un entorno de pruebas; como en todo, el equilibrio es el mejor de los consejos). Una buena frase del hilo que me gustó como razón para hacer pruebas: El código que estás escribiendo será usado por años. Será actualizado al cambiar los requerimientos. Y de vez en cuando, alguien que no es familiar al código como lo estás vos ahora estará en apuros para corregir un problema en él. ¿Qué previsión razonable podés hacer para ayudar a esa persona? Pensalo un minuto. Acordate, esa persona podrías ser vos. ¿Y qué desventajas hay? La gente a veces se queja de que si hacen pruebas, tardan más en escribir código. Sin embargo, lo que sucede es que las pruebas no cambian realmente el total de tiempo que toma desarrollar software, sólo cambia el cuando se paga ese costo. Sí, para software con pruebas, el beta inicial es mucho más completo y mejor probado, pero aparece más tarde en el ciclo, lo que puede ser un problema si no podés entregar ese código al usuario. En todo el hilo, sólo se mencionó una desventaja real de TDD : puede pasar a veces que en lugar de realmente pensar profundamente un detalle del código, sólo lo vas toqueteando hasta que pasás las pruebas: esto puede llevar a código que esté menos pensado que lo que debería, ya que programás contra una luz verde, no contra un modelo mental limpio. Hay que aclarar que no hay nada malo en no hacer TDD, pero que entrega resultados muy distintos con respecto a hacer las pruebas como corresponde, y se podría decir que al no hacer TDD los resultados son peores. ¿Está bien tener malos resultados? En algunos entornos, apuesto a que sí; sin embargo en Canonical queremos entregar lo mejor. Jamu lo dijo bien claro: si estás escribiendo código de producción sin hacer pruebas, entonces no estás haciendo tu trabajo correctamente. Mark S. lo reforzó con: Deberíamos requerir pruebas para el código que somos responsables, y las excepciones que haya (seguro las habrán) necesitan justificarse y documentarse, no al revés. Hacer pruebas es algo cultural, necesitamos encontrar cómo hacerlo crecer culturalmente: contratar gente que ya entienda y actúe con ese conocimiento, y entrenar a aquellos que todavía no tienen confianza en esto. Hubo un montón de charla alrededor de hacer pruebas, pero nadie hizo distinción sobre que tipos de pruebas eran. Parece que las pruebas de unidad y de integración, o probar bibliotecas o interfaces gráficas, es todo lo mismo al discutir el tema. Sin embargo, alguien preguntó específicamente sobre pruebas en interfaces gráficas. Realmente no sé sobre eso (¡quiero aprender!), pero creo que es un área menos conocida que las "pruebas sobre bibliotecas". También se mencionó un tipo de pruebas que es raramente comentado fuera de los círculos de administradores de sistemas: cuando se maneja un servicio que se tienen que monitorear, es vital disponer de una manera de poder probar al servicio de manera frecuente y repetida tal que se pueda asegurar que sigue funcionando.  Entonces, también se necesitan pruebas de reglas y procesos de negocios para los sistemas funcionado. Hubo un poco de discusión acerca de las pruebas de documentación. "Doctests" son un buen material de aprendizaje para las bibliotecas, y pueden escribirse para mostrar funcionalidad y guiar por arriba a los usuarios. Pueden ser muy buenas para dar impresiones generales sobre el módulo. Pruebas de documentación bien escritas son excelentes para documentar APIs, porque podés hacer que el conjunto de pruebas ejecute también aquellas, de manera de asegurarte que la documentación siempre permanece actualizada. Estás haciendo pruebas sobre la documentación, no usando la documentación para probar nada. Quedó claro que las pruebas de documentación no reemplazan las pruebas de unidad, las complementan. La discusión más grande del hilo fue sobre si TDD era útil en código experimental, o en etapas muy tempranas del desarrollo. Se aseguró que TDD funciona mucho mejor con códigos maduros que con código experimental. Esto se aplica también a características experimentales dentro de proyectos maduros. Básicamente se reduce a esto: si tenés una buena visión de lo que necesitás, escribir las pruebas primero te ayudan a señalizar el camino que vas a tomar. Si no tenés ni siquiera una buena idea de para qué dirección vas, TDD es un esfuerzo desperdiciado. Esto generó algo de controversia, hasta que se explicó que "experimental" no es la mejor palabra para explicar que: estás en una fase de aprendizaje porque realmente estás tratando de entender mejor el problema. Una vez que entendiste el problema lo suficientemente bien como para tener una visión de la solución, volvés a TDD. Son realmente dos actividades distintas. Esto normalmente sucede cuando la gente que escribe el código en modo "experimentación" sólo quiere ver si una idea loca va a funcionar o no, lo que muchas veces resulta en descubrir que todavía no se entiende el problema completamente. Por otro lado, está la situación donde se necesita código en producción, y realmente no hay tiempo de hacer pruebas. Sí, ya sabemos, tendrá defectos, y a largo plazo es más caro, pero "lo necesitamos ya". Esto pasa en la vida real más veces que con las que estaría cómodo... Gustavo N. dijo algo que comparto completamente: Si estás en una startup en una situación de vida o muerte (para la compañía), seguro... podés optar por ir realmente rápido, obtener un montón de mercado, y luego estabilizarte si resultó bien (mirá Twitter :-). Si sos parte de un contexto más grande (como nosotros), y tu producto no va a desaparecer pronto (ni la compañía que tiene una marca asociada con el producto), entonces estas rupturas pueden dañar realmente al producto y a la marca. Entonces, como conclusión, por favor compartí sobre hacer pruebas en esta lista.  Preocupaciones, ideas, tecnologías, si deberías o no hacer algo, etc.; este no es un tema donde todo es blanco o negro, o donde está todo dicho. Si con el tiempo encontramos que es necesario una reunión para discutir algo (o incluso un grupo que se reúna regularmente), podemos ir a por ello. Mientras tanto, charlemos por acá.

Mayo 25, 2010

Boris Quiroz
cereal_bars
wreeeeoooowww trata sobre »
» Y yo tenía razón.

En base a mi post anterior, solo puedo decir que tenia razón… Aca la prueba.

» Es dificil escribir las reglas de un juego!

Hoy a la tarde estuvimos jugando con mi abuela al Crapó. Es un juego de cartas inglesas bastaste jugado en mi familia. En una oportunidad había buscado las reglas en Wikipedia y al no encontrarlas me propuse publicarlas. Hoy saldé la deuda, pero me di cuenta que no es nada fácil escribir las reglas de un juego, aunque uno lo haya jugado mil veces!

¿Cómo empezás? ¿Definís un vocabulario? Si emepezás a nombrar conceptos del juego que los lectores desconocen, podés perderlos o van a terminar leyendo arriba y abajo, arriba y abajo hasta comprenderlo por entero!

Busqué cómo estaban explicados otros juegos de naipes e intenté imitarlos. No se qué tan bien salió, pero por lo menos está hecho. Ahora cualquier wikipedista puede mejorar lo que hice, redacción, estilo, formato.

A este blog lo llamo, en borrador permanente, así que en lugar de dejarles las intrucciones aquí, los invito a leerlas en Wikipedia y a jugarlo. Si las dejara aquí serían letra muerta, emparchadas talvez con algún generoso comentario que corriga mis errores, pero Wikipedia es la letra viva y ahí me gusta contribuir este tipo de cosas.

Saludos!

100_7318

Mayo 24, 2010
» La cocina del Ubuntu

En el Ubuntu Developer Summit