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.

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.

miércoles, 16 de noviembre de 2011

Video: ¿Dónde quedó SOA?, por Roberto Schatz

Roberto Schatz

Llegando casi al final de las sesiones de la reciente Jornada de Arquitectura de Software organizada por el MUG en UADE (nos queda una más), le toca el turno a Roberto Schatz, figura emblemática de las Arquitecturas Orientadas a Servicios.

Roberto fue uno de los responsables de la estrategia de Servicios de Banco Galicia en Argentina, construyendo un ecosistema SOA basado en mainframe, y adelantando en mucho el área de Arquitectura internamente, cuando esta disciplina todavía no era demasiado reconocida. Conozco grandes profesionales surgidos de ese grupo, hoy distribuidos por el mundo y con una importante carrera iniciada junto a Roberto.

Años después Roberto se convirtió en el líder de Arquitectura de Software dentro de Microsoft, iniciando actividades junto a la comunidad como los Desayunos de Arquitectos, que aún continúan después de varias generaciones de anfitriones en Microsoft Argentina. Por esa época tuve la oportunidad de colaborar con Roberto en varios proyectos, sobre todo en el sector público, realizando entrenamientos y ayudando a organizaciones a construir aplicaciones.

Más recientemente Roberto estuvo a cargo del área de Arquitectura de ANSES, la Administración Nacional de la Seguridad Social en Argentina, uno de los organismos más grandes y complejos en el país, con aplicaciones que soportan millones de operaciones diarias de toda la ciudadanía.

En esta sesión Roberto recorre un poco el escenario histórico de SOA y algunos de los problemas principales que este estilo encontró en el camino, desde la exageración de los proveedores hasta la paradójica inconsistencia de los estándares. Sin embargo, él sigue rescatando los pilares conceptuales de SOA, y explica por qué sigue siendo relevante, aunque en lugar de basarnos en SOAP utilicemos otros protocolos.

Dejo debajo los cuatro segmentos de unos 15 minutos cada uno.

lunes, 14 de noviembre de 2011

MonoGame: XNA multi-plataforma

Mono Game

Como todos saben, soy bastante fanático de Mono, la implementación de código libre y abierto de .NET, liderada por Miguel de Icaza.

El año pasado se inició un proyecto llamado inicialmente XNATouch, cuyo objetivo era permitir portar juegos desarrollados en XNA (la plataforma para desarrollo de juegos en XBOX y Windows Phone) a iOS (iPhone, iPod y iPad). El proyecto avanzó bastante, cambió de nombre a MonoGame, y el mes pasado llegó a su versión 2.0, extendiendo el alcance de iOS a Android, Linux, Windows y Mac OS, y de paso, mudándose a GitHub.

El proyecto es muy interesante porque brinda un mecanismo sólido de desarrollo de juegos para múltiples plataformas, algo que es cada vez más requerido por quienes producen para esta industria, sobre todo en los ambientes móviles.

Como ejemplo, este es el código de arranque para ejecutar un juego desarrollado en XNA en iOS (utilizando MonoTouch):

using MonoTouch.Foundation;
using MonoTouch.UIKit;

using Microsoft.Xna.Framework;

namespace MonoGame.Samples.Storage
{
	[Register ("AppDelegate")]
	class Program : UIApplicationDelegate
	{
		private Game1 game;

		public override void FinishedLaunching (UIApplication app)
		{
			// Fun begins..
			game = new Game1();
			game.Run();
		}

		static void Main (string [] args)
		{
			UIApplication.Main (args,null,"AppDelegate");
		}
	}
}

Por ahora el framework soporta solamente juegos 2D, y el API de 3D es el foco principal de trabajo para la versión 3.0. Si está disponible el stack de networking suficiente para permitir jugadores simultáneos dentro de un mismo segmento de red, sin importar la plataforma en que estén ejecutando el juego.

Para quienes quieran ver el proceso en más detalle, recomiendo esta serie de 4 artículos de Alfredo Machin, en las que describe el proceso de migración de un juego XNA a Mac OS (utilizando MonoMac): Parte 1, Parte 2, Parte 3, Parte 4.

 

viernes, 11 de noviembre de 2011

Se acaba Flash, poco a poco (+video)

Adobe Flash

Después de mucho ruido en la comunidad a partir de la decisión de Apple de no soportar Flash en iOS, hace más de un año atrás, esta vez fue Adobe quien decidió dejar de insistir con una plataforma que efectivamente nunca funcionó correctamente en dispositivos móviles.

En un comunicado anteayer, Danny Winokur, gerente general de desarrollo interactivo de Adobe expresó claramente que Adobe dejará de desarrollar Flash para dispositivos móviles (teléfonos y tabletas) para concentrarse en computadoras.

Winokur dice en el comunicado (traducciones mías) cosas como: "Durante los últimos dos años hemos entregado Flash Player para navegadores móviles y provisto la expresividad completa de la web a muchos dispositivos móviles". Personalmente creo que pensar que Flash es definitorio para la expresividad de la web es un acto de arrogancia que Adobe está pagando. Por otro lado, estas versiones de Flash para móviles nunca funcionaron correctamente, por problemas genéricos en su diseño básico, tal como detallara Jobs en su momento, en sus durísimas aclaraciones al vedar este producto en sus plataformas.

El texto continúa explicando el nuevo foco de Adobe respecto a estos dispositivos (el énfasis también es mío): "sin embargo, HTML5 ya es soportado universalmente en los dispositivos móviles principales, en algunos casos exclusivamente. Esto convierte a HTML5 en la mejor solución para crear y desplegar contenido en el navegador a través de las plataformas móviles. Estamos excitados con esto y continuaremos trabajando con los principales jugadores de la comunidad HTML incluyendo a Google, Apple, Microsoft y RIM para producir innovación en HTML5 que ellos puedan utilizar para avanzar sus navegadores móviles".

Me suena como una dósis de realidad, y también una manera de tratar de mantenerse relevante en un escenario que claramente les ha restado protagonismo. Más allá de herramientas de edición (algo en lo que Adobe todavía mantiene un liderazgo considerable) no veo cuánto puedan aportar a los navegadores, que realmente avanzan tecnológicamente liderados por Mozilla, Google y Apple, seguidos por Microsoft que está comenzando a ponerse a tono.

Como cierre de la noticia, les dejo un video (en inglés) de unos dos minutos de una entrevista en la que Jobs explicaba brevemente el porque veía a Flash como una plataforma nociva para la web, sobre todo desde el punto de vista móvil.

miércoles, 9 de noviembre de 2011

Video: Arquitecturas y Organizaciones, por Diego Fontdevila (+ invitación)

Diego Fontdevila

Comparto con ustedes otros de los vídeos de la reciente Jornada de Arquitectura de Software organizada por el MUG en UADE. Esta vez le toca el turno a Diego Fontdevila y su sesión sobre las similitudes y ecos entre las arquitecturas de software y las organizaciones que las construyen o mantienen.

Diego es uno de los socios fundadores de Grupo Esfera, una empresa dedicada a consultoría, desarrollo y capacitación con fuerte foco en la plataforma Java y otras tecnologías de software libre. Diego también es docente en la UBA, UNTREF y UNLAM, y está estudiando en el programa de Software Engineering Management de Carnegie Mellon y el SEI.

Nos conocimos durante Agiles 2008, la primer edición de las jornadas latinoamericanas, y nos hicimos amigos a través de los años y las actividades conjuntas en torno a esta comunidad. Tuvimos la oportunidad de colaborar en algunos proyectos e incluso publicamos juntos un paper sobre arquitectura y métodos ágiles que también presentamos varias veces, siempre agregando detalles.

En esta sesión Diego habla sobre la relación entre las formas de las organizaciones y las estructuras tecnológicas que engendran, y cómo es altamente improbable poder quitarles la impronta que una impone a la otra, aportando visiones de diferentes disciplinas e ideas de varios autores y vertientes. La sesión da para un intenso debate o mas participación, y para eso Diego va a repetirla la semana próxima en la próxima reunión de Agiles @ Buenos Aires. Como siempre, este evento es abierto y gratuito, pero requiere registro previo.

Les dejo el video, en 4 partes de 15 minutos aproximadamente.

martes, 8 de noviembre de 2011

Video: Arquitectura Orientada a la Web, por Diego Gonzalez

Diego Gonzalez

Siguiendo con las sesiones de la reciente Jornada de Arquitectura de Software organizada por el MUG en UADE, esta vez publico el video de la sesión de Diego Gonzalez acerca de arquitecturas centradas en la web.

Diego es uno de los fundadores de Lagash, una consultora argentina que se ha expandido a algunos otros puntos de América Latina, y que es reconocida en el mercado por la capacidad de su gente y por un espíritu innovador y creativo a la hora de resolver problemas, del que Diego es parcialmente responsable con sus socios. Desde hace muchos años tengo el placer de trabajar de tanto en tanto con Diego y su equipo, e incluso hemos llegado a compartir una cátedra de Arquitectura de Software.

En su sesión, Diego realiza algunas consideraciones generales en cuanto a arquitectura, y después indaga en las características que la web ayudó a establecer, y a una serie de tendencias que le parecen las más importantes a tener en cuenta en aplicaciones modernas.

Dejo a continuación las cuatro partes del video, de unos 15 minutos cada una.

lunes, 7 de noviembre de 2011

jQuery 1.7 disponible

jQuery

La más popular de las bibliotecas de JavaScript, instrumental en cambiar el panorama de este lenguaje, ha sido actualizada una vez más.

Esta versión 1.7 ya está disponible para descarga tanto en el sitio oficial (versión completa o minimizada) como en las redes de distribución de contenido de Google y Microsoft, desde donde conviene apuntarlas en nuestros sitios web para garantizar la mejor eficiencia de acceso.

Algunas de las novedades principales, además de correcciones y mejoras generales, son:

Nueva API de eventos on / off:

Esta sintaxis unifica diferentes maneras de enlazar eventos como las anteriores delegate() o bind(). La sintaxis completa es:

$(elements).on( events [, selector] [, data] , handler );
$(elements).off( [ events ] [, selector] [, handler] );

Ejemplos de uso:

$('form').on('submit', { val: 42 }, fn);

$(window).off('scroll.myPlugin');

$('.comment').on('click', 'a.add', addNew);

Enormes mejoras en el rendimiento de eventos delegados

Muchos otros frameworks basados en jQuery, al igual que muchas aplicaciones complejas hoy día, usan eventos delegados en forma cada vez más intensiva, por lo que el equipo hizo un arduo trabajo de investigación de los escenarios más típicos y logro mejorar el rendimiento de muchas operaciones en forma dramática. Vean el siguiente cuadro comparativo de velocidad de ejecución de las pruebas en diversos navegadores:

Eventos Delegados en jQuery 1.7

Soporte mejorado para HTML5 en Internet Explorer 6, 7 y 8

Aun utilizando bibliotecas como Modernizr o html5shiv, hay tags como <section> que eran eliminados por estos navegadores. Esta versión de jQuery (que no reemplaza las bibliotecas mencionadas) permite seguir manipulando estos elementos en métodos como .html().

Mejoras en jQuery.Deferred

El objeto jQuery.Deferred es parte del API para ejecución asincrónica. Este objeto representa una promesa de retorno de un proceso que está ejecutándose asincrónicamente, mientras nuestra aplicación puede seguir trabajando en otra cosa o atendiendo a eventos.

Esto ya funcionaba perfectamente, pero en la nueva versión se ha extendido el objeto para poder manejar notificaciones de progreso, de manera de poder reportar el avance, o poder preguntar por el estado en cualquier momento.

Otras mejoras generales

También se mejoró la activación y desactivación de animaciones para hacer más intuitivo el manejo cuando éstas operaciones están anidadas, se agregó soporte para el AMD API (definición de módulos asincrónicos), que unifica varias otras bibliotecas como RequireJS o curl.js para cargar módulos dinámicamente. jQuery contempla ahora estas operaciones correctamente y deja que los procesos de carga reporten realmente cuando el documento está ready. Finalmente esta versión agrega una función muy útil: jQuery.IsNumeric() que indica si un valor es numérico, algo que no siempre es tan fácil de determinar como parece en JavaScript.

jueves, 3 de noviembre de 2011

Video: Lenguajes dinámicos meta-circulares, por Hernán Wilkinson

Hernán Wilkinson

En la reciente Jornada de Arquitectura de Software organizada por el MUG en UADE, Hernán Wilkinson presentó esta sesión sobre lenguajes dinámicos en el contexto de entornos meta-circulares, un valor agregado a las características básicas de los tipos dinámicos.

Hernán es uno de los principales especialistas locales en programación y diseño orientado a objetos, uno de los miembros fundadores de FAST (la Fundación Argentina de Smalltalk) y organizador de la conferencia anual internacional Smalltalks que se realiza en Argentina en diversas localidades, en forma rotativa (la edición 2011 está corriendo hoy mismo en Quilmes).

