jueves, 9 de junio de 2011

Video: Sesión NO presentada en Run WebCamp Chaco

Run WebCamp

Hoy tenía previsto estar en Resistencia, Chaco, participando en la edición local del Run WebCamp que está recorriendo el país, dando la sesión sobre Entity Framework que presentamos previamente en Buenos Aires con Daniel Laco.

Actualicé la presentación con algunos cambios en los poquísimos slides y mejoré un poco mi parte de los ejemplos, centrándome más en Code First que es la parte que me interesa más.

Pero no tuve mucha suerte: esta semana entró en erupción el volcán Pehueye en Chile, provocando bastantes problemas allá primero y en Argentina también, sobre todo en Bariloche, pero llegando a provocar demoras o cancelaciones de vuelos en toda la región.

Así que me quedé sin asistir, pero decidí grabar la sesión en video y compartirla. No llegué a tiempo con el procesamiento y la subida del video, me parece, pero espero que mis colegas y amigos de Chaco hayan podido compartir el link con el público de allá. Por mi parte, lo comparto aquí con todos los demás.

Duración aproximada: 55 minutos.

miércoles, 8 de junio de 2011

Recursos sobre HTML5

HTML5 logo

A medida que el tiempo avanza este lenguaje de marcado y su ecosistema se hacen temas cada vez más centrales en el desarrollo de software en general.

El reciente anuncio de Microsoft de que Windows 8 soportará HTML y JavaScript como una posibilidad para desarrollar aplicaciones de escritorio sigue en la línea de muchos otros jugadores del mercado que apuntan fuertemente a estos estándares.

Les dejo a continuación una serie de recursos para prender más sobre HTML5.

En Español

En inglés

Como siempre hay más recursos en inglés, y este tipo de información técnica es muy consumible para los programadores, incluso si no están duchos en ese idioma.

  • Dive into HTML5 es un libro completo en línea que además está escrito usando este estilo de marcado. Desde el comienzo se nota el uso de Web Fonts (noten que si bien la tipografía del título parece un gráfico, el texto es seleccionable).

  • Los blogs de SitePoint (que también ofrecen algunos libros pagos pero económicos) tienen muy buena infomación en sus blogs, categorizados por contenido sobre HTML5 y CSS3.

  • W3Schools tiene un Tutorial que además sirve como una buena referencia en línea para buscar información sobre forms, tags, atributos y eventos.

 


lunes, 6 de junio de 2011

Video: DHH en la RailsConf 2011

Este post contiene básicamente el video de la sesión de David Heinemeier Hansson (DHH) en la RailsConf 2011 a mediados del mes pasado en Baltimore, Maryland, EEUU.

El video, por supuesto, está en inglés, pero me parece interesante compartirlo porque en la sesión DHH comparte sus ideas acerca de los objetivos en los cambios en Rails 3.1, incluyendo la idea de más carpetas y archivos vacíos (para ayudar en la organización), y los motivos de la cuestionada inclusión de CoffeeScript y SCSS (comentada previamente en otro post).

Específicamente menciona que Rails seguirá siendo una plataforma con opiniones fuertes, donde las configuraciones por omisión serán las que el equipo considera las más relevantes y útiles en el momento, aunque siempre podrán cambiarse (por ejemplo, basta comentar las dos líneas que incluyen saas y coffee-script en el gemfile).

Sobre el final, menciona pjax, una biblioteca que maneja el contenido completo de una página estática como si fuese ajax pero manteniendo las url apropiadas, dejando que el botón BACK del navegador funcione perfectamente. Esa puede ser una de las próximas inclusiones en Rails.

miércoles, 1 de junio de 2011

RubyConf Argentina (+ video)

RubyConf

Finalmente llega la primer RubyConf a la Argentina, y con intenciones de atraer cierta audiencia latinoamericana y algunos presentadores internacionales.

El sitio web ya está habilitado, y permite presentar propuestas, ver los oradores principales y las condiciones de patrocinio para los interesados.

Por supuesto la conferencia tiene una cuenta de Twitter para las novedades, y el código fuente del sitio está alojado y disponible en GitHub.

La sede será Ciudad Cultural Konex (Sarmiento 3131, Buenos Aires) durante el 8 y 9 de noviembre.

Los oradores principales por ahora son:

Quienes estén desesperados por registrarse ya, aunque falta un tiempo, pueden hacerlo via Eventioz.

Como aperitivo les dejo este video de una hora de Scott Chacon haciendo una excelente introducción a Git (en inglés):

Raros lenguajes nuevos: ColdRuby

ColdRuby

En este caso no se trata realmente de un lenguaje nuevo, si no de una implementación interesante de Ruby.

ColdRuby es un motor compuesto por tres partes:

  • Un intérprete de Ruby escrito en JavaScript
  • Un traductor de bytecode YARV (basado en Ruby 1.9)
  • Una máquina virtual basada en V8 (el motor de código abierto de Google) conectando las partes

Sin embargo, estas tres partes pueden ser utilizadas en forma independiente o reemplazadas por otras. Así, ColdRuby puede compilar código Ruby a JavaScript para que lo ejecute un browser, o ser ejecutado directamente en Node.js (que utiliza V8 por debajo).

Para los que todavía suponen que hacer algo así en JavaScript es una locura porque puede ser muy lento, los invito a mirar este emulador de completo de una PC escrito en JavaScript por Fabrice Bellard (autor de QEMU entre otras cosas), que bootea un Linux (funciona bien en versiones actualizadas de FireFox y Chrome, al menos).

ColdRuby tiene unos cuantos detalles "raros" que surgen de las diferencias de diseño entre ambos lenguajes, como el modelo de herencia prototípica de JavaScript contra el usual, basado en clases, de Ruby. También hay detalles como la manera en que se mapean algunos tipos de datos, pero en todos esos sentidos se ha tratado de mantener la alternativa más pragmática para usos generales.

La promesa es poder ejecutar Ruby dentro del browser (algo que hasta ahora era posible solamente con la combinación de IronRuby y Silverlight), e interactuar entre ambos lenguajes.

El proyecto es temprano y todavia un tanto experimental, pero interesante.

martes, 31 de mayo de 2011

Dobles de pruebas en Python llegados desde España

PyDoubles

En un mensaje de ayer en la lista de TDD en español, el amigo Carlos Blé, autor de el único libro (que yo conozca) de TDD en español (y gratuito), anunció la publicación de su framework para Dobles de Prueba en Python, construido porque no encontraban en su equipo uno como lo que ellos buscaban, y también como ejercicio.

El framework se llama pyDoubles, y el proyecto está hosteado en BitBucket para quienes quieran colaborar o derivarlo (está publicado bajo licencia Apache 2.0).

Según explican en la documentación, pyDoubles sigue la nomenclatura propuesta por Gerard Meszaros (en su ya clásico libro xUnit Test Patterns) para clasificar los dobles de prueba en stubs, spies o mocks.

Resumiendo brevemente, en el entorno de las pruebas unitarias, los dobles nos permiten reemplazar dependencias externas (que no son las que queremos probar) por otros objetos que -sólo a efectos de la prueba- se comportan como los verdaderos, facilitando la prueba de el SUT (o sistema a probar, por sus siglas en inglés).

Uno de los ejemplos clásicos es usar un doble para la capa de datos de un componente, ya que al probar nuestra lógica no necesitamos un repositorio de datos real, porque es dificultoso de mantener pero además es mucho más lento que utilizar un objeto con la misma interfaz o protocolo, que simplemente me devuelve lo que espero en el contexto del test.

La diferencia entre stubs, spies y mocks es sutil y discutida usualmente en la comunidad (desde el famoso artículo de Martin Fowler "Mocks aren't Stubs"). Lo importante en este caso es que el framework soporta los tres tipos.

