<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Angel "Java" Lopez : Java</title><link>http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx</link><description>Tags: Java</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Canales y GoRoutines en AjSharp (Parte 1)</title><link>http://msmvps.com/blogs/lopez/archive/2009/12/29/channels_2D00_and_2D00_goroutines_2D00_in_2D00_ajsharp_2D00_part_2D00_1.aspx</link><pubDate>Tue, 29 Dec 2009 09:41:04 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1748097</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1748097</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/12/29/channels_2D00_and_2D00_goroutines_2D00_in_2D00_ajsharp_2D00_part_2D00_1.aspx#comments</comments><description>&lt;p&gt;Hace dos años ya, estuve explorando Microsoft Robotics, y su librería CCR (Concurrency and Coordination). Esta tiene la implementación una port: podemos enviar un objeto por el port, y recibirlo y procesarlo en otra pieza de código, que puede ejecutarse en otro hilo de ejecución. También tiene la capacidad de ejecutar ambas partes en diferentes máquinas, una forma de conectar aplicaciones distribuidas. Yo escribí sobre el tema en:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/2008/06/15/distributed-agents-using-dssvpl/"&gt;Distributed Agents using DSS/VPL&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/06/20/agentes-distribuidos-usando-dss-vpl.aspx" target="_blank"&gt;Agentes Distribuidos usando DSS/VPL&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/06/23/agentes-distribuidos-y-fractales-usando-dss-vpl.aspx" target="_blank"&gt;Agentes Distribuidos y Fractales usando DSS/VPL&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/2008/04/10/genetic-algorithms-with-ajagents-and-concurrency-and-coordination-runtime-ccr/"&gt;Genetic Algorithms with AjAgents and Concurrency and Coordination Runtime (CCR)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/04/13/algoritmos-gen-233-ticos-con-ajagents-y-concurrency-and-coordination-runtime-ccr.aspx" target="_blank"&gt;Algoritmos Genéticos con AjAgents y Concurrency and Coordination Runtime (CCR)&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://ajlopez.wordpress.com/category/concurrency-and-coordination-runtime/" target="_blank"&gt;CCR posts (English)&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/tags/Concurrency+and+Coordination+Runtime/default.aspx" target="_blank"&gt;Posts sobre CCR en español&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Todo esto, me llevó a encontrarme con el concepto de canal: &lt;a href="http://en.wikipedia.org/wiki/Channel_%28programming%29" target="_blank"&gt;Channel programming (Wikipedia)&lt;/a&gt; y este año, leí sobre el nuevo lenguaje de Google, el lenguaje Go: &lt;a href="http://golang.org"&gt;http://golang.org&lt;/a&gt;. Pueden leer sobre Go y sus capacidades de manejo de concurrencia (go routines, channels) en: &lt;a title="http://golang.org/doc/go_tutorial.html#tmp_346" href="http://golang.org/doc/go_tutorial.html#tmp_346"&gt;http://golang.org/doc/go_tutorial.html#tmp_346&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;También comencé a leer sobre proyecto Axum de Microsoft: &lt;a title="http://en.wikipedia.org/wiki/Axum_%28programming_language%29" href="http://en.wikipedia.org/wiki/Axum_%28programming_language%29"&gt;http://en.wikipedia.org/wiki/Axum_%28programming_language%29&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Con toda esta base, el último sábado agregué soporte de canales y goroutines en &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjSharp/default.aspx" target="_blank"&gt;mi intérprete AjSharp&lt;/a&gt; (otros posts &lt;a href="http://en.wordpress.com/tag/ajsharp/" target="_blank"&gt;AjSharp interpreter&lt;/a&gt;). Pueden bajar y ver la versión actual desde &lt;a href="http://code.google.com/p/ajcodekatas"&gt;http://code.google.com/p/ajcodekatas&lt;/a&gt; en trunk/AjLanguage &lt;/p&gt;  &lt;p&gt;Primero, agregué un tipo nativo .NET Channel (a mejorar: agregar soporte para que el canal pueda soportar varios send y receive desde más de un thread):&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Channel
{
    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; AutoResetEvent sethandle = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; AutoResetEvent(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);
    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; AutoResetEvent gethandle = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; AutoResetEvent(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);
    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Send(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;)
    {
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.gethandle.WaitOne();
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.sethandle.Set();
    }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; Receive()
    {
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.gethandle.Set();
        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.sethandle.WaitOne();
        &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; result;
    }
}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Cuando se envía un objeto a un canal, el thread que lo envía se bloquea hasta que otro thread lea el canal (pienso agregar un QueueChannel, donde se puedan enviar varios objetos, a guardar en una cola, sin para los threads; supongo que la cola tendrá un tamaño limitado, para ir auto-coordinando los productores y consumidores de objetos del canal).&lt;/p&gt;

&lt;p&gt;Siguiendo las ideas de goroutines en el lenguaje Go, agregué un nuevo comando en AjSharp: go &amp;lt;command&amp;gt; (ok, no mucha creatividad aquí… ;-)… igual hay que aclarar que los goruotines en Go tienen muchas más características que las que implemento acá). Esta nueva palabra lanza el comando en un thread separado, que comparte las variables del original, como en este ejemplo (recordemos que AjSharp tiene acceso a los objetos y clases nativas de .NET):&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;handle = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; System.Threading.AutoResetEvent(&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);
one = 0;
go { one = 1; handle.Set(); }
handle.WaitOne();
result = one;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Todo esto se agregó a la máquina de ejecución de AjSharp (por ejemplo, Channel es un tipo ya declarado dentro de la máquina, sin necesidad de usar el namespace completo), podemos usar entonces:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;channel = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Channel();
go channel.Send(10);
result = channel.Receive();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Luego de tener esto andando, modifiqué algo más. Fue simple agregar “syntax sugar” al parser de AjSharp para que&lt;/p&gt;

&lt;p&gt;&amp;lt;- channel&lt;/p&gt;

&lt;p&gt;sea igual a&lt;/p&gt;

&lt;p&gt;channel.Receive()&lt;/p&gt;

&lt;p&gt;y que&lt;/p&gt;

&lt;p&gt;channel &amp;lt;- value;&lt;/p&gt;

&lt;p&gt;sea una forma de escribir:&lt;/p&gt;

&lt;p&gt;channel.Send(value);&lt;/p&gt;

&lt;p&gt;Entonces, el ejemplo anterior se puede escribir como:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;channel = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Channel();
go channel &amp;lt;- 10;
result = &amp;lt;- channel;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;En otro post, describiré algunos usos de estas características, con algún detalle de implementación. Ver el código actual en:&lt;/p&gt;

&lt;p&gt;&lt;a title="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage" href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage"&gt;http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLanguage&lt;/a&gt; 

  &lt;br /&gt;Nos leemos!&lt;/p&gt;

&lt;p&gt;Angel “Java” Lopez 
  &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; 

  &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1748097" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjSharp/default.aspx">AjSharp</category></item><item><title>Enseñando a programar (Parte 1)</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/19/ense-241-ando-a-programar-parte-1.aspx</link><pubDate>Mon, 19 Oct 2009 09:47:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1733324</guid><dc:creator>lopez</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1733324</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/10/19/ense-241-ando-a-programar-parte-1.aspx#comments</comments><description>&lt;p&gt;El tema que se&amp;ntilde;ala el t&amp;iacute;tulo de este post es un tema ampl&amp;iacute;simo, del que habr&amp;iacute;a tanto para decir y discutir. Veamos de tratar algunos puntos, que surgen de experiencia personal, e ideas sin probar que van rondando mi cabeza desde hace unos a&amp;ntilde;os.&lt;/p&gt;
