viernes, 27 de enero de 2012

Ya llegó Ruby 3.2

Ruby On RailsYa se liberó una nueva versión de Ruby on Rails, uno de los más famosos frameworks para desarrollo web. De hecho, se liberó la 3.2 y casi inmediatamente la actual 3.2.1 resolviendo algunos temas menores aparecidos en cuanto la primer tanda de desarrolladores comenzaron a probar en masa.

Las características principales de la nueva versión son:

Modo de desarrollo y ruteo más rápidos

Mientras que las versiones anteriores de Rails re-evaluaban el código todo el tiempo durante el modo de desarrollo, la actual toma la idea de ActiveReload y solamente re-evalúa el código que haya sido modificado, acelerando mucho el ciclo de prueba-corrección-nueva prueba.

También se optimizó mucho la velocidad de resolución de rutas, incorporando el nuevo motor Journey.

Explicación de consultas

La nueva versión de ActiveRecord agrega un método explain que devuelve el detalle de resolución de una consulta, facilitando entender la forma en que el motor la resolvió para poder analizar la conveniencia de modificar índices o relaciones. De hecho, en el modo de desarrollo cualquier consulta que tarde más de cierto tiempo (medio segundo, por omisión) explica su resolución en la consola, como una medida de alerta que ya incluye el primer paso del diagnóstico.

Logging con etiquetas

La nueva versión de ActiveSupport brinda especial flexibilidad para poder dejar constancia en los logs de los dominios, usuarios, id de petición y otros datos que facilitan el análisis de operaciones o problemas en ambientes con muchos usuarios.

 

Los interesados en probar la nueva versión, pueden descargarla del sitio oficial. Como siempre, utilizando RVM se puede probar en paralelo con cualquier otra versión que tengamos instalada.

Si son usuarios de Mac (sobre todo si usan Mac OS Lion) ahorren tiempo leyendo las instrucciones del amigo Luis Petek sobre cómo sortear algunos detalles menores con ese entorno durante la instalación.

 

viernes, 20 de enero de 2012

C++ sigue siendo relevante (y está de moda de nuevo)

El Mapa de C++

Mientras que el Assembler (mi primer lenguaje de programación) perdió gran parte del brillo salvo para quienes programan para una plataforma exclusiva de hardware, C y C++ siguen siendo los lenguajes preferidos para gran parte del desarrollo de aplicaciones que requieren alto desempeño y optimización de recursos.

Es cierto, son lenguajes complejos y un tanto problemáticos (un gran poder conlleva una gran responsabilidad, decía el tío de Spiderman), y en la práctica pocas aplicaciones se escriben completamente en C++ pero hoy día pocas aplicaciones se escriben en un único lenguaje, de todas maneras (entre manipulación de datos, scripting, lógica, etc, casi siempre usamos dos o tres sin darnos cuenta). En el caso clásico de los juegos, por ejemplo, los motores de animación, detección de colisiones, etc, muchas veces se escriben en C++ mientras que la lógica final suele escribirse a más alto nivel, en lenguajes como LUA o Python.

Pero C/C++ siguen manteniendo un amplio reinado (como puede verse en este mapa creado por Elena SagalaevaVladimir "Jim" Gorshunin), y su avance sigue siendo importante aun cuando usamos lenguajes dinámicos o compiladores a demanda (estilo Java/.NET), porque los motores por debajo son cada vez más eficientes gracias a los progresos en C++, en algún punto. También, el auge de los dispositivos móviles (teléfonos y tabletas), ha hecho que la economía de recursos y el tiempo de respuesta  (sobre todo en interfaces multitouch) sea nuevamente un tema crítico.

Entre otras cosas, estos lenguajes siguen siendo casi únicos en la capacidad de determinar el consumo de ciclos de procesador y memoria en forma explícita, y los agregados a C++ 11 lo han hecho un poco más flexible y -un poco- menos peligroso, al utilizar técnicas modernas como inferencia de tipos, mejoras en el soporte de genéricos, inicializadores, expresiones lambda, todo un nuevo modelo para ejecución de tareas en múltiples hilos, incluyendo variables por hilo de ejecución, soporte para recolección de memoria, y muchísimas otras características basada en la biblioteca estándar, como soporte de tuplas y tablas hash, expresiones regulares, punteros inteligentes, meta-programación a través de plantillas, y muchísimo más.

Para una lista completa de novedades sobre el estándar aprobado recientemente, incluyendo preguntas frecuentes, pueden leer este documento mantenido por el creador de C++, Bjarne Stroustrup.

