Angel "Java" Lopez

NET, Java, PHP y Desarrollo de Software

This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

.NET

ASP.NET

Windows Form

VB.NET

C#

Sitios

Blogs

October 2011 - Posts

RubyConf Argentina 2011

Se viene una nueva edición de esta conferencia, vean:

http://rubyconfargentina.org
http://rubyconfargentina.org/es

(no es Norman Clarke (segundo desde la derecha) un Sheldon Cooper de Ruby ;-)

Son dos días de conferencias, Noviembre 8 y 9 (Martes y Miércoles). Leo en:

http://rubyconfargentina.org/es/event

RubyConf Argentina 2011 es un evento de dos días que se llevará a cabo el 8 y 9 de Noviembre en Buenos Aires. Será una conferencia técnica dirigida a programadores interesados en el mundo del desarrollo web y tecnologías modernas.

El programa estará pensado para cubrir las expectativas de un amplio espectro de programadores, desde el novato en Ruby hasta expertos y profesionales en busca de intercambiar sus conocimientos. El evento abrirá un canal de comunicación para que desarrolladores Argentinos y de todas partes del mundo podamos intercambiar ideas.

Además de disfrutar de nuestra agenda de dos días de charlas, tendrás la oportunidad de conocer rubyistas, desarrolladores Rails y entusiastas de todo tipo de tecnologías modernas.

Ver la agenda en:

http://rubyconfargentina.org/es/agenda

Tanto desarrolladores referentes locales como del mundo Ruby están en esta agenda. Les recomiendo ver la lista de oradores:

http://rubyconfargentina.org/es/speakers

Para tomar sólo algunos de los oradores:

Shugo Maeda

de Network Applied Communication Laboratory Ltd.
Shugo Maeda es director en Network Applied Communication Laboratory Ltd., es co-presidente de Ruby Association LLC, y un programador daimyo.
Es además Ruby committer. Ha sido orador en numerosas conferencias sobre Ruby, como Ruby World 2009 y RubyConf 2010.
Actualmente, Shugo está trabajando en Refinements para Ruby 2.0

@shugomaeda
ruby committer
website

Aaron Patterson

de ATTi
Cuando no está arruinando la vida de la gente escribiendo software como phuby, enterprise, y neversaydie, Aaron puede ser encontrado escribiendo software de un poco más util, como Nokogiri.
Para mantener su estilo de vida Game Boy, Aaron pasa su días de semana escribiendo software de alta calidad para ATTi. Por la noche es posible encontrarlo haciendo Karaoke, donde se lo puede ver cantar sus éxitos favoritos de soft rock de los años 70 y principios de los 80.

@tenderlove
rails core
github
ruby committer
website

Scott Chacon

de GitHub
Scott Chacon es VP de Git en GitHub. Es el autor del libro Pro Git de Apress (progit.org), el PDF Git Internals Peepcode, así como el engargado del mantenimiento de la homepage de Git (git-scm.com) y el Git Community Book.
Scott ha hecho presentaciones por todo el mundo. Linuxconf.au, OSCON, RuPy, Symfony Live, Ruby Kaigi, RailsConf, RubyConf, Scotland on Rails, Euruko, para nombrar algunas. Además entrena a corporaciones de todo el mundo en el uso de Git.
Scott no es actor en Mad Men y se rehúsa a participar del Karaoke.

@chacon
github
website
git evangelist

 

Nicolas Sanguinetti

de Cubox
Nicolás (también conocido como Foca), ya lleva 10 años escribiendo código horrible, cada línea peor que el anterior. Durante este período, aprendió algunas cosas sobre cómo probar código horrible, y espera poder decir una o dos cosas que valga la pena escuchar en esta presentación. Ojalá.
Por lo general programa algunos proyectos open source en Ruby y Javascript, que podemos encontrar en http://github.com/foca. Vive en Montevideo, Uruguay, donde trabaja como ingeniero para Cubox.

@godfoca
github
website

 

Emilio Gutter

de 10Pines
Co-fundador de 10Pines, una empresa Latinoamericana, basada en Buenos Aires, dedidaca a consultoría y desarrollo utilizando metodologías ágiles.
Emilio está muy comprometido con la comunidad Ágil local y ha sido miembro organizador de Agiles 2008, 2010 y 2011.
En el campo profesional ha trabajado en la industria de desarrollo de software por más de 10 años, participando en numerosos proyectos en Argentina, Brasil, Reino Unido, Estados Unidos, Francia, Rumania y Bulgaria.

@egutter
github
website

 

Vean que también hay un Ruby Fun Day, el Domingo 6 de Noviembre:

http://rubyconfargentina.org/es/rubyfunday

Un día completo para aprender, conocer y divertirse con Ruby y su increíble comunidad! Una oportunidad fantástica para conocer a otros colegas y compartir experiencias.

Es gratis y sólo para quienes estén registrados para RubyConf Argentina 2011.

Las actividades están pensadas para que cada uno traiga su laptop, o se junte con aquellos que la traigan, para poder hacer los juegos y talleres. Habrá enchufes y wi-fi para todos.

Habrá café y snacks, pero el almuerzo no está incluido en este evento.

La conferencia tiene costo (tengo entendido que 100 dólares), y tienen que registrarse.

Desde ayer Martes 25 de Octubre, hasta el 1 de Noviembre estaré twiteando un mensaje promocionando esta conferencia. Quienes hagan RT del mensaje participarán del sorteo de una entrada.