Como el sitio de pyDoubles está ahora en inglés, traduzco brevemente la introducción explicando las categorías:

STUB

Reemplaza la implementación de uno o más métodos en la instancia del objeto que juega como colaborador o dependencia, devolviendo el valor que explícitamente devolvemos en la prueba. El stub es un método, pero es común llamar stub también a una clase que los contiene. El stub no tiene ningún tipo de memoria.

SPY

Hace lo mismo que el stub, pero puede registrar los métodos que se llamaron durante la ejecución de la prueba y cómo fueron invocados. Se utilizan para verificar la interacción o comportamiento.

MOCK

Además de lo que hacen los stubs y spies, es más estricto en la especificación del comportamiento esperado del sistema a probar. Antes de llamar a cualquier método en un mock, la prueba debe declarar, usando el framework, qué métodos y cómo deben ser llamados para que este comportamiento se verifique por completo. De lo contrario, la prueba falla con una excepción "UnexpectedBehavior" (comportamiento inesperado).

 

Como ellos explican en la documentación no hay tipos de dobles "mejores" que otros. Los mocks son más estrictos y por lo tanto hacen que las pruebas que los usan sean también más frágiles (más susceptibles a fallar por cambios menores en la implementación). Los spies son más flexibles en ese sentido, pero no alcanzan cuando necesitamos especificar un comportamiento especial en gran detalle. El resultado es que usualmente se utilizan combinaciones de los tres.

En la práctica, como siempre, conviene siempre aplicar la solución más sencilla que funcione, usualmente empezando con stubs, y luego recurrir a spies o mocks tipos cuando la prueba lo requiere.

Para ver ejemplos del uso del framework, les recomiendo ir directamente a la documentación.

lunes, 30 de mayo de 2011

Video: Programando de a pares con Gabriel Falcone

Gabriel Falcone

En esta oportunidad me reuní a programar con Gabriel Falcone, líder técnico en equipos de desarrollo de una empresa multinacional de origen argentino.

Conozco a Gabriel desde hace unos años, y compartimos el interés por el desarrollo de software y la dinámica de equipos. Gabriel también es ayudante de cátedra en FIUBA, con mi amigo y futura víctima de esta serie, Nico Páez.

En esta ocasión nos sentamos con Gabriel, en el laboratorio del MUG, donde recién terminaba de dictar una clase de su curso de C#, para recorrer algunos ejercicios basados en cosas que implementó recientemente en proyectos reales, utilizando técnicas de Reflection en .NET. En el video recorrimos dos ejercicios, pero en total hay tres que Gabriel tenía a mano, y que incluyo para quienes quieran jugar con ellos:

Los ejercicios son en C#, utilizando Visual Studio 2010.

lunes, 23 de mayo de 2011

Video: Programando de a pares con Martín Alaimo

Martín Alaimo

En este segundo video de la serie de sesiones de programación de a pares le toca el turno a Martín Alaimo, de Kleer.

Conocí a Martín en los comienzos de la comunidad Agiles.org en Argentina, cuando él todavía trabajaba en Accenture, y seguimos en contacto desde entonces, compartiendo varios eventos, viajes y peripecias del mundo del desarrollo.

Martín tiene algunas certificaciones más tradicionale como PMP (Project Management Professional) o Certified Java Developer, y varias dentro del campo ágil, como Certified Scrum Master Practitioner (la variante más concreta de esa certificación algo cuestionada) y más complejo aún, es uno de los pocos entrenadores certificados del curso de Scrum Development en América Latina (el único en Argentina y alrededores, hasta donde yo se).

Pero lo más importante no son los títulos sino la larga experiencia que demuestra desarrollando o enseñando, y la buena disposición para compartir esos temas con la comunidad, que lo han llevado a organizar los Yoseki Coding Dojo (de los que hablé en otro post) y asumir la responsabilidad de co-dirigir la organzación de Agiles 2011.

En esta sesión lo que tratamos de recorrer con Martín es el camino del diseño basado en dos prácticas complementarias pero que a veces parecen solaparse: TDD (Test-Driven Development) y ATDD (Acceptance Test-Driven Development).

Para el ejemplo, que codificamos en Ruby, usamos Cucumber para las pruebas de aceptación (ATDD) y RSpec para las unitarias (TDD).

Espero que les resulte interesante, y como siempre, esperamos feedback para saber por dónde continuar o qué temas tratar en más profundidad.

 

viernes, 20 de mayo de 2011

Salió PET #2 beta, la revista Python Entre Todos

PET #2

Apareció en estos días el segundo número de la revista que edita la comunidad Python ArgentinaPET (Python Entre Todos). La revista en sí se descarga como un PDF para leer como a uno más le guste.

El número está en Beta por ahora, y creo que lo que más le falta es revisar bien la ortografía, pero igual el contenido es excelente, y siempre mantiene ese ambiente descontracturado pero bien técnico que es la marca de agua de esta comunidad.

La revista se publica bajo licencia Creative Commons (específicamente CC-by-nc-sa-2.5), por lo que se puede distribuir y derivar en forma libre, manteniendo la atribución a la fuente original, sin usarla comercialmente, y manteniendo la licencia en las derivaciones.

El contenido incluye:

  • ¿Qué es PyConAr?
  • Cómo se hizo PyConAr2010
  • Charlas relámpago en PyConAr 2010
  • Fotos de las Keynotes
  • El Asado de PyConAr2010
  • Entendiendo Decoradores en Python
  • Introducción a Django
  • PyAfipWs: facilitando, extendiendo y liberando los Servicios Web de AFIP (Factura Electrónica y otros)
  • InfoPython - Midiendo el Valor de la Información de Mass Media con Python.
  • Como generar archivos .exe e instaladores para una aplicación python
  • Depuración y defragmentación de memoria
  • NINJA-IDE, Un IDE Pensado para Python
  • Usando librerías adicionales y virtualenv
  • Desafío PET
  • xkcd

Advierto que son muchas páginas de contenido variado, y recuerden que está en beta, con lo que es bueno estar atento a la aparición de la versión final.

¡Felicitaciones al equipo editorial por otro número terminado!

 

miércoles, 18 de mayo de 2011

dotPeek - El descompilador .NET gratuito que faltaba

dotPeek

Recientemente escribía sobre una situación que se generó en la comunidad a raíz de un cambio de política en .NET Reflector de Red Gate, un producto famoso en la comunidad .NET que pasó de ser gratuito a pago.

En ese artículo recorría varias alternativas gratuitas (de código abierto o no) y sobre el final comentaba que JetBrains, la empresa que produce IntelliJ IDEA (mi IDE favorita para Java) y ReSharper (mi plugin favorito para Visual Studio), estaba lanzando dotPeek, un descompilador gratuito, del que aún no había nada para probar.

En los últimos días, el producto ya está en Beta y disponible para probar, y como se anunció, cuando se libere la versión final seguirá siendo gratuita. El último release que lanzaron de hecho, ya funciona en Windows XP e incluso sin Visual Studio instalado.

Según el sitio del producto, aquí están las características principales:

  • Descompila ensamblados de .NET 1.0 hasta 4.0 a C#
  • Permite ir rápidamente a un tipo, ensamblado, símbolo o miembros dentro de un tipo
  • Navega a las declaraciones de símbolos, implementaciones, símbolos base y derivados, etc.
  • Permite buscar con precisión el uso de símbolos determinados, presentando todos los resultados
  • Muestra cadenas de herencia
  • Soporta descargar código de los servidores originales
  • Colorea la sintaxis
  • Puede operarse sólo con el teclado
  • Y es gratis

Queda una pantalla de muestra, y para más detalles, pueden ir al sitio y descargar el producto.

Ejemplo de DotPeek

 

martes, 17 de mayo de 2011