Finalmente, demostrando que el interés por el código nativo y la nueva versión de C++ es generalizado entre los participantes más activos en la industria, en los primeros días de febrero se realizará en Redmond, Washington, EEUU (dentro de uno de los auditorios del Campus de Microsoft) la conferencia Going Native 2012, que cuenta con un interesantísimo grupo de expositores (vean debajo los nombres y las empresas de las que provienen). El evento podrá ser presenciado en vivo o más tarde a demanda, desde la misma página.

Día 1 (2 de febrero)

Dia 2 (3 de febrero)

Espero que los programadores nativos los disfruten.

viernes, 30 de diciembre de 2011

Balance del año en Code & Beyond

Será porque somos geeks y nos gustan los números y las estadísticas por lo que creo que terminando el año es un buen momento para hacer un resumen de la actividad de este blog.

Como en el post que publiqué al llegar a las 10.000 páginas vistas, en este les contaré algunos datos sobre ustedes, lectores, en general, para que cada uno vea si se siente representado o no, y sepan que no están solos, después de todo.

Como la edad del blog es apenas superior al año (arrancó a fines de octubre de 2010) los números son de la historia completa, no de los últimos 12 meses (sino 14).

Los números totales

En total publiqué hasta hora 190 posts (uno de ellos, hace poco, de un invitado, Carlos Peix), que tuvieron en total (hasta el momento en que escribo esto) 40.795 vistas.

Pueden ver la distribución en el tiempo en este gráfico:

Evolucion

Los post más leídos

Del primero supongo que tendrá que ver con el auge del tema, el segundo no me extraña porque Diego es un orador excelente, y del tercero supongo que hubo en su momento poca información (y aun hoy la hay, hasta que salga una Beta de Windows 8).

¿Cómo llega la gente al blog?

Es claro que la gente llega más por estos lares buscando algo, pero Twitter mantiene su influencia:

Referentes

Estimo que debería sumarse el tráfico proveniente de t.co (un servicio de abreviatura de URLs que se utiliza fundamentalmente desde los tweets) al de Twitter mismo, pero obviamente si sumamos todos los Googles regionales, queda claro lo que ocurre, aunque también empezamos a ver la distribución geográfica de los lectores. Me llamó la atención que haya una cantidad de gente (aunque sea menor) referida por Facebook, donde no participo activamente. Supongo que será en parte ecos de Twitter replicado por allí.

Como la mayoría llegan al blog a través de Google, es interesante ver qué es lo que buscan:

Búsquedas

¿De dónde vienen los lectores?

La mayoría de los lectores siguen siendo compatriotas míos, y sigo considerando que mucho del tráfico que figura proveniente de EEUU puede en realidad venir de América Latina a través de proxies o mecanismos que desvían ese dato. La sorpresa son los ucranianos. З Новим Роком всіх!

Distribución Geográfica

Navegadores y Sistema Operativo

Desde este punto de vista se sigue notando una distribución similar a marzo. Los desarrolladores (que asumo son mayoría en esta audiencia) siguen usando predominantemente FireFox, con Chrome acercándose cada vez más, y Explorer reduciéndose lentamente, a pesar de que la mayoría sigue usando Windows.

Los usuarios de Mac, de todas maneras, subieron de un 11% en marzo al 14% actual, y los de *nix sumados subieron de 10% en marzo a 11%. Trataré de investigar cuáles son los "otros Unix", ya que llama la atención la cantidad (parece que no soy el último fanático de FreeBSD, después de todo). También empezaron a ser mayores los lectores desde iOS y Android, lo que resulta natural.

Navegadores

y

Sistemas Operativos

Como siempre, aprovecho para agradecer a los lectores por la paciencia y espero que el contenido les siga resultando útil. Sugerencias, quejas o consejos espirituales pueden ser enviados vía Twitter a @CodeAndBeyond.

Espero que hayan tenido un buen año y les deseo ¡lo mejor para el próximo!

jueves, 29 de diciembre de 2011

El año del código abierto para .NET (+video: .NET en Chrome!)

OuterCurve Foundation

Se va terminando el año 2011 y mirando hacia atrás desde la perspectiva de la comunidad .NET somos varios los que vemos que este año fue sumamente importante para el código abierto en ese entorno. Y no estoy hablando solamente de Microsoft, ya que .NET ya tiene entidad independiente de su creador original.

Para los que tienen ganas de leer posts más largos y en inglés, recomiendo los de Phil Haack (hasta hace poco líder del ASP.NET MVC en Microsoft, ahora trabajando para GitHub) y Miguel de Icaza (el incansable líder del proyecto Mono).

Este post es un resumen breve del contenido que ellos exponen, con algunas apreciaciones personales.

El modelo Open Source fue algo que Microsoft, con su tradición de secretos y licenciamiento complejo, tardó muchísimo en incorporar. Y más complejo aún el modelo de Free Software, que implica tanto apertura como gratuidad de los productos. Sin embargo, desde hace años, con pioneros como IronPython, el DLR, y más tarde ASP.NET MVC, varios productos de la plataforma de desarrollo empezaron a producirse bajo esta premisa. Un punto culminante de esta iniciativa fue en 2008, cuando Microsoft anunció que comenzaba a incluir jQuery en Visual Studio, colaborando con el proyecto (de manera abierta, como cualquier otro) e incluso brindando soporte sobre el mismo.

Al entender la importancia del movimiento, Microsoft finalmente generó una Fundación llamada OuterCurve (originalmente se llamaba CodePlex, pero usar el mismo nombre que su sitio de alojamiento de código resultaba muy confuso), que como la Fundación Apache, permite resguardar los derechos del código y de los autores en un ambiente controlado. Muchos proyectos hoy existen bajo OuterCurve, aunque hay muchos también directamente en Apache.

Finalmente, este año Microsoft avanzó más en ese sentido, mejorando notablemente las condiciones de búsqueda e integración de código abierto propio o de terceros, a través de NuGet, el administrador de versiones para .NET, inspirado en Ruby Gems y similares. NuGet se integra en Visual Studio o puede usarse en la línea de comando, y permite buscar en un catálogo muy abundante actualmente de componentes abiertos, instalarlos en nuestros proyectos, incluyendo todas sus dependencias, e incluso automatizar tareas relativas a su instalación y uso, como declararlos en configuraciones, generar código u otros artefactos desde la consola, etc. NuGet también facilita mantener actualizadas, si es necesario, todas las versiones de estos paquetes.

Pero como decía al principio, .NET va más allá de Microsoft (y de Windows) desde hace tiempo, y la alternativa principal es el proyecto Mono, que como Miguel comenta en su post, tuvo un año increíble, lleno de novedades. La más importante para el proyecto mismo fue la venta de Novell a Attachmate y el posterior corte del equipo completo de Mono, que rápidamente se reincorporó como Xamarin, un reflejo directo de Ximian, la compañía original de Miguel y Nat Friedman que Novell adquiriese años antes.

Más allá de la reagrupación, que no redujo en lo más mínimo el impulso del proyecto Mono, a pesar de que el equipo de Xamarin se concentró en poner en el mercado MonoTouch y Mono for Android (productos comerciales que les permiten seguir sobreviviendo). Mientras tanto, el equipo de Mono (que excede también a Xamarin, como todo gran proyecto abierto) entregó este año una avalancha de tecnologías (más allá de varias versiones del runtime mismo de Mono y de MonoDevelop, su IDE), incluyendo:

  • .NET en el navegador (al menos en Chrome) a través de Mono corriendo en el Native Client de Google. De hecho, Google mostró Mono en Chrome en un evento reciente, del que dejo el video al final de este post. Aunque el año pasado ya se podía programar en mono y utilizar el compilador estático para ejecutar código dentro de Chrome, este año ya se puede ejecutar el compilador a demanda (JIT) de Mono.
  • MonoMac es una extensión de Mono para programar aplicaciones para Mac OS X en .NET, incluyendo el soporte para Cocoa y todo el entorno del sistema operativo. Se programa utilizando MonoDevelop y algunas herramientas nativas como los diseñadores de XCode.
  • MonoGame (ya comentado antes en este blog) es un port del entorno de desarrollo de juegos XNA de Microsoft, pero abierto y con mayor alcance en plataformas.
  • Sony PlayStation Suite es un framework de Sony para desarrollar juegos en diferentes dispositivos de su línea, completamente basado en Mono.
  • Phalanger es un compilador de PHP, actualmente basado en Mono, utilizando el DLR, que además de ser el motor PHP de mayor rendimiento, permite extender ejecutar cualquier aplicación PHP y extenderla con librerías o aplicaciones .NET.
  • CXXI es una tecnología puente entre C# y C++ que permite ejecutar código de una a otra plataforma, pero también heredar clases entre ellas, sobre-escribiendo métodos o no, o llamando a la clase base, todo de manera muchísimo más sencilla, segura  y multi-plataforma que utilizando COM.
  • Y hay bastante más (ver el post de Miguel para el detalle completo), pero como detalle final, Miguel descubrió que Microsoft mismo utilizó Mono para producir el juego Kinectimals para iOS. ¡Toda una ironía!

Dejo el video (en inglés) del evento de Google Client para que lo disfruten:

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.