Es bueno ver a mi país lleno de conferencias de programación, lenguajes, ágiles. Y que llegue gente de afuera a conocer el ambiente local, que ya está insertado en el mundo. Como digo en mis charlas: hay que aprovechar esta oportunidad, hemos pasado de estar en el fin del mundo a participar del fuego de la galaxia desarrolladora.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Wed, Oct 26 2011 11:03 by lopez | 2 comment(s)

Smalltalks 2011 - Tu conferencia sobre desarrollo de software

Hoy tomo prestado el título y el texto de un mensaje del bueno de @HernanWilkinson enviado a la lista clubSmalltalk, escrito por la gente de Fundación Argentina de Smalltalk promocionando Smalltalks 2011 Argentina. Recuerden que si no conocen Pre-Smalltalks 2011, con charlas gratuitas de introducción.

Leo a Wilkinson:

 

¿Te enteraste que este año se hace nuevamente el congreso Smalltalks? (http://www.fast.org.ar/smalltalks2011)
Por ahí te estás preguntando qué puede tener de interesante un congreso sobre un lenguaje que seguro no usas para trabajar y que por ahí no conoces, pero si tenés 5 minutos, lee este mail, te puedo asegurar que no te vas a arrepentir y seguramente querrás venir al congreso :-)

Para empezar, este congreso no es únicamente sobre un lenguaje de programación sino sobre una tecnología y cultura de desarrollo que aún sigue influenciando fuertemente nuestra profesión. Por ejemplo, el año pasado vino a esta conferencia Gilad Bracha. ¿Quién es Gilad Bracha?, por ahí te suena el nombre... bueno, te suena porque es uno de los que está detrás de desarrollo de Dart, el nuevo lenguaje de Google (http://www.dartlang.org/) ¿Y qué tiene que ver Smalltalk? Justamente Gilad Bracha fue uno de los desarrolladores de Strongtalk (http://www.strongtalk.org/), el Smalltalk más rápido en su época, que utiliza compilación adaptiva, Polimorphic Inline Caching (PIC), tipado de variables opcional, etc. Todas soluciones que ahora se están implementando en Dart. Este año nos visita uno de sus más íntimos colaboradores, Vassili Bykov, implementador del UI de Newspeak, el último lenguaje en el que estaba trabajando.

Pueden leer sobre Dart en mi post. Mis enlaces http://delicious.com/ajlopez/dart Tuve el gusto de conocer a Gilad Bracha el año pasado en Smalltalks 2010, una persona muy amable, que tuvo la paciencia de asistir a mi charla. Y también a Eliot Miranda, a John O’Keefe, y varios Smalltalkers destacados de Argentina, como Wilkinson, Caniglia y Richarte (que nos los veía desde el siglo pasado), Andrés Valloud, Mario Martinez-Peck,  el bueno de @garduino y varios más. Escribí sobre los asistentes a Smalltalks 2010 en este post.

Pero no solo Smalltalk tiene algo que ver en lo que está sucediendo con Dart, sino también en Ruby... ¿escuchaste hablar de MagLev? (http://ruby.gemstone.com/) Es el servidor de objetos transaccionales y automáticamente persistibles para Ruby, ¿adiviná de dónde viene? MagLev es la implementación de Ruby corriendo sobre GemStone/S, un servidor de objetos transaccionales y persistibles para Smalltalk que tiene más de 25 años y que ahora VMWare compró por su gran potencial y solución como administrador de memoria transaccional para Java, si no lo sabías mirá http://www.springsource.com/products/data-management/gemfire65  ¿Qué tiene que ver con el congreso? que justamente viene al mismo Martin McClure, responsable de MagLev y Norman Green, arquitecto de GemStone! o sea, el que tiene la papa!! ¿Tenés dudas sobre las bases de objetos? ya sabés donde podés obtener las respuestas.

Pero por ahí a vos no te interesa nada de esto... por ahí cómo funcionan los lenguajes de programación o cómo están implementados no es lo tuyo, vos haces aplicaciones web y solo necesitás que la infraestructura escale, persista información rápido, etc. Si ese es tu interés, tenemos un lugarcito para vos también. ¿Escuchaste hablar de GLASS? (http://seaside.gemstone.com/) Es la implementación de Seaside, un framework dinámico basado en continuations para aplicaciones web usando GemStone! (http://www.seaside.st/). O sea, desarrollas una aplicación web como si fuese una aplicación desktop y tenés gratis la transaccionabilidad y persistencia a nivel objetos... y lo que es mejor, sin base de datos relacionales!!! Si!!!!, no más hybernate, no más SQL, no más tablas, solo objetos!.... Por ahí te parece una locura, por ahí te parece que no tiene sentido... te aconsejo que no saques ninguna conclusión y no dejes de venir a escuchar a Dale Henrichs, el encargado de este producto quien nos contará todos los detalles del mismo y cómo influye en los desarrollos web.

¿Aún no te convencí? ok... dejame intentar un poquito más... ¿Conoces a Alan Kay? ¿Turing award, "padre de la computadora personal", creador de Smalltalk? (http://en.wikipedia.org/wiki/Alan_Kay) No, no, no viene él, todavía :-),  pero vienen Ian Piumarta y Kim Rose, dos de los más íntimos colaboradores de Alan Kay en los proyectos que están llevando adelante en su fundación sobre lenguajes de programación mínimos como OMeta y ambientes de enseñanza como SqueakLand. (http://www.vpri.org/index.html). ¿Te interesa saber cómo usar la computadora para enseñar? Le vas a poder preguntar a Kim. Te interesa saber cómo implementar una buena VM, lo vas a tener a Ian cerquita para conversar.

Yo escribí sobre Piumarta (y algo implementé de sus ideas) en:

Self-sustaining Systems, Cola, Pepsi, Coke y Mate
Presenting AjSoda

Si aún estás leyendo y no fuiste al final de la página significa que aún no te convencí... hmmm, a ver qué te parece esto: MOOSE (http://www.moosetechnology.org), una plataforma para hacer análisis de tus programas, no importa si están escritos en Java, C++, C# o Smalltalk, te permite ver visualmente el diseño de tu sistema no usando esos diagramitas simples de UML sino por medio de gráficos especialmente preparados para reconocer rápidamente algunos errorcitos que por ahí tiene tu sistema :-). Tudor Girba, desarrollador de esta plataforma vendrá a comentarnos cómo funciona, cómo está desarrollada y qué podés hacer con ella puesto que además es gratis!

Por ahí ya estás aburrido de leer tanto, no te culpo y tampoco me culpes a mi! es un congreso excelente! no te lo podés perder!, puesto que la cosa no termina acá... si te interesa saber sobre los principales ambientes de desarrollo en Smalltalk tanto opensource como comerciales, tendrás la oportunidad de conversar con Markus Denker de Pharo (http://www.pharo-project.org/home)  y John O'Keefe, arquitecto de VASmalltalk (http://www.instantiations.com/)

¿Muchos temas relacionados con la industria no? ¿y qué hay acerca de investigación, aún se investiga algo en con Smalltalk? Te comento que este es el segundo año consecutivo que el congreso tiene una sección completamente dedicada a la investigación, con un comité evaluador envidiable y con publicaciones en journals. Por lo tanto, si te interesa hacer investigación con objetos y necesitas que tus publicaciones sean en congresos reconocidos, te comento que Smalltalks es uno de ellos. Y no me quiero olvidar de la docencia universitaria... Smalltalk sigue siendo el lenguaje utilizado para enseñar objetos en casi todas las universidades y no para enseñar meramente un lenguaje de programación comercial.

Y a pesar de todo esto, de toda esta gente que nos va a visitar y con quienes podremos compartir su experiencia y la nuestra, falta lo más importante: La comunidad argentina de Smalltalk, una de las principales comunidades en el mundo de esta tecnología. Es esta comunidad que hace 5 años está organizando este congreso a todo pulmón y hace 3 años viene ganando de manera consecutiva el primer y tercer puesto del "Esug Technology Award", premio a los mejores desarrollos hechos en Smalltalk a nivel mundial! y lo más interesante es que los ganadores son de distintas universidad de nuestro país como la UBA, la UAI y la UTN!
Y la comunidad no se limita a eso... ¿sabés que hay un Smalltalk argentino? ¿un Smalltalk desarrollado por un argentino y utilizado a nivel mundial? se llama Cuis y su desarrollador Juan Vuletich (http://www.jvuletich.org/Cuis/Index.html), quien además está llevando adelante el desarrollo de Morphic 3.0 y trabajó junto a Alan Kay desarrollando Squeak. ¿O sabías que el layer open source para comunicarse con base de datos relacionales desde Pharo o Squeak más usado también fue desarrollado por argentinos? o que el framework de serialización de objetos opensource Fuel también fue desarrollado por un argentino? Te suenan Mariano Martinez Peck, Guillermo Polito, Martín Dias, Esteban Lorenzano entre otros?, ellos son parte de nuestra comunidad y nos recuerdan constantemente la muy buena capacidad técnica que tenemos en nuestro país. También es argentino el arquitecto de la VM de Smalltalk más rápida que hay, la de VisualWorks (http://www.cincomsmalltalk.com/main/products/visualworks/) y le podés preguntar cómo hizo para acelerar hasta cerca de un 70% el GC en el último año, y vas a poder escuchar una charla de un argentino que es smalltalkero hace más de 20 años... ¿te imaginás cómo sería tu productividad si estuvieras trabajando hace más de 20 años en el mismo lenguaje? ¿un lenguaje que además sigue dando mucho a nuestra profesión?... Esta gente es parte de esta gran comunidad y también participarán de este maravilloso evento.... este congreso no es solo importante por la gente que viene sino por la gente que ya está!

Espero haberte convencido, espero que te hayas dado cuenta que este congreso no es acerca de un lenguaje de programación sino de una comunidad de desarrolladores que quiere compartir con vos lo que conoce y también aprender de vos. Si querés ayudar a que esta comunidad siga creciendo, si querés ayudar a que este congreso siga siendo un congreso de desarrolladores y para desarrolladores, anotate acá: http://www.fast.org.ar/smalltalks2011 Es gratis y te puedo asegurar que no te vas a arrepentir. Podes ver las charlas que se darán en:  http://www.fast.org.ar/smalltalks2011/talks

Este año se hace del 3 al 5 de Noviembre, en la Universidad de Quilmes. Y no está cerrada sólo al mundo de los objetos, este año Fidel (Pablo E. Martínez López), uno de los referentes argentinos de Programación Funcional, una comunidad que comparte que en definitiva somos todos desarrolladores, dará una charla sobre objetos! Mirá las reacciones que ya está provocando: http://vimeo.com/30529851
Te esperamos!
FAST.
http://www.fast.org.ar

Espero haber aportado a la difusión de esta conferencia. Si hasta aceptaron una charla mía para este año. Lo mío es un apostolado ;-) ;-)

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Fri, Oct 21 2011 11:51 by lopez | with no comments

Pre-Smalltalks 2011 Argentina: Charlas Introductorias de Smalltalk en Buenos Aires y Quilmes

La gente de FAST (Fundación Argentina de Smalltalk) está preparando una nueva edición de Smalltalks 2011:

http://www.fast.org.ar/smalltalks2011/

para el jueves 3, viernes 4 y sábado 5, en la Universidad de Quilmes (Provincia de Buenos Aires)

Ver más detalle en el sitio, y en el post del bueno de @MartinSalias (que incluye mi sesión del año pasado en video! Un curso de Anglish acelerado ;-):

Smalltalks 2011, los días 3, 4 y 5 de noviembre en Quilmes (+video del 2010)

Como no todos conocen Smalltalk, la gente de FAST ofrece cursos gratuitos la semana que viene. Esta es la gacetilla del anuncion:

==============================================

Si estas interesado en asistir a la conferencia internacional Smalltalks 2011 a celebrarse en la Universidad Nacional de Quilmes este año los dias 3, 4 y 5 de noviembre, pero no conoces Smalltalk, te invitamos a participar de la pre-Smalltalks 2011. En la pre-Smalltalks podrás aprender que es Smalltalk, los conceptos básicos detrás del lenguaje, y algunos de los frameworks más populares como para poder aprovechar mejor la experiencia de las charlas de la conferencia Smalltalks 2011. Las fechas de las charlas son: Martes 25/10 - UNQ - 14hs a 18hs. Sábado 29/10 - UTN FRBA - 14hs a 18hs.

- A la brevedad confirmaremos el schedule -

Los interesados deben completar sus datos en el siguiente formulario: https://docs.google.com/spreadsheet/viewform?formkey=dHNjcVJ4NVc1YWh4ZjV2MXJ0dnN3T2c6MQ

Para más información:

UTN: Carla F. Griggio carla.griggio<at>gmail.com con el tag [Talks@UTN] en el email

UNQ: Gabriela Arévalo gabriela.b.arevalo<at>gmail.com con el tag [Talks@UNQ] en el email.

==============================================

 

Aprovechen la oportunidad de tomar contacto directo con esta tecnología (que es más que un lenguaje, habría bastante para comentar).

Vean que en el sitio de Smalltalks 2011 que ya están publicados los oradores y las charlas que se van a dar (una gran cantidad de charlas, parece que hubo que seleccionarlas). Notablemente, la que propuse yo, salió seleccionada! Tengo que practicar Anglish…. A trabajar, ahora ;-)

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Thu, Oct 20 2011 11:46 by lopez | 2 comment(s)

Filed under:

AjGenesis: Generación de código para Ruby on Rails

Gracias al bueno de @lmpetek que escribió un post sobre su experiencia con AjGenesis:

Rails tiene scaffold, nosotros usamos AjGenesis

Es bueno encontrar evidencia publicada de usuarios de mi proyecto open source AjGenesis de generación de código DESDE UN MODELO. Me llega evidencia de que lo usan (correos electrónicos, comentarios en mis charlas, etc…), pero encuentro poca evidencia publicada, y es bueno encontrarla. Interesante que @lmpetek y sus equipos usen AjGenesis (incluso llegó a usarlo fuera de Windows, gracias a que funciona con Mono en otros sistemas operativos). Sé que sus equipos hasta lo usaron para generar reportes de MS SQL Server Reporting Services ;-)

También recuerdo que de una aplicación que estaban construyendo en Java, al tener un modelo independiente de la tecnología, se pudo pasar a dar una demo en .NET con poco esfuerzo. Y que si quieren modificar la forma de acceder a los datos (por ejemplo, de JDBC a Hibernate) tranquilamente pueden modificar los templates para conseguir ese efecto. Teniendo la lógica en archivos generables una sola vez, cuando cambian el modelo y regeneran, esa lógica no se pierde. Y cuando trabajaron en .NET, pudieron pasar de usar un framework para las operaciones sobre objetos (persistencia) a otra forma, usando ADO.NET, SIN CAMBIAR LO QUE YA HABIAN escrito de la solución. Algo comenté sobre esta experiencia en:

Generación de código con AjGenesis en un proyecto real

Incluso un proyecto, que ya habían iniciado sin generación de código, sirvió de base para abstraer el modelo y la forma de codificación (proyectos, patrones, clases, reparto de las responsabilidades) y conseguir generación de código. Escribí sobre eso en:

AjGenetizando una aplicación

Y ahora comienzan a usarlo para Ruby on Rails. Notable! Leo en el post:

Luego de utilizarlo en proyectos reales para generar soluciones en .Net y Java, fue absolutamente natural utilizarlo para generar proyectos Ruby on Rails.
A la generación de código la considero un aliado indiscutido en la programación diaria para cualquier equipo de desarrollo maduro.

Si el proyecto tiene una base de datos 'Legacy' utilizamos AjGenesis para extraer la información desde las estructuras de las tablas en la DB y volcar esto en entidades agnósticas con las que luego  generamos los modelos, los controladores y las respectivas vistas.
Recién en este punto avanzamos manualmente, agregando la 'inteligencia' al proyecto. Aportando el diferencial real para que una aplicación tenga ese plus que tanto valora nuestro cliente. La diferencia es que esta etapa para nosotros comienza muy tempranamente.
Podemos regenerar toda la apariencia de la aplicación, realizando cambios en los templates en que se basa la generación y tener todo funcionando en poco tiempo.

Noten una cosa: como ya el equipo entiende AjGenesis (de proyectos anteriores en Java y .NET), puede escribir sus propios templates, en lugar de usar la generación que viene con Ruby on Rails. Eso apoya algo que defiendo: hay que hacer sus propios templates, en base a lo que uno sabe. Usar templates de otros puede ser fácil al comienzo, pero al madurar el proyecto y querer modificarlos puede complicarse. La generación de código tiene que producir texto que entendamos. ¿Qué mejor que hacerlo con nuestros propios templates? Basados en nuestra experiencia de codificación “normal”. Es por eso que los templates que vienen con AjGenesis son de “prueba de concepto” y nada más. Cada equipo, empresa, debe cultivar y nutrir a sus artefactos de generación de código, en lugar de simplemente importarlos de otro lado. Es decir, promuevo el crecimiento orgánico (por ejemplo, baby steps, incremental).

Vean que el conocimiento adquirido en los equipos en la separación de las responsabilidades ha ido sobreviviendo (y espero mejorando) de .NET a Java y ahora a Ruby on Rails. Un ejemplo de dunga dunga a la tecnología ;-)

Post relacionado (gracias al bueno de @ferclaverino):

AjGenesis y Generación de Código: viendo la luz

donde explica su experiencia en proyecto real con AjGenesis.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Tue, Oct 18 2011 10:56 by lopez | 1 comment(s)

AjTalk y Javascript (Parte 1) El Modelo Abstracto

Post Siguiente

Hace tres semanas escribí los posts:

Smalltalk and Javascript
Smalltalk y Javascript

Este año (2011) escribo un montón de código Javascript, así que ya estoy más entrenado en su uso. Como comentaba en los posts mencionados, estoy trabajando mi VM de código abierto AjTalk (implementada en C#) para que pueda generar código Javascript (sí, yo también! ;-). Este primer post está dedicado a describir el nuevo modelo abstracto que reside en el projecto de librería de clases AjTalk.

El AjTalk tradicional procesa y “parsea” código Smalltalk desde consola o archivos, lo arma en memoria (armando los métodos como secuencias de bytecods de la máquina virtual), y los puede ejecutar. Pero ahora, tengo un nuevo modelo abstracto en memoria. Vean, en la actual versión, el Model:

La idea es tener representaciones en memoria de clases, métodos, expresiones. Algunas interfaces:

Hay varias clases que implementan IExpressio: SetExpression, ConstantExpression, MessageExpression, ArrayExpression, etc. La más interesante, quizás, es MessageExpression: representa código que tiene un receptor, un selector de mensaje y tiene a otras expresiones como parámetros:

a + b. “binary messages”
anObject doSomething. “unary messages”
anObject do: aParameter with: anotherParameter. “keyword messages”

La clase ModelParser se encarga de leer un stream de chars y los convierte en el modelo abstracto en memoria:

En el estado actual del proyecto, pude procesar un file out de la clase Object de Squeak. Mi idea es procesar todas las clases del kernel de Squeak (jeje … estoy un poco perezoso para escribir mi propia librería ;-)

Las principales clases del modelo abstracto:

CodeModel tiene una lista de elementos: cada “chunk” de código se parsea a memoria y es agregado a esta lista. Si un “chunk” representa la definición de una nueva clase, se crea un nuevo objecto ClassModel para representarla. Por cada métedo definido, se crea un objeto MethodModel.

Ahora, puedo manipular esta representación abstracta en memoria. Quiero experimentar este modelo para usar un patrón Interpreter: evaluar las expresiones, DIRECTAMENTE usando este modelo abstracto, en vez de compilar a Bytecodes. Pero por ahora, el camino a explorar es usar el patrón Visitor para recorrer el modelo abstracto, mientras se lo va traduciendo a código BLOCKED SCRIPT

Estas son las clases que estoy escribiendo para este paso:

Vean que podría implementar otros Visitor: puedo generar otro código (¿Ruby? ¿otra forma de pasar a Javascrip? ¿Dart? ;-) o, como escribí más arriba, podría ejecutar el código en memoria usando un patrón Interpreter, por ejemplo, haciendo que cada IExpression tenga un método Evaluate (usar un Visitor me parece algo extremo).

El proyecto AjTalk.Compiler es una aplicación de consola que toma un archivo como parámetro (por ejemplo, Object.st) y genera un archivo Program.js en Javascript. Parte del código generado luego de procesar el file out de Squeak de Object (Work in progress):

Ya saben: soy adicto a Twitter: así que quedó capturado parte de mi TweetDeck en el rincón de abajo a la derecha ;-). Tome el código de arriba y lo procesé con Node.js sin errores (sólo define funciones, todavía no probé si la semántica es la correcta). Debería implementar algunas primitivas (vean que en el código de arriba, las primitivas las genero como comentarios Javascript). Las estrategias que estoy usando para traducir elementos de Smalltalk a Javascript puede cambiar en el futuro cercano. Estoy experimentando distintas soluciones.

Próximos temas: cómo implementar elementos de Smalltalk (clases, herencia, expresiones) en Javascript.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Fri, Oct 14 2011 12:44 by lopez | 1 comment(s)

Dart Programming Language: el matador de Javascript?

Ayer, lunes, fue el día: Google corrió el velo y presentó en sociedad a su nuevo “hijo”: el lenguaje de programación Dart. Primero, algunos enlaces:

Mi anterior post: Dart Programming Language: the new kid on the block
La Keynote de anuncio en la Goto Conference

El post de ayer de Lars Bak
Dart: a language for structured web programming
http://googlecode.blogspot.com/2011/10/dart-language-for-structured-web.html

Vean la interesante presentación (historia, motivación para Dart, enlaces, relación con otros lenguajes y JVM): Presentación

El sitio oficial
http://www.dartlang.org

El código del proyecto
http://code.google.com/p/dart/

Clásico ejemplo: Hello World
http://www.dartlang.org/docs/getting-started/index.html

Especificación del lenguaje
http://www.dartlang.org/docs/spec/index.html

Gramática de Dart

Algunas noticias:

Google unveils Dart, its new programming language for building web applications
http://thenextweb.com/google/2011/10/10/google-unveils-dart-its-new-programming-language-for-building-web-applications/

Google starts to detail Dart
http://www.i-programmer.info/news/98-languages/3174-google-starts-to-detail-dart.html

Google debuts Dart, a JavaScript alternative
http://news.cnet.com/8301-30685_3-20117924-264/google-debuts-dart-a-javascript-alternative/

Bien, veamos algunos ejemplos, con comentarios cortos. El lenguaje parece simple, entendible. Vean el “Hello, World”:

main() { 
    var name = 'World'; 
    print('Hello, ${name}!');
} 

Los objetivos de diseño (tomados de Technical overview)

  • Create a structured yet flexible programming language for the web.
  • Make Dart feel familiar and natural to programmers and thus easy to learn.
  • Ensure that all Dart language constructs allow high performance and fast application startup.
  • Make Dart appropriate for the full range of devices on the web—including phones, tablets, laptops, and servers.
  • Provide tools that make Dart run fast across all major modern browsers.

A primera vista, sí, es simple, familiar (no es Objective-C ni APL ;-). Incluye clases y herencia. Tipos de datos son opcionales. Notablemente, puede ejecutarse de dos formas: en una máquina virtual nativa para Dart o traducido a Javascript. Leo en Lars Bak blog:

Dart code can be executed in two different ways: either on a native virtual machine or on top of a JavaScript engine by using a compiler that translates Dart code to JavaScript. This means you can write a web application in Dart and have it compiled and run on any modern browser. The Dart VM is not currently integrated in Chrome but we plan to explore this option.

Según the Technical overview, los problemas a atacar (para desarrolladores web):

  • Small scripts often evolve into large web applications with no apparent structure—they’re hard to debug and difficult to maintain. In addition, these monolithic apps can’t be split up so that different teams can work on them independently. It’s difficult to be productive when a web application gets large.
  • Scripting languages are popular because their lightweight nature makes it easy to write code quickly. Generally, the contracts with other parts of an application are conveyed in comments rather than in the language structure itself. As a result, it’s difficult for someone other than the author to read and maintain a particular piece of code.
  • With existing languages, the developer is forced to make a choice between static and dynamic languages. Traditional static languages require heavyweight toolchains and a coding style that can feel inflexible and overly constrained.
  • Developers have not been able to create homogeneous systems that encompass both client and server, except for a few cases such as Node.js and Google Web Toolkit (GWT).
  • Different languages and formats entail context switches that are cumbersome and add complexity to the coding process.

Bien que mencionen a Node.js. Lars Bok escribe:

Dart targets a wide range of development scenarios: from a one-person project without much structure to a large-scale project needing formal types in the code to state programmer intent. To support this wide range of projects, Dart has optional types; this means you can start coding without types and add them later as needed. We believe Dart will be great for writing large web applications.

The language comes with a set of basic libraries and tools for checking, compiling, and running Dart code, all of which will evolve further with your participation. We've made the language and preliminary tools available as open source on dartlang.org. Check out the site to give feedback, learn more about Dart, and participate in its development.

Un ejemplo con clase, interfaz, tipos:

interface Shape {
  num perimeter();
}
class Rectangle implements Shape {
  final num height, width; 
  Rectangle(num this.height, num this.width);  // Compact constructor syntax.
  num perimeter() => 2*height + 2*width;       // Short function syntax.
}
class Square extends Rectangle {
  Square(num size) : super(size, size);
}

Noten el tipo num: Dart soporta int y double como subtipos de num. Vean la Core Library (subject to change).

Podría usar el código de abajo en mi proyecto javascript AjDraw ;-)

class Point {
  var x, y;
  Point(this.x, this.y);
  scale(factor) => new Point(x*factor, y*factor);
  distance() => Math.sqrt(x*x + y*y);
}
main() {
  var a = new Point(2,3).scale(10);
  print(a.distance());
}

Vean la notación => para las funciones (también pueden definirlas normalmente). ¿No hay código en los constructores? Sí, lo hay, pueden escrirlo. Pero en el ejemplo de arriba se ve la notación para asociar los parámetros recibidos con las variables del objeto. Notablemente, hay constructores con nombre:

class Point {
  num x, y;
  Point(this.x, this.y);
  Point.zero() : x = 0, y = 0;
  Point.polar(num theta, num radius) {
    x = Math.cos(theta) * radius;
    y = Math.sin(theta) * radius;
  }
}

Más detalles en Idiomatic Dart: vean setter, getters y campos, constructores factoría, declaración de funciones, el uso de =>, interpolación de string (todos se copian de AjSharp ;-), igualdad (hmm, tienen == y ===).

Update: Veo que tiene comunicación con Isolate, que permite escribir código que se ejecuta en paralelo. Pero no hay soporte DIRECTO de threads (es decir, no se puede lanzar un thread, la máquina virtual los maneja internamente). Vean el uso de port:

class Printer extends Isolate {
  main() {
    port.receive((message, replyTo) {
      if (message == null) port.close();
      else print(message);
    });
  }
}
main() {
  new Printer().spawn().then((port) {
    for (var message in ['Hello', 'from', 'other', 'isolate']) {
      port.send(message);  
    }
    port.send(null);
  });
}

Primeras impresiones: hmmm... es más claro que Javascript, pero habrá que ver si gana en momento, si se forma un ecosistema activo. Parece que está preparado para ejecutarse en varios browsers. Al menos puede compilarse a javascript, para ejecutarse en donde se acepte javascript. Y al parecer, es fácil de entender.

Mis enlaces:
http://www.delicious.com/ajlopez/dart

Es tiempo de escribir un intérprete/VM de Dart en C#, y compilarlo a C#, aprovechando CLR y las librerías .NET (me gustaría que accediera a esas librerías, como ahora hace AjSharp). ¿Será tiempo de un DartSharp? ;-) https://github.com/ajlopez/DartSharp

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Tue, Oct 11 2011 10:38 by lopez | 1 comment(s)

El Maestro no toca la plata

El Sábado pasado, 1ro. de Octubre, recibí la noticia de mi renovación como Microsoft MVP, esta vez en C# (bravo! Ahora sí, C#!). Gracias a @ferglo, @nportillo por el apoyo todos estos años, y a Carlos “Billy” Reynoso que me postuló por primera vez en 2002 (que recuerde).

Aprovecho ese anuncio personal, para aclarar terminología “aj”. Recibí mensajes como “Felicitaciones, Maestro!”. ¿De donde viene eso de “maestro”? No es por dar cursos (que ya no los doy, prácticamente), sino que viene por otro lado. A fines de los 90, yo daba varias charlas y cursos. Eran épocas de Java y también de VB5, IDEs de Microsoft, como el Visual Interdev. Lo de Java lo conseguía de la red, y lo de Microsoft, lo conseguía por estar relacionado con la filial local, dentro del grupo de los “Innovators” (un proyecto piloto local, antes de los MVP globales), así que tenía todas las herramientas de programación de ambos lados. (Me temo que la filial local de Sun estaba únicamente preocupada por vender workstations, no estaba muy interesada en difundir sus tecnologías de programación entre los programadores, sino entre periodistas y gerentes).

Entonces, cuando alguien en un curso me preguntaba el precio de lo que yo estaba usando (una IDE o herramienta de Microsoft), YO NO TENIA IDEA DE CUANTO COSTABA (todavía hoy desconozco los precios), y contestaba levantando las manos: “El Maestro no toca la plata!” ;-) como la frase (famosa en Argentina) del capocómico (desaparecido en 1988) Alberto Olmedo, en el personaje del Manochanta (por “mano santa”, en Argentina “chanta” es algo así como “estafador”). Cuando le ofrecían plata por algún trabajo, consejo, su asistente (la turca Salomón) tomaba los billetes rápidamente, diciendo “El Maestro no toca la plata!”. Pueden recordarlo/conocerlo en:

http://www.youtube.com/watch?v=B9DAWyZS5UU

Más de Olmedo en Youtube aquí. ;-)

Por eso, en inglés uso “Master”, en lugar de “Teacher”, recordando a Porcel (cómico también desaparecido, alguno lo habrá visto en Carlito’s Way), cuando hacía el sketch de “La Peluquería de Don Mateo”, donde gritaba “Master of masters, maestro de maestros”, para alabar a alguien. Hoy, Google translate me traduce “Master” como “Maestro”.

Bueno, una anécdota personal, como el origen de mi nickname.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Wed, Oct 5 2011 11:53 by lopez | with no comments

Filed under:

Java vs. .NET

El otro día, estaba por terminar mi día de trabajo en equipo, cuando escucho algunas palabras fuertes llegando desde otro equipo:

“Recórchilis!”
”Cáspita!”

Bueno, eran un poco más fuertes… ;-)… Y estaban dedicadas a Java. Dos programadores .NET estaban tratando de armar un programa Java que se comunicara con un servidor web, servicio REST supongo, con autenticación. Y estaban luchando con la librería y el lenguaje Java.

Eso lo he visto en varios desarrolladores .NET que en algún momento tienen que trabajar en Java. ¿Es así? ¿Es Java más difícil de programar, más “convoluted”?