Libros: aprendiendo Objective-C y Cocoa

Para los programadores que usan Mac y siempre tuvieron ganas de desarrollar algunas aplicaciones nativas, o aquellos que quieren desarrollar aplicaciones para el iOS de iPhones, iPods y iPads, es fundamental aprender Objective-C (el lenguaje) y Cocoa (el framework).

Incluso si uno opta por usar entornos que nos permiten desarrollar en otros lenguajes, como MonoMac, MonoTouch ó MacRuby, siempre es importante tener una buena base del entorno original de Apple, porque ninguna de estas abstracciones evita que necesitemos un entendimiento general del entorno subyacente, el manejo de recursos, eventos, etc.

Por suerte hay algunas opciones de libros gratuitos para empezar en el tema:

Become an X Coder

BecomeAnXcoder

Es un libro gratuito disponible dentro del sitio Cocolab que incluso puede leerse en español, aunque ésta y otras versiones traducidas están una o dos versiones atrasadas con respecto la versión del sistema operativo de Mac, mientras que la versión en inglés está al día.

Una característica de este libro es que está orientado a gente sin conocimiento previo de programación, por lo que puede resultar demasiado básico, aunque siempre se puede acelerar la lectura e ir a los detalles específicos que nos importan.

Cubre una introducción general a la programación, el uso de las herramientas Xcode de Apple, funciones, compilación, condicionales y bucles, interfaz de usuario, métodos, punteros, strings y arrays, accesores y propiedades, manejo de memoria, y deja muchas fuentes posteriores para seguir aprendiendo.

 

Objective-C Essentials

Objective-C 2.0 Essentials

Este libro sólo está disponible en inglés pero está orientado a programadores con cierta experiencia, y es muchísimo más detallado. La versión gratuita es la que se lee en línea, y puede comprarse en PDF y ePub a un precio económico.

Cubre la historia de Objective-C (que nació como un intento de fusionar la sintaxis de C con el modelo de objetos de Smalltalk, unos pocos años después de la aparición de C++, y antes de su popularización), la instalación de Xcode y el proceso de compilación en Mac OS X, como usar GNUStep y Objective-C en Windows y Linux, los tipos de datos del lenguaje, uso de variables y constantes, operadores y expresiones, comentarios, control de flujo y bucles, orientación a objetos incluyendo métodos, encapsulamiento, accesores, herencia, punteros e indirección, vinculación dinámica, funciones, enumeradores, y manipulación de strings, números, arrays, diccionarios, directorios, archivos, carpetas, y muchísimo más.

Notarán que es muchísimo material.

 

David Chisnall

Objective-C for Java Programmers

También en inglés, pero en este caso se trata de un artículo de David Chisnall en InformIT, en 7 partes (breves) orientado a introducir el lenguaje a desarrolladores Java (también es útil para quienes conocen .NET).

Recorre las diferencias filosóficas entre los lenguajes, objetos y primitivas, archivos y unidades de compilación, modelos de objetos, comportamiento estático, diferencias de sintáxis, etc.

 

lunes, 16 de mayo de 2011

Mono: de Novell a Xamarin

Xamarin

A fines del año pasado comentaba en este blog la venta de Novell a Attachmate, una compañia de servicios de infraestructura.

Una preocupación desde ese momento, aunque al principio no parecía pasar nada, es qué valor iba a darle el nuevo dueño al proyecto Mono (una implementación de código abierto de .NET), liderado por Miguel de Icaza.

Las cosas empeoraron recientemente, y el 2 de mayo comenzaron los despidos de los equipo de EEUU y Candá, seguidos en la semana por el resto en Europa, Brasil y Japón.

Lejos de romper en llanto, el equipo original de Mono, con Miguel a la cabeza, pronto avanzó con un viejo plan que ya había discutido anteriormente y fundaron Xamarin, una companía con la que piensan mantener el servicio de soporte de Mono y el resto de los proyectos abiertos, y generar dos nuevos proyectos similares a Mono for Android y MonoTouch (para iOS). Al igual que los productos que generaron en Novell, éstos últimos serán productos pagos, con los que esperan mantener al equipo funcionando.

Conociendo la calidad y capacidad de producción del equipo, estoy seguro que pronto tendremos novedades al respeto. Miguel estima que en 3 meses pueden tener la versión preliminar para iOS, y en 4 la de Android, y seguramente en ambos casos, al empezar de cero, incorporarán mejoras y aprendizajes por sobre los productos que quedaron en Novell.

Vale recordar que Mono en si y sus otros derivados como Moonlight, MonoMac y MonoDevelop son gratuitos y de código abierto, por lo que no hay riesgos al respecto.

Mientras tanto, la conferencia Monospace sigue programada para el 23 al 25 de julio en Boston, Massachussets, EEUU, en el NERD (New England Research & Development) Center de Microsoft en esa ciudad.

Y de paso, el jueves 19 de mayo, estaré presentando un Webcast para MSDN Latinoamérica, en una serie que empiezo sobre Interoperabilidad, llamado "Mono lleva .NET a todas partes".

Desde este humilde blog aprovecho para expresar mi admiración y apoyo a Miguel y su increíble equipo en esta nueva etapa, y quedo a la espera de las novedades que seguramente producirán a mansalva, como siempre.

viernes, 13 de mayo de 2011

Video: Programando de a pares con Carlos Peix

Carlos Peix
Con este post comienzo una serie de entrevistas que tenía en mente desde el comienzo de este blog el año pasado, pero a la que no le encontraba el formato definitivo, hasta hace poco.
En realidad, me di cuenta que no quería hacer entrevistas convencionales, y me parece que lo mejor para nosotros desarrolladores es ver a otros en la práctica, así que estoy comenzando a grabar sesiones de programación de a pares.
La idea es aprovechar la excusa para darme el gusto de programar con amigos y conocidos de la industria regional. Algunos, como este primer caso con Carlos, serán sentados a la misma mesa, y algunos serán remotos, a distancias diversas según la ocasión. Como es tradición de este blog, tengo en mi backlog sentarme a programar en diferentes lenguajes, tecnologías, y en algunos casos tal vez no sea código sino diagramas en un pizarrón, o alguna charla más tradicional, pero siempre que pueda, será a código limpio.

Para iniciar la serie entonces, recurrí a varios amigos, y la primer víctima fue Carlos Peix. Nos conocemos desde hace más años de los que puedo recordar, a través de la comunidad Microsoft. Carlos es un desarrollador independiente con muchos años de experiencia y una actitud abierta a nuevas ideas, pero que no se deslumbra fácilmente con las nuevas modas y prefiere centrar su atención en las técnicas de diseño e implementación más perdurables. Es reconocido sobre todo como especialista en desarrollo web y el mundo .NET, pero siempre está mirando y practicando un poco de Java, Ruby o Smalltalk.
Carlos también participa activamente en la comunidad Agiles.org localmente y en la organización de Agiles 2011. Tiene un blog con varios videos muy interesantes que graba por iniciativa propia y al participar en otras comunidades, como Alt.Net Hispano, donde es presentador habitual.
En el video que grabamos (unos 20 minutos en total), Carlos trajo un ejemplo extraído de un caso real que le tocó, sencillo pero ya algo avanzado y con unas pruebas unitarias, y entre ambos hicimos una sesión de refactorización. El ejemplo es en C#, y usamos Visual Studio 2010 con ReSharper. Para quienes quieran ver el código con más detenimiento, dejo la solución al inicio del ejercicio, y la solución al final.

viernes, 6 de mayo de 2011

Videos: Run Web Camp Buenos Aires (marzo 2011)

Run Web Camp

