Alpha's Manifesto

La madriguera de una insignificante figurita blanquinegra.

Consejos de comunicación, parte 2: No eludas la pregunta

Ser conciso y no-ambiguo

Respuesta

¿Les ha pasado esto alguna vez?

Ustedes: Estará listo el reporte para esta tarde?
Alguien más: Lo que pasa es que estuve trabajando durante todo el día ayer en el otro trabajo del que hablamos y se extendió más de lo que esperaba porque los números no concordaban con el estimado original.

Si sienten la insatisfacción de una respuesta inexistente en esa conversación ficticia, sabrán de qué voy a hablar hoy.

(Leer más →)

Bugs con el manejo de fechas

...it's more likely than you think.

Muchos se habrán enterado del problema que tuvo Windows Azure con el día bisiesto del 29 de Febrero de 2012, el famoso leap year bug que causó downtime en la nube por todo el día. En algún momento se dijo que el problema no estaba relacionado con las fechas sino que fue coincidente, pero explicaciones posteriores confirmaron que era un problema de generación de certificados en el día bisiesto. Las razones de por qué se hace y cuáles fueron los problemas están explicados detalladamente en el blog de Azure: Summary of Windows Azure Service Disruption on Feb 29th, 2012.

Alguien preguntó en StackOverflow cómo protegerse de estos problemas. Por supuesto, si a Microsoft le pasa, a cualquiera de nosotros nos puede pasar. Por supuesto, no está del todo claro cómo fue que se generó la fecha inexistente, ni en qué lenguaje y Microsoft no da datos al respecto, pero esta persona aclara que aparentemente en el Framework .NET esto no ocurre.

Hay una respuesta en particular que me gustó enormemente, a pesar de no haber respondido la pregunta. Él habla de un proyecto en el que está embarcado llamado Noda Time, basado en el Joda Time de Java. Esta API resuelve muchos problemas que por lo general ni siquiera conocemos.

Me gustaría transcribir y traducir parte de su post, indicando algunos ejemplos de estos problemas (aunque no te interese la programación puede que encuentres esto muy curioso):

(…)

  • Mapear un horario local a zona horaria no es tan simple como pensarías. Una fecha/hora local puede ocurrir una vez, dos veces (ambigüedad) o ninguna vez (se salta) por transiciones de horarios de verano.
  • Las zonas horarias varían históricamente – más de lo que TimeZoneInfo generalmente quiere revelar, francamente (no soporta una zona horaria cuya idea de “tiempo estándar” cambia durante el tiempo, o que cambia a horario de verano de forma definitiva.)
  • Incluso con la base de datos de zonas horarias, los IDs de zonas horarias no son de fiar. (CLDR se encarga de esto, algo que estoy esperando en soportar en Noda Time eventualmente.)
  • Las representaciones textuales de fechas y horas son una pesadilla, no sólo en términos de su ordenamiento, sino también los separadores de fecha, los separadores de hora, y cosas raras como los nombres de los meses genitivos.
  • El comienzo del día no es siempre medianoche – en Brasil, por ejemplo, el cambio de horario de primavera mueve el reloj de 11.59:59 PM a 1 AM.
  • En algunos casos (bueno, yo conozco uno) una zona horaria puede forzar a que todo un día se salte – El 30 de Diciembre de 2011 no ocurrió en Samoa! Sospecho que muchos programadores pueden ignorar esto, pero…
  • Si vas a usar otro calendario aparte del Gregoriano, sé cuidadoso y asegúrate de saber cómo se va a comportar.

(…)

Soy un zorrinito CST.

Encontrando problemas de performance en SQL

Cuando la respuesta no es obvia

Otro de los foros de Stack Exchange que suelo leer es Database Administrators, en donde, como imaginarán, las preguntas y respuestas rondan sobre bases de datos y tecnologías afines. Cada tanto me encuentro con alguna joyita útil y este fue uno de esos casos.

La pregunta trataba sobre alguien que tenía problemas de performance cuando no se trataba de el acceso a disco ni del consumo de CPU. Muy apropiadamente, la pregunta se llama SQL: What is slowing down INSERTs if not CPU or IO?, y por supuesto, siendo un caso particular puede que no nos sea realmente útil la respuesta. Lo que quiero destacar de esta pregunta es el método de investigación que usaron y las herramientas con las que analizaron la performance interna del motor de base de datos. Puede ser muy revelador para nosotros trabajar con estas herramientas cuando la respuesta no es obvia y los planes de ejecución no son suficientes para detectar problemas de performance.

Soy un zorrinito performante.

Joel Test para programadores

Simpleza autocrítica

Para quienes no conocen el Joel Test, es una prueba muy simple, solo 12 preguntas que nos guían a darnos cuenta si nuestro equipo de desarrollo va por el buen camino o tenemos cosas que arreglar.

De ahí alguien preguntó si había una especie de Joel Test para la evaluación de un programador en particular, especialmente preguntas para hacer en entrevistas y para evaluar a gente de forma individual. Alguien mencionó que se podía trabajar con la Programmer Competency Matrix de IndianGeek, con la que ya he trabajado anteriormente. Aún así, no se ajusta específicamente a todas las características que alguien quisiera medir en un programador.

Al fin y al cabo, las respuestas no fueron muy iluminadoras, usuarios relacionados hicieron una pregunta en Quora sobre qué hay que preguntar a un candidato antes de contratarlo, las respuestas son un poco más interesantes y más allá del tema del entrevistado y la contratación, es interesante como ejercicio preguntarnos esas cosas a nosotros mismos y evaluar las respuestas.

Soy un zorrinito evaluado.

¿Cuántos colores existen?

Seis: Blanco, negro, rojo, verde, azul y amarillo. (?)

Un link interesante que me encontré pregunta ¿Cuántos colores existen? y se presta a una buena cantidad de respuestas.

Alguien respondió desde un punto de vista físico, apropiado a la temática del foro, y su respuesta es que existen ∞ colores, interesante número. Se basa en las propiedades de las frecuencias y su posible combinación. Aunque se discute luego sobre la real aplicación de la longitud de Planck y de la longitud Hubble para aplicar límites, ese número no cambia realmente.

Otro se aproximó más al lado médico, especificando la resolución de los distintos fotoreceptores oculares. En este caso la respuesta sería muy variable, pero aproximándose al billón de colores.

Alguien más introduce la teoría del color y el diagrama McAdam para hablar de una cantidad pequeña, pero no definida, junto con una última, bastante cercana, desmiente las anteriores diciendo que nuestra resolución de distinción de colores es limitada (aunque variable) y que el espectro visible es también limitado, lo que significa que lejos de ser infinito, es también una cantidad bastante pequeña.

Soy un zorrinito decolorado.