Saturday 16 June 2007

Panchromatic pixels in sensor arrays

A friend pointed me to a Kodak announcement about new filter-array patterns for digital camera sensors. In short, what they do is to add panchromatic pixels to the filter array patterns.

I don't see a breakthrough because adding specialized pixels (for luminosity in this case) is an obvious evolution when you have increased pixel densities in sensors and lower prices. Previously, in contrast, a lot of thought had to go into designing filter array patterns to capture both luminosity and color resolution with many less pixels.

Today one can have 16 mega pixels in a 35mm sensor, which is the resolution of 35mm film. Each additional mega pixel can be used to capture more and more specific information, and nothing prevents manufacturers from using sensors lager than 35mm.

The days of film as the paradigm of captured image quality are over.

Thursday 14 June 2007

La Vida

Para los hermanos Mazzei y Jetty mamá

Hace unos meses hablaba con un amigo quien estaba sufriendo de una de esas enfermedades crónicas que cuando no es una cosa un día, es la otra. Yo le dije que, a pesar de que estaba entero, seguramente las épocas de alto "estrés" en su vida (que fueron intensas) habían cobrado lo suyo, y que dejara de levantarse a las 5:30 de la mañana, y recorrer tanta carretera. Que a sus sesenta y dele se podían tomar las cosas con más calma.

Su respuesta me dio a entender que encerrarse en su casa no era para él descanso sino prisión, y una manera de renunciar a la vida y acercarse a la muerte.

¿Qué es la vida?

John Lennon dijo que "La vida es eso que te pasa mientras estás ocupado haciendo otros planes".

¿Qué es la vida?

¿Es el trajín diario del tráfico caraqueño, las doce horas de trabajo, los chamos al colegio, vuelta a la casa y otra cola, demasiado cansado para conversar mejor veo tele hasta que me aburra y me duerma?

La máxima común a todas las filosofías de vida (incluidas las religiones) parece ser que la vida consiste en "experimentar este día como si fuera el último". ..

Y yo me pregunto: si me aseguraran que sin lugar a dudas mañana va a ser el último, ultimito día ¿Qué haría mañana?

Creo que llamaría a varias personas para decirles cosas que no les he dicho, como que las amo desde siempre y para siempre. Me iría a cortar el pelo donde el Sr. Lino, el italiano, no por el corte, sino por la conversa (hablamos muy poco con los viejos). Me comería una reina pepiada y me tomaría un batido de mango sin azúcar (o tal vez un mondongo con mucho picante y una cervecita). Jugaría una partida de dominó con mis amigos. Haría el amor, mucho. No se.

Si se que antes de hacer todo eso probablemente me levantaría bien temprano en la mañana a correr, a escuchar el despertar de los pájaros, oler el rocío de la mañana, y sentir el amanecer.

Wednesday 6 June 2007

Sobre la Revisión por Pares

Van algunos comentarios en torno al artículo que mi amigo Pedro escribió sobre "peer reviews".

[versión 0.1]

En el mundo del software una revisión por pares no es solo una oportunidad para mejorar la calidad del producto (el "código fuente") a través de la detección temprana de defectos, como errores de programación, o desviaciones de la especificación, de la arquitectura, o de las buenas prácticas.

Es también una importante oportunidad de aprendizaje para los participantes, y en ello una opotrunidad de mejorar el entorno.

Una revisión por pares enfocada solo en encontrar anomalías, o "el qué", pierde la valiosa oportunidad valiosa de analizar también el "cómo" y el "por qué":

  • Falta de conocimiento.
  • Herramientas inadecuadas.
  • Tareas repetitivas y proclives a equivocaciones.
  • ...
Y de aplicar mejoras con efectos permanentes como:
  • Entrenamiento.
  • Obtención o creación de mejores herramientas.
  • Automatización.
  • ...
Por ejemplo, la automatización de las revisiones particularment porque provee a tanto revisores como a autores de más tiempo para ocuparse de lo verdaderamente importante.

Al final importan el entendimiento de los conceptos y de las buenas prácticas, y el buen criterio. Frente a una desviación de las normas o la arquitectura el autor debería ser capaz de argumentar sbore por qué su decisión fue adecuada y no un capricho o un error. A veces ocurre que la arquitectura tiene defectos u omisiones, o que una norma no es aplicable en todas las situaciones.

Durante una revisión por pares buscamos que el código sea "bueno".

Un código que no es de calidad puede pasar una primera inspección ser todavía vulnerable a la ocurrencia de cientos de defectos en una siguiente iteración.

Mucho se ha discutido sobre la "estética" en software porque, en general, la informática se considera una cosa objetiva, mucho más cercana a las matemáticas que a la música (algo bien discutible).

La verdad es que la calidad estética del software puede determinarse con criterios bastante objetivos. Criterios que tienen que ver fundamentalmente con cuan entendible por otros mortales es una pieza de código. Lo subjetivo está en que quien adquiere experiencia en escribir buenos programas adquiere también un sentido intuitivo (o "estético") .
  • Modularidad
  • Separación de responsabilidades
  • Alta cohesión
  • Bajo acoplamiento
  • Minimalidad
  • Comprensibilidad
  • ...
Hay toda una tradición en libros por autores famosos sobre estos temas: Software Tools, Programming Pearls, Code Complete, Design Patterns, Pragmatic Programmer, y Refactoring, entre otros.

Por ser tan importantes el aprendizaje, el entendimiento, y el criterio, los acercamientos ágiles al desarrollo de software incorporan varias prácticas particularmente relevantes a este tema:
  • Programación en pares que cambian, con lo cual la práctica de revisión por pares se lleva a cabo constantemente.
  • El código es la documentación, con lo cual se afianza el concepto de "tener criterio" y se resuelven los conflictos con documentación de diseño obsoleta, incompleta, o errónea.
  • Automatización, no solo de las pruebas unitarias, sino de toda tarea que sea repetitiva y con ello proclive a errores.
Una revisión por pares no es solo una oportunidad para detectar y corregir los errores de hoy, sino para aprender, y así poder hacer del trabajo de manera más fácil y mejor en el futuro.