martes, 26 de julio de 2011

Patrones de Diseño en JavaScript, por Addy Osmani

imageAddy Osmani es un reconocido diseñador y desarrollador web, experto en jQuery y colaborador del equipo de documentación de ese proyecto.

Recientemente Addy publicó el primer volumen de su libro en línea “Essential JavaScript Design Patterns For Beginners” (en inglés) que me parece un gran trabajo sobre patrones de diseño, cubriendo la definición conceptual de éstos, sus categorizaciones típicas, y finalmente recorre varios de ellos en JavaScript, no como una simple traslación de los patrones originales del GoF, sino apuntando a aquellos que muestran particularidades de JavaScript, y agregando otros muy específicos de este entorno.

Los patrones recorridos para JavaScript son: Creational, Constructor, Singleton, Module, Revealing Module, Observer,
Prototype (que en JavaScript es central), Command, DRY, Façade, Factory, Mixin y Decorator.

Pero Addy no podía dejar de lado jQuery, por lo que cubre también los siguientes patrones de diseño en jQuery (verán algunos repetidos, porque analiza el patrón en el contexto de la biblioteca, no en sí mismo): Module, Lazy Initialisation, Composite, Wrapper, Façade, Observer, Iterator, Strategy, Proxy, Builder, Prototype, Flyweight.

Como valor agregado de este post, les dejo debajo esta presentación de Addy sobre trucos de rendimiento de jQuery:

lunes, 25 de julio de 2011

Google App Engine completó el soporte para Go

La semana pasada el equipo de Google App Engine, la plataforma como servicio para ejecutar aplicaciones en la nube, anunció soporte para Go, uno de esos raros lenguajes nuevos, en este caso generado por el mismo Google, en lugar de surgir del ambiente académico o la comunidad de código abierto.

Esto hace que Go, diseñado para ser un lenguaje de sistema de un nivel apenas superior a C++, eliminando los típicos problemas de manejo de memoria y aportando características específicas para situaciones de alta concurrencia y paralelismo.

Go es un lenguaje “de llaves”, en la tradición familiar de C, pero sin necesidad de puntos y comas, al menos (las lleva pero el compilador se encarga de ponerlas solo). Veamos el clásico Hola, Mundo:

package main

import "fmt"

func main() {
fmt.Println("Hello, 世界")
}

Una de las características más interesantes de Go, y una de las que lo hace especialmente interesante para aplicaciones en la nube, es su implementación de co-rutinas, o funciones que pueden ejecutarse en paralelo, utilizando, casualmente, la sentencia “go”, pero además permite definir “canales” para mantener la comunicación entre procesos. Para los interesados que aún no lo hayan hecho, hay un buen tutorial de Go con muchos ejemplos.


Quienes quieran probar Go en Google App Engine, pueden comenzar con las instrucciones en Google Code.

miércoles, 20 de julio de 2011

Grandes noticias sobre MonoTouch y Mono for Android

MonoTouch y Mono for AndroidEsta semana Novell / SUSE anunció que firmó un amplio acuerdo de colaboración con Xamarin, la compañía formada por el equipo que trabajaba para ellos en el desarrollo de estos productos, liderada técnicamente por el infatigable Miguel de Icaza y comercialmente por su socio de años, Nat Friedman.

El acuerdo incluye transferencia a perpetuidad a Xamarin de todos los derechos de propiedad intelectual de todos los productos de la familia Mono (incluyendo MonoTouch, Mono for Android and Mono for Visual Studio) y el control de todas las propiedades relativas al proyecto Mono, como MonoDevelop y la organización Mono en GitHub, y a cambio se compromete a brindar soporte a todos los clientes de SUSE utilizando la plataforma, lo que es un factor importante para grandes cuentas de Novell utilizando las ediciones Enterprise de Mono.