A mediados de marzo Microsoft realizó en Buenos Aires una edición de su gira internacional Web Camp, en el que participamos varios oradores locales junto a los dos invitados "oficiales", Phil Haack (Program Manager de ASP.NET MVC) y Drew Robbins (Technical Evangelist), como anuncié por entonces en este post.

El evento se transmitió en vivo a través de UStream, pero por algún motivo no se dejó que quedara disponible directamente a posterior, como esta plataforma permite, y recién ahora están disponibles los videos en YouTube.

Es bueno mencionar que este evento va a replicarse (siempre con adaptaciones, actualizaciones y oradores alternativos) a lo largo de varas provincias argentinas. Más información en la página de Facebook del tour.

Haciendo honor al tono hispano de este blog, les dejo la página donde están los links a todos los videos, pero dejo incrustados debajo los de las sesiones en español, en el orden en que (creo) se dieron ese 15 de marzo:

Bienvenida y tendencias, con Edu Mangarelli y Migue Sáez

Seguridad y Front-End de la nube, con Chema Alonso

Acceso a datos con Entity Framework, con Dani Laco y Martín Salías

Aplicaciones AJAX con MVC, con Rodo Finochietti y Zaiden

Internet Explorer 9 y HTML5, con Mati Woloski y Johnny Halife

Espero que los disfruten.

Paper: Desarrollo ágil de software

Rick y Juan

Los amigos Juan Gabardini y Ricardo Colusso han publicado de manera abierta este extenso y detallado trabajo que presenta "Una introducción a las metodologías ágiles de desarrollo de software".

Creo que este es uno de los documentos introductorios más completos sobre métodos ágiles en español, y además generado por dos personas que no sólo son divulgadores constantes sino practicantes intensivos, lo que aporta una alta dósis de realidad al trabajo, además de la base conceptual.

Veamos el contenido general:

Desarrollo del Software

Plantea la problemática general del desarrollo y anticipa la posición del Manifiesto Ágil.

Desarrollo “tradicional” de software

Vuelve a revisar el proceso tradicional, usualmente en cascada, con sus problemas usuales.

Características del Desarrollo Ágil

Comenta las características principales (en la práctica) de este estilo, enfocándose en el empowerment de los equipos y los mecanismos de feedback permanente.

Por qué y cuándo conviene usar Desarrollo Ágil de Software

Es uno de los puntos más interesantes, y ataca algunas de las dudas más frecuentes de la gente acercándose al modelo ágil. Hablan del Cono de Incertidumbre, y cómo se trata de ir reduciéndolo en los distintos estilos de administración de proyectos, y su impacto en el desarrollo de Productos.

Beneficios de usar Desarrollo Ágil

Cubren en detalle el Desarrollo guiado por valor, mejor manejo de riesgos y mejoras de productividad.

Aplicabilidad del Desarrollo Ágil

Revisa en líneas generales casos diversos y también la relación entre agilidad y procesos como CMMI.

Experiencias directas

Plantea un caso en detalle, planteando la solución, la realización, resultados y comparación entre la visión de Producto y Proyecto.

Métodos, Prácticas y Herramientas

Describe rápidamente Scrum, Programación Extrema (XP), Desarrollo de Software Lean, Kanban y prácticas como programación de a pares, TDD, proceso continuo, transparencia y visibilidad.

Finalmente el trabajo deja punteros a cómo continuar profundizando, incluyendo comunidad, bibliografía, material gratuito y otras.

jueves, 5 de mayo de 2011

Novedades de SADIO

SADIO

Como cada tanto tiempo, compilo las últimas novedades de la Sociedad Argentina de Informática, algunas de las cuales pueden ser de interés en el resto de Latinoamérica ya que algunos eventos son de alcance regional o internacional.

Homenaje a Clementina

Exactas y la Fundación Sadosky celebrarán los 50 años de la primera computadora científica argentina.

Con el fin de conmemorar los cincuenta años de la puesta en funcionamiento de la primera computadora científica argentina, conocida como “Clementina”, el Departamento de Computación de la Facultad de Ciencias Exactas y Naturales (FCEN) de la UBA y la Fundación Sadosky, organizarán un amplio programa de actividades.

La ClementinaLa Clementina era una computadora a válvulas, que medía 18 metros de largo y que requería de un gran equipo de refrigeración. La entrada de datos y programas se hacía a través de cintas de papel perforadas parecidas a las de los teletipos de la época. Inicialmente no tenía impresora. La memoria de trabajo era de 1K (si, "un" K) y tenía 4 "tambores" de memoria (el equivalente al disco duro) de 8K cada uno. Esa computadora, sin embargo, fue el sostén de un proyecto de vanguardia: el Instituto de Cálculo de la FCEN que, encabezado por Sadosky, se convirtió durante la década del ’60 en un programa innovador para nuestro país, con una triple misión: investigación, docencia y servicio.

El 12 y 13 de mayo se llevarán a cabo las Jornadas “Manuel Sadosky”, con los pioneros de la computación científica nacional. En las jornadas participarán investigadores, ingenieros, programadores, usuarios y referentes de la época, los cuales expondrán en diversos paneles temáticos:

  • El Instituto de Cálculo como proyecto de la Universidad de los años 60 - Pablo Jacovkis (Profesor de la FCEN).
  • ¿Cómo era esa primera computadora?: hardware, software, operación - Ernesto García Camarero (Jefe de Programación y Profesos de los
  • Cursos de Formación 1961/63) y Jonás Paiuk (Jefe del Grupo de Ingeniería Electrónica).
  • El Instituto de Cálculo y su misión de servicio - Julián Araoz (Responsable del Grupo de Investigación Operativa).
  • La aventura de programar a Clementina. Trucos, trampas y complicaciones de esos primeros lenguajes: del Autocode al Comic - Wilfred Durán (Responsable del desarrollo del lenguaje COMIC), Violna Eandi, Victoria Bajar y Cristina Zoltan (Programadores).
  • Cometas y Telefonía: Cómo se calculó la órbita del cometa Halley y se armaron protocolos de comunicaciones con la vieja máquina. - Víctor Pereyra (Investigador del Instituto de Cálculo –Mecánica Celeste) y Juan Carlos Angio (Encargado del Proyecto de la telefónica ENTEL con el Instituto de Cálculo).
  • Modelar la sociedad argentina. Modelos macroeconómicos y experimentación numérica: los proyectos de Oscar Varsavsky. - Arturo O’Connell (Economista e investigador del Instituto de Cálculo).
  • Otras miradas: el Instituto de Cálculo visto desde otras empresas e instituciones de la época. - Alfredo Perez (Profesional de UNIVAC) y Horacio Reggini (Fundador de la Sociedad Argentina de Informática e Investigación Operativa -SADIO-).

Al mismo tiempo se inaugurará un museo interactivo que reunirá la escenografía con mobiliario de la época, partes originales del equipo y documentos que testimonian la llegada de la computadora al país.

Las Jornadas tendrán lugar el jueves 12 de mayo a partir de las 17 hs. y el viernes 13 de mayo desde las 15 hs. en el Departamento de Computación de Exactas, Pabellón I de Ciudad Universitaria, C.A.B.A.

40 JAIIO - Extensión de fecha límite para el envío de trabajos

Como comenté en un post anterior, SADIO organiza la edición 40 (si, llevan cuarenta años) de las Jornadas Argentinas de Informática.

La fecha límite de recepción de trabajos se ha extendido según el siguiente cronograma:

  • 13 de Mayo: fecha límite de presentación para ASAI, ASSE, CAI, HPC, JII, JSL, JUI, SID, SIE, SIO, SSI, WSegI, EST.
  • 16 de Mayo: fecha límite de presentación de trabajos para AST
  • 30 de Mayo: fecha límite de presentación de trabajos para CAIS

Ya está disponible el Open Conference System para comenzar con el envío de trabajos.

