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 2006 - Posts

.NET en Bahia Blanca


El miércoles pasado, 22 de noviembre, tuve el gusto de viajar a Bahía Blanca. Nunca había estado en la ciudad y en la zona. Fui a dar una charla sobre .NET 2.0, lo nuevo de ADO.NET 2.0, y en especial ASP.NET 2.0, organizada por el Grupo de Usuarios Microsoft de Argentina. Duró cuatro horas, espero que los asistentes hayan podido disfrutarla, y puedan entender lo que traté de transmitir. Los temas fueron desde el framework de .NET, el concepto de Intermediate Language, la librería de clases, elementos de ADO.NET, y finalmente, jugamos bastante con el tema ASP.NET, investigando el modelo de funcionamiento, el "postback", los controles, los eventos, el enlazamiento a datos. Capítulos especiales de la charla fueron dedicados a los nuevos providers de .NET, para manejo de usuarios y roles, y a las "master pages" y temas.

En Bahía Blanca fui recibido por una socia del MUG, la amable Paola Piovano, que se encarga de organizar la actividad del MUG en la zona. Ya había organizado una charla con el bueno de Carlos Walzer, en el auditorio de la Universidad Tecnológica Nacional. En esta charla mía, colaboró también la gente de la UTN. Conocí al Ing. Guillermo Reggiani que es docente en esa regional. Colaboró junto con sus alumnos para que la charla fuera un éxito. Paola y Guillermo me comentaron que hay pocas actividades de conferencias sobre informática en la región: la regional de UTN de esa ciudad no dicta carreras informáticas. Otra universidad con sede en la ciudad, es la Universidad Nacional del Sur. Ahí sí tienen alguna carrera dedicada a la informática, y al parecer, se dedican a la investigación en inteligencia artificial. Me gustaría saber en que partes de la IA se han interesado.

Conocí también al inefable Marcos Meli, que trabaja en el grupo de Paola, desarrollando para una empresa de la zona. El es el creador de la excelente librería de código abierto:

http://filehelpers.sourceforge.net
http://www.codeproject.com/useritems/filehelpers.asp

Vean el uso de atributos, reflection, generación de clases en ejecución, testing con NUnit, manual. Excelente trabajo, Marcelo!

El material de mi charla lo pueden ver desde:

Material del Seminario .NET 2.0, ASP.NET 2.0, ADO.NET 2.0 en Bahia Blanca

Espero volver ahora en diciembre a esta ciudad, para dar un seminario un poco más extenso, sobre Arquitectura paso a paso en .NET

Aprovecho para agradecerles a Paola, Guillermo, Marcos, y a todos los que colaboraron para que yo pudiera dar esta charla, en especial a Oscar Turquet, del MUG de Argentina, que siempre me hace conocer viajar y conocer a mi pais.

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/

 

Posted Wednesday, November 29, 2006 12:25 PM by lopez | with no comments

Filed under: ,

Google Microsoft Search

El bueno de Miguel Angel Saes nos acerca el enlace

http://www.google.com/microsoft.html

Lo interesante es que busca en varios sitios, temas relacionados con Microsoft

Nos leemos!
 
Angel "Java" Lopez
http://www.ajlopez.com/

Posted Monday, November 27, 2006 9:23 AM by lopez | with no comments

Filed under:

Generando Código: Hello World con AjGenesis


Mi proyecto preferido, AjGenesis, consiste en un generador de código, escrito en VB.NET. Es un proyecto de código abierto, con una licencia tipo BSD, que permite utilizarlo en cualquier proyecto que quieran. Se puede usar como librería, invocado desde nuestro proyecto, se puede invocar desde la línea de comando, o puede ser utilizado desde el poderoso NAnt (esto último me permitió organizar mejor las tareas que realiza el generador de código).

En la página del proyecto (y en el proyecto mismo) hay multitud de ejemplos, que generan código desde un modelo, usando plantillas. Los ejemplos generan código PHP, Java, JSP, VB.NET, C#, ASP.NET, y hasta scripts de base de datos y procedimientos almacenados. Quisiera destacar dos puntos:

- El modelo del que parte es totalmente definible por el usuario

- Las tareas y plantillas a aplicar son totalmente programables y controlables

Esto lo diferencia de otros generadores. Ud. puede hacerse su propio modelo, y sus propias plantillas, para generar los artefactos de texto que prefiera. Otros sistemas parten de la base de datos, y sólo generan un grupo de artefactos de textos predefinidos (por ejemplo, POJOs, o DAOs). Pero con AjGenesis puede generar lo que Ud. quiera.

