Alpha's Manifesto

La madriguera de una insignificante figurita blanquinegra.

Presentando: What now?

A todo-list with a twist

Como excusa para probar d3.js, yeoman, travis, heroku, y con el propósito de hacer algo interesante, me propuse el desarrollo de what-now, un listado de tareas para hacer (típico to-do list) pero con un desafío extra: mostrar las tareas dependientes de otras y mostrar el camino crítico para la resolución del “proyecto”.

Explicaré aquí mis investigaciones hasta el momento, mi progreso, el plan para más adelante y lo que he encontrado.

(Leer más →)

ng-pattern-restrict

Limitando la entrada del usuario según una RegEx, AngularJS style

ng-pattern-restrict

En una situación en particular, necesité limitar los valores que un usuario puede ingresar en un campo HTML, para evitar que pudieran ingresarse valores incorrectos. Si bien esto no es recomendable desde el punto de vista del UX, eso es lo que yo necesitaba (requerimiento). Pensé en desarrollar un componente genérico que hiciera esto por mí, y así nació ng-pattern-restrict, para AngularJS.

Aquí tendrán más información de cómo utilizarlo, cómo funciona y en dónde obtenerlo.

(Leer más →)

Amar al proxy-mo

Desarrollando en localhost, same-origin policy & REST APIs

Proxy Love

Hasta hace un tiempo estuve peleando con un problema particular, que en realidad es algo común. Desarrollando una aplicación en su entorno local, se encuentran con que tienen que interactuar con REST APIs de terceros, pero desde JavaScript no pueden llamadas directamente a este dominio porque el browser les impide hacer estas llamadas. ¿Qué está pasando y cómo resolverlo?

(Leer más →)

Alpha’s Manifesto deployment

Open source & automatic deployments

Aquí hay dos noticias en realidad: Por un lado, Alpha’s Manifesto, el theme de este blog, es ahora open source (work in progress) y por otro lado, logré configurar deployments automáticos para cuando ocurran cambios en este theme.

(Leer más →)

Carat

Debugging de energía colaborativa

CaratDesde el feed de i.MicroSiervos me llega la noticia de Carat, un sistema que nos aconseja sobre maneras para hacer que nuestro dispositivo móvil haga mejor uso de su batería y dure más.

Está disponible tanto para Android como para iOS, y lo más curioso es que la fuente de información es puramente colaborativa. Es el mismo uso de los dispositivos que sirve como fuente de información para identificar las características que insumen más batería para que de esa forma se pueda desrecomendar su uso a quienes no la utilizan activamente. De esta forma, mientras más uso se haga de la aplicación, más información habrá para utilizar.

La versión de iPhone no está tan preparada en cuanto a interfaz gráfica, pero es totalmente funcional y ya está dando buenos consejos sobre cómo mejorar la calidad de vida de nuestra batería (y nuestro battery-lifecycle). La de Android se ve más bonita en cuanto a interfaz y la funcionalidad es básicamente la misma que la de iPhone.

Este sistema está desarrollado por el AMP Lab (Algorithms, Machines and People Laboratory) de la Universidad de Berkeley, en un pequeño grupo de cinco personas. Sin embargo, el proyecto es open source y se puede encontrar en GitHub, para hacer un fork y ayudar a trabajar sobre él.

Soy un zorrinito ahorrador.

Blockly

Un lenguaje de programación visual

Blockly es una apuesta de Google para enseñar programación desde los bloques más básicos con esa misma aproximación: bloques.

Gracias a la novedad visual (y la autogeneración de código que ocurre por detrás) se puede programar fácilmente con encajar piezas de rompecabezas, de forma muy intuitiva. Lo que nos demuestra es que se ahorraron la complejidad de la sintaxis de un sistema reemplazándola por un rompecabezas, que vuelve el conocimiento de sintaxis en un juego.

Existen tres demos para Blockly actualmente:

  • Maze, nos impone el desafío de resolver un laberinto con instrucciones simples
  • Code, nos permite ver un poco detrás de la cortina y observar como Blockly puede generar código en otros lenguajes.
  • RTL es un demo de cómo se vería la interfaz de derecha a izquierda.

Parecería por estas características no se trata sólo de un intento de educación, sino también la capacidad de extender aplicaciones propias de una forma visual y fácil de comprender. Imaginen permitirle a los usuarios de un sistema “programar” cómo debe comportarse el sistema en determinados casos. Realmente es una opción muy poderosa de extensibilidad, sin requerir la complejidad de saber programar.

Soy un zorrinito en bloques.

ASP.NET MVC UserVoice

Para que la comunidad se construya a sí misma

¿Recuerdan que alguna vez conté de UserVoice y cómo permite obtener feedback de la comunidad? Bueno, la gente de Microsoft me leyó (?) y el mismo desarrollo de ASP.NET MVC está siendo permitido por la comunidad. Una de las formas es este mismo user voice, que pueden encontrar en el ASP.NET MVC UserVoice Site.

Otra forma, menos obvia pero muy clara aún así, es que el framework es Open Source y está hosteado en ASP.NET en CodePlex, junto con otros proyectos muy cercanos. Está claro que se puede modificar pero Microsoft aclara que no van a tomar código nuestro (aunque siendo sinceros, creo que eso se evalúa en caso por caso). Sea como sea, dicen que están muy interesados en todo tipo de feedback.

Soy un zorrinito libre.

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.

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.

VisualEvent

Bookmarklet de visualización de eventos

Muy parecido a debugCSS que alguna vez envié, VisualEvent es también un bookmarklet que nos permite trabajar con los interiores de alguna página. En este caso, nos mostrará visualmente cuáles son los eventos asignados a los distintos elementos e incluso muchas veces el código. Muy útil para debuggear y detectar problemas de interacción con código que tenemos que corregir. Además, también para considerar cuánto JavaScript estamos usando en una página (puede que sea mucho, no?)

Soy un zorrinito JavaScript.