Las 40 JAIIO se realizarán en la Ciudad de Córdoba, del 29 de Agosto al 02 de Septiembre de 2011, en la UTN - Facultad Regional de Córdoba. La información completa en el sitio de las jornadas.

Día Mundial de Internet

El 17 de mayo es el Día Mundial de Internet, y por eso SADIO y otras organizaciones realizarán en forma virtual las Jornadas Día de Internet y se darán a conocer los ganadores de la edición 2011 del premio mate.ar que, consolidado como el máximo reconocimiento a lo mejor de la web de nuestro país, refleja desde hace más de una década la evolución de internet en Argentina.

miércoles, 4 de mayo de 2011

CoffeeScript: el libro (más un video)

El libro de CoffeeScriptYa hablé antes en este blog sobre CoffeeScript y las ediciones de Pragmatic Programmers, y hoy quería combinar ambas cosas comentando el nuevo libro de Trevor Burnham que ya está disponible en Beta, y comencé a leer ayer.

Por supuesto, el libro está en inglés, y no está terminado, pero me parece otro indicio, junto con la decisión de incluir CoffeeScript por omisión en Rails, del auge que está tomando este dialecto simplificado para JavaScript.

Pero vamos al libro. En el prologo, Jeremy Ashkenas, el creador de CoffeeScript, explica entre otras cosas (la traducción es mía):

..."Afortunadamente para nosotros, el JavaScrit de hoy disfruta de un merecido renacimiento. Gracias al incansable esfuerzo de los implementadores de los navegadores, es actualmente el más rápido de los lenguajes dinámicos populares; está presente en todos lados, desde servidores hasta Photoshop; y es el único lenguaje que se puede usar para programar desde todos los ángulos de la web.

CoffeeScript es un pequeño lenguaje que apunta a brindar fácil acceso a las partes buenas de JavaScript: las funciones de primer clase, los objetos como hash, incluso la poco comprendida cadena de herencia por prototipos. Si hacemos bien nuestro trabajo, ustedes terminarán escribiendo un tercio del código para escribir el mismo JavaScript que hubiesen escrito de otra forma. CoffeeScript pone un alto valor a la legibilidad del código y a eliminar mucho del ruido sintáctico.Al mismo tiempo, hay una correspondencia prácticamente uno-a-uno entre CoffeeScript y JavaScript, lo que significa que no hay degradación de rendimiento -de hecho, muchas biblitoecas JavaScript terminan corriendo más rápido después de ser migradas a CoffeeScript debido a algunas optimizaciones que el compilador puede realizar."

El prólogo termina elogiando al autor del libro por sus colaboración con CoffeeScript desde los primeros días, lo que asegura que el tema está tratado desde un profundo conocedor.

El juego del 5x5

El libro recorre el lenguaje y compilador en detalle, incluyendo instalación y ejecución, integración en otros ambientes e interoperabilidad con bibliotecas populares como jQuery. Y a medida que recorre los diversos capítulos, utiliza como ejemplo la construcción de un juego sencillo para dos jugadores, llamado 5x5, del que puede verse la interfaz a la derecha.

Comparto el índice general para que se den una idea del alcance:

  • Prólogo y Agradecimientos
  • Prefacio (historia, audiencia y organización del libro, proyecto de ejemplo y comunidad)
  • Comenzando (instalación, editores, ejecución y depuración)
  • Funciones, alcance y contexto
  • Colecciones e Iteraciones
  • Módulos y clases
  • Interactividad web con jQuery
  • Aplicaciones del lado del servidor con Node.js
  • Respuestas a los ejercicios
  • Maneras de ejecutar CoffeeScript (consolas web, dentro de una aplicación web, en Rails, via middleware, en Node.js, usando Middleman, en scripts del sistema operativo)
  • Cartillas
  • Bibliografía

 

Para terminar, dejo un video de Ashkenas presentando (en inglés) CoffeScript en la JSConf de hace un año. Es interesante ver la presentación de parte del propio padre de la criatura, pero tengan en cuenta que los doce meses transcurridos han cambiado la situación (para mejor) y ampliado las características del compilador.

 

miércoles, 27 de abril de 2011

.NET Reflector (gratis de nuevo para usuarios existentes) y alternativas

.NET Reflector

Desde hace una semanas hay mucho ruido por la decisión repentina de la gente de RedGate de empezar a cobrar .NET Reflector, que siempre había tenido una versión gratuita.

Para poner un poco de contexto, cuento un poco de la historia y utilidad de Reflector:

Un componente fundamental del framework .NET es el CLR, un runtime de ejecución para múltiples lenguajes. Cualquier lenguaje que se quiera implementar en .NET necesita que su compilador (o intérprete) termine generando IL (lenguaje intermedio), una especie de lenguaje ensamblador virtualizado, que aprovecha montones de servicios comunes de la plataforma y garantiza la compatibilidad e interoperabilidad de tipos y servicios entre cualquier componente, sin importar en qué lenguaje fue escrito originalmente.

Desde los primeros días se hizo evidente (y es una característica de diseño) que tomando un assembly (un componente binario) de .NET, era fácil analizar el código fuente en IL, e incluso entre las herramientas básicas del framework se incluye el desensamblador ILDasm. Proteger los componentes contra descompilación es un tema recurrente con alternativas como la obfuscación, y que muchos consideramos irrelevante, pero eso es tema para otro momento.

Pantalla de Reflector

Lo cierto es que para la mayoría de los mortales analizar IL no es trivial, por lo que a mediados de los 2000 Lutz Roeder creó Reflector, una herramienta que permitía descompilar un assembly a C# (hoy día también a VB y F#). Lutz mantuvo siempre esta herramienta disponible para toda la comunidad (no como código abierto, pero si gratuita) y la evolucionó constantemente a lo largo de los años, convirtiéndola en una de las principales recomendaciones para cualquier desarrollador .NET.

Reflector no sólo descompila componentes, sino que además facilita muchísimo la navegación dentro del código, tiene una excelente estructura para extensiones que ha favorecido la aparición de extensiones extraordinarias; unas tres docenas en el sitio de Codeplex que las agrupa. Pero también tiene muchísima funcionalidad para analizar tipos y dependencias, navegar objetos, mejorar posibilidades de depuración y mucho más.

En el año 2002 Lutz fue contratado por Microsoft y desde entonces trabaja en el grupo de Microsoft Expression. Con el tiempo notó que era dificil mantener el nivel de compromiso con su herramienta e hizo un acuerdo con RedGate, una compañía que se comprometía a continuar desarrollando y manteniendo una versión gratuita, con opción a producir ediciones pagas con funcionalidad adicional.

Todo iba bien con este acuerdo, hasta que RedGate anunció hace unos meses que a partir de la versión 7.x la herramienta tendría sólo ediciones pagas. El equivalente de la versión gratuita pasó a costar 35 dólares, lo que no es mucho para alguien que la usa frecuentemente, pero en otros casos puede resultar más complicado, y la comunidad no tomó la noticia con mucha alegría.

Peor aún, poco más tarde RedGate anunció que las versiones actuales pasarías a ser pagas también, y la situación con la comunidad empeoró cuando utilizaron el mecanismo de auto-actualización de Reflector para forzar a los usuarios a actualizar a una versión con fecha de expiración.

El revuelo no se hizo esperar y finalmente, ayer RedGate (más vale tarde que nunca), anunció públicamente que reconsideró el tema. Los usuarios de Reflector 6.x podrán actualizar a una versión que continuará siendo gratuita (si lo hacen hoy, actualizarán a una con fecha de expiración que puede ignorarse, porque la versión perpetua se recibirá en la próxima actualización).

Una aclaración importante: RedGate no brinda manera de descargar la versión 6.x, con lo que este mecanismo sólo funciona para quienes ya lo tienen instalado. La versión gratuita no es parte de la oferta de RedGate.

