martes, 27 de diciembre de 2011

PhoneGap: un entorno para gobernar a todos (+ videos)

PhoneGap

El terreno del desarrollo de aplicaciones para móviles es cada vez más complejo. Incluso a medida que avanza el dominio de iOS y Android, hay una cantidad de dispositivos y sistemas operativos que aun son relevantes, y las variantes entre formatos, restricciones impuestas por las tiendas de cada fabricante y demás particularidades tienden a complicar la tarea enormemente.

En estos casos siempre han surgido intentos de proveer un único entorno que permita generar aplicaciones para diferentes objetivos, pero en general los resultados no son demasiado buenos porque suelen apuntar a un denominador común que usualmente es bajo y desaprovecha el potencial de muchas de las plataformas. No es el caso con PhoneGap, una plataforma que permite desarrollar aplicaciones nativas para múltiples dispositivos, a partir de su desarrollo en HTML5 (HTML, CSS y JavaScript).

PhoneGap es código abierto y gratuito y fue creado por una pequeña empresa llamada Nitobi que fue comprada en octubre por Adobe, que mantuvo el compromiso de mantener las características abiertas de la plataforma, delegando incluso la base de código a la Apache Software Foundation.

Desarrollando en HTML/JS, PhoneGap permite acceder a todas las API nativas de cada plataforma (salvo en casos ne que no existen) y el empaquetado posterior genera aplicaciones nativas y ajustadas a los requerimientos de los mercados de cada proveedor. Las plataformas cubiertas actualmente son:

  • iOS
  • Android
  • Blackberry (OS 4.6 hasta 6.0)
  • WebOS (de hp)
  • Windows Phone 7
  • Symbian
  • Bada (la plataforma de Samsung)

Y las APIs cubiertas cubren casi todo lo que cada tipo de dispositivo tiene disponible (muchos no tienen brújula o no soportan video, por ejemplo), incluyendo:

  • acelerómetro
  • cámara
  • brújula (si hay)
  • contactos
  • archivos (en los sistemas que lo permiten)
  • posición geográfica
  • media (audio/video)
  • red
  • notificaciones visuales, sonoras o vibrador
  • almacenamiento

Veamos un ejemplo rápido de cómo utilizar el acelerómetro en JS:

function onSuccess(acceleration) {
    alert('Acceleration X: ' + acceleration.x + '\n' +
          'Acceleration Y: ' + acceleration.y + '\n' +
          'Acceleration Z: ' + acceleration.z + '\n' +
          'Timestamp: '      + acceleration.timestamp + '\n');
};

function onError() {
    alert('onError!');
};

navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);

Esta interfaz funciona en Android, iOS y BlackBerry OS 5.0 o superior. De manera similar puede accederse a casi todos los recursos de los dispositivos, y la funcionalidad es la mejor posible para cada uno de ellos, ya que no se reduce todo al denominador común, sino que hay soporte para toda la funcionalidad de las plataformas. Es importante entender que no hay magia y cada plataforma final mantiene sus requerimientos originales. Por ejemplo, para generar aplicaciones iOS es necesario trabajar en Mac OS, y para genera aplicaciones Windows Phone es necesario Windows; Android requiere en el SDK y Eclipse, etc.

Quedan a continuación un par de vídeos (en inglés) mostrando PhoneGap en acción para iOS y Android.

lunes, 26 de diciembre de 2011

Raros lenguajes nuevos: Dart (+ video)

Dart

Hace ya varios meses comenzó a circular el rumor de que Google estaba trabajando en un nuevo lenguaje. Entre los rumores se mencionaba un nombre: Dash, y un par de personas, conocidos para los que siguen las novedades en cuanto a lenguajes y máquinas virtuales: Gilad Bracha y Lars Bak.

En la conferencia GOTO, en Aarhus, Dinamarca, durante octubre de este año, se descorrió el velo y se presentó el nuevo lenguaje, con nombre definitivo similar al inicial: DART.

Efectivamente los autores detrás son Bracha y Bak. Bracha se ha autodenominado Teólogo Computacional Emérito, y conocido por ser coautor de la Especificación del Lenguaje Java y creador de los lenguajes StrongTalk (un entorno de Smalltalk, en realidad, creado antes de entrar en Sun) y más recientemente, Newspeak. Lars Bak es un reconocido en máquinas virtuales, habiendo liderado en Sun proyectos como HotSpot y Java ME, el entorno de ejecución de Self y más recientemente V8, el motor de ejecución de JavaScript abierto que forma parte de Google Chrome.