Básicamente, desde mi punto de vista, es una acuerdo de colaboración basado en el hecho de que Novell no puede hacer mucho con esos productos sin el equipo detrás, pero necesita seguir dando respaldo a muchos clientes que los están utilizando. Como menciona el gerente general de SUSE en el anuncio oficial, con este acuerdo ganan las tres partes: Novell, Xamarin y los clientes de ambos.

Inmediatamente después de sellado el trato, Xamarin puso nuevamente disponibles los productos en su tienda en línea, y en el anuncio de Miguel se entiende que gran parte del esfuerzo que Xamarin inició para construir estos productos desde cero (mientras negociaban este acuerdo) va a aplicarse directamente como correcciones e implementación de nuevas características en los productos existentes.

La noticia es muy buena también para la comunidad de código abierto, ya que aunque estos productos que permiten programar en C# en plataformas móviles son pagos, son también la fuente de financiamiento que la empresa necesita para continuar liderando el desarrollo del proyecto Mono, MonoDevelop y los demás componentes abiertos y gratuitos, que nunca se detuvieron.

Prueba de que todos estos cambios nunca afectaron demasiado a la comunidad es que este sábado 23, y hasta el lunes 25 se llevará a cabo la conferencia MonoSpace 2011, dedicada a la plataforma abierta, y alojada en el NERD Center de Microsoft en Boston. La conferencia se empezó a organizar antes de que el equipo de Mono fuera despedido de Novell, y la organización nunca se detuvo a pesar de todas las idas y vueltas que felizmente han concluido en este acuerdo que deja en completo control al equipo original.

viernes, 15 de julio de 2011

Agiles 2011 se acerca y atrae más actividades

Como ya vengo anunciando, del 11 al 13 de octubre llega Agiles 2011 a Buenos Aires. Esta será la cuarta edición de la conferencia latinoamericana, y la segunda en la capital argentina.

Juan Gabardini

Algunas novedades de la organización es que se ha confirmado a Juan Gabardini como otro de los keynote speakers, cumpliendo con una antigua deuda en la comunidad de dar este espacio a los representantes más destacados de la comunidad local.

Juan en uno de los fundadores de la comunidad regional, reconocido especialista en el área de control de calidad de software con mucha experiencia también como mentor en torno a dinámica de grupos y metodologías, sin alejarse tampoco del código mismo. También es presidente del capítulo argentino de la IEEE Computer Society y docente en la Facultad de Ingeniería de la UBA.

 

Talleres extra

Aprovechando también la presencia local de los demás oradores internacionales, Juan está organizando también un taller con James Shore, titulado "The Art of Agile Planning". James es otro de los keynote speakers de Agiles 2011 y es el autor del libro "The Art of Agile Development", casualmente.

En este taller que James dictará (en inglés) los días 6 y 7 de octubre, la semana previa a la conferencia, James cubre los siguientes temas:

 

  • Organizar las reuniones diarias o stand-up
  • Crear y priorizar historias de usuarios, tareas y características mínimas con valor de mercado
  • Realizar compromisos confiables para la iteración y predecir la velocidad
  • Personalizar el horizonte a largo plazo según las necesidades de la organización
  • Calcular entregas predecibles para coordinarse con terceros
  • Adaptar planes para crear y aprovechar oportunidades

Esta es una actividad arancelada, por tratarse de un taller intensivo de dos días completos, y se llevará a cabo en el auditorio del Grupo de Usuarios Microsoft ().

Más información y registro, en el sitio de Agilar.

 

miércoles, 13 de julio de 2011

¡Yukihiro "Matz" Matsumoto se suma a Heroku! (+video)

Matz en Heroku

Ayer Heroku, la plataforma para despliegue de aplicaciones en la nube (adquirida por SalesForce.com a fines del año pasado), anunció que Matz, el creador de Ruby, se sumó a su equipo como Arquitecto Jefe.

Esta es una gran noticia no solamente para la comunidad Ruby, sino para la industria en general, porque une más aún equipos innovadores y de una influencia muy positiva para toda la comunidad.

