martes, 30 de agosto de 2011

Versión completa de Python Tools for Visual Studio

imageLa versión 1.0 de estas herramientas para programar Python en Visual Studio finalmente está disponible (gracias a @masaez por el aviso).

Este conjunto de herramientas es gratuito y de código abierto (bajo licencia Apache 2.0), y convierten a Visual Studio (que no es gratuito ni abierto) en una IDE muy completa para Python, soportando tanto CPython (la distribución estándar, no incluida en el paquete) como IronPython, la implementación de Python sobre el runtime de .NET.

Algunas de las características principales que hace atractivo el uso de estas herramientas es que agrega al editor básico con coloreo de sintaxis un buen soporte de Intellisense sobre miembros y firmas, navegación sobre el código como encontrar todas las referencias a un miembros, ir a su definición, o inspeccionar objetos. También soporta depuración local y remota, y perfilamiento para análisis de rendimiento.

Integra por supuesto una consola de comandos que puede usarse, al igual que el resto del entorno, también en entornos de clusters HPC y MPI, lo que permite trabajar interactivamente con infraestructura de procesamiento paralelo.

De hecho, sospecho que estos entornos son el motivo principal de la inversión de Microsoft en desarrollar estas herramientas, aún después de haber dejado el desarrollo de IronPython en manos de la comunidad. Python es uno de los lenguajes más utilizados (junto con C/C++) en el mercado de Computación de Alto Rendimiento (HPC), donde Microsoft está creciendo progresivamente a partir del lanzamiento hace unos años de Windows HPC Server. Sobre todo por bibliotecas clásicas en los mercados científicos, financieros e ingenieriles como NumPy o SciPy, y por el hecho de que programar resolución de problemas complejos en arquitecturas masivamente paralelas en C es bastante complejo, Python se ha establecido como una excelente opción.

Microsoft supo aprovechar el trabajo del equipo de IronPython para soportar su implementación en Visual Studio y la generalizo para muchas más áreas, lo que es en general una buena noticia, aún cuando lo cierto es que en la mayor parte de los contextos los programadores Python no solemos necesitar una IDE completa y preferimos la liviandad de un buen editor. En contextos complejos como HPC o uso de Interfaz de Paso de Mensajes (MPI) en ambientes distribuidos, es bueno al menos tener un buen soporte de depuración y algunas herramientas extra.

Debajo una pequeña muestra de las herramientas en acción:

Visual Studio Tools for Python

jueves, 18 de agosto de 2011

Scrum Guide 2011 en español (+ video en inglés)

Jeff Sutherland (arriba) y Ken Schwaber (abajo)Recientemente Scrum.org, la organización detrás de la difusión de la metodología, publicó la versión actualizada de la guía escrita originalmente por Jeff Sutherland y Ken Schwaber y revisada este año: Scrum Guide 2011.

En la misma página se encuentran disponible traducciones de la guía a muchos idiomas, incluyendo la versión en español (PDF, versión del 2010).

Para quienes no conocen más que lo anecdótico de Scrum, dejo un brevísimo resumen de este framework que se basa en tres pilares:

  • Transparencia
  • Inspección
  • Adaptación

El equipo de Scrum está compuesto por:

  • El Product Owner (PO, dueño del producto), que se ocupa de maximizar el valor del producto y el trabajo del equipo de desarrollo. Por eso es el responsable principal del Backlog de producto, y debe asegurarse que esta lista está siempre priorizada, de manera que nadie trabaje en lo que no es la máxima prioridad en cada momento.
  • El Equipo de Desarrollo es el grupo que se encarga de entregar incrementalmente un producto funcional al fin de cada Sprint (iteración). La guía agrega un poco más de detalle incluyendo la composición y tamaño.
  • El Scrum Master se encarga de que las reglas y principios de Scrum se mantengan y de que los bloqueos potenciales se eviten o eliminen cuanto antes. La guía detalla un poco más los servicios que el Scrum Master proporciona al PO, al Equipo de Desarrollo y a la Organización.

Los eventos de Scrum son:

  • El Sprint (o iteración) durante el que el compromiso asumido por el equipo y consensuado por el PO no debe cambiar, y se ejecuta manteniendo el orden de prioridad para el negocio, de manera de que al terminar el límite de tiempo impuesto (entre una semana y un mes) lo que quedó completo e incluido en el incremento de producto es siempre lo más importante. Dentro del Sprint se producen:
    • La planificación del Sprint, en el inicio, donde el Equipo y el PO acuerdan el compromiso para la iteración, tomando los ítems de máxima prioridad en el Backlog de Producto, en orden descendente, hasta donde el equipo estima que puede terminar dentro del límite de tiempo.
    • El Scrum Diario (o stand-up), donde el equipo se reúne (de pie, para evitar prolongar la reunión más de unos minutos) y cada miembro del equipo expone:
      • Qué terminó desde el último stand-up
      • Qué planifica terminar antes del próximo stand-up
      • Qué obstáculos puede llegar a tener (y que el Scrum Master deberá evitar que bloqueen al equipo)
    • El Sprint Review, en el que el equipo muestra el resultado del trabajo al PO y los interesados que éste considere apropiado para ayudarlo a continuar ajustando el Backlog de producto.
    • La retrospectiva en que el equipo reflexiona sobre la manera en que se desarrolló el trabajo, teniendo en cuenta relaciones, técnicas, herramientas y demás, y determina algunas medidas para mejorar en el siguiente Sprint.

