Deprecating the first function, a compatibility strategy

It happened, a user reported that a function was behaving weird, she did date ( current date ) to record and the month value in the resulting record was wrong, it was 10 instead of 11.

As a programmer I noticed instantly, in the date _ to record implementation I forgot the fact that in Javascript Date.getMonth returns zero indexed months, that means January is 0 and December is 11.

I wanted to fix the error, but there are many users out there that may be using this function, how could I fix it without breaking existing visualizations?

My first quick idea was one I used in the past for other kind of migrations, when reading the visualization configuration next time, check if there's a call to the "old" version, if so, change it for a call to the "new" and fixed one.

There's a problem with that solution, if the user noticed the problem and used the month field somewhere else in the logic, the change will break that logic by having months from 2 to 13.

Building a program transformation that would detect and fix that is really hard, and I may introduce weird changes that will surprise users.

That's why I decided to introduce a new version of the function alongside the current one, they both have the same representation in the UI, from now on only the new one can be selected, but the old one will still be available for existing logic that uses it.

The only difference is that when displaying the old version, a warning sign will appear, on hover it will explain that this version had a problem and that you should select the new version and change any month + 1 logic you may have.

Here's an example with the old and new function one after the other, notice the month field in a and b on the left side.

/galleries/post-images/deprecate-fn.png

On mouse hover:

/galleries/post-images/deprecate-fn-tip.png

This was done in a generic way to deprecate other functions in the future the same way.

We will try hard to avoid having to use it.

Lost in Migration: Gestos perdidos y una propuesta

Los dolores  que  quedan  son  las  libertades  que  faltan

-- Manifesto Liminar

El título de este blog en inglés es "Lost in Migration: ...", un juego de palabras con "Lost in Translation", juego de palabras que se pierde en la traducción :) (que sería "Perdido en la migración").

Existe una tensión entre una interfaz de usuario limpia y simple que puede ser mostrada en pantallas táctiles pequeñas y una interfaz de usuario "descubrible" y amigable al usuario novato. Una interfaz de usuario que provea contexto, consejos y información extra para ayudar a los usuarios a descubrir las capacidades de la aplicación.

En instadeq intentamos proveer estos consejos, contexto e información extra [ab]usando tooltips.

Casi todas las partes interactivas cambian al cursor correcto y proveen un tooltip, para estar seguros que la información es notada por el usuario también mostramos el la información del tooltip en la parte inferior derecha de la aplicación.

Esto lo hacemos para evitar la interacción de "posar el puntero y esperar" para ver si algo tiene un tooltip asociado. También para evitar el problema de "accidentalmente moví el mouse y el tooltip desapareció".

Todas estas consideraciones cuidadosas se van por la ventana cuando usamos una aplicación en un dispositivo táctil como un smartphone o una table.

No hay soporte para "hover", no existe un cursor el cual podamos cambiar para proveer señales sobre los componentes interactivos, por esta razón no hay una forma estándar de mostrar tooltips en dichas plataformas.

Se han propuesto e implementado múltiples formas de lograr un efecto similar, el problema es que el usuario debe descubrirlas y recordar que aplicaron implementa que convención.

Pensando en esto y hablando al respecto en vis.social [1] se me ocurrió una idea.

Un nuevo gesto para descubrir componentes de la interfaz de usuario que pueden proveer información contextual.

A falta de un nombre, llamemoslo el gesto "enquire" (del ingles indagar/preguntar)

La idea detrás del gesto es doble:

  • Indagar sobre todos los componentes de la interfaz de usuario que pueden proveer mas información.
  • Indagar directamente a un componente especifico sobre sus detalles

El gesto funciona con un símbolo que todos conocemos, el signo de preguntas: ?

La interacción funciona de la siguiente manera:

  • El usuario al usar la aplicación se encuentra en una pantalla nueva y no sabe que es posible en dicha pantalla
  • El usuario dibuja la parte superior del signo de preguntas en cualquier lugar de la pantalla (la parte sin el punto)
  • El evento 'inquire-all' es emitido
    • Aquí la aplicación puede resaltar los componentes que tienen información contextual
  • El usuario ya sea esperando por el resaltado de componentes o continuando con el gesto selecciona con un "tap" el componente sobre el cual desea obtener mas información
  • El evento ('inquire', target) es emitido donde target es una referencia al componente que fue seleccionado
  • La aplicación puede entonces mostrar mas información sobre dicho componente en la forma que prefiera (tooltip, dialogo, popover, sección embebida en la interfaz)

Este gesto no solo provee una manera de reemplazar tooltips pero también una forma de "volver" al tour que algunas aplicaciones implementan.

Uno de los problemas con la característica de "tour" que algunas aplicaciones implementan es que suele suceder en un momento en el que queremos comenzar a usar la aplicación para probarla y explorarla y no tenemos ganas y/o tiempo de pasear a través de un tour de características que no sabemos cuando/si nos van a ser útiles.

Al mismo tiempo, muchas veces no queremos abandonar el tour porque no sabemos si existe una manera de volver a el luego cuando lo necesitemos.

Pero entonces, en caso de que fuera posible volver al tour, desearemos que exista una opción para saltearse las partes que no nos interesan para ir directo a nuestra característica de interés.

Como deberán notar, no soy un fan de los tours en aplicaciones :)

Con el gesto enquire en cualquier momento podemos solicitarle a la aplicación que nos muestre los "puntos de interés" y podemos saltar directamente al punto que nos interese y explorarlos en el orden que deseemos cuando lo deseemos.

He aquí mi propuesta para un nuevo gesto para reemplazar tooltips y la visita guiada en una forma estándar, ideas e implementaciones bienvenidas.

[1] vis.social es un espacio social para personas interesadas en datos, visualizaciones, programación creativa, investigación y artes relacionadas, si estas interesado puedes unirte, el idioma de la mayoría de los usuarios es ingles.