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

November 2010 - Posts

Un servidor Http mínimo en Java

Hace unos días, escribí un spike rápido, implementando un servidor HTTP mínimo en Java. Es código ingenuo, y que no implementa todo el protocolo, apenas parsea una línea de verbo GET.

El código:

package com.ajlopez;
import java.io.*;
import java.net.*;
public class HttpServer {
    public static void main(String[] args) {
	int port;
	ServerSocket serversocket;
		
	port = Integer.parseInt(args[0]);
	String rootpath = args[1];
		
	try {
		serversocket = new ServerSocket(port);
	} catch (IOException e) {
		e.printStackTrace();
		return;
	}
		
	while (true) {
	    try {
		Socket socket = serversocket.accept();
		BufferedReader reader = new BufferedReader(
                          new InputStreamReader(socket.getInputStream()));
		String line = reader.readLine();
		String [] words = line.split(" ");
		System.out.println(line);
		InputStream stream = new FileInputStream(rootpath + words[1]);
		OutputStream output = socket.getOutputStream();
		byte [] buffer = new byte[4096];
		int nbytes;
			
		while ((nbytes = stream.read(buffer))!=-1)
		    output.write(buffer,0,nbytes);
		
		output.close();
		stream.close();
		socket.close();
	    } catch (IOException e) {
		e.printStackTrace();
	    }
	}
    }
}

Recibe dos argumentos: el puerto y el directorio raíz. Pueden probar:

java com.ajlopez.HttpServer 10000 c:\apache-tomcat-6.0.18\webapps\docs

e ingresar

http://localhost:10000/index.html

(no se olviden de agregar index.html) y van a tener:

Es código “de juguete”, pero funciona! ;-)

Pueden tomar el código del pastie:

http://pastie.org/1305444

o bajarlo del proyecto AjCodeKatas google code:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/Spikes/MinimalHttpServer

Podría mejorarlo: nuevas clases, separación de “concerns”, multithreading, un pool de thread fijos preparados para atender múltiples clientes, etc…

Nos leemos!

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

Posted Mon, Nov 29 2010 9:15 by lopez | 1 comment(s)

Filed under:

ALT.NET Hispano VAN de Code Smells & Refactoring

