Sálvenos del REST!
RESTful thinking
Someone save us from REST es el título de un curioso artículo de Rob Connery. Lo curioso es que por lo general REST es una buena práctica y es muy popular y deseado en cuanto a la organización semántica de nuestras aplicaciones web (o de los servicios que estas expongan).
La idea de REST es utilizar toda la complejidad que HTTP provee para dar un sentido más semántico a las operaciones que realizamos. De esa forma, pedir una página y enviar información deberían usar verbos distintos, e incluso deberían haber verbos distintos cuando esa información es nueva o se está modificando información existente. Al mismo tiempo, las URIs deberían ser identificadoras de recursos (de ahí su nombre) y no simplemente direcciones web. Ese es un pequeño resumen, pero la historia va mucho más profunda sobre la idea de darle un significado a las operaciones que se realizan en internet.
Rob Connery lo ve como las peleas grammar-nazi que ocurren en la internet. Es verdad lo que dice y pueden que tengan razón, pero realmente no es tan útil, y hay más discusión y confusión que verdad tras todo ello. Su punto de vista es que se están exagerando mucho las posiciones sobre esta discusión y que nadie tiene realmente una posición 100% clara de lo que REST significa, porque no hay un estándar al respecto.
Soy un zorrinito semántico.
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.
Windows Metro explicado
Crítica criteriosa
A menos que hayas estado viviendo bajo una roca por los últimos meses, deberías saber lo siguiente:
- Windows 8 es el nombre de la nueva versión del sistema operativo de Microsoft
- Windows 8 introduce a Metro, un intento de introducir a las pantallas táctiles como las privilegiadas en Windows sin incapacitar la interación de teclado y mouse
- Windows 8 es diferente. Si estás estancado en el 2001 con Windows XP, Gnome 2 y/o KDE 3, obviamente tampoco te va a gustar Windows 8. También tengo unos conejitos bailando para que mires.
(énfasis y links del artículo original)
Este artículo no tiene desperdicio, ya que me pareció totalmente balanceado y acorde con una opinión crítica. Da muy buenos consejos para los que estamos curiosos de Windows 8 pero no sabemos cómo seguir adelante. Ya comprarlo? Usarlo? Instalarlo? Máquina virtual o disco real? Qué me pierdo? Qué tiene? Vale la pena? Todas esas preguntas están respuestas en este artículo: Windows 8 & Metro with Mouse and Keyboard.
Soy un zorrinto crítico.
Locura por los datos
Autobiografías analíticas
Quizá esto merezca una explicación y una exposición pseudo-filosófica sobre el tema, pero eso requiere más tiempo del que dispongo ahora, de forma que sólo les dejo el dato. En este caso se trata de Steven Wolfram, científico fundador de Wolfram Research, inventor de Mathematica, y varios otros productos y libros que andan por ahí.
Steven cuenta que desde pequeño estuvo muy interesado en los datos, y comenzó, pensando que muchos otros lo hacían, a registrar datos sobre su propia vida. Para su sorpresa (de verdad?) no era tan común que la gente hiciera esto, y hoy es la persona con más datos auto-biográficos. Hace poco se publicaron unos artículos haciendo análisis de ellos, y realmente es increíble el tipo de tendencias que pueden detectarse gracias a ellos.
Via Proof me llega el artículo directamente desde el blog de Steven Wolfram, The Personal Analytics of My Life. Es fácil de leerlo, yo lo recomiendo.
Soy un zorrinito analizado.
Limpiando el CSS
De forma casi automatizada
Como siempre, yo sacando cosas de los foros de StackExchange, en este caso de ProWebmasters. La pregunta fue: Cómo trabajar con archivos CSS viejos? Específicamente, cuando estos archivos se vuelven enormes, y cuando ya no estamos seguros de qué está en uso, qué quedó en desuso, qué está repetido, qué se puede resumir, etc. Cuando tenemos un proyecto de ya un par de años, esto se hace muy difícil de medir.
La respuesta provee una buena cantidad de herramientas para probar que nos permite facilitar este trabajo, algunos de los cuales trabajan sólo en la página actual mientras que otros pueden realmente recorrer el sitio o usar un listado de URLs que les proveemos.
Soy un zorrinito limpio.
Mitigando ataques de ingeniería social
Top 5 de acciones para prevenirse
Desde el mes pasado estoy esperando a que Social-Engineer.org deje salir a la luz el newsletter que enviaron sobre tips de reducción de riesgo ante ataques de ingeniería social. Este newsletter, específicamente el número 29, se titula The Top 5 Social Engineering Mitigation Tips.
El newsletter es un poco más descriptivo que sólo enumerar cinco items, cuenta por qué son importantes y qué cosas podrían ocurrir si es que no se tuvieran en cuenta. Por alguna razón el formato se ve un poco roto y se veía mejor en el email, pero aún así es legible y útil.
Soy un zorrinito protegido.
Cálculo lambda para chicos
Con cocodrilos y huevos
Ayer encontré en el foro de Theoretical Computer Science una pregunta sobre cómo aproximar la ciencia de la computación a chicos entre 8 y 14 años, muy apropiado también para alguien como yo que tiene muy poco conocimiento sólido de muchas de las estructuras y ciencias involucradas.
Todas las respuestas son muy buenas, unas más completas que otras, pero hubo una que me llamó poderosamente la atención. Esta era una forma divertida de aprender cálculo lambda, y se basa en un software creado didácticamente con cocodrilos y huevos, familias y cocodrilos viejos que explica la forma en que recursivamente se aplican las mismas reglas para dar resultados complejos.
Les recomiendo mirar el video completo, aplicado a la lógica booleana. Es muy interesante, y fácil de seguir.
Soy un zorrinito teórico.
Las 10 reglas del trabajador Zen
La noble tarea de trabajar, efectivo y eficaz y en paz.
Sé que AP acaba de publicar esto (¡Gracias!), pero creo que su relevancia es tanta que voy a republicarlo también. él publicó un link a un artículo llamado The 10 rules of a Zen Programmer y antes de que digan nada: casi no tiene nada que ver con programación (de ahí el título que yo le dí). Las reglas que expone son imprescindibles para un buen trabajo, organizado y tranquilo. Estoy totalmente de acuerdo con todas.
Aún más, como yo comentaba, actualmente me encuentro leyendo un libro llamado Hagakure, que se trata del código de honor y conducta de los samurais del siglo XVI, escrito por samurais mismos. Me sorprendió mucho (y quizá no debería) ver que las pautas dadas en este artículo son muy cercanas a las expuestas en ese libro. Se trata de hacer noble la tarea a la que nos dedicamos y convertirla en algo casi espiritual.
Si a alguien le gustó tanto como a mí este artículo, el autor, Christian Grobmeier, tiene una categoría en su blog llamada The Zen Programmer, algo vacía aún, y está trabajando en un eBook en donde explicará todos estos conceptos con detalles, ejemplos y algunas cuestiones más. Si les interesa seguir el progreso, pueden ver los detalles en el Libro: The Zen Programmer.
Sisyphus.js
Widget de autoguardado
Una característica que seguramente todos adoramos de GMail es el autoguardado. Al momento exacto en que dejamos de escribir un mail, este se autoguarda, y no recuerdo cuándo fue la última vez que perdí un mail por accidentalmente refrescar la página. Quienes vienen de las viejas épocas de Hotmail conocen mi frustración.
Hay alternativas interesantes para lograr este mismo efecto, una de las cuales es Sisyphus.js (gracias JH!), un proyecto de open source en GitHub que es un wrapper para formularios. Se encarga de automáticamente atrapar los eventos de cambio en ellos para guardar automáticamente en local storage la información del formulario. De esa forma, nuestro formulario siempre tiene la información guardada.
No dudo que pueda modificarse o atrapar eventos que nos permita también serializar esta información al servidor para que, al igual que GMail, esta información autoguardada quede relacionada con nuestra cuenta y no con nuestro navegador.
Soy un zorrinito autoguardado.
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.