Recuerdo aquel viejo “sketch” de Les Luthiers, cuando Yugurtu Ungue le escribe desde EE.UU. a su tío en Africa: “Trabajo en una serpiente gigante que va por un camino de metal” y el tío contesta “Ah! Es lo más parecido a un tren que escuché en mi vida!” Ver

http://www.youtube.com/watch?v=QfB7N_z7dJM

http://www.youtube.com/watch?v=1WqMOXXcQ9c

http://www.youtube.com/watch?v=x2aRiZCM0i8

;-)

Algo así digo yo cuando me describen a .NET: “Es lo más parecido a Java que escuché en mi vida!”. ;-)

Java aparece al público en 1995 de la mano de Sun. Y fue el primer lenguaje/tecnología que llevó a las masas: objetos con garbage collector, una amplia librería de clases, y una máquina virtual que puede ejecutarse en distintos sistemas, sin necesidad de recompilar (fuera las incompatibilidades de portar int de C de Unix a otro Unix, por diferencias de tamaño). Y eso fue bueno: yo nunca llegué a tocar VB6, y me libré de usar Threaded Apartment Model, COM+, y esa cosa trasnochada que eran los recordset desconectados en ADO. Eso sí era “convoluted”!

Lo que pasó, es que Microsoft consiguió mejorar todo eso, con la llegada de .NET, con un mejor tooling inicial y una librería de clases “afiatada” luego de la experiencia de Java. Hasta hizo pruebas de usabilidad y mejoró la librería (un poco) en la siguiente versión. Por ejemplo, aparecieron File.ReadAllLines al ver que los programadores .NET tenía dificultad en entender los streams y readers (justamente, ese era uno de los temas que el equipo que mencioné arriba estaba luchando, creando InputStream, Reader, BufferedReaders y demás en Java). Mientras tanto, Java sufría las especificiaciones J2EE de Sun: parecía que las había escrito el “enemigo”. A Java lo salvó la comunidad open source: desde Tomcat hasta Hibernate, hasta el notable Eclipse. A .NET lo salvó Microsoft: siguiendo un crecimiento natural, mientras que en Java todavía estamos esperando la llegada de closures naturales en el lenguaje. Hasta la movida de Microsoft de publicar C# y .NET como standard, permite el nacimiento del proyecto Mono, y hoy tenemos .NET multiplataforma.

