Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas
Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas

miércoles, 20 de noviembre de 2013

[Autobombo] Webinar de Arquitectura Ágil + Yoseki Coding Dojo semana que viene en RubyConf

Trabajando con Diego

Como avisé antes, el tag [autobombo] hace explícito que un post de este blog está referido a actividades en las que estoy directamente involucrado.

En este caso, quiero compartir el video (de ~50 minutos) del Webinar sobre Arquitectura Ágil que di anoche. 

 

Para los interesados en el tema, dejo links a la presentación original (muy similar a la del video) y al paper de hace unos años con el amigazo Diego Fontdevila en el Architecture Journal.

Para ver algunos de los comentarios durante el webinar, o posteriores, pueden mirar lo que quedó en Twitter bajo el hashtag #KleerArqAgil.

 

 

Por otro lado, si están interesados en la RubyConf Argentina, no se olviden que el próximo martes 26 de noviembre es el Ruby Fun Day, el evento anterior a la conferencia compuesto por talleres prácticos sobre diversos temas. Atención que este día es en la UP, no en Ciudad Cultural Konex como la conferencia.

En ese día de 15:30 a 17:30 voy a estar facilitando nuestro tradicional Yoseki Coding Dojo, edición Ruby. Si andan por ahí, pasen a saludar y avisen que leen este blog. :)

 

miércoles, 2 de octubre de 2013

Se viene RubyConf AR el 27 y 28 de noviembre (+ video)

RubyConf AR

La grandiosa mitad de conferencia de Ruby rio-platense (la otra mitad es la RubyConf UY, que se hace en Montevideo por marzo) ya tiene fecha y unos cuantos oradores anunciados.

Entre las grandes figuras está mi amigo y Maestro Angel "Java" López, con foto y todo en el sitio, lo que es poco frecuente.

Y por algún error administrativo, me han aprobado mi propuesta y estaré facilitando el clásico Yoseki Coding Dojo en el Ruby Fun Day que se realiza el 26 de octubre (un día antes) en la Universidad de Palermo.

La conferencia principal será en Ciudad Cultural Konex, como en el 2011.

Como siempre, RubyConf (tanto en Buenos Aies como en Montevideo) es un evento organizado con amor y pasión, que se nota en cada detalle, desde las camisetas hasta la atención permanente, el ambiente entre asistentes y oradores, las reuniones antes, durante y después del evento, y la magia permanente durante todos los días.

El contenido es muy variado, desde temas súper técnico a cuestiones meteorológicas y más de negocios, por lo que todos tienen algo interesante, pero los encuentros entre charlas son una parte enorme del espíritu de esta conferencia.

Dejo de regalo un video divertidísimo de la charla del amigo Jano Gonzalez, "¿Dónde están mi interfaces?", el año pasado:

miércoles, 11 de septiembre de 2013

Nitrous: un entorno de desarrollo completo en la nube

Después de un año de silencio ¡vuelve Code & Beyond!

Hace aproximadamente un año cambié de trabajo y me sumé a Kleer, donde como socio tengo muchas de las responsabilidades acuciantes de cualquier start-up, lo que requirió dejar algunas actividades de lado. Específicamente, este blog no tiene sentido para mi sin una frecuencia importante, por lo que quedó congelado… hasta ahora. Espero que disfruten algunos de los aprendizajes que compartiré con ustedes en adelante, y como siempre, el feedback es bienvenido en @MartinSalias.


Imagen básica

Estoy probando la beta pública de Nitrous.io, un servicio de "dev boxes" en la nube.

Básicamente, lo que nos brinda (partiendo de un servicio básico gratuito con 384 MB de RAM y 750 MB de storage) es una "caja" con Linux (la mía es un Ubuntu 12.04.1 LTS).

Lo bueno del servicio es que puede accederse de múltiples maneras:

  • por SSH directo
  • abriendo una terminal en el navegador
  • utilizando una IDE en línea (ver botón en la imagen)
  • a través de la aplicación para Mac (a las que se espera que se sumen otras para Linux y Windows). Esta aplicación genera una carpeta local con subcarpetas para cada "box" que uno tenga, y las mantiene sincronizadas (estilo DropBox). Además de eso, agrega un icono y menú en OS X que facilita llegar al sitio o la carpeta local, abrir una terminal vía SSH o la IDE en línea, controlar el port forwarding o la sincronización, etc.