Para quienes el nivel de uso no justifica invertir 35 dólares, sin embargo, existen alternativas interesantes, algunas desde hace mucho tiempo, otras surgidas o potenciadas por el conflicto alrededor de Reflector:

MonoDevelop, Cecil.Decompiler y MonoReflector

Esta herramienta que está disponible en MonoDevelop (la IDE para Mono) también puede usarse sobre assemblies de .NET (Mono al fin y al cabo genera el mismo IL). Como casi siempre, esto no es algo interno de la IDE, sino que utiliza parte de la bilbioteca Cecil de Mono (que tiene muchísima funcionalidad para analizar y generar IL) incluyendo directamente el servicio de descompilación como puede leerse en este post del autor (Jean-Baptiste Evain, del equipo Mono en Novell).

Basado en Cecil.Decompiler, Jonathan Dickinson publicó MonoReflector, una interfaz WinForm para la biblioteca. Como la incorpora directamente, no es necesario instalar Mono: corre directamente sobre .NET.

ILSpy

Esta es una herramienta de código abierto iniciada tras el anuncio de RedGate por el equipo de SharpDevelop (una IDE de código abierto para .NET).

Pantalla de ILSpy

JustDecompile

Telerik acaba de liberar la beta de su herramienta gratuita JustDecompile (no de código abierto hasta donde veo).

JustDecompile

 

Finalmente, JetBrains, creadores de ReSharper, DotTrace y muchas otras herramientas poderosas (para .NET y otras plataformas), anunció que está trabajando en un descompilador que se espera sea gratuito también, pero por ahora sólo se sabe que se llamará DotPeek (nombre elegido en un concurso por la comunidad)

 

 

lunes, 25 de abril de 2011

Más videos desde el pasado: Agiles 2008

Agiles

Como comenté la semana pasada, Google Video decidió no mantener más el contenido que se había subido en su momento a ese servicio (previo a la compra de YouTube por parte de Google), pero en estos días mejoraron la manera de manejar el proceso, permitiendo mover de manera más directa el contenido hacia YouTube (cosa que no podía hacerse antes aun manualmente en el caso de videos de más de 15 minutos, que YouTube no soporta).

El resultado es que -afortunadamente- pude pasar todo el contenido que tenía hacia YouTube, y hoy sigo compartiendo un poco desde este arcón de los recuerdos. En este caso, dejo una serie de videos de Agiles 2008, y aprovecho para mencionar algo importante sobre la edición de este año del evento:

Ya está abierta la Convocatoria a Ponencias para Agiles 2011, en Buenos Aires.

Todos aquellos interesados en proponer sesiones o talleres, o en ver las propuestas hechas por otros y votar por ellas (lo que ayuda a la organización en la definición del programa final) puede visitar la página correspondiente en la sección de programa del sitio.

Volviendo a los videos, aquí en primer lugar uno de una sesión en español:

En ISO 9000 Ágil, Diego Gonzalez, de Lagash (a quienes felicitamos por sus flamantes 10 años), contaba cómo hicieron para certificar bajo normas ISO su proceso de desarrollo, basado en métodos ágiles.

Los siguientes videos son mayormente en inglés, con alguna acotación en español. Dejo en primer lugar el Panel de Cierre de Agiles 2008, que contó con la participación de varias de las figuras importantes que vinieron a visitarnos, y donde además podrán notar que se generó un debate algo tenso. Sobre el final, pueden saltear la parte en que aparezco balbuceando en el cierre del evento.

También dejo la sesión de Micah Martin sobre pruebas de aceptación con Fitnesse:

Y finalmente la sesión de mis amigos Matt Gelbwaks y Emilio Gutter sobre cómo mantener prácticas ágiles con equipos distribuidos.

miércoles, 20 de abril de 2011

Manos de Mono

Manos de Mono

Aunque suene raro, Manos de Mono es el nombre de un framework liviano para desarrollo web, soportado por Mono (la implementación abierta de .NET) e inspirado en TornadoSinatra, Node.js y otros mecanismos web recientes.

Creado por Jackson Harper, miembro del equipo de Mono en Novell, este framework intenta simplificar mucho el desarrollo web, evitando abstracciones y herramientas. Jackson usa como inspiración esta elegante frase de Alan Kay (inventor de Smalltalk, entre otras cosas):

"Las cosas simples deben ser simples. Las cosas complejas deben ser posibles."

Manos está concebido para ser simple de usar, fácil de probar y brindar altísimo rendimiento, sin necesidad de utilizar un servidor web (ni Apacha, ni IIS). Las aplicaciones desarrolladas con Manos incluyen el servidor web como parte del paquete, facilitando también la instalación y actualizaciones, y eliminando toda configuración.

Algunas de las características más interesantes de Manos son:

  • El servidor es muy escalable y no-bloqueante, es decir que no usa threads separados para cada petición, sino un loop de eventos, como hace Node.js (mas información sobre éste último en este post anterior).
  • Un sistema de cañerías (pipes) HTTP que facilita tratar cualquier petición o respuesta antes o después de que el framework los enrute.
  • El enrutamiento puede realizarse por convención, propiedades o métodos HTTP. Todas las rutas pueden definirse con expresiones del estilo "/Articulo/{titulo}/{pagina}".
  • Al generar un nuevo proyecto, Manos produce una serie de archivos básicos basados en el HTML5 Boilerplate (cubierto en este otro post), que después se personaliza por medio de un motor de plantillas muy rápido. Las vistas pueden generarse con cualquier editor y son casi HTML puro, pero son compiladas en tiempo de ejecución para maximizar el rendimiento.
  • La interfaz principal de Manos es una línea de comandos que permite crear, construir o iniciar las aplicaciones sin necesidad de ninguna IDE.
  • El diseño es totalmente modular, permitiendo extender Manos fácilmente, lo que puede facilitar que el ecosistema crezca con contribuciones de la comunidad.

Para crear una aplicación Monigote (por ejemplo), basta abrir una consola y escribir:

manos --init Monigote

y esto crea una carpeta Monigote con los archivos Monigote.cs, StaticContentModule.cs y una subcarpeta para las hojas de estilo y librerías Javascript (incluye jQuery, Modernizr, y otras). Los primeros archivos son programs C#, como se habrán dado cuenta. El primero es el punto de entrada de la aplicación, y el segundo se encarga de servir el contenido estático desde la sub-carpeta creada: scripts, imagenes, estilos, etc.

Dentro de Monigote.cs podemos incluir algo tan sencillo como:

Get ("/", ctx => ctx.Response.End ("¡Hola, Monigotes amigos!"));

Y esta acción procesa directamente la ruta raíz ("/"), respondiendo con un saludo.

Por supuesto que hay mucho más, pero este es el estilo de desarrollo en general. Antes de ejecutar la aplicación debemos construirla con el comando:

manos --build
Y para ejecutarla simplemente ejecutamos:
manos --server

Y la aplicación inicia, accesible en el localhost, en el puerto 8080 para pruebas.
Más detalles en este tutorial, y la documentación completa.

martes, 19 de abril de 2011

Videos desde el pasado: arquitectura

Toda empresa toma decisiones dolorosas, debatibles o erróneas, pero finalmente tenemos que aceptarlas aunque no nos gusten si están dentro de los términos que aceptamos en su momento.

En estos días, Google anunció que va a eliminar el contenido subido a Google Video (que ahora es solamente un índice), lo que significa que varios millones de videos van a perderse en el tiempo. El 29 de abril (en 10 días más) todo este material se va a ir, pero al menos dejaron la posibilidad de que uno descargue los videos que había subido y los mueva a otro lado.