Los artefactos de Scrum son muy pocos:

  • El Backlog de Producto, que el PO se encarga de construir y mantener priorizado en base al valor para el negocio a través del tiempo.
  • El Backlog del Sprint, que el Equipo y el PO determinan al comienzo de cada Sprint y cuyo seguimiento determina el nivel de avance dentro del Sprint.
  • El Incremento de producto es la entrega que el equipo realiza a final de cada Sprint, y que debe ser funcional desde el inicio, de manera que esté potencialmente en condiciones de usarse y agregar valor.

En la guía terminan volviendo a la importancia de la definición de cuándo una tarea está “terminada”, lo que debe convertirse en un contrato entre el Equipo, el PO y la Organización, de manera de ajustar las expectativas y evitar discusiones y problemas al respecto.

La guía amplía un poco este resumen, pero sólo tiene 17 páginas, incluyendo algunas con índice, historia, agradecimientos, etc. El framework es muy sencillo de describir, lo que no implica que sea fácil de implementar. Suele decirse que se parece en eso a un deporte: las reglas son sencillas, pero ser un buen jugador es típicamente un gran desafío y el secreto está en la práctica y la dedicación.

Video

Como final, dejo este video de una charla de Schwaber en el 2006 dentro de las oficinas de Google, que me parece que explica bien muchos de los principios, y aunque está en inglés, vale la pena escuchar esto desde uno de sus iniciadores.

miércoles, 17 de agosto de 2011

Video: Agiles @ Buenos Aires–Lean Startup, por Fernando Parra

Ágiles 2011El pasado 19 de julio el grupo Agiles.org de Buenos Aires realizó su ya tradicional reunión mensual, y en esta oportunidad el facilitador fue Fernando Parra (de MicroStrategy), quien contó un poco sobre los conceptos de emprendimiento alrededor del modelo Lean Startup, más basado en el foco en el diseño de producto y en el piloto inicial empujado por los mismos emprendedores más que el clásico modelo de buscar inversores para desarrollar una idea.

Este estilo de desarrollo de negocios está muy basado en una mezcla de métodos ágiles, software gratuito de código abierto, iteraciones cortas y extremo foco en el cliente final.

Algunos links adicionales:

Y como personalmente no pude quedarme a la sesión, agrego las notas tomadas por mi amigo Ricardo Colusso:

La presentación se centró en emprendimientos de desarrollo de producto.

¿Porqué muchos emprendimientos fallan? Algunas razones: Optimismo infundado, foco 100% en el producto antes que pensar en quienes lo van a usar, resultado: el producto no encuentra mercado.

Proceso propuesto: Concepto de producto mínimo viable (MVP). Por ejemplo el primer teléfono de Apple que no permitía copiar y pegar.

Ver http://pathfindersoftware.com/2011/01/exploring-customer-validation/

Hablamos del Lean Canvas: http://leancanvas.com/ - Forma Lean de presentar información de startups.
Puede bajarse gratis y usarlo/adaptarlo a lo que necesitemos (licencia Creative Commons)

La charla luego de la presentación fue por el lado de pensar cuan útil es un plan de negocios para un Llean Startup. Si quiero un subsidio de algún organismo oficial seguro que necesito hacer un plan de negocios, pero se habla de que probablemente me convenga no pedir plata y arreglarme inicialmente con lo que tenga. Se habla también sobre "burbujas" (como las punto com en 2001) que son vistas como oportunidades en el momento, pero que no tienen un sustento firme a nivel ganancias por cliente nuevo obtenido. Después estuvimos analizando en más detalle en que consiste el lean canvas, y encaramos un caso específico.

Nombres y fuentes de información mencionadas en la sesión:

Agradezco a Rick por las notas y les dejo la serie de videos (5 en total, cubriendo unos 80 minutos). Los últimos 10 minutos de la parte 5, aproximadamente, quedaron ocupados por el inicio de una actividad posterior que no tuve oportunidad de editar.

viernes, 12 de agosto de 2011

Jornada de Acceso a Datos (gratis, en UADE)