Actualmente Hernán es uno de los socios de 10pines, una consultora de entrenamiento y desarrollo de software especializada en metodologías ágiles y buenas prácticas de ingeniería.

En la sesión (de una hora aproximadamente) podrán verlo explicar conceptos generales sobre lenguajes dinámicos, puntualizando la diferencia entre tiempos de evaluación y chequeo de tipos, y profundizando luego en la diferencia de flujo de trabajo al efectuar TDD en entornos meta-circulares como una imagen de Smalltak.

No tengo disponibles los slides de la sesión, pero una buena parte de la presentación incluye ejemplos sencillos en Java y en Smalltalk, con lo que el video es más importante. Van a continuación las cuatro partes de aproximadamente 15 minutos cada una.

miércoles, 2 de noviembre de 2011

Azure Hispano: un foro para discutir sobre Windows Azure en español

Azure

El viernes pasado en las oficinas de Microsoft Argentina, en Buenos Aires, hubo una reunión inicial de un grupo de gente de la comunidad de desarrollo interesada en intercambiar experiencias sobre los proyectos iniciales que se están dando en la región basados en Windows Azure, la plataforma de computación en la nube de Microsoft.

No pude asistir porque coincidía con la Jornada de Arquitectura del MUG, pero se que hubo varios amigos al menos invitados. Uno de los que iniciaron el movimiento fue el Tano Fabio Maulo, quien hizo el anuncio oficial en su blog.

El resultado de la reunión fue básicamente la creación de una lista de correo (o foro) para discutir sobre este tema. La dirección de la lista creada en Yahoo! es:

http://tech.groups.yahoo.com/group/azurehispano/

Por ahora sólo se dio una conversación sobre maneras de escalar automáticamente, pero es bueno ver muchos nombres conocidos en la lista, como el mismo Fabio, la anfitriona Guada CasusoGabriel Szlechtman, Julian Dominguez, Adrián Eidelman, Nico Bello Camilletti, Alejandro Labras, Jorge Fioranelli, Martin Legnoverde, y varios otros, solamente en unos pocos días.

Para los interesados en esta plataforma, un recurso prometedor.

martes, 1 de noviembre de 2011

Video: Equipos Agiles Distribuidos, por Ariel Schapiro

Ariel Schapiro

En la reunión de septiembre de Agiles en Buenos Aires (tomó un tiempo publicar el video, pero finalmente llegó), Ariel Schapiro presentó esta sesión sobre cómo manejar equipos ágiles en contextos distribuidos, algo que hacemos frecuentemente en Southworks, la empresa en la que ambos trabajamos.

Ariel recorrió una serie de desafíos particulares de mantener un enfoque fuertemente iterativo y basado en la comunicación en un contexto de miembros remotos, y comentó muchas de las prácticas que encontramos para minimizar el impacto de la distancia, mapeando los riesgos principales y trabajando preventivamente en minimizarlos.

Pueden ver los slides de Ariel en slideshare.

Todavía no está anunciada la fecha y el tema de la reunión de noviembre, pero en cuanto tenga novedades estaré comunicándolas en este blog.

 

A continuación, el primer segmento de la sesión. Si quieren verla completa, dejo debajo los links a las 5 partes.

Parte 1 - Parte 2 - Parte 3 - Parte 4 - Parte 5

lunes, 31 de octubre de 2011

JUGAR 2011

Jugar

Bastante sobre la fecha, me entero gracias a mi colega Nico Páez que mañana (1ero de noviembre, a las 14:30) se realiza la conferencia JUGAR 2011 en el Aula Magna del ITBAAv. Eduardo Madero 399, Buenos Aires.

Es muy bueno ver a la comunidad argentina de Java moviéndose de nuevo y organizando un buen temario como este.

Alguna de las charlas (según la misma organización):

Dan Diephouse de MuleSoft (Ingles)
Nos va a contar la experiencia y los desafios que enfrentaron al crear el primer iPaaS del mercado. Caidas de EC2, escalar MongoDB, las ventajas y desventajas de ElasticSearch/Fume, muerte del OS. Como lograron crear un servicio escalable y redundante sin punto unico de fallas en tiempos tan cortos.

Paulo Caroli de Thoughtworks (Ingles)
Paulo va a entrar en detalles sobre Kanban, y los limites que impone al Trabajo en progreso. Va a presentar una forma donde flexibiliza los limites de Kanban usando un metodo llamado objetivo-varianza. Donde el equipo controla  el trabajo en progreso usando el objetivo y varianza. 

Julio Faerman de Red Hat (Ingles)
JBoss es una comunidad open source muy activa desarrollando mas de 80 projectos. Algunos son muy conocidos como el application server y hibernate, pero otras pueden ser tan valiosos no tienen la misma publicidad. En esta charla Julio va a presentar todos los projectos activos de JBoss, como se usan en soluciones y como pueden mejorar la tuya.

Jose Alvarez Muguerza de Turmeric - Turmeric SOA
Jose nos va a presentar el proyecto Turmeric. Es una plataforma SOA para desarrollar, implementar, ejecutar y monitorear servicios y clientes. Esta escrito en Java y sigue los estándares SOAP, XML, JSON, XACML, etc.), y soporta WSDL (SOAP style - Doc Lit wrapped mode y REST style). Turmeric es la versión Open Source de la plataforma SOA usada por eBay para su negocio.

Matias Bagini de JRapid - Java en la nube
En los últimos años surgieron nuevas plataformas para alojar aplicaciones Java en la nube. Google App Engine, Heroku, AWS Elastic Beanstalk, CloudBees, CumuLogic, CloudFoundry y OpenShift son algunas de estas nuevas propuestas. Durante esta sesión haremos una comparativa y mostraremos cómo publicar aplicaciones Java utilizando estas plataformas.

Mariano Cortesi y Juan Codagnone de Zauber - Netty
Una introducción a a servidores no bloqueantes, sus usos, sus ventajas y como implementarlos usando jboss Netty

Sebastian Scarano y Jorge Aliss - Introduccion a Play! Framework
Desarrollaremos una aplicación paso a paso de manera interactiva, para mostrar las ventajas de este framework que trae la agilidad y facilidad de uso de frameworks como rails y django al mundo Java.

Gustavo Brey de Red Hat - Web Frameworks
El objetivo es una rápida introducción a frameworks web actuales y emergentes, para crear aplicaciones web y describir sus ventajas y desventajas. Este es un resultado de una investigación luego de haber desarrollado aplicaciones Web por más de 10 años en diferentes plataformas y lenguajes.