Lamentablemente lo que se puede descargar no es el video original, sino la versión en formato FLV procesada por Google en su momento (estimo que el original no deben haberlo guardado), así que los que pude recuperar no están en el mejor de los formatos, pero me pareció interesante la oportunidad de compartirlos.

En esta primera tanda comparto tres sesiones mías del año 2007, presentadas dentro de una serie sobre arquitectura de software en el MUG, que di a lo largo de varios meses entre Buenos Aires y Rosario. No todas quedaron registradas, pero estas tres si, y aunque el tiempo se nota, las republico porque en su momento tuvieron buena recepción.

La primer sesión es una introducción al modelo arquitectónico REST (Representational State Transfer), que hoy está sumamente difundido, pero en aquel momento todavía era algo novedoso. Sobre el final menciono un libro de Rails que en esa época todavía no era RESTful por omisión.

Los dos siguientes son parte de una serie de Casos de Arquitectura, que eran charlas en las que analizaba la manera en que estaban construidas algunas aplicaciones fuera de lo común, en particular en cuanto a escalabilidad, que era un tema menos frecuente en ese entonces (antes de la explosión de las redes sociales, por ejemplo). Además de las sesiones sobre Joost y Google Search que publico aquí abajo, recuerdo haber hablado sobre Second Life, YouTube (a meses de haber sido adquirido por Google), EBay y Amazon, entre otros.

El primero de los dos casos, Joost, aún existe pero se convirtió en un sitio web de nicho que perdió la gracia del proyecto original que utilizaba una red peer-to-peer para transmitir video en muy buena calidad con un consumo limitado de ancho de banda.

El segundo caso lo dediqué a Google Search, que a pesar de haber crecido muchísimo, sigue trabajando sobre premisas similares. Muchas de las tecnologías que explico en la sesión, como Bigtable, el Google File System o MapReduce están ahora disponibles como proyectos de código abierto o como parte de Google App Engine.

lunes, 18 de abril de 2011

Rails 3.1 incluirá jQuery, CoffeeScript y Saas

Ruby on Rails

La próxima entrega de Ruby on Rails, la versión 3.1, incluirá por omisión estas librerías como parte de todo nuevo proyecto.

Por supuesto que ya ha habido mucha discusión al respecto en la comunidad Rails, pero como siempre, la decisión está tomada por DHH y sus secuaces, y al fin y al cabo, cambiar los defaults no es complejo (basta alterar un par de líneas en el gemfile).

Pero repasemos un poco de que se tratan estos cambios:

Hasta ahora la librería estándar de Javascript que Rails agregaba por omisión era Prototype, pero como la mayor parte de la gente hoy día utiliza jQuery (lo que demuestra que no es tan complejo cambiar estas cosas), decidieron hacer oficial el cambio.

Saas

Los otros cambios son más dramáticos para algunos, y es la inclusión por omisión de CoffeScript y Saas.

Sobre CoffeeScript escribí un post hace poco, así que voy a evitar repetirme, pero básicamente es una sintaxis simplificada de Javascript, que facilita escribir la parte cliente de aplicaciones web (aunque también se usa a veces del lado del servidor, en conjunto con Node.js).

Saas, por su parte, es una sintaxis alternativa para hojas de estilo en cascada (CSS).

Históricamente tuvo dos sintaxis, la original es la indentada (con archivos de extensión .saas), inspirada en el lenguaje de templates Haml (también muy difundido en el ambiente Ruby), y en lugar de usar llaves y punto y comas para delimitar bloques, se basa en indentación, como en este ejemplo:

#main
  color: blue
  font-size: 0.3em

  a
    font:
      weight: bold
      family: serif
    &:hover
      background-color: #eee

La nueva sintaxis se llama SCSS y es un superset de la sintaxis CSS3 que utiliza archivos de extensión .scss. Esta es la que impulsan desde Rails, y en este caso no se remueven las llaves y punto y comas, sino que el foco está en mejorar las posibilidades de definición, por ejemplo, soportando anidamiento de estilos:

#navbar {
  width: 80%;
  height: 23px;

  ul { list-style-type: none; }
  li {
    float: left;
    a { font-weight: bold; }
  }
}

Y también variables, como en:

$main-color: #ce4dd6;
$style: solid;

#navbar {
  border-bottom: {
    color: $main-color;
    style: $style;
  }
}

a {
  color: $main-color;
  &:hover { border-bottom: $style 1px; }
}

Pero también hay soporte para mixins (a la Ruby), herencia de selectores, y más características.

Al igual que en el caso de CoffeeScript, Saas va a estar integrado al framework, de manera que nosotros editamos los archivos en estos lenguajes y automáticamente se generan sus equivalentes .js y .css sin mayores inconvenientes. En ambos casos, llegado el momento de tener que depurar el código directamente en el navegador (utilizando FireBug o herramientas similares) la distancia entre los lenguajes reales y estas sintaxis alternativas nunca es tan grande como para convertirse en un problema.

 

jueves, 14 de abril de 2011

Node.js, Ruby y Python en... Windows Azure? (video)

smarx

Esta semana esta desarrollándose en Las Vegas, EEUU, la conferencia MIX11, en la que Microsoft realiza gran parte de sus anuncios para desarrolladores y diseñadores. A diferencia de PDC, que es la conferencia general para desarrolladores, MIX se orienta específicamente al desarrollo web o de aplicaciones cliente en general.

Como siempre, el criterio se amplía y aparecen, además de muchas presentaciones y anuncios esperables, algunas sesiones sumamente interesantes, como ésta de Steve Marx, uno de los personajes más innovadores dentro de Microsoft en los últimos tiempos.

En esta sesión, @smarx se dedica a subvertir Windows Azure, la plataforma de cloud computing, de la que él es el estratega técnico, para ejecutar sobre ella Node.js, Ruby, Python y también cosas como Cassandra o Tornado.

Veamos porque Steve me parece innovador:

Diagramas de smarx

  • No usa Powerpoint (y todavía no lo echaron): estos son sus slides de la charla (puro html+css)
  • Todos estos ejemplos están disponibles en su cuenta de GitHub
  • De hecho, tiene construido un workflow que hace el deploy en Azure de algunas aplicaciones después del git push
  • Sus diagramas son muy buenos (sólo comparables con los de @eugenio_pace, como se aprecia a la derecha).
  • Y fundamentalmente, entiende y divulga la necesidad de soportar múltiples plataformas y alternativas para que Azure sea un ambiente exitoso, en contra del discurso preponderante de que se lo utilice solo en .NET o PHP.

En la sesión se muestra cómo utilizar estas herramientas sobre la infraestructura pelada de Azure, sin utilizar ni el SDK, aprovechando algunas de las características que se habilitaron recientemente a este fin como:

  • Privilegios elevamos, para poder correr procesos como admin
  • Startup tasks: tareas que se pueden ejecutar antes de que un rol o instancia arranque
  • Control completo del IIS, incluyendo proxy reverso y FastCGI

Les dejo el video (en inglés) por si quieren entender un poco más el tema, especialmente los motivos por los cuales alguien querría hacer esto en Azure en lugar de otras plataformas. Si por alguna razón no se ve el video en este post (los mecanismos de incrustación de Channel 9 no parecen muy estables) pueden ver la sesión en la página original.

domingo, 10 de abril de 2011

Mi pequeño homenaje

Tal vez notaron que los últimos días hubo pocos posts en este blog, en el que en general publico algo diariamente, de lunes a viernes.

El hueco se debe a que mi padre falleció la semana pasada, y obviamente mis prioridades no pasaron por aquí. Pero hoy retomo con un post que pretende ser mi pequeño homenaje para él, que fue quien incluyó en mi carrera técnica, y me acercó, de alguna manera, al mundo del software. Más allá del homenaje, espero que algunos lectores se sientan identificados, tal vez, con alguna anécdota que les recuerde su propio camino.