Microsoft User Group | ITEl MUG (Grupo de Usuarios Microsoft) realizará el 31 de agosto una jornada completa sobre Acceso a Datos (JAD 2011) en el Auditorio de UADE (Universidad Argentina de la Empresa), en Lima 717, Ciudad de Buenos Aires.

Para quienes no lo conocen, el MUG es un grupo de usuarios independiente, con más de 15 años de existencia, un millar de socios activos y muchos miles más de allegados a través sobre todo de sus cursos y jornadas (gratuitos o muy económicos) y sus listas de correo abiertas y gratuitas.

Aunque en el MUG la relación surge a partir de utilizar tecnologías de Microsoft, existe un espíritu muy abierto y permanentemente se realizan actividades más allá de esa plataforma, como actividades alrededor de Ruby, metodologías ágiles, manejo de proyectos, temas de negocios alrededor de las tecnologías de información y otros.

Esta Jornada de Acceso a Datos es casi un clásico del MUG que se enfoca en el tema recurrente en nuestra industria sobre el almacenamiento, búsqueda y explotación de datos, y cada vez más se extiende por fuera del campo de las bases de datos relacionales, como podrán ver a continuación, en la agenda del evento, en el que me toca dar la bienvenida.

08:30 Registración
09:00 Keynote – Apertura del evento Martín Salías
09:10 Preview de SQL Server 2011 (Denali) Maxi Acotto
10:10 SQL Azure Guadalupe Casuso
11:00 Coffee break
11:20 ¿Por Qué Entity Framework? Daniel Laco
12:10 Mobile Data Access Carlos Perez
13:00 Almuerzo Libre
14:30 oData / Web API Pablo Cibraro
15:20 Web Storage en HTML5 Rodolfo Finochietti
16:10 Coffee break
16:20 Bases de datos NoSQL Johnny Halife
17:10 Persistencia con NHibernate 3.2.0 Fabio Maulo
18:00 Cierre

El evento es gratuito, pero requiere registración previa porque las vacantes son limitadas. Pueden registrarse en el sitio del MUG (ignorando la pregunta sobre forma de pago).

lunes, 8 de agosto de 2011

LangDay 2012: planeando una conferencia sobre lenguajes

imageEl grupo ErlAr, que reune a usuarios de Erlang en Argentina, está intentando organizar para el año próximo una conferencia sobre lenguajes de programación, con foco principal en los lenguajes “no principales”. Esto quiere decir concentrarse en aquellos que no son los más populares en la industria local, como C/C++, Java, C# o Visual Basic, sino en los lenguajes que tienen pequeñas pero pujantes comunidades de seguidores, como Python, Ruby, Erlang (claro) y otros menos conocidos, algunos experimentales, incluso.

Esta idea no puede ser menos atractiva para mi, que soy un apasionado del tema, y para quienes disfruten de la serie “raros lenguajes nuevos” que mantengo en este blog.

El proyecto, que por ahora se llama Lang Day 2012, tiene las siguientes características, según el sitio borrador:

Objetivo

Brindar un evento de uno o dos días que permita a los asistentes obtener una idea sobre lenguajes de programación emergentes la cual le permita comparar:

  • Paradigma dominante del lenguaje
  • Tipado
  • Características principales
  • Fortalezas/Debilidades
  • Filosofía
  • Estado actual/Planes futuros
  • Estado de documentación/comunidad
  • Casos de éxito
  • etc. (agregar otros de ser necesario)

Formato

El evento intentara organizar las charlas de manera que los asistentes puedan asistir a las charlas introductorias de todos los lenguajes y luego decidan en cuales quieren profundizar.

Por esto el track de introducción será en una sola sala donde las charlas introductorias se realizaran una tras otra con una duración de 45 minutos.

Luego el track avanzado se realizará en 2 salas por lo cual el asistente deberá decidir en cuales lenguajes desea profundizar.

Por ultimo se realizará antes de la charla de cierre una serie de lightning talks con duración de 15 minutos que permita presentar de una manera mas superficial lenguajes menos conocidos o no tan maduros

Lenguajes Principales

Estos lenguajes son los que se desea presentar en profundidad en charla introductoria y avanzada de encontrarse presentadores:

  • Python
  • Ruby
  • Erlang
  • Scala
  • F#
  • Go
  • Haskell

quizas:

  • Clojure

    Lenguajes Secundarios

    Estos lenguajes son los que pueden presentarse en una lightning talk:

    • efene
    • LayerD
    • coffescript + node.js
    • etc

    Calendario

    • Charla de apertura (de 30 a 60 minutos)
    • Charlas introductorias (sala única, 45 a 60 minutos)
    • Charlas avanzadas (salas múltiples, 45 a 60 minutos)
    • Lightning Talks (sala única) (entre 15 y 20 minutos cada una)
    • Charla de Cierre (entre 15 y 30 minutos)

    Charla de apertura

    La charla de apertura además de dar información sobre el evento debería informar sobre la utilidad de aprender nuevos lenguajes, y presentar una breve introducción a conceptos básicos que puedan ser utilizados durante las charlas como:

    • Tipado Estático, Dinámico, Progresivo, de pato, Fuerte vs Débil
    • Paradigma funcional, orientado a objetos y estructurado
    • Side effects, Single Assignment

      Para estar al tanto del avance del evento, pueden seguir la cuenta de Twitter @LangDayAr, y los interesados pueden completar esta encuesta sobre detalles que les gustaría como asistentes, o anotarse en este otro formulario si tienen interés en presentar sobre alguno de los temas.

      viernes, 5 de agosto de 2011

      Mono vuelve a la carga con el release 2.10.3

      MonoEl equipo del proyecto Mono, ahora formal y legalmente a cargo del equipo original reagrupado en Xamarin tras su salida de Novell, retoma el ritmo de entregas progresivas con su versión 2.10.3 que a pesar de ser una entrega “de mantenimiento” sorprende con estadísticas como:

      370 files changed, 10606 insertions(+), 3452 deletions(-)

      Como si estuviese dedicada a quienes temían por el futuro de Mono, esta versión interna tiene foco en:



      • Soporte mejorado para Windows Communication Foundation

      • Actualizaciones importantes en el linker

      • Arreglos en las bibliotecas Gtk+ para resolver problemas aparecidos en Mac OS X Lion (sobre todo en MonoDevelop)

      La lista completa de los cambios está disponible en la página oficial de este release.


      Mientras tanto, para espíritus exploradores, accediendo al código fuente más actual desde el repositorio de Mono en GitHub, se puede comenzar a probar el soporte para C# 5.0, al menos sobre las características definidas y publicadas hasta ahora por Microsoft.

      jueves, 4 de agosto de 2011

      Programa de Agiles 2011 (y se acaba el descuento a fin de mes)

      Ágiles 2011Como ya comenté antes, este año la conferencia latinoamericana de metodologías ágiles, Ágiles 2011 se realiza nuevamente en Buenos Aires, como en su primera edición del 2008.

      Finalizada recientemente la llamada a ponencias, ya está disponible la primera versión del programa, donde pueden verse las sesiones aceptadas y distribuidas para los dos primeros días.

      Pueden ver directamente las sesiones del día 11 de octubre y las del día 12 de octubre. El día 13 de octubre será dedicado exclusivamente al formato Open Space. El programa puede cambiar en cuanto a horarios, pero ya se pueden ver las propuestas aceptadas para los 7 tracks en paralelo, con contenidos en español, inglés y portugués.

      El evento será del 11 al 13 de octubre en la Universidad de Palermo, Mario Bravo 1050 de la Ciudad de Buenos Aires. La registración está abierta desde hace tiempo y hasta el 31 de agosto hay un importante descuento.

      Las figuras principales del evento serán los Keynote y Guest Speakers. Las keynotes (sesiones principales de los tres días) estarán a cargo de:

      Jeff Patton
      Jeff Patton
      Agile Product Design

      James Shore
      James Shore
      The Art of Agile Development

      Juan Gabardini
      Juan Gabardini
      Agiles.orgIEEE CS

      y los invitados especiales:

      ¡Espero encontrar muchos lectores de este blog en el evento!

      miércoles, 3 de agosto de 2011

      JavaScript dentro de .NET

      Siguiendo con sus planes de dominar el mundo, JavaScript tiene desde hace un tiempo un interesante motor construido en .NET que permite ser embebido en cualquier aplicación: Jint

      El proyecto es de código abierto y fue iniciado por Sébastien Ros y colaboradores antes de ingresar a Microsoft, donde trabaja en el equipo del proyecto Orchard.

      A diferencia de otros proyectos que intentan emitir código IL a partir de JavaScript, lo que es problemático por el problema de no poder descargar los ensamblados generados, o de otros proyectos basados en el Dynamic Language Runtime, Jint es un intérprete completo basado en ANTLR.

      Jint permite utilizar JS como lenguaje para extender aplicaciones dinámicamente, algo que en .NET muchos hicimos previamente utilizando IronPython o IronRuby. Pero JavaScript es bastante más amplio en su uso, y esta clase de recursos siempre es muy valioso, sobre todo en este caso en que el soporte es muy completo, cubriendo la especificación completa de ECMAScript 3.0, y soportando en el último release muchos elementos del estándar 5.0.

      Dejo el ejemplo más básico de uso desde C# (obviamente puede ser embebido en cualquier lenguaje .NET):

      script= @"
      function square(x) {
      return x * x;
      };

      return square(number);
      ";

      var result = new JintEngine()
      .SetParameter("number", 3)
      .Run(script));

      Assert.AreEqual(9, result);