Por un lado, Matz es una persona inquieta y perseverante, que a mediados de los noventa decidió crear un lenguaje que hiciese feliz a los programadores, no a los compiladores, y a lo largo de los años mantuvo un gran liderazgo alrededor de una comunidad sumamente colaborativa que aportó grandes ideas al campo de los lenguajes y ecosistemas, y que incluso con la llegada de los "niños rebeldes" de Ruby on Rails, que trajeron una perspectiva muchas veces extrema y criticada, siguen llamando la atención sobre estilos de construcción de aplicaciones basados en agilidad, simplicidad y capacidad de expresión.

Por el otro, Heroku, desde sus humildes orígenes como una plataforma pequeña de aplicaciones en la nube en el 2007, siempre intentó hacer que el desarrollo y ejecución de las aplicaciones web fuese algo más sencillo y ordenado, y desde entonces su servicio creció para establecerse entre los mejores en satisfacción de los usuarios/desarrolladores y calidad de ejecución, además de mantener el espíritu de soporte a los emprendedores brindando la posibilidad de comenzar con niveles gratuitos que permiten construir cosas reales y empezar a invertir dinero cuando el negocio realmente empieza a despegar.

La combinación sólo puede deparar más fuerza en esa dirección sana de seguir impulsando a la "competencia", ya sean otras plataformas o lenguajes, en la dirección de la productividad y sencillez pero siempre basadas en una experiencia de desarrollo divertida y libre de stress.

Es interesante saber que Heroku planea seguir adelante con su soporte a otros lenguajes/entornos, como Node.js o Clojure (ambos soportados actualmente) mientras que el rol de Matz (y su pequeño equipo de colaboradores) será seguir desarrollando Ruby. Seguramente la cercanía aporte muchas cosas buenas a la plataforma en general, y probablemente le permita a Matz seguir jugando con otros lenguajes, algo que nunca dejó de hacer a pesar de su liderazgo en el desarrollo de Ruby.

Como regalo final les dejo un video de Matz recorriendo un poco la historia de Ruby antes de contar los planes para la próxima versión 2.0, que comenzó el desarrollo a fines del año pasado. En el video Matz habla en su tradicional simil-inglés, que espero que entiendan (tiempo total: ~35 minutos).

viernes, 8 de julio de 2011

Video: Comunicación no violenta, con Ingrid Astiz

IngridAstiz

En la última reunión mensual de Ágiles @ Buenos Aires el tema central fue "Comunicación no violenta", coordinada por Ingrid Astiz de Fuerza Tres.

Ingrid tiene un background mixto entre sus estudios de filosofía en UBA y sus 16 años trabajando en desarrollo de software, que canalizó volcándose a las metodologías ágiles, poniendo fuerte foco en la dinámica de grupos y las relaciones humanas.

Pueden ver, además del video debajo, la presentación de Ingrid embebida en este post de su blog.

El video está dividido en 3 segmentos, y dura en total unos 50 minutos.

jueves, 7 de julio de 2011

Raros lenguajes nuevos: CoffeeKup (más y más cafeína)

CoffeeKup

El matemático Alfréd Rényi decía que "un matemático es una máquina que convierte café en teoremas", frase que usualmente se le atribuye a su compatriota y colega Paul Erdös, quien solía repetirla.

Los programadores somos de alguna manera aparatos para convertir cafeína en algoritmos, lo que se hace explícito en la tradición de Java, JavaScript y el reciente CoffeeScript, todos inspirados en este alcaloide de venta libre.

Siguiendo la tradición cafetera, Maurice Machado ha colaborado con un reciente experimento notable basado en Node.js y CoffeeScript. Como breve recordatorio, CoffeeScript es una sintaxis simplificada de JavaScript, con un estilo más sucinto, bastante similar a Ruby, que se está haciendo tan popular que ya viene integrado en la distribución de Ruby on Rails 3.1, por ejemplo.