Gracias a la gente de la comunidad ALT.NET Hispano, hoy viernes 25 de Noviembre, habrá una VAN (des-conferencia virtual) del tema Code Smells y Refactoring, a cargo del bueno de @MartinSalias (http://blog.salias.com.ar/, http://www.codeandbeyond.org/). Martín escribió:

[Hoy], viernes 25 de noviembre, tendremos la VAN sobre Code Smells y Refactoring, a las 18:00 GMT (15:00 Argentina, 13:00 Bogotá).

Este es el temario que tengo a priori, pero que podemos discutir:

* Refactoring: mejorando el diseño SIN mejorar la funcionalidad

* ¿Porqué arreglarlo si no está roto?

* Refactoring como verbo y sustantivo

* Malos olores

* Olores y patrones de refactoring asociados (catálogo de Beck & Fowler)

* Otros olores y patrones

* Ejemplos y discusión

Ver detalles de cómo acceder a la VAN: http://altnet-hispano.pbworks.com/w/page/12367699/Descripcion-de-Reuniones

Ver la equivalencia horaria de su país de residencia: http://altnet-hispano.pbworks.com/w/page/12367701/Equivalencias-Horarias

Agregar la reunión al calendario: http://altnet-hispano.pbworks.com/w/page/12367694/Calendario

Los que no puedan asistir y conectarse, no se preocupen que siempre queda el video de la conferencia. Pero si participan, van a poder preguntar y comentar sobre el tema. Pueden acceder via el enlace http://snipr.com/virtualaltnet.

Mis enlaces sobre el tema:

http://www.delicious.com/ajlopez/refactoring

Nos leemos!

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

Posted Fri, Nov 26 2010 14:08 by lopez | with no comments

Videos de Smalltalks 2010

La semana pasada estuve de viaje, acá, en mi pais, Argentina. Primero, el jueves estuve en Tandil, Provincia de Buenos Aires, participando de la Maratón 2.0 (lo anuncié en Presentando en Maratón 2.0 Tandil; videos de otras reuniones en Videos de OpenApp y Maratón 2.0). Y el sábado, estuve en Concepción del Uruguay, provincia de Entre Ríos, participando de Smalltalks 2010 (anuncié en Smalltalks 2010 Argentina). Tengo que postear más en detalle sobre las dos experiencias.

Por ahora, les comparto dos videos publicados YouTube. El primero es una entrevista a uno de los organizadores, el bueno de Hernan Wilkinson (el autor del ejemplo que comenté en TDD: Comparando Smalltalk y Java):

entrevista del diario local La calle http://www.lacalle-online.com/

El segundo, les va dar una idea de la sala principal del evento: un fragmento de la charla de Andy Kellens, de Bélgica:

En el paneo, pueden reconocer algunos conocidos smalltalkers. Ahí encuentro a Leandro Caniglia, que no lo veía desde el siglo pasado, y a otros (por ejemplo, a Juan, con quien tuve interesante discusión de otros temas: realismo, espero que siga mi serie sobre el tema ¿Qué es la realidad? ).

Nos leemos!

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

Posted Fri, Nov 19 2010 14:05 by lopez | with no comments

Videos de OpenApp y Maratón 2.0

En las reuniones organizadas por Telefónica Negocios, Red Valleys, Globant, Nec, se presentó el OpenApp Challenge (tengo que postear sobre mi visita en Tandil). Hoy, tengo estos videos para compartir. Primero, Matias Fernandez de Angelis, de Teléfonica Negocios, sobre OpenApp, SaaS y Cloud Computing, en Córdoba (creo):

Y luego, un fragmento del bueno de Juan Ladetto (@gringotuc) en la reunión de Tucuman:

Mis anteriores post sobre el tema:

Presentando en Maratón 2.0 La Plata
Presentando en Maratón 2.0 Tandil
Presentación de OpenApp Challenge de Telefónica Negocios

Nos leemos!

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

Posted Wed, Nov 17 2010 9:48 by lopez | 1 comment(s)

Objetos transaccionales en AjTalk, introducción rápida

Quiero describir hoy un ejemplo corto, mostrando el manejo de objetos transaccionales en AjTalk, mi Smalltalk-like Virtual Machine interpretada escrita en C#.

¿Qué es un objeto transaccional, en este contexto? Es un objeto, que cuando ejecuta dentro de una transacción en memoria, puede manejar los valores de sus variables de instancia, monitoreando sus cambios. Si la transacción se confirma con commit, los nuevos valores del objeto comienzan a ser visibles para el resto del sistema. Si la transacción se rechaza con rollback, los objetos transaccionales afectados por la misma restauran sus valores originales, los valores que tenían al comienzo de la transacción. Nota: estas transacciones son transacciones en memoria, y no están relacionadas con transacciones en bases de datos.

¿Cómo crear un objeto AjTalk transaccional? Agregué un método al protocolo de Object:

Object methods!

asTransactional
    ^@AjTalk.Transactions.TransactionalObject new: self with: (@AjTalk.Machine current transactionManager)
! !

El objeto es “envuelto” por un decorador, un objeto nativo de .NET del tipo TransactionalObject que es el que hace el trabajo de vigilar los valores de las variables de instancias de objeto decorado. Este decorador recibe todas las peticiones de set y get de valores de instancia, y las maneja para la transacción actual, y para cualquier otra transacción que se esté ejecutando en el sistema, que acceda al objeto via el decorador. Pienso escribir un post describiendo la implementación interna. Nota: si una variable de instancia en un objeto transaccional es modificado por dos transacciones, la primera gana, y la segunda falla.

Dada una clase Rectangle:

Object subclass: #Rectangle instanceVariableNames: 'width height'
!Rectangle methods!
width
    ^width
!
height
    ^height
!
width: newWidth
    width := newWidth
!
height: newHeight
    height := newHeight
! !

Podemos crear una instancia, poner algún valor, y crear un decorador transaccional:

rect := Rectangle new.
rect width: 500!
rect := rect asTransactional
!

Ahora, la variable rect apunta a una instancia que es transaccional. Pero no hay todavía transacción abierta: su conducta, entonces, es como cualquier otro objeto. ¿Cómo abrimos una transacción? La Machine actual tiene una nueva propiedad, que mantiene un objeto TransactionManager:

tm := @AjTalk.Machine current transactionManager.
console := @System.Console out
!

tm beginTransaction!

La instancia rect, que apunta al decorador transaccional, tiene una referencia al objeto decorador, llamado innerObject. Podemos ver sus valores:

console write: 'rect width is '.
console writeLine: rect width!

console write: 'inner rect width is '.
console writeLine: rect innerObject width!

La salida sería:

rect width is 500
inner rect width is 500

Ahora, cambiemos el ancho del objeto transaccional:

rect width: 700!

Si imprimimos de nuevo los valores, como antes, la salida sería:

rect width is 700
inner rect width is 500

Usualmente, se usa la instancia rect (el decorador) desde todos los procesos. Si uno imprime el valor de rect width en otro proceso/thread (que puede tener o no su propia transacción), obtendrá el valor 500. El nuevo valor 700 no está publicado todavía: es solamente visible desde la transacción actual.

Podemos hacer rollback de la transacción:

tm rollbackTransaction!

Los nuevos valores serán:

rect width is 500
inner rect width is 500

Si hubiéramos confirmado la transacción con commitTransacction, el resultado sería:

rect width is 700
inner rect width is 700

Pueden ejecutar un ejemplo, desde el código del trunk actual. Hay un comando RunTransaction.cmd en el proyecto AjTalk.Console.

Próximos pasos: escribir un post describiendo la implementación de estas características; mejorar el manejo transaccional para hacer retry automático de una transacción fallida.

Nos leemos!

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

Posted Tue, Nov 16 2010 9:24 by lopez | 1 comment(s)

TDD: Comparando Smalltalk y Java

Gracias al bueno de Hernan Wilkinson (@hernanwilkinson) tenemos estos videos, que muestran su comparación de TDD (Test-Driven Development) entre dos lenguajes: Smalltalk, con un entorno dinámico, y Java, un lenguaje con tipos estáticos.


Pueden encontrar una discusión del tema en el thread de Foro Agiles:

http://tech.groups.yahoo.com/group/foro-agiles/message/3571

Como aclara ahí, Hernan puso comparación de tiempos, para medir y comparar. Yo no haría hincapié en ese punto. Lo más a destacar es cómo Smalltalk permite, en el medio de la prueba, completar y arreglar lo que estamos programando. Como apunta en ese thread el bueno de @jgabardini, no se usa mucho el debugger enJava, usando TDD (lo mismo afirmaría para .NET y Visual Studio): lo que vamos programando, va naciendo de a poco, por tests, digamos, incrementales. Diría que uno va avanzando por “baby steps” que disminuyen casi a cero la necesidad de depuración en el proceso.

Si bien Hernan plantea una comparación entre lenguajes dinámicos y estáticos, pienso que eligió uno muy particular como dinámico. Hacer TDD con Python, Ruby y otros lenguajes dinámicos, puede ser bastante diferente que en Smalltalk y su entorno.

Nos leemos!

Angel “Java” Lopez

Posted Wed, Nov 10 2010 16:06 by lopez | with no comments

Web Crawler usando el nuevo AjAgents

Hace poco escribí una nueva implementación de mi proyecto AjAgents, descripta en:

AjAgents: a new implementation
AjAgents: una nueva implementación

Ahora, quiero describir una aplicación de prueba, de nuevo el Web Crawler: visitar y bajar la página desde una URL inicial, ir descubriendo enlaces al mismo sitio, y procesar el resto de las páginas. Anteriores versiones:

Web Crawler Using Agents and AjSharp
Web Crawler usando AjSharp
Distributed Web Crawler using AjMessages
Web Crawler distribuido usando AjMessages

La nueva versión del web crawler usa la nueva interface:

    public interface IAgent<T>
    {
        void Post(Action<T> action);
    }

En vez de escribir un tipo que hereda o implementa un agente, éste es un “wrapper” aplicado a un tipo normal cualquiera de .NET.

La nueva implementación de AjAgentes, y el ejemplo de web crawler (Proyecto AjAgents.WebCrawler), puede ser bajado desde:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjAgents

En una de mis anteriores implementaciones tenía:

Ahora, descarté el Dispatcher. Tengo tres clases:

El Resolver recibe un enlace a bajar y procesar. Decide si lo procesa o no (puede que el enlace ya haya sido procesado, o que el link no corresponda al sitio de partida, o se alcanzó un límite en la profundidad de enlaces desde la página inicial de proceso). Si el enlace es aceptado, la inforación es enviada al Downloader. Este objeto baja el contenido de la página, y lo envía al Harvester (podría enviarlo a otros agentes, también). El Harvester examina el contenido, extrae nuevos enlaces para procesar, y a cada uno lo envía al Resolver.

Estas clases son tipos .NET. Pero las referencias que mantienen entre sí son del tipo Agent<Downloader>, Agent<Harvester>, Agent<Resolver>. El código que arma un grupo inicial de objetos/agentes interconectados está en Program.cs:

       static Agent<Resolver> MakeAgent()
        {
            Resolver resolver = new Resolver();
            Harvester harvester = new Harvester();
            Downloader downloader = new Downloader();
            Agent<Resolver> aresolver = new Agent<Resolver>(resolver);
            Agent<Harvester> aharvester = new Agent<Harvester>(harvester);
            Agent<Downloader> adownloader = new Agent<Downloader>(downloader);
            resolver.Downloader = adownloader;
            harvester.Resolver = aresolver;
            downloader.Harvester = aharvester;
            return aresolver;
        }

 

La aplicación de consola AjAgents.WebCrawler aceptar un parámetro, con el enlace inicial:

AjAgents.WebCrawler http://ajlopez.zoomblog.com

Su salida:

Este ejemplo es un “proof of concept”. Me gustaría mejorarlo:

- Agent<IDownloader>, que haga balanceo de carga con varias instancias de Agent<Downloader>.
- Agent<T> instanciado en diferentes máquinas, implementando así un web crawler distribuido.

Nos leemos!

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

Posted Tue, Nov 9 2010 9:35 by lopez | with no comments

Presentando en Maratón 2.0 La Plata

De nuevo, laa gente de Telefónica Argentina, división negocios, RedValleys (http://www.redvalleys.org/ ), Globant y Nec, me invitan a una de sus charlas de la serie Maratón 2.0. Esta vez es en la ciudad de La Plata, capital de la provincia de Buenos Aires:

http://eventioz.com/events/maraton-20-la-plata-valley

 

También presentan @gabymenta (ver http://www.gabymenta.com.ar/) y @lucaslanza (ver http://www.epolitics.com.ar/).

Como comenté en un anterior post sobre mi próxima presentación en Tandil:

Presentando en Maratón 2.0 Tandil

La idea mía es ir y charlar, ante una audiencia donde no todos son desarrolladores, sobre Cloud Computing, viendo qué es, hacia dónde puede ir, explicar términos como IaaS, Paas, SaaS (Infrastructure, Platform, Software as a Service), y enumerar algunas tecnologías. Y tratar de mostrar qué oportunidades nos abre esto del Cloud Computing, tanto para desarrolladores, emprendedores, como para empresas.

Ya comenté sobre el concurso que se presenta también en esta charla:

Presentación de Open App Challenge de Telefónica Negocios

Un concurso de aplicaciones web para resolver problemas de pequeñas y medianas empresas. Ver el sitio:

http://www.openapp.com.ar

Telefónica Negocios organiza junto con la Fundación Telefónica, Red Valleys y NEC el Concurso Nacional de Aplicaciones Web que resuelvan procesos de las Pymes. Dirigido a emprendedores tecnológicos, desarrolladores, proveedores de contenidos, diseñadores, estudiantes y graduados de carreras sistemas. El objetivo del concurso es impulsar la promoción y fomento de la innovación. Con esta iniciativa pretendemos apoyar la generación de nuevos emprendimientos y herramientas para las pymes de nuestro país.

Lean las bases del concurso en:

http://www.openapp.com.ar/site/bases.php

Hace ya un tiempo que no voy a La Plata. Espero encontrarme con gente de las Universidades, y también gente nueva, de los grupos de emprendimiento que están ahí como:

http://www.laplatavalley.org/

Nos leemos!

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

Posted Mon, Nov 8 2010 9:12 by lopez | 2 comment(s)

Presentando Programación Funcional, AjLisp y Clojure

Ayer, Jueves 4 de Noviembre, tuve el placer de compartir una charla con @MartinSalias y @RodolfoF, sobre Programación Funcional. La dimos como una charla del nuevo emprendimiento de Martin:

http://www.codeandbeyond.org/

El lugar fue las instalaciones de @Southworks, donde tuvimos proyector, sillas, sonido, y catering (incluyendo cervezas!! ;-). El evento quedó grabado, así que esperamos que Martín lo publique.

Un resumen de lo que dieron Martín y Rodolfo: Martín presentó Programación Funcional en general, comentando sobre Cálculo Lambda, Lisp y la historia de los lenguajes de programación funcional, como ML, Caml, F# y otros. Luego me tocó mi turno, más abajo doy detalles. Tercer parte, de nuevo Martín mostrando F#, y finalmente, Rodolfo mostrando que C# desde el principio es funcional, y dando ejemplos de código procedural vs funcional.

No desesperen, entonces, que todo quedará disponible para verlo en línea.

Mientras, en este post, quería dejar enlaces y comentarios breves de mi intervención en la charla.

Primero, la primera parte presentación se basó en una que ya había dado para @southworks: LambdaPresentation.pptx.

La presentación de ayer en LispClojure.pptx (no es gran cosa, más que algunos enlaces, tiene varios slides en blanco, ver las notas, donde hay código de ejemplo).

Mostré código de cálculo lambda de mi proyecto AjLambda:

Presenting AjLambda: Lambda Calculus Implementation in C#
Presentando AjLambda: implementación de Cálculo Lambda en C#

Si quieren conocer sobre cálculo lambda, desde las matemáticas y lógica, dejé historia y enlaces que usé en

Notas sobre Cálculo Lambda

Trabajé unos minutos mostrando Lambdas en AjLisp. Posts sobre el proyecto AjLisp. Ahí van a encontrar otras implementaciones, como AjScheme, y un AjSharpure, (Work in Progress).

La parte de Clojure la basé en la más larga, detallada y excelente charla de @unclebob:

Uncle Bob Martin's "Clojure - Up Close and Personal"

Usé el ejemplo de multithreading en Clojure con transacciones en memoria:

https://github.com/sfraser/MultithreadedGameOfLife

Hace ya unos años, escribí sobre Recursos de F# y Programación Funcional.

Mis posts sobre F#
Mis posts sobre Programación Funcional

Mis enlaces:

http://delicious.com/ajlopez/functionalprogramming
http://delicious.com/ajlopez/lisp
http://delicious.com/ajlopez/f#
http://delicious.com/ajlopez/clojure
http://delicious.com/ajlopez/monads
http://delicious.com/ajlopez/lambda
http://delicious.com/ajlopez/scheme

Para los que les interesa Lisp, les recomiendo el libro y más:

Structure and Interpretation of Computer Programs
Video Lectures by Hal Abelson and Gerald Jay Sussman
Structure and Interpretation of Computer Programs adapted for the Clojure programming language
http://delicious.com/ajlopez/sicp

Algo más matemático, que mencioné al pasar:

http://delicious.com/ajlopez/categorytheory
http://www.delicious.com/ajlopez/grothendieck
Alexander Grothendieck
Nicolas Bourbaki

Nos leemos!

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

Posted Fri, Nov 5 2010 16:10 by lopez | 2 comment(s)

Smalltalks 2010 en Argentina

La semana que viene, desde el jueves 11 de Noviembre hasta el sábado 13, se realizará la cuarta edición de Smalltalks en Argentina, este año es Smalltalks 2010, en Concepción del Uruguay:

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

en la Facultad Regional Concepción del Uruguay Universidad Tecnológica Nacional, Ing. Pereira 676, Concepción del Uruguay - Entre Ríos.

(Pueden leer sobre la edición del 2009 en mi post Smalltalks 2009 en Buenos Aires)

Como en otras ocasiones, tenemos ponencias, charlas, presentaciones, de gente del país, y de gente de afuera (también, algunos argentinos que trabajan en otros paises). Pueden ver el programa en Schedule.

Entre los ponentes, tenemos a:

Gilad Bracha http://bracha.org/Site/Home.html 

Gilad Bracha is the creator of the Newspeak programming language. He is currently a VP at SAP Labs in Palo Alto focusing on programming models for the cloud. Previously, he was a Distinguished Engineer at Cadence, and a Computational Theologist and Distinguished Engineer at Sun. He is co-author of the Java Language Specification, and a researcher in the area of object-oriented programming languages. Prior to joining Sun, he worked on Strongtalk, the Animorphic Smalltalk System. He received his  B.Sc in Mathematics and Computer Science from Ben Gurion University in Israel and a Ph.D. in Computer Science from the University of Utah.

Su charla será justamente sobre el estado del lenguaje de programación Newspeak.

Andy Kellens http://prog.vub.ac.be/~akellens/

Welcome to the website of Andy Kellens. I am a researcher working at the Software Languages Lab of the Vrije Universiteit Brussel funded by a research grant (Onderzoeksmandaat type 3) provided by IWT Vlaanderen.

Su charla:

IntensiVE is a software engineering tool that enables developers to verify conformance of various kinds of design rules with respect to the source code. This talk gives an overview of the tool suite and how it can be used support agile architectural conformance checking.

Gabriela Arévalo http://www.lifia.info.unlp.edu.ar/en/gabriela.htm

I graduated in 1999 as a Licentiate in Computer Science at Universidad Nacional de La Plata (UNLP), in Argentina. In August 2000, I got the Master of Sciences in Computer Science within the context of EMOOSE program (European Master in Object-Oriented Software Engineering) at Ecole des Mines de Nantes (France) and Vrije Universiteit Brussel (Belgium). In January 2005, I got a Ph.D. in Computer Science in the University of Bern (Switzerland)…

Eliot Miranda http://www.mirandabanda.org/cogblog/

I’m a loooong-time Smalltalk VM implementor and systems programmer having written my first VM in 1983.  I was lucky enough to work on Peter Deutsch’s HPS VM for VisualWorks throughout the 90′s and early 2000′s and essentially double its speed (mostly by adding polymorphic inline caches and rearchitecting its mapping of contexts to stacks).  I was technical lead for VisualWorks from vw 3.0 through vw 7.4.1, leaving at the and of 2006. I spent an all too brief but stimulating time at Cadence in Gilad Bracha’s Newspeak team. I’m now at Teleplace (née Qwaq) where I’ve been free to implement another fast VM for Croquet, a 3d immersive collaboration architecture built above Squeak Smalltalk, but this time (unlike VisualWorks) the VM is open source.

El bueno de Andrés Valloud http://www.clubsmalltalk.org/web/index.php?option=com_content&view=article&id=141:andres-valloud-maths-virtual-machines-a-books&catid=48:interviews-to-the-new-generation-of-smalltalkers&Itemid=108

Andres Valloud was born in Buenos Aires, Argentina. He has been working as Lead technical engineer at Cincom Systems. In this interview he answered some questions about the present in his job at Cincom and some questions about his recently published books.

El bueno de German Arduino (@garduino) http://germanarduino.blogspot.com/ que dará una charla sobre el uso de Smalltalk en sus emprendimientos.

El bueno de Leandro Caniglia http://www.caesarsystems.com/CaesarSystems/aboutus/team?_s=Db7DWpx1ZvmG6Q8w&_k=cseYnxBJ

Chief Technologist

Leandro Caniglia serves as Chief Technologist at Caesar Systems. For more than a decade prior to this, Caniglia worked as a software development consultant for several companies in Argentina, Brazil and Chile. He also served as the Chief Information Officer for the National Insurance Board of Argentina. He was a professor of mathematics at the University of Buenos Aires for more than 20 years. Caniglia also worked as a research scientist at the CONICET, the official office for scientific research in Argentina.
He is founder and President of FAST, the Fundación Argentina de Smalltalk and previously founded SUGAR, the Smalltalk User Group of Argentina and the MathMorphs Squeak User Group. He has a Ph.D. in Mathematics and has published extensively on Computational Algebraic Geometry.

Lukas Renggli http://www.lukas-renggli.ch/

I am involved in Seaside, a framework for developing sophisticated web applications in Smalltalk. I am a promoter of Pharo Smalltalk, an open-source Smalltalk dialect. I maintain the OmniBrowser framework, the Refactoring Engine and various other development tools for Pharo. Some projects I am the author of are:

  • Builder, build and test Pharo images from Hudson.
  • PetitParser, a dynamic parser framework.
  • Helvetia, language embedding without breaking tools.
  • Gofer, work with groups of package in Monticello.
  • Magritte, a generic self-described meta-model.
  • Pier, an extensible object-oriented content management system.
  • jQuery and jQueryUI for Seaside, change the way you program Javascript.
  • Scriptaculous, let Seaside applications fly Web 2.0 style.
  • Comet, HTTP server push extension for Seaside.
  • SqueakSource, a source code repository for Pharo.

Gerardo Richarte (que creo que me debe un libro … :-) http://community.corest.com/~gera/

In the last 15 years Gerardo 'gera' Richarte has been dedicated to computer security. He has spoken in different conferences including BlackHat, CanSecWest and PacSec among others, and taught assembly language and exploit writing classes for private, public and military students. For the last 12 years he's been part of Core Security Technologies, where he was a Sr. Security Consulting, Sr. Security Software Engineer and Reverse-Engineer, and has been working, for the last 5 years, as an Expert Exploit Writer, technically leading the exploit writing team for the CORE IMPACT product. During all these years he's published some papers, advisories and open source tools as a humble thank you to the community that has given so much to him.

Gerardo "richie" Richarte started Smalltalking and Squeaking in 1998 at Leandro Caniglia's MathMorphs class, where he was one of the main creators and implementors of the MorphicWrappers, as well as some other MathMorphs components. In the early days of Squeak he was an active member of the list, where he contributed a few bits of code. Being a member of the original 2001 SqueakNOS team, he awakened the project almost 5 years later to bring it back its second incarnation. Today, he's still unofficially Squeaking and Smalltalking, and spending a big portion of his time reading and writing assembly and other low level stuff.

Martin Kobetic http://www.esug.org/wiki/pier/Conferences/2010/Talks/Xtreams

Traditional Smalltalk-80 streams have served us well for decades. They are reasonably simple and reliable (for the most part), however, over time we have accumulated a lot of practical experience using streams in a wide range of circumstances. Michael Lucas-Smith and Martin Kobetic started Xtreams as an attempt to distill some of that experience into a new implementation of streams. Xtreams allow to stream over a wide range of sources and destinations, and perform "just-in-time" transformations by stacking streams on top of other streams, for example it is possible to stream directly over content of an encrypted, compressed, base-64 encoded message as it's being received from a socket. This talk will discuss current state of Xtreams, demonstrating some of the design choices and capabilities. Xtreams is MIT license. http://code.google.com/p/xtreams/ It is also on all the packages in the public cincom repository.

Markus Denker http://marcusdenker.de/

I'm a permanent researcher at INRIA Lille - Nord Europe, team Rmod.

Squeak by Example is a open-source book about the Squeak development environment for the classic Smalltalk-80 programming language. Pharo by Example updates the book to use the Pharo fork and adds some new chapters.

Research Interests

Reflective Systems, Context-oriented Programming, Software Evolution, Language Design, Implementation of Dynamic Languages, Compilers, Bio-inspired Computing.

John O’Keefe http://st.instantiations.com/company/management-team.html

Principal Smalltalk Architect, has been in software development for over 40 years, with the first 25 years spent developing in everything from assembly language to PL/I and SNOBOL. John joined the original IBM Smalltalk prototype team in 1990 and was a founding member of the IBM VisualAge Smalltalk development team. He was Team Lead and Chief Architect of IBM VisualAge Smalltalk from 1997 to 2007. In February 2007, John joined Instantiations to lead the VA Smalltalk development team.

Alexander Bergel http://www.bergel.eu/

Since June 2009, I am a full-time Assistant Professor in the University of Chile, member of the Pleiad research group.
Former member of the RMoD research group (INRIA Lille, France), Software Architecture Group (Hasso-Plattner Institut, Germany), LERO (The Irish Software Engineering Research Centre) and Distributed Systems Group (Trinity College Dublin, Ireland) under a SFI grant and Software Composition Group (University of Bern, Switzerland).

My research interests include programming languages, modularity, programming environment, and software quality. For details concerning my research, check out the publications page. On Google Scholar. On DBLP. List of citations. The focus of my work is mainly on (i) defining languages construct to support software evolution and (ii) defining tools and methodology to increase quality in software.

I won the Ernst-Denert Prize 2006 for Software Engineering for my work on Classboxes. The ceremony was held in Dresden (Germany) on October 4th 2006. Pictures are available.

Norman Green http://www.esug.org/wiki/pier/Conferences/2010/Talks/Gemstone-Roadmap

Norm Green has been developing in Smalltalk since 1991 where he started his career at IBM Canada in Toronto. He joined GemStone Systems in 1996 as a Senior Consultant and now leads the GemStone Smalltalk Engineering team. He now resides in Sherwood, Oregon, USA with his wife and 2 sons

El bueno de Mariano Martinez Peck http://objectmodels.blogspot.com/

Travis Griggs de Cincom Smalltalk http://www.cincomsmalltalk.com/userblogs/travis/blogView

Frédéric Pluquet http://fpluquet.be/Frederic_Pluquets_Website/Home.html

Luc Fabresse http://luc.fabresse.free.fr/

Disculpen que no conseguí datos de todos, pueden ver el sitio de la conferencia para conseguir más datos:  Fundación Argentina de Smalltalk (Sitio soportado por plataforma GLASS (Gemstone/Linux/Apache/Squeak/Seaside)).

Pueden visitar también

Club Smalltalk y participar de la lista:

http://groups.google.com/group/clubsmalltalk

Ah! Esta vez, voy a asistir, y el sábado, voy a presentar AjTalk, mi proyecto de VM tipo Smalltalk, escrita en C#, con objetos distribuidos, transacciones, agentes, y acceso a tipos y objetos .NET.

Nos leemos!

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

Posted Thu, Nov 4 2010 9:33 by lopez | 2 comment(s)

Objetos Distribuidos en AjTalk

He agregado objetos distributos a mi proyecto AjTalk (una virtual machine interpretada tipo Smalltalk, escrita en C#). Estoy usando .NET Remoting para serializar objetos de un proceso a otra, y tengo proxies a objetos remotos. Como siempre, pueden bajar el código fuente actual de:

http://code.google.com/p/ajtalk/

Primero, puse un nuevo método en objetos:

nil subclass: #Object
!Object methods!
asRemote
    ^@AjTalk.Hosting.RemoteObject new: self
! !

(Estoy usando la notación AjTalk para acceder a tipos y métodos .NET, ver AjTalk: accediendo a objetos y tipos .NET)

La clase RemoteObject es un decorador alrededor de IObject (interface implementada por los objetos de AjTalk), que hereda desde MarshalByRefObject. En .NET, esos objetos no son serializados: una referencia es enviada al otro proceso. Cada llamada a ese proxy, envía la invocación al objeto original, que todavía reside en su proceso, donde fue creado:

    public class RemoteObject : MarshalByRefObject, IObject
    {
        private IObject obj;
        private Machine machine;
        public RemoteObject(IObject obj)
        {
            this.obj = obj;
            this.machine = Machine.Current;
        }
    // ...    
    }

Hay un host, que puede recibir llamadas desde otros procesos. Podemos lanzarlo en el proceso A:

Object subclass: #Host nativeType: @AjTalk.Hosting.RemotingHostServer
!

host := Host new: @AjTalk.Machine !!current with: 20000 with: 'Server2000'
!

Desde otro proceso, podemos conectarnos a ese host. Ejecutamos en el proceso B:

Object subclass: #RemoteHost nativeType: @AjTalk.Hosting.RemotingHostClient
!RemoteHost methods!
export: aClass
    self execute: (aClass !!toOutputString)
! !

remote := RemoteHost new: 'localhost' with: 20000 with: 'Server2000'
!

Ahora, remote es un objeto en el proceso B que puede ser usado para comunicarse con el proceso remoto A.

El método export serializa en un string la definición de una clase. De esta manera, si tenemos una nueva clase en el proceso B, podemos enviar su definición al proceso A remoto. Una vez hecho esto, podemos crear objetos en el host remoto, que sean de esa clase. Veamos un ejemplo. Definimos una nueva clase en el proceso B:

Object subclass: #Rectangle instanceVariableNames: 'width height'
!Rectangle methods!
width
    ^width
!
height
    ^height
!
width: newWidth
    width := newWidth
!
height: newHeight
    height := newHeight
! !

Entonces, podemos exportar la clase al proceso A:

remote export: Rectangle
!

Ahora, creamos un nuevo Rectangle, en el proceso A, ejecutando el siguiente código desde el proceso B:

remote execute: 'rect := Rectangle new. rect width: 100. rect height: 20'
!

El método execute envía un string, que es ejecutado en la máquina remota. Podemos recibir objetos serializados. De nuevo, ejecutando en el proceso B:

rect := remote evaluate: 'rect'.
rect width: 200.
rect height: 30
!

El método evaluate envía un string al proceso A, lo evalúa, y el resultado (en este caso, el objeto Rectangle) es serializado y reificado (en una copia) en el proceso B. Entonces, los cambios en su tamaño son evaluados sobre la copia en el proceso B. Pero tenemos otro camino: recuperar un proxy al objeto rect, que sigue residiendo en el proceso A:

rect2 := remote evaluate: 'rect asRemote'.
rect2 width: 300.
rect2 height: 40
!

asRemote es la clave: en vez de retornar un objeto serializado, retorna una referencia al objeto que sigue residiendo en el proceso A. Los cambios en el tamaño de rect2 (en realidad, la invocación de métodos width: y height:) son enviados y ejecutados en el ambiente del objeto remoto.

En resumen, con estas clases y métodos, podemos:

- Crear un host, y conectarnos a él desde otro proceso/máquina.
- Enviar un string para ser ejecutado en el host remoto.
- Exportar una definición de clase local al host remoto
- Evaluar una expresión en el host remoto y recuperarla como resultado serializado
- Evaluar una expresión en el host remoto y recuperar su resultado como objeto remoto accesible via un proxy

Debería escribir un caso de uso con esta funcionalidad.

Nos leemos!

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

Posted Wed, Nov 3 2010 11:20 by lopez | with no comments

Presentando en Maratón 2.0 Tandil

La gente de Telefónica Argentina, división negocios, RedValleys (vean todo lo que están haciendo en http://www.redvalleys.org/ ), Globant y Nec, organizan la serie de reuniones Maratón 2.0 en varias ciudades argentinas. Me han invitado para dar una charla en la próxima reunión en Tandil, provincia de Buenos Aires:

http://eventioz.com/events/maraton-20-tandil

Epa! Se les fue la mano! Me pusieron como cartelera … :-) ;-).

La idea mía es ir y charlar, ante una audiencia donde no todos son desarrolladores, sobre Cloud Computing, viendo qué es, hacia dónde puede ir, explicar términos como IaaS, Paas, SaaS (Infrastructure, Platform, Software as a Service), y enumerar algunas tecnologías. Y tratar de mostrar qué oportunidades nos abre esto del Cloud Computing, tanto para desarrolladores, emprendedores, como para empresas. Justamente, en la reunión, se va a presentar el Open App Challenge, que comenté en:

Presentación de Open App Challenge de Telefónica Negocios

concurso de aplicaciones web para resolver problemas de pequeñas y medianas empresas. Ver el sitio:

http://www.openapp.com.ar

Telefónica Negocios organiza junto con la Fundación Telefónica, Red Valleys y NEC el Concurso Nacional de Aplicaciones Web que resuelvan procesos de las Pymes. Dirigido a emprendedores tecnológicos, desarrolladores, proveedores de contenidos, diseñadores, estudiantes y graduados de carreras sistemas. El objetivo del concurso es impulsar la promoción y fomento de la innovación. Con esta iniciativa pretendemos apoyar la generación de nuevos emprendimientos y herramientas para las pymes de nuestro país.

Lean las bases del concurso en:

http://www.openapp.com.ar/site/bases.php

Aclaro ahí, en mi post, que soy parte del jurado del concurso (jurado que ejerce su función sólo en una parte del proceso):

http://www.openapp.com.ar/site/jurado.php

Espero encontrarme con gente conocida en Tandil, como la gente de Glafont, como el bueno de @cwalzer, @fleko y más (uy, no los recuerdo a todos de memoria, todavía, disculpen). Y con gente de la Universidad Nacional del Centro de la Provincia de Buenos Aires (http://www.unicen.edu.ar/) donde ya estuve dos veces dando charlas.

Agradezco desde acá a la gente que me invitó, y en especial a @danidron que se ocupado tanto de mi viaje.

Nos leemos!

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

Posted Tue, Nov 2 2010 10:14 by lopez | 3 comment(s)