&lt;p&gt;Primero, una aclaraci&amp;oacute;n: si bien gran parte de mi actividad semanal (en estos tiempos, m&amp;aacute;s del 60% del tiempo que empleo), est&amp;aacute; dedicado al dictado de cursos&amp;nbsp;(en empresas e institutos ac&amp;aacute; en Argentina, o en charlas en distintas ciudades) me considero no un instructor de programaci&amp;oacute;n, sino un desarrollador de software que por esos accidentes de la vida termin&amp;oacute; dedicando tanta cantidad de sus horas al dictado de clases. Pero no soy una persona pedag&amp;oacute;gica, o que haya estudiado para ense&amp;ntilde;ar sino, como muchos otros instructores, soy alguien que programa y que muestra algunos temas de programaci&amp;oacute;n, desde mi propio &amp;oacute;ptica personal (hace a&amp;ntilde;os que no doy un curso oficial o de Sun o de Microsoft, prefiero dar mis temas a mi forma y con mis temarios).&lt;/p&gt;
&lt;p&gt;Segundo: prefiero programar que ense&amp;ntilde;ar. Contrariamente a lo que algunos de Uds. podr&amp;iacute;an pensar, para m&amp;iacute; ense&amp;ntilde;ar no es la mejor forma que imagina de pasar mi tiempo profesional, por lo menos en cursos presenciales de la forma en que me toca ahora dictar. Prefiero escribir, leer, programar ejemplos, pruebas de conceptos, aplicaciones completas, describir temas en posts, antes&amp;nbsp;que estar dictando una clase presencial (una charla es otra cosa: es m&amp;aacute;s interesante, es para presentar un tema, y llamar a la acci&amp;oacute;n a los asistentes, sin tener que seguir por semanas hablando de lo mismo). Cuando tengo, digamos, un curso para las 18:30, ya s&amp;eacute; que ese d&amp;iacute;a no puedo trabajar hasta las 18hs en un proyecto, o no puedo irme a almorzar tarde, o no puedo salir de viaje a otra ciudad, o no puedo&amp;hellip;&amp;nbsp; o voy a salir demasiado tarde para ir a cenar tranquilo, o pasar por tal lado, o &amp;hellip; y mil cosas m&amp;aacute;s. Un curso es un clavo en el medio de cualquier agenda a armar. Tambi&amp;eacute;n pasa que un curso que no es nocturno, parte al medio cualquier d&amp;iacute;a de trabajo, especialmente cuando trabajo en un equipo Scrum. Como los cursos tienen d&amp;iacute;as ocupados durante varias semanas, tambi&amp;eacute;n se me complica organizar cualquier visita al interior de mi pa&amp;iacute;s, para dar una charla sobre un tema. En definitiva, curso presencial con muchas clases, es un incordio para cualquier agenda.&lt;/p&gt;
&lt;p&gt;Y una de las cosas que m&amp;aacute;s me cansan, a esta altura de mi vida, es hablar, hablar y hablar durante horas en un curso. Vuelvo a mi cubil, a veces, bastante cansado y congestionado, nada m&amp;aacute;s de hablar. Imagino que en cualquier momento comienzo a dar una clase mostrando cosas en el proyecto y explicando lo que hago escribiendo en el Notepad&amp;hellip; :-)&lt;/p&gt;
&lt;p&gt;Hechas esas confesiones personales, respiro hondo,&amp;nbsp;y paso a comentar algunos problemas que detecto&amp;nbsp;en los cursos que conozco, los m&amp;iacute;os.&lt;/p&gt;
&lt;p&gt;Muchos de mis cursos se pueden circunscribir a estos tipos:&lt;/p&gt;
&lt;p&gt;- Grupo de gente que conoce algo de programaci&amp;oacute;n, que pueden estar en distintos niveles, y quieren aprender un tema de tecnolog&amp;iacute;a, ejemplo: ASP.NET o JSP.&lt;/p&gt;
&lt;p&gt;- Curso con m&amp;aacute;quina o sin m&amp;aacute;quina y proyector&lt;/p&gt;
&lt;p&gt;Bien, comienzo por los temas que veo que no est&amp;aacute;n del todo bien y se pueden mejorar, o cambiar completamente por otro &amp;ldquo;approach&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Notemos que los cursos presenciales tienen un gran problema: son, justamente presenciales. Hay que combinar los horarios de todos los que quieren participar, reservar tal tiempo a tal hora y lugar; tambi&amp;eacute;n&amp;nbsp;tienen que estar todos presentes. Esto es un resabio de como se ense&amp;ntilde;aba en las universidades que comenzaron a aparecer en la Edad Media: como no hab&amp;iacute;a libros, el papel no exist&amp;iacute;a o era caro y los profesores escasos, la &amp;uacute;nica forma de ense&amp;ntilde;ar era presencial: juntar un grupo que ten&amp;iacute;a que escuchar a un profesor mientras daba un tema. En aquellos a&amp;ntilde;os incluso&amp;nbsp;se estudiaba para&amp;nbsp;ejercitar la memoria ante la escasez de elementos para tomar apuntes.&lt;/p&gt;
&lt;p&gt;Pasaron los siglos y veo seguimos con el mismo esquema. Algunos problemas derivados de esto:&lt;/p&gt;
&lt;p&gt;- Cada asistente tiene que venir, a cada clase. Si llueve, si est&amp;aacute; complicado en el trabajo, si se enferma, por lo que fuera se pierde una clase que en generle al es irrecuperable presencialmente. Tiene que estar disponible cada d&amp;iacute;a al horario en que se dicta el curso, por varias semanas a veces. Y si un d&amp;iacute;a se le complica asistir lo m&amp;aacute;s probable es que falte o que llegue tarde y no pueda aprovechar bien la clase.&lt;/p&gt;
&lt;p&gt;- Cada asistente mismo tiene que estar con el &amp;aacute;nimo m&amp;aacute;s despierto, durante varias horas, para captar todo lo que se dicta en el curso.&lt;/p&gt;
&lt;p&gt;- Como un curso presencial implica asignar recursos escasos, como lugar, proyector o m&amp;aacute;quinas, sala, etc., entonces cada clase dura por lo menos 3 horas durante las cuales o se dan demasiados temas, de tal forma que no hay tiempo de asimilar, o se dan pocos y el curso se encarece por durar m&amp;aacute;s tiempo.&lt;/p&gt;
&lt;p&gt;- El instructor tiene que explicar algo que ya explic&amp;oacute;, probablemente, cuarenta veces.&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;Como los asistentes, el instructor tambi&amp;eacute;n tiene que estar con todas las luces, explicar de forma clara y tener todas las neuronas prendidas en cada clase, que se repite y repite a lo largo del a&amp;ntilde;o.&lt;/p&gt;
&lt;p&gt;- No siempre el lugar de dictado es el adecuado: o no est&amp;aacute; cerca o no tiene todos los elementos en condiciones.&lt;/p&gt;
&lt;p&gt;- No todos los asistentes tienen el mismo nivel de conocimientos inicial con lo que no todos van aprovechando el contenido de la misma forma.&lt;/p&gt;
&lt;p&gt;- Si trabajan con m&amp;aacute;quina, el curso se alarga. Se necesita&amp;nbsp;m&amp;aacute;s tiempo para corregir ejemplos en cada m&amp;aacute;quina. Tambi&amp;eacute;n pasa que&amp;nbsp;algunos asistentes terminan antes y otros quedan trabados. Coordinar las distintas velocidades es dif&amp;iacute;cil de manejar. Muchas veces sugiero trabajar de a grupos, con poco &amp;eacute;xito. Pasa cuando los asistentes son particulares que no se conocen entre s&amp;iacute; y hay una m&amp;aacute;quina por persona: la gente prefiere encarar por su cuenta, en solitario, cada ejercicio. Esto trae como consecuencia que&amp;nbsp;la clase se alarga. O hay que alargar&amp;nbsp;el curso completo, con el consiguiente aumento del costo final.&lt;/p&gt;
&lt;p&gt;- Aun teniendo pr&amp;aacute;ctica para captar un tema, un asistente puede necesitar su tiempo para entenderlo. Necesita practicar y jugar con un ejercicio un tiempo. No siempre es posible disponer de ese tiempo: muchas veces porque hay que seguir con otro tema. &lt;/p&gt;
&lt;p&gt;- Si no trabajan con m&amp;aacute;quina, muchas veces los asistentes no se toman el tiempo para practicar. Hay varias razones: est&amp;aacute;n tomando el curso en el trabajo pero no tienen m&amp;aacute;quina adecuada para practicar. O est&amp;aacute;n tapados de trabajo y no tienen tiempo. O sus jefes no les asignan tiempo para practicar. O podr&amp;iacute;an practicar en una m&amp;aacute;quina personal, al volver a casa, pero ah&amp;iacute; tambi&amp;eacute;n: hay otros temas de que ocuparse. Me ha pasado dejar ejercicio a un curso y que de los veinte integrantes s&amp;oacute;lo uno o dos practic&amp;oacute; algo entre dos clases. Cuando esto se repite, a lo largo de las clases, llega un momento que el contenido que se trata no se asimila porque no se practic&amp;oacute; lo anterior. Llegados a ese punto, sin pr&amp;aacute;ctica de lo ya tratado&amp;nbsp;es dif&amp;iacute;cil captar todas las facetas del contenido nuevo. Tambi&amp;eacute;n a algunos asistentes se les complica instalar todo lo que necesitan para practicar. Una vez, recuerdo, puse un ejercicio entre clases en un curso de cuarenta personas. Lo&amp;nbsp;escrib&amp;iacute;&amp;nbsp;mal planteado a prop&amp;oacute;sito. A la siguiente clase, solo uno de los asistentes se dio cuenta del problema: era el &amp;uacute;nico que lo hab&amp;iacute;a encarado.&lt;/p&gt;
&lt;p&gt;- El lugar de dictado puede estar a varios kil&amp;oacute;metros de donde un asistente vive y trabaja.&lt;/p&gt;
&lt;p&gt;- Si el curso es en el propio trabajo,&amp;nbsp;un asistente puede sufrir interrupciones, o por tener un tema &amp;quot;urgente&amp;quot; para solucionar, debe abandonar&amp;nbsp;la clase.&lt;/p&gt;
&lt;p&gt;- Si el curso es en el trabajo, pero despu&amp;eacute;s o antes de hora de oficina, a muchos no les es f&amp;aacute;cil participar por tener otras actividades o no poder llegar m&amp;aacute;s temprano.&lt;/p&gt;
&lt;p&gt;- De vez en cuando me pasa que algunos asistentes no tienen mucha motivaci&amp;oacute;n para hacer el curso: los &amp;ldquo;mandaron&amp;rdquo; al curso y no tienen un soporte, un apoyo, de parte de sus empleadores, para sacar provecho del mismo (especulo, pero eso puede ser tambi&amp;eacute;n un &amp;ldquo;test de proactividad&amp;rdquo; de su empleador o contratante).&lt;/p&gt;
&lt;p&gt;- Otras veces, el asistente est&amp;aacute; motivado porque necesita trabajar pero hace tiempo que no toma un curso. Las tecnolog&amp;iacute;as nuevas lo sobrepasan y termina&amp;nbsp;necesitando de m&amp;aacute;s tiempo para aprovechar el contenido.&lt;/p&gt;
&lt;p&gt;- Si el curso es por cuenta de cada integrante, no lo paga una empresa, entonces&amp;nbsp;probablemente tenga que asistir despu&amp;eacute;s de hora un d&amp;iacute;a de semana&amp;nbsp;o un s&amp;aacute;bado. En esos horarios tambi&amp;eacute;n tendr&amp;aacute; que pelear su tiempo con otras actividades, familiares, o de estudio formal.&lt;/p&gt;
&lt;p&gt;- El temario es introductorio para un lenguaje de programaci&amp;oacute;n, pero no se ense&amp;ntilde;a a programa. Se pide expl&amp;iacute;citamente que se conozca de programar y de base de datos. Y algunos asistentes no tienen esos conocimientos en firme.&lt;/p&gt;
&lt;p&gt;- Otro caso es cuando el temario es intermedio o avanzado.&amp;nbsp; Puede pasar que de los que asisten, algunos ya saben varios puntos del temario y se aburren. Mientras, otros necesitan repasar o incluso aprender un tema, porque no llegan al nivel que se necesita para el curso. Esto pasa cuando los cursos son para asistentes de distintas empresas o que se inscriben por su cuenta.&lt;/p&gt;
&lt;p&gt;- Cuando el temario lo arma una empresa, el que arma el temario pide todos los temas habidos y por haber, pero luego no se asigna tiempo para que los asistentes practiquen en el medio del trabajo de cada d&amp;iacute;a.&lt;/p&gt;
&lt;p&gt;- Pr&amp;aacute;cticamente todo el material que doy queda disponible en mi sitio personal. A la quinta o sexta clase del curso, alguien se acerca y me pregunta: &amp;iquest;d&amp;oacute;nde puedo bajar los ejemplos? Yo me pregunto entonces: &amp;iquest;c&amp;oacute;mo hizo para seguir las anteriores clases, si nunca repas&amp;oacute; los ejemplos que YA se dieron? Detecto ac&amp;aacute; que no han tenido tiempo para practicar entre clases.&lt;/p&gt;
&lt;p&gt;Y en mi caso en particular, muchas veces los cursos no se abren por falta de inscriptos: se necesita un n&amp;uacute;mero m&amp;iacute;nimo para costear los activos inmovilizados (proyector, m&amp;aacute;quinas si es con pr&amp;aacute;ctica, lugar, instructor) que no siempre se cubre. Tambi&amp;eacute;n me pasa armar una lista de correo para los asistentes del&amp;nbsp;curso (por ejemplo, en los m&amp;iacute;os de Java) . Luego de dos a&amp;ntilde;os, les cuento que solo cuatro personas, entre decenas que asistieron,&amp;nbsp;se inscribieron para hacer m&amp;aacute;s preguntas.&lt;/p&gt;
&lt;p&gt;No quisiera afirmar que siempre es as&amp;iacute; como describo arriba. Pero me asombra la cantidad de veces que algunos de esos &amp;ldquo;anti-patrones&amp;rdquo; aparecen, por lo menos, en muchos de los cursos que me ha tocado dictar. As&amp;iacute; que pienso, desde hace alg&amp;uacute;n tiempo, que debo mejorar en algunos temas. O motivar m&amp;aacute;s, o hacer algo para que estos anti-patrones no aparezcan tan frecuentemente. Una sorpresa agradable: los cursos de Scrum son los m&amp;aacute;s participativos de todos: son casos&amp;nbsp;donde pr&amp;aacute;cticamente no pr&amp;aacute;cticamente no aparecen estos &amp;ldquo;issues&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Y un tema, disculpen, m&amp;aacute;s personal: otra &amp;ldquo;constante&amp;rdquo; que detecto. Ante un curso de cuarenta personas, pregunto cu&amp;aacute;ntos conocen mi blog.&amp;nbsp;S&amp;oacute;lo uno levanta la mano. Pasan las semanas, y al final del curso, despu&amp;eacute;s de dos meses, pregunto de nuevo. Y ahora, son 1 o 2 las manos levantadas. As&amp;iacute; que algo tengo que hacer: o mejorar los contenidos o escribir m&amp;aacute;s claro o de temas que les interesen m&amp;aacute;s. Muchas veces escribo para que lo explicado quede m&amp;aacute;s claro. Si algo no se entiende en una clase presencial, quisiera que&amp;nbsp;se pueda leer y releer por ac&amp;aacute;. Pero veo que he tenido poca llegada en ese tema, por lo menos en los asistentes a mis cursos presenciales.&lt;/p&gt;
&lt;p&gt;Pero tambi&amp;eacute;n detecto y especulo un patr&amp;oacute;n: los que programan y no leen blogs (m&amp;iacute;o o de cualquiera), en general,&amp;nbsp;no se mantienen actualizados y necesitan cursos presenciales. Los que programan y leen blogs son otro grupo: se mantienen actualizados y no necesitan cursos presenciales, apenas algunas charlas introductorias como primeros pasos en un tema. Luego, ellos mismos aprenden de una nueva tecnolog&amp;iacute;a, patr&amp;oacute;n, estilo arquitect&amp;oacute;nico o herramienta.&lt;/p&gt;
&lt;p&gt;Habiendo repasado estos puntos, &amp;iquest;c&amp;oacute;mo se podr&amp;iacute;a mejorar? Tengo algunas ideas al respecto, tomadas de otros &amp;aacute;mbitos, y de lo que veo que puede funcionar, pero son temas para seguir en la segunda parte de este post. Mientras tanto: &amp;iquest;tienen alguna sugerencia?&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1733324" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Microsoft MVP (Most Valuable Professional) otro año más, y el futuro del software</title><link>http://msmvps.com/blogs/lopez/archive/2009/10/10/microsoft-mvp-most-valuable-professional-otro-a-241-o-m-225-s-y-el-futuro-del-software.aspx</link><pubDate>Sat, 10 Oct 2009 14:36:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1731375</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1731375</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/10/10/microsoft-mvp-most-valuable-professional-otro-a-241-o-m-225-s-y-el-futuro-del-software.aspx#comments</comments><description>&lt;p&gt;&lt;img align="left" src="http://www.todocontenidos.com/images/articles/past-present-future.jpg" style="display:inline;margin:0px 20px 20px 0px;" alt="" /&gt; El pasado 1ro. de Octubre, me confirmaron que nuevamente, en este a&amp;ntilde;o que sigue, soy Microsoft MVP. Pueden ver detalles del programa en:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mvp.support.microsoft.com/" title="http://mvp.support.microsoft.com/"&gt;http://mvp.support.microsoft.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Quiero agradecer a N&amp;eacute;stor Portillo (&lt;a target="_blank" href="http://twitter.com/nportillo"&gt;@nportillo&lt;/a&gt;) y &lt;a target="_blank" href="http://blogs.msdn.com/mvplead/"&gt;Fernando Garc&amp;iacute;a Loera&lt;/a&gt; (&lt;a target="_blank" href="http://twitter.com/ferglo"&gt;@ferglo&lt;/a&gt;) por su apoyo en todos estos a&amp;ntilde;os. Tambi&amp;eacute;n, a Carlos &amp;ldquo;Billy&amp;rdquo; Reynoso, quien&amp;nbsp;me propuso como MVP en 2002 (vio la luz!! :-), luego de haberme convocado tambi&amp;eacute;n en los 90 para participar de charlas y reuniones. Y a la gente del Microsoft User Group, del que participo desde hace casi 15 a&amp;ntilde;os, por el constante trabajo para armar una comunidad en la que podemos participar todos.&lt;/p&gt;
&lt;p&gt;Me gustar&amp;iacute;a que otras empresas tuvieran un programa similar a los Microsoft MVPs. No s&amp;eacute; si hay programas como &amp;eacute;ste en Oracle/Sun, IBM. En Argentina, la empresa que m&amp;aacute;s se ha preocupado (con altibajos, hay que reconocer) ha sido Microsoft. Recuerdo los tiempos de Sun lanzando Java por estos lares, en los noventa. Estaba m&amp;aacute;s preocupada por captar periodistas que a programadores. Si alguna vez me invitaron a una charla en los noventa, fue porque escrib&amp;iacute;a para una revista, sino, ni enterados la gente de Sun de que hay programadores de este lado del ecuador.&lt;/p&gt;
&lt;p&gt;Recuerdo mis primeros contactos con la tecnolog&amp;iacute;a Microsoft, al leer la Dr.Dobb&amp;rsquo;s Journal, donde se comentaban algunos productos.&amp;nbsp;&amp;iquest;Recuerdan Lattice C? Microsoft lo compr&amp;oacute; para ser su primer Microsoft C. &amp;iquest;Alguien recuerda el Lisp de Microsoft? Creo que se lo hab&amp;iacute;an comprado a una c&amp;iacute;a de Haway. Conoc&amp;iacute; m&amp;aacute;s de la historia de esos tiempos en varios libros; en especial,&amp;nbsp;recuerdo &amp;ldquo;&lt;a target="_blank" href="http://www.amazon.com/Fire-Valley-Making-Personal-Computer/dp/0071358927"&gt;Fire in the Valley&lt;/a&gt;&amp;rdquo;. Tambi&amp;eacute;n ah&amp;iacute; aprend&amp;iacute; de Apple, MITS y dem&amp;aacute;s pioneros en la microcomputaci&amp;oacute;n. En esos tiempos, hab&amp;iacute;a multitud de &amp;ldquo;computadoras personales&amp;rdquo;,&amp;nbsp;con distintos sistemas operativos y lenguajes. En muchas de ellas, Microsoft ten&amp;iacute;a software para ofrecer. Pero todos conocemos que el mercado despeg&amp;oacute; con la llegada de la IBM PC. Recuerdo que para editar con el edlin, booteaba con un diskette, lo retiraba, y pon&amp;iacute;a el segundo, porque ah&amp;iacute; estaba el editor de l&amp;iacute;nea. Como dir&amp;iacute;a Olmedo: &amp;ldquo;&lt;a target="_blank" href="http://www.youtube.com/watch?v=y3RgDknasAs"&gt;Eramos tan pobres&amp;hellip;.&lt;/a&gt; &amp;quot; :-). Si bien lleg&amp;oacute; Apple a mi pa&amp;iacute;s, Argentina, en aquellos a&amp;ntilde;os hab&amp;iacute;a que ser descendiente directo de los que desembarcaron en el Mayflower para poder acceder al programa de desarrollo de aplicaciones de la empresa de la manzanita. Algunos detalles m&amp;aacute;s de esos tiempos, en &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/2008/12/31/treinta-a-241-os-en-desarrollo-de-software.aspx"&gt;Treinta a&amp;ntilde;os en desarrollo de software&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Creo que, como entonces, vivimos tiempos fascinantes en el tema de desarrollo de software. Me gustar&amp;iacute;a escribir ac&amp;aacute; algunos puntos a estudiar, a seguir de cerca, en estos a&amp;ntilde;os que se vienen (espero que para m&amp;iacute;, sean otros treinta a&amp;ntilde;os&amp;hellip; :-)&lt;/p&gt;
&lt;p&gt;Primero, quiero destacar la existencia de dos plataformas de desarrollo: &lt;strong&gt;Java y .NET&lt;/strong&gt;. Entiendo por plataforma de desarrollo a lenguaje(s), librer&amp;iacute;a de clases extensa, soporte de desarrollo de distinto tipos de aplicaciones (desde consola a web a distribuidas). En el 95, comenc&amp;eacute; a conocer Java, y desde entonces, me ha parecido una de las mejores cosas que ha pasado en la historia del desarrollo de software. Con todas las cr&amp;iacute;ticas que se le pueden hacer (EJB una terrible cosa que a&amp;uacute;n me d&amp;aacute; escalofr&amp;iacute;os (antes de acostarme, veo abajo de mi cama a ver si hay alg&amp;uacute;n Entity Bean escondido), Sun como karma, empresa que no supo mover a la comunidad de desarrollo, que en muchos casos se tuvo que arreglar sola (Hibernate como ejemplo?)), Java ha sido lo que hizo que las m&amp;aacute;quinas virtuales, clases y objetos, frameworks, threads, serializaci&amp;oacute;n, modelos de dominio, salieran de lo acad&amp;eacute;mico o del nicho, y pasaran a la corriente principal de desarrollo. Desde fines de los noventa, no he pasado casi una semana, sin dar alg&amp;uacute;n curso o charla sobre Java, y tecnolog&amp;iacute;as asociadas. Es un &amp;ldquo;must be know&amp;rdquo; para cualquier desarrollador de software de este milenio.&lt;/p&gt;
&lt;p&gt;Y Microsoft, vi&amp;oacute; la luz, y se reinvent&amp;oacute; a s&amp;iacute; misma: abandon&amp;oacute; VB, VBScript, ASP, C++ con la infame MFC (Microsoft Foundation Classes), ATL, COM (que nunca despeg&amp;oacute; para multiplataforma, como hubiera querido Don Box, y a&amp;uacute;n Miguel de Icaza con el proyecto Bonobo), y cambi&amp;oacute; como empresa, por lo menos en las herramientas de desarrollo. Parec&amp;iacute;a como si hubiera hecho todo por otra empresa: no m&amp;aacute;s COM como tecnolog&amp;iacute;a&amp;nbsp;necesaria; ten&amp;iacute;amos al fin una m&amp;aacute;quina virtual (un empleado de Microsoft morir&amp;aacute; en la tortura antes de llamar &amp;ldquo;m&amp;aacute;quina virtual&amp;rdquo; al CLR, pero, es lo que es.. :-); pl&amp;eacute;tora de&amp;nbsp;lenguajes nuevos, totalmente montados sobre esa m&amp;aacute;quina virtual. Realmente, es como si hubiera habido otra empresa que cre&amp;oacute; todo eso. Un gran movimiento por parte de Microsoft, que ha sabido adaptarse a los tiempos que le tocan: como ejemplo, recuerden el giro a Internet que di&amp;oacute; la empresa, a finales del 95.&lt;/p&gt;
&lt;p&gt;As&amp;iacute; que tenemos dos temas para seguir con atenci&amp;oacute;n: Java y .NET.&lt;/p&gt;
&lt;p&gt;Otros temas: el desarrollo de aplicaciones, &amp;iquest;d&amp;oacute;nde va? Veo que sigue habiendo aplicaciones de escritorio. Pero preveo que la lucha y la innovaci&amp;oacute;n vendr&amp;aacute;n en otras &amp;aacute;reas (enlaces al final):&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Aplicaciones Web&lt;/strong&gt;: dentro de la empresa, los sistemas de gesti&amp;oacute;n ser&amp;aacute;n migrados a todo web. Si bien la interfaz web no es la mejor, la aparici&amp;oacute;n de Ajax, librer&amp;iacute;as maduras de Javascript, tecnolog&amp;iacute;as en el servidor (ASP.NET, ASP.NET MVC, veremos hacia donde va Java, luego de no haberse adoptado JSF por todo el mundo, Ruby y Python con desarrollo web), hoy no es descabellado ver cada vez m&amp;aacute;s aplicaciones internas, expuestas en el browser.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Rich Internet Applications&lt;/strong&gt;: usar JavaFX, Silverlight, Air, o lo que aparezca. Pero crear aplicaciones, que mediante alg&amp;uacute;n plugin liviano en el cliente, permitan tener la experiencia de usuario del tipo de aplicaciones locales que tenemos ahora.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Software as a Service&lt;/strong&gt;, tanto aplicaciones web (Google Apps) como RIA, el software de gesti&amp;oacute;n y otros tipos, que hoy consumimos localmente, veo que estar&amp;aacute; cada vez m&amp;aacute;s ofertado directamente en la web. Habr&amp;aacute; que ver quienes ser&amp;aacute;n el target: &amp;iquest;las peque&amp;ntilde;as empresas que no tienen un equipo de IT? &amp;iquest;las medianas y grandes, que est&amp;aacute;n cansadas de soportar un equipo de IT y desarrollo semi a a medida?&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Desarrollos Web2.0&lt;/strong&gt;: la interconexi&amp;oacute;n de aplicaciones mediante protocolos livianos (desde REST hasta cualquier otra cosa, olvidando los pesados Web Services, especificaci&amp;oacute;n que veo que se encamina a la over-complexity), modelos pubsub montados sobre Twitter o similares, la aparici&amp;oacute;n de Service Bus online.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Cloud computing&lt;/strong&gt;: lo veo de dos formas: como una forma de virtualizaci&amp;oacute;n as a service, y como una forma de aplicaci&amp;oacute;n escalable hacia afuera. La primera ser&amp;aacute; m&amp;aacute;s f&amp;aacute;cil de programar (es como venimos hasta ahora, pero &amp;ldquo;hosteando&amp;rdquo; en otro lado). Nos ahorramos el setup de la m&amp;aacute;quina, licencias, mantenimiento del equipo. Lo de escalable hacia afuera, m&amp;aacute;s cercano a la idea de &amp;ldquo;cloud&amp;rdquo;, ejecutando en varias m&amp;aacute;quinas, habr&amp;aacute; que estudiar cu&amp;aacute;n de dif&amp;iacute;cil o f&amp;aacute;cil es el cambio de modelo de programaci&amp;oacute;n. Ejemplo: sharding de base de datos, &amp;iquest;ser&amp;aacute; lo suficientemente transparente para como venimos programando?&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Mobile&lt;/strong&gt;: o deber&amp;iacute;a llamarlo, la aparici&amp;oacute;n del software en m&amp;uacute;ltiples dispositivos. Esto es una rama que tenemos que estar atentos. La industria de desarrollo est&amp;aacute; por dar un salto, o ya lo est&amp;aacute; dando: tal vez, el mayor desde la aparici&amp;oacute;n de la computadora personal. La cabeza de playa son los tel&amp;eacute;fonos m&amp;oacute;viles. Pero lo que veo es: sistemas operativos para peque&amp;ntilde;os dispositivos (Android, Windows Mobile) con soporte de desarrollo (Android SDK, .NET Compact Framework), que har&amp;aacute;n que podamos escribir software para casi cualquier cosa, cualquier &amp;ldquo;widget&amp;rdquo; que tengamos (tel&amp;eacute;fonos personales, otros dispositivos, aparatos inteligentes), comunicados por Internet. La convergencia de: dispositivos inteligentes, Internet, herramientas de desarrollo maduras, es &amp;ldquo;the next big frontier&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Lenguajes din&amp;aacute;micos&lt;/strong&gt;: podr&amp;aacute; haber lenguajes aislados (como los originales Ruby y Python) pero veo que cada vez m&amp;aacute;s se montar&amp;aacute;n sobre las dos plataformas, .NET y/o Java. Veremos que pasa con esto: lo que veo, es que tienen comunidades fuertes, que impulsan nuevas cosas, nuevas ideas (o reimplementaciones frescas de otras ideas), que en otros ecosistemas m&amp;aacute;s maduros es dif&amp;iacute;cil de que prendan. Recordemos Ruby On Rails como un ejemplo.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Web Sem&amp;aacute;ntica&lt;/strong&gt;: ah&amp;iacute; afuera hay un mundo de informaci&amp;oacute;n, que por primera vez est&amp;aacute; disponible, no s&amp;oacute;lo para seres humanos, sino para nuestras aplicaciones. La aparici&amp;oacute;n de formas de aprovechar inteligentemente esta monta&amp;ntilde;a(cordillera dir&amp;iacute;a) de informaci&amp;oacute;n, es un camino que veremos donde llega. Las iniciativas de web sem&amp;aacute;ntica son lo m&amp;aacute;s promisorio. Pero tambi&amp;eacute;n puede que &amp;ldquo;la liebre salte por otro lado&amp;rdquo;: desarrollos aislados, que encuentren una forma de comunicarse o de aprovechar lo existente.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Aplicaciones distribuidas&lt;/strong&gt;: los que leen mi blog (yo, y mi t&amp;iacute;a Carlota), saben de mi inter&amp;eacute;s en aplicaciones distribuidas. Habr&amp;aacute; que seguir de cerca el tema message passing, o el m&amp;aacute;s prometedor y flexible, agentes. Multithreading, multicore, son simplemente una antesala a Multimachine. Ese es el camino a al escalabilidad, y superar el bloque de la Ley de Moore: multicore est&amp;aacute; bien, pero multimachine is the solution (preg&amp;uacute;ntele a Google). Sharding de base de datos, escalabilidad, datos y objetos en memoria distribuida en m&amp;aacute;quinas (m&amp;aacute;s barata y r&amp;aacute;pida que los discos).&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Memoria&lt;/strong&gt;: El &amp;uacute;ltimo p&amp;aacute;rrafo me trae a cuento esto que siempre nombro: el uso intensivo de memoria. La memoria cada vez es m&amp;aacute;s barata, y m&amp;aacute;s accesible. Pensemos en qu&amp;eacute; tipo de aplicaciones podemos lograr. Me imagino una base de objetos o de datos, totalmente en memoria, en m&amp;aacute;quinas distribuidas, donde el file system sea solamente otra forma de backup.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Concurrencia y Paralelismo&lt;/strong&gt;: un tema a estudiar. Vean lo que va surgiendo con Clojure, Software Transactional Memory, hasta NetLogo. Ver&amp;iacute;a de cerca paralelismo distribuido, como MapReduce, High Performance Computing, y alrededores.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Lenguajes funcionales&lt;/strong&gt;: recuerdo APL, pero no con cari&amp;ntilde;o. Pero vean el surgimiento de Erlang, la forma en que se us&amp;oacute; para el desarrollo de aplicaciones, el &amp;ldquo;revival&amp;rdquo; de Lisp con Clojure y c&amp;iacute;a, F# por parte de Microsoft, Haskell, algo mixto con Scala en Java. Sumar&amp;iacute;a a los declarativos, como Prolog. &amp;iquest;Ser&amp;aacute; el siglo del lambda? Para m&amp;iacute;, es hermoso que esos temas vuelvan a estar en el tapete. Todo desarrollador de software deber&amp;iacute;a sumergirse en estos temas, en lo que podr&amp;iacute;a llamar, los lenguajes de los dioses.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Modelos de aplicaciones&lt;/strong&gt;: las aplicaciones cada vez son m&amp;aacute;s complejas. Encarar el desarrollo basado pr&amp;aacute;cticamente en lenguajes de tercera generaci&amp;oacute;n, sin haber elevado el nivel de abstracci&amp;oacute;n, con tecnolog&amp;iacute;as de base que van cambiando a&amp;ntilde;o a a&amp;ntilde;o, mes a mes, es un camino lleno de piedras y espinas. Yo apuesto a la aparici&amp;oacute;n de modelos, Domain Specific Models, Domain Specific Languages, herramientas relacionadas (el camino m&amp;aacute;s cercano es la generaci&amp;oacute;n de c&amp;oacute;digo), para hacer m&amp;aacute;s f&amp;aacute;cil el domino de la complejidad y el cambio.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Desarrollo &amp;aacute;gil&lt;/strong&gt;: en los tiempos que corren, el trabajo en equipo es indispensable. La cantidad de tecnolog&amp;iacute;as, detalles, y requerimientos que precisa un software m&amp;aacute;s o menos normal, implican que va desapareciendo el desarrollador de garage, en solitario. Las limitaciones de desarrollo en cascadas, el cambio en los requerimientos, porque hasta el ambiente externo cambia, &amp;eacute;xitos cosechados por el programaci&amp;oacute;n extrema y disciplinas relacionadas, todo apunta a que tenemos que ir adoptando m&amp;aacute;s y m&amp;aacute;s el modo &amp;aacute;gil de construir software. &lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Inteligencia Artificial&lt;/strong&gt;: como dec&amp;iacute;a m&amp;aacute;s arriba, es tiempo de que agentes. Incorporar l&amp;oacute;gica, razonamiento, modelos del mundo, inferencias, objetivos, ontolog&amp;iacute;as, algoritmos gen&amp;eacute;ticos, redes neuronales, en todo lo que se viene.&lt;/p&gt;
&lt;p&gt;(ahora entender&amp;aacute;n un poco m&amp;aacute;s, a que van los c&amp;oacute;digos de c&amp;oacute;digo abierto que publico, como una especie de ejercicio personal para entrenarme en varios de los puntos de arriba).&lt;/p&gt;
&lt;p&gt;No he dejado enlaces en el texto, pero muchos de estos temas, como ver&amp;aacute;n, me interesan desde hace un tiempo, y estos son enlaces que he coleccionado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://delicious.com/ajlopez/distributedcomputing"&gt;http://delicious.com/ajlopez/distributedcomputing&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/artificialintelligence"&gt;http://delicious.com/ajlopez/artificialintelligence&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/agile"&gt;http://delicious.com/ajlopez/agile&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/codegeneration"&gt;http://delicious.com/ajlopez/codegeneration&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dsl"&gt;http://delicious.com/ajlopez/dsl&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dsm"&gt;http://delicious.com/ajlopez/dsm&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/functionalprogramming"&gt;http://delicious.com/ajlopez/functionalprogramming&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/cloudcomputing"&gt;http://delicious.com/ajlopez/cloudcomputing&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/mobile"&gt;http://delicious.com/ajlopez/mobile&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/saas"&gt;http://delicious.com/ajlopez/saas&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/ria"&gt;http://delicious.com/ajlopez/ria&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dynamiclanguages"&gt;http://delicious.com/ajlopez/dynamiclanguages&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/semanticweb"&gt;http://delicious.com/ajlopez/semanticweb&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/hadoop"&gt;http://delicious.com/ajlopez/hadoop&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/lisp"&gt;http://delicious.com/ajlopez/lisp&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/clojure"&gt;http://delicious.com/ajlopez/clojure&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/messaging"&gt;http://delicious.com/ajlopez/messaging&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/esb"&gt;http://delicious.com/ajlopez/esb&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/scala"&gt;http://delicious.com/ajlopez/scala&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/concurrency"&gt;http://delicious.com/ajlopez/concurrency&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/parallel"&gt;http://delicious.com/ajlopez/parallel&lt;/a&gt; &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/stm"&gt;http://delicious.com/ajlopez/stm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tendr&amp;iacute;a m&amp;aacute;s para comentar, pero es hora de tomar mi medicaci&amp;oacute;n&amp;hellip;:-)&amp;hellip; S&amp;iacute;, ya s&amp;eacute;, es la pastilla roja, no la verde.&lt;/p&gt;
&lt;p&gt;Me parece suficiente para este post, &amp;iquest;no les parece?&lt;/p&gt;
&lt;p&gt;Lo que quer&amp;iacute;a trasmitirles, es que aprovechen este tiempo. Hace treinta a&amp;ntilde;os, yo no ten&amp;iacute;a todo esto disponible: comunicaci&amp;oacute;n instant&amp;aacute;nea, acceso a recursos a un costo razonable, contacto con la comunidad, herramientas maduras, ideas bullendo. Y ahora est&amp;aacute; todo ac&amp;aacute;, servido para la pr&amp;oacute;xima revoluci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Muchas de estas ideas, las comento en mis cursos, aunque no s&amp;eacute; cu&amp;aacute;n bien pude trasmitirlas, o si se entendi&amp;oacute; algo del mensaje. Siempre veo que la gente pide cursos de un tema en particular, me gustar&amp;iacute;a en este post (como en otros anteriores) haber dado una visi&amp;oacute;n m&amp;aacute;s amplia de lo que hay en el mundo del desarrollo de software, hoy, y que sirva de ensayo futurol&amp;oacute;gico, sin mayores pretensiones, de lo que puede venir como importante.&lt;/p&gt;
&lt;p&gt;De alguna forma, en estos a&amp;ntilde;os, se decidir&amp;aacute; el tipo de software que se ejecutar&amp;aacute; en las pr&amp;oacute;ximas dos d&amp;eacute;cadas. Y como en las anteriores, el software seguir&amp;aacute; cambiando la historia humana.&lt;/p&gt;
&lt;p&gt;Pero el software no se hace solo. Como dec&amp;iacute;a Alan Kay: &amp;ldquo;la mejor forma de predecir el futuro, es invent&amp;aacute;ndolo&amp;rdquo;. Sean parte de todo esto.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1731375" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Historia+de+la+Computaci_26002300_243_3B00_n/default.aspx">Historia de la Computaci&amp;#243;n</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Agil/default.aspx">Desarrollo Agil</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+Web/default.aspx">Desarrollo Web</category></item><item><title>VAN (Reunión Virtual) en ALT.NET Hispano sobre Generación de Código</title><link>http://msmvps.com/blogs/lopez/archive/2009/09/25/van-reuni-243-n-virtual-en-alt-net-hispano-sobre-generaci-243-n-de-c-243-digo.aspx</link><pubDate>Fri, 25 Sep 2009 09:32:16 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1726628</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1726628</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/09/25/van-reuni-243-n-virtual-en-alt-net-hispano-sobre-generaci-243-n-de-c-243-digo.aspx#comments</comments><description>&lt;p&gt;Gracias a la comunidad de ALT.NET Hispano, mañana sábado 26 de septiembre, participaré de una VAN (Reunión virtual) sobre generación de código (hora internacional 6PM GMT, son15hs Buenos Aires). La idea es que al principio presente algunas ideas, ejemplos de AjGenesis, panorama de generación de código, comentar otras herramientas y aproximaciones, pros y contras,&amp;#160; y luego, se discutan los temas, entre todos.&lt;/p&gt;  &lt;p&gt;Quisiera presentar:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Los por qué de la generación del código&lt;/li&gt;    &lt;li&gt;Qué pedirle a una herramienta de generación de código&lt;/li&gt;    &lt;li&gt;Elevar el nivel de abstracción, partiendo de un modelo&lt;/li&gt;    &lt;li&gt;Resolviendo paso a paso, la aplicación más simple&lt;/li&gt;    &lt;li&gt;Mostrar que es más que templates/plantillas&lt;/li&gt;    &lt;li&gt;Resolver una aplicación con entidades, desde el mismo modelo, en distintas tecnologías y plataformas (Java, .NET, PHP)&lt;/li&gt;    &lt;li&gt;Generación de código como servicio en línea&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Si no conocen qué es una reunión VAN, pueden consultar &lt;a href="http://www.zachariahyoung.com/zy/post/2009/01/Introduction-to-Virtual-ALTNET.aspx"&gt;VAN meetings&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para ver cómo se desarrolla una VAN de ALT.NET Hispano, y qué software necesitan para asistir, ver &lt;a href="http://altnet-hispano.pbworks.com/Descripcion-de-Reuniones-VAN"&gt;Descripcion-de-Reuniones-VAN&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Pueden ver &lt;a href="http://altnet-hispano.pbworks.com/Historial-de-reuniones"&gt;el historial de anteriores reuniones VAN&lt;/a&gt; (visiten las que dieron, por ejemplo, sobre NHibernate, WPF y demás)(ya había participado de &lt;a href="http://msmvps.com/blogs/lopez/archive/2009/09/18/resultado-de-la-van-en-alt-net-hispano-sobre-scrum.aspx" target="_blank"&gt;VAN sobre Scrum&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Gracias al bueno de &lt;a href="http://geeks.ms/blogs/jgamba" target="_blank"&gt;Jorge Gamba&lt;/a&gt; (&lt;a href="http://twitter.com/jorgegamba" target="_blank"&gt;@jorgegamba&lt;/a&gt;) que publicó el evento en su blog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/jgamba/archive/2009/09/24/van-hispano-2009-09-26-generacion-de-codigo.aspx" target="_blank"&gt;[Evento] Viendo la luz respecto a “Generación de Código”&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Copio de ahí:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;La comunidad &lt;a href="http://altnethispano.org"&gt;ALT.NET Hispano&lt;/a&gt; realizará un evento virtual con el tema &lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Generación de Código&lt;/a&gt;, con la exposición principal del reconocido especialista y maestro en desarrollo de software &lt;a href="http://www.ajlopez.com/"&gt;Angel “Java” Lopez&lt;/a&gt;. Será el día sábado 26 de septiembre a la hora internacional 18:00 GMT/GTU (Greenwich), con una duración aproximada de 2 horas. Para atender la reunión deben usar el programa &lt;a href="http://office.microsoft.com/en-us/help/HA101733831033.aspx"&gt;Microsoft Office Live Meeting 2007 client&lt;/a&gt;, abriendo el enlace &lt;a href="http://snipr.com/virtualaltnet"&gt;http://snipr.com/virtualaltnet&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Adicionalmente, pueden plantear sus comentarios e inquietudes sobre el tema de la reunión en la discusión &lt;a href="http://groups.google.com/group/altnet-hispano/browse_thread/thread/47667d4fc07235b4"&gt;Invitación a VAN Hispano Sábado 26 de septiembre - &amp;quot;Generación de código&amp;quot; con Angel &amp;quot;Java&amp;quot; Lopez&lt;/a&gt;, en nuestra &lt;a href="http://groups.google.com/group/altnet-hispano/"&gt;lista de correo&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;La comunidad ALT.NET hispano está muy activa, y los invito a participar de ella. Jorge escribe:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;les dejo la lista de recursos compartidos de los que disponemos en la comunidad:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://groups.google.com/group/altnet-hispano"&gt;Lista de Correo del Grupo de Usuarios&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://altnet-hispano.pbworks.com/"&gt;Wiki&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://twitter.com/AltNetHispano"&gt;Twitter&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://bit.ly/bLoe4"&gt;Facebook&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.viddler.com/explore/AltNet-Hispano/videos/"&gt;viddler&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://altnet-hispano.pbworks.com/Mapa"&gt;Mapa de ubicación geográfica&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.google.com/calendar/embed?src=fpf8r6u1n4f0hd2p50t0mcoa28%40group.calendar.google.com"&gt;Calendario de eventos&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;Como comenta Jorge, pueden ir leyendo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Sobre la generación de código&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/08/25/diez-reglas-principales-en-generaci-243-n-de-c-243-digo.aspx"&gt;Diez reglas principales en generación de código&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2009/07/22/la-generaci-243-n-de-c-243-digo-y-el-trabajo-de-desarrollo-de-software.aspx"&gt;La generación de código y el trabajo de desarrollo de software&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1726628" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Enlaces y noticias III</title><link>http://msmvps.com/blogs/lopez/archive/2009/07/11/enlaces-y-noticias-iii.aspx</link><pubDate>Sat, 11 Jul 2009 17:54:44 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1699597</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1699597</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/07/11/enlaces-y-noticias-iii.aspx#comments</comments><description>&lt;p&gt;Ya hace unos meses había escrito&lt;/p&gt;  &lt;p&gt;&lt;a title="Enlaces y noticias - Angel Java Lopez" href="http://msmvps.com/blogs/lopez/archive/2008/07/24/enlaces-y-noticias.aspx"&gt;Enlaces y noticias - Angel Java Lopez&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Noticias y enlaces II - Angel Java Lopez" href="http://msmvps.com/blogs/lopez/archive/2008/09/18/noticias-y-enlaces-ii.aspx"&gt;Noticias y enlaces II - Angel Java Lopez&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Vuelvo a la carga con algunos enlaces y noticias, de temas que me interesaron en estos días.&lt;/p&gt;  &lt;h3&gt;Java&lt;/h3&gt;  &lt;p&gt;Ya tienen algunos años: &lt;a title="Java BluePrints- Guidelines, patterns, and code for end-to-end applications" href="http://java.sun.com/reference/blueprints/"&gt;Java BluePrints- Guidelines, patterns, and code for end-to-end applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Protect Your Java Code - Through Obfuscators and Beyond" href="http://www.excelsior-usa.com/articles/java-obfuscators.html"&gt;Protect Your Java Code - Through Obfuscators and Beyond&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un inicio en JavaFX &lt;a title="A Taste of JavaFX for the Uninitiated" href="http://www.devx.com/Java/HTML/42278"&gt;A Taste of JavaFX for the Uninitiated&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Sahoo&amp;#39;s Blog- Developing Hybrid (OSGi + Java EE) applications in GlassFish" href="http://weblogs.java.net/blog/ss141213/archive/2009/06/developing_hybr.html"&gt;Sahoo&amp;#39;s Blog- Developing Hybrid (OSGi + Java EE) applications in GlassFish&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una interesante y bien presentada aplicación de Java para resolver el puzzle Eternity II &lt;a title="Martin Hapl - Eternity II" href="http://hapl.net/eternity-ii"&gt;Martin Hapl - Eternity II&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Quieren generar bytecodes de Java? &lt;a title="ASM - Home Page" href="http://asm.ow2.org/"&gt;ASM - Home Page&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Distributed Programming in Java" href="http://jan.newmarch.name/distjava/"&gt;Distributed Programming in Java&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y video de JBoss Business Rules Management:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:18071c18-9f08-4a62-b639-05f9fa4f5835" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Además:&lt;/p&gt;  &lt;p&gt;&lt;a title="J2ME and Location-Based Services" href="http://developers.sun.com/mobility/apis/articles/location/"&gt;J2ME and Location-Based Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Maven - Maven in 5 Minutes" href="http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html"&gt;Maven - Maven in 5 Minutes&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="An introduction to Maven 2 - JavaWorld" href="http://www.javaworld.com/javaworld/jw-12-2005/jw-1205-maven.html"&gt;An introduction to Maven 2 – JavaWorld&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Blog con artículos de Java, JDBC, JSP, JSF &lt;a title="The BalusC Code" href="http://balusc.blogspot.com/"&gt;The BalusC Code&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Encontré esta grilla &lt;a title="I N F I N I S P A N - Open Source Data Grids - JBoss Community" href="http://www.jboss.org/infinispan"&gt;I N F I N I S P A N - Open Source Data Grids - JBoss Community&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Como siempre, más enlaces en &lt;a href="http://delicious.com/ajlopez/java"&gt;http://delicious.com/ajlopez/java&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Clojure&lt;/h3&gt;  &lt;p&gt;Estoy trabajando para entender la implementación de Clojure, escribiendo AjClojure, Pueden ver mis avances en:&lt;/p&gt;  &lt;p&gt;Mientras, aperitivos:&lt;/p&gt;  &lt;p&gt;&lt;a title="InfoQ- Rich Hickey on Clojure&amp;#39;s Features and Implementation" href="http://www.infoq.com/interviews/hickey-clojure"&gt;InfoQ- Rich Hickey on Clojure&amp;#39;s Features and Implementation&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Scala&lt;/h3&gt;  &lt;p&gt;Tengo que estudiar en detalle Scala, algunos enlaces:&lt;/p&gt;  &lt;p&gt;&lt;a target="_blank"&gt;Scala as the long term replacement for java/javac?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Home - Parleys - Parleys.com - The Feel of Scala" href="http://www.parleys.com/display/PARLEYS/Home#slide=7;talk=27131945;title=The%20Feel%20Of%20Scala"&gt;Home - Parleys - Parleys.com - The Feel of Scala&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="The busy Java developer&amp;#39;s guide to Scala- Class action" href="http://www.ibm.com/developerworks/java/library/j-scala02198.html?ca=drs-"&gt;The busy Java developer&amp;#39;s guide to Scala- Class action&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Más en &lt;a href="http://delicious.com/ajlopez/scala"&gt;http://delicious.com/ajlopez/scala&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Bueno, espero que se entretengan…. :-)&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez    &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1699597" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Clojure/default.aspx">Clojure</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Scala/default.aspx">Scala</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Enlaces+y+Noticias/default.aspx">Enlaces y Noticias</category></item><item><title>El mejor lenguaje, la mejor herramienta</title><link>http://msmvps.com/blogs/lopez/archive/2009/07/09/el-mejor-lenguaje-la-mejor-herramienta.aspx</link><pubDate>Thu, 09 Jul 2009 15:17:36 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1699015</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1699015</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/07/09/el-mejor-lenguaje-la-mejor-herramienta.aspx#comments</comments><description>&lt;p&gt;Ayer escribía sobre la popularidad de los lenguajes de programación:&lt;/p&gt;  &lt;p&gt;&lt;a title="Popularidad de Lenguajes de Programación" href="http://msmvps.com/blogs/lopez/archive/2009/07/08/popularidad-de-lenguajes-de-programaci-243-n.aspx"&gt;Popularidad de Lenguajes de Programación&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Justo ayer, también, &lt;a href="http://www.todocontenidos.com/images/articles/language01.png" target="_blank"&gt;@ebersys&lt;/a&gt; escribía en Twitter:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/language01.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;El bueno de Eber Irigoyen es miembro activo de Alt.NET hispano:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/language02.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;Vive en Salt Lake city, Utah, visiten su blog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ebersysesp.blogspot.com/" target="_blank"&gt;Que quieres desarrollar hoy?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Yo disiento con eso de “el mejor lenguaje es el que conoces mejor”. Mi contestación en Twitter fue:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/language03.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;Pero de donde puede venir eso de “el mejor lenguaje es el que conoces mejor”? Bueno, como comentaba ayer, hay grupos de lenguajes, y mucho de nosotros, estamos trabajando con .NET o Java o ambos. Son lenguajes de uso general, donde podemos hacer aplicaciones de consola, gráficas, o web. En los dos casos, más que lenguaje, tenemos un framework de clases, y entornos de desarrollo, desde Eclipse hasta Visual Studio. Creo que uno puede pensar que “el lenguaje que conoce es el mejor”, si está en uno de esos dos grupos: programando en Java o en .NET. Son más que lenguajes: son interminables clases y capacidades y plugins y wizards, que nos ayudan a hacer multitud de aplicaciones.&lt;/p&gt;  &lt;p&gt;Pero sigo pensando que, si limitamos la pregunta a lenguajes, el mejor lenguaje es el que mejor se adecua a lo que tengo entre manos. Claro que con .NET o con Java, vamos a poder hacer más tipos diferentes de aplicaciones. Pero siempre es importante, si podemos elegir, considerar que hay lenguajes de todo tipo, con énfasis en distintos aspectos de la programación. Por ejemplo, en mi caso, en mi proyecto de generación de código AjGenesis, he elegido desde el principio, adoptar un lenguaje dinámico, no tipado, porque me parece lo más adecuado, flexible, adaptable, a lo que quería hacer (leer &lt;a title="Generación de Código, AjGenesis y AjBasic" href="http://msmvps.com/blogs/lopez/archive/2009/06/15/generaci-243-n-de-c-243-digo-ajgenesis-y-ajbasic.aspx"&gt;Generación de Código, AjGenesis y AjBasic&lt;/a&gt;). Y estoy muy contento con la elección.&lt;/p&gt;  &lt;p&gt;Por otro lado, si vamos a hacer aplicaciones de empresa, nos baste .NET o Java, y en ese caso, elegiremos, si podemos, “el que conocemos mejor”.&lt;/p&gt;  &lt;p&gt;Pero insisto: si vamos a .NET o Java, no vamos a “un lenguaje”, vamos a una tecnología, un framework de clases, y alguna IDE, vamos más allá de elegir un lenguaje. En este caso, destacaría la experiencia de desarrollo que nos dé la IDE que elijamos. En estos casos, tengo que comentar que tanto Eclipse como Visual Studio, son una gran ayuda a la hora del desarrollo. En mi opinión, Eclipse es demasiado “todo es un plugin”, cosa que en Visual Studio todo viene más armado y coordinado desde el principio. (Hace un tiempo que no veo NetBeans: cuando lo veía, me parecía que era mucha “bajada de línea” de Sun, donde se soportaba sólo lo que a Sun le importaba. Si le importaba JSF, desaparecía del mapa JSP y así.)&lt;/p&gt;  &lt;p&gt;Entonces, uno podría pensar que la mejor herramienta es la IDE, el framework, la tecnología. Pero acá debo alzar la mano, y recordar una escena de Rambo II. Rambo sale de la cárcel, y vuelve a la selva, a rescatar a su antiguo jefe y entrenador, que ha sido capturado por el enemigo. En un campamento amigo, un agente especial le muestra un galpón, lleno de armas: orgulloso, le presenta a Rambo una tras otra arma, una más sofisticada y poderosa que la otra. Rambo no parece impresionarse, y pronuncia la frase, lapidaria: “La mejor arma es una mente despierta”.&lt;/p&gt;  &lt;p&gt;Lo mismo digo: parafraseando a Rambo, “la mejor herramienta es una mente despierta”. No hay IDE, lenguaje, tecnología, plataforma, framework, que sustituya lo que tenemos entre las orejas. Si como desarrolladores no pensamos, no meditamos en lo que hacemos, por qué lo hacemos, qué necesitamos lograr, y solamente programamos de tal forma, porque está de moda, o está en los libros, o usamos tal framework, sin entenderlo cabalmente, sin ver cuál es el problema que resuelve, y lo vemos como una panacea o “silver bullit”, si en vez de pensar, digo, nos embarcamos ciegamente en el desarrollo, no hay IDE que nos ayude. Lo que Salamanca non da, natura non presta. Lo que no pensemos, no lo va a solucionar la IDE, ni el lenguaje.&lt;/p&gt;  &lt;p&gt;Si uno piensa, puede llegar a ser productivo hasta en Assembler… :-)&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1699015" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Lenguajes+de+Programaci_26002300_243_3B00_n/default.aspx">Lenguajes de Programaci&amp;#243;n</category></item><item><title>Popularidad de Lenguajes de Programación</title><link>http://msmvps.com/blogs/lopez/archive/2009/07/08/popularidad-de-lenguajes-de-programaci-243-n.aspx</link><pubDate>Wed, 08 Jul 2009 09:50:06 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1698705</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1698705</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/07/08/popularidad-de-lenguajes-de-programaci-243-n.aspx#comments</comments><description>&lt;p&gt;Me temo que &lt;a href="http://en.wordpress.com/tag/ajlisp/" target="_blank"&gt;AjLisp&lt;/a&gt; y &lt;a href="http://en.wordpress.com/tag/ajbasic" target="_blank"&gt;AjBasic&lt;/a&gt; lo usamos yo y nadie más… snif… :-). Pero hay lenguajes más populares que esos. Ya es clásica la lista de TIOBE Software:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/langpop01.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;donde aparece Java como el lenguaje más popular, lo que no me asombra. Pero sí me llama la atención la popularidad de C y C++, que deben tener su gran uso en el ambiente Unix, Linux, y otros. Como cuarto, encuentro hoy, Julio de 2009, a PHP, que lo entiendo: la mayor parte del código de sitios dinámicos está en PHP, lejos quedaron los años del predominio del venerable Perl. Y recién en sexto y séptimo lugar, está Visual Basic (parece que agrupan el de .NET y el clásico), y C#. Vean que al final de la lista, aparecen lenguajes con mínimos porcentajes, pero aparecen: RPG, Pascal, Abap, Lisp/Scheme. Más abajo, en la misma página encontraran la lista de posición 21 a 50, donde aparecen COBOL, Objective-C, Fortran, Logo, Prolog, Ada (todavía anda por ahí? :-), Scala, Erlang…. y esta es la lista de 51 a 100:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ABC, AD, Algol, Alpha, Applescript, Beta, Boo, C shell, cg, Clean, Cobra, cT, Curl, Dylan, Eiffel, Euphoria, Factor, Fan, Icon, IDL, Inform, Io, Lingo, MAD, Magic, Maple, Mathematica, MAX/MSP, MOO, MUMPS, Natural, Oberon, Occam, Oz, PL/I, Postscript, PowerBuilder, Progress, Q, R, Revolution, REXX, S-lang, SIGNAL, SPSS, SuperCollider, VBScript, Verilog, VHDL, XSLT&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Notable lista, recomendaría tantos lenguajes de esa lista, simplemente para aprender nuevas formas de programar (notable que aparezca todavía MUMPS, REXX, tendría que ver con más detalle a Io). Esta lista de popularidad se basa en el examen de búsquedas en Google, hace un tiempo pasaron a agregar MSN y Yahoo.&lt;/p&gt;  &lt;p&gt;Pero en estos días, encontré otra página:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://langpop.com/" href="http://langpop.com/"&gt;http://langpop.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/langpop02.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;con información de ranking de popularidad, pero con agrupadas con distintas fuentes, como Yahoo Search, search en Google Code, Freshmeat, Craiglist, Amazon.&lt;/p&gt;  &lt;p&gt;En lo que veo hoy ahí, julio de 2009, según Yahoo Search C es más popular que Java. Pero para Craiglist, primero PHP, segundo SQL (!!!), en Amazon ganan C, C++ y C#, por encima de Java. Y así, noto dispersión de los resultados, dependiendo de la fuente.&lt;/p&gt;  &lt;p&gt;La popularidad de un lenguaje importa. No tanto para entender el lenguaje (muchos lenguajes “boutique” tienen interesantes conceptos, a estudiar con detalle), sino para tener una idea de qué tecnología ha sido adoptada por la comunidad, pero habría que ver más allá: por qué la eligieron, y en qué tipo de proyectos. Dudo que haya muchas aplicaciones desktop, en PHP.&lt;/p&gt;  &lt;p&gt;Resumen: gran cantidad de lenguajes, hay lenguajes viejos, desde COBOL y Smalltalk, y más “nuevos” como Boo, Ruby, Python. Y `cuatros grandes grupos: Java, C/C++, lenguajes .NET (VB.NET, C#), PHP, como claros grupos líderes.&lt;/p&gt;  &lt;p&gt;Pienso que, como desarrolladores de software, debemos tener contacto con esos cuatro grupos, y además, con alguno de los “otros”, para aprender otras ideas y formas de programar.&lt;/p&gt;  &lt;p&gt;No&amp;#160; me enojo si intentan ver &lt;a href="http://en.wordpress.com/tag/ajlisp" target="_blank"&gt;AjLisp&lt;/a&gt; o &lt;a href="http://en.wordpress.com/tag/ajbasic" target="_blank"&gt;AjBasic&lt;/a&gt;… :-)&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1698705" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Smalltalk/default.aspx">Smalltalk</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjLisp/default.aspx">AjLisp</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjBasic/default.aspx">AjBasic</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Lenguajes+de+Programaci_26002300_243_3B00_n/default.aspx">Lenguajes de Programaci&amp;#243;n</category></item><item><title>Generación de código, AjGenesis, y Dunga dunga a la tecnología</title><link>http://msmvps.com/blogs/lopez/archive/2009/06/14/generaci-243-n-de-c-243-digo-ajgenesis-y-dunga-dunga-a-la-tecnolog-237-a.aspx</link><pubDate>Sun, 14 Jun 2009 17:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695333</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1695333</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/06/14/generaci-243-n-de-c-243-digo-ajgenesis-y-dunga-dunga-a-la-tecnolog-237-a.aspx#comments</comments><description>&lt;p&gt;En un post m&amp;iacute;o&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Sobre la generaci&amp;oacute;n de c&amp;oacute;digo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;comentaba sobre &lt;a target="_blank" href="http://ajgenesis.codeplex.com"&gt;AjGenesis&lt;/a&gt; y generaci&amp;oacute;n de c&amp;oacute;digo en general. En uno de los p&amp;aacute;rrafos declaraba:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5&gt;Dunga dunga un ratito&lt;/h5&gt;
&lt;p&gt;De alguna forma, un generador de c&amp;oacute;digo ideal no estar&amp;aacute; atado a una tecnolog&amp;iacute;a. Siempre habr&amp;aacute; alguna &amp;quot;better mousetrap&amp;quot;, siempre alguien inventar&amp;aacute; alguna nueva forma de hacer algo, siempre habr&amp;aacute; un ruso con insomnio, o un hind&amp;uacute; sin novia, que no tiene otra cosa que hacer que crear algo nuevo, ya sea en forma de librer&amp;iacute;a, framework, patr&amp;oacute;n, o estilo arquitect&amp;oacute;nico. Un generador de c&amp;oacute;digo debe ser agn&amp;oacute;stico de la tecnolog&amp;iacute;a, de las modas, de las soluciones actuales y futuras.&lt;/p&gt;
&lt;p&gt;El generador de c&amp;oacute;digo que adoptemos, debe poder adaptarse a lo que queramos hoy y ma&amp;ntilde;ana y pasado ma&amp;ntilde;ana. La estrategia es: no importa la tecnolog&amp;iacute;a, el patr&amp;oacute;n o el framework que aparezca, nuestro generador deber&amp;aacute; aprovecharse de lo que surja. Es lo que llamo la estrategia &amp;quot;dunga dunga&amp;quot;: si aparece una nueva tecnolog&amp;iacute;a T1, le hacemos &amp;quot;dunga dunga&amp;quot; a T1, si aparece un nuevo framework PiruloStruts, adaptamos nuestras plantillas a aprovecharse de ese framework, &amp;quot;dunga dunga&amp;quot; a PiruloStruts. Es como un maestro de aikido: siempre habr&amp;aacute; alguien m&amp;aacute;s fuerte, s&amp;oacute;lo hay que utilizar la fuerza del otro, para vencerlo.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un comentador &lt;a href="http://emmanueloga.blogspot.com"&gt;Emmanuel&lt;/a&gt; escrib&amp;iacute;a:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un resumen y secciones mas especificas ayudar&amp;iacute;an (tienes que admitir que &amp;quot;Dunga dunga un ratito&amp;quot; es un titulo sobre el cual es dif&amp;igrave;cil sacar conclusiones :).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bien, me refer&amp;iacute;a a un viejo chiste, que no encontr&amp;eacute; ahora en la web, as&amp;iacute; que tratar&amp;eacute; de transcribirlo aqu&amp;iacute;, como pueda: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Resulta que un explorador se pierde en la selva, y ya exhausto, se encuentra con una tribu de ind&amp;iacute;genas, con caras de pocos amigos. Lo rodean, el que parece el jefe, se le acerca, y le despacha:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Hombre blanco! Elige! Dunga dunga o muerte!!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;El explorador no entiende qu&amp;eacute; es eso de &amp;ldquo;dunga dunga&amp;rdquo;, as&amp;iacute; que acepta eso, antes que la muerte. Los miembros de la tribu sonr&amp;iacute;en, y le empiezan a dar al pobre explorador, de formas que &amp;eacute;ste no se lo imaginaba&amp;hellip; &lt;/p&gt;
&lt;p&gt;Lo dejan, y el explorador, maltrecho, sigue su camino, se encuentra con otra tribu, otro jefe, y la ya cl&amp;aacute;sica frase:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Hombre blanco! Elige! Dunga dunga o muerte!!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;El explorador, escarmentado, responde:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;No!! No dunga dunga de nuevo!! no!!! Prefiero la muerte!!&amp;rdquo;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;El jefe asiente, pero se le acerca, le pasa brazo por el hombre, y con afecto y sonriendo, le dice:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Bueno, muerte, pero antes&amp;hellip; dunga dunga un ratito, eh?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;:-) :-)&lt;/p&gt;
&lt;p&gt;A eso me refer&amp;iacute;a cuando escrib&amp;iacute; ese post. AjGenesis, como generador de c&amp;oacute;digo, no est&amp;aacute; especializado en producir artefactos para una tecnolog&amp;iacute;a. No es como Xdoclet que s&amp;oacute;lo produce Java, o est&amp;aacute; muy orientado (por lo menos en sus comienzos) a EJB (Enterprise Java Beans).&lt;/p&gt;
&lt;p&gt;No, lo que hace AjGenesis, es aprovecharse del conocimiento del programador o equipo de programaci&amp;oacute;n, de las tecnolog&amp;iacute;as, frameworks existentes o futuros, y generar gran parte de una soluci&amp;oacute;n (o por lo menos la parte repetitiva).&lt;/p&gt;
&lt;p&gt;Recordemos que AjGenesis puede partir de un modelo abstracto y generar artefactos de textos (que pueden ser una soluci&amp;oacute;n completa):&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgenesis30.png" alt="" /&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Notemos que puede haber m&amp;aacute;s de un modelo inicial. En muchos de los ejemplos que publiqu&amp;eacute;, hay un modelo independiente de la plataforma (por ejemplo, que describe que nuestro sistemas tendr&amp;aacute; departamentos, empleados, clientes, proveedores&amp;hellip;) y un modelo de tecnolog&amp;iacute;a (que indica que vamos a usar tal base de datos, y tal lenguaje, y una interface web, etc..)&lt;/p&gt;
&lt;p&gt;Pero tambi&amp;eacute;n puede partir de la base de datos, y generar un modelo de base, que puede ser completado, ajustado, y usado m&amp;aacute;s adelante la generaci&amp;oacute;n de c&amp;oacute;digo:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajgenesis31.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;El modelo a usar es totalmente definible. Y las tareas y plantillas a usar, totalmente definibles. Si lo que Uds. necesitan, es generar aplicaciones con interfaz web, usando Struts 2, es cuesti&amp;oacute;n de armarse las plantillas y tareas que generen ese tipo de soluci&amp;oacute;n. Si luego necesitan generar una aplicaci&amp;oacute;n en ASP.NET 3.5, con persistencia resuelta en NHibernate, de nuevo es cuesti&amp;oacute;n de definir las tareas y plantillas adecuadas.&lt;/p&gt;
&lt;p&gt;Pero si el d&amp;iacute;a de ma&amp;ntilde;ana, aparece un nuevo ORM (Object Relational Mapper), o hay una nueva forma de implementar la persistencia, podemos &amp;ldquo;instruir&amp;rdquo; al AjGenesis para que genere los artefactos de textos que necesitemos.&lt;/p&gt;
&lt;p&gt;Ya he publicado ejemplos, explicaciones de todo esto en&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx"&gt;Posts sobre AjGenesis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;desde una explicaci&amp;oacute;n de Hola Mundo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2006/11/19/generando-c-digo-hello-world-con-ajgenesis.aspx" title="Generando C&amp;oacute;digo- Hello World con AjGenesis"&gt;Generando C&amp;oacute;digo- Hello World con AjGenesis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;hasta aplicaciones completas en distintas tecnolog&amp;iacute;as:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/06/25/generando-aplicaciones-con-ajgenesis.aspx" title="Generando aplicaciones con AjGenesis"&gt;Generando aplicaciones con AjGenesis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En esos ejemplos, el modelo se define en archivos XML, pero tambi&amp;eacute;n pueden tomarlo desde texto:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/09/29/modelo-textual-para-generaci-243-n-de-c-243-digo-con-ajgenesis.aspx" title="Modelo textual para generaci&amp;oacute;n de c&amp;oacute;digo con AjGenesis"&gt;Modelo textual para generaci&amp;oacute;n de c&amp;oacute;digo con AjGenesis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;y desde otras fuentes menos convencionales:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/11/25/ajgenesis-modelo-desde-la-base-de-datos.aspx" title="AjGenesis- Modelo desde la Base de Datos"&gt;AjGenesis- Modelo desde la Base de Datos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2007/11/27/ajgenesis-modelo-generado-desde-los-assemblies.aspx" title="AjGenesis- Modelo generado desde los assemblies"&gt;AjGenesis- Modelo generado desde los assemblies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si hasta pueden implementar una soluci&amp;oacute;n web que genere c&amp;oacute;digo para cualquiera que lo necesite:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/04/03/code-generation-as-a-service.aspx" title="Code Generation as a Service"&gt;Code Generation as a Service&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As&amp;iacute; que no tienen excusas: no pueden quejarse de que no les avis&amp;eacute;, o que me encanut&amp;eacute;, ocult&amp;eacute; algo bajo la manga. Tienen todo eso disponible desde hace a&amp;ntilde;os. S&amp;oacute;lo falta poner cabeza y cerebro, en descubrir los modelos de base que necesitamos, y escribir las tareas y plantillas. Recomiendo siempre partir de una aplicaci&amp;oacute;n de ejemplo, que resuelva lo que Uds. necesitan, usando la tecnolog&amp;iacute;a que hayan elegido, y desde ah&amp;iacute;, ir construyendo las tareas y plantillas que necesiten.&lt;/p&gt;
&lt;p&gt;Como siempre aclaro, no toda la aplicaci&amp;oacute;n puede crearse por generaci&amp;oacute;n de c&amp;oacute;digo. Pero se pueden aplicar t&amp;eacute;cnicas, como generar desde el modelo que elijamos, s&amp;oacute;lo algunos artefactos de texto, y otros, los generamos manualmente.&lt;/p&gt;
&lt;p&gt;Lo interesante, es que as&amp;iacute;, cuando pasen las tecnolog&amp;iacute;as, cuando aparecen nuevas, podemos reaprovechar nuestro conocimiento anterior, al haber definido un modelo que describa nuestro problema, y luego, al conocer una nueva tecnolog&amp;iacute;a, y c&amp;oacute;mo resolver los mismos problemas de otra forma, podemos generar c&amp;oacute;digo para la nueva forma de hacer las cosas.&lt;/p&gt;
&lt;p&gt;Yendo a un ejemplo concreto. Desde hace d&amp;eacute;cadas, estamos haciendo ABM (Altas, Bajas y Modificaciones) de valores, como pa&amp;iacute;ses, provincias y dem&amp;aacute;s. Cuando resolvimos eso en Visual Fox, un cliente nos pidi&amp;oacute; hacerlo en ASP cl&amp;aacute;sico. Cuando resolvimos eso en ASP cl&amp;aacute;sico, otro cliente nos pidi&amp;oacute; eso en ASP.NET, o en JSP o en JSF (JavaServer Faces) o en lo que aparezca ma&amp;ntilde;ana. Pero el problema a resolver es el mismo: mantener una lista de valores. Si luego cambia la tecnolog&amp;iacute;a, cambia la soluci&amp;oacute;n a aplicar, pero el problema inicial se mantiene. En AjGenesis, podemos definir un modelo independiente&amp;nbsp; de la tecnolog&amp;iacute;a (por ejemplo, definiendo las entidades que tenemos que manejar, como Cliente, Factura, Remito, etc&amp;hellip; y sus relaciones), y por otro, instruyendo sobre qu&amp;eacute; tecnolog&amp;iacute;a usar (aportando uno o varios modelos dependientes de la tecnolog&amp;iacute;a), como ASP.NET, ASP.NET MVC, WCF, JSP, JSF, Struts 1 o 2, etc&amp;hellip;&lt;/p&gt;
&lt;p&gt;Otro camino hubiera sido lo que muchos de nosotros encaramos: hacer nuestro propio framework. He visto muchas consultoras de software, &amp;ldquo;casarse&amp;rdquo; con una tecnolog&amp;iacute;a (ej. Visual Fox), estudiarla, armar un framework sobre ella (que resuelva los problemas cl&amp;aacute;sicos, como ABMs, seguridad, autorizaci&amp;oacute;n, validaciones, etc&amp;hellip;) y luego ver c&amp;oacute;mo, ese trabajo de a&amp;ntilde;os, se diluye, porque la tecnolog&amp;iacute;a cambia.&lt;/p&gt;
&lt;p&gt;Si nosotros elevamos el nivel de abstracci&amp;oacute;n, identificamos los problemas a resolver (ABMs, listas, buscadores, seguridad, procesos, validaciones, reglas de negocio), y luego los resolvemos en una tecnolog&amp;iacute;a (ya sea viendo c&amp;oacute;digo de ejemplo, armando nuestros propios ejemplos, et&amp;hellip;), podemos describir ese mapeo de problema a soluci&amp;oacute;n concreta, usando las tareas y plantillas de AjGenesis.&lt;/p&gt;
&lt;p&gt;Como ejemplo: cuando comenc&amp;eacute; con el proyecto, no exist&amp;iacute;a ASP.NET 2.x. Sin embargo, los modelos que constru&amp;iacute; como ejemplos de base, pudieron ser usados para luego generar aplicaciones de ASP.NET 2.x. Actualmente, en un proyecto, estamos adaptando conocimiento previo, para generar c&amp;oacute;digo sobre .NET y &lt;a target="_blank" href="http://www.oakleafsd.com/pgProducts_mmnet.htm"&gt;Mere Mortals Framework&lt;/a&gt;. Y el modelo que construimos, f&amp;aacute;cilmente podr&amp;iacute;a ser reusado para otras aplicaciones, y otras tecnolog&amp;iacute;as,como Clipper o COBOL, hasta ASP.NET MVC o Wicket. El construir el modelo, pone de manifiesto qu&amp;eacute; es lo que queremos resolver, los problemas b&amp;aacute;sicos, que terminan expres&amp;aacute;ndose de forma independiente de la tecnolog&amp;iacute;a de moda, o el framework popular del momento.&lt;/p&gt;
&lt;p&gt;Y aunque usemos una sola tecnolog&amp;iacute;a, el ejercicio de definir el modelo, definir las tareas y plantillas, aporta una clara separaci&amp;oacute;n entre lo abstracto, y lo que llamo las &amp;ldquo;technicalities&amp;rdquo;, los detalles t&amp;eacute;cnicos de implementaci&amp;oacute;n, que el d&amp;iacute;a de ma&amp;ntilde;ana pueden cambiar.&lt;/p&gt;
&lt;p&gt;Entonces, no importa la tecnolog&amp;iacute;a: AjGenesis le puede hacer dunga dunga a la tecnolog&amp;iacute;a que venga. Si Uds. creen que la tecnolog&amp;iacute;a que Uds. usan actualmente, va a durar para siempre, lamento desilusionarlos. Vean la historia de la programaci&amp;oacute;n, los &amp;uacute;ltimos 30 o 50 a&amp;ntilde;os, y ver&amp;aacute;n que lo &amp;uacute;nico permanente es el cambio.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.facebook.com/ajlopez" title="http://www.facebook.com/ajlopez"&gt;http://www.facebook.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695333" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx">Generaci&amp;#243;n de C&amp;#243;digo</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</category></item><item><title>Primeros pasos con Maven</title><link>http://msmvps.com/blogs/lopez/archive/2009/06/12/primeros-pasos-con-maven.aspx</link><pubDate>Fri, 12 Jun 2009 10:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695102</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1695102</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/06/12/primeros-pasos-con-maven.aspx#comments</comments><description>&lt;p&gt;En estos d&amp;iacute;as estoy repoblando de software mi notebook. Una de las aplicaciones que he instalado, para comenzar a usar con m&amp;aacute;s frecuencia, es el Maven de la gente de la Apache Foundation. Durante a&amp;ntilde;os, muchos proyectos de c&amp;oacute;digo abierto basan su armado y empaquetado en un utilitario como el Ant. Pero m&amp;aacute;s y m&amp;aacute;s proyectos est&amp;aacute;n pasando a basarse en este otro utilitario Maven. As&amp;iacute; que aprovecho que mi nueva notebook est&amp;aacute; limpia de anteriores versiones, para probar este utilitario.&lt;/p&gt;
&lt;p&gt;Pueden visitar el sitio del proyecto (c&amp;oacute;digo abierto, en Java):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://maven.apache.org/index.html" title="http://maven.apache.org/index.html"&gt;http://maven.apache.org/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ah&amp;iacute; leemos&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project&amp;#39;s build, reporting and documentation from a central piece of information. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;If you think that Maven could help your project, you can find out more information about in the &amp;quot;About Maven&amp;quot; section of the navigation. This includes an in-depth description of &lt;a href="http://maven.apache.org/what-is-maven.html"&gt;what Maven is&lt;/a&gt;, a &lt;a href="http://maven.apache.org/maven-features.html"&gt;list of some of its main features&lt;/a&gt;, and a set of &lt;a href="http://maven.apache.org/general.html"&gt;frequently asked questions about what Maven is&lt;/a&gt;. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;No nos revela mucho esa descripci&amp;oacute;n, pero les cuento algo: Maven es un Ant con esteroides. Basado en la descripci&amp;oacute;n de un proyecto con el Project Object Model, puede armar la estructura de ese proyecto, para que podamos despu&amp;eacute;s completarlo en programaci&amp;oacute;n, bajarse las librer&amp;iacute;as que necesitemos (p.ej. Hibernate, Spring..), y hasta armar un sitio del proyecto, como los que tienen los proyectos de la fundaci&amp;oacute;n Apache (de hecho, fue as&amp;iacute; como naci&amp;oacute; Maven, como un automatizador de la creaci&amp;oacute;n de nuevos proyectos a incubar en la fundaci&amp;oacute;n Apache).&lt;/p&gt;
&lt;p&gt;Yo me baj&amp;eacute; la &amp;uacute;ltima versi&amp;oacute;n, seg&amp;uacute;n su p&amp;aacute;gina de downloads:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://maven.apache.org/download.html" title="http://maven.apache.org/download.html"&gt;http://maven.apache.org/download.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En mi caso la versi&amp;oacute;n binaria &lt;a href="http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.1.0-bin.zip"&gt;apache-maven-2.1.0-bin.zip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Estoy trabajando en un Windows Vista, as&amp;iacute; que expand&amp;iacute; ese .zip en el directorio c:\Program Files\apache-maven-2.1.0 y arm&amp;eacute; dos variables de ambiente, M2 y M2_HOME como pide la documentaci&amp;oacute;n del producto, adem&amp;aacute;s de asegurarme que existe la variable JAVA_HOME :&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven09.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Agregu&amp;eacute; el valor de M2 (el directorio de los binarios de Maven) a la lista de directorios contenida en mi variable de ambiente PATH.&lt;/p&gt;
&lt;p&gt;Una vez que hice eso, pude ejecutar una prueba desde la consola, que muestre la versi&amp;oacute;n de Maven que estoy usando. Vean que el comando a invocar es mvn:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven01.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Estoy siguiendo los pasos del&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html"&gt;Maven in 5 minutes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para probar de crear un proyecto m&amp;iacute;nimo, un t&amp;iacute;pico Hello World. En un directorio Dev, ejecut&amp;eacute; el comando:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven10.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;El maven comienza a armar la carpeta del proyecto, y a bajar cualquier dependencia que decida que necesite. Vean que van a tener que estar conectados a Internet la primera vez que lo ejecuten, porque lo m&amp;aacute;s probable es que Maven vaya bajando software adicional que necesita. El repositorio de Maven se va creando en un directorio .m2 dentro del directorio home del usuario. En mi caso&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven07.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Durante el proceso, va mostrando el avance de la creaci&amp;oacute;n del proyecto:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven02.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;El resultado, es una carpeta como:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven12.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En el directorio inicial se encuentra el archivo pom.xml que describe al proyecto:&lt;/p&gt;
&lt;div style="font-size:8pt;margin:20px 0px 10px;overflow:auto;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="font-size:8pt;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;project&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://maven.apache.org/POM/4.0.0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;   &lt;span style="color:#ff0000;"&gt;xsi:schemaLocation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;modelVersion&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;4.0.0&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;modelVersion&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;groupId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;com.ajlopez.app&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;groupId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;artifactId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;my-app&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;artifactId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;packaging&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;jar&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;packaging&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;1.0-SNAPSHOT&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;my-app&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;url&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;http://maven.apache.org&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;url&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;dependencies&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;dependency&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;groupId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;junit&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;groupId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;artifactId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;junit&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;artifactId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;3.8.1&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;version&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;scope&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;test&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;scope&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;dependency&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:white;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;dependencies&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="font-size:8pt;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;line-height:12pt;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;project&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El pr&amp;oacute;ximo paso, es, desde el directorio del proyecto, invocar al Maven nuevamente, con otra instrucci&amp;oacute;n, de empaquetar (compilar y armar un .jar con nuestra aplicaci&amp;oacute;n):&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven13.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ahora podemos ejecutar nuestro programa empaquetado, con el comando&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven14.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Un comando m&amp;aacute;s interesante, es el que genera el sitio del proyecto:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven15.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dentro del directorio target\site deja un sitio con la descripci&amp;oacute;n del proyecto, que podemos ver en nuestro navegador:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/maven08.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Espero que sirva como descripci&amp;oacute;n de los primeros pasos para probar Maven, aunque todav&amp;iacute;a no queda claro toda la potencia que tiene el producto. Tengo que describir m&amp;aacute;s en detalle lo que es el Project Object Model, las dependencias, el ciclo de vida de un proyecto, los distintos &amp;ldquo;verbos&amp;rdquo; que tenemos, adem&amp;aacute;s de package o test.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; Lopez &lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt; &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695102" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>Desarrollo Agil con Java, Spring, Hibernate y Eclipse</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/13/desarrollo-agiel-con-java-spring-hibernate-y-eclipse.aspx</link><pubDate>Sat, 13 Dec 2008 12:14:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1656684</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1656684</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/13/desarrollo-agiel-con-java-spring-hibernate-y-eclipse.aspx#comments</comments><description>&lt;p&gt;&lt;img align="left" src="http://www.ajlopez.com/images/articles/agilejava.jpg" style="margin:0px 20px 20px 0px;" alt="" /&gt;Estoy leyendo el libro &lt;a target="_blank" href="http://safari.oreilly.com/0672328968"&gt;Agile Java Development with Spring, Hibernate and Eclipse&lt;/a&gt;, escrito por Anil Hemrajani. Acerca del autor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Anil Hemrajani ha estado trabajando con Java desde finales de 1995, como desarrollador, emprendedor, autor e instructor. Es el fundador de Isavix Corporation, un exitosa compa&amp;ntilde;&amp;iacute;a de servicios&amp;nbsp;IT&amp;nbsp;(ahora Inscope Solutions), u de isavix.net (ahora DeveloperHub.com), una comunidad de desarrollo, que ha crecido a m&amp;aacute;s de 100.000 miembros registrados. Tiene 20 de a&amp;ntilde;os de experiencia en la comunidad de IT, habiendo trabajdo para varios de las compa&amp;ntilde;&amp;iacute;as Fourtune 100 y tambi&amp;eacute;n en organizaciones m&amp;aacute;s peque&amp;ntilde;as. Ha publicado numerosos art&amp;iacute;culos en revistas bien conocidads, presentado en conferencias y seminarios alrededor del mundo, y ha recibido el premio&amp;nbsp;&amp;quot;Outstanding Contribution to the Growth of the Java Community&amp;quot; de Sun Microsystems, el premio &amp;quot;Best Java Client&amp;quot; en&amp;nbsp; JavaOne por BackOnline,&amp;nbsp;un producto de backup cliente/servidor basado en Java, y fue nominado para el premio Computerworld-Smithsonian por un sitio web que brinda un servicio online gratuito de almacenamiento de archivos. Su m&amp;aacute;s reciente proyecto es el sitio &lt;a href="http://visualpatterns.com"&gt;visualpatterns.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Es un muy buen libro, que cubre los temas de logging, depuraci&amp;oacute;n remota, pr&amp;aacute;cticas &amp;aacute;gilas, JMX, JUnit, Ant, programaci&amp;oacute;n con POJOs (Plain Old Java Objects), librer&amp;iacute;as de tags de JSP, y m&amp;aacute;s. Pero ahora, estoy interesado en comentar algunos p&amp;aacute;rrafos del prefacio. Hemrajani escribe:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I began working with Java technology in late 1995, shortly before the Java Development Kit (JDK) 1.0 was formally released. Prior to that, I was programming in C and C++ for many years. I was truly excited about the features that Java offered, such as cross-platform portability, simpler syntax (simpler than C++, for example), objectoriented, secure, rich API, and more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Traduzco libremente: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Comenc&amp;eacute; a trabajar con la tecnolog&amp;iacute;a Java a finales de 1995, poco antes de que el Java Development Kit (JDK) fuera formalmente liberado. Antes de eso, yo estuve programando en C y C++ por muchos a&amp;ntilde;os. Yo esta realmente excitado acerca de las nuevas caracter&amp;iacute;sticas que ofrec&amp;iacute;a Java, como portabilidada cross-platform, sintaxis simple (m&amp;aacute;s simple que C++, por ejemplo), orientado a objetos, seguridad, rica API, y m&amp;aacute;s.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yo tuve una carrera similar, pero por estos pagos. En alg&amp;uacute;n momento de 1995, aprend&amp;iacute;a el lenguaje Java y parte de la librer&amp;iacute;a, pasando a ser un fan del lenguaje. Era una liberaci&amp;oacute;n de programaci&amp;oacute;n con C++ (plagada de problemas de bien manejo de los new y los delete), y de Visual Basic (donde no hab&amp;iacute;a herencia, ni objetos completos). Pero debo admitir que la interfaz GUI estaba a&amp;uacute;n basada en una fea implementaci&amp;oacute;n AWT. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Over my 20-year career, I have learned a few things. Among these, my favorite is simplicity; anytime I see complexity, I begin doubting whether the solution is correct. This is how I had begun to feel about Java right around 2000, when the Java 2 Enterprise Edition (J2EE) started becoming mainstream. Note that from this point on, I will refer to J2EE as JEE because the &amp;quot;2&amp;quot; was recently dropped from the name by Sun Microsystems.&lt;/p&gt;
&lt;p&gt;En mis 20 a&amp;ntilde;os de carrera, he aprendido unas pocas cosas. Entre ellas, mi favorita es la simplicidad: cada vez que veo complejidad, comienzo a dudar de si la soluci&amp;oacute;n que estoy viendo es correcta. Es as&amp;iacute; c&amp;oacute;mo me sent&amp;iacute;a alrededor de Java cerce de 2000, cuando el Java 2 Enterprise Edition (J2EEE) comnezaba a ser conocido. Noto que en desde ahora, me referir&amp;eacute; a J2EE como JEE porque el &amp;quot;2&amp;quot; ha sido recientemente removido del nombre por Sun Microsystems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Coincido. Cuando Sun lanz&amp;oacute; J2EE, era todo un revoltijo. Por a&amp;ntilde;os, pens&amp;eacute; que ellos, los de Sun, estaban en lo correcto, y que yo no entend&amp;iacute;a las razones para la complejidad subyacente en los Enterprise Java Beans. Hasta que le&amp;iacute; los libros de Rod Johnson sobre desarrollo empresarial con Java: ah&amp;iacute; confirm&amp;eacute; lo extra&amp;ntilde;o y complejo que es EJB. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My growing lack of interest in Java was a result of what I saw as unnecessary complexity in JEE introduced by layers of abstraction. I began to believe that Sun Microsystems (inventor of Java) was focusing Java and JEE on solving the most complex enterprise applications, but somewhat ignoring the relatively less complex, small- to medium-sized applications. Furthermore, I saw the hype take over people&amp;#39;s common sense because I ran across projects in which Enterprise JavaBeans (EJB) were used for nondistributed processing, such as local logging. I felt strongly enough about this subject to write a short article for JavaWorld.com in 2000 (&lt;a href="http://www.javaworld.com/javaworld/jw-10-2000/jw-1006-soapbox.html"&gt;http://www.javaworld.com/javaworld/jw-10-2000/jw-1006-soapbox.html&lt;/a&gt;) titled, &amp;quot;Do You Really Need Enterprise JavaBeans?&amp;quot; (About five years later, we saw EJB 3.0 specifications being rewritten to become more simplified, to ease the development.) This brings us to this book and the reason I wrote it.&lt;/p&gt;
&lt;p&gt;Mi crecience falta de inter&amp;eacute;s en Java era un resultado de lo que yo ve&amp;iacute;a como complejidad innecesaria en JEE, complejidad introducida por capas de abstracci&amp;oacute;n. Comenzaba a creer que Sun Microsystems (los inventores de Java) estaba enfocando a Java y JEE para resolver aplicaciones complejas empresariales, pero ignorando las relativamente menos complejas aplicaciones peque&amp;ntilde;as y medianas. Es m&amp;aacute;s, yo ve&amp;iacute;a que todo esa excesiva publicidad sobre el tema, estaba haciendo olvidar el sentido com&amp;uacute;n, porque veia proyectos donde Enterprise JavaBeans (EJBs) estaban siendo usados para procesamiento no distribuido, como el logging local. Me sent&amp;iacute;a seguro en el tema, como para escribir un corto art&amp;iacute;culo en JavaWorld.com en el 2000 (&lt;a href="http://www.javaworld.com/javaworld/jw-10-2000/jw-1006-soapbox.html"&gt;http://www.javaworld.com/javaworld/jw-10-2000/jw-1006-soapbox.html&lt;/a&gt;) titulado, &amp;quot;&amp;iquest;Realmente necesita Enterprise JavaBeans?&amp;quot; (cinco a&amp;ntilde;os m&amp;aacute;s tarde, vemos que la especificaci&amp;oacute;n EJB 3.0 ha sido reescrita para ser m&amp;aacute;s simple, para facilitar el desarrollo). Todo esto nos trae a este libro y las razones para haberlo escrito.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Los EJBs son el trabajo del diablo. La programaci&amp;oacute;n con POJO, ORMs (Object Relational Mappers) como Hubernate, y el uso del framework Spring, son ejemplos de buen dise&amp;ntilde;o creados por la comunidad de Java. Finalmente, la gente de Sun vi&amp;oacute; la luz, y adoptaron muchas ideas de la comunidad en su nueva especificaci&amp;oacute;n EJB 3.0, pero para m&amp;iacute;, eso fue un ejemplo de &amp;quot;demasiado poco, demasiado tarde&amp;quot;. La programaci&amp;oacute;n con EJB fue siempre una pesadilla, que merece ser borrada de la memoria de la humanidad entera. &lt;/p&gt;
&lt;p&gt;Al comienzo de cada cap&amp;iacute;tulo en este libro, hay una ilustraci&amp;oacute;n, describiendo una historia ficticia, que recorre el libro, describiendo c&amp;oacute;mo se lleva a cabo el desarrollo de una aplicaci&amp;oacute;n. No puedo resistir incluir una, del cap&amp;iacute;tulo 2 (hay m&amp;aacute;s en &lt;a href="http://visualpatterns.com"&gt;visualpatterns.com&lt;/a&gt;): &lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://www.todocontenidos.com/images/articles/agilejava2.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;M&amp;aacute;s informaci&amp;oacute;n sobre este libro, en &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.visualpatterns.com/agilejava.php" title="http://www.visualpatterns.com/agilejava.php"&gt;http://www.visualpatterns.com/agilejava.php&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Esa p&amp;aacute;gina tiene la tabla de contenido, y&amp;nbsp;comentarios de Scott W. Ambler, y Rod Johnson. &lt;/p&gt;
&lt;p&gt;Otro libro que recomiendo, alineado con estas ideas: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://oreilly.com/catalog/9780596006761/" title="Better, Faster, Lighter Java O&amp;#39;Reilly Media"&gt;Better, Faster, Lighter Java O&amp;#39;Reilly Media&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;tambi&amp;eacute;n orientado a usar Hibernate, y Spring, pero explicando en cada cap&amp;iacute;tulo las razones para adoptar tal o cual dise&amp;ntilde;o. &lt;/p&gt;
&lt;p&gt;Este post apareci&amp;oacute; originalmente en &amp;quot;Anglish&amp;quot; en &lt;/p&gt;
&lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/2008/11/25/agile-java-development-with-spring-hibernate-and-eclipse/" title="Agile Java Development with Spring, Hibernate and Eclipse"&gt;Agile Java Development with Spring, Hibernate and Eclipse&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Nos leemos! &lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1656684" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Hibernate/default.aspx">Hibernate</category></item><item><title>Noticias y enlaces II</title><link>http://msmvps.com/blogs/lopez/archive/2008/09/18/noticias-y-enlaces-ii.aspx</link><pubDate>Thu, 18 Sep 2008 12:25:49 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1648182</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1648182</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/09/18/noticias-y-enlaces-ii.aspx#comments</comments><description>&lt;p&gt;Hoy viene una lista de enlaces, sobre tecnologías, sitios, noticias, de varios temas (siguiendo con el espíritu de la anterior entrega &lt;a title="Enlaces y noticias" href="http://msmvps.com/blogs/lopez/archive/2008/07/24/enlaces-y-noticias.aspx"&gt;Enlaces y noticias&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;Para Noviembre, acompañaré a Martín Salías en una charla para el Microsoft User Group de Argentina, dedicada a visitar y repasar el gran tema de &amp;quot;cómo programar y no morir en el intento&amp;quot;. Estamos con Martín meditando los temas, ya tenemos una lista informal, veremos de ir armando la charla de alguna manera ágil, con backlog, iteraciones y demás. Por ahora, ya tenemos el &amp;quot;timebox&amp;quot;: hay una fecha para Noviembre. Keep tuned!&lt;/p&gt; &lt;p&gt;El miércoles 10 de septiembre pasado, hubo reunión de Arquitectura&amp;nbsp;y Empanadas, en el MUG de Argentina. Hubo interesantes discusiones sobre SOA, aplicaciones web, el uso de herramientas, y Fabio Maulo estuvo comentando varios detalles sobre el desarrollo de &lt;a href="http://www.nhibernate.org" target="_blank"&gt;NHibernate&lt;/a&gt; y el nuevo sitio de la comunidad &lt;a title="http://www.nhforge.org/" href="http://www.nhforge.org/"&gt;http://www.nhforge.org/&lt;/a&gt;. Las empanadas estuvieron regadas por gaseosa y latas de cervezas (algunos nos especializamos en estas últimas... :-)). Espero que en breve se repita este tipo de reunión. (Para los que no saben que es una empanada argentina o un repulgue, está el clásico enlace a &lt;a href="http://en.wikipedia.org/wiki/Empanada" target="_blank"&gt;empanada en Wikipedia&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Ya comenté sobre la reunión del sábado pasado, de &lt;a href="http://www.smalltalking.net/" target="_blank"&gt;Smalltalking&lt;/a&gt;, donde asistió Claus Gittinger, creador de Smalltalk/X. Leer &lt;a href="http://msmvps.com/blogs/lopez/archive/2008/09/16/reuni-243-n-de-smalltalking-con-claus-gittinger-y-smalltalk-x.aspx" target="_blank"&gt;Reunión de Smalltalking, con Claus Gittinger y Smalltalk/X&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ayer fue el cumpleaños del bueno de Roberto Schatz, capi di tutti capi en el tema arquitectos en Microsof. Un saludo desde acá! Vean lo que está haciendo en Puerta 18, en &lt;a title="Rob&amp;oacute;tica en Puerta 18" href="http://msmvps.com/blogs/lopez/archive/2008/09/14/rob-243-tica-en-puerta-18.aspx"&gt;Robótica en Puerta 18&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Apareció un nuevo sitio de comunidad .NET &lt;a title="Ideavine- Open source community for .NET" href="http://ideavine.net/"&gt;Ideavine- Open source community for .NET&lt;/a&gt;. Al parecer, tendran más herramientas de soporte, como un Continuos Integration o similar. Es una creación de &lt;a title="James Avery" href="http://infozerk.com/averyblog"&gt;James Avery&lt;/a&gt;&amp;nbsp;y &lt;a title="Nate Kohari" href="http://kohari.org/"&gt;Nate Kohari&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Si tienen que manejar un equipo distribuido, pueden usar las herramientas de &lt;a title="Accelerating Software Development Assembla" href="http://www.assembla.com/"&gt;Accelerating Software Development Assembla&lt;/a&gt;. Otro lugar, que brinda hosting de SVN es &lt;a title="CVSDude- Professional Subversion (SVN) Hosting and CVS Hosting" href="https://cvsdude.com/"&gt;CVSDude- Professional Subversion (SVN) Hosting and CVS Hosting&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Una opinión sobre el avance de .NET sobre Java en &lt;a title=".NET outpacing Java-" href="http://www.theserverside.net/news/thread.tss?thread_id=50707"&gt;.NET outpacing Java-&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Tienen un pdf sobre la implementación con código de la base de .NET en &lt;a title="Shared Source CLI 2.0 Internals" href="http://callvirt.net/files/Shared%20Source%20CLI%202.0%20Internals%20DRAFT.pdf"&gt;Shared Source CLI 2.0 Internals&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Como saben, soy un entusiasta del uso de modelos para generación de código. Lo importante es el modelo (tema para un próximo post). Entonces, para mí es interesante cómo aparece modelo en el nuevo Oslo de Microsoft. Leer &lt;a title="The Origins of Microsoft&amp;#39;s Oslo Software Modeling Platform" href="http://www.eweek.com/c/a/Windows/The-Origins-of-Microsofts-Oslo-Software-Modeling-Platform/"&gt;The Origins of Microsoft&amp;#39;s Oslo Software Modeling Platform&lt;/a&gt;. (se viene un modelo textual en &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;, es decir, en lugar de XML, un lenguaje de texto). Y también me interesa Domain Specific Languages, encontré &lt;a title="Embedded typesafe DSLs for Java" href="http://www.slideshare.net/ekabanov/embedded-typesafe-domain-specific-languages-for-java?src=embed"&gt;Embedded typesafe DSLs for Java&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Spring Framework para Java no para de desarrollar nuevas &amp;quot;features&amp;quot;. &lt;a title="Spring 2.5- New Features in Spring MVC" href="http://www.infoq.com/articles/spring-2.5-ii-spring-mvc"&gt;Spring 2.5- New Features in Spring MVC&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Una explicación de por qué JBI (aka Java Business Integration or JSR-208) no despega como Enterprise Service Bus en &lt;a title="Enterprise Java Community- The Road to JBI- Paved with Good Intentions" href="http://www.theserverside.com/tt/articles/article.tss?track=NL-461&amp;amp;ad=651571HOUSE&amp;amp;l=TheRoadtoJBI&amp;amp;asrc=EM_NLN_4133379&amp;amp;uid=2623944"&gt;Enterprise Java Community- The Road to JBI- Paved with Good Intentions&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Veremos que pasa con Rich Internet Applicaciones en Java. Para leer &lt;a title="Getting Started With JavaFX Technology" href="http://java.sun.com/javafx/tutorials/jfx_nb_getting_started/"&gt;Getting Started With JavaFX Technology&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Un libro que me interesó es &lt;a title="Adobe Press - 9780321603944 - Software Pipelines- The Key to Capitalizing on the Multi-core Revo" href="http://safari.adobepress.com/9780321603944"&gt;Adobe Press - 9780321603944 - Software Pipelines- The Key to Capitalizing on the Multi-core Revo&lt;/a&gt;. Podría adaptar mucho de eso a AjMessages y otras formas de aplicaciones distribuidas, no sólo muti-core.&lt;/p&gt; &lt;p&gt;Volviendo a Martín Salías, escribió un post comentando mi anterior &lt;a title="El browser de Google- proyecto Chrome" href="http://msmvps.com/blogs/lopez/archive/2008/09/02/el-browser-de-google-proyecto-chrome.aspx"&gt;El browser de Google- proyecto Chrome&lt;/a&gt;&amp;nbsp;, explicando más en detalle lo que se viene con &lt;a href="http://www.google.com/chrome" target="_blank"&gt;Chrome&lt;/a&gt; y la nueva &amp;quot;engine&amp;quot; de Javascript que tiene incorparada. Leer su post &lt;a href="http://blog.salias.com.ar/2008/09/javascript-la-programacin-del-futuro.html" target="_blank"&gt;Javascript - La programación del futuro&lt;/a&gt; (gracias, Martín, por ese guiño en el título recordando a mi libro de Java). Pueden ver el código de la engine V8 en &lt;a title="v8 - Google Code" href="http://code.google.com/p/v8/"&gt;v8 - Google Code&lt;/a&gt;. Si quieren seguir de cerca al proyecto, leer su blog oficial &lt;a title="Chromium Blog" href="http://blog.chromium.org/"&gt;Chromium Blog&lt;/a&gt;. El código fuente del browser en &lt;a href="http://code.google.com/chromium/" target="_blank"&gt;Chromium - Google Code&lt;/a&gt;. El bueno de &lt;a href="http://www.hanselman.com/" target="_blank"&gt;Scott Hanselman&lt;/a&gt; ha comentado sobre la aparición de código de Microsoft en el código de Chrome. Leer &lt;a title="The Weekly Source Code 33 - Microsoft Open Source inside Google Chrome" href="http://www.hanselman.com/blog/TheWeeklySourceCode33MicrosoftOpenSourceInsideGoogleChrome.aspx"&gt;The Weekly Source Code 33 - Microsoft Open Source inside Google Chrome&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Encontré por ahí a &lt;a title="The Guido van Robot Programming Language" href="http://gvr.sourceforge.net/"&gt;The Guido van Robot Programming Language&lt;/a&gt;&amp;nbsp;lenguaje multiplataforma, para enseñanza de conceptos de programación. Tendría que estudiarlo. Otro con parecida idea es &lt;a title="Reeborg&amp;#39;s World" href="http://reeborg.world.googlepages.com/home"&gt;Reeborg&amp;#39;s World&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ejemplos de código Java agrupados por categoría en &lt;a title="Java examples (example source code) Organized by topic" href="http://www.java2s.com/"&gt;Java examples (example source code) Organized by topic&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Para los interesados en F#, un punto de inicio con enlaces es &lt;a title="F# Programming Fast Guide" href="http://searchwindevelopment.techtarget.com/generic/0,295582,sid8_gci1289090,00.html"&gt;F# Programming Fast Guide&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Para los que quieran comenzar un proyecto con NHibernate, y quieren ver cómo se comienza con un ejemplo más de la vida real, leer &lt;a title="A Journey with NHibernate - Part 1" href="http://www.flux88.com/2006/07/05/A+Journey+With+NHibernate++Part+1.aspx"&gt;A Journey with NHibernate - Part 1&lt;/a&gt;&amp;nbsp;y &lt;a title="A Journey With NHibernate - Part 2" href="http://flux88.com/AJourneyWithNHibernatePart2.aspx"&gt;A Journey With NHibernate - Part 2&lt;/a&gt;, &lt;a title="A Journey With NHibernate (and DDD) - Part 3" href="http://flux88.com/AJourneyWithNHibernateAndDDDPart3.aspx"&gt;A Journey With NHibernate (and DDD) - Part 3&lt;/a&gt;, &lt;a title="A Journey with Domain Driven Design (and NHibernate) - Part 4" href="http://flux88.com/AJourneyWithDomainDrivenDesignAndNHibernatePart4.aspx"&gt;A Journey with Domain Driven Design (and NHibernate) - Part 4&lt;/a&gt;, &lt;a title="A Journey with Domain Driven Design (and NHibernate) - Part 5" href="http://flux88.com/AJourneyWithDomainDrivenDesignAndNHibernatePart5.aspx"&gt;A Journey with Domain Driven Design (and NHibernate) - Part 5&lt;/a&gt;. Son posts de Ben Scheirman, interesante también &lt;a title="Blame NHibernate, Why Not-" href="http://flux88.com/BlameNHibernateWhyNot.aspx"&gt;Blame NHibernate, Why Not-&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Para los nostálgicos como yo (que recuerdo al Pong de Atari, el próximo nivel en mi adolescencia luego de los flippers... :-)), lean &lt;a title="Ten Things Everyone Should Know About Space Invaders" href="http://www.1up.com/do/feature?cId=3168373"&gt;Ten Things Everyone Should Know About Space Invaders&lt;/a&gt;. Pueden codificar algo con &lt;a title="Space Invaders 101 - An Accelerated Java 2D Tutorial" href="http://www.cokeandcode.com/info/tut2d.html"&gt;Space Invaders 101 - An Accelerated Java 2D Tutorial&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Muy interesante el artículo de Fracois Orsini &lt;a title="Apache Derby Case Study- Benefits of a Microkernel architecture" href="http://blogs.sun.com/FrancoisOrsini/entry/apache_derby_and_the_benefits"&gt;Apache Derby Case Study- Benefits of a Microkernel architecture&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Este es un enlace muy conocido, pero siempre es bueno recordarlo: &lt;a title="TIOBE Programming Community Index" href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;TIOBE Programming Community Index&lt;/a&gt;, donde se listan lenguajes de programación segun su popularidad (ver ahí los detalles de cómo lo miden). No me sorprende el primer lugar de Java, pero no parecen distinguir VB.NET de basic en general, y C# está abajo de Perl. Pero vayan a ver la lista de lenguajes menos conocidos. Creo que es un buen ejercicio, en los tiempos que corren, ejercitarnos en otros lenguajes. Siempre se aprende algo, una nueva perspectiva de los problemas y soluciones.&lt;/p&gt; &lt;p&gt;Soy un entusiasta usuario de &lt;a href="http://twitter.com/" target="_blank"&gt;Twitter&lt;/a&gt;, pueden leerme en &lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;. El sistema es interesante para estudiarlo, como caso de ejemplo (o dis-ejemplo) de escababilidad. Un artículo criticando algo de código de otro microblog en &lt;a title="Let the microblogs bloom" href="http://www.russellbeattie.com/blog/let-the-microblogs-bloom"&gt;Let the microblogs bloom&lt;/a&gt;. Creo igual que el código puede ser mejorado. En el caso de este tipo de aplicaciones, lo importante es la marea de gente que uno tiene, luego la escalabilidad se puede mejorar, cambiando código de base en cualquier momento.&lt;/p&gt; &lt;p&gt;Patrones, estilos arquitectónicos, herramientas, hay muchas de moda. Para comenzar a estudiar Inversion of Control (nombre raro si los hay), pueden visitar primero la introducción y LOS POR QUE de IoC en el post del bueno de Jeremy Miller &lt;a title="Before you use an IoC tool, some concepts to know first - Jeremy D. Miller -- The Shade Tree Dev" href="http://codebetter.com/blogs/jeremy.miller/archive/2008/06/29/some-concepts-to-know-first.aspx"&gt;Before you use an IoC tool, some concepts to know first - Jeremy D. Miller -- The Shade Tree Dev&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Muchos temas de SOA aplicado, en &lt;a href="http://www.iserviceoriented.com/" target="_blank"&gt;iServiceOriented.com Practical Service Oriented Architecture&lt;/a&gt;. Me interesa leer más adelante ahí sobre la implementación de un ESB (Enterprise Service Bus) empezando por &lt;a href="http://www.iserviceoriented.com/blog/post/Building+Our+Own+ESB+-+Publish+Subscribe+Part+1.aspx" target="_blank"&gt;Building Our Own ESB - Publish Subscribe Part 1 (7/21/2008)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Matías &amp;quot;El Pibe&amp;quot; Woloski (conocido como gran comedor de cangrejos en China, siempre recordado por su recorrido por la gran muralla enfundado en campera amarilla, lo que le ha valido el apodo en esos lares de &amp;quot;the banana man&amp;quot;... :-)), ha escrito su tesis sobre Software as a Service. Uno de sus posts muestra &lt;a title="SaaS Taxonomy Map" href="http://blogs.southworks.net/mwoloski/2008/07/10/saas-taxonomy-map/"&gt;SaaS Taxonomy Map&lt;/a&gt;. Pueden leer sobre el desarrollo de su tesis siguiendo las miguitas de pan que deja en &lt;a href="http://twitter.com/woloski" target="_blank"&gt;su twitter&lt;/a&gt;. Creo que la versión final de la tesis está en &lt;a href="http://cid-887947c4972c5e64.skydrive.live.com/self.aspx/Public/Tesis%20Software%20como%20Servicio.pdf" target="_blank"&gt;Tesis Woloski&lt;/a&gt;. Cualquier cosa, vigilan su &lt;a href="http://cid-887947c4972c5e64.skydrive.live.com/browse.aspx/Public" target="_blank"&gt;folder público en Skydrive&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Lean como el bueno de Eugenio Pace descubre una implementación SaaS &lt;a title="Eugenio Pace - Software as a Service Architecture Guidance - Northwind Hosting exists, it&amp;#39;s bett" href="http://blogs.msdn.com/eugeniop/archive/2008/09/11/northwind-hosting-exists-it-s-better-than-what-you-saw-and-it-s-called-saasgrid.aspx"&gt;Eugenio Pace - Software as a Service Architecture Guidance - Northwind Hosting exists, it&amp;#39;s bett&lt;/a&gt;, y &lt;a title="Apprenda - Software as a Service (SaaS) Platform" href="http://www.apprenda.com/saasgrid/"&gt;Apprenda - Software as a Service (SaaS) Platform&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;En mi anterior Noticias y Enlaces, mencionaba a mi&amp;nbsp;mejor post de este año &lt;a title="Posmopolitan" href="http://ajlopez.zoomblog.com/archivo/2008/07/08/posmopolitan.html"&gt;Posmopolitan&lt;/a&gt;. Ahí usé texto generado por computadora. Si alguna vez no estan inspirados, pueden también usar el servicio de &lt;a title="Computer poems" href="http://computer-generated-poetry.tomo.lt/"&gt;Computer poems&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Un poco de humor geek en &lt;a title="If People Bought Cars Like They Buy Computers" href="http://www.jumbojoke.com/if_people_bought_cars_like_they_buy_computers_1659.html"&gt;If People Bought Cars Like They Buy Computers&lt;/a&gt;. Con tantas tecnologías y siglas en Web 2.0, un refrescante &lt;a title="How to be an instant Web me-2.0 developer" href="http://www.theregister.co.uk/2008/07/07/web20_for_developers/"&gt;How to be an instant Web me-2.0 developer&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Me gusta Linux, pero no todo es un lecho de rosas. Creo que este enlace lo encontré en &lt;a href="http://twitter.com/migueldeicaza/" target="_blank"&gt;el twitter de Miguel de Icaza&lt;/a&gt; o del &lt;a href="http://twitter.com/kzu" target="_blank"&gt;bueno de Cazzulino&lt;/a&gt;: &lt;a title="Linux Hater&amp;#39;s Blog" href="http://linuxhaters.blogspot.com/"&gt;Linux Hater&amp;#39;s Blog&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Estoy planificando mi segunda semana sabática del año. Me temo que tendré que seguir atendiendo a algún cliente de programación, pero suspendo mis cursos por 9 días. Comienzo el sábado, veremos qué entregables me comprometo al terminar en esa semana.&lt;/p&gt; &lt;p&gt;Y como siempre al final, un off topic total: el bueno de Sebastian Bassi, del &lt;a href="http://www.clubdelarazon.org/" target="_blank"&gt;Club de la Razón&lt;/a&gt; y &lt;a href="http://www.genesdigitales.com/" target="_blank"&gt;Genes Digitales&lt;/a&gt;, está vendiendo &lt;a href="http://www.genesdigitales.com/isla/" target="_blank"&gt;islas en la Patagonia&lt;/a&gt;. Yo no voy a comprar, recien tiré... :-)&lt;/p&gt; &lt;p&gt;Bueno, basta por hoy, espero que encuentren algo útil en todo este rejunte de enlaces... :-)&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;br /&gt;&lt;a href="http://friendfeed.com/ajlopez"&gt;http://friendfeed.com/ajlopez&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1648182" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Enlaces+y+Noticias/default.aspx">Enlaces y Noticias</category></item><item><title>Arquitectura de capas en Domain-Driven Design</title><link>http://msmvps.com/blogs/lopez/archive/2008/09/13/arquitectura-de-capas-en-domain-driven-design.aspx</link><pubDate>Sat, 13 Sep 2008 10:29:29 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1647691</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1647691</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/09/13/arquitectura-de-capas-en-domain-driven-design.aspx#comments</comments><description>&lt;p&gt;Esta vez, exploremos los conceptos de arquitectura en capas, tal como lo propuso Eric Evans en su libro clásico &lt;a href="http://domaindrivendesign.org/books/#DDD" target="_blank"&gt;Domain-Driven Design, Tackling Complexity in the Heart of Software&lt;/a&gt;. En el capítulo cuatro del libro, Evans presenta este diagrama:&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.ajlopez.com/images/articles/dddlayered.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Evans Escribe:&lt;/p&gt; &lt;p&gt;&lt;em&gt;En una aplicación de carga y envío de mercadería, para simplemente listar y seleccionar el destino de la carga de una lista de ciudades, debe haber código que (1) dibuje un control en la pantalla, (2) consulte una base de datos para obtener las posibles ciudades, (3) interprete el ingreso de usuario y lo valide, (4) asocie la ciudad seleccionada con la carga, y (5) confirme el cambio en la base de datos. Todo este código es parte del mismo programa, pero sólo una pequeña parte está relacionado con el negocio de envío de cargas.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;El propone que el modelo de dominio resida en una capa, la Capa de Dominio. De esta forma, el modelo de dominio es protejido de los detalles técnicos, como la implementación de la persistencia, y los detalles de presentación. Me gusta decir que el dominio es un organismo, qe recibe estímulos, acciones desde el exterior,y reacciona a esos comandos. El dominio debería ejecutarse sin conocimiento detallado del resto de la aplicación. Serialización entre capas físicas, detalles de presentación, y acceso a base de datos, deben estar claramente separados de la implementación del dominio.&lt;/p&gt; &lt;p&gt;Las capas puede ser descriptas como:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;UI (User Interface)&lt;/strong&gt;: la más fácil de entender, esta capa es la responsable de mostra información al usuario, y aceptar nuevos datos. Puede ser implementada para web, escritorio gráfico, o cualquier otra tecnología de presentación, presente o futura. Por ejemplo, podría ser una aplicación de voz, que interactúa con el usuario usando un teléfono. La prueba ácida para nuestro diseño es que un cambio radical en la interfaz de usuario&amp;nbsp;debería tener mínimo (o por lo menos, controlado) impacto en el resto del sistema.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Application Layer&lt;/strong&gt;: está a cargo de coordinar las acciones a ser realizadas en el dominio. No tiene reglas de negocio o conocimiento del dominio. No hay estado del negocio en esta capa. Delega todas las acciones del negocio al propio dominio. Podría coordinar varias acciones (posiblemente, en varios dominios). Preara la infraestructura para que esté lista a trabajar con el dominio en una acción específica (por ejemplo, preparando la transacción que vaya a usar).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Domain Layer&lt;/strong&gt;: En esta capa reside el corazón del software, según Evans. Las reglas y lógica de negocio residen en esta capa. Estado de entidades de negocio y su conducta es definida y usada aquí. Comunicación con otros sistemas, detalles de persistencia, son delegados en la capa de infraestructura. Evans discute los patrones que él usa en esta capa, como Entities, Value Objects, Services, Repositories y Factories. Exploraremos esos patrones y sus implementaciones en futuros posts.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Infrastructure Layer&lt;/strong&gt;: Dios y el diablo estan en los detalles, dice el dicho, y también en la capa de infraestructura. La principal responsabilidad de esta capa es la persistencia del estado de negocio, muy frecuentemente, usando una base de datos relacional.&lt;/p&gt; &lt;p&gt;Mi idea es tomar un ejemplo (posiblemente un dominio como uno del libro de Jimmy Nilsson), y desarrollarlo usando estas ideas, mostrando código concreto en Java y en .NET. En algún punto, discutiré sobre generación de código desde un modelo abstracto, pero no será el foco de esta serie de posts.&lt;/p&gt; &lt;p&gt;Fuentes consultadas: &lt;/p&gt; &lt;p&gt;&lt;a href="http://domaindrivendesign.org/books/#DDD" target="_blank"&gt;Domain-Driven Design, Tackling Complexity in the Heart of Software&lt;/a&gt;, de Eric Evans.&lt;br /&gt;&lt;a href="http://domaindrivendesign.org/books/#DDD_apply" target="_blank"&gt;Applying Domain-Driven Design and Patterns: With Examples in C# and .NET&lt;/a&gt;, de Jimmy Nilsson&lt;br /&gt;&lt;a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470147563.html" target="_blank"&gt;.NET Domain-Driven Design with C#&lt;/a&gt;, Problem, Design, Solution, de Tim McCarthy. (Hay &lt;a href="http://blogs.interknowlogy.com/timmccarthy/category/152.aspx" target="_blank"&gt;una sección&lt;/a&gt; en el blog de Tim dedicado a este libro).&lt;/p&gt; &lt;p&gt;Pueden bajar libremente&lt;/p&gt; &lt;p&gt;&lt;a href="http://domaindrivendesign.org/books/#DDD_quickly" target="_blank"&gt;Domain-Driven Design Quickly&lt;/a&gt;&lt;/p&gt; &lt;p&gt;desde &lt;a href="http://www.infoq.com/minibooks/domain-driven-design-quickly" target="_blank"&gt;InfoQ&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1647691" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Domain-Driven+Design/default.aspx">Domain-Driven Design</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/DDD/default.aspx">DDD</category></item><item><title>Un problema de sintaxis en Java</title><link>http://msmvps.com/blogs/lopez/archive/2008/08/26/un-problema-de-sintaxis-en-java.aspx</link><pubDate>Tue, 26 Aug 2008 10:08:56 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1645808</guid><dc:creator>lopez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1645808</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/08/26/un-problema-de-sintaxis-en-java.aspx#comments</comments><description>&lt;p&gt;Este texto ha sido &amp;quot;robado&amp;quot; sin vergüenza, del post&lt;/p&gt; &lt;p&gt;&lt;a title="A Java Syntax Quirk" href="http://blog.uncommons.org/2008/08/24/a-java-syntax-quirk/"&gt;A Java Syntax Quirk&lt;/a&gt;&lt;/p&gt; &lt;p&gt;de &lt;a href="http://www.dandyer.co.uk/" target="_blank"&gt;Dan Dyer&lt;/a&gt; que a su vez lo robó de otro post de Daniel Futtorovic. Este es un programa compilable Java:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3bf6e875-63f1-4166-aa9d-eb5c22af68f0" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Oddity
{
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; main(String[] args)
    {
        http:&lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt;blog.uncommons.org&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;        System.out.println(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Why is the URL allowed above?&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
    }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;¿Pueden ver por qué compila?&lt;/p&gt;
&lt;p&gt;¿Es posible algo así en C#?&lt;/p&gt;
&lt;p&gt;Encontré el enlace gracias al twitter de &lt;a href="http://twitter.com/ekabanov" target="_blank"&gt;@ekabanov&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1645808" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category></item><item><title>Enlaces y noticias</title><link>http://msmvps.com/blogs/lopez/archive/2008/07/24/enlaces-y-noticias.aspx</link><pubDate>Thu, 24 Jul 2008 11:48:44 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641989</guid><dc:creator>lopez</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1641989</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/07/24/enlaces-y-noticias.aspx#comments</comments><description>&lt;p&gt;Hay varios temas de los que quisiera bloguear más en detalle. Pero vaya hoy una lista de enlaces y comentarios cortos:&lt;/p&gt; &lt;p&gt;Primero de todo, tenemos nuevos Microsoft MVPs por aquí en Argentina, felicitaciones a &lt;a title="Rodolfo Finochietti" href="http://weblogs.shockbyte.com.ar/rodolfof/archive/2008/07/01/mvp-award-in-client-application-development.aspx"&gt;Rodolfo Finochietti&lt;/a&gt;, &lt;a title="archi" href="http://www.clariusconsulting.net/blogs/pga/archive/2008/07/01/77156.aspx"&gt;Pablo Galiano&lt;/a&gt;, y al pibe &lt;a href="http://blogs.southworks.net/mwoloski/2008/07/02/microsoft-mvp-award/" target="_blank"&gt;Matías Woloski&lt;/a&gt;. El bueno de Finochietti visita de vez en cuando este blog, y deja comentarios, por ejemplo, sobre programación funcional&amp;nbsp;y el lenguaje Cat. Tenemos varios intereses en común, como el estudio de lenguajes, compiladores, y compartimos la afición por la historia de las matemáticas. &lt;/p&gt; &lt;p&gt;Si se interesan en Smalltalk, es interesante &lt;a href="http://www.outbacksoftware.com/smalltalk/smalltalk.html" target="_blank"&gt;The Smalltalk programming language&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Gracias al bueno de Martin Salias, que me avisó de este texto en la web&amp;nbsp;&lt;a title="The Early History of Smalltalk" href="http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html"&gt;The Early History of Smalltalk&lt;/a&gt;&amp;nbsp;de Alan Kay (yo había anunciado una versión en PDF en &lt;a title="La historia de Smalltalk" href="http://msmvps.com/blogs/lopez/archive/2008/06/26/la-historia-de-smalltalk.aspx"&gt;La historia de Smalltalk&lt;/a&gt;). Es un &amp;quot;DEBESERLEIDO&amp;quot; por todo aquel que esté realmente interesado en la programación. Uno debe conocer la historia de las ideas, para realmente entender la situación actual tanto de ideas, como de tecnologías, y para tener un &amp;quot;grasp&amp;quot; de lo que podría venir.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.modumobile.com/#/modu_story/" target="_blank"&gt;Modu&lt;/a&gt;: gracias al twitter de &lt;a href="http://twitter.com/parancibia" target="_blank"&gt;@parancibia&lt;/a&gt;, vean este mobile modular. Muy interesante el concepto.&lt;/p&gt; &lt;p&gt;De vez en cuando, &lt;a href="http://www.directionsonmicrosoft.com/" target="_blank"&gt;Microsoft Directions&lt;/a&gt; publica un artículo público. Lean &lt;a href="http://www.directionsonmicrosoft.com/sample/DOMIS/update/2008/07jul/0708spsad.htm" target="_blank"&gt;Software Plus Services and Developers&lt;/a&gt;. ¿The next big thing?&lt;/p&gt; &lt;p&gt;Dentro del proyecto NHContrib, de herramientas para NHibernate, existe NHibernate.LINQ, que permite usar LINQ sobre NHibernate. Vean ahora lo que se hizo con Silverligh en &lt;a href="http://wildermuth.com/2008/07/20/Silverlight_2_NHibernate_LINQ_==_Sweet"&gt;Silverlight 2 + NHibernate.LINQ == Sweet&lt;/a&gt;&amp;nbsp;y el ejemplo de &lt;a title="nhibernat" href="http://www.silverlightdata.com/simple/nhibernate.aspx"&gt;nhibernate con Northwind&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Para aprender NHibernate &lt;a title="NHibernate - Relational Persistence for Idiomatic .NET" href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/"&gt;NHibernate - Relational Persistence for Idiomatic .NET&lt;/a&gt;. Si quieren contribuir al proyecto &lt;a title="hibernate.org - Getting Started with the NHibernate Source Code" href="http://www.hibernate.org/428.html"&gt;hibernate.org - Getting Started with the NHibernate Source Code&lt;/a&gt;. Si tienen dudas, ver &lt;a href="http://groups.google.com/group/NHibernate-Hispano" target="_blank"&gt;la lista de NHibernate Hispano&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Siguiendo con LINQ, leo cómo usar un DataContext en memoria, esta vez desde ASP.NET MVC, en &lt;a href="http://weblogs.asp.net/stephenwalther/archive/2008/07/19/asp-net-mvc-tip-21-fake-the-data-context.aspx" target="_blank"&gt;ASP.NET MVC Tip #21 – Fake the Data Context&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Las aventuras de &lt;a href="http://www.hanselman.com/" target="_blank"&gt;Scott Hanselman&lt;/a&gt; para agregar un OpenSearch en sus páginas: &lt;a title="Adding OpenSearch to your website and getting in the Browser&amp;#39;s Search Box" href="http://www.hanselman.com/blog/AddingOpenSearchToYourWebsiteAndGettingInTheBrowsersSearchBox.aspx"&gt;Adding OpenSearch to your website and getting in the Browser&amp;#39;s Search Box&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/stevecla01/" target="_blank"&gt;Steve Clayton&lt;/a&gt; está en Software + Services en Microsoft. Lean &lt;a href="http://blogs.msdn.com/stevecla01/archive/2008/07/21/my-us-tour-closes-out-with-ozzie.aspx" target="_blank"&gt;su encuentro con Ray Ozzie&lt;/a&gt;, no puede decir todo, pero S+S se viene cada vez más. El tiempo dirá qué será eso.&lt;/p&gt; &lt;p&gt;No llegué a tiempo para anunciarla. Diego Jancic realizó una encuesta en línea sobre cómo programamos. &lt;a href="http://blog.darioquintana.com.ar/2008/07/18/resultado-de-encuesta-como-programamos/" target="_blank"&gt;Vean los resultados&lt;/a&gt; en &lt;a href="http://blog.darioquintana.com.ar" target="_blank"&gt;el blog de Darío Quintana&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;El Composite Application Guidance para WPF tiene &lt;a href="http://msdn.microsoft.com/en-us/library/cc707819.aspx" target="_blank"&gt;su nueva página en MSDN&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codinghorror.com/blog/" target="_blank"&gt;Jeff Atwood&lt;/a&gt; tiene algunas ideas interesantes y discutibles sobre &lt;a href="http://www.codinghorror.com/blog/archives/001152.html" target="_blank"&gt;no normalizar base de datos&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/LearningOpportunityNETTerrariumIsBack.aspx" target="_blank"&gt;.NET Terrarium está de vuelta&lt;/a&gt;!&lt;/p&gt; &lt;p&gt;Me interesó el &lt;a href="http://jackrabbit.apache.org/jackrabbit-architecture.html" target="_blank"&gt;proyecto Jackrabbit&lt;/a&gt;, tengo que estudiar más en detalle la especificación Content Repository API de la &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr170/index.html" target="_blank"&gt;JSR-170&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.twitter.com/2008/07/finding-perfect-match.html" target="_blank"&gt;Twitter adquiriendo a Summize&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Y hay que visitar y usar&amp;nbsp;&lt;a href="http://www.emergingtechs.com/posts/15-online-tools-you-will-come-love-tech" target="_blank"&gt;10 herramientas para un tech&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Nuevo &lt;a href="http://blogs.msdn.com/gardel/" target="_blank"&gt;Blog de la comunidad MSDN en español&lt;/a&gt;. Gracias a &lt;a href="http://blogs.msdn.com/masaez/" target="_blank"&gt;Miguel Angel Saez&lt;/a&gt; por el aviso.&lt;/p&gt; &lt;p&gt;Si alguien necesita acá está: &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=FiniteStateMachinesPhyshunandSpring" target="_blank"&gt;Implementing Finite State Machines with Physhun and Spring&lt;/a&gt; (en Java)&lt;/p&gt; &lt;p&gt;Cada vez más lenguajes dinámicos sobre máquinas virtuales, ver &lt;a href="http://www.alittlemadness.com/2008/07/15/java-6-using-python-via-the-new-scripting-engine/" target="_blank"&gt;Java 6: Using Python via the new Scripting Engine&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Interesante código y artículo, sobre un tema que se necesita conocer: &lt;a href="http://www.codeproject.com/KB/aspnet/SingleSignon.aspx" target="_blank"&gt;Single Sign-on in ASP.NET and Other Platforms&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Para entender la historia de MVC: &lt;a href="http://heim.ifi.uio.no/trygver/2003/javazone-jaoo/MVC_pattern.pdf" target="_blank"&gt;The Model-View-Controller, Its past and present&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Más sobre Model-View-Controller, Model-View-Presenter, y Presentation-Abstraction-Control en &lt;a href="http://ctrl-shift-b.blogspot.com/2007/08/interactive-application-architecture.html" target="_blank"&gt;Interactive Application Architecture Patterns&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;MVC en ASP.NET en &lt;a title="ASP.NET MVC - The Official Microsoft ASP.NET Site" href="http://www.asp.net/mvc/"&gt;ASP.NET MVC - The Official Microsoft ASP.NET Site&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Una interesante comparación de David Hayden&amp;nbsp;&lt;a href="http://www.pnpguidance.net/Post/ASPNETMVCFrameworkComparedWebClientSoftwareFactoryWCSF.aspx" target="_blank"&gt;ASP.NET MVC Framework Compared To Web Client Software Factory ( WCSF )&lt;/a&gt;&lt;/p&gt; &lt;p&gt;¿Necesitan un manejar un proyecto de software? No lo uso, vería el open source Trac Project, via web en Java (gracias a J. Franco, por este enlace). Al parecer, trabaja con &lt;a href="http://subversion.tigris.org/" target="_blank"&gt;Subversion&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;¿Necesitan open source en Java? De todo en &lt;a title="http://java-source.net/" href="http://java-source.net/"&gt;http://java-source.net/&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Off topic total: mi mejor post hasta ahora del 2008, con gráfica incluida, en &lt;a title="Posmopolitan" href="http://ajlopez.zoomblog.com/archivo/2008/07/08/posmopolitan.html"&gt;Posmopolitan&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;br /&gt;&lt;a title="http://friendfeed.com/ajlopez" href="http://friendfeed.com/ajlopez"&gt;http://friendfeed.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641989" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Smalltalk/default.aspx">Smalltalk</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Enlaces+y+Noticias/default.aspx">Enlaces y Noticias</category></item><item><title>Libro Foundation of Programming, listo para bajar</title><link>http://msmvps.com/blogs/lopez/archive/2008/06/25/libro-foundation-of-programming-listo-para-bajar.aspx</link><pubDate>Wed, 25 Jun 2008 15:48:54 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1637596</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1637596</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/06/25/libro-foundation-of-programming-listo-para-bajar.aspx#comments</comments><description>&lt;p&gt;Gracias a Cladio M.E. Bastos Iorio de &lt;a href="http://www.blumer.com.ar"&gt;http://www.blumer.com.ar&lt;/a&gt; me entero de la aparición de este libro. Claudio posteó la información en una lista pública del MUG de Argentina (&lt;a href="http://www.mug.org.ar/"&gt;http://www.mug.org.ar/&lt;/a&gt; ):&lt;/p&gt; &lt;p&gt;&lt;a title="Foundations of Programming Ebook" href="http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx"&gt;Foundations of Programming Ebook&lt;/a&gt;&lt;/p&gt; &lt;h6&gt;&amp;nbsp;&lt;/h6&gt; &lt;blockquote&gt; &lt;p&gt;I&amp;#39;m excitted to finally release the official, and completely free, Foundations of Programming EBook. This essentially contains all 9 Foundation parts including a conclusion and some typical book fluff (table of content, acknowledgement and so on). A number of spelling errors were corrected, along with some small technical changes and clarifications - largely based on feedback, so thanks for everyone who provided it! Otherwise it&amp;#39;s exactly the same as what&amp;#39;s been posted here over the past several months. &lt;p&gt;Download it from &lt;a href="http://codebetter.com/files/folders/codebetter_downloads/entry179694.aspx"&gt;http://codebetter.com/files/folders/codebetter_downloads/entry179694.aspx&lt;/a&gt; &lt;p&gt;&lt;img src="http://www.openmymind.net/cover.jpg" alt="" /&gt;  &lt;p&gt;If the above link fails, you can also get it from &lt;a href="http://www.openmymind.net/FoundationsOfProgramming.pdf"&gt;http://www.openmymind.net/FoundationsOfProgramming.pdf&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Acabo de leer el índice, y de leer algunos capítulos rápidamente. Es muy interesante los temas que toca, y parece bien encarados. El bueno de Karl Seguin ha hecho un magnífico trabajo, colocando en un solo libro temas que nos tocan en el desarrollo de software de todos los días. Si bien está algo orientado a .NET, es totalmente aprovechable en otras tecnologías, como Java. El texto había ido apareciendo en los últimos meses, en forma de posts, y revisado por colegas, en general dentro del movimiento ALT.NET, así que el trabajo de Seguin se ha enriquecido con los comentarios de la comunidad de desarrollo. &lt;p&gt;Sobre el autor &lt;blockquote&gt; &lt;p&gt;Karl Seguin is a developer at Fuel Industries, a former Microsoft MVP, a member of the influential CodeBetter.com community and an editor for DotNetSlackers. He has written numerous articles and is an active member of various Microsoft public newsgroups. He lives in Ottawa, Ontario Canada.  &lt;p&gt;His personal webpage is: &lt;a href="http://www.openmymind.net/"&gt;http://www.openmymind.net/&lt;/a&gt;  &lt;p&gt;His blog, along with that of a number of distinguished professionals, is located at: &lt;a href="http://www.codebetter.com/"&gt;http://www.codebetter.com/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Enumero algunos temas tratados: &lt;p&gt;- El movimiento ALT.NET, enumerando y desarrollando sus pilares, algo confrontados con la visión MSDN &lt;p&gt;- Domain-Driven Design, explicando los términos, y justamente, explicando cuándo usarlo&amp;nbsp;y cuándo no, cuál es el contraste con una aproximación Data-Centric. &lt;p&gt;- Persistencia, algo con lo que lidiamos en prácticamente cada proyecto. &lt;p&gt;- Dependency Injection, una de las mejores técnicas inventadas, desde que alguien dijo que el pan tenía que venir en rebanadas. &lt;p&gt;- Unit Testing, indispensable en el bolso de la desarrolladora y en el bolsillo del caballero desarrollador. Hay días en los que pienso que hasta el Hello World de Kernighan y Ritchie debería tener su Unit Test. &lt;p&gt;- Object Relational Mappers, todo un capítulo explicando la idea y algunas implementaciones, usando NHibernate. &lt;p&gt;- Manejo de memoria, un back to basics que veo necesario, como comento en mis cursos. &lt;p&gt;- Excepciones, otro back to basics que se debe explicar. &lt;p&gt;- Proxy, tengo que ver en detalle este capítulo, para ver hasta dónde llega la idea del autor. &lt;p&gt;El libro también viene acompañado de código, con ejemplos de los temas tratados, por ejemplo, las formas de usar NHibernate, documentando sus características. Lo pueden bajar desde: &lt;p&gt;&lt;a href="http://openmymind.net/CodeBetter.Foundations.zip"&gt;http://openmymind.net/CodeBetter.Foundations.zip&lt;/a&gt; &lt;p&gt;Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1637596" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Libros/default.aspx">Libros</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/VB.NET/default.aspx">VB.NET</category></item><item><title>Curso de JavaServer Pages gratuito en línea</title><link>http://msmvps.com/blogs/lopez/archive/2008/06/24/curso-de-javaserver-pages-gratuito-en-l-237-nea.aspx</link><pubDate>Tue, 24 Jun 2008 18:33:09 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1637272</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1637272</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/06/24/curso-de-javaserver-pages-gratuito-en-l-237-nea.aspx#comments</comments><description>&lt;p&gt;Desde hace unos días, va tomando forma mi curso en línea de JavaServer Pages:&lt;/p&gt; &lt;p&gt;&lt;a title="http://ajlopez.net/cursos/Course.php?Id=5" href="http://ajlopez.net/cursos/Course.php?Id=5"&gt;http://ajlopez.net/cursos/Course.php?Id=5&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.todocontenidos.com/ajlearning/ajlearningjsp.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Está basado en el servidor Tomcat, pero creo que lo pueden aprovechar para cualquier contenedor web que soporte JSP.&lt;/p&gt; &lt;p&gt;Como otros cursos que están ahí, nace de los cursos presenciales que doy cada semana. Digo en la introducción:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;En los noventa, aparece de la mano de Sun el lenguaje Java, que es más que un lenguaje, es todo un conjunto de tecnologías. Como lenguaje de uso general, tiene el soporte de una robusta y amplia librería de clases. Al estar implementado con una máquina virtual, sus programas son multiplataforma: pueden ejecutarse desde distintos entornos operativos, donde haya una implementación de la máquina virtual de Java. &lt;br /&gt;&lt;br /&gt;En este sitio ya estoy publicando las primeras lecciones del curso &lt;a href="http://ajlopez.net/cursos/Course.php?Id=1"&gt;Introducción a Java&lt;/a&gt;. Quisiera aprovechar este curso de JavaServer Pages para mostrar lo que se puede hacer con Java, más allá de los programas de consola o las ventanas gráficas. Internet, y la web en particular, hoy están en todos lados. JSP nos permite hacer aplicaciones web, con interfaces de páginas dinámicas, y aprovechar al mismo tiempo toda la potencia de Java. &lt;br /&gt;&lt;br /&gt;Estas lecciones son un pasaje a escrito de las que doy en mis cursos presenciales. Espero que les resulten útiles. Un curso a distancia no es lo mismo que un curso presencial, donde uno puede interactuar con el instructor y sus compañeros. Pero también tiene sus ventajas, como la falta de horario, y el avance a su propio ritmo. &lt;br /&gt;&lt;br /&gt;Estas son las primeras páginas del curso. Todos los días publico una lección adicional (no necesariamente de este curso). Mantengo una lista de lecciones publicadas en mi post: &lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/04/08/a-lesson-a-day-keeps-the-doctor-away.aspx"&gt;A lesson a day keeps the doctor away&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Espero que les sirva. Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1637272" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Cursos/default.aspx">Cursos</category></item><item><title>Charla gratuita sobre generación de código</title><link>http://msmvps.com/blogs/lopez/archive/2008/06/06/charla-gratuita-sobre-generaci-243-n-de-c-243-digo.aspx</link><pubDate>Fri, 06 Jun 2008 13:48:42 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1632327</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1632327</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/06/06/charla-gratuita-sobre-generaci-243-n-de-c-243-digo.aspx#comments</comments><description>&lt;p&gt;Casi todos los cursos y charlas que doy, termino mencionando generación de código, desde un modelo, como una solución pragmática a varios problemas que tenemos al desarrollar sistemas. El lunes que viene, doy una charla gratuita sobre el tema, en el &lt;a href="http://www.clubdeprogramadores.com" target="_blank"&gt;Club de Programadores&lt;/a&gt;, acá en Buenos Aires.&lt;/p&gt; &lt;p&gt;Más información e inscripción:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.clubdeprogramadores.com/cursos/CursoMuestra.php?Id=439" target="_blank"&gt;Curso Generacion de Código&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Objetivos&lt;/strong&gt;&lt;br /&gt;Durante la charla, examineremos el concepto de modelo independiente de la plataforma de un sistema, y mediante tecnologias de templates, generaremos codigo para gran parte de una aplicacion, en distintas tecnologias, como PHP, Java con JSP, .NET con ASP.NET, contra MySql o SQL Server, usando distintas estrategias de persistencia, como procedimientos almacenados o NHibernate. Todo basado en un mismo modelo, con distintas plantillas de generacion de codigo, manejados desde el proyecto de codigo abierto &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;.  &lt;p&gt;&lt;strong&gt;Plan de Estudio&lt;/strong&gt;&lt;br /&gt;- Modelo independiente de la plataforma&lt;br /&gt;- Generacion de artefactos de texto con logica y plantillas definibles por cada usuario (no produce algo fijo, sino codigo como el que hubiéramos producido en nuestro equipo de programacion)&lt;br /&gt;- Capacidad de ejecutar varias tareas adicionales (compilacion, instalacion en la base, ....)&lt;br /&gt;- Organizacion de esa tareas de generacion y adicionales en forma automatica y repetible&lt;br /&gt;- Adaptacion a varias tecnologias destino  &lt;p&gt;Lo mío es un apostolado, espero que puedan &amp;quot;ver la luz&amp;quot; .... :-) ;-) &lt;p&gt;Hay bastante sobre el tema publicado en este blog en: &lt;p&gt;&lt;a title="AjGenesis" href="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx"&gt;AjGenesis&lt;/a&gt;&lt;br /&gt;&lt;a title="Generaci&amp;oacute;n de C&amp;oacute;digo" href="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx"&gt;Generación de Código&lt;/a&gt; &lt;p&gt;Artículo inicial a leer  &lt;p&gt;&lt;a title="Sobre la generaci&amp;oacute;n de c&amp;oacute;digo" href="http://msmvps.com/blogs/lopez/archive/2007/08/02/sobre-la-generaci-243-n-de-c-243-digo.aspx"&gt;Sobre la generación de código&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Algunos enlaces a recursos en la web: &lt;p&gt;&lt;a href="http://del.icio.us/ajlopez/codegeneration"&gt;http://del.icio.us/ajlopez/codegeneration&lt;/a&gt; &lt;p&gt;Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1632327" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Generaci_26002300_243_3B00_n+de+C_26002300_243_3B00_digo/default.aspx">Generaci&amp;#243;n de C&amp;#243;digo</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</category></item><item><title>Libros gratis de computación en Internet</title><link>http://msmvps.com/blogs/lopez/archive/2008/05/20/libros-gratis-de-computaci-243-n-en-internet.aspx</link><pubDate>Tue, 20 May 2008 10:21:17 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1624869</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1624869</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/05/20/libros-gratis-de-computaci-243-n-en-internet.aspx#comments</comments><description>&lt;p&gt;ATENCION, actualización: no sé cuál es el estado legal de este sitio, ver&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.pdfchm.com/terms/" href="http://www.pdfchm.com/terms/"&gt;http://www.pdfchm.com/terms/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;donde se amparan en legislación de Rusia. ¿Alguien tiene información al respecto? ¿Enlaces de &amp;quot;complaints&amp;quot; de las editoriales? No encontré nada... No sé como usan &lt;a href="http://www.postget.net"&gt;www.postget.net&lt;/a&gt; como repositorio, sin que nadie les diga nada....&lt;/p&gt; &lt;p&gt;Mientras, alguien preguntó en Yahoo Answers, sobre sitios como éste:&lt;/p&gt; &lt;p&gt;&lt;a title="http://answers.yahoo.com/question/index?qid=20070904044624AANWDPf" href="http://answers.yahoo.com/question/index?qid=20070904044624AANWDPf"&gt;http://answers.yahoo.com/question/index?qid=20070904044624AANWDPf&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Sigue por ahora el post original:&lt;/p&gt; &lt;p&gt;Desde hace unas semanas estoy usando los servicios de&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.pdfchm.com"&gt;http://www.pdfchm.com&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/pdfchm.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Hay de otros temas, pero en mi perfil, aparecen &amp;quot;computer books&amp;quot; de todo tipo. Semanalmente, me envían por email una lista de novedades, estas son las de esta semana:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Dear Angel Lopez.  &lt;p&gt;You have received this letter because are signed on subscription.  &lt;p&gt;In the text presented below, weekly news of the site www.pdfchm.com according to your current subscription:  &lt;p&gt;Neural Networks and Pattern Recognition (Academic Press, 1998, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10823"&gt;http://www.pdfchm.com/book/?book=10823&lt;/a&gt;  &lt;p&gt;Scaling Software Agility: Best Practices for Large Enterprises (The Agile Software Development Series) (Addison Wesley, 2007, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10826"&gt;http://www.pdfchm.com/book/?book=10826&lt;/a&gt;  &lt;p&gt;Beginning VB 2008 Databases: From Novice to Professional (Apress, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10806"&gt;http://www.pdfchm.com/book/?book=10806&lt;/a&gt;  &lt;p&gt;Google Maps Mashups with Google Mapplets (Firstpress) (Apress, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10797"&gt;http://www.pdfchm.com/book/?book=10797&lt;/a&gt;  &lt;p&gt;Packet Forwarding Technologies (Auerbach Publications, 2007, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10800"&gt;http://www.pdfchm.com/book/?book=10800&lt;/a&gt;  &lt;p&gt;Full Frontal PR: Getting People Talking about You, Your Business, or Your Product (Bloomberg Press, 2003, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10831"&gt;http://www.pdfchm.com/book/?book=10831&lt;/a&gt;  &lt;p&gt;Putting Investors First: Real Solutions for Better Corporate Governance (Bloomberg Press, 2003, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10830"&gt;http://www.pdfchm.com/book/?book=10830&lt;/a&gt;  &lt;p&gt;The Value Factor: How Global Leaders Use Information for Growth and Competitive Advantage (Bloomberg Press, 2004, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10832"&gt;http://www.pdfchm.com/book/?book=10832&lt;/a&gt;  &lt;p&gt;What Can You Do with a Major in Biology: Real people. Real jobs. Real rewards (Cliffs Notes, 2005, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10816"&gt;http://www.pdfchm.com/book/?book=10816&lt;/a&gt;  &lt;p&gt;What Can You Do with a Major in Business: Real people. Real jobs. Real rewards (Cliffs Notes, 2005, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10817"&gt;http://www.pdfchm.com/book/?book=10817&lt;/a&gt;  &lt;p&gt;DVD Authoring and Production (CMP Books, 2001, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10827"&gt;http://www.pdfchm.com/book/?book=10827&lt;/a&gt;  &lt;p&gt;Multiplayer Game Programming w/CD (Prima Tech&amp;#39;s Game Development) (Course Technology PTR, 2002, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10822"&gt;http://www.pdfchm.com/book/?book=10822&lt;/a&gt;  &lt;p&gt;Renaissance and Reformation: Almanac Edition 1. (Gale, 2002, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10803"&gt;http://www.pdfchm.com/book/?book=10803&lt;/a&gt;  &lt;p&gt;Working Identity: Unconventional Strategies for Reinventing Your Career (Harvard Business School, 2003, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10801"&gt;http://www.pdfchm.com/book/?book=10801&lt;/a&gt;  &lt;p&gt;Linux Transfer for Windows Power Users: Getting Started with Linux for the Desktop (Hentzenwerke Publishing, 2004, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10824"&gt;http://www.pdfchm.com/book/?book=10824&lt;/a&gt;  &lt;p&gt;Genetic and Evolutionary Computation for Image Processing and Analysis (EURASIP Book Series on Signal Processing and Communications) (Hindawi Publishing, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10836"&gt;http://www.pdfchm.com/book/?book=10836&lt;/a&gt;  &lt;p&gt;Good Cat!: A Proven Guide to Successful Litter Box Use and Problem Solving (Howell Book House, 2004, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10821"&gt;http://www.pdfchm.com/book/?book=10821&lt;/a&gt;  &lt;p&gt;IBM Pseries Sizing And Capacity Planning: A Practical Guide (IBM Redbooks) (IBM Press, 2004, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10839"&gt;http://www.pdfchm.com/book/?book=10839&lt;/a&gt;  &lt;p&gt;The Edgar Online Guide to Decoding Financial Statements: Tips, Tools, and Techniques for Becoming a Savvy Investor (J. Ross Publishing, Inc, 2004, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10810"&gt;http://www.pdfchm.com/book/?book=10810&lt;/a&gt;  &lt;p&gt;The IAF Handbook of Group Facilitation: Best Practices from the Leading Organization in Facilitation (Jossey-Bass, 2005, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10798"&gt;http://www.pdfchm.com/book/?book=10798&lt;/a&gt;  &lt;p&gt;Information Science in Theory and Practice (K. G. Saur, 2004, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10820"&gt;http://www.pdfchm.com/book/?book=10820&lt;/a&gt;  &lt;p&gt;Google Apps Hacks (Make Books, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10835"&gt;http://www.pdfchm.com/book/?book=10835&lt;/a&gt;  &lt;p&gt;How to Do Everything with YouTube (McGraw-Hill, 2007, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10841"&gt;http://www.pdfchm.com/book/?book=10841&lt;/a&gt;  &lt;p&gt;Application Design for Wearable Computing (Synthesis Lectures on Mobile and Pervasive Computing) (Morgan and Claypool Publishers, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10805"&gt;http://www.pdfchm.com/book/?book=10805&lt;/a&gt;  &lt;p&gt;Controlling Energy Demands in Mobile Computing Systems (Synthesis Lectures on Mobile and Pervasive Computing) (Morgan and Claypool Publishers, 2007, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10807"&gt;http://www.pdfchm.com/book/?book=10807&lt;/a&gt;  &lt;p&gt;GPU-Based Techniques for Global Illumination Effects (Synthesis Lectures on Computer Graphics) (Morgan and Claypool Publishers, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10829"&gt;http://www.pdfchm.com/book/?book=10829&lt;/a&gt;  &lt;p&gt;Light Field Sampling (Synthesis Lectures on Image, Video, and Multimedia Processing) (Morgan and Claypool Publishers, 2006, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10799"&gt;http://www.pdfchm.com/book/?book=10799&lt;/a&gt;  &lt;p&gt;RFID Explained (Synthesis Lectures on Mobile and Pervasive Computing) (Morgan and Claypool Publishers, 2006, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10804"&gt;http://www.pdfchm.com/book/?book=10804&lt;/a&gt;  &lt;p&gt;Big Book of Windows Hacks (O&amp;#39;Reilly, 2007, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10833"&gt;http://www.pdfchm.com/book/?book=10833&lt;/a&gt;  &lt;p&gt;Make Projects: Small Form Factor PCs (O&amp;#39;Reilly, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10825"&gt;http://www.pdfchm.com/book/?book=10825&lt;/a&gt;  &lt;p&gt;Managing Software Development with Trac and Subversion (Packt Publishing, 2007, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10809"&gt;http://www.pdfchm.com/book/?book=10809&lt;/a&gt;  &lt;p&gt;Network Administration with FreeBSD (Packt Publishing, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10808"&gt;http://www.pdfchm.com/book/?book=10808&lt;/a&gt;  &lt;p&gt;PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide (Peachpit Press, 2007, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10840"&gt;http://www.pdfchm.com/book/?book=10840&lt;/a&gt;  &lt;p&gt;Professional SQL Server 2000 DTS (Data Transformation Service) (Peer Information Inc, 2000, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10813"&gt;http://www.pdfchm.com/book/?book=10813&lt;/a&gt;  &lt;p&gt;Running Xen: A Hands-On Guide to the Art of Virtualization (Prentice Hall, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10837"&gt;http://www.pdfchm.com/book/?book=10837&lt;/a&gt;  &lt;p&gt;Special Edition Using Microsoft Windows Vista (2nd Edition) (Que, 2008, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10828"&gt;http://www.pdfchm.com/book/?book=10828&lt;/a&gt;  &lt;p&gt;OCP Instructors Guide for Oracle DBA Certification: A Study Guide to Advanced Oracle Certified Professional Database Administration Techniques (Rampant Techpress, 2004, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10834"&gt;http://www.pdfchm.com/book/?book=10834&lt;/a&gt;  &lt;p&gt;Teach Yourself Cobol in 21 Days (Sams Teach Yourself) (Sams Publishing, 1997, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10838"&gt;http://www.pdfchm.com/book/?book=10838&lt;/a&gt;  &lt;p&gt;Current Pediatric Therapy (Current Therapy) (Saunders, 2006, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10802"&gt;http://www.pdfchm.com/book/?book=10802&lt;/a&gt;  &lt;p&gt;Dialogue Processing in Spoken Language Systems: ECAI&amp;#39;96, Workshop, Budapest, Hungary, August 13, 1996, Revised Papers (Springer, 1997, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10818"&gt;http://www.pdfchm.com/book/?book=10818&lt;/a&gt;  &lt;p&gt;Software Engineering with Reusable Components (Springer, 2001, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10815"&gt;http://www.pdfchm.com/book/?book=10815&lt;/a&gt;  &lt;p&gt;MATLAB Programming for Engineers (Thomson Delmar Learning, 2001, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10819"&gt;http://www.pdfchm.com/book/?book=10819&lt;/a&gt;  &lt;p&gt;Security Modeling And Analysis of Mobile Agent Systems (Electrical and Computer Engineering) (World Scientific Publishing, 2006, English)&lt;br /&gt;&lt;a href="http://www.pdfchm.com/book/?book=10814"&gt;http://www.pdfchm.com/book/?book=10814&lt;/a&gt;  &lt;p&gt;With best regards, PDFCHM Team. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;To operate your subscription you can login into your account on the site &lt;a href="http://www.pdfchm.com/"&gt;http://www.pdfchm.com/&lt;/a&gt;  &lt;p&gt;Algunos libros más, en mi post no técnico, orientado a otros temas y libros que me interesaron:  &lt;p&gt;&lt;a title="Libros gratis para bajarse en Internet" href="http://ajlopez.zoomblog.com/archivo/2008/05/14/libros-gratis-para-bajarse-en-Internet.html"&gt;Libros gratis para bajarse en Internet&lt;/a&gt;  &lt;p&gt;¿Tienen otros sitios como éste?  &lt;p&gt;Nos leemos!  &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1624869" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Libros/default.aspx">Libros</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item><item><title>A lesson a day keeps the doctor away</title><link>http://msmvps.com/blogs/lopez/archive/2008/04/08/a-lesson-a-day-keeps-the-doctor-away.aspx</link><pubDate>Tue, 08 Apr 2008 10:33:21 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1578130</guid><dc:creator>lopez</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1578130</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/04/08/a-lesson-a-day-keeps-the-doctor-away.aspx#comments</comments><description>&lt;p&gt;Ayer publiqué las primeras lecciones del &lt;a href="http://ajlopez.net/cursos/Course.php?Id=1" target="_blank"&gt;curso de introducción a Java&lt;/a&gt; en línea. En este post, que iré actualizando, quiero listar las lecciones que voy agregando a cada curso. Este tipo de post me permite tener una evidencia de avance. &lt;/p&gt; &lt;p&gt;Actualización: 21 de Abril, aparecieron las primeras lecciones&amp;nbsp;del &lt;a href="http://ajlopez.net/cursos/Course.php?Id=4" target="_blank"&gt;curso de Sitios con PHP y MySQL&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Acá van las primeras lecciones agregadas:&lt;/p&gt; &lt;p&gt;2008-04-08 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=30" target="_blank"&gt;El lenguaje Java&lt;/a&gt;&lt;br /&gt;2008-04-08 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=31" target="_blank"&gt;Java y Unicode&lt;/a&gt;&lt;br /&gt;2008-04-08 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=32" target="_blank"&gt;Comentarios&lt;/a&gt;&lt;br /&gt;2008-04-09 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=13" target="_blank"&gt;Variables y Tipos&lt;/a&gt;&lt;br /&gt;2008-04-10 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=33" target="_blank"&gt;Tipos de Datos Enteros&lt;/a&gt;&lt;br /&gt;2008-04-11 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=34" target="_blank"&gt;Tipos Reales&lt;/a&gt;&lt;br /&gt;2008-04-12 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=35" target="_blank"&gt;Caracteres&lt;/a&gt;&lt;br /&gt;2008-04-13 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=36" target="_blank"&gt;Operando con bits&lt;/a&gt;&lt;br /&gt;2008-04-14 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=14" target="_blank"&gt;Sentencias y comandos&lt;/a&gt;&lt;br /&gt;2008-04-15 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=42" target="_blank"&gt;La sentencia if-else&lt;/a&gt;&lt;br /&gt;2008-04-16 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=43" target="_blank"&gt;Funciones matemáticas&lt;/a&gt;&lt;br /&gt;2008-04-17 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=44" target="_blank"&gt;Errores con operaciones enteras&lt;/a&gt;&lt;br /&gt;2008-04-17 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=45" target="_blank"&gt;Operaciones con reales&lt;/a&gt;&lt;br /&gt;2008-04-18 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=46" target="_blank"&gt;Problemas reales&lt;/a&gt;&lt;br /&gt;2008-04-18 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=47" target="_blank"&gt;Conversiones&lt;/a&gt;&lt;br /&gt;2008-04-19 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=48" target="_blank"&gt;Operaciones aritméticas&lt;/a&gt;&lt;br /&gt;2008-04-19 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=49" target="_blank"&gt;Más sobre operaciones aritméticas&lt;/a&gt;&lt;br /&gt;2008-04-19 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=50" target="_blank"&gt;Incrementar y decrementar&lt;/a&gt;&lt;br /&gt;2008-04-20 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=51" target="_blank"&gt;Tamaños de enteros&lt;/a&gt;&lt;br /&gt;2008-04-21 &lt;a href="http://ajlopez.net/cursos/Course.php?Id=4" target="_blank"&gt;Sitios con PHP y MySQL&lt;/a&gt;&lt;br /&gt;2008-04-21 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=38" target="_blank"&gt;Introducción a PHP&lt;/a&gt;&lt;br /&gt;2008-04-21 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=41" target="_blank"&gt;Qué es PHP&lt;/a&gt;&lt;br /&gt;2008-04-21 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=37" target="_blank"&gt;Primera página en PHP&lt;/a&gt;&lt;br /&gt;2008-04-21 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=40" target="_blank"&gt;Instalando PHP y MySQL&lt;/a&gt;&lt;br /&gt;2008-04-22 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=52" target="_blank"&gt;Relaciones&lt;/a&gt;&lt;br /&gt;2008-04-22 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=53" target="_blank"&gt;Valores booleanos&lt;/a&gt;&lt;br /&gt;2008-04-23 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=54" target="_blank"&gt;Cadenas de caracteres&lt;/a&gt;&lt;br /&gt;2008-04-23 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=55" target="_blank"&gt;Asignaciones&lt;/a&gt;&lt;br /&gt;2008-04-24 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=56" target="_blank"&gt;Precedencia y asociatividad de operadores&lt;/a&gt;&lt;br /&gt;2008-04-25 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=57" target="_blank"&gt;If anidados&lt;/a&gt;&lt;br /&gt;2008-04-26 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=58" target="_blank"&gt;El operador condicional&lt;/a&gt;&lt;br /&gt;2008-04-27 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=59" target="_blank"&gt;Múltiple decisión con switch&lt;/a&gt;&lt;br /&gt;2008-04-28 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=60" target="_blank"&gt;Alcance de variables&lt;/a&gt;&lt;br /&gt;2008-04-29 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=61" target="_blank"&gt;Ciclos con while y do-while&lt;/a&gt;&lt;br /&gt;2008-04-30 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=62" target="_blank"&gt;El gran comando for&lt;/a&gt;&lt;br /&gt;2008-05-01 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=63" target="_blank"&gt;Etiquetas, cortes y algo más&lt;/a&gt;&lt;br /&gt;2008-05-02 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=64" target="_blank"&gt;Retornando de métodos&lt;/a&gt;&lt;br /&gt;2008-05-03 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=15" target="_blank"&gt;Arreglos&lt;/a&gt;&lt;br /&gt;2008-05-04 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=65" target="_blank"&gt;Arreglos de objetos&lt;/a&gt;&lt;br /&gt;2008-05-05 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=66" target="_blank"&gt;Vectores de vectores&lt;/a&gt;&lt;br /&gt;2008-05-06 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=67" target="_blank"&gt;Un ejemplo de arreglos&lt;/a&gt;&lt;br /&gt;2008-05-07 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=2" target="_blank"&gt;Strings&lt;/a&gt;&lt;br /&gt;2008-05-08 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=68" target="_blank"&gt;Constructores de String y encapsulamiento&lt;/a&gt;&lt;br /&gt;2008-05-09 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=69" target="_blank"&gt;Métodos de String&lt;/a&gt;&lt;br /&gt;2008-05-10 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=70" target="_blank"&gt;Expresiones Regulares&lt;/a&gt;&lt;br /&gt;2008-05-11 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=71" target="_blank"&gt;Primer For&lt;/a&gt;&amp;nbsp;(PHP y MySQL)&lt;br /&gt;2008-05-12 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=72" target="_blank"&gt;Imprimiendo una expresión&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-13 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=73" target="_blank"&gt;Introducción al curso&lt;/a&gt; (JavaServer Pages)&lt;br /&gt;2008-05-13 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=74" target="_blank"&gt;Objetivos&lt;/a&gt; (JavaServer Pages)&lt;br /&gt;2008-05-13 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=75" target="_blank"&gt;Requisitos&lt;/a&gt; (JavaServer Pages)&lt;br /&gt;2008-05-14 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=76" target="_blank"&gt;El servidor Tomcat&lt;/a&gt; (JavaServer Pages)&lt;br /&gt;2008-05-15 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=77" target="_blank"&gt;Arrancando el Tomcat&lt;/a&gt; (JavaServer Pages)&lt;br /&gt;2008-05-16 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=78" target="_blank"&gt;Listando las aplicaciones&lt;/a&gt; (JavaServer Pages)&lt;br /&gt;2008-05-17 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=79" target="_blank"&gt;Imprimiendo con echo y comentarios&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-18 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=80" target="_blank"&gt;Usando tablas y funciones&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-19 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=81" target="_blank"&gt;Escribiendo y usando una función&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-20 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=82" target="_blank"&gt;Mezclando PHP y HTML&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-21 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=83" target="_blank"&gt;Usando un if&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-22&amp;nbsp;&lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=84" target="_blank"&gt;Usando variables globales&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-23 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=85" target="_blank"&gt;Arreglos&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-24 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=86" target="_blank"&gt;Agregando elementos&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-25 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=87" target="_blank"&gt;Los arreglos son asociativos&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-26 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=88" target="_blank"&gt;La función array&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-27 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=89" target="_blank"&gt;Ordenando arreglos&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-28 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=90" target="_blank"&gt;Arreglos de arreglos&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-29 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=91" target="_blank"&gt;Manejo de Formularios&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-30 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=92" target="_blank"&gt;Procesando datos de un formulario&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-05-31 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=93" target="_blank"&gt;Enviando por POST&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-01 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=94" target="_blank"&gt;Usando $_REQUEST&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-02 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=95" target="_blank"&gt;Introducción a Ajax&lt;/a&gt; (Ajax)&lt;br /&gt;2008-06-03 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=96" target="_blank"&gt;Enlaces&lt;/a&gt; (Ajax)&lt;br /&gt;2008-06-04 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=97" target="_blank"&gt;La configuración de PHP&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-05 &lt;a href="http://ajlopez.net/cursos/admin/LessonView.php?Id=98" target="_blank"&gt;Datos en las variables&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-06 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=99" target="_blank"&gt;Otros tipos de datos en formularios&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-07 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=9" target="_blank"&gt;Clases y Objetos&lt;/a&gt; (Java)&lt;br /&gt;2008-06-08 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=100" target="_blank"&gt;Clases en Java&lt;/a&gt; (Java)&lt;br /&gt;2008-06-09 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=101" target="_blank"&gt;Atributos en una clase&lt;/a&gt; (Java)&lt;br /&gt;2008-06-10 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=18" target="_blank"&gt;Threads&lt;/a&gt; (Java)&lt;br /&gt;2008-06-11 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=8" target="_blank"&gt;Acceso a bases de datos&lt;/a&gt; (Java)&lt;br /&gt;2008-06-12 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=102" target="_blank"&gt;Parámetros opcionales&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-13 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=103" target="_blank"&gt;Parámetros por referencia&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-14 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=104" target="_blank"&gt;Leer archivo en un arreglo&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-15 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=10" target="_blank"&gt;Primera Clase&lt;/a&gt; (Java)&lt;br /&gt;2008-06-16 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=106" target="_blank"&gt;Manejo de Archivos&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-17 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=107" target="_blank"&gt;Leyendo líneas&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-18 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=108" target="_blank"&gt;Leyendo archivos&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-19 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=109" target="_blank"&gt;Leyendo recursos de Internet&lt;/a&gt; (PHP y MySQL)&lt;br /&gt;2008-06-20 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=110" target="_blank"&gt;Primera página&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-21 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=111" target="_blank"&gt;Agregando código Java&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-22 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=112" target="_blank"&gt;Produciendo salida HTML con Java&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-23 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=113" target="_blank"&gt;Compilación de las páginas&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-24 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=114" target="_blank"&gt;La clase compilada&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-25 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=115" target="_blank"&gt;Traduciendo nuestro JSP a Java&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-26 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=116" target="_blank"&gt;Expresiones en JSP&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-27 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=117" target="_blank"&gt;Usando out&lt;/a&gt; (JSP)&lt;br /&gt;2008-06-28 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=118" target="_blank"&gt;Usando Eclipse&lt;/a&gt; (Java)&lt;br /&gt;2008-06-29 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=119" target="_blank"&gt;Lanzando el programa&lt;/a&gt; (Java)&lt;br /&gt;2008-06-30 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=120" target="_blank"&gt;Creando un proyecto Java&lt;/a&gt; (Java)&lt;br /&gt;2008-07-01 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=121" target="_blank"&gt;Declarando import&lt;/a&gt; (JSP)&lt;br /&gt;2008-07-02 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=122" target="_blank"&gt;El objeto request&lt;/a&gt; (JSP)&lt;br /&gt;2008-07-03 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=123" target="_blank"&gt;Introducción a AjGenesis&lt;/a&gt; (AjGenesis)&lt;br /&gt;2008-07-04 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=124" target="_blank"&gt;Creando una clase&lt;/a&gt; (Java)&lt;br /&gt;2008-07-05 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=125" target="_blank"&gt;Ejecutando la clase&lt;/a&gt; (Java)&lt;br /&gt;2008-07-06 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=126" target="_blank"&gt;Introducción&lt;/a&gt; (.NET)&lt;br /&gt;2008-07-07 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=127" target="_blank"&gt;Lenguajes de Programación&lt;/a&gt; (.NET)&lt;br /&gt;2008-07-08 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=128" target="_blank"&gt;Usando un formulario&lt;/a&gt; (JSP)&lt;br /&gt;2008-07-09 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=129" target="_blank"&gt;Usando método POST&lt;/a&gt; (JSP)&lt;br /&gt;2008-07-10 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=112" target="_blank"&gt;Creando un objeto&lt;/a&gt; (Java)&lt;br /&gt;2008-07-11 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=130" target="_blank"&gt;Reservando memoria&lt;/a&gt; (Java)&lt;br /&gt;2008-07-12 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=131" target="_blank"&gt;Inicialización, constructor y asignación&lt;/a&gt; (Java)&lt;br /&gt;2008-07-13 &lt;a href="http://ajlopez.net/cursos/Lesson.php?Id=132" target="_blank"&gt;Primeros Pasos con Visual Studio&lt;/a&gt; (.NET)&lt;br /&gt;&lt;br /&gt;Los próximos cursos a publicar son:&lt;/p&gt; &lt;p&gt;- Introducción a .Net con VB.Net&lt;br /&gt;- Introducción a .NET con C#&lt;br /&gt;- Programando sitios con JavaServer Pages&lt;/p&gt; &lt;p&gt;Son los cursos que habitualmente dicto presencialmente, pasados&amp;nbsp;en limpio.&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1578130" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Cursos/default.aspx">Cursos</category></item><item><title>Curso de Java en línea</title><link>http://msmvps.com/blogs/lopez/archive/2008/04/07/curso-de-java-en-l-237-nea.aspx</link><pubDate>Mon, 07 Apr 2008 09:58:42 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1576429</guid><dc:creator>lopez</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1576429</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/04/07/curso-de-java-en-l-237-nea.aspx#comments</comments><description>&lt;p&gt;Finalmente, despues de mucha demora, pude terminar la puesta a punto de un pequeño sistema de lecciones en línea (simples páginas dinámicas, con contenido, y algún manejo de usuario), que no podía llamarse de otra forma que AjLearning.... ;-). Y el primer curso que comienzo a publicar (hoy hay 4 lecciones) es uno de Introducción a Java, abierto a programadores, gratuito, en línea.&lt;/p&gt; &lt;p&gt;Visitar&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ajlopez.net/cursos"&gt;http://www.ajlopez.net/cursos&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajlearning01.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Como comento en la introducción al curso:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Este curso sobre programación Java nació de manera inesperada. Luego de años de dar cursos y charlas y conferencias, sobre programación, en Java, .NET y PHP, arquitectura de sistemas, metodologías, tecnologías y lenguajes, siempre me quedaba la sensación de no haber transmitido de una forma correcta alguna parte del temario encarado, o que los asistentes, con tiempo limitado, no habían podido detenerse en un punto importante, para practicarlo y entenderlo cabalmente. Por otra parte, esa experiencia me sirvió para ir depurando, mejorando, el tratamiento de cada tema. Y algo que quería transmitir, era la potencia de cada tecnología, así como alguna guía, entre tantas opciones, sobre cómo desarrollar una aplicación, o cómo entender un lenguaje determinado. Otra limitación de un curso presencial o charla, es que, en general, lo transmitido sólo llega a los asistentes de ese curso o seminario en particular. Siempre he pensado que debería haber alguna forma de lograr llegar a más gente, de alguna otra manera.  &lt;p&gt;Ya había escrito en los noventa, un libro sobre Java. Escribir un libro puede ser un trabajo agotador y estresante, con fechas límite de entrega, y cantidad de páginas a producir en tanto tiempo. Cada página y ejemplo desarrollado, al revisarlo podría parecer totalmente inadecuado, obligando a la reescritura y elaboración de material nuevo. Ahora, con años más de trabajo, veo que algo conseguí transmitir en ese libro, pero que hace falta actualizarlo y adecuarlo a nuevas posibilidades del lenguaje.  &lt;p&gt;Desde entonces, la web ha ido explotando, y hoy los informáticos nos encontramos consultando la red de redes en cada momento, para aprender nuevos trucos, consultar ejemplos, y buscar artículos sobre los problemas que tenemos que resolver. Uniendo estas realidades, la red, mis cursos presenciales, y el texto de un libro, me gustaría brindarles de alguna forma, mis conocimientos sobre Java y otras tecnologías, que me parecen que deben estar en la bolsa de conocimiento de cada programador moderno.  &lt;p&gt;Entonces, estas lecciones en línea nace de la necesidad de pasar en limpio algunos temas que doy en mis cursos presenciales. Me pareció interesante poner en texto y ejemplos concretos, lo que vemos en los cursos presenciales que doy en Buenos Aires, Argentina, y alredores.  &lt;p&gt;Hay multitud de recursos de programación en Java, y en otras tecnologías. Igualmente, espero que estas lecciones sirvan a los que viene a mis cursos presenciales, a los que no, a los que no pueden asistir, o cualquier programador inquieto que quiera comenzar a ver este fascinante lenguaje y tecnología.  &lt;p&gt;Estas lecciones no son un producto terminado. Es un producto en constante evolución, y espero que constante mejora. Es parte de Uds., también, aprovecharlo, comentarlo, criticarlo, mejorarlo. Su primera colaboración puede ser &amp;quot;feedback&amp;quot; y difusión de estas lecciones.  &lt;p&gt;El objetivo es ayudar al lector de estas páginas a entender un poco más, este maravilloso mundo que es la programación de software. Java es una excusa para esto, pero una excusa muy difundida, que espero que puedan aprovechar en el día a día, para el trabajo, y para la creación, que eso es lo que al final somos: creadores de software. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ahora hay publicadas apenas 4 lecciones. Siguiendo con la idea de &lt;a href="http://ajlopez.zoomblog.com/archivo/2007/06/01/a-post-a-day-keeps-the-doctor-away.html" target="_blank"&gt;A post a day keeps the doctor away&lt;/a&gt;, desde mañana publicaré una lista de las lecciones que voy agregando día a dia. Es la forma de hacer un curso: incrementalmente, esperar a que esté todo terminado implica que no esté nunca terminado. &lt;p&gt;Bueno, espero &lt;a href="http://www.ajlopez.net/Contacto.php" target="_blank"&gt;&amp;quot;feedback&amp;quot;&lt;/a&gt;, sugerencias, críticas, ¿qué otros cursos querrían ver publicados? Los próximos que vienen, son: Introducción a .NET (basado en el que estoy dictanto ahora en el MUG), y JavaServer Pages. Hay &amp;quot;features&amp;quot; a implementar, como lista de correo por curso, y comentarios en línea a cada lección. &lt;p&gt;Nos leemos! &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1576429" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Java/default.aspx">Java</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Cursos/default.aspx">Cursos</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category></item></channel></rss>