Las "boxes" se pueden crear utilizando plantillas que incluyendo componentes pre-instalados para (por ahora) Ruby/Rails, Node.js, Python/Django y Go.
 
Personalmente, lo que más me atrajo es abrir la terminal desde el browser, jugar desde ahí, crear una carpeta para probar, usar vim para crear un ejemplo pequeño en Node,js (a pesar de haber creado mi box con la plantilla de Ruby, Node ya estaba ahí), correrlo desde la consola, ir a la URL de preview (agregándoe el puerto 3000) que elegí y ver que ya estaba funcionando.
 
La aplicación para Mac anda bien, pero la sincronización de archivos agrega una latencia que prefiero evitar. Siendo poco fanático de las IDE, tener la terminal me alcanza y sobra (es lo mismo que conectar por SSH, pero desde el browser de una).
 
La verdad es que el proyecto promete, y me gusta mucho la idea de usarlo para alguno de los entrenamientos que doy regularmente.

jueves, 28 de junio de 2012

Se viene la próxima RubyConf Argentina, y siguen los Ruby Meetups en Buenos Aires (+ video)

NewImage

El incansable grupo organizador de la RubyConf Argentina ya está encarando desde hace tiempo la edición de este año, y creo que es el momento de difundirlo porque ya está confirmada la sede del evento, que será el Paseo La Plaza en Buenos Aires.

Como el año pasado, habrá invitados del exterior y oradores locales, y estoy seguro que aunque la primer edición fue asombrosa, ésta segunda será aún mejor.

Como siempre ocurre en la comunidad Ruby, hay mucha creatividad y poca corrección política alrededor de todo esto, y es uno de los grandes atractivos, más allá del contenido técnico que siempre es interesante. Como muestra, vaya el control de selección de lenguaje en el sitio oficial de la conferencia, que me parece una joyita:

NewImage

Como si fuese poco, la actividad de Ruby Argentina no para, y vuelven al parecer con frecuencia mensual los Ruby Meetups. Pueden inscribirse y proponer temas (recuerden que el formato de las reuniones es abierto, y los asistentes terminan de decidir la agenda en el momento, en base a las propuestas). Más detalles y comentarios sobre estas meetups en el blog del Maestro Angel "Java" López, que probablemente presente alguna de sus katas en la próxima.

 

Dejo para el final un video de la RubyConf del año pasado (~35 minutos, en español a pesar del título), pero pueden ver todos los demás en la página de Vimeo de  Ruby Argentina.

viernes, 27 de enero de 2012

Ya llegó Ruby 3.2

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

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

Modo de desarrollo y ruteo más rápidos

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

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

Explicación de consultas

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

