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

April 2006 - Posts

Programadores matando dragón

Hola gente!

El bueno de Mariano Szklanny envío esta lista de formas de matar un dragón y rescatar una princesa, según distintas tecnologías. Apareció en un a lista de la universidad a la que asiste. Más abajo, agrego algunos de mi propia cosecha (algo de humor, no se ofenda cualquiera... :-)

Programadores matando un dragón:


Java - Llega, encuentra al dragón,
desarrolla un framework para aniquilación de Dragones en múltiples capas,
escribe varios artículos sobre el framework... pero no mata al dragón.

.NET - Llega, ve la idea del desarrollador de Java y la copia,
intenta matar al dragón, pero el bicho se lo come.

C - Llega, mira al dragón con mirada de desprecio,
tira de espada, degolla al dragón, encuentra a la princesa...
y la ignora para ver los últimos checkins del cvs del kernel de Linux.

COBOL - Llega, ve al dragón y piensa que es demasiado viejo para conseguir
matar un bicho de ese tamaño y quedarse con la princesa, y entonces se va.

Pascal - Se prepara durante 10 años para crear un sistema de
aniquilación de dragones...  cuando llega el momento descubre que el
programa sólo acepta lagartijas como entrada.

Delphi- Crear una serie de componentes para eliminar dragones, pero
cuando se da cuenta esta corriendo en otro ambiente y los componentes
son inutiles para este tipo de dragon, asi que mata al caballero y se
coje a la princesa. Luego el dragon se los come.

VB - Monta un arma de destrucción de dragones a partir de varios
componentes,
salta encima del lomo del dragón,  y en la hora H descubre que la
espada sólo funciona durante las noches de lluvia...

PL/SQL - Recoge datos de otros matadores de dragones, crea tablas con
N relaciones de complejidad ternaria, datos en tres dimensiones, OLAP,
tarda quince años para procesar la información...  y para entonces la
princesa se volvió le[sb]iana.

Ensamblador - Cree que está haciendo lo más correcto y eficiente...
pero pone un A en lugar de un D y mata a la princesa para terminar
fol[lá]ndose al dragón.

FOX PRO - Desarrolla un sistema para matar al dragón.
Por fuera es precioso y funciona, pero por dentro está todo parcheado
y cuando va a ejecutar el aniquilador de dragones recuerda que olvidó
indexar los DBF.

ANALISTA DE PROCESOS - Se acerca al dragón con dos toneladas de
documentación  desarrollada sobre el proceso de matar un dragón
genérico,
desarrolla un DFD para liberar a la princesa y casarse con ella,
convence al dragón de que es lo mejor para él y que no va a doler.
Al ejecutar el proceso estima el esfuerzo y el tamaño del daño que
causará con la firma del Papa, de Buda y de Joan Manuel Serrat para el
plano, y entonces compra dos bombas nucleares, 45 cañones, un
portaaviones y contrata a 300 hombres armados hasta los dientes...
Cuando en realidad tan sólo el dragón ya se fue... obviamente con la
princesa (ella contenta)...

HTML: Monta una web sobre espadas famosas usadas para matar dragones,
pero se pasa los estándares W3C por el forro. Cuando se encara con el
dragón descubre que el código no es compatible con su navegador,  por
lo que se queda compuesto y sin espada.  El dragón se lo merienda como
aperitivo. (Darkblade, barrapunto)

PHP: Crea una página web que al ejecutarla eliminará al $dragón tirando
de una base de datos de armas en MySQL y sobre un servidor Apache.
Sin embargo, se olvidó el Where en la query de delete y mata a la princesa,
al dragón, a los campesinos, a la bruja, al hechicero y al propio
programador.

_BLOCKED SCRIPT El programador intenta matar al gran dragón verde que
lanza fuego por la boca.  Crean un script que borrará al dragón cuando
cargue una página web para
unos segundos después crear unas damiselas que lancen flores y hagan
soniditos de aplausos.  Por desgracia no tuvo en cuenta la estructura
Dom del lagarto, también conocido como Mozilla,  y lo único que
consigue es rellenar su consola de errores
y que el libro de Mozilla narre como acabó devorado.

Programador de videojuegos: Se pasa dos años programando una espada
state of the art, con shaders y todo. A la hora de matar al dragón se
encuentra con que la mitad de los caballeros no tienen fuerza para
mover la espada. Luego alguien programa un parche que revela las
escenas de se[x]o con la princesa y Hillary Clinton le monta un
escándalo (rogerdv, en barrapunto).

Perl - El caballero decide matar al dragón con una expresión regular,
pero se equivoca en los caracteres de comodín y acaba incluyendo en el
patrón de mortalidad a Dragones, Iguanas, lagartos, perros, gatos,
osos, princesas y ratones.

ASP (el primo de .Net) - ¿Quién no fue invitado a matar el dragón
demanda a esta Web por 2.000.000 por discriminación, se reparte el
dinero con el dragón y se van a vivir juntos a Florida.

Analista funcional
- Define todos las posibles ataques del dragón, llamaradas,
posibles puntos débiles y fuertes, su árbol genealógico, etc.
Para cuando tiene listo un primer prototipo,
los tataranietos de la princesa se cargan al caballero
por el sólo hecho de insinuar el matar a su mascota preferida .


:-) :-)

Acá van algunos más que he estado pensando (disculpen la falta de acentos):

LISP: Envuelve al dragon en una serie de parentesis infinito, y lo asfixia.
Como nunca vuelve de esa funcion recursiva, no llega a procesar princesa.

APL: Designa una letra griega para representar dragon, le aplica la
identidad, y luego lo hace desaparecer en una sarta inintelegible de
aplicaciones de funciones.

Maquina de Turing: pone al dragon en alguna parte de la cinta de entrada, y
haciendola avanzar y retroceder, consigue que el dragon se maree, vomite, y
muera ahogado en su propio vomito. La princesa, lamentablemente, sigue la
misma suerte.

Prolog: se escribe un predicado dragon(X), y en la parte derecha le pone
tantos "cut" que el dragon muere desangrado. Nunca tiene un fail, asi que no
llega al predicado princesa(Y), donde a la derecha, hay predicados referidos
a sexo sin limite, algo como princesa(Y) :- sexocon(Y), princesa(Y).

Kernel de Linux: pone al dragon al final de la tabla de procesos, y le
aplica un parche que ejecuta todos los procesos menos el ultimo, asi que el
dragon deja de existir. Cuidado, que con un rootkit, puede hacer que el
dragon se convierta en administrador. Princesa no existe: no hay mujeres en
Linux.

NUnit, JUnit: se escribe un test que prueba si el dragon existe, si tiene
hambre, si esta despierto, si esta enojado. Se lo ejecuta a cada momento,
con integracion continua, y el pobre dragon se suicida, ante tal panorama de
vida. Mientras, todos los test de la princesa quedan en verde.

Smalltalk: Los programadores de Smalltalk no se dedican a matar dragones.
No, ellos no programan. No, ellos tienen un ambiente. No, no insistan, no es
programar. Ni tampoco son objetos. No les hablen de Java, .NET o dragones.
No, estan todos equivocados. Ellos saben que es la realidad y todo eso,
porque la simulan. Crean su propio universo, sin dragones, sin gente molesta
que "dice que programa", y lo guardan en la imagen, que es imposible de
subir a memoria, en ningun otra variante de Smalltalk que la original....

XML/XSLT: Convierten al dragon a XML, lo pasan por un XSLT inintelegible, y
sale una lagartija mareada que ni recuerda para que estaba ahi, y nadie
recuerda para que se hizo eso, solo saben que XML es cool y que debe servir
para algo. Asi que luego le aplican un XSLT para ver si sale algo util, en
vano. La princesa queda serializada en algun XML pero no la pueden rescatar
porque el schema no se encuentra en ninguna parte.

SOA: Arman el contrato MatarDragon, arman el mensaje Dragon, Princesa, lo
envian por Indigo o el nuevo framework de IBM, alguien en alguna parte se
olvide de actualizar el contrato, todo aborta, todo desaparece, y todo el
departamento de IT se pregunta: "donde m... fue a parar ese mensaje??"

UML: Arman el diagrama de clases Dragon, Princesa. Tratan de aplicarle un
caso de uso Matar Dragon. Comienza sencillo, pero de pronto explota en
actores, diagramas de secuencia, diagramas de actividad. Se llena el disco
con diagramas, antes de poder llegar a alguna conclusion. En la version
86.12 de los documentos, alguien se da cuenta que hay que agregar un metodo
matardragon(). Gran discusion: será estático? será de la instancia? Cada
diagrama de secuencia, se hace tan ancho como Rusia, y su impresion amenaza
con deforestar el Amazonas... Finalmente alguien programa 10 lineas en
cualquier lenguaje, y mata el dragon. En el post mortem, se decide usar una
nueva version de UML, porque esta les quedo chica.

Software Libre: Si el Dragon adopta la GPL, está todo bien: bravo dragón, princesa mala,
la próxima versión de Hurd se llamará Draco, etc. Si no, dragón malvado, propietario,
no ético, dragón malo y perverso, todos nuestros post en todos los postnukes del
planeta, irán contra tí. Y el dragón sigue vivo...

Eclipse: Hay un plugin para matar dragones.... Dejenme ver donde estaba... El EasyDraconis,
hmmm... la semana pasada estaba.....Nones, no hay suerte, el ruso que lo hizo emigro, y ahora
vende campos de golf en Florida.... A ver, estaba el DracoEclipse.... No, anda con las versión
2.x... Habia un proyecto en www.eclipse.org, el Draco Eclipse Project, cierto, hay que bajar
el Eclipse Modeling Framework, en Visual Project, y cuatro proyectos mas, y con suerte
levanta.... .Nones, no tuvimos suerte, conflicto con otro plugin instalado de antes...
Veamos, ah.... WebSphere tiene un plugin... a comprar el WebSphere, muchachos...

EJB: Se arma un SessionBean que tenga el metodo matarDragon(), se arma la Home, Remote Interface
la Local, la implementacion..... Usamos XDocLet, bien, lo hace solo, en vez de armar todo eso por separado
(5 archivos de 1000 lineas), lo tenemos todo en un solo archivo (5000 lineas) con comentarios de generacion
de codigo para el XDocLet... Creo que algo mejoramos.... Bien, pasemos al Entity Bean..... hacemos todo de
nuevo, para el Entity... Seguimos, falta el ValueObject, vamos por el, unos comentarios mas en el XDocLet,
vamos que ya sale.... Ultimo momento, EJB 3.0 en puerta..... No, todo de nuevo, cambio.... El xml de descripcion
del proyecto tiene un error..... lo corregimos.... esa version solo levanta en las versiones del JBoss que terminan
en numero primo.... bueno, ya estamos.... Lo vemos la semana que viene, les parece?

Nos leemos!

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

Technorati Profile

Posted Friday, April 28, 2006 11:52 AM by lopez | 10 comment(s)

Encuentro de Arquitectos


El viernes 7 de abril, he asistido a una conferencia para arquitectos, en las oficinas de Microsoft Argentina. Los oradores fueron el bueno de Eugenio Pace, argentino ahora radicado en Redmond, en el grupo Patterns and Practices, y el "Gran Woloski", a.k.a. Matias "Es un issue" Woloski, de Southworks. Pueden consultar los productos del grupo desde

http://msdn.microsoft.com/practices/

Mostraron el futuro del grupo al que pertenece Pace, y con el que colabora Matias. Es el grupo que produjo los Application Blocks, EDRA/Shadowfax, entre otros. Desde hace unas semanas, cambió de lugar dentro de la estructura del gigante de Redmond: mientras que antes reportaba para un área de marketing, ahora pasa a ser parte del grupo responsable del Visual Studio. Eugenio comentó que eso clarifica qué es Patterns and Practices. De alguna forma, los Application Blocks que se produzcan, podrán aparecer en el futuro como parte de Visual Studio, o como herramienta más integrada al mismo. Como ejemplo, el Updater Application Block, de alguna forma evolucionó a lo que apareció como tecnología ClickOnce.

La misión del grupo es crear guías de arquitectura, buenas prácticas, con ejemplos. Ya llevan trabajando en eso cinco años. Lo integran principalmente ingenieros de computación, y la división de roles y personas sigue los lineamientos de Microsoft Solution Frameworks. Por ejemplo, tienen Program Managers, y Product Managers, así como Testers, gente de User Experience, y demás de MSF.

Comentaron que los productos que generaron en este tiempo, son de tres líneas: libros, Application Blocks, y los nuevos Base Architecture Toolkits (afectuosamente llamados BATs). Los libros han sido la forma de difusión de conocimiento más exitosa de la historia humana. Pero el problema con los libros técnicos, es que muchas veces son de un volumen de páginas (y de centímetros cúbicos) impresionante (Eugenio puso como ejemplo un libro que produjeron sobre migración de proyectos Visual Basic 6 a .NET: son como 700 páginas, y según su expresión "es un arma de destrucción, la arrojan por la ventana, y rompe algo"). Los libros de referencias, no los leen, y sólo se consultan en caso de necesidad. Y los libros que explican nuevos conceptos, como patrones, son de alguna forma consultados. Pero detectaron entonces, que la gente les pedía algún ejemplo de todo eso aplicado.

Como lo consideraron un justo reclamo, nacieron hace años, los Application Blocks. Que los  hubo de todo tipo, desde un Data Access Application Block que era "apenas" un Helper, una clase con métodos estáticos, hasta un Composite Application Block, que "abajo del capot" (para usar una expresión de Pace) "tiene de todo". Yo he trabajado con los AB y me han parecido muy cómodos, porque resuelven el problema que se plantearon, y además, al tener el código, pasan dos cosas: uno aprende viendo código de calidad, y lo puede adaptar, en caso de ser necesario, a una necesidad particular. Yo no minimizaría esta última opción: si uno tiene el código, posee más opciones en la forma de implementarlo, o de solucionar un problema que se nos plantee en su uso. También esto permite entender algo que no funciona como uno espera, al poder depurar directamente sobre el código, o entender por qué algo que uno esperaba (un cache en web farm, por ejemplo) no funciona.

Pero si bien los Application Blocks permiten ver implementadas las ideas de los libros, no  quedaba claro cómo usarlos en una aplicación completa. De ahí que desde hace un tiempo considerable, el grupo está trabajando en los Baseline Architecture Toolkits, o BATS. Hay dos liberados:

Smart Client BAT
http://practices.gotdotnet.com/projects/scbat
Services BAT
http://practices.gotdotnet.com/projects/svcbat

Más información sobre el lanzamiento del Services BAT en

http://staff.southworks.net/blogs/matiaswoloski/archive/2006/04/06/ServiceBatWorkspace.aspx

Un BAT entonces tiene ejemplos de aplicación, y además, tiene herramientas basadas en el

GAT Guidance Automation Toolkit
http://msdn.microsoft.com/vstudio/teamsystem/workshop/gat/

Eugenio comentó que uno de los problemas que tenían con anteriores productos, es la ausencia de integración con Visual Studio. En el grupo, no hay expertos en desarrollar diseñadores y herramientas integradas con VS, aunque éste los permite. De ahí que adoptan el GAT.

Con estas herramientas, demostraron en vivo, la creación de una solución de Smart Client. El GAT tiene un generador de código basado en un lenguaje de templates denominado T4, y la capacidad de lanzar tareas. También permite colgarse de los menúes del Visual Studio, por ejemplo, cuando uno crea un nuevo item para solución, puede aparecer algunas opciones de "wizards" con generación de código, orientados al Smart Client.

En el ámbito mobile, están trabajando en

Mobile Applications
Composite UI Application Block (para Windows Mobile 5.0, Compact Framework Net 2.0)
http://practices.gotdotnet.com/projects/mobile
Mobile Baseline Architecture Toolkit
http://staff.southworks.net/blogs/mariano/archive/2006/03/27/293.aspx

Están trabajando duro, para hacer que los BAT sean componibles, no islas de desarrollo.

Alguien preguntó por EDRA (a.k.a. Shadowfax):

http://workspaces.gotdotnet.com/shadowfx

Se comentó que no continuará, porque no está alienado con otros caminos de Microsoft, como el nuevo Indigo, rebautizado Windows Communication Foundation. Es una lástima, era un producto con código a examinar, muy interesante. Tendré que seguir con mi AjServer

http://www.ajlopez.com/ajserver

:-):-)

Algo que comentó Eugenio, que me confirmó otros comentarios que tenía sobre el funcionamiento del grupo, es la metodología ágil que siguen para plantearse los próximos pasos de desarrollo. Se reunen el lunes por la mañana, deciden en qué van a trabajar durante la semana, y al final del viernes, publican lo producido. Es una interesante referencia, sobre el uso de ese tipo de metodologías.

Yo pregunté si iba alguna vez a haber un ORM (Object Relational Mapper) en los Blocks, o en los productos de Patterns and Practices, pero nones. Si alguna vez aparece, será desde los grupos de LINQ o de ObjectSpaces, pero no está en los planes de PAG encargarse de ese tema. No habrá un "NHibernate Application Block".

Pueden visitar los blogs de Eugenio Pace y Matias Woloski, para mayor información:

http://blogs.msdn.com/eugeniop/
http://staff.southworks.net/blogs/matiaswoloski

Nos leemos!

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

Posted Monday, April 10, 2006 12:15 AM by lopez | with no comments

Formularios ASP.NET generados en ejecucion
Hola gente!
 
De tanto en tanto se plantea la generacion de paginas dinamicamente en ejecucion. Una solucion que uso de vez en cuando, ahora recortada de otros ejemplos, y autonoma, es la que implemento en:
 
 
(Necesitan la base de datos del ejemplo http://www.ajlopez.com/ajconsor)
 
Se basa en dos controles ASP.NET, que en base a una definicion XML, recuperan, actualizan y muestran, datos, de una base, en tablas, formularios y paginas ASP.NET. Un ejemplo de definicion usado:
 
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<Consorcios>
<DataSource Query="Select * from Consorcios order by Id"/>
<Title>Consorcios</Title>
<Verbs>
<Verb Action="~/PaginaFormulario.aspx?Esquema=ConsorcioFormularioNuevo" Text="Nuevo Consorcio"/>
</Verbs>
 <Table>
  <Column Name="Id" Text="Id" Align="right" Link="~/PaginaEsquema.aspx?Esquema=Consorcio&amp;Id=${Id}"/>
  <Column Name="Codigo" Text="Código"/>
  <Column Name="Descripcion" Text="Descripción"/>
 </Table>
</Consorcios>
 
Falta refactorizar en cantidad, pero "la base esta"... :-)
 
La idea final seria hacer todo un sistema basado en esos esquemas XML...
 
Nos leemos!
 
Angel "Java" Lopez
(hoy viene firma larga .... :-)
http://www.ajlopez.com/ (sitio personal)
http://www.msmvps.com/lopez (este blog tecnico en espaniol)
http://ajlopez.zoomblog.com/ (blog no tecnico en simil espaniol)
http://spaces.msn.com/ajlopez (new blog written in a non-standard dialect of English)
 

Posted Monday, April 03, 2006 1:11 AM by lopez | 3 comment(s)