lunes, 29 de noviembre de 2010

PyPy 1.4: ¡más rápido, más furioso!

PyPy

PyPy es una implementación de Python 2.5 (por ahora) escrita en Python, a diferencia de la implementación CPython de referencia. Más específicamente, PyPy es una arquitectura orientada a implementar fácilmente lenguajes dinámicos mediante dos componentes básicos: un intérprete y un framework de traducción.

Obviamente, implementar Python mismo fue el primer paso, y lo que impulsa el proyecto principal. Y con esta nueva versión han alcanzado un hito sumamente importante. En la mayoría de las pruebas estándar de velocidad de ejecución populares dentro de la comunidad Python, ¡PyPy es más rápido que CPython!

¿Suena increíble, verdad? Veamos los resultados de las últimas pruebas (aquí puede verse el análisis completo):

Comparación entre PyPy y Cpython

Para comprender cómo es posible, hay que entender un poco más la manera en que funciona el compilador JIT (just in time, ó a demanda) de PyPy. Que el lenguaje esté implementado sobre sí mismo no quiere decir que se trate de un intérprete sobre otro. PyPy está escrito en Python, pero lo que hace el intérprete es analizar el árbol de expresiones del programa, y a través de su framework de traducción, generar el código ejecutable a nivel de la plataforma objetivo, a medida que va necesitando hacerlo (esta es la parte a demanda).

Por ahora hay disponibles traductores para diferentes sabores de Intel, con los de ARM en camino, para IL de .NET (que a su vez compila a una serie de plataformas) y está en etapa de pruebas el soporte para la máquina virtual de Java.

Otras características PyPy son la capacidad de Sandboxing, es decir, la ejecución en un espacio controlado, lo que permite por ejemplo recibir scripts Python en forma anónima o semi-anónima y ejecutarlos en un servidor restringiendo algunas operaciones, como acceso al file system, comunicaciones de red, etc. Esto es muy útil para permitir crear soluciones extensibles sin generar problemas graves de seguridad.

PyPy también está disponible en versión Stackless que soporta el uso de micro-threads y otras características que permiten una enorme eficiencia en soluciones de muy alta concurrencia.

 

 

 

 

viernes, 26 de noviembre de 2010

Reunión Alt.Net en Buenos Aires

Alt.Net Hispano

Después de bastante tiempo, finalmente se organizó una nueva reunión de Alt.Net en Buenos Aires, programada para el próximo sábado 11 de diciembre, de 9:00 a 18:00. Un día completo entre geeks de alta gama.

Ya está abierta (y concurrida) la registración, y el evento será nuevamente en las oficinas de Microsoft Argentina, remodeladas recientemente, casi un estreno para la comunidad local.

El movimiento Alt.Net es totalmente independiente y distribuido, sin una organización institucional ni jerarquías, y agrupa a quienes utilizan la plataforma fuera y dentro de las ofertas corporativas, haciendo mucho énfasis en buenas prácticas de diseño y desarrollo, métodos ágiles, proyectos de código abierto y colaboración entre pares y entre la comunidad.

Más detalles pueden leerse en español en esta traducción de un artículo de Jeremy Miller, o con mucho más sabor local en este post del amigo Jorge Gamba. Es Jorge casualmente quien más trabaja en América Latina para mantener funcionando el movimiento Alt.Net Hispano, con el que se organizan las reuniones VAN (Virtual Alt.Net) semanales (una o dos por semana) desde hace meses, como comentábamos en un post reciente. Ya llevan casi 60 sesiones y todas están disponibles en video para verlas a demanda.

IMPORTANTE: Si van a asistir a la reunión en Buenos Aires, no dejen de revisar y agregar propuestas en la wiki del evento. Eso permitirá agilizar la votación y armado de la agenda durante el evento.

 

Como muestra del contenido de las VAN, reproduzco aquí esta fantástica sesión sobre Patrones de Diseño a cargo del Maestro Angel "Java" López, en la que hasta se da el lujo de mencionar algunos patrones en la música y ¡tocarlos en guitarra!

Unable to display content. Adobe Flash is required.

Videos de TDD en acción

Recién descubro esta excelente serie de videos de James Shore, autor del libro "The Art of Agile".

En la serie, James captura 10 o 15 minutos de sesiones de una aplicación que construye utilizando TDD en Java, sobre Eclipse. Los videos están narrados en inglés, pero más allá de la explicación, puede verse cómo va escribiendo el código y son muy ilustrativos, incluso cuando podemos no compartir algunos de los criterios que toma en determinado momento.

Comparto aquí el primer video de la serie, pero no dejen de ver la lista completa, que ya lleva 55 episodios, y últimamente involucra además a algunos invitados con lo que se puede ver no solo el ejercicio de TDD sino también el de programar de a pares.

jueves, 25 de noviembre de 2010

Cartilla visual de GIT

Para todos los que están todavía acostumbrándose a GIT o no recuerdan operaciones que no hace  frecuentemente, Matt Harrison comenzó a armar esta guía visual (cheatsheet), con la que se puede colaborar como explica en su post.

GIT Cheat Sheet

Pueden obtener la imagen a tamaño completo, para imprimirla y pegarla cerca de sus monitores.

 

S4: manejando flujos continuos de datos

S4: distributed stream computing platform

S4 es un nuevo proyecto Java abierto generado por los laboratorios de Yahoo!, orientado al procesamiento masivo de información.

Ya están establecidas como práctica corriente para este tipo de escenarios tecnologías como MapReduce o su implementación abierta Hadoop, pero hasta ahora casi todas ellas trabajaban por lotes (en batch), iniciando el procesamiento a raíz de un proceso interactivo (como una búsqueda) o programado con cierta frecuencia.

S4 está diseñado para procesar los datos a medida que van llegando (en forma de stream), sin almacenamiento intermedio. La arquitectura se basa en el modelo de actores, retomando una tendencia impulsada últimamente por AkkaIo y SALSA, e implementada localmente por el ubicuo Angel "Java" López en AjAgents.

Las características principales que busca S4 son proveer un servicio indefinidamente escalable en función a agregar nodos al cluster, descentralizado en la medida en que todos los nodos son iguales, parcialmente tolerante a fallas donde los eventos pueden volver a enrutarse en caso de fallas en cualquier nodo, elástico en la medida en que la carga se distribuye automáticamente a través de los nodos, expansible a través de un API simple y orientada a objetos, donde la comunicación entre nodos se escribe utilizando POJOs (plain Java objects).

Hay un tutorial basado en una aplicación que procesa mensajes de Twitter.