A Java lo salvan también IBM con su apoyo a Eclipse, la fundación Apache, Spring Framework, Hibernate (vean cómo influyó en EJB 3, demasiado tarde) y otros proyectos de código abierto. Es gracias a esos movimientos que tenemos unas IDE open source en Java: Eclipse. Tal vez su gran característica (flexibilidad, todo es un plugin) conspira con la experiencia Out of the box que nos da Visual Studio. Cada Eclipse de cada máquina/equipo, en una consultora, es un Eclipse distinto ;-). Otro caso, Jboss Application Server, con microkernel: con un problema (su herencia de EJB, JEE), tan flexible, que termina siendo un mundo complicado comparado con las tecnologías servidoras que tenemos en .NET.

Pero vean algunas cosas: eso que pasó en Java, la aparición temprana de tantos frameworks y librerías, también hace que hoy, un proyecto Java, es un modelo para armar. Tantas opciones (y además dispares) agrega complejidad. Vean cómo todo esto propulso la aparición de Spring Framework (para poder ligar multitud de librerías dispares) y ese agitador de discos duros que se llama Maven. Muchos aman a Maven, un automatizador de builds y manejador de proyectos, porque soluciona un problema que NO TENDRIA QUE SER PROBLEMA: manejar la complejidad. Yo sigo pensando que Ant es mucho más entendible. Vean que tanto Spring Framework como Maven no han tenido necesidad de ser usados en .NET.