Para ejemplificar, este artículo se dedica a modelar algo que, si bien no es lo último en tecnología, es la primera prueba que debe pasar un generador de código: modelar y generar un viejo pero entrañable "Hello, World" (programa que encontré por primera vez en el venerable "The C Programming Language" de los buenos de Kernighan y Ritchie).

Los archivos de este ejemplo, pueden bajarse de HelloWorld1.zip

Primero, el modelo. Como menciono en mis charlas, el modelo es una simplificación de la realidad. El modelo, por ejemplo, un mapa, no es la realidad, el territorio. En el caso de los modelos de AjGenesis, se trata de crear inicialmente, un modelo que muestre lo variable de nuestro sistema. En el caso de un HelloWorld, lo que quisierámos modelar como variable, es el mensaje. Entonces, creamos en un directorio de trabajo, el archivo Project.xml:

<Project>
<Message>Hello World, by AjGenesis</Message>
</Project>

Este es el primer paso. Vean que no tuvimos que usar un modelo predefinido, simplemente, lo escribimos en un documento XML bien formado. Nada de schemas, nada DTDs, o bichos raros. Solamente nuestra creatividad.

El segundo paso es elegir la tecnología (lenguaje, plataforma, framework, base de datos), que vamos a utilizar, y escribir (o reutilizar) plantillas. Decidimos crear un ejemplo en VB.NET, un simple programa de consola. La plantilla la escribimos en el archivo HelloVb.tpl

'
' Hello World demo
' generated by AjGenesis
' http://www.ajlopez.com/ajgenesis
'

Module HelloWorld
 Public Sub Main()
  System.Console.WriteLine("${Project.Message}")
 End Sub
End Module

Acá aparece una característica de las plantillas: permiten acceder y utilizar en la salida, los datos del modelo. Al escribir Project.Message entre ${ y }, le indicaros al procesador AjGenesis, que cuando trabaje sobre esta plantilla, reemplace ese texto por el valor de la rama Project/Message en nuestro modelo. Vemos que no usamos una notación XML o XPath para referirnos a algo del modelo. El modelo inicial está serializado en XML, pero AjGenesis lo levanta a memoria, y nos lo deja como un objeto con propiedades.

Hubiéramos podido escribir el modelo como

<Project Message="Hello World, by AjGenesis"/>

El modelo en memoria sería el mismo. Aunque ahora Message está como atributo, para nuestra plantilla sigue siendo la propiedad Message del objeto Project.

Ya tenemos el modelo, y la plantilla. Necesitamos bajar y expandir el AjGenesis-0.4.3.zip (versión en desarrollo, las anteriores versiones están en el directorio de fuentes SourceForge del proyecto). En esa versión, hay un directorio bin con librerías y algún ejecutable. El AjGenesis.Console.exe es el programa que puede invocarse para tomar el modelo y la plantilla, y generar un archivo, así:

AjGenesis.Console Project.xml HelloWorldVb.tpl HelloWorld.vb

Los parámetros se explican así:

Archivo .xml: cuando encuentra en la lista de parámetros un archivo XML, AjGenesis lo carga en su ambiente de variables. El nodo inicial del XML pasa a ser el nombre de la variable que contiene al modelo.

Archivo .tpl: lo toma como plantilla, y lo procesa, generando un archivo con el nombre del siguiente parámetro.

Por supuesto, para que esto funcione, o deberemos poner la ruta completa del ejecutable AjGenesis.Console, o deberemos incluir el directorio bin de AjGenesis en el PATH de nuestro ambiente.

Los parámetros los procesa en orden. Podríamos poner más de un modelo, más de un archivo XML. Por ejemplo, un segundo archivo XML podría describir la tecnología de base de datos a usar, o el nombre de la empresa que está usando el modelo, o cualquier otra cosa que se nos ocurra. Sería conveniente en este caso que el segundo archivo XML tenga un nodo raíz distinto de Project, porque así no sobreescribe al modelo del anterior archivo. También podríamos colocar varios archivos de plantilla con su correspondiente archivo resultado, en una misma invocación.

Si ejecutamos entonces el comando de arriba (necesitamos un framework .NET instalado, recordemos que AjGenesis está escrito en .NET), se genera el archivo HelloWorld.vb

'
' Hello World demo
' generated by AjGenesis
' http://www.ajlopez.com/ajgenesis
'

Module HelloWorld
 Public Sub Main()
  System.Console.WriteLine("Hello World, by AjGenesis")
 End Sub