Esperemos tener mucha más actividad alrededor de esta renovada comunidad de Java.

jueves, 27 de octubre de 2011

Pragmatic Programmers: Aprovechando el poder de la web (+video)

The Pragmatic Programmer

Los lectores o conocidos desde hace tiempo ya saben que tengo mucho respeto y admiración por Andy Hunt y Dave Thomas, los Pragmatic Programmers. Su primer gran éxito en conjunto fue el libro que le dio título a su emprendimiento editorial: The Pragmatic Programmer: From Journeyman to Master, de 1999.

En este libro Andy y Dave destilaron una enorme cantidad de sabiduría aplicada a las labores, prácticas y actitudes básicas de la programación, justo antes de que algunas de ellas se convirtieran en parte del Manifiesto Agile poco tiempo después (siendo Dave uno de los firmantes iniciales).

En el libro apuntan a las premisas básicas del uso de editores, depuradores, control de versiones, generación de código, pruebas unitarias, meta-programación, cuestiones de diseño, refactorización, manejo de requerimientos, y muchísimo más.

Pero después del éxito de este libro, que es uno de los más populares de todos los tiempos en nuestra profesión (para mi, junto al decano The Mythical Man MonthCode Complete y los más recientes Clean Code y The Clean Coder), Andy y Dave fundaron una editorial bastante particular, The Pragmatic Bookshelf dedicada a publicar libros dedicados al desarrollo de software a costos realmente económicos y cubriendo una variedad de temas a los que las editoriales grandes generalmente no llegan por ser demasiado específicos.

Así llevan más de 120 títulos publicados, y además de editarlos en papel se pueden comprar en ediciones electrónicas, sin mecanismos de protección. Esto me parece destacable. A pesar de ser una editorial muy pequeña, ellos tienen un negocio que sobrevive y con altísima calidad y nivel de servicio, sin necesidad de "molestar" al usuario por temas de propiedad intelectual. De hecho, el único mecanismo que utilizan es un código de confianza: cuando uno compra un libro electrónico puede descargarlo en formato PDF, Mobi (para el Kindle) o EPub (para iOS, Android, etc). Lo único que ellos hacen es generar una copia personalizada con el nombre del cliente en los pies de página. Así, si alguien desparrama copias, al menos se hace responsable personal.

Otra cosa que les permite este modelo de negocio es permitir leer versiones preliminares de los libros mientras el autor todavía está escribiéndolo, a un precio reducido y con opción de recibir la edición impresa final o no, y por supuesto con posibilidad de ir comentando el avance con el autor y colaborar con él.

Pero toda esta publicidad gratuita (la hago sólo porque soy un cliente felíz) surgió por otro servicio sorpresa que agregaron esta semana y me comunicaron por email: ahora permiten sincronizar las sucesivas versiones de los libros con una cuenta personal de Dropbox, un servicio pionero en sincronización de archivos en la nube. Dropbox tiene la característica de ser el más exitoso de los múltiples competidores en ese área, basándose en la premisa de mantener el servicio sencillo en cuanto a características, pero siempre extremadamente funcional.

Si, también soy un cliente feliz de Dropbox, cuyo servicio básico y gratuito alcanza y sobra para uso personal y me ha permitido moverme y mantener sincronizados ambientes entre Windows, Mac OS X y móviles, y me liberó de la obsesión por los backups. Pero Dropbox también es un caso interesante para la comunidad Python, ya que usan este lenguaje para cubrir múltiples plataformas cliente, y también del lado del servidor.

Dejo para el final un video (en inglés) Rian Hunter, uno de los ingenieros de Dropbox contando detalles de la implementación en la PyCon 2011.

Ahora, volviendo al tema principal, lo que PragProg agregó a sus servicios es la integración con Dropbox, de manera que cada vez que hay una nueva versión disponible de uno de los libros que tengo comprados (ya sea una nueva versión preliminar o una nueva edición de uno ya publicado con agregados o correcciones).

Lo que me llamó la atención al recibir la noticia fue la experiencia completa como usuario de este mecanismo, que comenzó al recibir el mail con novedades de la editorial y esta noticia en particular:

Integrate DropBox

Al hacer click en esta parte del mensaje, mi navegador me llevó al sitio web, a una página a con todo el detalle, donde me explicaba cómo configurar esta opción en mi perfil:

DropBox options

Y en esta parte de mi perfil pude seleccionar qué formatos me interesan personalmente, lo que es muy prolijo. A continuación me redireccionó al sitio de DropBox utilizando (me di cuenta porque conozco el mecanismo) oAuth. De esta forma llegué al sitio de DropBox, donde me identifiqué con mis credenciales de ese servicio (que nunca llegaron al de la editorial), y el sitio de DropBox, que soporta este protocolo, me informó que PragProg.com deseaba establecer un vínculo, compartiendo mi identidad (mi nombre de usuario de DropBox y ningún otro dato).

Lo que me sorprendió gratamente es ver cómo dos servicios muy buenos permiten potenciar sus características utilizando protocolos estándares, brindando algo novedoso, seguro y práctico. Me pareció bueno compartirlo como un buen ejemplo de aprovechamiento de la infraestructura web actual para lograr productos de software más potentes.

 

 

martes, 25 de octubre de 2011

Jornada de Arquitectura de Software en Buenos Aires (gratuita)

Grupo de Usuarios MicrosoftEl próximo viernes 28 de octubre, en la UADE (Lima 717, puerta M, Ciudad de Buenos Aires) el Grupo de Usuarios Microsoft de Argentina organiza una jornada dedicada a Arquitectura de Software.

La arquitectura de software es un área sumamente interesante para todos los que llevamos un tiempo en la industria, aunque también está plagada de planteos grandilocuentes y excesos.

En esta jornada que he tenido el placer de coordinar, y en la que voy a realizar una breve apertura, he tenido especial cuidado en convocar a personalidades que conjugan un amplio marco teórico con una extensa carrera práctica y un estilo pragmático y realista a la hora de encarar la labor de arquitectura, lejos de las torres de marfil y muy cerca de los problemas reales de los clientes, y trabajando codo a codo con los equipos de desarrollo, de los que son un miembro más.

La jornada es gratuita pero requiere inscripción previa.

El programa comprende:

11:30 Acreditación y café 
12:00 Apertura: De vuelta a la sencillez - Martin Salias
12:30 Lenguajes dinámicos y su impacto en ambientes meta-circulares - Hernán Wilkinson
13:30 Web Oriented Architecture - Diego Gonzalez
14:30 Coffee break
15:00 Ecosistemas sociotécnicos: Idilios y desencuentros entre arquitecturas y organizaciones - Diego Fontdevila
16:00 ¿Dónde quedó SOA? Nuevos modelos corporativos - Roberto Schatz
17:00 Virando el modelo de negocio de SaaS a PaaS - Andrés Vettori
18:00 Cierre

Creo que va a ser un evento muy interesante y disparador de muchísimas ideas. Si alguno de los asistentes lee este blog, me encantaría conocerlos. ¡Nos vemos!

viernes, 7 de octubre de 2011

¡Agiles 2011 la próxima semana!

Ágiles 2011Finalmente llega el evento que viene organizándose desde el cierre de Agiles 2010 en Lima, Perú.

Nuevamente en Buenos Aires, en la Universidad de Palermo (Mario Bravo 1050, esquina Córdoba), y desde el martes 11 al jueves 13 de octubre, llega 4ta edición de la conferencia latinoamericana de metodologías ágiles.

Este año serán dos días con más de 50 presentaciones y talleres, más un día completo de Open Space.

Pueden ver el programa completo del día 11, el día 12, y el esquema de tiempo del 13, aunque recuerden que el Open Space no tiene programa porque las actividades se proponen y diagraman en el momento, por la audiencia misma.

La conferencia contará con keynotes plenarias los tres días a cargo de personalidades destacadas como:

Jeff PattonJeff Patton (el día 11 a las 9:30)

Jeff se especializa en la aplicación de técnicas de diseño centradas en el usuario para mejorar los requerimientos, planificación y productos. Algunos de sus escritos más recientes en la materia pueden encontrarse en www.AgileProductDesign.com y en el libro de Alistair Cockburn “Crystal Clear”.

Su libro de inminente lanzamiento dentro de la serie Agile Development de Addison-Wesley brinda consejos tácticos para quienes buscan entregar software útil, fácil de usar y valioso.

Su sesión plenaria (en inglés) se titula: “Us, them, and the problem with common agile practice”, y se enfoca en el establecimiento de un vocabulario y conceptos comunes sobre el valor de negocio que minimicen la distancia entre el equipo construyendo la solución y los clientes o usuarios que son destinatarios, facilitando el diálogo.

Jeff dictará también durante la conferencia un taller de 4 horas titulado “Product Discovery with User Story Mapping”.

James ShoreJames Shore (el día 12 a las 9:30)

James es uno de los líderes de la comunidad de desarrollo de software ágil.

Orador popular sobre estos temas y ha aparecido en muchas publicaciones de la industria incluyendo IEEE Software, SD Times, y Better Software. Su trabajo es referenciado frecuentemente en la prensa y su blog  Art of Agile está frecuentemente entre los primeros veinte recomendados en AgileDaily. También es co-autor de The Art Of Agile Development (O’Reilly, 2007).

Su sesión plenaria (en inglés) se titula “Agile, Past and Future” y se enfoca en los diez años transcurridos desde la firma del Manifiesto Ágil, y en base al pasado reflexiona sobre el estado actual de la práctica y los desafíos de las metodologías y la comunidad de aquí en adelante.

James dictará también durante la conferencia un taller de 4 horas titulado “Agile Product Management”.

Juan Gabardini (el día 13 a las 17:00)

Juan es uno de los iniciadores de la comunidad ágil local, y uno de los motores principales de las conferencias Ágiles y el Agile Open Tour de Argentina. Juan es Ingeniero Electrónico y Licenciado en Sistemas egresado de FIUBA, miembro del IEEE, SADIO, Scrum Alliance, Agile Alliance, Kleer Latinoamérica y Jefe de Trabajos Prácticos en FIUBA, con más de 10 años de docencia universitaria y más de 20 de experiencia en desarrollo de software, enseñanza y consultoría.

Su sesión plenaria será en español, previa al cierre del evento, y se titula “Equipos pequeños y comunidades de práctica”, y trata sobre los beneficios y desafíos que enfrentan los equipos pequeños con miembros que tienen poca experiencia, el manejo de la complejidad tecnológica, las dinámicas grupales, la innovación y las comunidades de práctica.

 

Este es un evento para no perderse, con figuras internacionales, locales, enormes oportunidades de contacto con la comunidad local, colegas, empresas y consultores, y abundante contenido en español, inglés y portugués.

Hay que apurarse ¡antes de que cierre el registro, o se acaben los lugares!

martes, 20 de septiembre de 2011

Video: Google Developer Day en Buenos Aires

Buenos Aires, ArgentinaAyer estuve brevemente en el arranque de Google Developer Day en Buenos Aires, que continúa hoy (ya que a pesar del nombre son dos días). Fue bueno, como siempre, encontrar amigos y compartir alguna novedades.

La charla de apertura se transmitió en vivo a través de YouTube y afortunadamente ya está disponible para que disfruten aquí mismo quienes no llegaron a tiempo.

La agenda completa incluye temas como Google TV, Android, Chrome, App Engine, HTML5, oAuth, OpenID, Google+, App Script, YouTube Live Streaming, y otros temas.

Espero que pronto estén disponible el resto de las sesiones y pueda compartirlas.

Les dejo el video de la apertura, de aproximadamente una hora y cuarto de duración. Pueden saltear los primeros minutos de la cuenta regresiva, y queda sólo una hora.

viernes, 16 de septiembre de 2011

¿Qué significan Windows 8 y su nuevo WinRT? (+videos)

imageEsta semana arrancó la conferencia //build/ (nuevo nombre del tradicional PDC de Microsoft) y el foco principal fue el lanzamiento (en versión preliminar para desarrolladores) de Windows 8 y su nuevo modelo de programación. Para quienes no las vieron, dejo debajo los videos de las charlas de apertura del día 1 (mayor foco en Windows 8) y el día 2 (mayor foco en desarrollo).

Uno de los anuncios más polémicos o complejos fue el nuevo modelo para desarrollar aplicaciones Windows que puedan ser distribuidas a través del próximo Market, siguiendo el modelo popularizado por Apple y al que ya se ha sumado toda la industria, incluyendo Windows Phone.

El siguiente es el diagrama más visto en los últimos días mostrando cómo queda el stack de Windows, y debe tenerse en cuenta que es un diagrama aproximado, porque obviamente simplifica muchas cosas para servir como modelo introductorio:

Plataforma de Windows 8

Básicamente, la mayor novedad está en la sección verde del diagrama (aplicaciones estilo Metro). Este tipo de aplicaciones serán las que puedan distribuirse a través del Market, y su particularidad es que no pueden acceder al API completa de Win32, sino que dialogan contra el API de WinRT, la nueva estrella del mundo Microsoft.

En principio, WinRT es una buena idea. Lo que hace es proveer un contexto de ejecución seguro (similar al de un navegador) para aplicaciones Metro (insisto en que el modelo anterior existe, pero NO se puede distribuir por el Market). Lo que se logra con esto es que todas esas aplicaciones tienen acceso mediado y controlado a los recursos físicos del sistema, y son muchísimo más seguras, aun cuando pueden escribirse básicamente bajo tres paradigmas:

  • En .NET (utilizando el mismo CLR pero con un perfil especial que restringe el API disponible, similar a lo que sucede al escribir aplicaciones en Silverlight), utilizando XAML para el diseño de las interfaces.
  • En código nativo (C/C++) utilizando XAML también, pero sin acceso a Win32, sino a WinRT.
  • En JavaScript, utilizando HTML/CSS para el diseño de interfaces.

Otra característica importante de WinRT es que todas sus API tienen interfaces asincrónicas, salvo las que tienen tiempo de respuesta asegurado inferior a 50 milisegundos. El objetivo de esa decisión es mejorar la respuesta de Windows sobre todo en la interacción con el usuario. Todos sabemos que es normal en Windows tener demoras en el explorador o dentro de las aplicaciones, y mirar por unos segundos la famosa ruedita girando. Con el advenimiento de las interfaces táctiles (uno de los temas más fuertes en Windows 8) esos tiempos de respuesta no son viables. Por eso es importante volver a un modelo más similar al de programación en la web (con JavaScript) basado en operaciones que devuelven callbacks, que liberan el hilo de ejecución hasta que la operación termina.

La contra de este modelo en general es que el nivel de complejidad para manejar callbacks anidados y el control de errores se eleva considerablemente. No es casualidad entonces que tanto en .NET 4.5 como en JavaScript veamos crecer el uso de patrones asincrónicos (en C# 5 a través de las nuevas cláusulas await y async, heredadas de F#) y en JS con la creciente adopción de promesas (utilizando las abstracciones .then() y .when() ) en bibliotecas como jQuery, Dojo y otras derivadas de CommonJS.

Entre otros temores surgidos a partir de las presentaciones del nuevo modelo, está la confusión sobre si .NET ha perdido importancia. Personalmente creo que no, pero Microsoft ha vuelto a las fuentes en algunos sentidos, volviendo a poner énfasis en el código nativo para aplicaciones de alto rendimiento. Los lenguajes manejados dan mayor productividad en general, pero sólo en C/C++ se pueden crear aplicaciones de muy alto rendimiento en velocidad, consumo de recursos e incluso consumo de energía. Estos tres factores no eran tan importantes hasta hace un par de años porque pensábamos nuestra aplicaciones para correr en computadoras de escritorio o servidores, pero el desarrollo de los dispositivos móviles (teléfonos, tabletas, y otros) ponen de nuevo foco en ellos. Y en el otro extremo, aplicaciones del lado del servidor que ahora tenemos que pensar para miles de usuarios concurrentes hacen que tengamos que el ahorro de recursos en alta escala financie con creces el tiempo extra de desarrollo.

En fin, quedan muchos temas disparados que espero seguir tratando más adelante. Cualquier comentario o pregunta son bienvenidos. Les dejo los videos para que se diviertan.

Apertura del día 1 - Windows 8

Apertura del día 2 - Desarrollo y Operaciones

martes, 13 de septiembre de 2011

Video: Programando de a pares con Emilio Gutter

Emilio Gutter

En esta nueva sesión de programación de a pares me sumo a Emilio Gutter para hacer un ejercicio utilizando Java.

Conocí a Emilio a fines del 2006 cuando fuimos compañeros de equipo durante el curso de Certified Scrum Master dado por Tobias Mayer. Nos divertimos mucho durante ese curso, y varios de los que pasamos por ahí nos mantuvimos en contacto después a través de una primer lista de distribución que fue uno de los puntos focales de donde surgió el grupo de organizadores de la primer conferencia de la serie Ágiles: Ágiles 2008.

Emilio lleva más de 10 años trabajando en desarrollo de software y es un desarrollador trotamundos que ha trabajado en proyectos en Argentina, Brasil, UK, USA, Francia, Rumania y Bulgaria, por lo menos. Actualmente es uno de los líderes de su consultora 10pines, que brinda servicios de desarrollo, entrenamiento y coaching, con fuerte foco métodos ágiles, incluyendo un alto compromiso con la calidad y la cultura organizacional.

En el video podrán ver cómo hacemos un ejercicio de diseño en Java, usando Eclipse con JUnit 4 y la biblioteca de mock objects mockito y planeábamos utilizar también harmcrest,una biblioteca de matchers (o predicados) muy útil para realizar aserciones en las pruebas unitarias, pero no alcanzó el tiempo esta vez, así que quedará para más adelante.

Les dejo el video (de aproximadamente 25 minutos) y espero que lo disfruten:

lunes, 12 de septiembre de 2011

Exposición de Videojuegos 2011 en Buenos Aires, 11 y 12 de noviembre

InventEVA2011, la novena edición del evento organizado por la Asociación de Desarrolladores de Videjuegos Argentina se llevará a cabo el viernes 11 y sábado 12 de noviembre en el Centro Metropolitano de Diseño, en Algarrobo 1041, en Barracas.

El evento está aun en proceso de organización final, y hasta el 23 de septiembre está abierta la llamada a propuestas para disertantes en los siguientes formatos:

  • Charlas y Postmortems
  • Workshops (talleres participativos)
  • Debates on‐stage
  • Mesas redondas

Y ésta es la lista sugerida de áreas temáticas (aunque no son excluyentes):

  • Arte
  • Negocios y Producción
  • Game Design
  • Música y Sonido
  • Programación

Las propuestas se reciben en línea en esta página.

Según la definición de los organizadores:

EVA es un espacio de encuentro, diálogo y capacitación. Se trata del evento más importante de la industria local de videojuegos, que año tras año crece en público, invitados y sponsors.
Este año, el foco estará puesto en analizar cómo llegar a nuestro primer blockbuster hasta simplemente tener un valor diferencial ofreciendo servicios de calidad superior.

Por lo que los principales ejes temáticos serán:

  • Creando Valor.
  • Generando marcas de entretenimiento.
  • Agregando valor en los servicios de desarrollo.
  • Futuro de los videojuegos.

Habrá workshops, mesas redondas, conferencias, talleres, business rounds, charlas y expofloor. Se tratarán temas que, de una manera amplia, expandan los horizontes de las empresas nacionales a partir de la participación de importantes Keynote Speakers internacionales, aportando conocimiento y experiencia.

Por ahora el primer invitado especial confirmado es Jonathan Blow, creador del premiado juego Braid.

viernes, 9 de septiembre de 2011

¿Cómo funcionan los navegadores?

Mi amigo y compañero de trabajo Charly Páez compartió el otro día este documento que me parece algo fundamental para todo desarrollador hoy día. Está en inglés, pero no podía dejar de compartirlo con ustedes.

How Browsers Work: Behind the Scenes of Modern Web Browsers”, es parte del portal HTML5 Rocks construido por Google, conteniendo introducciones, presentaciones y guías de referencia.

Como se explica en el prefacio, gran parte de este documento surge de la cuidadosa investigación de la desarrolladora israelí Tali Garsiel sobre las características internas y análisis del código de WebKit (Safari y Chrome)  y Gecko (Firefox) los motores de presentación de código abierto que hoy suman aproximadamente un 60% del uso de la web. Aunque Internet Explorer no puede ser analizado de la misma manera, los lineamientos generales de su arquitectura seguramente no difieren fundamentalmente de lo que este documento cubre.

El contenido completo cubre los siguientes procesos, basados en el flujo típico debajo (dejo muchos términos si traducir para evitar confusiones):

  • El motor de rendering
  • Parsing y construcción del DOM (HTML, CSS, Scripts)
  • Construcción del árbol de render
  • Layout (distribución de los elementos)
  • Painting (la aparición real de los elementos en pantalla)
  • Cambios dinámicos
  • Los hilos del motor de rendering
  • Modelo visual de CSS2

Todo comienza con la descripción de alto nivel de la estructura de los navegadores, resumida en el siguiente diagrama:

El trabajo es bastante extenso y detallado, pero nuevamente lo recomiendo muy especialmente. No importa aprender todo ese nivel de detalle, pero leerlo detenidamente nos permite retener al menos algunos conceptos generales que nos ayudarán a comprender más fácilmente situaciones comunes en el desarrollo web.

martes, 6 de septiembre de 2011

CodeCamp 2011, 15 de octubre en Buenos Aires

imageCodeCamp, el evento anual de desarrollo sobre tecnología Microsoft más grande del mercado local, llega este año el 15 de octubre, el sábado siguiente a la realización de Agiles 2011.

Aunque no está anunciado en el sitio la sede (aún) la sede será la UAI (Universidad Abierta Interamericana), en Av. San Juan 951, Capital Federal.

El evento, como siempre, será gratuito, pero requerirá inscripción previa, la que aún no está abierta, así que a estar atento al sitio web, o al twitter oficial.

Para que vayan teniendo una idea del contenido posible de la conferencia, les anticipo los títulos y presentadores de las propuestas presentadas. Obviamente, queda por delante el proceso de selección, así que no todas quedarán en el programa final, pero pueden darse una idea general de los temas que están dando vueltas, e ir preparándose para ver y preguntar.

  • Construyendo servicios web con WCF Web Apis - Por Pablo Mariano Cibraro
  • Introducción a Node.js - Por Pablo Mariano Cibraro
  • SQL Denali (El futuro aqui) - Por Maximiliano Accotto
  • Herramienta para desarrollo Juneau (el reemplazo de Visual Studio for Database) - Por Maximiliano Accotto
  • Tunning de base de datos - Por Maximiliano Accotto
  • Desarrollando Social Games en Azure - Por Angel J Lopez
  • Jugando con Kinect desde .NET - Por Nicolas Padula
  • Mangos y Ventanas - que hay de nuevo en WP7.1 - Por Jonas Stawski, Miguel Angel Saez
  • Windows 7+1 on the rocks - Por Miguel Angel Saez, Mariano Rempel
  • Clean Code - Por Eric Delahaye
  • Introducción a las Comunicaciones Unificadas - Por Pablo Vernocchi
  • Exchange 2010 - Hardware virtualizado vs Hardware físico - Por Pablo Vernocchi
  • Exchange 2010 High Availability y Site Resilience - Por Pablo Vernocchi
  • Además de tirar código - Por Martin Salías
  • Mono: .NET en todas partes - Por Martin Salías, Carlos Paez
  • Windows Phone 7 "Mango" y los sistemas empresariales - Por Carlos Alejandro Pérez
  • El regreso de SQL Server CE a los móviles - Por Carlos Alejandro Pérez
  • Introducción a SharePoint 2010 como Plataforma de Colaboración - Por Pablo Alejandro Fain
  • Implementación de SharePoint Server 2010 para humanos - Por Pablo Alejandro Fain
  • Entity Framework 4.1 - Code First desde las trincheras. - Por Mariano Sanchez
  • Knockout JS: simplificando el desarrollo de UIs dinámicas con javascript y ASP.NET MVC - Por Ruben Altman, Adrián Eidelman
  • Desarrollo y testeo modular de interfaces HTML5 / MVC - Por Santiago Bustelo
  • Automatizando el testing en .NET - Por Adrián Eidelman, Ruben Altman
  • Pasado, presente y futuro de C++ - Por Rodolfo Finochietti
  • Mobile Web Sites - Por Rodolfo Finochietti
  • Web Sites 100% en JavaScript - Por Rodolfo Finochietti
  • Una vuelta por la nueva plataforma de Desarrollo que se viene! - Por Johnny Halife
  • Juega con HTML5 - Por Matias Iacono, Patricio Santiago Marrone
  • Generación espontánea con T4 - Por Matias Iacono
  • Mirando el espejo - Por Matias Iacono, Boris Angonoa
  • Usando MongoDB desde C# - Por Ruben Altman, Román Gorojovsky Sánchez
  • Un entorno práctico de desarrollo ágil - Por Carlos Peix
  • Desarrollo de soluciones geo-espaciales con SQL - Por Andrés Aiello
  • Gestionando grandes volúmenes de datos con SQL 2011 - Por Pablo García
  • Creando aplicaciones a la velocidad de la luz: desarrollo con Visual Studio 2010 Lightswitch - Por Diego Fidel Ferreyra
  • Desarrollo de Videojuegos Movilizados - Por Sebastian Miserendino
  • El Escritorio del futuro - Por Augusto Alvarez, Alberto Ortega
  • FX para tu escritorio con Remote Desktop Services - Por Augusto Alvarez, German Lagomarsino
  • Estandarización de servidores Windows Server 2008 R2 + herramientas gratuitas - Por Augusto Alvarez, Alejandro Barrionuevo
  • ¡A mover el cuerpo con Kinect! - Por Diego Sisto, Fernando Kahan
  • Tu primer webpart en Sharepoint 2010 - Por Alan Scheinkman
  • Que no te ataquén!!! Desarrollando código seguro en SQL - Por Jose Mariano Alvarez, Andrés Aiello
  • Gestión de la configuración con NuGet y Git - Por Dario Seminara, Nicolas Paez
  • Todo sobre FileStream y FileTable (SQL Denali) - Por Maximiliano Accotto
  • De 0 a 100 con Windows Phone 7 - Por Federico Lois, Daniel Rodolfo Iglesias
  • NoSQL, Map-Reduce y otras yerbas! Programando con RavenDB. - Por Daniel Rodolfo Iglesias, Federico Lois
  • Configuración y Escenarios de Client Access Server en Entornos de Migración - Por Rodrigo de los Santos
  • Microsoft e IPV6 - Por Rodrigo de los Santos
  • Mitos y Leyendas de Windows Phone 7: Sacale el jugo a tu Smartphone - Por Brian Litwak, Ignacio Raffa, Federico Boerr
  • Seguridad en aplicaciones Web - Por Carlos Peix
  • TDDeando Aplicaciones JavaScript - Por José Fernando Romaniello
  • REST: Cómo ordenar café utilizando las nuevas WCF Web API? - Por José Fernando Romaniello
  • Realidad Aumentada: De qué se trata y, ¡manos a la obra! - Por Boris Angonoa, Matias Iacono
  • Windows Azure AppFabric o cómo desarrollar aplicaciones para la nube y conservar el pelo - Por Leandro Boffi
  • Implementando soluciones Sharepoint 2010 en el mundo real - Por Soledad Pano
  • Enamorándose de Knockout.js - Por Leandro Boffi
  • Haciendo WCF simple - Por Mauricio Gentile
  • Desarrollando buenas prácticas con NuGet - Por Mauricio Gentile
  • Conoce las mejores prácticas en el uso de la API de SharePoint - Por Santiago Giovannini
  • Consejos para organizar el contenido en tu aplicación de SharePoint siguiendo las mejores practicas - Por Santiago Giovannini
  • Paseando por Denali, la nueva versión de SQL Server - Por Adrian Gabriel Lopez
  • Haciendo BI rápido y flexible - Por Adrian Gabriel Lopez
  • Aplicaciones ricas en datos sacándole el jugo a SQL Server Denali - Por Adrian Gabriel Lopez
  • Sharepoint 2010, manual para programadores - Por Hernán Veiras
  • Dirigiendo la Orquesta con WF 4.0 - Por Hernán Veiras
  • Compilando en la UI con S# - Por Hernán Veiras
  • Mi primer juego XNA para WP7 y XBOX 360 - Por Pablo García
  • Extendiendo las fronteras de SharePoint 2010: Cómo Windows Phone 7 puede ser un perfecto aliado de SharePoint. - Por Nicolas Ibarra Salazar
  • Creando aplicaciones móviles para la nube: Windows Phone 7 + Windows Azure - Por Nicolas Ibarra Salazar
  • Desarrollando aplicaciones asincrónicas en .Net. - Por Silvio Massari
  • Integrando SharePoint 2010 con Windows Azure: Un nuevo mundo de posibilidades para soluciones empresariales - Por Nicolas Ibarra Salazar
  • MongoDB a todo pulmón - Por Silvio Massari
  • Patrones de diseño NoSql - Por Silvio Massari
  • Agile Automation Testing con BDD: un poco de Cucumber, Specflow, Watin y estamos! - Por Patricia Coronel
  • SharePoint 2010 en la nube: Introducción a Office 365 y desarrollo sobre SharePoint Online - Por Nicolas Ibarra Salazar
  • Mejor MVC – Movilizándote con jQuery Mobile - Por Ignacio Baumann Fonay, Fernando Antivero
  • Microsoft Media Platform Content Manager (open source) - Por Ignacio Jonas, Ezequiel Aranda
  • El futuro de Parallel Programming en Microsoft .NET Framework - Por Christian Carnero
  • A developer overview of Windows Phone 7.1 - Por Christian Carnero
  • Soy un desarrollador .NET pero tengo un IPhone - Por Christian Carnero
  • Como conseguir pareja en una tarde de sábado con HTML5 - Por Pablo Zaidenvoren, Mauro Gandelli, Maximiliano Garcia Rozado
  • Wordpress en Windows Azure - Por Alejandro Banzas
  • Integrando redes sociales en proyectos corporativos - Por David Balogh
  • Reactive Extensions en el Mundo Real - Por Gustavo Javier Machado
  • Introduccion a Windows Azure AppFabric Service Bus - Por Gustavo Javier Machado
  • REST Services "a la carta" - Por Gustavo Javier Machado
  • Una vuelta por F#, Un lenguaje funcional en .NET - Por Gustavo Javier Machado
  • MVC3 Tips y buenas prácticas para el mundo real - Por David Balogh
  • RavenDB, No solo una base de documentos para .NET - Por David Balogh
  • Ya sé, es solo NHibernate compilado, pero me gusta - Por David Balogh
  • Full text search en 60 minutos - Por David Balogh
  • Testeo, luego existo - TDD desde cero - Por David Balogh
  • Creando sitios de internet con SharePoint 2010 - Por Mariano Escurra, Soledad Pano
  • Mejores prácticas utilizando Javascript y JQuery en SharePoint 2010 - Por Soledad Pano, Mariano Escurra
  • Escalabilidad para sitios de alta demanda en Cloud Computing - Por David Balogh
  • Datos en la nube: colas, caché, topics y otras yerbas - Por Leandro Adrián Díaz Guerra
  • Explotando el verdadero potencial de IIS con Windows Server AppFabric - Por Leandro Adrián Díaz Guerra
  • Haciendo inteligencia en tiempo real con StreamInsight - Por Leandro Adrián Díaz Guerra
  • Una Web en pocos minutos con Nuget y Scaffolding - Por Moisés Rivas, Sebastián Henzenn
  • Comunicaciones Unificadas - Por Matías Alfaro
  • TRANSPHONERS te llevamos al futuro! - Por Guillermo Bellmann, Ivana Tilca