Google mantiene dos proyectos en paralelo respecto a la evolución de JavaScript: por un lado sigue apoyando fuertemente el desarrollo de EcmaScript (el verdadero nombre de JavaScript) para resolver algunos de los problemas de diseño que acarrea a lo largo de los años. Por otro lado, reconociendo que este es un camino que tomará muchísimos años y será complejo implementar algunas soluciones, mantiene también a Dart como una alternativa posible.

Dart es un lenguaje con muchas características conocidas, que no sorprende demasiado, pero con una base muy fuerte en su motor de ejecución, y mantiene la capacidad de ejecutarse nativamente dentro del navegador, algo que todavía no está completamente soportado ni en Chrome, pero si experimentalmente en una versión particular de Chromium (el proyecto abierto) siguiendo instrucciones particulares para compilarla.

Las características principales de Dart como lenguaje son:

  • Tipos estáticos opcionales (si no se declaran son dinámicos)
  • Herencia simple basada en clases con interfaces
  • Genéricos
  • Sintaxis muy similar a JS
  • Interpolación de strings
  • Lambdas
  • Modelo de aislamiento similar a Erlang (cada Isolate es un conceptualmente un proceso sin nada compartido, comunicándose por pase de mensajes, pudiendo correr en paralelo)

Las opciones de ejecución son realmente tres:

  • Compilar de Dart a JavaScript (la única opción que permite generar y ejecutar aplicaciones hoy en día)
  • Ejecutar el código Dart en su propia máquina virtual (aun no soportada realmente en ningún navegador, pero si en las herramientas Dart)
  • Crear una imagen (se trata de una imagen del heap de una aplicación que puede empaquetarse y reactivarse instantáneamente, similar a una imagen de Smalltalk).

Para utilizar Dart es necesario descargar y utilizar un conjunto de herramientas empaquetadas como un plugin de Eclipse, o para probar el lenguaje en un contexto más básico se puede utilizar Dartboard, un pequeño editor en linea con las herramientas detrás, en el servidor. En la imagen debajo pueden ver DartEditor corriendo en mi computadora:

Dart Editor

Para los más interesados, dejo un video y presentación de Gilad Bracha mismo en InfoQ (en inglés). Lamentablemente la gente de InfoQ no permite embeber el video de manera directa, pero es en parte porque ellos brindan una experiencia muy buena al sincronizar el video del presentador junto a las diapositivas en cuadros separados.

viernes, 23 de diciembre de 2011

Código en colores: temas para programar

Hace tiempo que no publicaba nada, ocupado con muchos temas laborales y personales, pero estoy organizándome nuevamente y vuelvo a la carga. Ojalá pueda ir subiendo la frecuencia y llegar de nuevo al ritmo diario dentro de poco.

Tomorrow Night theme

Todos los que programamos tenemos una serie de hábitos que son bastante personales y que nos ayudan a mantener el foco y la comodidad en la tarea. Muchas veces no podemos elegir de manera directa cosas como el lenguaje, la plataforma o ciertas herramientas, pero en la mayoría de los casos si podemos personalizar sus configuraciones.

Una de las personalizaciones más comunes y variables son los colores de nuestros editores o IDEs. Algunos preferimos fondos oscuros, otros claros, a veces tonos medios. En mi caso prefiero los primeros, y siempre estoy buscando variantes de "temas" de colores que pueda usar en diferentes ambientes. No es una búsqueda activa, sino que en general me llama la atención cuando alguien menciona nuevos temas en algún blog o artículo, y cuando puedo le dedico unos minutos a mirarlos.

Esta mañana mientras leía otra cosa llegué de causalidad a la página de temas en la Wiki de TextMate, uno de los editores que uso frecuentemente, y echando una mirada me llamó la atención un tema mencionado como 2morrow Night (muestra a la derecha).

Lo interesante es que siguiendo el link de descarga en GitHub descubrí que Chris Kempson, el autor, se tomó el trabajo de brindar este mismo tema (y sus variantes) en muchísimas plataformas, como BBEdit, Coda, Eclipse, Expresso, GEdit, Emacs, editores de JetBrains, la terminal de OS X, Visual Studio y muchos otros. Una labor obsesiva e invaluable. Empecé a bajar algunos de ellos, y después me di cuenta que era más fácil tenerlos todos, así que fui a mi consola y:

> git clone https://github.com/ChrisKempson/Tomorrow-Theme.git
Cloning into Tomorrow-Theme...
remote: Counting objects: 445, done.
remote: Compressing objects: 100% (228/228), done.
remote: Total 445 (delta 225), reused 425 (delta 208)
Receiving objects: 100% (445/445), 940.89 KiB | 332 KiB/s, done.
Resolving deltas: 100% (225/225), done.

…y en 10 segundos tenía todos a mi alcance. Me sigue maravillando la cantidad de cosas que quedan cada vez más a nuestro alcance desde GitHub u otros recursos en la nube.

Como dije, Chris se tomó el trabajo en serio y todas las variantes por plataforma están en el formato correcto, con lo que al hacer doble clic sobre los archivos, en la mayoría de los casos, el editor los agrega directamente (en mi caso, TextMate y Terminal lo hicieron, en Vim lo abre y hay que ejecutarlo, ya que es un script completo).

Si les gusta probar temas, pueden tomar esto como mi regalo de navidad.

Si no, aprovecho igualmente para desearle felicidades a todos los lectores.

 

martes, 6 de diciembre de 2011

Global Day of Coderetreat

conways-sql

El pasado sábado 3 tuvo lugar el Global Day of Coderetreat, un evento que aglutinó a 2200 desarrolladores en 90 locaciones alrededor del mundo. El raid comenzó en la costa este de Australia y culminó en la costa oeste de América.

Coderetreat

Un coderetreat es un evento en el que programadores realizan una práctica intensiva, generalmente de un día de duración, focalizando en los fundamentos del diseño y desarrollo. Suelen resolverse problemas sencillos (un clásico es el Juego de la vida de Conway) en un entorno en el que solo es importante aprender, sin las presiones día a día. Mas información aquí [inglés].

Por supuesto, cualquiera que lo desee puede organizar un coderetreat, mas información aquí y aquí, ambos en inglés.

Mas allá de la lectura de libros, papers, listas de discusión y artículos especializados, el verdadero aprendizaje en el que el desarrollador mejora sus habilidades esta en la práctica. Esto es lo que motiva el coderetreat (o coding katas y coding dojos).

En Buenos Aires

La edición de Buenos Aires tuvo lugar en las oficinas de Kleer, organizada por el anfitrión con la colaboración y apoyo de Kinetica Solutions y 10Pines.

El resultado fue muy interesante. Participaron desarrolladores de distintas tecnologías (Cobol entre ellas) y los asistentes intercambiaron entornos de programación: Ruby, .NET, Java y hasta Transact-SQL. Este último caso (en la imagen que ilustra este post) fue el mas llamativo no solo por el entorno inusual de desarrollo, también porque fue el único que logro llegar a una implementación funcional.

Todos los presentes, invariablemente y en cada una de las iteraciones de trabajo, reportan haber aprendido algo nuevo. Esto es característico de la práctica relajada, libre de presiones.

A quien este interesado en este tipo de eventos recomendamos asistir a los Yoseki Coding Dojos gratuitos organizados por Kleer el primer miércoles de cada mes.

 

miércoles, 23 de noviembre de 2011

Video: Migrando el modelo de negocio de SaaS a PaaS, por Andrés Vettori

Andrés Vettori

Esta es la última de las sesiones de la reciente Jornada de Arquitectura de Software organizada por el MUG en UADE, a cargo de Andrés Vettori, CTO de VMBC y reconocido miembro de la comunidad de desarrollo en Argentina.

De hecho, Andrés es casi un prócer para mucha gente, desde hace muchos años, estando al frente de un equipo de desarrollo dentro de una multinacional metalúrgica de capital argentino, donde tuvo la oportunidad de liderar muchos proyectos de software de base por donde pasaron muchos de los desarrolladores más conocidos y respetados en el mercado local actualmente, que aprendieron con él mucho sobre la manera de encarar los problemas, lidiar con tecnología cambiante y balancear las presiones del negocio con una visión de largo plazo.

Andrés es también autor de Retina, uno de los primeros ORM para .NET, y un blogger técnico muy afilado.

En la charla, Andrés cuenta cómo la sofisticación del tipo de aplicaciones que desarrolla su equipo para los clientes de su compañía exigían cada vez más flexibilidad y menores tiempos de desarrollo y puesta en marcha, por lo que lentamente fueron virando su modelo y la arquitectura subyacente de Software como Servicio (SaaS) a una Plataforma como Servicio (PaaS) que brinda mejor soporte a su equipo, permitiendo separar los esfuerzos de aplicaciones propiamente dichas del desarrollo de la plataforma subyacente. La presentación está disponible en su Skydrive.