Lo que Maurice generó con CoffeeKup es un lenguaje específico de dominio (DSL) sobre CoffeeScript para generar el marcado completo de la página. Esto es, en lugar de escribir HTML, podemos escribir directamente toda la estructura de la página en CoffeeScript.

Veamos el ejemplo clásico de http://coffeekup.org/:

doctype 5
html ->
  head ->
    meta charset: 'utf-8'
    title "#{@title or 'Untitled'} | My awesome website"
    meta(name: 'description', content: @desc) if @desc?
    link rel: 'stylesheet', href: '/stylesheets/app.css'
    style '''
      body {font-family: sans-serif}
      header, nav, section, footer {display: block}
    '''
    script src: '/javascripts/jquery.js'
    coffeescript ->
      $().ready ->
        alert 'Alerts are so annoying...'
  body ->
    header ->
      h1 @title or 'Untitled'
      nav ->
        ul ->
          (li -> a href: '/', -> 'Home') unless @path is '/'
          li -> a href: '/chunky', -> 'Bacon!'
          switch @user.role
            when 'owner', 'admin'
              li -> a href: '/admin', -> 'Secret Stuff'
            when 'vip'
              li -> a href: '/vip', -> 'Exclusive Stuff'
            else
              li -> a href: '/commoners', -> 'Just Stuff'
    section ->
      h2 "Let's count to #{@max}:"
      p i for i in [1..@max]
    footer ->
      p shoutify('bye')

Como puede verse, se declara la estructura jerárquica de la página (cabecera y cuerpo), con sus atributos internos, y pueden anidarse los elementos como párrafos, divs, listas, y demás. Y claro, puede embeberse código en cualquier lado. No hay una diferencia directa entre la plantilla y el código.

Parece una postura muy radical, pero me parece un espacio sumamente interesante a investigar. Los experimentos de Maurice estén disponibles en GitHub y no terminan en CoffeeKup. Hay otros relacionados, como Zappa y CoffeeScript-Bespin.

 

martes, 5 de julio de 2011

Alt.NET Open Space en Buenos Aires: 16 de julio (+ video)

Alt.NET Hispano

Como comentaba días atrás, se está organizando una nueva reunión de la comunidad Alt.NET en Buenos Aires, y la fecha final es el sábado 16 de julio, de 9:00 a 18:00 en las oficinas de Microsoft Argentina (gracias al anfitrión Miguel Sáez), en Bouchard 710, 4to piso, Ciudad de Buenos Aires.

Para quienes no conocen el formato Open Space, les dejo el enlace a esta guía.

Como siempre el evento es gratuito pero hay que registrarse previamente y llevar un documento de identidad el día del evento. El registro se realiza en línea, y también puede verse la lista de quienes ya lo han hecho, para darse una idea del ambiente y ver si hay amigos asistiendo.

Tradicionalmente el almuerzo se hace en el mismo lugar, con empanadas o pizzas, en un intervalo a mediodía, de manera de aprovechar al máximo este sábado geek.

Otra cosa importante es que aunque la selección de temas se produce por presentación y votación en el primer momento del evento, hay una wiki donde se pueden ir proponiendo temas posibles, de manera de ir generando ideas. Es importante animarse a proponer temas, recordando que el que propone no necesariamente tiene que exponer, si no que puede hacer un llamado a charlar sobre algo que no conoce bien o que le genera dudas.

 

Como último detalle antes de cerrar (y que puede generar algún debate en el Open Space) les dejo el video de la más reciente de las VAN de Alt.NET Hispano (y recuerden que ya hay 75 sesiones de cerca de dos horas disponibles para ver a demanda):

El tema es "Identity Providers, oAuth y Autenticaciones on-line", presentado por Carlos Peix y Nelo Pauselli.

Unable to display content. Adobe Flash is required.

 