Logging con etiquetas

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

 

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

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

 

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.

      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).

      jueves, 16 de junio de 2011

      Rubinius 2.0 - versión preliminar para desarrolladores

      Rubinius

      Rubinius es una implementación de Ruby que tiene la característica principal de estar escrito mayormente en Ruby.

      La máquina virtual está escrita en C++ y utiliza LLVM para convertir el bytecode en el código nativo del procesador destino, pero el compilador de los bytecodes y la gran mayoría de las bibliotecas están escritas en Ruby. Este nucleo utiliza un recolector de basura muy optimizado y permite extensibilidad en C que soporta las mismas extensiones en este lenguaje que utiliza el intérprete estándar de Matz (conocido como MRI).

      El siguiente diagrama muestra la distribución de componentes de Rubinius:

      Componentes

      Uno de los desafíos de Rubinius siempre fue medir el nivel de compatibilidad contra la implementación de Matz, por lo que tempranamente empezaron a trabajar en RubySpec, una serie de pruebas que funcionan como la especificación del lenguaje, ya que éste no tenía una originalmente y por sus propias características de meta-programación, es especialmente complejo de validar.

      Básicamente, Rubinius, hasta su última versión estable, soporta Rails, Rake, RSpec, Nokogiri, Mongrel y prácticamente todas las bibliotecas y frameworks hasta Ruby 1.8.x.

      La novedad es que el equipo acaba de liberar la versión preliminar 2.0, que fundamentalmente soporta Ruby 1.8.7 y 1.9.2, y funciona bajo Windows, pero además utiliza un nuevo mecanismo de threading realista que aprovecha los múltiples núcleos de los procesadores modernos.

      Adicionalmente, el equipo migró el repositorio a GitHub. Para los interesados en el desarrollo de lenguajes, vale la pena al menos pegarle una mirada.

       

       

      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.

      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.

       

      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.

      martes, 29 de marzo de 2011

      Cuba: un micro-framework para desarrollo web basado en Rum

      Suba

      (Después de un lapsus entre feriados largos y proyectos, vuelvo a la carga)

      En el último Ruby Meetup en Buenos Aires, del que hablé un poco más en el último post hace una semana, otra de las presentaciones correspondió a Michel Martens (soveran, en GitHub), quien presentó Cuba, su microframework inicialmente basado en el proyecto anterior Rum, otro pequeño mapper sobre Rack, pero que quedó discontinuado.

      Rack es una abstracción que muchos de los frameworks web de Ruby utilizan para evitar reimplementar toda la interacción básica con un servidor web. Es básicamente una interfaz estandarizada sobre el servidor, independiente de cada implementación particular (soporta Mongrel, WEBrick, FCGI, Thin, y otros).

      Rack surgió básicamente como una alternativa a Ruby on Rails, pero hoy hay Rails también puede utilizar Rack por debajo.

      Muchos de los frameworks más chicos, como Sinatra, Camping o Merb construyen una capa de aplicación muy fina por encima de Rack, con lo que obtienen un modelo más limpio (obviamente con mucha menos magia que Rails), pero más eficiente cuando uno está dispuesto a trabajar un poco en algunas características en pos de más velocidad, menos consumo de recursos y muchas veces, más claridad en la solución final.

      Cuba es otro de estos microframeworks, y tiene algunas características muy interesantes, que me sorprendieron en la presentación de Michel:

      • Es realmente minimalista, muy cerca del mismo Rack, lo que otorga mucho control sobre el flujo de trabajo del servidor web.
      • A pesar de tener algunas similaridades con Sinatra, es todavía más rápido, y más explícito.
      • Integra plantillas para vistas usando Tilt y testing utilizando Cutest y Capybara, aunque es trivial integrar cualquier otra cosa.

      Veamos un ejemplo mínimo para entender que tan simple y de bajo nivel es Cuba:

      require "cuba"
      
      Cuba.use Rack::Session::Cookie
      
      Cuba.define do
        on get do
          on "hello" do
            res.write "Hello world!"
          end
      
          on true do
            res.redirect "/hello"
          end
        end
      end

      Por supuesto hay oportunidades para abstraer todo un poco más pero se puede notar como se puede manipular de manera explícita la respuesta del servidor (res). Esto en Sinatra es más implícito, lo que está bien para muchos casos pero a veces es bueno poder acceder y manipular la respuesta de manera directa.

      Aclaro que no tuve oportunidad de probar mucho Cuba, pero me parecieron interesantes algunos de los principios de diseño y los resultados obtenidos, y más aún saber que es un proyecto que está vivo y en manos de alguien que tenemos cerca.

      lunes, 21 de marzo de 2011

      Video: Ruby Meetup en Buenos Aires

      Ruby Argentina

      Como comenté en un post hace poco, la semana pasada se realizó la 7ma Ruby Meetup en Buenos Aires, organizada por la comunidad Ruby Argentina.

      Como las anteriores, se hizo gracias a la colaboración de Urban Station, en Palermo, que presta el espacio, y organizada principalmente por Ernesto Tagwerker y Nacho Carrera.

      Pude asistir y me tocó presentar una de las charlas relámpago, pero sobre todo pude conocer a mucha gente interesante del ambiente, que espero ver más seguido.

      También presentó Michel Martens su microframework para desarrollo web llamado Cuba, que tiene similaridades con Sinatra pero es más rápido y liviano todavía. Sumamente recomendable, y espero publicar pronto el video en un post aparte.

      También tuve la oportunidad de grabar un poco de la reunión, y comparto el segmento de introducción donde pueden ver a Ernesto y Nacho, y luego la presentación de Ernesto sobre cómo colaborar en proyectos de código abierto utilizando GitHub. Es una recorrida muy breve pero interesante, aunque pido disculpas de antemano porque la cámara a veces debería haber tomado más directamente la pantalla. No es fundamental, de todas maneras, ver el código del ejemplo, sino entender la explicación.

      Dejo también dentro del canal de Code & Beyond videos de reuniones anteriores subidos por Nacho, con charlas más extensas.

      viernes, 11 de marzo de 2011

      Ruby Meetup en Buenos Aires

      Ruby Argentina

      La comunidad Ruby Argentina va a tener su próximo Ruby Meetup el próximo jueves 17 de marzo a las 19:00 en Buenos Aires.

      El lugar de la reunión es Urban Station, el Salvador 4588, en el barrio de Palermo (mapa).

      Los interesados pueden registrarse completando el formulario.

      En esta reunión se decidió que se van a hacer varias lightning talks (charlas breves de 5 a 15 minutos), en base a los temas propuestos por los asistentes.

      Los interesados en más detalles sobre el grupo pueden recurrir a los siguientes recursos:

      También hay un sitio a nivel global, Ruby Meetup, en el que se pueden anotar los interesados en las reuniones, para estar al tanto de las que se realizan cerca.

      Busqué videos introductorios de Ruby en español y no encontré mucho, a excepción de este de un evento en Tandil, Argentina, que es interesante aunque el ángulo desde el que está grabada la pantalla no es el ideal.

      Me da la impresión de que es una área en la que podemos trabajar como comunidad. Ya me pondré en campaña.

      Dejo el video tandilense por ahora, que no está (que yo sepa) relacionado con el grupo que organiza el meetup.

      Espero ver a muchos lectores del blog en la reunión.

      martes, 1 de marzo de 2011

      Mono 2.10 y las últimas novedades de la monada

      Mono

      Por si alguno de los lectores de este blog aún no lo sabe, Mono es la implementación abierta de .NET para Unix, Mac OS X y Windows.

      El increíble equipo de Mono nunca se detiene, siempre acompañado por su líder Miguel de Icaza.

      La última versión liberada es la 2.10 (en realidad la 2.10.1) mientras continúa el rumbo hacia el próximo gran lanzamiento, que será Mono 3.0.

      Pero esta versión ya tiene grandes avances, como:

      • Soporte para el Google Native Client
        Esta es una tecnología que permite ejecutar código nativo dentro del browser de manera segura, y que ahora incluye no sólo la posibilidad de ejecutar código compilado previamente, sino también realizar compilación a demanda (JIT), lo que permite que Mono soporte Reflection.Emit o los lenguajes dinámicos, por ejemplo.
      • Nuevo motor de Profiling
        Este nuevo motor está optimizado para trabajar en entornos de múltiples hilos y es muy eficiente en todo sentido.
      • Implementación mejorada de Sockets
      • Mejoras en el Parallel Framework y en SGen, el nuevo recolector de basura (una increíble pieza de ingeniería)
      • Se unificó el runtime de soporte para MonoTouch y MonoDroid (versiones de Mono para IOs y Android respectivamente)
      • Cecil/Light es una versión mejorada de Cecil, la librería que permite generación e inspección de código en tiempo de ejecución, y que muchos utilizan incluso en .NET, donde no tiene un equivalente directo.
      • Nuevo mecanismo del compilador de C# y enormes mejoras en el shell interactivo
        Mientras Microsoft lleva más de dos años preparando su compilador como servicio, Mono lo tiene disponible desde entonces, incluyendo una consola que ahora permite no sólo la ejecución de expresiones sino de programas completos. El servicio de compilación además dejó de ser estático, con lo que se pueden crear diferentes instancias del compilador con contextos separados.
      • Compilador de VB que permite compilar a los perfiles de VB 2.0 al 4.0
      • Soporte completo para ASP.NET MVC 3 incluyendo Razor y WebPages. Mono 2.10.1 agregó algunos detalles que permiten ejecutar el CMS de código abierto Orchard de Microsoft, que de esta manera puede ejecutarse también en Linux.
      • Implementación de WebMatrix.Data, una librería de Microsoft que permite acceso a datos aprovechando los nuevos tipos dinámicos.
      • Muchísimas optimizaciones para Mono en OS X, que aprovechan más los servicios particulares del sistema operativo de Apple.
      • Compilador de F# e intérpretes de IronPython y IronRuby completamente integrados en los paquetes para Linux y Mac.
      • Gendarme 2.10, el analizador estático de Mono, también es mucho más rápido y tiene 33 reglas nuevas.

      Como ven, nadie puede decir que Mono no avanza.

      Para más detalles, se pueden ver las notas de los releases 2.10 y 2.10.1 en el sitio de Mono.

      O pueden ir directamente a la página de descarga, donde encontrarán paquetes de instalación para Virtual PC, VMWare, LiveCD, openSUSE, SLES/SLED, Windows, Mac OS, CentOS, Solaris u otras distros de Linux.

      miércoles, 23 de febrero de 2011

      Ruby Enterprise Edition y las mentes detrás (video)

      Phusion

      La gente de Phusion acaba de lanzar una versión actualizada de Ruby Enterprise Edition.

      ¿De qué se trata? Estos muchachos (Ninh Bui, Hongli Lai y Tinco Andringa) llevan bastante tiempo trabajando en Ruby on Rails, muchas veces en proyectos muy exigidos, y encontraron varios de los problemas más importantes de Ruby (1.8, básicamente) pero en vez de quejarse, con el mejor espíritu de la comunidad de código abierto, crearon un fork donde arreglaron varios de las principales preocupaciones del motor al usarlo en instalaciones de Rails de gran escala.

      Para que quede claro, esta distribución está pensada para instalaciones en servidores, y sigue siendo código abierto y gratuito.

      La diferencia principal contra el motor de Ruby 1.8 (aunque en 1.9.x muchos de estos temas mejoraron drásticamente) está alrededor del recolector de basura, que logra reducir el uso de memoria de las aplicaciones Rail en un promedio del 33%, y a la vez incluye un mecanismo optimizado de alocación de memoria que aumenta mucho el rendimiento.

      Algunos de los usuarios más conocidos de esta distribución son el New York Times, Twitter, Shopify y 37signals (esta última la empresa de David Hienemeier Hansson, el creador de Rails).

      Algo muy interesante es que todo esto se logró a través de pura ingeniería aplicada a mejorar proyectos existentes, y el equipo de Phusion lo usa como base de su trabajo de consultoría, pero lo comparte con la comunidad en general.

      Dejo debajo el video de Hongli Lai explicando las optimizaciones que hicieron durante un Google Tech Talk (charlas que organiza Google para sus empleados y comparte en video con el resto del mundo).

      Al video está en inglés, pero lo que puede resultar más complicado es seguir los detalles técnicos, que no son aptos para principiantes.

      viernes, 11 de febrero de 2011

      IonRuby 1.1.2 - Ruby sobre .NET sigue en marcha

      IronRuby

      En un mensaje en la lista IronRuby-core, Jimmy Schementi anunció la publicación de IronRuby 1.1.2.

      Aunque esta es una versión intermedia para corregir algunos temas menores, es una buena noticia ver que el proyecto sigue en marcha después de que Microsoft lo dejara por completo en manos de la comunidad, al liberar todos los fuentes como código abierto bajo licencia Apache 2.0.

      Esta versión básicamente mejora la compatibilidad con Ruby 1.9.2 e incluso corta la compatibilidad con Ruby 1.8.6, lo que es una buena medida para seguir hacia adelante con menores dependencias. Si alguien necesita todavía compatibilidad con 1.8.6 puede seguir utilizando IronRuby 1.0.

      Recordemos que tanto IronRuby como IronPython son ahora proyectos en los que Microsoft no participa más, quedando por completo bajo control de la comunidad, y liderados por Jimmy, Miguel de IcazaMichael Foord, y Jeff Hardy.

      El nuevo release mantiene las herramientas de integración con Visual Studio 2010, soluciona algunos problemas con la instalación de Gems, renueva por completo el parser (motivo de la decisión de soportar sólo 1.9.2) y arregla algunos problemas detectados en Windos Phone 7.

      IronRuby Tools for Visual Studio