<?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 : PHP</title><link>http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx</link><description>Tags: PHP</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><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>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 IV</title><link>http://msmvps.com/blogs/lopez/archive/2009/07/19/enlaces-y-noticias-iv.aspx</link><pubDate>Sun, 19 Jul 2009 13:51:36 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1703061</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=1703061</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/07/19/enlaces-y-noticias-iv.aspx#comments</comments><description>&lt;p&gt;Sigo con la costumbre coleccionar enlaces, de distintos temas. Los que me llamaron la atención:&lt;/p&gt;  &lt;h3&gt;PHP&lt;/h3&gt;  &lt;p&gt;Es el lenguaje más usado para el desarrollo de sitios dinámicos en la web. Tiene la simplicidad necesaria, y también el soporte de clases, librerías, acceso a base de datos como para hacerlo más poderoso. Tal vez se ha quedado en el desarrollo web, perdiendo en el terreno de programas de consola, servicios, o de ventanas. Hay montañas de código de ejemplo para estudiar y aprender. Algunos enlaces:&lt;/p&gt;  &lt;p&gt;&lt;a title="PHP programming tips and tricks Code Purity" href="http://blog.code-purity.com/archives/2009/7/14/php_programming_tips_and_tricks/"&gt;PHP programming tips and tricks Code Purity&lt;/a&gt;    &lt;br /&gt;&lt;a title="Scripts Directory of PHP, ASP, ASP.NET, Java, Javascript, Perl and more! - Scripts" href="http://www.scripts.com/"&gt;Scripts Directory of PHP, ASP, ASP.NET, Java, Javascript, Perl and more! – Scripts&lt;/a&gt;    &lt;br /&gt;&lt;a title="43 Must Read PHP Articles and Resources Hi, I&amp;#39;m Grace Smith" href="http://www.gracesmith.co.uk/43-must-read-php-articles-and-resources/"&gt;43 Must Read PHP Articles and Resources Hi, I&amp;#39;m Grace Smith&lt;/a&gt;    &lt;br /&gt;&lt;a title="How To Create Your Own Stats Program (JavaScript, AJAX, PHP) Noupe" href="http://www.noupe.com/php/how-to-create-your-own-stats.html"&gt;How To Create Your Own Stats Program (JavaScript, AJAX, PHP) Noupe&lt;/a&gt;    &lt;br /&gt;&lt;a title="25 Resources to Get You Started with PHP from Scratch - Nettuts+" href="http://net.tutsplus.com/articles/web-roundups/25-resources-to-get-you-started-with-php-from-scratch/"&gt;25 Resources to Get You Started with PHP from Scratch - Nettuts+&lt;/a&gt;    &lt;br /&gt;&lt;a title="15 Wonderfully Creative Uses for PHP" href="http://net.tutsplus.com/tutorials/php/15-wonderfully-creative-uses-for-php/"&gt;15 Wonderfully Creative Uses for PHP&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hay cantidad de sitios manejadores de contenidos (CMS) pueden ver&lt;/p&gt;  &lt;p&gt;&lt;a title="10 New PHP Content Management Systems(CMS)" href="http://www.dreamcss.com/2009/07/10-new-php-content-management.html"&gt;10 New PHP Content Management Systems(CMS)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://php.opensourcecms.com/" href="http://php.opensourcecms.com/"&gt;http://php.opensourcecms.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para un rápido Altas, bajas y modicaciones ver &lt;a href="http://www.ajaxcrud.com/" target="_blank"&gt;AjaxCRUD.com - Use PHP &amp;amp; AJAX to CRUD from a mysql database (create / read / update / delete)&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;No creo que alguien pueda pasar fácilmente de PHP a ASP.NET pero pueden leer &lt;a title="Move from PHP to ASP.NET" href="http://msdn.microsoft.com/en-us/rampup/dd861537.aspx"&gt;Move from PHP to ASP.NET&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tiene sus años, pero es interesante &lt;a title="Understanding MVC in PHP - O&amp;#39;Reilly Media" href="http://www.oreillynet.com/pub/a/php/2005/09/15/mvc_intro.html"&gt;Understanding MVC in PHP - O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un armador de proyectos, a la Apache Ant, pero en PHP: &lt;a title="Phing" href="http://phing.info/trac/"&gt;Phing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Comenzando con Joomla &lt;a title="Beginners - Joomla! Documentation" href="http://docs.joomla.org/Beginners"&gt;Beginners - Joomla! Documentation&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Veo implementando el &lt;a href="http://en.wikipedia.org/wiki/Template_Attribute_Language" target="_blank"&gt;Template Attribute Language&lt;/a&gt; en PHP: &lt;a title="http://phptal.org/" href="http://phptal.org/"&gt;http://phptal.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;DEBEN VER &lt;a href="http://phpcamp.net/index.php" target="_blank"&gt;PHPCamp: learn something new everyday&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para perderse en enlaces, &lt;a href="http://delicious.com/ajlopez/php"&gt;http://delicious.com/ajlopez/php&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;.NET&lt;/h3&gt;  &lt;p&gt;Para los que quieren ver manejadores de contenido (CMS) en ASP.NET:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://aspx.opensourcecms.com/" href="http://aspx.opensourcecms.com/"&gt;http://aspx.opensourcecms.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El área de código abierto de .NET está bien activo: &lt;a title="Open Source .NET projects" href="http://spreadsheets.google.com/pub?key=pKxDW35algYebfs8nssTjIQ"&gt;Open Source .NET projects&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para estudiar: &lt;a title="Expert to Expert- Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) Going" href="http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Brian-Beckman-and-Erik-Meijer-Inside-the-NET-Reactive-Framework-Rx/"&gt;Expert to Expert- Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) Going&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un ejemplo de referencia &lt;a title="FabrikamShipping - Home" href="http://code.msdn.microsoft.com/FabrikamShipping"&gt;FabrikamShipping – Home&lt;/a&gt; con Geneva Framework, autenticación federada y tutti li fiocci.&lt;/p&gt;  &lt;p&gt;Un camino a explorar: reemplazar ORM (Object Relational Mapping) en runtime por generación de código: &lt;a title=".NET ORM, Object Relational Mapping for .NET Telerik" href="http://www.telerik.com/products/orm.aspx"&gt;.NET ORM, Object Relational Mapping for .NET Telerik&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Librería para Twitter &lt;a title="http://tweetsharp.com/" href="http://tweetsharp.com/"&gt;http://tweetsharp.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;ASP.NET MVC 1.0 ejecutando en Mono &lt;a title="shaml-architecture - Google Code" href="http://code.google.com/p/shaml-architecture/"&gt;shaml-architecture - Google Code&lt;/a&gt; Basado en &lt;a title="s#arp-architecture" href="http://code.google.com/p/sharp-architecture/"&gt;s#arp-architecture&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para mapear objetos &lt;a title="http://automapper.codeplex.com/" href="http://automapper.codeplex.com/"&gt;http://automapper.codeplex.com/&lt;/a&gt; (menos para el bueno de &lt;a href="http://weblogs.shockbyte.com.ar/rodolfof" target="_blank"&gt;Rodolfo Finochietti&lt;/a&gt; que prefiere hacerse su propio mapeador :-)&lt;/p&gt;  &lt;p&gt;Siempre es molesto el DataBinding a propiedades simples, habría que ver qué tal funciona &lt;a title="http://www.codeproject.com/KB/cs/ObjectBindingSource.aspx" href="http://www.codeproject.com/KB/cs/ObjectBindingSource.aspx"&gt;http://www.codeproject.com/KB/cs/ObjectBindingSource.aspx&lt;/a&gt; (nested property binding)&lt;/p&gt;  &lt;p&gt;Más de todo esto en &lt;a href="http://delicious.com/ajlopez/dotnet"&gt;http://delicious.com/ajlopez/dotnet&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Generación de código&lt;/h3&gt;  &lt;p&gt;El proyecto Sculpture está muy bien armado, aunque focalizado en .NET &lt;a title="http://sculpture.codeplex.com/" href="http://sculpture.codeplex.com/"&gt;http://sculpture.codeplex.com/&lt;/a&gt; Es open source, se trasladó a la empresa:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.dawliasoft.com/" href="http://www.dawliasoft.com/"&gt;http://www.dawliasoft.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tienen una implementación de referencia: &lt;a title="VotingManager.zip" href="http://www.dawliasoft.com/Portals/0/Learn/VotingManager.zip"&gt;VotingManager.zip&lt;/a&gt; que partiendo de 55 líneas, consiguen generar una aplicación de 4111 líneas. Bueno, nada que el &lt;a href="http://ajgenesis.codeplex.com" target="_blank"&gt;AjGenesis&lt;/a&gt; no pueda hacer… :-) … pero es más bonito.&lt;/p&gt;  &lt;p&gt;&lt;a title="Hibernate Class Generation Using hbm2java - O&amp;#39;Reilly Media" href="http://onjava.com/pub/a/onjava/2005/12/14/hibernate-class-generation-with-hbm2java.html?page=last"&gt;Hibernate Class Generation Using hbm2java - O&amp;#39;Reilly Media&lt;/a&gt; Estoy reviendo esto, quiero comenzar a usar el tag &amp;lt;meta&amp;gt; para usar hibernate.cfg.xml y archivos .hbm.xml para alimentar como modelo a &lt;a href="http://ajgenesis.codeplex.com" target="_blank"&gt;AjGenesis&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Para estudiar dos “approachs” &lt;a title="Angle Bracket Percent - CodeDom vs T4- two approaches to Code Generation" href="http://blogs.msdn.com/davidebb/archive/2009/06/03/codedom-vs-t4-two-approaches-to-code-generation.aspx"&gt;Angle Bracket Percent - CodeDom vs T4- two approaches to Code Generation&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Veo el editor de T4 &lt;a title="T4 Editor - tangible T4 Editor plus UML tools" href="http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html"&gt;T4 Editor - tangible T4 Editor plus UML tools&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Desde AjGenesis puedo leer el archivo .dbml de Linq2Sql, que se puede generar desde la línea de comando con SqlMetal, tengo que estudiar &lt;a title="Oleg Sych - » T4 Toolbox- LINQ to SQL classes generator" href="http://www.olegsych.com/2009/01/t4-toolbox-linq-to-sql-classes-generator/"&gt;Oleg Sych - » T4 Toolbox- LINQ to SQL classes generator&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Yo tenía esta idea, pero la deseché por ser algo “convoluted”, pero es interesante: &lt;a title="Using ASP.Net for Code Generation" href="http://www.delphicsage.com/home/blog.aspx?d=600&amp;amp;title=Using_ASPNet_for_Code_Generation"&gt;Using ASP.Net for Code Generation&lt;/a&gt; . En su tiempo, usé también PHP como lenguaje de generación, pero me gustó tener un lenguaje dedicado a generación con objetos dinámicos (AjBasic) con acceso a un framework de base (.NET por ahora), cosa que no tiene PHP en principio. Y en cuanto a usar ASP.NET, me obligaba a usar un lenguaje tipado .NET, que me resistía a hacerlo.&lt;/p&gt;  &lt;p&gt;Siguiendo con T4, el lenguaje de templates de Visual Studio, a estudiar &lt;a title="Angle Bracket Percent - The MVC T4 template is now up on CodePlex, and it does change your code" href="http://blogs.msdn.com/davidebb/archive/2009/06/26/the-mvc-t4-template-is-now-up-on-codeplex-and-it-does-change-your-code-a-bit.aspx"&gt;Angle Bracket Percent - The MVC T4 template is now up on CodePlex, and it does change your code&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Parece interesante &lt;a title="Sample Fluent NHibernate T4 Templates for Code Generation via LINQ To SQL" href="http://www.pnpguidance.net/Post/SampleFluentNHibernateT4TemplatesCodeGenerationLINQToSQL.aspx"&gt;Sample Fluent NHibernate T4 Templates for Code Generation via LINQ To SQL&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.metacase.com/blogs/stevek/blogView" target="_blank"&gt;Steven Kelly&lt;/a&gt; siempre tiene algo interesante sobre DSM (Domain Specific Models) y generación de código. Comenta sobre &lt;a href="http://www.codegeneration.net/cg2009/" target="_blank"&gt;Code Generation 2009&lt;/a&gt; en &lt;a title="Code Generation 2009 round-up" href="http://www.metacase.com/blogs/stevek/blogView?showComments=true&amp;amp;entry=3423259520"&gt;Code Generation 2009 round-up&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para los que estén con el framework .NET de Lohtka, CSLA, pueden visitar el&lt;/p&gt;  &lt;p&gt;&lt;a title="CslaGenerator Google Groups" href="http://groups.google.com/group/CslaGenerator"&gt;CslaGenerator Google Groups&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ruby es un lenguaje que se presta a la generación de código, ver esto, de hace algunos años, pero a cargo del bueno Jack Herrington, autor de Code Generation in Action (alguien que vió la luz!!! :-) :&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e1c89a3c-3fa7-4139-a58a-282866a26e43" 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;Como siempre, más información en &lt;a href="http://delicious.com/ajlopez/codegeneration"&gt;http://delicious.com/ajlopez/codegeneration&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Lenguajes de Programación&lt;/h3&gt;  &lt;p&gt;Descubriendo un clásico: &lt;a title="Let&amp;#39;s Build a Compiler" href="http://compilers.iecc.com/crenshaw/"&gt;Let&amp;#39;s Build a Compiler&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un texto corto &lt;a href="http://forums.devshed.com/other-programming-languages-139/how-does-an-interpreter-compiler-work-312483.html" target="_blank"&gt;How does a an interpreter compiler work&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para estudiar &lt;a title="Create a Language Compiler for the .NET Framework Using C#" href="http://msdn.microsoft.com/en-us/magazine/cc136756.aspx"&gt;Create a Language Compiler for the .NET Framework Using C#&lt;/a&gt; usa Reflection.Emit, bien a lo macho… :-)&lt;/p&gt;  &lt;p&gt;Hay que escribir intérpretes y compiladores, “compiler generators are for sissies” :-), pero si quieren, pueden ver &lt;a href="http://www.ssw.uni-linz.ac.at/coco/" target="_blank"&gt;The Compiler Generator Coco/R&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Más para ver &lt;a title="Free Compiler Construction Tools- Lexers, Parser Generators, Optimizers (thefreecountry.com)" href="http://www.thefreecountry.com/programming/compilerconstruction.shtml"&gt;Free Compiler Construction Tools- Lexers, Parser Generators, Optimizers (thefreecountry.com)&lt;/a&gt; y &lt;a title="Basics of Compiler Design (pdf)" href="http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/basics_lulu.pdf"&gt;Basics of Compiler Design (pdf)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para estudiar:&lt;/p&gt;  &lt;p&gt;&lt;a title="Michael Feathers on Programming Languages" href="http://www.infoq.com/interviews/michael-feathers-programming-languages"&gt;Michael Feathers on Programming Languages&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Synrc Io Language CLR" href="http://synrc.com/io-language.htm"&gt;Synrc Io Language CLR&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Io (programming language) - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/Io_(programming_language)"&gt;Io (programming language) - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="InfoQ- The Ioke JVM Language- The power of Lisp and Ruby with an intuitive syntax" href="http://www.infoq.com/news/2008/11/ioke"&gt;InfoQ- The Ioke JVM Language- The power of Lisp and Ruby with an intuitive syntax&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Ending the Era of Patronizing Language Design" href="http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design"&gt;Ending the Era of Patronizing Language Design&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un volver a vivir:&lt;/p&gt;  &lt;p&gt;&lt;a title="History of the BASIC family of languages" href="http://dotnetmasters.com/HistoryOfBasic.htm"&gt;History of the BASIC family of languages&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Otro para el canal “Volver”, entorno de desarrollo xBase:&lt;/p&gt;  &lt;p&gt;&lt;a title="Xailer - El entorno de desarrollo definitivo en xbase" href="http://www.xailer.com/"&gt;Xailer - El entorno de desarrollo definitivo en xbase&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Free Pascal compilers and Pascal Programming - Freebyte&amp;#39;s Guide to" href="http://www.freebyte.com/programming/pascal/"&gt;Free Pascal compilers and Pascal Programming - Freebyte&amp;#39;s Guide to&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Se acuerdan de MUMPS? &lt;a title="MUMPS - Wikipedia, the free encyclopedia" href="http://en.wikipedia.org/wiki/MUMPS"&gt;MUMPS - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para leer &lt;a title="APL, COBOL, &amp;amp; Dijkstra Paul Murphy ZDNet.com" href="http://blogs.zdnet.com/Murphy/?p=568"&gt;APL, COBOL, &amp;amp; Dijkstra Paul Murphy ZDNet.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Podría volver a estudiar: &lt;a title="COBOL Programming Course" href="http://www.csis.ul.ie/cobol/Course/Default.htm"&gt;COBOL Programming Course&lt;/a&gt;, &lt;a title="The COBOL Programming Language" href="http://www.engin.umd.umich.edu/CIS/course.des/cis400/cobol/cobol.html"&gt;The COBOL Programming Language&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lista para buscar recursos &lt;a title="Free Programming Tools, free compilers, free software components and" href="http://www.freebyte.com/programming/"&gt;Free Programming Tools, free compilers, free software components and&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Excelente contenido &lt;a title="Google Code University Programming Languages" href="http://code.google.com/intl/it-IT/edu/languages/index.html"&gt;Google Code University Programming Languages&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hay que ir viendo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://clojure.org/" target="_blank"&gt;Clojure&lt;/a&gt; ver &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;p&gt;&lt;a href="http://www.scala-lang.org/" target="_blank"&gt;Scala&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Yo sigo trabajando en reimplementar las ideas de Clojure en C#, lo llamaba AjClojure, pero Rick Hickey (el creador de Clojure) me pidió que le cambiara el nombre (al fin tengo evidencia de que alguien lee &lt;a href="http://twitter.com/ajlopez" target="_blank"&gt;mi Twitter&lt;/a&gt;!!! :-) Así, que en un rapto de imaginación, se llama AjSharpure. Pueden ir viendo mis avances en:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjSharpure" href="http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjSharpure"&gt;http://code.google.com/p/ajlisp/source/browse#svn/trunk/AjSharpure&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Más para ver sobre los lenguajes que me interesan en:   &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/programminglanguages"&gt;http://delicious.com/ajlopez/programminglanguages&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/smalltalk"&gt;http://delicious.com/ajlopez/smalltalk&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/logo"&gt;http://delicious.com/ajlopez/logo&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/lisp"&gt;http://delicious.com/ajlopez/lisp&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/forth"&gt;http://delicious.com/ajlopez/forth&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/haskell"&gt;http://delicious.com/ajlopez/haskell&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/python"&gt;http://delicious.com/ajlopez/python&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/ruby"&gt;http://delicious.com/ajlopez/ruby&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/cobol"&gt;http://delicious.com/ajlopez/cobol&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;MVPs&lt;/h3&gt;  &lt;p&gt;El bueno de &lt;a href="http://weblogs.shockbyte.com.ar/rodolfof" target="_blank"&gt;Rodolfo Finochietti&lt;/a&gt; fue nombrado Microsoft MVP por segundo año consecutivo. Felicitaciones @rodolfof! &lt;a href="http://weblogs.shockbyte.com.ar/rodolfof/archive/2009/07/01/mvp-for-another-year.aspx" target="_blank"&gt;MVP for another year&lt;/a&gt;. También felicitaciones para el pibe Woloski, que renovó el nombramiento.&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=1703061" 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/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/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</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><category domain="http://msmvps.com/blogs/lopez/archive/tags/Enlaces+y+Noticias/default.aspx">Enlaces y Noticias</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>Volviendo a AjContab</title><link>http://msmvps.com/blogs/lopez/archive/2009/07/05/volviendo-a-ajcontab.aspx</link><pubDate>Sun, 05 Jul 2009 14:09:57 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1698201</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=1698201</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/07/05/volviendo-a-ajcontab.aspx#comments</comments><description>&lt;p&gt;Hace ya un tiempo que vengo pensando en reflotar AjContab:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.ajlopez.com/ajcontab/" href="http://www.ajlopez.com/ajcontab/"&gt;http://www.ajlopez.com/ajcontab/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Encuentro este mensaje viejo, en la lista de Arquitectura del MUG de Argentina&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mail-archive.com/arquitectura@mug.org.ar/msg00504.html" target="_blank"&gt;http://www.mail-archive.com/arquitectura@mug.org.ar/msg00504.html&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;AjContab es un viejo ejemplo que daba en mis cursos de .NET 1.x, hace unos años. Debería reescribirlo, en ASP.NET 2, VS2008, tal vez ASP.NET MVC? Veré. Pero en estos días habia tweeteado:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://twitter.com/ajlopez/status/2258288758" href="http://twitter.com/ajlopez/status/2258288758"&gt;http://twitter.com/ajlopez/status/2258288758&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/ajcontab01.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;La idea es tener:&lt;/p&gt;  &lt;p&gt;- Múltiples Tenants    &lt;br /&gt;- Múltiples Empresas     &lt;br /&gt;- Múltiples Planes de Cuenta por Empresa     &lt;br /&gt;- Múltiples Ejercicios     &lt;br /&gt;- Usuarios y Roles     &lt;br /&gt;- Minutas/Asientos     &lt;br /&gt;- Reportes como Balance, Libro Diario, Libro Mayor&lt;/p&gt;  &lt;p&gt;Al escribirlo en PHP/MySql, podría colocarlo fácilmente en línea. Me serviría como ejercicio de repaso de PHP, y comenzaría a tener un proyecto con Ajax, Javascript, JQuery quizás? Trataría de codificarlo liviano, para no ponerle demasiada arquitectura o parafernalia al principio. En todo caso, eso lo dejaría para la versión .NET o Java.&lt;/p&gt;  &lt;p&gt;Será interesante ver cómo los usuarios reciben la idea de tener un sistema así en la web. En el Proyecto Medusa (que mencioné hace poco, en &lt;a title="Generación de código con AjGenesis para Mere Mortals Framework" href="http://msmvps.com/blogs/lopez/archive/2009/06/22/code_2D00_generation_2D00_for_2D00_mere_2D00_mortals_2D00_framework.aspx"&gt;Generación de código con AjGenesis para Mere Mortals Framework&lt;/a&gt;), está incluido el desarrollo de un sistema contable en web. AjContab me serviría para afilar las uñas en el tema de poner este tipo de aplicaciones andando.&lt;/p&gt;  &lt;p&gt;En cuanto tenga algo publicado, escribo por acá. Keep tuned! :-)&lt;/p&gt;  &lt;p&gt;Sugerencias? Bienvenidas!&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=1698201" 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/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Software+as+a+Service/default.aspx">Software as a Service</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/AjContab/default.aspx">AjContab</category></item><item><title>"Ver la luz" con generación de código y AjGenesis</title><link>http://msmvps.com/blogs/lopez/archive/2008/06/10/quot-ver-la-luz-quot-con-generaci-243-n-de-c-243-digo-y-ajgenesis.aspx</link><pubDate>Tue, 10 Jun 2008 14:02:59 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1633619</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=1633619</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/06/10/quot-ver-la-luz-quot-con-generaci-243-n-de-c-243-digo-y-ajgenesis.aspx#comments</comments><description>&lt;p&gt;Ayer dí una charla gratuita sobre generación de código, usando &lt;a href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;. Espero haber transmitido la idea de que es más que generación de código, y que va más allá de la tecnología actual.&lt;/p&gt; &lt;p&gt;Quisiera enumerar algunos posts relacionados con el tema, y comentarlos, así como enumerar enlaces y recursos.&lt;/p&gt; &lt;h3&gt;Posts sobre generación de código&lt;/h3&gt; &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;blockquote&gt; &lt;p&gt;Este es el primer post a leer. Vemos ahí que el cambio de tecnología es una constante en la historia de desarrollo de software, y que no se ve en el horizonte una unificación de nada, ni de lenguajes ni de plataformas. Cada año que pasa, sabemos más de hacer sistemas, pero curiosamente, cada sistema nuevo necesita más codigo que el anterior, en general. Aún usando tecnologías que nos alivian el trabajo, por ejemplo, algún ORM (Object Relational Mapper), si la tecnología triunfa, el propio mercado nos lleva a hacer sistemas más complejos y grandes, y lo que ahorramos en código a escribir, luego lo perdemos en la mayor complejidad de lo sistemas que tenemos a nuestro alcance construir.&lt;/p&gt; &lt;p&gt;También se enumeran otras alternativas a la generación de código, y sus problemas. Las herramientas CASE son muy rígidas, o generales o abarcativas, así como UML y otras iniciativas. Lo que necesitamos son modelos específicos de nuestro dominio, y poder generar lo que querramos, de la forma que nos convenga. De ahí la necesidad de contar con un generador de código que no esté orientado a una tecnología a generar en particular, que sea de código abierto, y que genere lo que nosotros le indicamos, no lo que los autores de la herramienta quieren o pensaron inicialmente.&lt;/p&gt; &lt;p&gt;El usar frameworks propietarios, quedarse en una sola tecnología, tratar de generar todo en runtime apelando a metadata, o generar código desde XML aplicando transformaciones XSLT, son alternativas que creo que son inferiores o más complejas, como se explica en ese post.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Generando C&amp;oacute;digo- Hello World con AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2006/11/19/generando-c-digo-hello-world-con-ajgenesis.aspx"&gt;Generando Código- Hello World con AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Esta es la &amp;quot;prueba ácida&amp;quot; de todo generador de código. Si una herramienta de ese tipo no nos ayuda a crear programas &amp;quot;Hola mundo&amp;quot;, con variantes, en distintas tecnologías, entonces no es lo bastante flexible. AjGenesis hace hincapié en la flexibilidad, la adaptibilidad a lo que Uds quieran producir, sin atarlos a una forma o metadata en particular.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Generando aplicaciones con AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2007/06/25/generando-aplicaciones-con-ajgenesis.aspx"&gt;Generando aplicaciones con AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Un post algo viejo, pero que muestra cómo se pueden generar aplicaciones no triviales con esta herramienta.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="AjGenesis- Modelo generado desde los assemblies" href="http://msmvps.com/blogs/lopez/archive/2007/11/27/ajgenesis-modelo-generado-desde-los-assemblies.aspx"&gt;AjGenesis- Modelo generado desde los assemblies&lt;/a&gt;&lt;br /&gt;&lt;a title="AjGenesis- Modelo desde la Base de Datos" href="http://msmvps.com/blogs/lopez/archive/2007/11/25/ajgenesis-modelo-desde-la-base-de-datos.aspx"&gt;AjGenesis- Modelo desde la Base de Datos&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Posts sobre cómo el modelo puede partir de otras fuentes, cualquiera que Uds. vean que sea conveniente. Luego, la propia herramienta puede mejorar, completar el modelo, hacer inferencias, o Uds. mismos completarlos, por ejemplo, si el modelo de base de datos no es lo bastante rico para darnos algo de semántica sobre el sistema que tenemos entre manos.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Generando c&amp;oacute;digo para NHibernate (Parte 3)" href="http://msmvps.com/blogs/lopez/archive/2007/10/29/generando-c-243-digo-para-nhibernate-parte-3.aspx"&gt;Generando código para NHibernate (Parte 3)&lt;/a&gt;&lt;br /&gt;&lt;a title="Generando c&amp;oacute;digo para NHibernate (Parte 2)" href="http://msmvps.com/blogs/lopez/archive/2007/09/25/generando-c-243-digo-para-nhibernate-parte-2.aspx"&gt;Generando código para NHibernate (Parte 2)&lt;/a&gt;&lt;br /&gt;&lt;a title="Generando c&amp;oacute;digo para NHibernate (Parte 1)" href="http://msmvps.com/blogs/lopez/archive/2007/08/05/generando-c-243-digo-para-nhibernate-parte-1.aspx"&gt;Generando código para NHibernate (Parte 1)&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Para ver que pueden usar AjGenesis para facilitar el desarrollo usando alguna librería reconocida por la comunidad, pueden leer esta serie de enlaces, donde gracias a una idea de Omar&amp;nbsp;del valle Rodríguez, se desarrollaron templates para usar NHibernate, y generar hasta una capa de presentación web para probar lo generado.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Hacia el AjGenesis Recipes" href="http://msmvps.com/blogs/lopez/archive/2007/11/20/hacia-el-ajgenesis-recipes.aspx"&gt;Hacia el AjGenesis Recipes&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Es un trabajo en progreso, para incorporar interacción con el usuario durante el proceso de generación de código.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Usando AjGenesis y NAnt" href="http://msmvps.com/blogs/lopez/archive/2007/11/01/usando-ajgenesis-y-nant.aspx"&gt;Usando AjGenesis y NAnt&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Explicación y enlaces para usar AjGenesis desde NAnt. Si alguien necesita una interfaz gráfica NAnt-GUI, pueden bajarla desde &lt;a title="NAnt-GUI" href="http://groups.google.com/group/codegeneration/t/2aef426f02370d1"&gt;NAnt-GUI&lt;/a&gt;&amp;nbsp;(preparado por Carlos Marcelo Santos, del &lt;a href="http://groups.google.com/group/codegeneration" target="_blank"&gt;grupo de generación de código&lt;/a&gt;)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Genesis Studio- una IDE para AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2007/12/24/genesis-studio-una-ide-para-ajgenesis.aspx"&gt;Genesis Studio- una IDE para AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;No todo lo tienen que hacer desde la línea de comando, o desde el NAnt/NAnt-GUI. El bueno de Jonathan Cisneros desarrolló esta herramienta WinForm, con sintaxis de color y muchas mejoras en la experiencia de usuario, que pueden bajar desde:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.codeplex.com/ajgenesisstudio" href="http://www.codeplex.com/ajgenesisstudio"&gt;http://www.codeplex.com/ajgenesisstudio&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Preservando c&amp;oacute;digo en AjGenesis" href="http://msmvps.com/blogs/lopez/archive/2007/11/11/preservando-c-243-digo-en-ajgenesis.aspx"&gt;Preservando código en AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Si necesitan generar código, pero luego modificarlo, pueden usar algunas capacidades de AjGenesis para delimitar qué parte regenerar y cuales conservan.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="Code Generation as a Service" href="http://msmvps.com/blogs/lopez/archive/2008/04/03/code-generation-as-a-service.aspx"&gt;Code Generation as a Service&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;La última adición al AjGenesis: ahora pueden generar código usando una interfaz web. Esto permite que&amp;nbsp;ya sea en Internet, o desde la intranet de su empresa, puedan generar código controlado, que cumpla con los estándares que se hayan adoptado.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Más posts sobre AjGenesis en&lt;/p&gt; &lt;p&gt;&lt;a title="AjGenesis" href="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx"&gt;AjGenesis&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Si necesitan pasarle información a alguien que no maneja el español, pueden probar con mis artículos en &amp;quot;Anglish&amp;quot; (Angel&amp;#39;s English):&lt;/p&gt; &lt;p&gt;&lt;a title="http://ajlopez.wordpress.com/category/ajgenesis" href="http://ajlopez.wordpress.com/category/ajgenesis"&gt;http://ajlopez.wordpress.com/category/ajgenesis&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Enlaces&lt;/h3&gt; &lt;p&gt;EL sitio sobre generación de código es&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codegeneration.net"&gt;http://www.codegeneration.net&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ahí encontraran comentarios, herramientas, preguntas frecuentes sobre generación de código en general. Tienen una base de datos de herramientas publicadas. Hay enlaces sobre generación de código para distintas tecnologías, como Java, .NET, PHP y también temas de MDA (Model-Driven Architecture).&lt;/p&gt; &lt;p&gt;Otros enlaces que tratamos en las charlas son:&lt;/p&gt; &lt;p&gt;&lt;a title="CodeSmith Tools - The best .NET template based source code" href="http://www.codesmithtools.com/"&gt;CodeSmith Tools&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="MyGeneration Software" href="http://www.mygenerationsoftware.com/"&gt;MyGeneration Software&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="AndroMDA.org - Home" href="http://www.andromda.org/"&gt;AndroMDA.org - Home&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mantengo todo tipo de enlaces relativos a generación de código en&lt;/p&gt; &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; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Lista de correo sobre generación de código&lt;/h3&gt; &lt;p&gt;Existe un Google Group que se puede consultar por email, en español, dedicado a la generación de código. Ahí, además de otros temas, se trata de generación de código con AjGenesis, la generación de templates. En los archivos del grupo se publican ejemplos armados por los miembros.&lt;/p&gt; &lt;p&gt;Pueden ver los mensajes y suscribirse, en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://groups.google.com/group/codegeneration" href="http://groups.google.com/group/codegeneration"&gt;http://groups.google.com/group/codegeneration&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Conclusión&lt;/h3&gt; &lt;p&gt;Espero que quede claro que lo importante es usar generación de código como solución pragmática, pero basado en la abstracción de un modelo. Hacer el ejercicio de abstracción de generar un modelo adecuado para lo que necesitemos, es un &amp;quot;must&amp;quot; que me parece el primer paso para separarnos de los problemas de cambios en las tecnologías, herramientas y plataformas.&lt;/p&gt; &lt;p&gt;Luego, el modelo debe ser de libre definición. Y el texto o código generado, también: debe ser el tipo de texto o código que hubiéramos generado nosotros mismos. Finalmente, la herramienta de generación de código tiene que estar disponible en código totalmente abierto, para que se pueda extender, entender o usar de la forma que querramos.&lt;/p&gt; &lt;p&gt;Tengo que escribir más sobre la importancia del modelo, y que pueden hacer el suyo propio: no hay modelo fijo, pueden partir desde la base de datos, desde los archivos XML de los ejemplos, o desde donde quieran. También tengo que escribir sobre la posibilidad de hacer modelos que se deriven de otros modelos. Y escribir haciendo énfasis en que lo que construimos, en realidad, es un sistema experto. De ahí, que desde el principio, incorporé un lenguaje de programación que puede tomar decisiones, completar y modificar el modelo.&lt;/p&gt; &lt;p&gt;Como ven, con AjGenesis, ¡sky is the limit! :-)&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=1633619" 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/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Arquitectura/default.aspx">Arquitectura</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/NHibernate/default.aspx">NHibernate</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C_26002300_243_3B00_digo+Abierto/default.aspx">C&amp;#243;digo Abierto</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><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx">AjGenesis</category></item><item><title>Curso de PHP y MySQL gratuito en línea</title><link>http://msmvps.com/blogs/lopez/archive/2008/06/07/curso-de-php-y-mysql-gratuito-en-l-237-nea.aspx</link><pubDate>Sat, 07 Jun 2008 16:51:19 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1632610</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=1632610</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/06/07/curso-de-php-y-mysql-gratuito-en-l-237-nea.aspx#comments</comments><description>&lt;p&gt;Desde hace unas semanas, que estoy publicando lecciones de mis cursos presenciales de PHP y MySQL en mi mini sistema de&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ajlopez.net/cursos" target="_blank"&gt;AjLearning&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Pueden ver el curso en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://ajlopez.net/cursos/Course.php?Id=4" target="_blank"&gt;Desarrollo de Sitios con Php y MySql&lt;/a&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.todocontenidos.com/ajlearning/ajlearningphp.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Como explico en la introducción del curso:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Como el curso de &lt;a href="http://ajlopez.net/cursos/Course.php?Id=1"&gt;Introducción a Java&lt;/a&gt;, estas lecciones nacen de los ejemplos que dicto en mis cursos presenciales. PHP, junto con MySQL, se ha convertido en la tecnología más usada en desarrollo web con programación en el servidor. Con PHP, se puede comenzar sencillo, y luego, armar aplicaciones web más complejas. &lt;/p&gt; &lt;p&gt;&lt;br /&gt;Como no siempre es posible asistir a un curso, me pareció interesante poner estas páginas en línea. No es lo mismo que un curso presencial, donde uno comparte experiencias con otros, o está en contacto con algún instructor. Pero también tiene sus ventajas: uno puede ir avanzando a su propio ritmo, y repasar todo cuanto quiera. &lt;/p&gt; &lt;p&gt;&lt;br /&gt;Espero que les sirva. El curso va ir creciendo. 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;Siempre quería publicar las lecciones, pero estaba el cuestión tiempo para armar un curso completo. Por eso, tomé la decisión de publicar una lección por día, para tener siempre un mini avance, que no será mucho, pero ya se han acumulado como 100 lecciones, entre este curso y el de introducción a Java. Estoy comenzando a publicar algo del curso de JSP, y tengo pendiente comenzar con el de .NET. &lt;p&gt;El propio sistema de base va a ir avanzando: quiero incorporar preguntas y respuestas, pequeños problemas y ejercicios interactivos. &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=1632610" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</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>Controlando la cantidad de usuarios en una aplicación web</title><link>http://msmvps.com/blogs/lopez/archive/2008/01/30/controlando-la-cantidad-de-usuarios-en-una-aplicaci-243-n-web.aspx</link><pubDate>Wed, 30 Jan 2008 08:48:08 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1486623</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=1486623</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/01/30/controlando-la-cantidad-de-usuarios-en-una-aplicaci-243-n-web.aspx#comments</comments><description>&lt;p&gt;Supongamos que que necesitemos controlar la cantidad de usuarios que puedan estar usando nuestra aplicación web, ya sea en Java/JSP/JSF, ASP.NET, PHP y variantes.&amp;nbsp;Por ejemplo, por una cuestión de licencias, no queremos que haya más de N usuarios logueados.&lt;/p&gt; &lt;p&gt;Propongo acá una posible solución, algo así implementé alguna vez, pero no ha sido probada exhaustivamente.&lt;/p&gt; &lt;p&gt;Antes, alguna discusión de otras soluciones:&lt;/p&gt; &lt;p&gt;- Se puede tener control de la cantidad de usuarios logueados, si incrementamos un contador en el proceso de login, decrementamos el contador en el proceso de logout, o controlamos el fin de la sesión.&lt;/p&gt; &lt;p&gt;Hay algunos problemas a resolver:&lt;/p&gt; &lt;p&gt;- Puede que no tengamos un evento de fin de sesión, como pasa en PHP&lt;/p&gt; &lt;p&gt;- Puede que no tengamos un evento de fin de sesión, porque estamos en una granja de servidores, y nuestra tecnología (p.ej., ASP.NET) no registra&amp;nbsp;el evento de fin de sesión de una forma adecuada en ese escenario&lt;/p&gt; &lt;p&gt;Alguien podría sugerir que pongamos algo en el browser cliente, un código javascript (o el más &amp;quot;cool&amp;quot;, una llamada Ajax), para que cada página envíe un &amp;quot;ping&amp;quot; al servidor, diciendo &amp;quot;Estoy aquí, el usuario está vivo....&amp;quot;. Pero eso implica colocar ese código en cada página, confiar en que el cliente tenga javascript habilitado, y quizás exija que algunos planetas esten dispuestos en línea.&lt;/p&gt; &lt;p&gt;Entonces, ¿qué hacemos? ¿nos entregamos a la desesperación? ¿dejamos la programación y nos dedicamos a manejar gente? o peor aún&amp;nbsp;¿nos ponemos a dibujar UML?&amp;nbsp;¡¡No!! ;-)&lt;/p&gt; &lt;p&gt;Podemos implementar lo siguiente:&lt;/p&gt; &lt;p&gt;El control debe hacerse en el login de usuario. Ahí lo dejamos pasar al usuario o no, dependiendo de un cálculo de usuarios activos que hacemos.&amp;nbsp;¿Cómo?&lt;/p&gt; &lt;p&gt;Para conocer los usuarios activos, en memoria (si es una aplicación corriendo en un solo servidor) o en una base de datos central (en caso de estar en una granja web), grabamos, por cada actividad de usuario (pedir una página, por ejemplo), un registro donde&amp;nbsp;grabamos:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;- Usuario&lt;br /&gt;- Workstation&amp;nbsp;(como podamos, número de IP, etc...)&lt;br /&gt;- Fecha/Hora del&amp;nbsp;último evento&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Noten que no es un registro por evento: es un registro por Usuario+Workstation, se actualiza siempre ahi&amp;nbsp;la fecha/hora de&amp;nbsp;último evento. No hace falta mantener la historia de los eventos.&amp;nbsp;Si el usuario pepe desde workstation1 esta pidiendo algo al sistema, actualizamos el registro que le corresponde, o lo creamos si no existe. Registros viejos, de más de una hora,&amp;nbsp;o un día, se pueden borrar, periódicamente (ejecutando un store, por ejemplo, 1 de cada M actualizaciones de evento).&lt;/p&gt; &lt;p&gt;En el caso de ASP.NET, este registro se puede hacer en un HttpModule, sin necesidad de tocar otras partes de la aplicación. Sino, un lugar potable es colocar ese código en algún control, include o parecido, que se ejecute en el render de cada página (es muy común hoy en día, tener un componente así).&lt;/p&gt; &lt;p&gt;En caso de desloguearse un usuario, se borra el registro correspondiente.&lt;/p&gt; &lt;p&gt;Supongamos que T es el tiempo de duración de una sesión, y N la cantidad máxima de licencias. Entonces, cuando un usuario se loguea, se controla que:&lt;/p&gt; &lt;p&gt;- Si existe un registro para su Usuario/Workstation con fecha/hora &amp;gt;= hora actual - T, se lo deja pasar. Seguramente, no registramos su logout (por ejemplo, se cortó la luz) y ahora quiere entrar de nuevo.&lt;/p&gt; &lt;p&gt;sino&lt;/p&gt; &lt;p&gt;- Si existen más de N registros con fecha/hora &amp;gt;= hora actual - T, no se lo deja pasar&lt;/p&gt; &lt;p&gt;Debe haber otras soluciones, pero me parece ésta interesante, relativamente sencilla, y adoptable por distintas tecnologías. Algo similar se puede adoptar para aplicaciones en el cliente (no browser, sino una aplicación de formularios, ventanas, cliente rico).&lt;/p&gt; &lt;p&gt;Problemas: Hay que evaluar el impacto de tener que acceder a la base, si se decide almacenar esos registros en forma centralizada.&lt;/p&gt; &lt;p&gt;¿Comentarios?&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=1486623" 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/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Misión Geminis 48hs</title><link>http://msmvps.com/blogs/lopez/archive/2007/12/12/misi-243-n-geminis-48hs.aspx</link><pubDate>Wed, 12 Dec 2007 10:09:16 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1393527</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=1393527</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/12/12/misi-243-n-geminis-48hs.aspx#comments</comments><description>&lt;p&gt;El bueno de &lt;a href="http://blogs.msdn.com/masaez" target="_blank"&gt;Miguel Angel Saez&lt;/a&gt; (ahora en Microsoft de Argentina) nos avisa en su post&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/masaez/archive/2007/12/10/1-concurso-48-horas.aspx" target="_blank"&gt;1 concurso - 48 hs&lt;/a&gt;&lt;/p&gt; &lt;p&gt;del concurso:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.mslatam.com/latam/msdn/es/geminis48/"&gt;Misión Geminis 48 hs&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Para participar de la Misión Géminis 48 hs., sólo tienes que ser un desarrollador que te gusten los desafíos. La idea es que compitas con tus pares para demostrar en 2 etapas qué tanto sabes acerca de .Net y PHP. Durante la primera etapa deberás responder una serie de preguntas de selección múltiple sobre estos lenguajes de programación. Los participantes que contesten correctamente todo el cuestionario, con la posibilidad de múltiples intentos, podrán pasar a la segunda etapa – La Misión. Allí deberás estar preparado para el reto de desarrollar una aplicación web funcional, un sistema de Control Epidemiológico basado en PHP, y migrarla a ASP.NET. Tendrás sólo 48 horas para hacerlo, y los primeros 48 que lo hagan estarán participando por increíbles premios. Los 3 ganadores designados por especialistas calificados recibirán U$D 1.000, U$D 800 y U$D 400, respectivamente. Muchos éxitos para tu misión… &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Hay &lt;a href="http://www.mslatam.com/latam/msdn/es/geminis48/prize.aspx"&gt;interesantes premios&lt;/a&gt;. Si conoces PHP, puede ser una interesante forma de aprender ASP.NET. Más información sobre esta tecnología en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.aprenderasp.net/" href="http://www.aprenderasp.net/"&gt;http://www.aprenderasp.net/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.asp.net/"&gt;http://www.asp.net/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;No es que el concurso comienza ahora. Hay tiempo para aprender (revisar en el sitio, creo que quedan 2 meses para comenzar el concurso).&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=1393527" 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/PHP/default.aspx">PHP</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Mantener estado en PHP</title><link>http://msmvps.com/blogs/lopez/archive/2007/11/03/mantener-estado-en-php.aspx</link><pubDate>Sat, 03 Nov 2007 10:17:53 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1279577</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=1279577</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/11/03/mantener-estado-en-php.aspx#comments</comments><description>&lt;p&gt;Les quería comentar que Román Mussi ha escrito un muy claro post sobre el tema&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.nitrico.com.ar/Notas/PHP-Estado/PHP-Estado.htm" target="_blank"&gt;Técnicas para mantener estado entre páginas con PHP&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ahí describe el problema, su historia, la diferencia con las aplicaciones de escritorio. Encara luego las formas de mantener el estado entre páginas en una aplicación web con PHP, como principales métodos:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Uso de Cookies,  &lt;li&gt;Uso de información embebida en URIs (método GET),  &lt;li&gt;Uso de campos ocultos en un formulario (método POST),  &lt;li&gt;Uso de Sesiones (propio de PHP). &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Incluye ejemplos andando y su código para descargarse desde esa página.&lt;/p&gt; &lt;p&gt;También tienen una versión PDF:&lt;/p&gt; &lt;p&gt;&lt;a title="Versi&amp;oacute;n PDF" href="http://www.nitrico.com.ar/Notas/PHP-Estado/PHP-Estado.pdf"&gt;Versión PDF&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Concluye el artículo con la descripción de un caso clásico: adaptar el código de un sistema que al pasar a un hosting no funciona. Román describe cómo pasó de manejo de session a usar campos en post, volviendo a la normalidad.&lt;/p&gt; &lt;p&gt;Recomiendo la lectura del artículo, que aclara varios puntos, incluso puede servir para entender algunas técnicas en otras tecnologías.&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=1279577" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category></item><item><title>Preparándose para una entrevista de trabajo</title><link>http://msmvps.com/blogs/lopez/archive/2007/09/17/prepar-225-ndose-para-una-entrevista-de-trabajo.aspx</link><pubDate>Sun, 16 Sep 2007 23:24:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1201567</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=1201567</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2007/09/17/prepar-225-ndose-para-una-entrevista-de-trabajo.aspx#comments</comments><description>&lt;p&gt;El bueno de &lt;a href="http://staff.southworks.net/blogs/aalvarez" target="_blank"&gt;Augusto Alvarez&lt;/a&gt; (una especie de jugador de la NBA, que me dobla en altura, y que cumple con el &amp;quot;mindset&amp;quot; &amp;quot;no sea canuto&amp;quot;...;-), me alcanza este enlace:&lt;/p&gt;
&lt;p&gt;&lt;a title="http://interviewhelper.blogspot.com/" href="http://interviewhelper.blogspot.com/"&gt;http://interviewhelper.blogspot.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;un blog con preguntas y respuestas de entrevistas para informáticos, donde encontramos:&lt;/p&gt;
&lt;p&gt;&lt;a title="SQL Server Interview Questions" href="http://interviewhelper.blogspot.com/2007/08/sql-server-interview-questions_30.html"&gt;SQL Server Interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title=".NET Interview Questions" href="http://interviewhelper.blogspot.com/2007/08/net-interview-questions.html"&gt;.NET Interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title="JAVA Interview Questions" href="http://interviewhelper.blogspot.com/2007/08/java-interview-questions.html"&gt;JAVA Interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title="Database" href="http://interviewhelper.blogspot.com/2007/08/database.html"&gt;Database&lt;/a&gt;&lt;br /&gt;&lt;a title="SQL Server" href="http://interviewhelper.blogspot.com/2007/08/sql-server-interview-questions.html"&gt;SQL Server&lt;/a&gt;&lt;br /&gt;&lt;a title="Software Testing" href="http://interviewhelper.blogspot.com/2007/08/software-testing.html"&gt;Software Testing&lt;/a&gt;&lt;br /&gt;&lt;a title="Basic .NET Framework" href="http://interviewhelper.blogspot.com/2007/07/basic-net-framework.html"&gt;Basic .NET Framework&lt;/a&gt;&lt;br /&gt;&lt;a title="SAP Interview Questions" href="http://interviewhelper.blogspot.com/2007/07/sap-interview-questions.html"&gt;SAP Interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title="ABAP Interview Questions" href="http://interviewhelper.blogspot.com/2007/07/abap-interview-questions.html"&gt;ABAP Interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title="C++ interview Questions" href="http://interviewhelper.blogspot.com/2007/07/c-interview-questions_05.html"&gt;C++ interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title="C Interview Questions" href="http://interviewhelper.blogspot.com/2007/07/c-interview-questions.html"&gt;C Interview Questions&lt;br /&gt;&lt;a title="PHP Interview Questions" href="http://interviewhelper.blogspot.com/2007/06/php-interview-questions.html"&gt;PHP Interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title="ASP.net Interview Questions" href="http://interviewhelper.blogspot.com/2007/06/aspnet-interview-questions.html"&gt;ASP.net Interview Questions&lt;/a&gt;&lt;br /&gt;&lt;a title="Java Interview Questions" href="http://interviewhelper.blogspot.com/2007/06/java-interview-questions.html"&gt;Java Interview Questions&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Aparte de preguntas técnicas, me gustaron:&lt;/p&gt;
&lt;p&gt;&lt;a title="Points to remember" href="http://interviewhelper.blogspot.com/2007/07/points-to-remember.html"&gt;Points to remember&lt;/a&gt;&lt;br /&gt;&lt;a title="Salary Negotiation" href="http://interviewhelper.blogspot.com/2007/07/salary-negotiation.html"&gt;Salary Negotiation&lt;/a&gt;&lt;br /&gt;&lt;a title="Resume Preparation Guidelines" href="http://interviewhelper.blogspot.com/2007/07/resume-preparation-guidelines.html"&gt;Resume Preparation Guidelines&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yo agregaría, parafraseando a Ortega: &amp;quot;yo soy yo y mi blog&amp;quot;. Gente, vayan preparando blogs, de lo que estudian, conocen, hacen. &amp;quot;Su blog es su CV&amp;quot; puede ser algo exagerado, pero no mucho.&lt;/p&gt;
&lt;p&gt;Debe ser leído:&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://www.lanacion.com.ar/Archivo/nota.asp?nota_id=907754" target="_blank"&gt;El currículum no, quiero ver tu blog&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cómo la revolución de la web 2.0 y los blogs abre la posibilidad de nuevas prácticas de reclutamiento y formación profesional&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Curioso:&lt;/p&gt;
&lt;p&gt;&lt;a title="The Bloggers Business School" href="http://www.cultureby.com/trilogy/2005/12/the_bloggers_bu.html"&gt;The Bloggers Business School&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=1201567" 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><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category></item><item><title>Libros gratuitos de programación</title><link>http://msmvps.com/blogs/lopez/archive/2006/12/18/libros-gratuitos-de-programaci-n.aspx</link><pubDate>Mon, 18 Dec 2006 13:46:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:430445</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=430445</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2006/12/18/libros-gratuitos-de-programaci-n.aspx#comments</comments><description>&lt;P&gt;Desde el sitio&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.vebook.org/"&gt;http://www.vebook.org&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;he podido bajarme libros de programación de distintos temas, como ASP, ASP.NET, Java, PHP.&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;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=430445" 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></item><item><title>Generando Código: Hello World con AjGenesis</title><link>http://msmvps.com/blogs/lopez/archive/2006/11/19/generando-c-digo-hello-world-con-ajgenesis.aspx</link><pubDate>Sun, 19 Nov 2006 23:24:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:308486</guid><dc:creator>lopez</dc:creator><slash:comments>28</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=308486</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2006/11/19/generando-c-digo-hello-world-con-ajgenesis.aspx#comments</comments><description>&lt;p&gt;&lt;br /&gt;Mi proyecto preferido, &lt;a class="" href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;, consiste en un generador de código, escrito en VB.NET. Es un proyecto de código abierto, con una licencia tipo BSD, que permite utilizarlo en cualquier proyecto que quieran. Se puede usar como librería, invocado desde nuestro proyecto, se puede invocar desde la línea de comando, o puede ser utilizado desde el poderoso &lt;a class="" href="http://nant.sourceforge.net/" target="_blank"&gt;NAnt&lt;/a&gt; (esto último me permitió organizar mejor las tareas que realiza el generador de código).&lt;/p&gt;
&lt;p&gt;En la página del proyecto (y en el proyecto mismo) hay multitud de ejemplos, que generan código desde un modelo, usando plantillas. Los ejemplos generan código PHP, Java, JSP, VB.NET, C#, ASP.NET, y hasta scripts de base de datos y procedimientos almacenados. Quisiera destacar dos puntos:&lt;/p&gt;
&lt;p&gt;- El modelo del que parte es totalmente definible por el usuario&lt;/p&gt;
&lt;p&gt;- Las tareas y plantillas a aplicar son totalmente programables y controlables&lt;/p&gt;
&lt;p&gt;Esto lo diferencia de otros generadores. Ud. puede hacerse su propio modelo, y sus propias plantillas, para generar los artefactos de texto que prefiera. Otros sistemas parten de la base de datos, y sólo generan un grupo de artefactos de textos predefinidos (por ejemplo, POJOs, o DAOs). Pero con AjGenesis puede generar lo que Ud. quiera.&lt;/p&gt;
&lt;p&gt;Para ejemplificar, este artículo se dedica a modelar algo que, si bien no es lo último en tecnología, es la primera prueba que debe pasar un generador de código: modelar y generar un viejo pero entrañable &amp;quot;Hello, World&amp;quot; (programa que encontré por primera vez en el venerable &amp;quot;The C Programming Language&amp;quot; de los buenos de Kernighan y Ritchie).&lt;/p&gt;
&lt;p&gt;Los archivos de este ejemplo, pueden bajarse de &lt;a class="" href="http://www.ajlopez.com/downloads/HelloWorld1.zip"&gt;HelloWorld1.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Primero, el modelo. Como menciono en mis charlas, el modelo es una simplificación de la realidad. El modelo, por ejemplo, un mapa, no es la realidad, el territorio. En el caso de los modelos de AjGenesis, se trata de crear inicialmente, un modelo que muestre lo variable de nuestro sistema. En el caso de un HelloWorld, lo que quisierámos modelar como variable, es el mensaje. Entonces, creamos en un directorio de trabajo, el archivo &lt;strong&gt;Project.xml&lt;/strong&gt;:&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;Project&amp;gt;&lt;br /&gt;&amp;lt;Message&amp;gt;Hello World, by AjGenesis&amp;lt;/Message&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Este es el primer paso. Vean que no tuvimos que usar un modelo predefinido, simplemente, lo escribimos en un documento XML bien formado. Nada de schemas, nada DTDs, o bichos raros. Solamente nuestra creatividad.&lt;/p&gt;
&lt;p&gt;El segundo paso es elegir la tecnología (lenguaje, plataforma, framework, base de datos), que vamos a utilizar, y escribir (o reutilizar) plantillas. Decidimos crear un ejemplo en VB.NET, un simple programa de consola. La plantilla la escribimos en el archivo &lt;strong&gt;HelloVb.tpl&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;#39;&lt;br /&gt;&amp;#39; Hello World demo&lt;br /&gt;&amp;#39; generated by AjGenesis&lt;br /&gt;&amp;#39; &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;http://www.ajlopez.com/ajgenesis&lt;/a&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;Module HelloWorld&lt;br /&gt;&amp;nbsp;Public Sub Main()&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.Console.WriteLine(&amp;quot;${Project.Message}&amp;quot;)&lt;br /&gt;&amp;nbsp;End Sub&lt;br /&gt;End Module&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&lt;/span&gt;Acá aparece una característica de las plantillas: permiten acceder y utilizar en la salida, los datos del modelo. Al escribir Project.Message entre ${ y }, le indicaros al procesador AjGenesis, que cuando trabaje sobre esta plantilla, reemplace ese texto por el valor de la rama Project/Message en nuestro modelo. Vemos que no usamos una notación XML o XPath para referirnos a algo del modelo. El modelo inicial está serializado en XML, pero AjGenesis lo levanta a memoria, y nos lo deja como un objeto con propiedades.&lt;/p&gt;
&lt;p&gt;Hubiéramos podido escribir el modelo como&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;Project Message=&amp;quot;Hello World, by AjGenesis&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;El modelo en memoria sería el mismo. Aunque ahora Message está como atributo, para nuestra plantilla sigue siendo la propiedad Message del objeto Project.&lt;/p&gt;
&lt;p&gt;Ya tenemos el modelo, y la plantilla. Necesitamos bajar y expandir el &lt;a class="" href="http://www.ajlopez.com/downloads/AjGenesis-0.4.3.zip"&gt;AjGenesis-0.4.3.zip&lt;/a&gt; (versión en desarrollo, las anteriores versiones están en el directorio de fuentes SourceForge del proyecto). En esa versión, hay un directorio bin con librerías y algún ejecutable. El &lt;strong&gt;AjGenesis.Console.exe&lt;/strong&gt; es el programa que puede invocarse para tomar el modelo y la plantilla, y generar un archivo, así:&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;AjGenesis.Console Project.xml HelloWorldVb.tpl HelloWorld.vb&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Los parámetros se explican así:&lt;/p&gt;
&lt;p&gt;Archivo .xml: cuando encuentra en la lista de parámetros un archivo XML, AjGenesis lo carga en su ambiente de variables. El nodo inicial del XML pasa a ser el nombre de la variable que contiene al modelo.&lt;/p&gt;
&lt;p&gt;Archivo .tpl: lo toma como plantilla, y lo procesa, generando un archivo con el nombre del siguiente parámetro.&lt;/p&gt;
&lt;p&gt;Por supuesto, para que esto funcione, o deberemos poner la ruta completa del ejecutable AjGenesis.Console, o deberemos incluir el directorio bin de AjGenesis en el PATH de nuestro ambiente.&lt;/p&gt;
&lt;p&gt;Los parámetros los procesa en orden. Podríamos poner más de un modelo, más de un archivo XML. Por ejemplo, un segundo archivo XML podría describir la tecnología de base de datos a usar, o el nombre de la empresa que está usando el modelo, o cualquier otra cosa que se nos ocurra. Sería conveniente en este caso que el segundo archivo XML tenga un nodo raíz distinto de Project, porque así no sobreescribe al modelo del anterior archivo. También podríamos colocar varios archivos de plantilla con su correspondiente archivo resultado, en una misma invocación.&lt;/p&gt;
&lt;p&gt;Si ejecutamos entonces el comando de arriba (necesitamos un framework .NET instalado, recordemos que AjGenesis está escrito en .NET), se genera el archivo &lt;strong&gt;HelloWorld.vb&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;#39;&lt;br /&gt;&amp;#39; Hello World demo&lt;br /&gt;&amp;#39; generated by AjGenesis&lt;br /&gt;&amp;#39; &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;http://www.ajlopez.com/ajgenesis&lt;/a&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;Module HelloWorld&lt;br /&gt;&amp;nbsp;Public Sub Main()&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.Console.WriteLine(&amp;quot;Hello World, by AjGenesis&amp;quot;)&lt;br /&gt;&amp;nbsp;End Sub&lt;br /&gt;End Module&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;No vamos a decir &amp;quot;Uy que bruto..&amp;quot;, pero es el primer paso.&lt;/p&gt;
&lt;p&gt;Pero vayamos más alla. Supongamos que ahora, con el mismo modelo, queremos generar nuestro gran sistema HelloWorld, en Java. Las presiones del mercado, nuestros clientes, nos piden la nueva versión en el lenguaje multiplataforma Java, y nosotros estamos acá para servirlos. Bien, manos a la obra, creamos un archivo &lt;strong&gt;HelloWorldJava.tpl&lt;/strong&gt; con&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;/**&lt;br /&gt;* Hello World demo&lt;br /&gt;* generated by AjGenesis&lt;br /&gt;* &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;http://www.ajlopez.com/ajgenesis&lt;/a&gt;&lt;br /&gt;*/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;public class HelloWorld {&lt;br /&gt;&amp;nbsp;public static void main(String [] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;${Project.Message}&amp;quot;);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;y ejecutamos en la línea de comando&lt;/p&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;mso-bidi-font-size:10.0pt;"&gt;&lt;font size="3"&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;AjGenesis.Console Project.xml HelloWorldJava.tpl HelloWorld.java&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/span&gt;y voilá, se genera el archivo &lt;strong&gt;HelloWorld.java&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;/**&lt;br /&gt;* Hello World demo&lt;br /&gt;* generated by AjGenesis&lt;br /&gt;* &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;&lt;span style="COLOR:windowtext;TEXT-DECORATION:none;text-underline:none;"&gt;http://www.ajlopez.com/ajgenesis&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;*/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;public class HelloWorld {&lt;br /&gt;&amp;nbsp;public static void main(String [] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;Hello World, by AjGenesis&amp;quot;);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Ya estamos cebados. Vamos por un ejemplo más flexible. Quisiéramos ahora generar el programa VB.NET, el programa C#, el programa Java, y que el nombre de la clase, del programa, sea algo variable (en las plantillas anteriores aparecía siempre HelloWorld como nombre del archivo y de la clase o módulo).&lt;/p&gt;
&lt;p&gt;Los archivos de este segundo ejemplo se pueden bajar de &lt;a class="" href="http://www.ajlopez.com/downloads/HelloWorld2.zip"&gt;HelloWorld2.zip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para esto, en otro directorio, creamos el archivo &lt;strong&gt;Project.xml&lt;/strong&gt; con el contenido&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;Project&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;Name&amp;gt;HelloWorld&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;Description&amp;gt;Hello World Demostration&amp;lt;/Description&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;Message&amp;gt;Hello World, by AjGenesis&amp;lt;/Message&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Y escribimos las plantillas &lt;strong&gt;ModuleVb.tpl&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;#39;&lt;br /&gt;&amp;#39; ${Project.Description}&lt;br /&gt;&amp;#39; generated by AjGenesis&lt;br /&gt;&amp;#39; &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;&lt;span style="COLOR:windowtext;TEXT-DECORATION:none;text-underline:none;"&gt;http://www.ajlopez.com/ajgenesis&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;Module ${Project.Name}&lt;br /&gt;&amp;nbsp;Public Sub Main()&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.Console.WriteLine(&amp;quot;${Project.Message}&amp;quot;)&lt;br /&gt;&amp;nbsp;End Sub&lt;br /&gt;End Module&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;y &lt;strong&gt;ClassJava.tpl&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;/**&lt;br /&gt;* ${Project.Description}&lt;br /&gt;* generated by AjGenesis&lt;br /&gt;* &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;&lt;span style="COLOR:windowtext;TEXT-DECORATION:none;text-underline:none;"&gt;http://www.ajlopez.com/ajgenesis&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;*/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;public class ${Project.Name} {&lt;br /&gt;&amp;nbsp;public static void main(String [] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;${Project.Message}&amp;quot;);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Estudiemos otra característica de &lt;a class="" href="http://www.ajlopez.com/ajgenesis" target="_blank"&gt;AjGenesis&lt;/a&gt;: la capacidad de ejecutar un script, en un lenguaje denominado informalmente AjBasic. Creo que esta es una característica poderosa, porque posibilita ir más allá de simplemente la línea de comando. Nos permite manipular programáticamente el modelo y las tareas a realizar. En los ejemplos que encontrarán en la página del proyecto, se usa mucho esta característica, llegándose a producir soluciones completas, con decenas de archivos. Pero veamos nuestro ejemplo.&lt;/p&gt;
&lt;p&gt;El programa lo ingresamos en el archivo &lt;strong&gt;Build.ajg&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;PrintLine &amp;quot;Generating ${Project.Name}&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;TransformerManager.Transform(&amp;quot;ModuleVb.tpl&amp;quot;, &amp;quot;${Project.Name}.vb&amp;quot;, Environment)&lt;br /&gt;TransformerManager.Transform(&amp;quot;ClassJava.tpl&amp;quot;,&amp;quot;${Project.Name}.java&amp;quot;, Environment)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;El lenguaje AjBasic, tiene algún verbo predefinido, como el autodescriptivo PrintLine. Notemos que, como en otros lenguajes de scripting, tiene expansión de expresiones en los strings. Esto es, cuando en un texto entre doble comillas (una constante string), ubica una expresión entre ${ y }, la evalúa y la reemplaza por el valor resultante. Muchos de Uds. reconoceran aquí una conducta similar a otros lenguajes de scripting de Unix/Linux, o a PHP, o al Expression Language de JSP 2.x.&lt;/p&gt;
&lt;p&gt;La variable TransformerManager es una de las pocas predefinidas. No he definido muchas, y Uds. pueden agregar variables al ambiente de AjGenesis. Pero TransformerManager sirve para invocar programáticamente lo que hacemos desde la línea de comando. Así, el primer parámetro de su método Transform el archivo plantilla, el segundo parámetro es el archivo a generar, y el tercero, la colección de variables definida (en el ejemplo usamos Environment, otra de las variables predefinidas, que justamente es el diccionario de variables que ahora están disponibles en la evaluación de este script).&lt;/p&gt;
&lt;p&gt;Ejecutamos lo anterior con&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;AjGenesis.Console Project.xml Build.ajg&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;El programa de consola está preparado para ejecutar cada parámetro que tenga la extensión .ajg, interpretándolo como un texto AjBasic.&lt;/p&gt;
&lt;p&gt;Pero podemos ir más allá. El año pasado (el proyecto AjGenesis ya lleva sus años en desarollo), incorporé soporte de &lt;a class="" href="http://nant.sourceforge.net/" target="_blank"&gt;NAnt&lt;/a&gt;. Esto lo hice escribiendo tareas (Tasks) de AjGenesis que pueden invocarse desde ese gran utilitario. Yo uso además, el utilitario &lt;a class="" href="http://www.swoogan.com/nantgui.html" target="_blank"&gt;NAnt-GUI&lt;/a&gt; para ejecutar los archivos .build desde una ventana gráfica.&lt;/p&gt;
&lt;p&gt;Escribamos un archivo &lt;strong&gt;default.build&lt;/strong&gt; con el contenido (revise y modifique la property ajgenesis.dir para que refleje el directorio donde ha dejado al AjGenesis):&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;project name=&amp;quot;Example 1&amp;quot; default=&amp;quot;build&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;property name=&amp;quot;ajgenesis.dir&amp;quot; value=&amp;quot;c:/ajlopez/dev/AjGenesis-0.4.3&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;property name=&amp;quot;nanttasks.dir&amp;quot; value=&amp;quot;${ajgenesis.dir}/bin&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;target name=&amp;quot;clean&amp;quot; description=&amp;quot;cleans build directory&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;delete dir=&amp;quot;${build.dir}&amp;quot; verbose=&amp;quot;true&amp;quot; if=&amp;quot;${directory::exists(build.dir)}&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name=&amp;quot;loadtasks&amp;quot; description=&amp;quot;loads AjGenesis tasks&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;loadtasks assembly=&amp;quot;${nanttasks.dir}/AjGenesis.NAnt.dll&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;target name=&amp;quot;init&amp;quot; depends=&amp;quot;loadtasks&amp;quot; description=&amp;quot;init the AjGenesis model&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;loadmodel model=&amp;quot;Project.xml&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;target name=&amp;quot;build&amp;quot; depends=&amp;quot;init&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;executetask task=&amp;quot;Build.ajg&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Entonces, desde la línea de comando podemos invocar&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-family:Arial;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;nant&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Si tenemos configurado a ese utilitario, procesa el target default que de build.xml. Yo uso el NAnt-Gui, que me presenta la pantalla&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ajlopez.com/downloads/HelloWorld2.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Espero que este artículo les sirva como inicio de explicación a algunas de las características de AjGenesis. Espero escribir un próximo artículo, con ejemplos de uso de AjBasic dentro de las mismas plantillas, uso más intensivo del NAnt, manipulación del modelo en memoria, y generación de aplicaciones completas, en distintas plataformas y tecnologías.&lt;/p&gt;
&lt;p&gt;Si alguien le parece útil, les pido que lo difundan, por ejemplo, con artículo de cómo lo están usando, en su blog.&lt;/p&gt;
&lt;p&gt;Gracias por todo, 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;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=308486" 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/AjGenesis/default.aspx">AjGenesis</category></item><item><title>Generando Código</title><link>http://msmvps.com/blogs/lopez/archive/2005/11/06/74542.aspx</link><pubDate>Mon, 07 Nov 2005 02:10:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:74542</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=74542</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2005/11/06/74542.aspx#comments</comments><description>&lt;P&gt;En estos d&amp;#237;as he estado trabajando bastante en una nueva versi&amp;#243;n (0.4.2) de mi proyecto de generaci&amp;#243;n de c&amp;#243;digo &lt;A href="http://www.ajlopez.com/ajgenesis"&gt;AjGenesis&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Este a&amp;#241;o ya hab&amp;#237;a dado una charla en el &lt;A href="http://www.mug.org.ar"&gt;Microsoft User Groups&lt;/A&gt; de Argentina. Tienen la presentaci&amp;#243;n, material y enlaces relacionados en:&lt;/P&gt;
&lt;P&gt;&lt;A class=item href="http://www.ajlopez.net/ReferenciaVe.php?Id=94"&gt;Material del Seminario Software Factories y Generaci&amp;#243;n de C&amp;#243;digo en .NET&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;En esta neuva versi&amp;#243;n que estoy preparando, he conseguido:&lt;/P&gt;
&lt;P&gt;- Generar templates para C#&lt;BR&gt;- Generar templates para Java, PHP, JSP.&lt;BR&gt;- Armar scripts de creaci&amp;#243;n de base de datos para MS SQL y MySql&lt;BR&gt;- Data Mapper, Business Entities, Business Components, Services, Web Services, p&amp;#225;ginas ASPX de consulta y actualizaci&amp;#243;n&lt;BR&gt;- Integraci&amp;#243;n con NAnt. Esto realmente me facilita la ejecuci&amp;#243;n de las transformaciones y de los pasos de generaci&amp;#243;n de c&amp;#243;digo. Realmente es muy bueno poder armarlo autom&amp;#225;ticamente, usando, por ejemplo, una interfaz como el NAnt GUI.&lt;/P&gt;
&lt;P&gt;El pr&amp;#243;ximo viernes 11 de Noviembre, doy&amp;nbsp;una charla en &lt;A href="http://www.microsoft.com/argentina"&gt;Microsoft de Argentina&lt;/A&gt;, acompa&amp;#241;ado por Alejandro Jack y Mat&amp;#237;as Woloski, de &lt;A href="http://www.southworks.net"&gt;Southworks&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://msevents.microsoft.com/cui/EventDetail.aspx?culture=es-AR&amp;amp;EventID=1032285222&amp;amp;EventCategory=1"&gt;Model Driven Development, Software Factories y Generaci&amp;#243;n de C&amp;#243;digo en .NET&lt;/A&gt;&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Es gratuita, y habr&amp;#225; cerveza y papas fritas!!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=74542" 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/Arquitectura/default.aspx">Arquitectura</category></item><item><title>Enseñando PHP y MySql</title><link>http://msmvps.com/blogs/lopez/archive/2005/06/17/53769.aspx</link><pubDate>Fri, 17 Jun 2005 15:43:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:53769</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=53769</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2005/06/17/53769.aspx#comments</comments><description>&lt;P&gt;Hoy comienzo a dictar un curso presencial de PHP y MySql, organizado por el &lt;A href="http://www.clubdeprogramadores.com/" target=_blank&gt;Club de Programadores&lt;/A&gt;. Mi idea es dar ejemplos de los primeros elementos del lenguaje, luego manejo de formularios, cookies, variables de sesi&amp;#243;n, funciones, acceso a archivos.&amp;nbsp;Y una vez vistos esos temas, abordar MySql, con phpmyadmin, y las funciones mysql_ de PHP.&lt;/P&gt;
&lt;P&gt;Hacia el final, mostrar&amp;#233; alg&amp;#250;n sitio de ejemplo, y comentar&amp;#233; alguno de los innumerables proyectos de c&amp;#243;digo abierto que est&amp;#225;n en PHP. He dejado ejemplos, y material que ya tengo preparado, para bajarse de:&lt;/P&gt;
&lt;P&gt;&lt;A class=item href="http://www.ajlopez.net/ReferenciaVe.php?Id=80"&gt;Material del Curso de PHP y MySql&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Espero que les sirva.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=53769" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/PHP/default.aspx">PHP</category></item></channel></rss>