Video: JavaScript, jQuery, CSS and Razor in ReSharper 6

El video que comparto esta vez tiene un par de cosas raras para este blog:

  • Está en inglés (fue grabado en la reciente Norwegian Developers Conference)
  • Presenta un producto pago (no abierto)

¿Por qué lo publico entonces? Porque en 6 minutos, Hadi Hariri, colega que participa también en el grupo Alt.NET Hispano, y al que oportunamente espero conseguir para presentar algo de esto en español, demuestra algunas características de ReSharper 6, un complemento con Visual Studio que algunos describieron en Twitter como "una IDE que utiliza Visual Studio como host", por sus increíbles capacidades.

Específicamente, y más allá de que uno programe o no en .NET y eventualmente no utilice Visual Studio, me parece notable el nivel de análisis en vivo que pueden hacer sobre código JavaScript. Como Hadi dice en un momento del video, ya no es un tema de "estático o dinámico" sino de las herramientas adecuadas. JetBrains, la empresa detrás de ReSharper (conocidos también por su IDE para Java IntelliJ IDEA y otras como PyCharm y RubyMine) me sorprende siempre por su capacidad de innovación y de resolución de problemas complejos alrededor de la comprensión y análisis de lenguajes de todo tipo.

Va para ellos mi reconocimiento.

lunes, 4 de julio de 2011

Video: ¿Qué esperas de Agile? con Federico Zuppa

Federico Zuppa

Este video es de una de las reuniones mensuales de Agiles @ Buenos Aires, pero me había quedado en el tintero procesarlo y publicarlo, así que, con disculpas a Federico por la demora, acá va.

Federico es desarrollador y coach en metodologías ágiles en 10Pines, y anteriormente trabajó en EDS (hoy HP), Globant y otras empresas de software, involucrándose en proyectos muy interesantes.

Después de años utilizando metodologías ágiles y actuando como introductor en muchos equipos, se unió a 10Pines para dedicarle más tiempo a esta actividad de ayuda.

Mediante esta actividad encontró muchas veces una variedad de expectativas y objetivos respecto a la adopción de este paradigma, y de eso habla en esta sesión que presentó originalmente en Agiles 2010 en Lima y repitió en la reunión de Buenos Aires de marzo de este año.

Queda el video, entonces, dividido en 3 partes, que duran en total unos 50 minutos.

viernes, 1 de julio de 2011

Video: Programando de a pares con Mariano Koldobsky

Mariano Koldobsky

Mi invitado esta vez es Mariano Koldobsky, un experimentado trabajador al que conozco desde hace años, a raíz de conocernos en una empresa en que él trabajaba y yo daba consultoría, y reencontrarnos más tarde en la comunidad ágil.

Tiempo después logramos trabajar juntos por un tiempo, hasta hace poco cuando Mariano empezó a trabajar para bvision, que tienen oficinas cerca de su casa en La Plata, capital de la provincia de Buenos Aires.

Con Mariano compartimos la pasión por la programación, la electrónica y recuerdos de nuestra generación, ya que somos los dos bastante veteranos. Pero casualmente esas dos primeras aficiones nos llevaron a elegir como tema de nuestra sesión un ejercicio de programación y cableado, utilizando una placa Arduino, que es una plataforma de hardware abierto, ideal para realizar prototipos e implementaciones sencillas y caseras de dispositivos de control.

Como verán en el video, la placa se conecta por USB (anteriormente por puerto serie) y se programa en un lenguaje de programación propio (una especie de Processing, pero basado en C++ en lugar de Java).

Algo interesante de Arduino es que es la plataforma que tomó de base Google para desarrollar su propio Android Open Accessory Development Kit, con lo que conocerla ahora puede significar algo más que un mero pasatiempo.

El video dura un poco menos de 15 minutos, y espero que les resulte tan divertido como a nosotros grabarlo. ¡Al menos por una vez van a ver algo más que código!