End Module

No vamos a decir "Uy que bruto..", pero es el primer paso.

Pero vayamos más alla. Supongamos que ahora, con el mismo modelo, queremos generar nuestro gran sistema HelloWorld, en Java. Las presiones del mercado, nuestros clientes, nos piden la nueva versión en el lenguaje multiplataforma Java, y nosotros estamos acá para servirlos. Bien, manos a la obra, creamos un archivo HelloWorldJava.tpl con

/**
* Hello World demo
* generated by AjGenesis
* http://www.ajlopez.com/ajgenesis
*/

public class HelloWorld {
 public static void main(String [] args) {
  System.out.println("${Project.Message}");
 }
}

y ejecutamos en la línea de comando

AjGenesis.Console Project.xml HelloWorldJava.tpl HelloWorld.java

y voilá, se genera el archivo HelloWorld.java:

/**
* Hello World demo
* generated by AjGenesis
* http://www.ajlopez.com/ajgenesis
*/

public class HelloWorld {
 public static void main(String [] args) {
  System.out.println("Hello World, by AjGenesis");
 }
}

Ya estamos cebados. Vamos por un ejemplo más flexible. Quisiéramos ahora generar el programa VB.NET, el programa C#, el programa Java, y que el nombre de la clase, del programa, sea algo variable (en las plantillas anteriores aparecía siempre HelloWorld como nombre del archivo y de la clase o módulo).

Los archivos de este segundo ejemplo se pueden bajar de HelloWorld2.zip.

Para esto, en otro directorio, creamos el archivo Project.xml con el contenido

<Project>
 <Name>HelloWorld</Name>
 <Description>Hello World Demostration</Description>
 <Message>Hello World, by AjGenesis</Message>
</Project>

Y escribimos las plantillas ModuleVb.tpl

'
' ${Project.Description}
' generated by AjGenesis
' http://www.ajlopez.com/ajgenesis
'

Module ${Project.Name}
 Public Sub Main()
  System.Console.WriteLine("${Project.Message}")
 End Sub
End Module

y ClassJava.tpl

/**
* ${Project.Description}
* generated by AjGenesis
* http://www.ajlopez.com/ajgenesis
*/

public class ${Project.Name} {
 public static void main(String [] args) {
  System.out.println("${Project.Message}");
 }
}

Estudiemos otra característica de AjGenesis: la capacidad de ejecutar un script, en un lenguaje denominado informalmente AjBasic. Creo que esta es una característica poderosa, porque posibilita ir más allá de simplemente la línea de comando. Nos permite manipular programáticamente el modelo y las tareas a realizar. En los ejemplos que encontrarán en la página del proyecto, se usa mucho esta característica, llegándose a producir soluciones completas, con decenas de archivos. Pero veamos nuestro ejemplo.

El programa lo ingresamos en el archivo Build.ajg

PrintLine "Generating ${Project.Name}"

TransformerManager.Transform("ModuleVb.tpl", "${Project.Name}.vb", Environment)
TransformerManager.Transform("ClassJava.tpl","${Project.Name}.java", Environment)

El lenguaje AjBasic, tiene algún verbo predefinido, como el autodescriptivo PrintLine. Notemos que, como en otros lenguajes de scripting, tiene expansión de expresiones en los strings. Esto es, cuando en un texto entre doble comillas (una constante string), ubica una expresión entre ${ y }, la evalúa y la reemplaza por el valor resultante. Muchos de Uds. reconoceran aquí una conducta similar a otros lenguajes de scripting de Unix/Linux, o a PHP, o al Expression Language de JSP 2.x.

La variable TransformerManager es una de las pocas predefinidas. No he definido muchas, y Uds. pueden agregar variables al ambiente de AjGenesis. Pero TransformerManager sirve para invocar programáticamente lo que hacemos desde la línea de comando. Así, el primer parámetro de su método Transform el archivo plantilla, el segundo parámetro es el archivo a generar, y el tercero, la colección de variables definida (en el ejemplo usamos Environment, otra de las variables predefinidas, que justamente es el diccionario de variables que ahora están disponibles en la evaluación de este script).

Ejecutamos lo anterior con

AjGenesis.Console Project.xml Build.ajg

El programa de consola está preparado para ejecutar cada parámetro que tenga la extensión .ajg, interpretándolo como un texto AjBasic.

Pero podemos ir más allá. El año pasado (el proyecto AjGenesis ya lleva sus años en desarollo), incorporé soporte de NAnt. Esto lo hice escribiendo tareas (Tasks) de AjGenesis que pueden invocarse desde ese gran utilitario. Yo uso además, el utilitario NAnt-GUI para ejecutar los archivos .build desde una ventana gráfica.

Escribamos un archivo default.build con el contenido (revise y modifique la property ajgenesis.dir para que refleje el directorio donde ha dejado al AjGenesis):

<?xml version="1.0"?>
<project name="Example 1" default="build">
<property name="ajgenesis.dir" value="c:/ajlopez/dev/AjGenesis-0.4.3"/>
<property name="nanttasks.dir" value="${ajgenesis.dir}/bin"/>

<target name="clean" description="cleans build directory">
   <delete dir="${build.dir}" verbose="true" if="${directory::exists(build.dir)}" />
</target>

<target name="loadtasks" description="loads AjGenesis tasks">
   <loadtasks assembly="${nanttasks.dir}/AjGenesis.NAnt.dll" />
</target>

<target name="init" depends="loadtasks" description="init the AjGenesis model">
   <loadmodel model="Project.xml"/>
</target>

<target name="build" depends="init">
   <executetask task="Build.ajg"/>
</target>
</project>

Entonces, desde la línea de comando podemos invocar

nant

Si tenemos configurado a ese utilitario, procesa el target default que de build.xml. Yo uso el NAnt-Gui, que me presenta la pantalla

Espero que este artículo les sirva como inicio de explicación a algunas de las características de AjGenesis. Espero escribir un próximo artículo, con ejemplos de uso de AjBasic dentro de las mismas plantillas, uso más intensivo del NAnt, manipulación del modelo en memoria, y generación de aplicaciones completas, en distintas plataformas y tecnologías.

Si alguien le parece útil, les pido que lo difundan, por ejemplo, con artículo de cómo lo están usando, en su blog.

Gracias por todo, nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/

 

Posted Sunday, November 19, 2006 11:24 PM by lopez | 16 comment(s)

Servoy en Argentina

Hola gente!

 Conozco el producto solo de nombre y de su sitio web:

 http://www.servoy.com/

Pero me pareció interesante comentar que habrá una reunión gratuita el próximo martes 23 de Noviembre, a las 14:30hs, en las oficinas de Sun Microsystems, Av. Madero 900 , Piso 19 Salón Galaxy .
El acceso es gratuito pero requiere inscripción previa. Para inscribirse enviar sus datos a :

- Por teléfono o fax al 011-4831-0940

- Por email a infocomsa@infocomsa.com.ar

Transcribo parte del email de promoción que he recibido:

Servoy es el ambiente de desarrollo más productivo basado en estándares. Le mostraremos como Ud. puede rehacer o ampliar sus aplicaciones existentes 5 o 10 veces mas rápido que usando Java o .NET.

Si Ud. necesita incrementar la rentabilidad de su aplicación le ofrecemos:

Basado en estándares (Java, AJAX, SOA, SaaS y mucho mas)
Soporte de múltiples plataformas (Windows, Mac OSX, Linux y mucho mas)
Desarrollo mas rápido (5-10x que Java, .Net)
Menor mantenimiento (Una sola versión de código)
Mayor funcionalidad (Plug ins, beans, applets)
Actualizaciones sin problemas (control de versiones remota)
Soporte de múltiples bases de datos (prácticamente cualquier motor de BD, incluyendo entre otros a MySQL, Postgress, IBM/Db2, Informix, Oracle, MS SQL Server)
"Cero instalación en el cliente" (Web client, Smart client, SaaS-Software as a Service)
Servoy ofrece mayor productividad que con ambientes 3GL-4GL permitiendo el desarrollo e implementación de aplicaciones Java de misión crítica, escalables y utilizando estándares de la industria con la facilidad de un 4GL.

Servoy es un ambiente de desarrollo rápido de aplicaciones basado en Java totalmente enfocado en maximizar la productividad de los desarrolladores. Prácticamente Ud. no necesita escribir sentencias Java (a menos que quiera hacerlo) ni sentencias SQL (a menos que quiera hacerlo). Ud. puede desarrollar sus aplicaciones 5-10 veces mas rápido que usando Java o .NET

Notable que nombre Software as a Service, un tópico que se va imponiendo.

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/

 

Posted Monday, November 13, 2006 4:56 PM by lopez | with no comments

Filed under:

Charlas en Buenos Aires y Bahía Blanca: Windows Workflow Foundation, Communication Foundation, .NET 2.0

Estoy preparando charlas para el Grupo de Usuarios Microsoft de Argentina, sobre Windows Workflow Foundation, Windows Communication Foundation (el viejo Indigo), en Buenos Aires, y viajaré a Bahía Blanca para hablar de .NET 2.0 en general, con las novedades de ASP.NET 2.0. Espero volver nuevamente en diciembre a Bahía Blanca, para dar alguna charla sobre arquitectura .NET paso a paso, donde me explayaré sobre las razones y fundamentos de un estilo arquitectónico en capas, y su implementación en .NET. Como siempre, en estas charlas algo mecharé de mi siempre presente generador de código, el AjGenesis.

Para los que quieran asistir, la información del evento de WF está en

http://www.mug.org.ar/Eventos/2412.aspx

Veremos en el curso, su uso desde aplicaciones WinForms, ASP.NET, y en aplicaciones distribuidas, con instancias de workflows secuenciales, de estado, con actividades predefinidas o creadas, y usando los servicios de persistencia y de tracking.

En cuanto a la visita a Bahía Blanca, más info en

http://www.mug.org.ar/Eventos/2446.aspx

organizado en conjunto con la Universidad Tecnológica Nacional, Facultad Regional Bahía Blanca.

 Todavía no está publicada el seminario de Windows Communication Foundation, pero deberá ser en diciembre, en Buenos Aires.

Como verán estoy algo atareado. Sigo pasando a texto las charlas que estoy dando, espero poder publicar algo antes de fin de año, para los que no puedan asistir.

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/

Posted Wednesday, November 08, 2006 11:59 PM by lopez | with no comments

Generación de Código con AjGenesis en Santa Fé

El viernes 3 de noviembre pasado, gracias al Grupo de Usuarios Microsoft de Argentina, y en especial, a Oscar Turquet, visité la regional Santa Fé de la Universidad Tecnológica Nacional, en la ciudad del mismo nombre. Con un vista a un lago impresionante, la universidad cuenta con un auditorio que ya había visitado el año pasado. He dejado el material presentado en mi sitio en

http://www.ajlopez.net/ReferenciaVe.php?Id=149

Presenté, como siempre, a mi proyecto de código abierto AjGenesis. Así como presenté mis primeros templates, y las decisiones de diseño que tomé (por ejemplo, abandonando XSLT para las transformaciones, y adoptar un lenguaje de scripting no tipado como el AjBasic), también presenté mis últimos templates, orientados a Domain-Driven Design a la Eric Evans.

Espero que se haya entendido que, más que la generación de código, es importante la presencia de un modelo. A partir de un modelo (que es una simplificación de la realidad), o de varios, podemos generar distintos artefactos de un sistema, y hasta, quizás con el avance de la tecnología, un sistema completo. Mi esperanza está puesta en la generación y refinamiento de modelos, usando algo que podría asimilarse a la inteligencia artificial. Pero si en algo nos puede ayudar el software, es precisamente, en la generación de software.

Me atendieron muy allá, el Dr. Horacio Leone, y el bueno de Iván Melgrati, a quien había conocido el año pasado. Conocí también a Rodrigo Ledesma, que me comentó sobre sus cursos de Java. Muy interesante lo que encontré, por eejemplo, Iván está trabajando en la tecnicatura a distancia en informática, de esa regional, que ya hace un año que está funcionando, y tiene, que recuerde, cerca de doscientos inscriptos.

Estuve preguntando sobre el parque tecnológico de la zona, que parece que va viento en popa. Sin embargo, escasean los profesionales en informática, así como los ingenieros de otras disciplinas duras: hay poca inscripción, pero mucha demanda de las empresas. Al parecer, pocos jóvenes piensan en una carrera tecnológica, o de ciencias, mientras que hay "sobrepoblación" de estudiantes y recibidos en abogacía, administración y otras. Desconozco cuál es la causa, pero espero que las próximas generaciones de mi país retomen el interés por la ciencia y la tecnología, que me parecen fascinantes como actividad humana. Creo fervientemente que si algo perdura, son los avances en ciencia y tecnología. Y que son esos avances los que más influyen (espero que para mejor) en el desarrollo de la historia humana.
Bueno, me puse filosófico, ya comentaré sobre esos temas en mi blog no técnico, donde discurro sobre filosofía, el sentido de la vida, y bueyes perdidos.
Nos leemos!
Angel "Java" Lopez

 

Posted Wednesday, November 08, 2006 7:34 PM by lopez | 1 comment(s)