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.