Vean cómo la complejidad de especificaciones como los Web Services han sido resueltos de distinta forma por Java/Sun y .NET/Microsoft. Mientras que tenemos WCF (complicado de configurar, pero empaquetado simplemente) en .NET, del lado de Java tenemos DECENAS de .jars (librerías) para construir la librería Metro.

Espero que NuGet no agregue esa complejidad de opciones en .NET: por lo menos, lo que me trae NuGet queda dentro de la solución que manejamos, y al contrario de Maven, se ocupa de ese solo tema: ser un package manager.

Hoy hay una comunidad de Java altamente activa, pero algo golpeada por la compra de Sun por Oracle. Hay también una gran actividad en el soporte y difusión de lenguajes dinámicos sobre la JVM, notablemente Scala, Clojure y Groovy. Hay algo menos en .NET (donde Microsoft “mató” IronRuby, IronPhyton, esperemos qué hace con Javascript). Pero hay una gran comunidad de proyectos de código abierto, o directamente consumibles via NuGet.

No tengo una conclusión para el post, mas que un resumen: Java es el padre de gran parte de .NET, Java tuvo una historia accidentada, tiene una comunidad altamente activa, pero su futuro es incierto de la mano de Oracle. Hay dinamismo en pasar de Java a JVM + lenguajes. .NET sigue su futuro, en aplicaciones servidoras? (¿qué pasará con las interfaces de usuario?). Java y tooling es más áspero o complejo en el lado de Java que del lado de .NET.

Y si Uds. trabajan en .NET, es gracias a que en la historia apareció Java.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Posted Tue, Oct 4 2011 12:18 by lopez | 8 comment(s)