Mi padre fue tripulante de vuelo en Aerolíneas Argentinas por décadas. Mientras estudiaba para piloto, empezó a trabajar como auxiliar de vuelo, más tarde comisario de a bordo, hasta que logró pasar a un puesto de cabina con un puesto que hoy ya no existe: navegador / radio-operador (navro, en la vieja jerga aeronáutica).

Algunas de las primeras cosas que cautivaron mi imaginación por la tecnología fueron verlo trazando rutas sobre mapas gigantescos (desplegados eran como una sábana de dos plazas) utilizando compases y transportadores muy complejos, o revisar los enormes manuales de vuelo de los aviones, que en esa época los tripulantes llevaban encarpetados en pesadas valijas junto con sus instrumentos.

Pero el primer empujón real a lo que se convertiría en mi carrera fue cuando me regaló, traído en uno de sus viajes a EEUU, un kit de electrónica con componentes pre-armados, para usar sin soldador, mordiendo el extremo de los cables en pequeños resortes que conectaban a las patas de los diodos, transistores, resistencias, y demás componentes.

Hace mucho que perdí el rastro de aquel kit, y no conservo ninguna foto, pero encontré esta foto de un kit que es prácticamente idéntico al mio:

160 in one Electronic Kit

La caja de madera tenía una lamparita, capacitores, resistencias, diodos y transistores, un ferrite con bovina (para captar radio), algunas celdas solares, un potenciometro, un display de leds (para un único dígito), un parlante, y zócalos para baterías de distinto voltaje, entre otras cosas.

Con este kit aprendí, a fines de los '70, a hacer un flip-flop, algunas compuertas lógicas, y cosas más triviales como una radio, un sensor de luz y otros proyectos básicos. Pero bastó para mostrarme la base de la electrónica analógica y poner un tímido pie en la digital.

Como yo estaba en la escuela primaria y mi inglés era muy precario, mi viejo se tomó el trabajo de traducir todo el manual que se ve en la foto, con los 160 proyectos mencionados (algunos de más de una página) escribiéndolos en una máquina Olivetti portátil que llevaba y traía en cada vuelo durante un mes o dos, dedicando todo su tiempo libre a mi curiosidad.

Este juego me decidió a entrar en un colegio secundario con especialidad en electrónica, donde aunque no aprendí mucho del tema realmente, conocí a otros proto-hackers de los que me hice amigo y con quienes empezamos a molestar en los primeros negocios que traían computadoras personales al país (mucho antes de la IBM PC), convenciéndolos de que nos dejaran usarlas un poco a cambio de hacer demostraciones para los clientes interesados, ya que usualmente nadie sabía como usarlas.

La primer computadora que fue mía (al menos un tercio) también la financió mi papá. La compramos con otros dos amigos y la teníamos una semana cada uno, pero él nos desafió a que teníamos que mostrarle lo que aprendíamos a nuestros padres, más allá de los juegos, para asegurar que no perdiéramos oportunidad de aprender.

Más Allá de la Ciencia FicciónTambién fue el viejo quien me heredó su colección de revistas Mas Allá (la primer revista argentina de ciencia ficción, editada a mediados de los '50 y que él guardó -sin saberlo- para encender otra llamita en mi cabeza, que entró con estos tomos en el mundo de la ciencia ficción, que es también responsable de gran parte de las ideas que me llevaron a dedicarme a la programación.

El resto es historia, pero todo empezó con esos empujones iniciales de mi querido viejo, con quien ya no voy a poder charlar de nuestros interés comunes, y a quien sólo me queda extrañar.

miércoles, 6 de abril de 2011

Agiles 2011 en Buenos Aires - ¡tres días imperdibles en octubre!

agiles

Como todos los años desde 2008, se viene la conferencia latinoamericana de metodologías Ágiles.

Para quienes no están al tanto de la historia, todo empezó en Buenos Aires, Argentina en 2008 con un grupo de entusiastas que nos embarcamos en la locura de organizar un evento internacional, con gente viniendo desde muchos países de la región, y varios invitados especiales llegados desde USA y Europa.

La primer conferencia fue un éxito y al año siguiente se hizo en Florianopolis, Brasil, y el año pasado en Lima, Perú.

En su regreso a Buenos Aires, y con la experiencia de los últimos años, el equipo organizador ha logrado mejorar el proceso completo y hoy estamos orgullosos de poder abrir la registración con meses de anticipación, y teniendo ya confirmada la sede, los oradores principales y los primeros patrocinadores.

La conferencia este año durará tres días, del 11 al 13 de octubre, dentro de los que habrá una combinación de sesiones, talleres y open spaces.

La conferencia será en la Universidad de Palermo, en la Facultad de Ingeniería y Diseño, en Mario Bravo 1050 de la Capital Federal.

Tendremos el lujo de contar con dos oradores principales reconocidos internacionalmente (y hay más figuras intesadas que esperamos ir confirmando en las próximas semanas):

Jeff Patton

Jeff Patton es consultor independiente, docente y mentor ágil. En su sitio http://www.agileproductdesign.com/ hace foco en diseño centrado en el usuario y en la concepción del producto.

Colaboró con Alistair Cockburn en el clásico libro Crystal Clear y es fundador y moderador del foro agile-usability en Yahoo, y ganó el premio Gordon Pask por su contribución al agilismo en 2007.

James Shore

James Shore es co-autor del libro The Art of Agile Development editado por O'Reilly en 2007, y mantiene el blog del mismo nombre.

Fue el primer ganador del premio Gordon Pask en 2005 y es uno de los entrenadores y presentadores ágiles más reconocidos por su visión que abarca el lado técnico tanto como el humano, de proyecto y negocios.

Ya está abierta la registración y los precios finales de la conferencia son muy económicos, más aún si se paga antes del 31 de agosto, que tienen aproximadamente un 20% de descuento.

Todos aquellos que tengan interés en proponer actividades, estén atentos porque en los próximos días se abrirá también la recepción de propuestas para las diferentes categorías.

Quienes tengan interés en colaborar patrocinando el evento, pueden descargar el documento de patrocinio que contiene las condiciones y datos de contacto.

martes, 5 de abril de 2011

Recursos gratuitos para empezar con Node.js

Libro sobre Node

A través de un tweet de mi amigo Juancho Ladetto encontré este post de ReadWrite Hack comentando una series de recursos sobre Node.js.

Para los que no saben o no recuerdan de que se trata Node, hice una breve introducción en un post anterior, y los demás sabrán que es una de las tecnologías que me parece más prometedora entre las últimas apariciones, y creo que este año va a crecer muchísimo.

Uno de los recursos más interesantes es este libro (en progreso) de Tom Hughes-Croucher que O'Reilly, que puede leerse (en inglés) por ahora libremente en su versión previa (e incluso colaborar en la revisión).

El libro por ahora cubre los conceptos fundamentales, con buenas explicaciones incluyendo simpáticos dibujos como este:

Event Stack

También cubre las interfaces de programación principales como el EventEmitter, la sintáxis de Callbacks, servidores y clientes HTTP, peticiones GET, POST y PUT, el objeto ClientResponse y el uso de URLs, query strings, Streams de lectura, el FileSystem y Buffers.

Está iniciado también el capítulo cubriendo interfaces de ayuda, por ahora solo DNS, y el de documentación general que cubre varias clases, el depurador, marco de pruebas unitarias, sub-procesos, consola de comandos REPL, y mucho más (todo esto en formato de referencia).

Otro recurso interesante y en progreso es la guía de Felix (también en inglés), que cubre varias partes similares pero a distinta profundidad y con otro enfoque, y tiene una sección dedicada a "convencer al jefe" que apunta a resaltar las características principales de Node para poder explicarlo a otros.