November 2012 - Posts
Luego de trabajar en ejemplos distribuidos con Node.js (ver Genetic Algorithms), y en mi intérprete Python en .NET (Post, GitHub repo), volví a trabajar en AjTalk, mi implementación de una VM Smalltalk. Tengo tres proyectos (versión C#, versión Java, versión JavaScript), pero en estos días estroy trabajando en la versión C#.
El fin de semana pasado, agregué un simple/ingenuo pero funcional grabado/lecturan de imágenes, y tengo un nuevo compilador de bytecodes: en vez de “parsear” el código y directamente generar “bytecodes”, ahora hay una implementación alternativa que construye un árbol AST, en memoria, y usando el patrón Visitorr, genera los “bytecodes” correspondientes. El año pasado había implementado el AST para con un Visitor ir recorriendo los nodos e ir generando código JavaScript, que se levanta con la versión AjTalk en JavaScript. El patrón Visitor podría usarse para generar distintas salidas, usando el mismo AST. Por ejemplo, tengo pensado como “prueba ácida”, armar un Visitor que genere Python (alternativas: que genere Ruby o C#, en este último caso exploraría el usar objetos dynamic).
Desde hace tiempo, puedo crear más de una Machine: una imagen viva en memoria, cada una con su propio Object, Class, ClassDescriptor, etc. En vez de ser un Singleton, puedo crear y levantar desde imágenes más de una Machine. El código principal en:
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk/Machine.cs
Pude entonces generar una imagen mínima de un “Hello world” con menos de 300 bytes (! ;-), ver el código en:
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk.Console/Programs/HelloWorld.st
También estube entrenando a los dos parsers para lean y ejecuten código de Pharo:
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk.Tests/CodeFiles/PharoCoreKernelObjects.st
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk.Tests/CodeFiles/PharoKernelNumbers.st
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk.Tests/CodeFiles/PharoKernelClasses.st
Y todo escrito usando TDD.
Ahora que tengo varias máquinas en memoria, quiero implementar esta idea:
- Cargar/Crear una Machine A (con sus clases, métodos, objetos) teniendo una librería completa de clases
- Cargar/Crear una Machine B, teniendo solamente algunas clases y objetos
- Hacer que la Machine A sea el “host” de la Machine B. Es decir, que se ocupe de darle lo que no tiene, ver el próximo punto.
- Reimplementar el proceso del mensaje #doesNotUnderstand en la Machine B para que, si el método correspondiente no es encontrado en esa máquina, la búsqueda del mismo continúe en la máquina “host”, la Machine A. De esta manera, podría usar todo el poder la Machine A, para operar sobre una Machine B más liviana, manteniendo la “liviandad” de ésta. La Machine A podría tener todas las herramientas de desarrollo, clases, objetos, métodos, mientras que la Machine B sigue teniendo un tamaño mínimo. Ideas similares están siendo exploradas por @morplenauta (“committer” de Squeak, ver la lista en español.
(Actualización: hoy a la mañana, conseguí implentar lo de arriba, pero será tema de otro post).
Otro proyecto: tener implementado un servidor web mínimo, que sirva archivo estáticos, aprovechando clases nativas de .NET, por ejemplo, lo de System.NET.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Gracias al Microsoft User Group de Argentina, voy a dar una jornada (mañana y tarde) de Programación con Node.js, en la sede de Buenos Aires. Más detalles, costo, inscripción en:
http://www.mug.org.ar/Eventos/3842.aspx
El horario es de 9 a 18hs, con intervalos (hay refrigerio al mediodía, si quieren). Tenemos WiFi, escritorios para las notebooks, así que si traen alguna (uds. o en pares), podemos encarar algunos ejercicios y probar programas y sitios durante la jornada. Recomiendo venir entonces con Node.js http://nodejs.org/download/ y Git instalado http://git-scm.com/.
El temario:
1. Introducción a Node.js
1.1. Programación Javascript desde Node sobre el motor V8
1.2. Entrada/Salida asincrónica
1.3. Módulos
1.4. Manejador de paquetes npm
1.5. Elementos de Test-Driven Development
2. Programación Web con Node.js
2.1. Módulo HTTP
2.2. Manejo asincrónico
2.3. Frameworks web con middleware
2.4. Framework MVC: Express
2.5. Acceso a Base de datos
3. Socket.IO
3.1. Comunicación con el browser
3.2. WebSockets y alternativas
3.3. Ejemplo multiusuario en tiempo real
3.4. Usando HTML5 y canvas
3.5. Chat simple
3.6. Juego simple
3.7. Ejemplo distribuido: varios servidores, varios clientes
Espero que les interese el tema, y podamos aprovechar un día experimentando con Node.js
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Se viene una nueva reunión del grupo Node.js Argentina, en Buenos Aires, el próximo viernes 23 de Noviembre, de 19 a 22 hs. Más detalles en:
http://www.meetup.com/NodeJS-Argentina/events/87806192/
Leo ahí:
Charla "Node, Mongo y Socket van al espacio" por Leonardo Otero
Es común ver pequeños ejemplos y proyectos mostrando el uso de diversos módulos de tecnología Node.js, pero no abundan todavía
ejemplos de integración de múltiples módulos aplicando buenas prácticas que nos ayuden a estructurar mejor nuestros proyectos, algo
tan necesario a la hora de afrontar la construcción de una aplicación real. Resulta aun mas complicado encontrar buenos ejemplos que
integren la potencia de Node.js con técnicas de animación gráfica en el browser. Es por eso que Leonardo Otero nos dará una charla sobre un
proyecto abierto y público con el que podremos experimentar, participar y entretenernos intentando completar una misión en Marte utilizando Raphael.js, Socket.io, Express.js, Mongoose.js y MongoDB.
A lo largo de la charla abordaremos los beneficios de la persistencia en un modelo no relacional y algunas de sus dificultades. También veremos como comunicar en forma eficiente nuestro servidor Node.js con el browser donde presentaremos contenido gráfico, interactivo y escalable. La última parte de la charla estará destinada a desafiar a los participantes invitándolos a opinar sobre la arquitectura empleada, proponer mejoras, alternativas a la misma e incluso poniendo manos a la obra para agregar nuevas funcionalidades.
El proyecto estará en un repo publico de Github el día de la charla.
Tertulia (dudas, consultas, conocernos, etc)
El disertante será el bueno de @leonardo_otero que ya apareció en este blog en Reunión de Emprendedores Informáticos.
Post relacionados:
Primer Meetup de Node.JS Argentina en Buenos Aires
Presentando Node.js
Nueva Meetup de Node.Js Argentina en Buenos Aires
Presentación de Express en Node.js Argentina Meetup por @dzajdband
Yo, mientras, estoy preparando el tema de aplicaciones distribuidas en Node.js (no sé donde darlo todavía, pero ya va a aparecer ;-). También espero dar un seminario de un día en el Microsoft User Group de Argentina, sede Buenos Aires, sobre Node.js desde 0.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Revisión de mis resoluciones de Octubre:
- Dar una charla sobre lenguajes de programación en Javascript [completo] ver video
- Dar una chalar sobre Node.js/Socket.IO, aplicaciones web de tiempo real [completo] ver post
- Trabajar en PythonSharp [completo] ver repo
- Trabajar en AjTalk para Java [pendiente]
- Trabajar en AjConsorSite [parcial] solo tuve demo y reuniones
- Trabajar en GameServer [parcial] solo tuve demo y reuniones
Adicionalmente, estuve trabajando en:
- Actualizar mis ejemplos de Node.js [completo] ver repo
- Autómata celular en Javascript/Node.js [completo] ver repo
- Mejoras menores de AjTalkJs y AjLispJs
- Comenzar mi Basic Script (para Javascript/Node.js) [completo] ver repo
- Comenzar a portar AjGroups (librería de grupos finitos) a Javascript/Node.js [completo] ver repo
Para este nuevo mes:
- Trabajar en PythonSharp
- Dar una charla sobre Implementando Python, en PyCon 2012 Argentina
- Trabajar en AjTalk para Java
- Trabajar en AjTalk para Javascript
- Trabajar en BasicScript (quiero comenzar a usarlo para que se pueda definir la lógica de un juego ejemplo de mi GameServer)
- Comenzar páginas markdown con Tutorial de Java, en español
- Comenzar páginas markdown con Tutorial de Node.js en español
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
En una semana más se viene la conferencia anual de la comunidad Python Argentina. Les comparto el anuncio:
PyCon Argentina 2012
4ª Conferencia Nacional del Lenguaje de Programación Python
Del 12 al 17 de Noviembre, se realizará en Buenos Aires la cuarta edición de la Conferencia sobre el lenguaje de programación Python, Software Libre y tecnologías relacionadas, en la Universidad Nacional de Quilmes (Bernal, Gran Buenos Aires), UrbanStation y EducacionIT (Capital Federal): http://ar.pycon.org/2012
La entrada es libre y gratuita (inscripción obligatoria via web), y como en las ediciones anteriores, participarán numerosos expertos nacionales e internacionales, este año inaugurando un Eje Científico, charlas “extremas” y agregando tutoriales/workshops (cursos intensivos y talleres introductorios), sprints (reuniones de desarrollo) a las charlas tradicionales, exposición de pósters y stands (Solar, FACTTIC, Mozilla-Ar, Ubuntu-Ar, Hacklabs y proyecto “Programando con Robots” LINTI UNLP). También hemos agregado un Concurso de Trabajos Estudiantíles y un Desafío “Aprendiendo a Programar con Robots y Python” con importantes premios.
Ejes temáticos:
Aplicaciones Web: Desarrollo y Optimización y Aplicaciones “Visuales” e Interfaces Gráficas de Usuario (GUI) Ingeniería y Computación Científica (cálculo numérico y visualización 2D/3D) Python en la Educación (OLPC, robots, videojuegos e introducción a la programación) Bases de Datos, NoSQL y Aplicaciones Distribuidas en la “Nube” Multiprocesamiento y Alto Rendimiento
Disertantes Internacionales Destacados:
Dr. Massimo Di Pierro - De Paul University (EEUU): web2py web framework, FermiLab QCD, supercomputadoras
Dr. Brett Cannon - Google (EEUU): python core development
Mg. Andrea Gavana - Maersk Oil (Dinamarca): wxPython (GUI visual) y Visualización 2D/3D de yacimientos
Christophe Pettus - PostgreSQL Experts (EEUU): Django web framework and ORMs
Craig Kerstiens - Heroku (EEUU): Django web framework and cloud services
Shahrokh Mortazavi y Dino Viehland - Microsoft (EEUU): Python Tools for Visual Studio, Azure
Erico Andrei - Simples Consultoria (Brasil): Plone CMS – PythonBrasil
El evento contará también con disertantes de Chile, Perú, Brasil, España, Cuba y más de 50 argentinos.
Calendario de Eventos:
12 al 14 de Noviembre de 2012: Sprints -reuniones de desarrollo- (Lun-Mié)
15 de Noviembre de 2012: Tutoriales (seminarios/entrenamientos) y Talleres (Jue)
16 y 17 de Noviembre de 2012: Conferencia: Charlas, Posters, Charlas Relámpago y Exposiciones (Vie-Sab)
Eventos Especiales en paralelo:
13 de Noviembre de 2012: PgDay Argentina 2012 (Jornada intensiva sobre la base de datos PostgreSQL)
15 de Noviembre de 2012: SugarDay (Jornada sobre Educación y OLPC)
Eventos Sociales: Recepción (Viernes 16), Fiesta de Cierre (Sábado 17), Salida Turística (Domingo 18),
Cronograma completo de actividades: http://ar.pycon.org/2012/schedule
Sobre Python:
Python es un lenguaje de programación dinámico e interpretado, interactivo, orientado a objetos, abierto y extensible. Combina claridad con simplicidad de código, convirtiéndolo en una herramienta poderosa que puede ser usada para varias aplicaciones y problemas.
Permite integrar fácilmente otros lenguajes y herramientas, incluye una amplia biblioteca de funciones y es sencillo de aprender. Muchos programadores Python reconocen un sustancial aumento en su productividad y sienten que el lenguaje mismo los incentiva al desarrollo de código de mayor calidad y más fácil de mantener. Está disponible en múltiples plataformas, desde una PC hasta teléfonos celulares, y muchos sitios de Internet utilizan Python como soporte de sus servicios.
Reconocido en el ambiente del Software Libre, visto como una creciente alternativa a Java y .NET, es usado actualmente por miles de empresas, incluyendo a Google, Industrial Light & Magic, iRobot, NASA, YouTube, RedHat, Canonical (Ubuntu), Yahoo, Disney, Cisco, Lucasfilm, Pixar, VMWare. En el país es usado por empresas locales (desde empresas internacionales, PyMEs a cooperativas), universidades nacionales (cátedras y proyectos de investigación en la UBA, UNLP, etc.) y otros institutos de formación.
Python tiene varias bibliotecas que habilitan la computación numérica y simbólica. También puede funcionar como interfaz con código nativo en C, C++ y FORTRAN, y posee excelentes bibliotecas para visualización y plotting de resultados. Python también provee bibliotecas para computación de propósito general, interfaces visuales de usuario y desarrollo web. Todo esto, acoplado con su intérprete interactivo, hacen de Python un lenguaje excelente para la Computación Científica.
Todas estas características, combinadas con aplicaciones de rango general, convierten a Python en la opción ideal para uso en Educación, Industria e Investigación.
Sobre PyCon Argentina:
PyCon Argentina es el mayor encuentro anual para la comunidad de usuarios y desarrolladores del lenguaje de programación Python para hispanohablantes. Se espera que asistan alrededor de 500 participantes (empresarios, profesionales, docentes, alumnos y entusiastas), y ya hay inscriptos de más de 14 países incluyendo EE.UU., Chile, Perú, Brasil, Uruguay, Colombia, España, Paraguay, México, Ecuador, Dinamarca, Cuba y Canadá,
El evento es posible gracias al generoso aporte de los siguientes sponsors: Grupo MSA, Machinalis, Urban Station, Microsoft, Lambda Sistemas, Onapsis, Core Security, Grupo 42, Dattatec, Sistemas Ágiles, Thymbra, Liricus, WingWare, EducacionIT y RobotGroup, con agradecimiento especial a la Python Software Foundation, PostgreSQL, Google Inc., Maersk Oil, 10Gen, Heroku, Packt Publishing, Python Brasil y Simples Consultoria.
PyCon Argentina 2012 es una conferencia comunitaria sin fines de lucro, organizada por voluntarios y respaldada por SOLAR Asociación Civil sin fines de lucro y la Universidad Nacional de Quilmes.
Se agradece difusión, para más información ver:
http://pyconar.blogspot.com.ar/2012/09/gacetilla-de-prensa.html
Informes:
Lic. Mariano Reingart
Coordinador General
+54 (011) 4450-0716
http://ar.pycon.org/2012
pyconar2012@gmail.com
Tienen días y días de actividades. Yo voy a estar participando, dando una charla el último día, el sábado 17, a la tarde, en la Universidad de Quilmes, sobre el tema “Implementando Python”.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Como adelanté en el post Node.Js en UDA Developers Challenge 2012 participé del los seminarios dictados para el UdADev 2012 de la Universidad de Azuay, en Cuenca, Ecuador. Fue un excelente viaje, me recibieron muy bien, disfruté mucho el viaje, tienen un buen clima, un hermoso parque nacional a minutos de la ciudad, actividades de todo tipo… y podría seguir escribiendo, pero ya lo haré en algún post de mi blog no técnico. Agradezco a todos los que hicieron esto posible!
Ahora, quiero pasar en limpio lo que mostré. Mi tema era Node.Js, Express y Socket.IO, orientado todo para el concurso que están organizando sobre aplicaciones en tiempo real para dispositivos móviles (vean el tema y expositores completos en la página del evento).
Mi presentación la puede ver (y bajar) de: http://t.co/UUoFooL2
Usamos durante todo el día varios varios ejemplos de: https://github.com/ajlopez/NodeSamples
Al comienzo, vimos de esos ejemplos, los de https://github.com/ajlopez/NodeSamples/tree/master/Simple, como hello.js, helloasync.js, http.js.
Pasamos a ver un ejemplo de módulo, hecho en el momento. Y usamos el npm para buscar un paquete, ejecutando:
npm search serial
porque me habían preguntado en el primer intervalo sobre módulos que manejen puertos seriales. De ahí, instalamos uno usando
npm install <nombre>
Mostré como ejemplo de paquete publicado, como proyecto GitHub a lo que estuve programando de autómatas celulares:
https://github.com/ajlopez/Cellular
donde ejecutamos los ejemplos https://github.com/ajlopez/Cellular/tree/master/samples/linear pasando un número de regla como parámetro. Pueden probar:
node linear 110
Exploramos algo del módulo http. Ejecutamos el ejemplo https://github.com/ajlopez/NodeSamples/tree/master/HttpRequest ejecutando ahí:
node app.js http://www.google.com
bajando el contenido de la página. Escribimos un pequeño servidor, para ver qué temas hay que resolver para tener un sitio más completo (como routing de los pedidos externos). Ahí mostre Geddy:
http://geddyjs.org/
y nos fuimos a almorzar.
A la vuelta, nos dedicamos a Express:
http://expressjs.com/
Vimos de instalarlo globalmente con
npm install –g express
y armamos una aplicación desde la línea de comando con
express --sessions --css stylus MyApp
cd MyApp
npm install
node app
Lo pueden ver el resultado en: https://github.com/ajlopez/NodeSamples/tree/master/Express/MyApp
Instalamos y lanzamos mongodb bajándolo desde http://www.mongodb.org/downloads (el día anterior ya Carlos Barroeta @carlosdbm había dictado el seminario/taller de NoSQL).
Levantamos y probamos el ejemplo https://github.com/ajlopez/NodeSamples/tree/master/Express/Blog basado (actualizado a Express 3) del:
http://howtonode.org/express-mongodb
Hacia el final del “track” Express, vimos de bajar y levantar:
https://github.com/ccoenraets/nodecellar
http://coenraets.org/blog/2012/10/nodecellar-sample-application-with-backbone-js-twitter-bootstrap-node-js-express-and-mongodb/
En el “track” final, sobre Socket.IO, vimos ejemplos de:
https://github.com/ajlopez/NodeSamples/tree/master/SocketIO
Como ejemplo en el browser, en el browser y servidor, o en el browser, servidor y varios nodos distribuidos, vimos los ejemplos de:
https://github.com/ajlopez/SimpleGA
Ver algo de explicación en SimpleGA (1) Algoritmos Genéticos en Javascript/Node.js
Luego, hacia el final, vimos de nuevo nodecellar, y lo activamos para tener en tiempo real un análisis de
http://coenraets.org/blog/2012/10/real-time-web-analytics-with-node-js-and-socket-io/
(ver de descomentar un texto que está en el index.html de ese ejemplo). No llegamos a verlo, pero les recomendaría también de ese autor:
http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/
Si quieren ejecutar los ejemplos de NodeSamples, vean de hacer
npm install
cuando en el directorio hay un archivo package.json. O de instalar con
npm install <nombremódulo>
el módulo que requiera el ejemplo.
Para preparar la presentación consulté varios de mis enlaces de Node.js, Express y Socket.IO:
http://delicious.com/ajlopez/nodejs
http://delicious.com/ajlopez/nodejs+tutorial
http://delicious.com/ajlopez/express
http://delicious.com/ajlopez/express+tutorial
http://delicious.com/ajlopez/socketio
http://delicious.com/ajlopez/socketio+tutorial
Por ejemplo, entre tantos para ver, pueden visitar:
Node.js and Socket.io part 1 Building a HTML5 game part 6
Más sobre desarrollo Node.js y juegos:
http://delicious.com/ajlopez/nodejs+gamedevelopment
Sobre Node.js y móvil:
http://delicious.com/ajlopez/nodejs+mobile
Por ejemplo, en el seminario/taller mencioné:
Stream a webcam using Javascript, NodeJS, Android, Opera Mobile, Web Sockets and HTML5
Ahora agregaría:
Build a Phone-controlled Robot Using Node.js, RN-XV WiFly, Arduino and Twilio
También consulté estas presentaciones:
http://www.slideshare.net/iloire/building-web-apps-with-nodejs-socketio-knockoutjs-and-zombiejs-codemotion-2012
http://www.slideshare.net/openforce/nodejs-fast-event-based-web-application-development
http://www.slideshare.net/vikasing/introduction-to-nodejs-11730771
https://speakerdeck.com/danzajdband/introduccion-a-express-meetup-node-dot-js-argentina
http://www.youtube.com/watch?v=pQN5U0EQoUo&feature=youtu.be
http://magnetik.github.com/node-webid-report/
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
http://www.slideshare.net/3rdEden/going-real-time-with-socketio
http://www.slideshare.net/Jxck/real-time-app-with-nodejs
http://www.slideshare.net/dbloete/expressjs
https://speakerdeck.com/spopp/nodejs-npm-express-quick-start
Para lista de correo de consultas, en español, recomendaría:
https://groups.google.com/group/nodejs-es?pli=1
Una explicación detallada de Express:
http://youtu.be/Uw46_Mub6t8 por @dzajband
Una charla sobre Socket.IO del propio autor @rauchg:
http://jshangouts.org/2012/08/18/Socket-IO-Engine-IO-Guillermo-Rauch.html
Hay mucho para investigar de Node.js, y todo es divertido! ;-)
Actualización: otro tema para explorar para el concurso, Kinect desde Node.js https://github.com/pgte/node-kinect
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez