<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-35311316</id><updated>2011-11-11T19:03:26.178-03:00</updated><title type='text'>Mundo Java</title><subtitle type='html'>Aquí podras encontrar todo tipo de artículos relacionados con la programacion Java (web, escritorio, algoritmos, arquitectura de software, metodologias de desarrollo y patrones)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default?start-index=101&amp;max-results=100'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>106</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35311316.post-247467886783220352</id><published>2010-11-30T11:32:00.002-03:00</published><updated>2010-11-30T11:37:30.067-03:00</updated><title type='text'>Vota por Ninja IDE!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Rápidamente posteo algo importante: A votar por el IDE con más futuro!! &lt;a href="http://ninja-ide.org.ar/"&gt;Ninja IDE&lt;/a&gt;, otro desarrollo de un excelente programador, &lt;a href="http://utopia555.blogspot.com/"&gt;Diego Sarmentero&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a title="Votar por Ninja-IDE en los Premios PortalProgramas" href="http://www.portalprogramas.com/software-libre/premios/proyecto/102" class="PPPVoto"&gt;Votar por &lt;span&gt;Ninja-IDE&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;style&gt;a.PPPVoto{font-family:Arial;text-decoration:none;padding:7px 0 0 20px;width:230px;height:70px;display:block;font-size:70%;background:#fff url('http://91.121.23.67/stk/www.portalprogramas.com/imagenes/premios-software-libre/votarPrograma.png') no-repeat 0 0;color:#338800;}a.PPPVoto span{display:block;font-size:150%;font-weight:bold;margin-top:-1px;}&lt;/style&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-247467886783220352?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/247467886783220352/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=247467886783220352&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/247467886783220352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/247467886783220352'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/11/vota-por-ninja-ide.html' title='Vota por Ninja IDE!!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6261203440747752805</id><published>2010-09-07T11:04:00.000-03:00</published><updated>2010-09-07T11:05:23.650-03:00</updated><title type='text'>Charla en la UTN - WPF</title><content type='html'>&lt;div style="text-align: justify;"&gt;Si estás en Córdoba, Argentina, este viernes 10 de Septiembre, no te puedes perder la charla de &lt;span style="font-weight: bold;"&gt;"Windows Presentation Foundation (WPF)"&lt;/span&gt;, a las 17:30 y dictada por Diego Iglesias, a quién conozco personalmente y lleva varios años de experiencia. A no faltar!!&lt;br /&gt;&lt;br /&gt;Más info en el sitio de &lt;a href="http://uni-code.tumblr.com/"&gt;Uni-code&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://uni-code.tumblr.com/photo/1280/1078716580/1/tumblr_l8cu1bzx6F1qdvyqb"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 379px; height: 430px;" src="http://uni-code.tumblr.com/photo/1280/1078716580/1/tumblr_l8cu1bzx6F1qdvyqb" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6261203440747752805?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6261203440747752805/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6261203440747752805&amp;isPopup=true' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6261203440747752805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6261203440747752805'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/09/charla-en-la-utn-wpf.html' title='Charla en la UTN - WPF'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8471268498011460478</id><published>2010-09-06T21:25:00.002-03:00</published><updated>2010-09-06T21:47:25.822-03:00</updated><title type='text'>Excelente herramienta para múltiples bases de datos</title><content type='html'>&lt;div style="text-align: justify;"&gt;Resulta que tengo que realizar procesos de manipulación de datos en Java con varias bases de datos diferentes. Y no sólo diferentes, sino que son bases que no muchos conocen, como es el caso de &lt;a href="http://www.teradata.com/t/products-and-services/database/"&gt;Teradata&lt;/a&gt; y &lt;a href="http://www.google.com.ar/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBsQFjAA&amp;amp;url=http%3A%2F%2Fwww.greenplum.com%2Fproducts%2Fgreenplum-database%2F&amp;amp;rct=j&amp;amp;q=greenplum%20database&amp;amp;ei=GIiFTOmpPIO88gaL_aW_Ag&amp;amp;usg=AFQjCNGF2Uxq4MGZIaX6jKcMDlBSFqqHAg&amp;amp;cad=rja"&gt;Greenplum&lt;/a&gt;, sumado al viejo &lt;a href="http://www.oracle.com/us/products/database/index.html"&gt;Oracle&lt;/a&gt;.&lt;br /&gt;Bien, la cosa es que para hacer consultas simples y verificar datos básicos como nombres de tablas y columnas, esquemas, etc. para Oracle no tuve ningún problema, uso el viejo &lt;a href="http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html"&gt;SQLDeveloper&lt;/a&gt; y todos felices. Debo admitir que la última versión ha mejorado muchísimo, ya que las anteriores tenían varios bugs (dioooos, especialmente la que usaba en mi anterior trabajo, sobre el que no haré referencia, jajaja).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Bien, pero Teradata y Greenplum, no son bases de datos precisamente "baratas", mucho menos las herramientas para administrarlas. Y por sobre todo, mi objetivo no era administrar las bases, sino realizar consultas simples, no mucho más.&lt;br /&gt;&lt;br /&gt;¿Qué hacer? Bueno, finalmente encontré la solución a todos mis problemas en una sola herramienta: &lt;a href="http://squirrel-sql.sourceforge.net/"&gt;SQuirreL SQL&lt;/a&gt;. Si, ya lo sé, muchos van a decir "¿Recién la conoces ahora?". Siiiiiiiii, nunca tuve que usar múltiples bases de datos diferentes al mismo tiempo, siempre pude acceder con herramientas gratuitas a MySQL, Oracle, PostgreSQL.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Esta herramienta usa JDBC para acceder a casi (si, "casi") cualquier base de datos que acepte este tipo de conectores, por supuesto. &lt;span style="font-weight: bold;"&gt;Open source&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;escrita en Java&lt;/span&gt;, bastante potente desde el punto de vista de un desarrollador (no puedo hablar como DBA), y me permite realizar mi trabajo con un sólo programa abierto, múltiples tabs para cada conexión, ¿Qué más puedo pedir?, por ahora nada más.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8471268498011460478?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8471268498011460478/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8471268498011460478&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8471268498011460478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8471268498011460478'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/09/excelente-herramienta-para-multiples.html' title='Excelente herramienta para múltiples bases de datos'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1755627440779930202</id><published>2010-07-28T23:36:00.005-03:00</published><updated>2010-07-28T23:50:39.973-03:00</updated><title type='text'>Ok, me ganaste Spring (por ahora)</title><content type='html'>&lt;div style="text-align: justify;"&gt;No sé porqué dejé pasar tanto tiempo. Pero ahora me doy cuenta de que pasó algo importante y no pude estar a tiempo. Grrrrrrrr!! (me da bastante rabia....)&lt;br /&gt;&lt;br /&gt;La cosa es que aunque un poco tarde, pero estoy decidido a aprender &lt;a href="http://www.springsource.com/"&gt;Spring&lt;/a&gt;. Cada vez ofrece más prestaciones, cada vez se usa más. Ya no basta con Struts o Struts 2. Pero lo bueno es que me encuentro motivado. Y esta motivación ha vuelto a la vida este blog!!&lt;br /&gt;&lt;br /&gt;Así que lo más probable es que esté posteando cosas relacionadas a este "pequeño" framework.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1755627440779930202?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1755627440779930202/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1755627440779930202&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1755627440779930202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1755627440779930202'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/07/ok-me-ganaste-spring-por-ahora.html' title='Ok, me ganaste Spring (por ahora)'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4292864338088420417</id><published>2010-04-26T15:00:00.002-03:00</published><updated>2010-04-26T15:10:14.356-03:00</updated><title type='text'>"Mientras más conozco JSP, menos me gusta"</title><content type='html'>&lt;div style="text-align: justify;"&gt;Si, esto fue lo que me dijo un &lt;a href="http://ntc.cuquo.com/"&gt;amigo &lt;/a&gt;después de su primera clase de Java Web. "&lt;span style="font-weight: bold;"&gt;¿Por qué tengo que escribir Servlets?"&lt;/span&gt; No es raro este tipo de disconformidades, es más, hasta estoy de acuerdo hasta cierto punto. Pero todo tiene una explicación.Y lo que sigue lo voy a escribir como amante de Java que tiene más experiencia en .NET (WTF?, sip, es así, las vueltas que da la vida...).&lt;br /&gt;&lt;br /&gt;Seamos sinceros, hablando de desarrollo web, .NET es lo mismo que J2E. Un servlet de java se llama IHTTPHandler en .NET, una JSP de java se llama ASPX en .NET. Una directiva  @page en JSP se llama @page en .NET!!&lt;br /&gt;La cosa es la siguiente, el modelo de programación impuesto por M$, sumado al extraordinario IDE (Visual Studio, tengo que admitirlo, es &lt;span style="font-weight: bold;"&gt;casi tan bueno&lt;/span&gt; como mi amado eclipse), hace que la forma de programación sea muchísimo más sencilla que una aplicación web java, donde si o si tenemos que saber que existen protocolos, sesiones, request, response, etc. Además, si hay algo bueno de .NET, definitivamente es la forma en la que solucionaron el  desarrollo visual de páginas web. Los controles de usuario, master pages y global.asax la  verdad que contrastan enormemente contra los parches impuestos en java para JSP (directivas, declaraciones, scriplets, JSTL, expression language, templates, etc)&lt;br /&gt;&lt;br /&gt;Por otro lado, con J2E tenemos algo fundamental, la posibilidad de elegir. Parece un dato menor, pero es quizá lo más importante que tenemos. Con java podemos elegir realizar nuestro propio framework con la complejidad que deseemos, desde el clásico "big switch" hasta monstruos grandes como Spring o JSF. Podemos encontrar APIs open-source para casi todo, lo que simplifica también la programación. Quízá no tengamos un VS para Java, pero en realidad es cuestión de tener los plugins adecuados y aprender a usar el IDE que nos haya tocado en suerte, sea eclipse, Netbeans, o cualquier otro.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4292864338088420417?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4292864338088420417/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4292864338088420417&amp;isPopup=true' title='9 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4292864338088420417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4292864338088420417'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/04/mientras-mas-conozco-jsp-menos-me-gusta.html' title='&quot;Mientras más conozco JSP, menos me gusta&quot;'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8678408919118736578</id><published>2010-04-13T16:39:00.006-03:00</published><updated>2010-04-14T10:42:35.059-03:00</updated><title type='text'>Python day en la UTN - 17 de Abril 10hs</title><content type='html'>Completamente sin difusión, y organizado por Grulic y la UTN Córdoba (según el cartel que vi), este sábado 17 de Abril a partir de las 10 de la mañana, se realizará el Python Day. Esta est toda la info que tengo hasta el momento, cuando me entere de más, acutalizo el post.&lt;br /&gt;&lt;br /&gt;Ahora si cuento con toda la info, gracias a correo de Diego Sarmentero y cadena mediante:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Pythoneros y co-listeros en general.&lt;br /&gt;&lt;br /&gt;El día 17 de abril de 2010 se realizará una Jornada de charlas sobre&lt;br /&gt;Python, contando con importantes disertantes. Las charlas se llevarán&lt;br /&gt;a cabo en el Salón de Usos Múltiples de la Universidad Tecnológica&lt;br /&gt;Nacional, Facultad Regional Córdoba, entre las 10 y las 17 horas.&lt;br /&gt;&lt;br /&gt;Entrada&lt;br /&gt;======&lt;br /&gt;&lt;br /&gt;La entrada es completamente gratuita y abierta a todos los&lt;br /&gt;interesados. En caso de excederse el cupo del aula se dará prioridad&lt;br /&gt;al orden de llegada.&lt;br /&gt;&lt;br /&gt;Programa&lt;br /&gt;=======&lt;br /&gt;&lt;br /&gt;Salón de Usos Múltiples&lt;br /&gt;&lt;br /&gt;  10:00       Presentación e Introducción a Python&lt;br /&gt;  Nivel: básico – Orador: Fabián Gibellini&lt;br /&gt;&lt;br /&gt;  11:00       Rich internet applications en Python&lt;br /&gt;  Nivel: intermedio – Orador: Mariano Guerra&lt;br /&gt;&lt;br /&gt;  12:00       Entornos independientes en Python con virtualenv&lt;br /&gt;  Nivel: intermedio – Orador: Manuel Kaufmann&lt;br /&gt;&lt;br /&gt;  13:00       Almuerzo&lt;br /&gt;&lt;br /&gt;  14:00       Pycasa inside: PyGTK on Glade&lt;br /&gt;  Nivel: básico – Orador: Natalia Bidart&lt;br /&gt;&lt;br /&gt;  15:00       Utilizando la Google API con Python&lt;br /&gt;  Nivel: intermedio – Orador: Matías Bordese&lt;br /&gt;&lt;br /&gt;  16:00       Plone 4&lt;br /&gt;  Nivel: básico – Orador: Roberto Allende&lt;br /&gt;&lt;br /&gt;  17:00       Introducción a PyQT&lt;br /&gt;  Nivel: intermedio – Orador: Diego Sarmentero&lt;br /&gt;&lt;br /&gt;Accesos&lt;br /&gt;=======&lt;br /&gt;&lt;br /&gt;Para llegar hasta la UTN-FRC, podés tomarte cualquiera de los&lt;br /&gt;siguientes colectivos:&lt;br /&gt;&lt;br /&gt;      * Paran en la puerta: A6, A, C3, C6, C7, N3, N9, R2, R5, R6,&lt;br /&gt;E1, E6, 600/601 y 500/501&lt;br /&gt;&lt;br /&gt;Más información&lt;br /&gt;============&lt;br /&gt;&lt;br /&gt;Podrán encontrar toda esta información y más en la siguiente URL:&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.grulic.org.ar/%7Eignacio/pythonday3/" target="_blank"&gt;http://www.grulic.org.ar/~&lt;wbr&gt;ignacio/pythonday3/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8678408919118736578?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8678408919118736578/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8678408919118736578&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8678408919118736578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8678408919118736578'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/04/python-day-en-la-utn-17-de-abril-10hs.html' title='Python day en la UTN - 17 de Abril 10hs'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8997587458960690317</id><published>2010-04-12T18:07:00.002-03:00</published><updated>2010-04-12T18:14:30.247-03:00</updated><title type='text'>Noticias atrasadas</title><content type='html'>&lt;div style="text-align: justify;"&gt;Nooooooooooooooooooooooooooo!!! De lo que me acabo de enterar! Justo que vuelvo a escribir con todo, &lt;span style="font-weight: bold;"&gt;James Gosling&lt;/span&gt; (categoría semi-dios de la informática), ha &lt;span style="font-weight: bold;"&gt;renunciado a Oracle&lt;/span&gt;. No da una explicación concreta en su &lt;a href="http://nighthacks.com/roller/jag/entry/time_to_move_on"&gt;blog&lt;/a&gt;, pero sin duda Sun/Oracle pierden el ícono más importante de Java.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Lo único que falta es que renuncie Duke...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://hosting.udlap.mx/estudiantes/diego.colchadosa/imagenes/James_Gosling.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 237px; height: 327px;" src="http://hosting.udlap.mx/estudiantes/diego.colchadosa/imagenes/James_Gosling.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Cualquier cosa James, puedo hablar con mi jefe acá en la facultad, seguro va a haber un puesto para vos!&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8997587458960690317?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8997587458960690317/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8997587458960690317&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8997587458960690317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8997587458960690317'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/04/noticias-atrasadas.html' title='Noticias atrasadas'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7934701038672113592</id><published>2010-04-11T18:32:00.003-03:00</published><updated>2010-04-11T20:34:59.251-03:00</updated><title type='text'>Alternativas para hacer análisis estadístico</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este post fue motivado por la duda de una estudiante. En una materia de la facultad (simulación), se requiere generar una serie de números aleatorios y realizar operaciones estadísticas con esos valores. A continuación, se debe generar un gráfico con los valores calculados.&lt;br /&gt;&lt;br /&gt;Ahora bien, con una hoja de cálculo de Excel o Calc, se puede realizar bastante sencillo, pero no sería tan divertido como hacerlo en Java! Así que me puse a investigar un poquito para ver qué alternativas se encuentran que nos ayuden a realizar estos cálculos. Fue así como me topé con las siguientes herramientas:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Para realizar cálculos estadísticos:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://commons.apache.org/math/"&gt;Apache Commons Math&lt;/a&gt;: ¿Hay algo para lo que Apache no haya realizado un API? Seguramente, pero este paquete ofrece lo básico para realizar análisis estadístico en Java, como por ejemplo, cálculo de varianza, regresión lineal, interpolación, resolución de ecuaciones diferenciales, generación de números aleatorios con restricciones, etc. La verdad es que no parece un paquete tan básico, es más, para los problemas tipos de estadística, alcanza y sobra.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://acs.lbl.gov/%7Ehoschek/colt/"&gt;Colt&lt;/a&gt;: Una librería para realizar cálculos de alta performance. Aparentemente, los creadores de esta API quieren pelearle mano a mano al clásico lenguaje de físicos, matemáticos y astrónomos: Fortran (si, se sigue usando y mucho).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jump-math.sourceforge.net/"&gt;JUMP Ultimate math package&lt;/a&gt;: Puede que sean el 'ultimate' o simplemente no sirva, la descripción del producto es muy, pero muy escaza, así que no daré mucha referencia. Además, es más matemático que estadístico.&lt;br /&gt;&lt;br /&gt;Estas son las librerías que más me llamaron la atención, pero pueden encontrar más info en &lt;a href="http://math.nist.gov/javanumerics/#libraries"&gt;http://math.nist.gov/javanumerics/#libraries&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Para realizar gráficos:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jfree.org/index.html"&gt;JFreeChart&lt;/a&gt;: una API clásica para realizar gráficos en Java. Como puede generar imágines, es muy fácil utilizarla en aplicaciones de escritorio como en web.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jcckit.sourceforge.net/"&gt;JCCKit&lt;/a&gt; (Java Chart Construction Kit): una librería open source cuya principal ventaja es el tamaño. Menos de 100Kb de espacio que ocupará en nuestra aplicación. Esto resulta útil para aplicaciones móviles sin duda.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/birt/phoenix/"&gt;BIRT&lt;/a&gt;: Como siempre, eclipse también tiene mucho más que un excelente IDE para ofrecer. BIRT es una herramienta para la creación de reportes que por supuesto, también ofrece la generación de gráficos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/intl/es-ES/apis/charttools/index.html"&gt;Google Chart Tools&lt;/a&gt;: no es una librería en sí, sino que podemos generar una  imagen (estática o dinámica) a partir de una URL. Esto se usaría más dentro de una aplicación web más que swing.&lt;br /&gt;&lt;br /&gt;Más info en &lt;a href="http://java-source.net/open-source/charting-and-reporting"&gt;http://java-source.net/open-source/charting-and-reporting&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Además, puedes estar pensando "Demasiado complicado, por qué no generar directamente un archivo de Excel y listo?". Bueno bueno, para esto tienes &lt;a href="http://jexcelapi.sourceforge.net/"&gt;JExcelApi&lt;/a&gt;, con la que puedes manipular archivos Excel (pero sólo hasta la versión 2003).&lt;br /&gt;&lt;br /&gt;Espero que haya sido de utilidad. Si algún dia encuentro tiempo, veré de postear algún ejemplo andando.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7934701038672113592?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7934701038672113592/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7934701038672113592&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7934701038672113592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7934701038672113592'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/04/alternativas-para-hacer-analisis.html' title='Alternativas para hacer análisis estadístico'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1267271583003574841</id><published>2010-04-07T13:52:00.002-03:00</published><updated>2010-04-07T14:34:23.687-03:00</updated><title type='text'>En breve, vuelve Mundo Java!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Efectivamente. Después de la presión de grupo impuesta por &lt;a href="http://ntc.cuquo.com/"&gt;NTC&lt;/a&gt;, &lt;a href="http://utopia555.blogspot.com/"&gt;Gaturro &lt;/a&gt;y varios más, voy a volver con este blog olvidado. Ya estoy preparando el primer post acerca de &lt;a href="http://www.jfree.org/jfreechart/"&gt;JFreeChart&lt;/a&gt;, y me siento muy feliz de volver!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Java No está muerto&lt;/span&gt; (sólo retrasado hasta &lt;a href="http://openjdk.java.net/projects/jdk7/"&gt;Septiembre&lt;/a&gt; de este año parece)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1267271583003574841?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1267271583003574841/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1267271583003574841&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1267271583003574841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1267271583003574841'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2010/04/en-breve-vuelve-mundo-java.html' title='En breve, vuelve Mundo Java!!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5929147949065007925</id><published>2009-08-23T19:06:00.006-03:00</published><updated>2009-08-25T15:57:36.980-03:00</updated><title type='text'>Algunas cosas nuevas de Java 7</title><content type='html'>&lt;div style="text-align: justify;"&gt;Estaba viendo algunos mails de &lt;a href="http://osum.sun.com/group/utnfrc"&gt;OSUM&lt;/a&gt; cuando llegué al siguiente video donde se muestran algunas cosas nuevas con las que está por venir el próximo &lt;a href="http://java.sun.com/features/jdk/7/"&gt;JDK 7&lt;/a&gt;.  Todavía sin fecha de lanzamiento (lo último que se sabe, es el Milestone 5, aproximadamente el 10/09/2009), algunos de los cambios son:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modularización&lt;/span&gt;: lo que se quiere hacer es dividir todo el paquete para hacer lo más "liviano" a Java. De esta manera, el usuario final podrá bajar automáticamente todos los módulos que necesite en ese momento.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Soporte multi-lenguaje&lt;/span&gt;: comenzando con Ruby y moviéndose hacia Python, se está modificando la máquina virtual para dar soporte a otros lenguajes.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Nueva librería de IO (NIO 2) &lt;/span&gt;: una de las mejoras que muestra es la búsqueda por directorios automática (si, no más hacerlo a mano!!). Aunque el ejemplo de código que muestra, no se ve tan sencillo como lo esperaría.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Swing&lt;/span&gt;: las mejoras no son la gran cosa (mirándolo en un sentido muy general). Por fin tendremos un DatePicker y un par de controles adicionales.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Cambios menores a la sintaxis&lt;/span&gt;: por ejemplo, el operador "Elvis" (ejemplo en el video)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Les dejo el video y &lt;a href="http://openjdk.java.net/projects/jdk7/features/#f619"&gt;este link&lt;/a&gt; para saber más detalles.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://blip.tv/play/AYGYsmIC" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="420" height="300"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5929147949065007925?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5929147949065007925/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5929147949065007925&amp;isPopup=true' title='12 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5929147949065007925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5929147949065007925'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/08/algunas-cosas-nuevas-de-java-7.html' title='Algunas cosas nuevas de Java 7'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3033386958883679186</id><published>2009-08-19T01:19:00.003-03:00</published><updated>2009-08-19T01:42:06.109-03:00</updated><title type='text'>VMWare - Springsource (El que tiene plata, hace lo que quiere)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/Sot-Alh4fTI/AAAAAAAAARY/gFJAZXNHZzY/s1600-h/plata.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 97px; height: 97px;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/Sot-Alh4fTI/AAAAAAAAARY/gFJAZXNHZzY/s200/plata.gif" alt="" id="BLOGGER_PHOTO_ID_5371525529108774194" border="0" /&gt;&lt;/a&gt;&lt;a href="http://marianoguerra.blogspot.com/"&gt;Mariano Guerra&lt;/a&gt; me mandó &lt;a href="http://sacha.labourey.com/2009/08/13/vmware-acquisition-of-springsource-thoughts/"&gt;un link&lt;/a&gt; con un análisis muy interesante acerca de la compra de &lt;a href="http://www.springsource.org/"&gt;SpringSource&lt;/a&gt; por parte de &lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt;. Pero ¿Qué demónios tiene que ver VMWare con JEE?. Bueno, aparentemente mucho.&lt;br /&gt;Según lo que plantea el autor del post, todas las compras que hemos visto en los últimos tiempos empiezan a dar forma a una nueva estructura de mercado de middleware. Si hacemos un poco de memoria, podemos ver que:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;IBM &lt;/span&gt;compró &lt;span style="font-weight: bold;"&gt;Gluecode &lt;/span&gt;(y casi se adueñó de Gerónimo). Esto significa que la Big Blue ya tiene (otro) servidor de aplicaciones, virtualización, cloud y todas esas cosas nuevas.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;RedHat &lt;/span&gt;compró &lt;span style="font-weight: bold;"&gt;JBoss &lt;/span&gt;(sistema operativo - no será tan libre - + toda una capa middleware)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Oracle &lt;/span&gt;compró &lt;span style="font-weight: bold;"&gt;Sun &lt;/span&gt;(y recordemos que Sun había comprado a &lt;span style="font-weight: bold;"&gt;MySQL&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;y ahora &lt;span style="font-weight: bold;"&gt;VMWare &lt;/span&gt;compra a &lt;span style="font-weight: bold;"&gt;SpringSource&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;Con respecto al open-source (Gerónimo, JBoss, Spring, etc) a pesar de que todos dicen "&lt;span style="font-weight: bold;"&gt;nothing's changed"&lt;/span&gt;, tendremos que esperar y ver que pasa. Aparentemente (y me imagino que la crisis mundial tiene algo que ver), cada vez vemos menos empresas en competencia. &lt;span style="font-weight: bold;"&gt;¿Será el momento de ofrecer una solución middleware tercermundista? ¿Podremos competir?&lt;/span&gt; (seguiré soñando)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3033386958883679186?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3033386958883679186/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3033386958883679186&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3033386958883679186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3033386958883679186'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/08/vmware-springsource-el-que-tiene-plata.html' title='VMWare - Springsource (El que tiene plata, hace lo que quiere)'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6uz0hSfL-0M/Sot-Alh4fTI/AAAAAAAAARY/gFJAZXNHZzY/s72-c/plata.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3751371704716229480</id><published>2009-08-16T18:45:00.002-03:00</published><updated>2009-08-16T19:07:42.041-03:00</updated><title type='text'>Patrón MVC - Struts versión 1 y 2</title><content type='html'>&lt;div style="text-align: justify;"&gt;Les dejo los slides de la última charla de que dí en el Laboratorio de Investigación  de Software en la Universidad Tecnológica Nacional, el pasado 11 de Agosto.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_1869664"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/mundojava/patron-mvc-struts-1-y-2" title="Patron Mvc Struts 1 y 2"&gt;Patron Mvc Struts 1 y 2&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=patronmvc-090816170431-phpapp02&amp;amp;stripped_title=patron-mvc-struts-1-y-2"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=patronmvc-090816170431-phpapp02&amp;amp;stripped_title=patron-mvc-struts-1-y-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/mundojava"&gt;mundojava&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3751371704716229480?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3751371704716229480/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3751371704716229480&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3751371704716229480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3751371704716229480'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/08/patron-mvc-struts-version-1-y-2.html' title='Patrón MVC - Struts versión 1 y 2'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4365393135876368609</id><published>2009-07-28T01:08:00.003-03:00</published><updated>2009-07-28T01:28:11.093-03:00</updated><title type='text'>Llegaron los regalos!!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Si, por fin llegaron los regalos de &lt;span style="font-weight: bold;"&gt;Sun Microsystems&lt;/span&gt; para repartir en el ciclo de  charlas del &lt;a href="http://www.investigacion.frc.utn.edu.ar/mslabs/Pagina%20Nueva/multiflex32/index.html"&gt;Laboratorio de Investigación de Software&lt;/a&gt;, gracias al programa &lt;a href="http://osum.sun.com/group/utnfrc"&gt;OSUM&lt;/a&gt; &lt;span style="font-weight: bold;"&gt;(Open Source University Meetup)&lt;/span&gt; y por supuesto, al OSUM leader para la UTN-FRC, que es un tipo grossisimo (o sea, yo).&lt;br /&gt;&lt;br /&gt;Les cuento que la primer charla será &lt;span style="font-weight: bold;"&gt;Patrón MVC - Struts 1 y 2&lt;/span&gt; y la dictaré yo (intentaré de que sea lo más decente posible, ja). Esta charla va a ser el martes 04 de agosto a las 19 hs en el Laboratorio (aula 15).&lt;br /&gt;&lt;br /&gt;Les dejo una foto de los regalos, &lt;span style="font-weight: bold;"&gt;¿Quieren? Van a tener que asistir a la charla.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/Sm59SIkgBpI/AAAAAAAAARQ/8-tBjkOrSos/s1600-h/100_0275.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/Sm59SIkgBpI/AAAAAAAAARQ/8-tBjkOrSos/s320/100_0275.JPG" alt="" id="BLOGGER_PHOTO_ID_5363361956736534162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para más info, búsquenos en Facebook con &lt;a href="mailto:lisutn@gmail.com" target="_blank"&gt;lisutn@gmail.com&lt;/a&gt; y únanse al grupo OSUM &lt;a href="http://osum.sun.com/group/utnfrc"&gt;http://osum.sun.com/group/utnfrc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4365393135876368609?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4365393135876368609/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4365393135876368609&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4365393135876368609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4365393135876368609'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/07/llegaron-los-regalos.html' title='Llegaron los regalos!!!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/Sm59SIkgBpI/AAAAAAAAARQ/8-tBjkOrSos/s72-c/100_0275.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2815540908354355048</id><published>2009-06-24T00:32:00.007-03:00</published><updated>2009-06-24T15:40:21.656-03:00</updated><title type='text'>E pur si muove - Galileo programa en eclipse</title><content type='html'>&lt;div style="text-align: justify;"&gt;Justo acabo de terminar un ejemplo de Servlets (en Netbeans, ja!) cuando aparece la gran noticia: &lt;span style="font-weight: bold;"&gt;Eclipse Galileo&lt;/span&gt; ya está aquí!!&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Si, todos los años Eclipse lanza una nueva versión, no sólo del IDE, sino que en esta ocasión se actualizan &lt;span style="font-weight: bold;"&gt;30 proyectos&lt;/span&gt; adicionales. Pueden ver un listado de todos los proyecto &lt;a href="http://www.eclipse.org/galileo/projects.php"&gt;aquí&lt;/a&gt;. Entre los más importantes encontramos a &lt;span style="font-weight: bold;"&gt;BIRT &lt;/span&gt;(para business intelligence), &lt;span style="font-weight: bold;"&gt;Dali &lt;/span&gt;(para JPA), &lt;span style="font-weight: bold;"&gt;GEF &lt;/span&gt;(el framework para desarrollo de plugins con interfaces visuales) y &lt;span style="font-weight: bold;"&gt;MTJ &lt;/span&gt;(para desarrollo móbil).&lt;br /&gt;&lt;br /&gt;El gran ausente desde hace mucho tiempo: &lt;span style="font-weight: bold;"&gt;Visual Editor&lt;/span&gt;. Es una verdadera lástima. De hecho, cuando tenga un tiempo, me gustaría desarrollar uno propio (pero que no tenga tantos bugs como VE, ja!)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center; color: rgb(255, 0, 0);"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Algo anda mal o por lo menos es muy raro&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;En el RC 4, la lista de versiones de eclipse bajadas es encabezada por ¿Java?, NOOO, &lt;span style="font-weight: bold;"&gt;PHP&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/SkGseYndWKI/AAAAAAAAARA/XSXPJ_chdsU/s1600-h/eclipseRC4_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 176px;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/SkGseYndWKI/AAAAAAAAARA/XSXPJ_chdsU/s320/eclipseRC4_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5350747470296864930" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/SkGsh6VNVXI/AAAAAAAAARI/VgSKaykRElM/s1600-h/eclipseRC4_2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 113px;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/SkGsh6VNVXI/AAAAAAAAARI/VgSKaykRElM/s320/eclipseRC4_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5350747530886731122" border="0" /&gt;&lt;/a&gt;Naturalmente, mi pensamiento no puede ser otro más que &lt;span style="font-weight: bold;"&gt;WTF!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Saludos&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2815540908354355048?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2815540908354355048/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2815540908354355048&amp;isPopup=true' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2815540908354355048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2815540908354355048'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/06/e-pur-si-muove-galileo-programa-en.html' title='E pur si muove - Galileo programa en eclipse'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6uz0hSfL-0M/SkGseYndWKI/AAAAAAAAARA/XSXPJ_chdsU/s72-c/eclipseRC4_1.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4361793245071965465</id><published>2009-06-20T15:44:00.005-03:00</published><updated>2009-06-20T16:03:56.512-03:00</updated><title type='text'>Nueva generación de programadores con Alice</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.alice.org/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 191px;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/Sj0xX9SmQ7I/AAAAAAAAAQ4/yb86DdbF7go/s320/alice.jpg" alt="" id="BLOGGER_PHOTO_ID_5349486220045337522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Recuerdo que &lt;a href="http://utopia555.blogspot.com/"&gt;Diego Sarmentero&lt;/a&gt; me había comentado hace tiempo sobre este software para enseñar programación. Hoy lo bajé y me puse a jugar un rato. La verdad es que está genial para aprender a programar. La idea de &lt;span style="font-weight: bold;"&gt;Carniege Mellon&lt;/span&gt; y la combinación de &lt;span style="font-weight: bold;"&gt;Java &lt;/span&gt;+ &lt;span style="font-weight: bold;"&gt;The Sims 2 &lt;/span&gt;ha sido fantástica.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alice.org/"&gt;Alice &lt;/a&gt;es un entorno de programación 3-D. La idea es programar orientado a objetos, pero sin usar dierctamente un lenguaje de programación. Lo que hacemos aquí es directamente identificar un objeto sobre la pantalla y "arrastrar" acciones a lo que sería el editor de código:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/Sj0xPRk-LzI/AAAAAAAAAQw/ZxEYiyBNJow/s1600-h/alice_editor.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 211px;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/Sj0xPRk-LzI/AAAAAAAAAQw/ZxEYiyBNJow/s320/alice_editor.jpg" alt="" id="BLOGGER_PHOTO_ID_5349486070872289074" border="0" /&gt;&lt;/a&gt;También tenemos una pestaña donde el estudiante se familiariza con métodos y propiedades de los objetos, además de poder responder ante distintos eventos, como por ejemplo las teclas de dirección. Esto, sumado al hecho de tener todo un mundo en 3-D para poder realizar acciones, motiva al estudiante a crear cosas realmente muy buenas.&lt;br /&gt;&lt;br /&gt;Les dejo un video adicional para que vean:&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Nm7bv4wduTI&amp;amp;hl=es&amp;amp;fs=1&amp;amp;rel=0"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Nm7bv4wduTI&amp;amp;hl=es&amp;amp;fs=1&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pablo&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4361793245071965465?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4361793245071965465/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4361793245071965465&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4361793245071965465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4361793245071965465'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/06/nueva-generacion-de-programadores-con.html' title='Nueva generación de programadores con Alice'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/Sj0xX9SmQ7I/AAAAAAAAAQ4/yb86DdbF7go/s72-c/alice.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5139879252719037250</id><published>2009-06-14T16:03:00.006-03:00</published><updated>2009-06-14T17:16:04.975-03:00</updated><title type='text'>No seré tan OSUM, no seré tan líder</title><content type='html'>&lt;div style="text-align: justify;"&gt;El famosísimo &lt;a href="http://marianoguerra.blogspot.com/"&gt;Mariano Guerra&lt;/a&gt; (ver &lt;a href="http://www.emesene.org/"&gt;emesene.org&lt;/a&gt;), me contactó con el &lt;span style="font-weight: bold;"&gt;Sun ambassador&lt;/span&gt; de la UNC (Universidad Nacional de Córdoba) &lt;span style="font-weight: bold;"&gt;Elías Andrawos&lt;/span&gt;, quien solemnemente me ha nombrado &lt;span style="font-weight: bold;"&gt;OSUM Leader de la UTN&lt;/span&gt; (Universidad Tecnológica Nacional).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;La idea es organizar grupos de investigación, charlas, cursos y grupos de estudio en la UTN. Con Elías tenemos muchísimas ideas que esperamos concretar en los próximos meses. Por ejemplo, ya estamos pensando en organizar un grupo de estudio para certificarnos en Java (&lt;a href="http://www.sun.com/training/certification/java/scjp.xml"&gt;SCJP&lt;/a&gt;).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Y para comenzar, he creado un &lt;a href="http://osum.sun.com/group/utnfrc"&gt;grupo&lt;/a&gt; en la página de &lt;a href="http://osum.sun.com/"&gt;OSUM. &lt;/a&gt;A todo aquél que quiera unirse será bienvenido. Dentro de poco iré agregando contenido al grupo y a comenzar a generar charlas y eventos.&lt;br /&gt;&lt;br /&gt;Por último, debido a mis extremadas limitaciones de diseño, por el momento tengo un logotipo &lt;span style="font-weight: bold;"&gt;FEÍSIMO&lt;/span&gt;, y un par de opciones adicionales. Voten la menos fea.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/SjVZmRA-WGI/AAAAAAAAAQo/i5dyJtQ7V8M/s1600-h/logos.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 359px; height: 56px;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/SjVZmRA-WGI/AAAAAAAAAQo/i5dyJtQ7V8M/s320/logos.JPG" alt="" id="BLOGGER_PHOTO_ID_5347278646509721698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5139879252719037250?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5139879252719037250/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5139879252719037250&amp;isPopup=true' title='10 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5139879252719037250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5139879252719037250'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/06/no-sere-tan-osum-no-sere-tan-lider.html' title='No seré tan OSUM, no seré tan líder'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6uz0hSfL-0M/SjVZmRA-WGI/AAAAAAAAAQo/i5dyJtQ7V8M/s72-c/logos.JPG' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7073359040361184236</id><published>2009-06-13T15:57:00.003-03:00</published><updated>2009-06-13T16:30:37.748-03:00</updated><title type='text'>Crítica destructiva</title><content type='html'>&lt;div style="text-align: justify;"&gt;Me enojé, hoy no quiero ver lo positivo dentro de lo negativo, ya no entiendo que significa "look at the bright side". No querido lector, &lt;span style="font-weight: bold;"&gt;hoy voy a ser mala onda&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Lo que sucede es que sigo viendo como l&lt;span style="font-weight: bold;"&gt;os programadores java nos complicamos la existencia&lt;/span&gt; creado cosas cada vez más complicadas y ridículas, y reinventando todo lo que ya existía en otros lenguajes.&lt;br /&gt;Veía el otro día en &lt;a href="http://www.theserverside.com/"&gt;The Server Side&lt;/a&gt;, la presentación de, mmmm...., como decirlo, (herramienta, compilador, lenguaje) algo así llamado &lt;a href="http://www.hybridserverpages.com/"&gt;Hybrid Server Pages&lt;/a&gt;. Bien, todos los que hemos hecho aunque sea páginas de ejemplo sencillas en JSP sabemos que no es lo más fácil ni lo más adecuado el intercalar código java en medio de HTML. También sabemos que ningún framework ni lenguaje (si, hablo de .NET), ha logrado algo interesante. Si bien me encanta la manera en que lo maneja .NET, el beneficio viene por el lado del IDE más que del framework en sí. Esto mismo se aplica a JSF.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Bueno, resulta que estos muchachos no tuvieron mejor idea que plantear como una gran revelación el hecho de intercalar código Java en HTML, &lt;span style="font-weight: bold;"&gt;pero sin usar tags especiales!!!!&lt;/span&gt; (&lt;% %&gt;, básicamente)&lt;br /&gt;Quizá lo más interesante que plantean es que el resultado de la página &lt;span style="font-weight: bold;"&gt;"se compila"&lt;/span&gt; y que &lt;span style="font-weight: bold;"&gt;no es una herramienta de templates&lt;/span&gt;. Sigo teniendo mis reservas con estos últimos puntos, ya que el resultado final va a ser: HTML!!! (¿No es esto lo que hacen las herramientas de templates?)&lt;br /&gt;&lt;br /&gt;Bueno, como comentario final, una imagen vale más que mil palabras:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/SjP9njqxnWI/AAAAAAAAAQg/TAj_-PihOcs/s1600-h/jsherman.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 314px; height: 257px;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/SjP9njqxnWI/AAAAAAAAAQg/TAj_-PihOcs/s320/jsherman.jpg" alt="" id="BLOGGER_PHOTO_ID_5346896038650289506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Es mi imágen de MSN y Gtalk por estos días...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7073359040361184236?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7073359040361184236/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7073359040361184236&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7073359040361184236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7073359040361184236'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/06/critica-destructiva.html' title='Crítica destructiva'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/SjP9njqxnWI/AAAAAAAAAQg/TAj_-PihOcs/s72-c/jsherman.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5373722277479499172</id><published>2009-06-06T18:33:00.002-03:00</published><updated>2009-06-06T19:21:05.562-03:00</updated><title type='text'>Revolución Multicore - ¿Qué revolución?</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ya ni recuerdo cómo llegué a un artículo titulado &lt;a href="http://java.dzone.com/news/java-7-ready-multicore-revolut"&gt;"Is Java 7 ready for the multicore revolution?"&lt;/a&gt;, pero lo importante es que me abrió la cabeza un poco hacia otras ideas. Lo cierto es que el multicore ya está aquí desde hace rato y la única forma de aumentar la performance de nuestras aplicaciones será el desarrollo de aplicaciones concurrentes. Esto (en mi caso) está muy bueno, ya que me interesan muchísimo los problemas derivados de &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html"&gt;threading&lt;/a&gt;.&lt;br /&gt;Por supuesto, el aumento de la performance va a depender de muchísimas cosas, la primera de ellas es el tipo de aplicación que se desarrolle, por ejemplo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si tenemos una aplicación de escritorio para diseño de escenarios 3D, sin duda va a requerir muchísimo procesamiento.&lt;/li&gt;&lt;li&gt;Si estamos desarrollando (o corriendo) un video juego de los buenos, necesitamos mucha capacidad de proceso.&lt;/li&gt;&lt;li&gt;Pero si tenemos una aplicación de escritorio (o web), que envía requests de información a un servidor, quizá ya no necesitemos tanto procesamiento, sino capacidad de manejar una gran cantidad de datos.&lt;/li&gt;&lt;/ul&gt;En este último punto me voy a detener. Porque no he estado analizando el problema de la performance de las aplicaciones como &lt;span style="font-weight: bold;"&gt;un sistema&lt;/span&gt;. Me gusta un artículo (un poco viejo) pero que me ayudó a darme cuenta de que la ejecución de un software depende de muchísimas cosas, no sólo de la capacidad de procesamiento, sino por ejemplo, de la capa de datos, como lo afirma &lt;span style="font-weight: bold;"&gt;casi como un Talibán&lt;/span&gt; de los datos, Daniel Lemire, en su artículo "&lt;a href="http://www.daniel-lemire.com/blog/archives/2008/03/25/multicore-programming-yawn/"&gt;Multicore Programming? YAWN!&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Entonces, ¿Qué demonios hago? ¿Aprendo multithreading? ¿Me uno al grupo de cluster de Tuza? ¿Me hago DBA? ¿Sigo haciendo experiencia en .NET?&lt;br /&gt;&lt;br /&gt;Sólo el tiempo lo dirá, por el momento voy a hacer todo, &lt;span style="font-weight: bold;"&gt;menos unirme al grupo de cluster&lt;/span&gt; (perdón Tuza).&lt;br /&gt;&lt;br /&gt;Y ya que estoy, les dejo un librito (sencillo y rápido de leer): &lt;a href="http://www.cilk.com/ebook/download5643"&gt;How to survive the Multicore Software Revolution (or at least survive the hype)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5373722277479499172?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5373722277479499172/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5373722277479499172&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5373722277479499172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5373722277479499172'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/06/revolucion-multicore-que-revolucion.html' title='Revolución Multicore - ¿Qué revolución?'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3587007809625171139</id><published>2009-05-01T00:43:00.002-03:00</published><updated>2009-05-01T01:15:06.909-03:00</updated><title type='text'>Charla J2EE (para seres humanos)</title><content type='html'>&lt;div style="text-align: justify;"&gt;El miércoles pasado di la charla &lt;span style="font-weight: bold;"&gt;"J2EE para seres humanos"&lt;/span&gt; en el &lt;a href="http://www.investigacion.frc.utn.edu.ar/mslabs/"&gt;Laboratorio de Investigación de Software&lt;/a&gt;, en el ciclo 2009 de las charlas &lt;a href="http://utnlis.ning.com/"&gt;&lt;span style="font-weight: bold;"&gt;"Coffee &amp;amp; Cookies"&lt;/span&gt;&lt;/a&gt;.  Aprovecho para invitarlos a todos (los que estén en Córdoba, en especial miembros de la UTN) a que participen de las charlas todos los miércoles a las 19hs.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_1371704"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/mundojava/j2-ee-para-seres-humanos-slides?type=presentation" title="J2 Ee Para Seres Humanos Slides"&gt;J2 Ee Para Seres Humanos Slides&lt;/a&gt;&lt;object style="margin: 0px;" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=j2eeparasereshumanosslides-090430230916-phpapp02&amp;amp;stripped_title=j2-ee-para-seres-humanos-slides"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=j2eeparasereshumanosslides-090430230916-phpapp02&amp;amp;stripped_title=j2-ee-para-seres-humanos-slides" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/mundojava"&gt;mundojava&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3587007809625171139?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3587007809625171139/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3587007809625171139&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3587007809625171139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3587007809625171139'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/05/charla-j2ee-para-seres-humanos.html' title='Charla J2EE (para seres humanos)'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8046265888911899326</id><published>2009-04-20T13:25:00.005-03:00</published><updated>2009-04-20T13:47:26.368-03:00</updated><title type='text'>Sorpresa!! El logo de Sun ahora es rojo</title><content type='html'>&lt;div style="text-align: justify;"&gt;Finalmente el oráculo dijo &lt;span style="font-weight: bold;"&gt;"Lo quiero"&lt;/span&gt; y así es como ahora &lt;a href="http://www.sun.com/third-party/global/oracle/index.jsp"&gt;Sun Microsystems&lt;/a&gt; pertenece al gran y enorme imperio &lt;a href="http://www.oracle.com/index.html"&gt;Oracle&lt;/a&gt;. Por una módica suma de U$S 7.4 billones (un cambio nada más), todo lo que tenga que ver con Java y productos Sun ahora será parte de Oracle.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Larry Ellison dijo que "&lt;a href="http://www.marketwatch.com/news/story/oracle-acquire-sun-microsystems-56/story.aspx?guid=%7B4C2EAB6D-9C08-409E-B1C9-AAE8D11D63F6%7D&amp;amp;dist=google"&gt;Java es el software más importante que jamás hemos adquirido&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;Les dejo una foto de mi nuevo dios, &lt;span style="font-weight: bold;"&gt;Larry querido!!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thecompletemasterkeycourse.com/images/larry_ellison.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 252px; height: 228px;" src="http://www.thecompletemasterkeycourse.com/images/larry_ellison.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;¡Es para vos Big Blue, que nos miras por internet!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8046265888911899326?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8046265888911899326/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8046265888911899326&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8046265888911899326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8046265888911899326'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/04/sorpresa-el-logo-de-sun-ahora-es-rojo.html' title='Sorpresa!! El logo de Sun ahora es rojo'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1730730562949258815</id><published>2009-04-06T21:46:00.002-03:00</published><updated>2009-04-06T22:13:07.198-03:00</updated><title type='text'>IBM-SUN FAIL / micro vs grandes</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/fail.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 95px; height: 95px;" src="http://two.xthost.info/ytrio40/img/fail.gif" alt="" border="0" /&gt;&lt;/a&gt;Finalmente parece que IBM no va a comprar nada Sun Microsystems. Algunos diarios como &lt;a href="http://www.guardian.co.uk/technology/2009/apr/06/ibm-sun-microsystems"&gt;The Guardian&lt;/a&gt; dicen que las negociaciones se finalizaron porque Sun había empezado a ver a otros posibles compradores, otros dicen que si bien el directorio de Sun no rechazó la oferta, pedían "&lt;a href="http://www.dailytech.com/IBM+Walks+Away+from+Sun+Negotiations/article14768.htm"&gt;garantías&lt;/a&gt;".&lt;br /&gt;Lo cierto es que alguien de Sun ha dejado de ganar (por el momento) muchisimo dinero, nada más ni nada menos que 7 BILLONES DE DÓLARES. Si, está bien, tienes razón al pensar que Microsoft ofreció 44 Billones por Yahoo! (Jerry Yang no era tan inteligente después de todo).&lt;br /&gt;Lo cierto es que estas cosas me hacen pensar acerca de los microemprendimientos y las grandes empresas, por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Valor de Sun, ciertamente tanto o más que 7b de dólares.&lt;/li&gt;&lt;li&gt;Valor de la empresa en que soy socio: si nos juntámos entre todos, tendremos unos 100 pesos argentinos, así que valemos al rededor de U$D 27&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Cantidad de abogados por parte de IBM para negociar: 100&lt;/li&gt;&lt;li&gt;Cantidad de abogados por nosotros: cero&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Régimen de ascenso en cualquier empresa: junior-&gt;semi senior-&gt;senior-&gt;arquitecto&lt;/li&gt;&lt;li&gt;Régimen de ascenso en nuestra empresa: senior-&gt;semi senior-&gt;junior&lt;/li&gt;&lt;/ul&gt;No me extraña porqué nos llamamos &lt;span style="font-weight: bold;"&gt;Pichers &amp;amp; Pichers&lt;/span&gt; (no daré explicaciones)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1730730562949258815?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1730730562949258815/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1730730562949258815&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1730730562949258815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1730730562949258815'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/04/ibm-sun-fail-micro-vs-grandes.html' title='IBM-SUN FAIL / micro vs grandes'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6630083218896719091</id><published>2009-02-28T21:34:00.004-02:00</published><updated>2009-02-28T22:02:10.730-02:00</updated><title type='text'>Nadie sabe Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/headache.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 102px; height: 102px;" src="http://two.xthost.info/ytrio40/img/headache.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold; font-family: verdana; color: rgb(0, 0, 153);"&gt;Versión Negativa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sip, efectivamente, si alguien alguna vez te dice que sabe java, no le creas. Podríamos pasarnos una vida tratando de aprender todas las tecnologías y frameworks de java.&lt;br /&gt;Pueden fijarse en este &lt;span style="font-weight: bold;"&gt;ENORME &lt;/span&gt;&lt;a href="http://java.sun.com/new2java/javamap/intro.html"&gt;mapa conceptual&lt;/a&gt; de Java y sorprenderse de todo lo que no saben (y probablemente nunca sabrán). Tengan en cuenta de que este mapa no incluye de hecho, frameworks y herramientas de terceros más usadas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Qué la sintaxis es igual en todos los casos, lo cuál facilita el desarrollo de aplicaciones de los innumerables tipos que brinda Java?&lt;/span&gt; No sé si la gripe que me pegaron ayer viernes, pero no me hace sentir mejor.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana; color: rgb(0, 0, 153);"&gt;Versión Positiva&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Si alguna vez quisiera dejar de aprender en esta hermosa carrera que he elegido, me debería dedicar a otra cosa, no lo soportaría. Pero hay algo más importante aquí que aprender a utilizar tecnologías: &lt;span style="font-weight: bold;"&gt;ser el creador de nuevas tecnologías&lt;/span&gt;. Ese debería ser el objetivo final.  Y no sólo hablo de inventar cosas, sino mejorar también. No importa que ya esté inventado Xerces, Xalan, Oracle Parser, el paquete javax.xml, siempre hay lugar para un Picher-Parser.&lt;br /&gt;&lt;br /&gt;La pregunta debe ser &lt;span style="font-weight: bold; font-style: italic;"&gt;¿Podré hacerlo yo también? ¿Qué tal si lo hago mejor?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6630083218896719091?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6630083218896719091/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6630083218896719091&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6630083218896719091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6630083218896719091'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2009/02/nadie-sabe-java.html' title='Nadie sabe Java'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-176973909535319581</id><published>2008-12-13T21:31:00.005-02:00</published><updated>2008-12-14T20:13:36.037-02:00</updated><title type='text'>E-Government</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/ghost.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 48px; height: 48px;" src="http://two.xthost.info/ytrio40/img/ghost.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;ATENCIÓN: La siguiente es una situación hipotética, producto de mi imaginación. Cualquier similitud con la realidad es pura coincidencia.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; Necesitamos hacer una prueba de carga de la aplicación. Lo mejor es alojarla en algún servidor de uds. para poder medir con mejor la performance.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mando medio:&lt;/span&gt; Está bien, para ello deberíamos a llamar a X, el encargado de desarrollo. El va a saber mejor cómo se puede hacer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(5 minutos hasta que llega X, de desarrollo)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;X:&lt;/span&gt; ¿Qué necesitan hacer?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; Necesitamos colgar en alguno de sus servidores la aplicación, para hacer pruebas de carga y medir la performance.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;X:&lt;/span&gt; ¿En qué está desarrollada la aplicación?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; Está desarrollada en ASP.NET&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;X:&lt;/span&gt; Bien, pero eso tendría que verlo Y, el encargado de infraestructura. Nosotros no tenemos acceso a los servidores.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mando medio:&lt;/span&gt; Ok, ya llamo a Y, un segundo...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(5 minutos hasta que llega Y, el encargado de infraestructura.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Y:&lt;/span&gt; ¿Qué necesitan hacer?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; Necesitamos colgar en alguno de sus servidores la aplicación, para hacer pruebas de carga y medir la performance.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Y:&lt;/span&gt; mmmmm...., debería ver, pero no tenemos un servidor para poder hacerlo en este momento, deberíamos comprar uno, ¿Qué tipo de aplicación tienen?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; Una aplicación web. Está desarrollada en ASP.NET&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Y:&lt;/span&gt; Debería llamar a Z, el encargado de compras, para ver si podemos comprar ese equipo. Además deberíamos llamar a W, es el que puede autorizar la instalación de nuevo software en los servidores.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mando medio:&lt;/span&gt; Ok, ya llamo a Z, mientras, buscá a W, debe estar en el piso de abajo.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;(10 minutos más tarde, llegan Z y W)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Z:&lt;/span&gt; Así que necesitan comprar un nuevo equipo, ¿Para qué?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Y:&lt;/span&gt; Necesitan hacer una prueba de una aplicación que desarrollaron. Pero no tenemos servidores donde la pueden alojar, así que deberíamos comprar 2 o tres máquinas adicionales.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; Sólo hace falta una máquina, lo único que tiene que tener instalado es Windows Server, Internet Information Server y...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;W:&lt;/span&gt; (con tono de autoridad) ¿Qué versión de Internet Information Server, la 6.0? (mira con satisfacción a su jefe)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; (se miran unos a otros sorprendidos)  Si, la 6, la que viene por defecto con Windows. Además tendría que tener el Framework .NET 3.5&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;W:&lt;/span&gt; ¿El framework 3.5?, Pero pesa como 200 MEGAS!!!!&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; (se miran unos a otros aún más sorprendidos durante un largo periodo). Si, pesa 200 megas, ¿Por qué?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;W: &lt;/span&gt;Uhhhh, es mucho, vamos a tener que ver qué máquinas compramos... (mirá a Z, pasándole la responsabilidad)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Z: &lt;/span&gt;el tema es que deberíamos haberlo asignado hace tiempo, en la partida de este año. Ahora el presupuesto ya se aprobó, y va a ser muy difícil poder tener estas máquinas nuevas, justo ahora, ¿Para cuándo la necesitan?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; (visiblemente disconformes). Y, a la aplicación la tenemos que mostrar la semana que viene, necesitamos hacer la prueba de carga cuanto antes!&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Z:&lt;/span&gt; Uhhhhh, que problema, que problema. Va a estar muy difícil...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Equipo de IT externo:&lt;/span&gt; dejen muchachos, nos vamos a arreglar con 2 computadoras en las que hacemos desarrollo, no se hagan problema.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;W:&lt;/span&gt; (con aire de revancha y victoria) Cualquier cosa, avisen!!&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-176973909535319581?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/176973909535319581/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=176973909535319581&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/176973909535319581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/176973909535319581'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/12/e-government.html' title='E-Government'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4702468415394798903</id><published>2008-12-09T20:31:00.007-02:00</published><updated>2008-12-09T22:09:15.001-02:00</updated><title type='text'>Nuevo JBoss 5.0 - Primera impresión</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/ST70OrvGa1I/AAAAAAAAAOg/epTTy7O0-oQ/s1600-h/logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 226px; height: 105px;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/ST70OrvGa1I/AAAAAAAAAOg/epTTy7O0-oQ/s320/logo.gif" alt="" id="BLOGGER_PHOTO_ID_5277924346420423506" border="0" /&gt;&lt;/a&gt;Hacia mucho tiempo que no seguía al viejo y conocido JBoss. El viernes pasado (05/12/2008) ha salido al mercado la ultimísima versión de este servidor de aplicaciones con un rediseño del kernel que ha tardado nada más ni nada menos que &lt;span style="font-weight: bold;"&gt;3 AÑOS!!!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La arquitectura de componentes actual no presenta variaciones significativas con respecto a versiones anteriores (lo cual está bien, ya que si se analiza el siguiente gráfico de componentes de JBoss, uno se pregunta ¿Qué más quieren agregarle?).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/ST75l9jiiLI/AAAAAAAAAOo/PN-3lFK_9XQ/s1600-h/projects_communitygraph.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 206px; height: 217px;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/ST75l9jiiLI/AAAAAAAAAOo/PN-3lFK_9XQ/s320/projects_communitygraph.png" alt="" id="BLOGGER_PHOTO_ID_5277930243898902706" border="0" /&gt;&lt;/a&gt;Por supuesto lo más importante en esta versión no es si soporta o no Hibernate, sino el kernel del servidor. El nuevo kernel se llama &lt;a href="http://www.jboss.org/jbossmc/"&gt;JBoss Microcontainer&lt;/a&gt; y viene a reemplazar al (ahora obsoleto) &lt;a href="http://docs.jboss.org/jbossas/jboss4guide/r5/html/ch2.chapter.html"&gt;JMX Microkernel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Qué era JMX Microkernel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dado que JBoss necesitaba integrar muchos componentes, usaron &lt;span style="font-weight: bold;"&gt;JMX &lt;/span&gt;(Java Management Extension) para lograrlo. La idea es poder integrar todos los componentes como si fueran plugins. Cada nuevo componente es lo que se llamó &lt;span style="font-weight: bold;"&gt;MBean &lt;/span&gt;(Managed Bean).  (&lt;a href="http://docs.jboss.org/jbossas/jboss4guide/r5/html/ch2.chapter.html"&gt;más info&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Qué es Microcontainer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es básicamente el JMX Microkernel, pero refactorizado para poder soportar el despliegue de clases POJOs (Plain Old Java Objects) sin necesidad de recurrir a JMX. Además, han agregado mejores controles de dependencias para el inicio de servicios, y han implementado el famoso patrón "dependency injection" para lograr iniciar servicios a partir de POJOs. Algo muy interesante que es digno de ser probado, es que se pueden desplegar servicios para J2ME sin necesidad de cargar todo el Application Server. (&lt;a href="http://www.jboss.org/file-access/default/members/jbossmc/freezone/docs/2.0.x/userGuide/index.html"&gt;más info&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿JBoss 5.0 me cambiará la vida?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lo cierto es que no mucho, los nuevos cambios son para facilitar la tarea de desplegar servicios, por lo que he estado probando todavía sigue siendo complicado de configurar y de administrar. No soy experto en JBoss, pero una consola de administración web como Glassfish estaría muy bueno.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4702468415394798903?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4702468415394798903/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4702468415394798903&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4702468415394798903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4702468415394798903'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/12/nuevo-jboss-50-primera-impresin.html' title='Nuevo JBoss 5.0 - Primera impresión'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/ST70OrvGa1I/AAAAAAAAAOg/epTTy7O0-oQ/s72-c/logo.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-749950658652058781</id><published>2008-12-04T21:08:00.002-02:00</published><updated>2008-12-04T21:39:03.503-02:00</updated><title type='text'>Post anterior: Te Odio</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/toyloco.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 118px; height: 118px;" src="http://two.xthost.info/ytrio40/img/toyloco.gif" alt="" border="0" /&gt;&lt;/a&gt;Ya lo dice el dicho: &lt;span style="font-weight: bold;"&gt;"El pez, por la boca muere"&lt;/span&gt; y el bloggero, por sus posts muere. Después de haber publicado el post anterior (ya hace casi 20 dias), cada vez que me encuentro en una situación donde antes no me preocupaba tanto, ahora tengo presente ese maldito título. Ahhhh, la vida era más fácil cuando sólo era responsable. Ahora soy responsable y &lt;span style="font-weight: bold;"&gt;me importa&lt;/span&gt; que todo salga bien (es una sensación muy rara, para aquellos que nunca la experimentaron).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Necesito vacaciones (si fueran pagas, estaría muy bueno).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-749950658652058781?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/749950658652058781/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=749950658652058781&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/749950658652058781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/749950658652058781'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/12/post-anterior-te-odio.html' title='Post anterior: Te Odio'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-566870210129476815</id><published>2008-11-15T19:17:00.002-02:00</published><updated>2008-11-15T19:59:45.535-02:00</updated><title type='text'>Basta de esconderse detrás del rol y a terminar las cosas</title><content type='html'>&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;El siguiente artículo pertence a &lt;a href="http://jjschwan.blogspot.com/"&gt;J Schwan&lt;/a&gt;, originalmente se tituló &lt;a href="http://jjschwan.blogspot.com/2008/07/stop-hiding-behind-your-role-and-get-it.html"&gt;"Stop hiding behind your role and get it done"&lt;/a&gt;. Me pareció muy bueno, así que lo contacté por correo electrónico y con su permiso, lo traduje al español, para que más personas puedan leerlo.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Basta de esconderse detrás del rol y a terminar las cosas &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;He notado algunos cambios en la cultura de la Tecnología de la Información, y para ser sincero, no son muy alentadores. Parece que en los proyectos hay más y más división de roles; y aunque la intención es buena (y posiblemente, necesaria) en muchos casos, no está funcionando. La buena noticia es, que tengo una idea de cómo podemos solucionarlo.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Permítanme explicar que es a lo que me refiero con un ejemplo del pasado. Cerca de 30 años atrás, la principal plataforma de desarrollo de aplicaciones era el mainframe. La estructura de los equipos que construían estos sistemas era sencilla. Había gente de negocio (contadores, RR.HH., marketing, etc.) que tenía problemas específicos, o requerimientos, y había desarrolladores que construían sistemas para solucionarlos. Los desarrolladores trabajaban en contacto directo con el negocio, por lo cual estaban forzados a entender las necesidades del negocio para poder solucionar los problemas. Por otro lado, los desarrolladores entendían todos los aspectos del mainframe; las estructuras de datos, el código que necesitaba escribirse para procesarlas y las restricciones de infraestructura para desplegar el código. En otras palabras, ellos sabían todo, de principio a fin. Ellos tenían claro los indicadores del negocio, el diseño y la implementación que se necesitaba hacer y por sobre todo, eran responsables.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Con el advenimiento de los enormes sistemas distribuidos y aplicaciones orientadas al cliente cada vez más complejos, el modelo se volvió difícil de administrar. Las tecnologías maduraron, se dividieron y los desarrolladores comenzaron a alinearse con habilidades específicas, generalmente delimitadas por varias partes del sistema (la red, la base de datos, la infraestructura, los servidores, el contenido, etc.). Para poder administrar estos proyectos complejos, los Líderes de Proyecto surgieron para coordinar todas las tareas que eran necesarias para desarrollar el sistema, y los Arquitectos de Software aparecieron para alinear todas las tecnologías. Como esta gente estaba tan ocupada, los Analistas de Negocio vinieron para actuar como enlace entre la gente de negocio y los equipos de tecnología.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Todo esto está bien, pero algo importante se ha perdido en el proceso (en muchos casos)&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-left: 1.27cm; margin-top: 0.18cm; margin-bottom: 0cm; text-align: justify;"&gt; 1. Comprender las necesidades del negocio y sus indicadores.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-left: 1.27cm; margin-top: 0.18cm; margin-bottom: 0cm; text-align: justify;"&gt; 2. Comprender el sistema de negocio como un todo.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Y por último...&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-left: 1.27cm; margin-top: 0.18cm; margin-bottom: 0cm; text-align: justify;"&gt; 3.  Responsabilidad.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Permítanme dar un ejemplo. Díganme si ha escuchado algo como esto:&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio:&lt;/b&gt; “&lt;span style=""&gt;El proyecto de marketing XYZ está retrasado y excedido en presupuesto, ¿Cuál es el problema?”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Pam la líder de proyecto&lt;/b&gt; &lt;span style=""&gt;(mirando al plan de proyecto): “La construcción de la plataforma MQ es crítica y está tomando más de lo previsto.”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio:&lt;/b&gt; “&lt;span style=""&gt;¿Qué es MQ?”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Pam la líder de proyecto:&lt;/b&gt; “&lt;span style=""&gt;No lo sé, creo que es una plataforma de mensajería.”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio:&lt;/b&gt; “&lt;span style=""&gt;¿Qué es una plataforma de mensajería?”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Pam la líder de proyecto &lt;/b&gt;&lt;span style=""&gt;(con una ligera sonrisa)&lt;/span&gt;&lt;b&gt;:&lt;/b&gt; “&lt;span style=""&gt;No lo sé, verás, no entiendo toda esta tecnología, sólo soy la coordinadora de proyecto. Preguntémosle al arquitecto de software.”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio:&lt;/b&gt; “&lt;span style=""&gt;¿Art, que es una plataforma de mensajería?”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Art el arquitecto:&lt;/b&gt; “&lt;span style=""&gt;Es un sistema que permite a una aplicación, enviar y recibir datos desde otra aplicación.”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio: &lt;/b&gt;“&lt;span style=""&gt;¿Por qué está tardando tanto?”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Art el arquitecto:&lt;/b&gt; “&lt;span style=""&gt;Define 'tanto'. Estará listo cuando esté terminado, lo estamos haciendo tan rápido como podemos. No miro el plan de proyecto. Sólo me dedico a tener el trabajo listo. Soy un arquitecto, no un adivino.”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio: &lt;/b&gt;“&lt;span style=""&gt;¿Qué sistema necesitamos para obtener los datos?”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Art el arquitecto:&lt;/b&gt; “&lt;span style=""&gt;El sistema de CRM. Necesitamos acceder a la dirección del cliente desde ese sistema.”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio: &lt;/b&gt;“&lt;span style=""&gt;Pero eso es sólo una pequeña información que tenemos en pantalla. Ni siquiera es importante.”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Art el arquitecto:&lt;/b&gt; “&lt;span style=""&gt;Hey, estaba en el documento de requerimientos. Habla con Benny el analista de negocio”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Bob el stakeholder de negocio: &lt;/b&gt;“&lt;span style=""&gt;Espera, pero....”&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;b&gt;Benny el analista de negocio &lt;/b&gt;&lt;span style=""&gt;(muestra su cabeza por la puerta de la sala de reuniones)&lt;/span&gt;&lt;b&gt;: &lt;/b&gt;“&lt;span style=""&gt;Me dijiste que lo querías así que lo especifiqué en el caso de uso. ¡Lo has firmado!”.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;A continuación, todos estallan en una carcajada.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;span style=""&gt;Esto puede ser exagerado, pero por suerte se entiende mi punto. Hay una tendencia a esconderse detrás de los roles de un proyecto, lo que inevitablemente desacelera las cosas, aumenta la confusión y, al final del día, hace fallar a los proyectos. Hoy recibí un correo de uno de mis clientes favoritos, que en forma vehemente describía al problema como “Ahora tenemos demasiados silos y las interfases entre ellos son abismos” Hay muchas respuestas sobre como resolver estos problemas con metodologías y administración, pero la respuesta es simple..., &lt;/span&gt;&lt;b&gt;retomando la propiedad&lt;/b&gt;&lt;span style=""&gt;.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;span style=""&gt;En muchos casos esta división de roles es necesaria, es una realidad, pero para poder hacer que los proyectos tengan éxito, debemos dejar de escondernos detrás de nuestros roles y volver al concepto fundamental de que somos &lt;/span&gt;&lt;b&gt;tecnólogos&lt;/b&gt;&lt;span style=""&gt;. Esto significa que sin importar el rol que estemos representando, es nuestra responsabilidad el entender los problemas de negocio, entender al sistema como un todo y entender el plan que está para resolver los problemas de negocio.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;span style=""&gt;Esto significa que los Líderes de Proyecto (como también los Analistas de Negocio) no pueden apelar a la ignorancia en problemas de tecnología. Como mínimo deberían entender lo fundamental de sistemas distribuidos, sus componentes y las responsabilidades de esos componentes. Si quieres una introducción, puedes ver la última entrada de mi blog &lt;/span&gt;&lt;u&gt;&lt;b&gt;&lt;a href="http://jjschwan.blogspot.com/2008/04/distributed-application-stack.html"&gt;Distributed Application Stack&lt;/a&gt;.&lt;/b&gt;&lt;/u&gt; &lt;span style=""&gt;Esto no significa que tengan que aprender a escribir código Java o que tengan que escribir un WSDL en .NET. Esto significa que tienen que entender las bases de la arquitectura para que puedan hablar con inteligencia y puedan entender el contexto de los problemas que pueden ocurrir en un proyecto. Significa que no tienen que tener todas las respuestas, pero tienen que saber hacer las preguntas correctas (¡Es la mejor manera de aprender!). Significa que tienen que ser responsables por la tecnología que se está desarrollando.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;span style=""&gt;Los arquitectos (y los desarrolladores) también tienen responsabilidad. No pueden esconderse detrás de los frameworks o modelos de datos o topologías de redes que tanto gustan de diseñar y construir. Tienen que leer el plan de proyecto con las mismas ganas con las que leen Digg.com. No tienen que administrar el plan, pero tienen que &lt;/span&gt;&lt;b&gt;ser propietarios&lt;/b&gt; &lt;span style=""&gt;del plan. Tienen que entender los tiempos y el presupuesto y las prioridades del negocio para que puedan tomar las decisiones de arquitectura para cada problema con las restricciones que les son dadas. Significa que tienen que ser responsables no sólo de la arquitectura, sino de los problemas de negocio también, los tiempos y el presupuesto del proyecto.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Ahora, hay amantes de las metodologías que dirán que las metodologías ágiles o RUP o los hitos en SDLC solucionan todo. O los gurús de IT Governance o ITIL dirán que procesos y métricas claramente definidos y estrategias de monitoreo asegurarán que los proyectos en problemas serán atacados en forma temprana, justo a tiempo para permitir a más líderes de proyecto, analistas de negocio y arquitectos salvar al proyecto. Y quizás algunas de estas cosas ayuden. Pero les digo que todo se reduce a ... gente tomando responsabilidades. Responsabilidad sobre los proyectos y responsabilidad sobre sus carreras. Gente que no se esconde más detrás de un rol determinado o detrás de una matriz de responsabilidades o una descripción de puesto de trabajo. Gente que son especialistas en algunas cosas, pero que tienen una pasión por entender todos los aspectos de la IT. Gente que se preocupa.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Tomamos la decisión sensata en &lt;a href="http://www.solstice-consulting.com/"&gt;Solstice &lt;/a&gt;de no crear títulos de puestos que atrapen a nuestros consultores en áreas específicas de IT. Tenemos gente que soluciona problemas. Tenemos gente que es lista y que termina las cosas. Seguro que tenemos roles que nos gustan más. Yo amo el trabajo de arquitecto, y si estoy trabajando en un proyecto que va a requerir mucha gente, traigo a uno de nuestros mejores líderes de proyecto, porque francamente, no soy tan bueno en el liderazgo de proyectos. Pero conozco la diferencia entre un diagrama de Gantt y un Sprint Queue, y cuando es más sensato usar uno u otro para administrar un proyecto. Y de la misma manera, nuestros líderes de proyecto entienden la diferencia entre un servidor web y un servidor de aplicaciones, y que nuestros analistas de negocio no tienen ningún reparo en hacer aseguramiento de calidad o arremangarse para arreglar pequeños errores si el proyecto lo necesita.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Somos todos tecnólogos, y pienso que es eso a lo que la cultura de IT debería regresar. ¡Demonios, hay una razón por la que esas aplicaciones de mainframe todavía están presentes!&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Gracias por leer como siempre, háganme saber sus opiniones en los comentarios.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Creo que el punto queda bastante claro, nos hemos concentrado tanto en la especialización, que a veces nos olvidamos del punto de vista sistémico, &lt;span style="font-style: italic;"&gt;ver al sistema como un todo, &lt;/span&gt;saber que existen diferentes elementos que deben cooperar para alcanzar el objetivo final.&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-566870210129476815?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/566870210129476815/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=566870210129476815&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/566870210129476815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/566870210129476815'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/11/basta-de-esconderse-detrs-del-rol-y.html' title='Basta de esconderse detrás del rol y a terminar las cosas'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1539362982252825611</id><published>2008-11-11T15:37:00.003-02:00</published><updated>2008-11-11T15:59:12.179-02:00</updated><title type='text'>Book Review: Oracle PL/SQL</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/SRnEL27uZLI/AAAAAAAAALU/afTWjf3h3QE/s1600-h/pl_sql.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 153px; height: 214px;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/SRnEL27uZLI/AAAAAAAAALU/afTWjf3h3QE/s320/pl_sql.jpg" alt="" id="BLOGGER_PHOTO_ID_5267456947190129842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Por recomendación de &lt;span style="font-weight: bold;"&gt;Silvio Serra&lt;/span&gt;, "Mi mentor en Bases de Datos" (fuaaaa!!). He adquirido y he estado leyendo el libro &lt;span style="font-weight: bold;"&gt;"Oracle PL/SQL"&lt;/span&gt;, de César Pérez, editorial Alfaomega.&lt;br /&gt;La lectura la hice al mismo tiempo en que hacia un curso de PL/SQL en la UTN Córdoba, así que me vino como anillo al dedo.&lt;br /&gt;Reconozco que soy completamente neófito en Oracle, así que mi opinión va a ser la de un usuario completamente nuevo con conocimientos de SQL y no mucho de servidores de Bases de Datos (un poco de SQL Server en todo caso).&lt;br /&gt;&lt;br /&gt;Bien, el libro es completísimo con contenidos que van desde la instalación del servidor Oracle hasta PL/SQL y Java, pasando por los elementos principales de PL/SQL, las clásicas estructuras de control, cursores, registros, tablas y matrices, subprogramas, procedimientos, funciones y por último, manejo de excepciones y PL/SQL dinámico.&lt;br /&gt;Pero más allá del contenido del libro, lo que me gusta mucho es que el autor es muy simple y directo a la hora de escribir, comenzando desde lo más básico (instalación de Oracle, que suele ser un proceso bastante extenuante) hasta temas bastante complicados. Pero por si fuera poco, también está &lt;span style="font-weight: bold;"&gt;plagado de ejemplos prácticos, todos resueltos!!!&lt;/span&gt;&lt;br /&gt;El precio (Argentina) es bastante accesible para un libro de este tipo, bastante nuevo  (edición Abril 2008) y por sobre todo, un libro que tengo siempre al lado de mi máquina cuando practico escribir procedimientos.&lt;br /&gt;&lt;br /&gt;Aquí tienen un &lt;a href="http://www.cuspide.com/isbn/9701513746"&gt;link &lt;/a&gt;para ver el índice del libro.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1539362982252825611?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1539362982252825611/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1539362982252825611&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1539362982252825611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1539362982252825611'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/11/book-review-oracle-plsql.html' title='Book Review: Oracle PL/SQL'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/SRnEL27uZLI/AAAAAAAAALU/afTWjf3h3QE/s72-c/pl_sql.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5459063040963313117</id><published>2008-09-21T18:48:00.006-03:00</published><updated>2008-09-21T19:44:06.391-03:00</updated><title type='text'>Curso de Struts 2 100% práctico - clase 1</title><content type='html'>&lt;div style="text-align: justify;"&gt;Bien, tarde pero seguro, vamos a comenzar el web-curso de Struts 2 100% práctico. En cuanto a la teoría sólo vamos a verla de manera concisa cuando la necesitemos.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;La primer clase siempre es la más aburrida. Vamos a ver una introducción a la aplicación a generar y la configuración general de Struts.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Aplicación a desarrollar:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Queremos desarrollar una aplicación que permita tomar exámenes vía web. Para ello, el alumno ingresará su nombre y el sistema le mostrará 20 preguntas distintas, cada una con 5 opciones diferentes para seleccionar. Cuando el alumno haya finalizado la selección de respuestas, enviará el formulario al sistema para ser corregido.&lt;br /&gt;El sistema realizará la corrección del examen y le mostrará al usuario el resultado final.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 51, 51);font-size:85%;" &gt;Dejaremos de lado ABMs de carga de alumnos, preguntas y respuestas, seguridad por ahora. La razón de esto es para concentrarnos en Struts más que en el resto. Una cosa más, no me pidan ver un diseño de interfaz "bonito", tengo un doctorado en &lt;span style="font-weight: bold;"&gt;Diseño de Interfaces Malísimas&lt;/span&gt; y estoy finalizando mi postgrado en &lt;span style="font-weight: bold;"&gt;Combinación Horrible de Colores&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A continuación, vemos una imagen de las clases de negocio de nuestro Sistema:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/SNbGgIrPwAI/AAAAAAAAALE/teQf-k6AJuo/s1600-h/CursoStruts2ClasesNegocio.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 340px; height: 212px;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/SNbGgIrPwAI/AAAAAAAAALE/teQf-k6AJuo/s320/CursoStruts2ClasesNegocio.jpg" alt="" id="BLOGGER_PHOTO_ID_5248600671133876226" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Clase Pregunta:&lt;/span&gt; representa una sola pregunta que se realiza al alumno, Una pregunta puede tener muchas respuestas asociadas, pero sólo una de ellas será correcta. Esta es la regla que adoptaremos, si bien el modelo permite que tenga varias respuestas correctas.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Clase Respuesta:&lt;/span&gt; representa una sola respuesta a una determinada pregunta.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Clase Examen:&lt;/span&gt; representa un conjunto de preguntas y respuestas que el alumno debe responder. Un examen tiene tantos detalles como preguntas se le desee mostrar al alumno.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Clase DetalleExamen:&lt;/span&gt; representa una asociación entre una pregunta y un examen determinado.&lt;/li&gt;&lt;/ul&gt;Además, agregaremos una clase adicional &lt;span style="font-weight: bold;"&gt;ExamenBusiness &lt;/span&gt;que se ubicará entre Struts y las clases de negocio. No descarto además, el agregar nuevas clases más adelante, que sirvan para transportar datos entre las distintas capas de nuestra aplicación. Estas clases, son las clásicas DTOs (&lt;span style="font-weight: bold;"&gt;Data Transfer Object&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Secuencia de llamadas, Actions e interacción general:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En la siguiente imagen, vemos las pantallas JSP que tendremos y su interacción con Struts 2 y a su vez, la interacción de Struts 2 con nuestra clase ExamenBusiness:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/SNbKm0_703I/AAAAAAAAALM/oDVVSdz0-vk/s1600-h/CursoStruts2Arquitectura.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 319px; height: 189px;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/SNbKm0_703I/AAAAAAAAALM/oDVVSdz0-vk/s400/CursoStruts2Arquitectura.jpg" alt="" id="BLOGGER_PHOTO_ID_5248605184157537138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bien, mucho bla bla por ahora, l&lt;a href="http://two.xthost.info/ytrio40/tutoriales/ExamenesStruts_clase1.rar"&gt;es dejo un archivo con el proyecto&lt;/a&gt; realizado en (por supuesto) eclipse. Todavía no hace mucho y ya tiene una configuración básica de Struts. En la próxima clase vamos a ver en detalle la estructura de archivos, para qué sirve cada uno y un poco de código.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5459063040963313117?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5459063040963313117/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5459063040963313117&amp;isPopup=true' title='15 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5459063040963313117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5459063040963313117'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/09/curso-de-struts-2-100-prctico-clase-1.html' title='Curso de Struts 2 100% práctico - clase 1'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6uz0hSfL-0M/SNbGgIrPwAI/AAAAAAAAALE/teQf-k6AJuo/s72-c/CursoStruts2ClasesNegocio.jpg' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1598034414715135386</id><published>2008-08-26T20:39:00.003-03:00</published><updated>2008-08-26T20:58:53.645-03:00</updated><title type='text'>La vida de un fantasma..... Eso si es vida!!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Si, finalmente recibí mi remera de eclipse (original original, bendecida por el poder del Java) y por supuesto, vuelvo a comprobar el poder del &lt;span style="font-weight: bold;"&gt;"fantasmeo"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-weight: bold;"&gt;GRACIAS ECLIPSE!!!&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/SLSUuWnRahI/AAAAAAAAAK8/KZz3UBHKyms/s1600-h/DSC00009.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/SLSUuWnRahI/AAAAAAAAAK8/KZz3UBHKyms/s320/DSC00009.JPG" alt="" id="BLOGGER_PHOTO_ID_5238975790603921938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Aclaración:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Definición de "&lt;span style="font-style: italic;"&gt;fantasma&lt;/span&gt;":&lt;/span&gt; Dícese de la persona que logra resultados favorables por medios no convencionales y además, se afana de ello. Esta palabra surgida en los recónditos pasillos de la UTN Córdoba, más específicamente en el &lt;span style="font-weight: bold;"&gt;Laboratorio de Investigación del Software&lt;/span&gt;, es utilizada con frecuencia junto a otros adjetivos célebres, como por ejemplo: fanchote, ladri, pichi y cirquero.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PD: ya va siendo hora que postee algo de utilidad. Aviso que se viene un cursito de Struts 2.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1598034414715135386?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1598034414715135386/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1598034414715135386&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1598034414715135386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1598034414715135386'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/08/la-vida-de-un-fantasma-eso-si-es-vida.html' title='La vida de un fantasma..... Eso si es vida!!!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/SLSUuWnRahI/AAAAAAAAAK8/KZz3UBHKyms/s72-c/DSC00009.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2825247063117544054</id><published>2008-08-12T23:19:00.005-03:00</published><updated>2008-08-13T02:08:46.488-03:00</updated><title type='text'>Me voy a Stanford...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/mevoy.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 104px; height: 104px;" src="http://two.xthost.info/ytrio40/img/mevoy.gif" alt="" border="0" /&gt;&lt;/a&gt;Si, ojalá pudiera pagar esa universidad!!!&lt;br /&gt;&lt;br /&gt;Pero no todo está perdido, si bien no voy a ir fisicamente, podemos tomar algunas clases de la carrera &lt;span style="font-weight: bold;"&gt;"Computer Science"&lt;/span&gt;. Más especificamente me interesa saber cómo se enseña en esa facultad, la misma materia que dicto en la Universidad Tecnológica Nacional: &lt;span style="font-weight: bold;"&gt;"Paradigmas de Programación"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Aquí les dejo la primer clase, pueden encontrar &lt;span style="font-weight: bold;"&gt;27 clases diferentes.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Ps8jOj7diA0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/Ps8jOj7diA0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2825247063117544054?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2825247063117544054/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2825247063117544054&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2825247063117544054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2825247063117544054'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/08/me-voy-standford.html' title='Me voy a Stanford...'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8298187591424888598</id><published>2008-07-30T21:25:00.003-03:00</published><updated>2008-07-30T22:05:18.154-03:00</updated><title type='text'>Dejé de ser un NullPointerException</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/llegue.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 106px; height: 106px;" src="http://two.xthost.info/ytrio40/img/llegue.gif" alt="" border="0" /&gt;&lt;/a&gt;El titulo lo tomé prestado de un amigo, Diego "Kike" Iglesias. Creo que era diferente, pero tengo &lt;span style="font-weight: bold; font-style: italic;"&gt;memory leaks&lt;/span&gt;, así que directamente puse lo que me acordaba.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Por qué dejé de apuntar a &lt;span style="color: rgb(51, 0, 153);"&gt;null&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Porque finalmente me recibí de &lt;span style="font-weight: bold;"&gt;Ingeniero&lt;/span&gt;. Es realmente toda una experiencia, esos momentos finales de la última materia, cuando me pasó por la cabeza desde el primer final que rendí (Matemática Discreta) hasta el último, los bochazos (si, tuve y varios...), los dieces (bien merecidos), todo lo que sufrió mi vieja querida (se ponía más nerviosa que yo en cada final la pobre).&lt;br /&gt;También pienso en lo difícil que es terminar y avanzar en una carrera. Pienso en todos los compañeros que todavía están luchando y más en los que quedaron en el camino.&lt;br /&gt;&lt;br /&gt;Y antes de volverme completamente un "&lt;span style="font-weight: bold;"&gt;emo&lt;/span&gt;" y arruinar este post, pienso en lo que viene ahora y en la responsabilidad que orgulloso voy a tomar.&lt;br /&gt;Sé que no soy ni el más inteligente ni el mejor programador o docente del mundo, pero eso no  me importa realmente. Aunque me esfuerzo cada día para hacer las cosas un poquito mejor,  realmente me gustaría que otros puedan comenzar y terminar esta carrera informática que tanto nos gusta.&lt;br /&gt;Esto no significa que como docente apruebe a todo el mundo y ya, la cual sólo sería una forma de añadir más &lt;span style="font-weight: bold;"&gt;entropía&lt;/span&gt; al sistema y gente que dice &lt;a href="http://www.youtube.com/watch?v=vFlTYRleZpU"&gt;"Un bean es un poroto"&lt;/a&gt;. Alguna vez escuché una frase que me ha ayudado a poder rendir la mayoría de las materias: &lt;span style="font-weight: bold;"&gt;"No pain, no game"&lt;/span&gt;. Y es así, sin esfuerzo,  llegar a la meta no tiene sentido.&lt;br /&gt;&lt;br /&gt;Asi que queridos lectores que están estudiando, sigan adelante, que llegar es lo más lindo del mundo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8298187591424888598?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8298187591424888598/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8298187591424888598&amp;isPopup=true' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8298187591424888598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8298187591424888598'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/07/dej-de-ser-un-nullpointerexception.html' title='Dejé de ser un NullPointerException'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4297275704312235134</id><published>2008-06-29T21:31:00.004-03:00</published><updated>2008-12-08T23:19:48.323-02:00</updated><title type='text'>Nuevo Eclipse Ganymede - Primer experimento</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/decepcion.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 95px; height: 95px;" src="http://two.xthost.info/ytrio40/img/decepcion.gif" alt="" border="0" /&gt;&lt;/a&gt;Si, tal muestra la imágen, salí bastante decepcionado. Pero no es culpa de eclipse, sino de uno de los proyectos de eclipse, el &lt;span style="font-weight: bold;"&gt;Visual Editor&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Siempre me ha parecido bastante complicado instalar plugins en eclipse, desde hace ya varias versiones. Por un lado, el &lt;span style="font-weight: bold;"&gt;Update Manager&lt;/span&gt; me ha parecido muy lento, por esa razón, la mayoría de las veces, directamente bajo los paquetes necesarios , los descomprimo y (después de cruzar los dedos) &lt;span style="font-style: italic;"&gt;voilá!&lt;/span&gt; todo anda a la perfección.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Bien, con la nueva versión de eclipse, una de las nueva features es la actualización del &lt;span style="font-weight: bold;"&gt;Update Manager&lt;/span&gt;, por eso decidí tratar de agregar a la versión J2EE, el Visual Editor para poder realizar los 2 tipos de aplicaciones, de escritorio y web. Por suerte, fui registrando todos los pasos en imágenes.&lt;br /&gt;&lt;br /&gt;En la siguiente imagen, se puede ver la nueva interfaz del Update Manager, ha cambiado bastante con respecto a las anteriores&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/SGgvOTJ6BnI/AAAAAAAAAJk/SOu8YrE7NJg/s1600-h/UpdateManager.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/SGgvOTJ6BnI/AAAAAAAAAJk/SOu8YrE7NJg/s200/UpdateManager.JPG" alt="" id="BLOGGER_PHOTO_ID_5217472091015218802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bien, si vamos a "Available Software", aparece el primer disgusto. En realidad no es nada del otro mundo, pero sucede que pensando en que ya estaba listado el alguno de los update sites el visual editor, traté de buscarlo, dando como resultado &lt;span style="font-weight: bold;"&gt;una eterna espera por cada letra&lt;/span&gt; (si, por cada letra) que añadía al listado. Esto sucede porque este nuevo Update Manager no espera a tener una palabra completa para buscar, entonces, la búsqueda hacia los distintos servidores, tarda un tiempo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/SGgvOp2LwkI/AAAAAAAAAJs/hSKxoNc3Hwg/s1600-h/UpdateManager1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/SGgvOp2LwkI/AAAAAAAAAJs/hSKxoNc3Hwg/s200/UpdateManager1.JPG" alt="" id="BLOGGER_PHOTO_ID_5217472097106510402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Una vez aprendida la lección y agregado a mano el update site de Visual Editor, procedí muy ilusionado a agregarlo a mi lista de instalación:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/SGgvO8j9JKI/AAAAAAAAAJ0/aw6nZ6xcA0k/s1600-h/UpdateManager2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/SGgvO8j9JKI/AAAAAAAAAJ0/aw6nZ6xcA0k/s200/UpdateManager2.JPG" alt="" id="BLOGGER_PHOTO_ID_5217472102130328738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Luego acepté los contratos de licencia y pulsé el botón de "Install" directamente y pensé "&lt;span style="font-weight: bold;"&gt;Esto va a tardar un buen rato....&lt;/span&gt;". Pero aquí aparece la primera ventaja: Fue bastante rápido en realidad. Si bien me van a decir que no sólo depende del nuevo software sino de muchas cosas más relacionadas con redes, debo decir que el emule estaba bajando a full y sin embargo, el resultado fue en menos de 40 segundos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/SGgvsCmUAUI/AAAAAAAAAKM/36-SMsAZgtQ/s1600-h/UpdateManager5.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/SGgvsCmUAUI/AAAAAAAAAKM/36-SMsAZgtQ/s200/UpdateManager5.JPG" alt="" id="BLOGGER_PHOTO_ID_5217472601967034690" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/SGgvtX0iPtI/AAAAAAAAAKU/_-YdX2O0JIs/s1600-h/UpdateManager6.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/SGgvtX0iPtI/AAAAAAAAAKU/_-YdX2O0JIs/s200/UpdateManager6.JPG" alt="" id="BLOGGER_PHOTO_ID_5217472624843701970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Por supuesto, se tiene que reiniciar todo el entorno para que los cambios surtan efecto (&lt;span style="font-weight: bold;"&gt;Punto en contra para eclipse, no puede ser que todavía sigamos reiniciando el entorno&lt;/span&gt;).&lt;br /&gt;Bien, en este punto ya estaba bastante ilusionado, después de reiniciar el entorno, volví a ver la lista de software instalado y ahí estaba, mi nuevo Visual Editor instalado, &lt;span style="font-weight: bold;"&gt;de lujo!!&lt;/span&gt; pensé.&lt;br /&gt;Pero quedaba probarlo, para ello, simplemente creé un nuevo proyecto de Java, e intenté crear una nueva "Visual Class", el resultado fue el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/SGgvvdDfyGI/AAAAAAAAAKk/41dzwCVnULo/s1600-h/UpdateManager8.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/SGgvvdDfyGI/AAAAAAAAAKk/41dzwCVnULo/s200/UpdateManager8.JPG" alt="" id="BLOGGER_PHOTO_ID_5217472660608370786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pero no fue por unos segundos, directamente &lt;span style="font-weight: bold;"&gt;NUNCA APARECIÓ&lt;/span&gt; el lienzo para armar el formulario!! (Feo feo, muy feo).&lt;br /&gt;Les juro que intenté de todo, desinstalarlo, bajarlo como paquete aparte y reinstalarlo a mano, instalar todas la dependencias a mano, borrar todo el eclipse y reinstalar todos los paquetes dentro del Visual Editor, rezar, insultar, negación y por último,  &lt;span style="font-weight: bold;"&gt;frustración&lt;/span&gt;, por lo que decidí probar la siguiente opción, para no volver en un tiempo&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/SGgvwJlZQPI/AAAAAAAAAKs/PPyJ8WlbQH0/s1600-h/UpdateManager9UNINSTALL.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/SGgvwJlZQPI/AAAAAAAAAKs/PPyJ8WlbQH0/s200/UpdateManager9UNINSTALL.JPG" alt="" id="BLOGGER_PHOTO_ID_5217472672561709298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bueno, ese fue mi primer encuentro con eclipse Ganymede. Pero también tiene nuevas actualizaciones que están muy buenas, especialmente en cuando al editor de código. Pero esto será para una próxima oportunidad, cuando se me pase la frustración de la primera batalla.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4297275704312235134?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4297275704312235134/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4297275704312235134&amp;isPopup=true' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4297275704312235134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4297275704312235134'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/06/nuevo-eclipse-ganymede-primer.html' title='Nuevo Eclipse Ganymede - Primer experimento'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6uz0hSfL-0M/SGgvOTJ6BnI/AAAAAAAAAJk/SOu8YrE7NJg/s72-c/UpdateManager.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8647013057376563908</id><published>2008-06-15T19:47:00.004-03:00</published><updated>2008-12-08T23:19:48.669-02:00</updated><title type='text'>Testeando performance con eclipse TPTP</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/eclipseAnalyze.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 105px; height: 105px;" src="http://two.xthost.info/ytrio40/img/eclipseAnalyze.gif" alt="" border="0" /&gt;&lt;/a&gt;Llega el momento en la vida en que nos preguntamos &lt;span style="font-weight: bold;"&gt;¿Qué tan malo es el código que escribo?&lt;/span&gt;. Bien, la respuesta puede estar dada por muchos factores, el primero de ellos sería simplemente "Eres bastante malo, ni siquiera compila..."&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ya he presentado algunas herramientas que nos ayudaban a tener buenas prácticas a la hora de programar, com por ejemplo &lt;a href="http://mundojava.blogspot.com/2006/11/quin-dijo-que-yo-escriba-buen-cdigo.html"&gt;PMD&lt;/a&gt;. Pero lo que no se mide no se puede mejorar, decía un profesor mío (todavía me falta rendir esa materia, la última). Entonces, para poder medir un poco la performance de nuestras aplicaciones Java estuve probando &lt;a href="http://www.eclipse.org/projects/project_summary.php?projectid=tptp"&gt;TPTP &lt;/a&gt;(&lt;span style="font-weight: bold;"&gt;Test and Performance Tools Platform&lt;/span&gt;). Es un proyecto de eclipse, bastante estable y con muy buenas pantallas finales.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;En cuanto a la instalación, es bastante fácil, lo único que tenemos que hacer es simplemente usar el UpdateManager de eclipse usando el servidor de "Europa update site".&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Y para probarlo he usado el último ejemplo que he dado en clase. Básicamente se trata de un problema Productor-Consumidor que crea &lt;span style="font-weight: bold;"&gt;50&lt;/span&gt; hilos Productores (clase Alumno) y un sólo consumidor (clase Docente) y que usa además, comunicación por Sockets.&lt;br /&gt;Lo importante en este tipo de problemas, además de sincronización, es que cada hilo, tanto productor como consumidor &lt;span style="font-weight: bold;"&gt;debe finalizar su ejecución&lt;/span&gt; y &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;nunca&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; &lt;/span&gt;quedar en estado &lt;span style="font-weight: bold;"&gt;wait&lt;/span&gt;. Entonces utilicé esta herramienta para comprobarlo. A continuación, pueden ver una imagen de los resultados que arrojó:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/SFWouAPaO4I/AAAAAAAAAJU/1JC0ioa94DY/s1600-h/resultadosTCTP.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 319px; height: 182px;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/SFWouAPaO4I/AAAAAAAAAJU/1JC0ioa94DY/s200/resultadosTCTP.jpg" alt="" id="BLOGGER_PHOTO_ID_5212257652043299714" border="0" /&gt;&lt;/a&gt;En la imagen se pueden ver los resultados de cada hilo de ejecución, su estado, su tiempo de actividad y su tiempo de espera (es decir, el tiempo en el que se mantiene como &lt;span style="font-weight: bold;"&gt;wait&lt;/span&gt;) y tiempo de bloqueo. El que más me importa es el "status", en este momento me dice que todos mis hilos (clases Alumno y Docente) están en estado "&lt;span style="font-weight: bold;"&gt;Stopped&lt;/span&gt;", como deberían estar al finalizar el programa. En el siguiente gráfico se puede apreciar el estado incorrecto. Se trata de un trabajo práctico de uno de mis alumnos. Es un problema Productor-Consumidor donde los consumidores (clase modelo.Cliente) quedan al finalizar el programa en estado wait eterno (evidentemente, no le puse 10...).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/SFWsQR8wnYI/AAAAAAAAAJc/AWA4ax2chD8/s1600-h/resultadosTCTP2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 188px; height: 138px;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/SFWsQR8wnYI/AAAAAAAAAJc/AWA4ax2chD8/s200/resultadosTCTP2.jpg" alt="" id="BLOGGER_PHOTO_ID_5212261539447348610" border="0" /&gt;&lt;/a&gt;Esta herramienta permite medir, además del comportamiento de hilos, los tiempos de ejecución de cada clase, con la capacidad de hacer drill-down hasta llegar al nivel de detalle de ejeción de métodos, con tiempos y cantidad de llamadas que realiza.&lt;br /&gt;&lt;br /&gt;Una potente herramienta para mejorar la performance de nuestra aplicación y para mejorar nuestro código.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8647013057376563908?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8647013057376563908/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8647013057376563908&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8647013057376563908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8647013057376563908'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/06/testeando-performance-con-eclipse-tptp.html' title='Testeando performance con eclipse TPTP'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6uz0hSfL-0M/SFWouAPaO4I/AAAAAAAAAJU/1JC0ioa94DY/s72-c/resultadosTCTP.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5853222063842703350</id><published>2008-06-07T14:29:00.003-03:00</published><updated>2008-06-07T17:08:42.655-03:00</updated><title type='text'>"Un bean es un poroto..." - Java Educators en JavaOne</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/educatorjava.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 95px; height: 95px;" src="http://two.xthost.info/ytrio40/img/educatorjava.gif" alt="" border="0" /&gt;&lt;/a&gt;Gracias a &lt;a href="http://www.theserverside.com/blogs/thread.tss?thread_id=49549"&gt;TheServerSide.com&lt;/a&gt;, llegó a mi un podcast de la JavaOne muy interesante. Está titulado "&lt;a href="http://today.java.net/pub/a/today/2008/05/30/j1-2k8-mtT07.html"&gt;What is next for Java educators?&lt;/a&gt;". Más allá de ser un simple ayudante de cátedra y dar cursos de java, me interesa mucho la educación tecnológica tanto a nivel universitario como el acceso a la educación tecnológica en otros niveles. Desde hace tiempo sabemos que los graduados en carreras de ingeniería están siendo un bien escazo en todo el mundo. Pero el problema todavía va a ser más grave, ya que se está dejando de lado y no se está discutiendo lo suficiente acerca de cómo se instruye a los pocos ingenieros que se reciben.&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;This folks are not really prepared...&lt;/span&gt;" es una de la cuestiones que se plantea en el podcast. Esto me llama la atención ya que aquí, en esta pequeña ciudad perdida al final de América Latina, también se discute lo mismo. Ahora bien. dependiendo de la empresa que diga esta frase, esto puede traducirse como "&lt;span style="font-weight: bold;"&gt;Estos chicos no saben ni Hibernate ni Struts&lt;/span&gt;" o "&lt;span style="font-weight: bold;"&gt;Estos chicos no saben resolver problemas&lt;/span&gt;". Francamente, prefiero trabajar en el tipo de empresa donde se valora más la capacidad de autoaprendizaje que el conocimiento de un lenguaje en particular.&lt;br /&gt;&lt;br /&gt;¿&lt;span style="font-weight: bold;"&gt;Cómo hacemos que nuestros estudiantes estén mejor preparados&lt;/span&gt;? ¿Deberíamos enseñar java en todas las universidades, desde primero hasta el último año?. Y para que no se enoje Bill, ¿Enseñar Visual Basic y .NET en los últimos años de la carrera?. Aunque parezcan graciosas estas últimas preguntas, te aseguro que se están aplicando programas de cátedras de programación similares. Creo que la pregunta esencial sería &lt;span style="font-weight: bold;"&gt;¿Queremos formar expertos en ciertas tecnologías o expertos en resolver problemas?&lt;/span&gt;&lt;br /&gt;Yo creo que sería más productivo la segunda opción, ya que un experto en solucionar problemas tranquilamente puede aprender lenguajes de programación y nuevas tecnologías de una manera más fácil. Y más aún, algo maravilloso, es que puede desarrollar nuevas tecnologías.&lt;br /&gt;&lt;br /&gt;Además, ¿Hasta cuando va a existir Java y .NET?. En cualquier momento sale &lt;span style="font-weight: bold;"&gt;Java++&lt;/span&gt; ó &lt;span style="font-weight: bold;"&gt;.Java.&lt;/span&gt; Hay que admitirlo. Antes se enseñaba Logo, después Cobol, después C, después C++, QBasic y un montón de lenguajes más. Hoy, todo se enfoca a los nuevos lenguajes que crean lenguajes, o DSL, código para generar código.&lt;br /&gt;&lt;br /&gt;Las conclusiones, se las dejo a Uds.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5853222063842703350?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5853222063842703350/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5853222063842703350&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5853222063842703350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5853222063842703350'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/06/un-bean-es-un-poroto-java-educators-en.html' title='&quot;Un bean es un poroto...&quot; - Java Educators en JavaOne'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7173641213189151698</id><published>2008-04-26T15:54:00.003-03:00</published><updated>2008-04-27T17:28:31.875-03:00</updated><title type='text'>Super Ultra Mini Video Tutoriales básicos</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/teacher.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 102px; height: 102px;" src="http://two.xthost.info/ytrio40/img/teacher.gif" alt="" border="0" /&gt;&lt;/a&gt;Gracias a una gripe que me dejó tendido y quizá la peor clase de interfaces visuales que me ha tocado dar en mi vida (esos dias donde todo sale mal...), he decidido hacer unos ultra super mini tutoriales de componentes swing, en forma completamente visual (como &lt;span style="font-weight: bold;"&gt;video tutorial&lt;/span&gt;), ya que he notado que en los cursos iniciales, se complica muchísimo entender cómo funcionan los modelos de java y el entorno mismo. Por cierto, &lt;span style="font-weight: bold;"&gt;eclipse, ya no me agradas como antes&lt;/span&gt;, he estado viendo y usando NetBeans y la verdad es que lo veo más estable, más fácil y más rápido que. Por esta razón, todos los ejemplos los haré en &lt;span style="font-weight: bold;"&gt;eclipse &lt;/span&gt;(si, leíste bien, en eclipse), ya que NetBeans casi no necesita ayuda adicional&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Tenía en algún post, un tutorial básico sobre eclipse, lo pueden bajar de este &lt;a href="http://two.xthost.info/ytrio40/tutoriales/Primer%20Prog%20eclipse.rar"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para saber sobre &lt;span style="font-weight: bold;"&gt;Listas&lt;/span&gt;, en este &lt;a href="http://two.xthost.info/ytrio40/tutoriales/howtolistas.rar"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para saber sobre &lt;span style="font-weight: bold;"&gt;Combos&lt;/span&gt;, en este &lt;a href="http://two.xthost.info/ytrio40/tutoriales/howtocombos.rar"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pablo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7173641213189151698?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7173641213189151698/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7173641213189151698&amp;isPopup=true' title='10 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7173641213189151698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7173641213189151698'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/04/super-ultra-mini-tutoriales-bsicos.html' title='Super Ultra Mini Video Tutoriales básicos'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1956444105552487227</id><published>2008-04-19T20:37:00.005-03:00</published><updated>2008-12-08T23:19:49.886-02:00</updated><title type='text'>Sang Shin en Córdoba - SOA, BPEL, Open ESB y un "ladri" ganador, YO!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/sangshin.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 109px; height: 109px;" src="http://two.xthost.info/ytrio40/img/sangshin.gif" alt="" border="0" /&gt;&lt;/a&gt;Finalmente se realizó el Jueves pasado la conferencia con el "Evangelizador Java", &lt;span style="font-weight: bold;"&gt;Sang Shin&lt;/span&gt;, organizado por el JUG Cba.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La charla en sí, estuvo muy buena, hablo en un inglés pausado y claro, acerca de &lt;span style="font-weight: bold;"&gt;SOA&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;WSDL&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Web Services&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;JBI &lt;/span&gt;y &lt;span style="font-weight: bold;"&gt;Open ESB&lt;/span&gt;. Confieso que no sé mucho acerca de estas tecnologías, así que la verdad fue bastante interesante, les recomiendo que vean las ppt (para bajárselas, pueden ver el post anterior).&lt;br /&gt;Lo malo de la presentación fue lo que se esperaba, como "evangelizador" de Sun Microsystems, únicamente se valoró como herramientas de calidad y facilidad &lt;span style="font-weight: bold;"&gt;NetBeans &lt;/span&gt;y &lt;span style="font-weight: bold;"&gt;GlassFish&lt;/span&gt;, sin hacer demasiado hincapié en otros IDEs o Servidores de aplicaciones. Antes de que se pongan locos, no estoy diciendo que Eclipse es mejor que NetBeans, o JBoss mejor que GlassFish, esto será algo que deberemos averiguar por nuestra cuenta. Por lo menos a mí, ya me dieron ganas de investigar más sobre el tema, en cuanto tenga algo interesante para mostrar, lo postearé inmediatamente.&lt;br /&gt;&lt;br /&gt;En otro orden de cosas, el miso Sang Shin trajo regalos para algunos (los más rápidos, no necesariamente los más inteligentes). Gracias a esto, recibí 2 Dukes y una lapicera de Java. Como diría un compañero de tesis, "esto es arrebato cara e' gato". En las siguientes imágenes, pueden ver a Duke en acción. &lt;span style="font-weight: bold;"&gt;Gracias Sang!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/SAqJWJbgPqI/AAAAAAAAAJA/IuYxpW7FwqU/s1600-h/DSC00015.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/SAqJWJbgPqI/AAAAAAAAAJA/IuYxpW7FwqU/s200/DSC00015.JPG" alt="" id="BLOGGER_PHOTO_ID_5191112534079323810" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/SAqJWJbgPrI/AAAAAAAAAJI/ZJyMzKjkTCI/s1600-h/DSC00020.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/SAqJWJbgPrI/AAAAAAAAAJI/ZJyMzKjkTCI/s200/DSC00020.JPG" alt="" id="BLOGGER_PHOTO_ID_5191112534079323826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;También gané una licencia para &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt; (WTF!), me la iban a mandar por correo, pero por cierto, nunca llegó..........&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1956444105552487227?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1956444105552487227/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1956444105552487227&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1956444105552487227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1956444105552487227'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/04/sang-shin-en-crdoba-soa-bpel-open-esb.html' title='Sang Shin en Córdoba - SOA, BPEL, Open ESB y un &quot;ladri&quot; ganador, YO!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/SAqJWJbgPqI/AAAAAAAAAJA/IuYxpW7FwqU/s72-c/DSC00015.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6403212734312826379</id><published>2008-04-10T21:44:00.003-03:00</published><updated>2008-04-10T22:08:18.447-03:00</updated><title type='text'>Oficialmente declarado Monaguillo de Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/monaguillo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 111px; height: 111px;" src="http://two.xthost.info/ytrio40/img/monaguillo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;¿Qué de dónde viene esto?&lt;/span&gt;. Bien, les voy a contar, de paso se enteran de quién viene a hablar a la &lt;a href="http://www.institucional.frc.utn.edu.ar/sistemas/Extension/ExtensionNovedades.asp"&gt;Universidad Tecnológica Naciona&lt;/a&gt;l (UTN-FRC). Ayer, antes de ir al &lt;span style="font-weight: bold;"&gt;Laboratorio de Investigación de Software&lt;/span&gt;, también conocido como Ms Labs (si, efectivamente Microsoft Labs), me enteré de que viene el famoso (aunque sólo había visitado su página un par de veces nada más) &lt;span style="font-weight: bold;"&gt;Sang Shin&lt;/span&gt;, ingeniero de Sun y creador de &lt;a href="http://www.javapassion.com/"&gt;www.javapassion.com&lt;/a&gt; y conocido graciosamente como &lt;span style="font-weight: bold;"&gt;"Evangelizador Java"&lt;/span&gt; (¿Por qué, mi Dios, le ponen esta clase de nombres?) Este señor, viene a hablar sobre &lt;span style="font-weight: bold;"&gt;"Building SOA Applications using BPEL, Open ESB, JBI, and NetBeans"&lt;/span&gt;, así que parece interesante. Aunque seguramente va a ir bastante rápido y sin muchos detalles, me va a servir para adentrarme un poco más en el mundo SOA. Por cierto, si no pueden asistir, pueden bajarse el PDF con la presentación &lt;a href="http://www.javapassion.com/webservices/soabpelopenesb.pdf"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Bueno, siguiendo con la anécdota, y sabiendo mis compañeros que había intentado ser &lt;span style="font-weight: bold;"&gt;"Campus Ambassador"&lt;/span&gt; de Sun, puesto al que curiosamente no puedo acceder por estar casi recibido (que contrariedad, tampoco puedo tener un trabajo bien pago, por &lt;span style="font-weight: bold;"&gt;no&lt;/span&gt; estar recibido...), fui declarado oficialmente como &lt;span style="font-weight: bold;"&gt;"Monaguillo de Java"&lt;/span&gt;, todo culpa de Sang Shin, UN SALUDO GRANDE, EVANGELIZADOR!!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6403212734312826379?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6403212734312826379/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6403212734312826379&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6403212734312826379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6403212734312826379'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/04/oficialmente-declarado-monaguillo-de.html' title='Oficialmente declarado Monaguillo de Java'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2314746509945518009</id><published>2008-04-07T21:07:00.006-03:00</published><updated>2008-04-07T22:04:05.342-03:00</updated><title type='text'>Jajaja!! Que buenos chistes que cuenta Adobe!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/jajaja.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 94px; height: 94px;" src="http://two.xthost.info/ytrio40/img/jajaja.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;"La Argentina se está convirtiendo en el Silicon Valley de América Latina"&lt;/span&gt;, es lo que titula &lt;a href="http://www.lanacion.com.ar/tecnologia/nota.asp?nota_id=1001384"&gt;LaNacion.com&lt;/a&gt; en su sección de tecnología. Esta frase la dijo Marta Clark, directora de ventas para América latina de Adobe. Esto es tan gracioso como triste al mismo tiempo.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Explicaré esto desde mi humilde conocimiento del mercado cordobés. Tengo muchos amigos que trabajan en multinacionales y también conozco investigadores de universidades públicas locales (léase UTN y FAMAF).&lt;br /&gt;Según lo que he leído e investigado, el fenómeno de Silicon Valley en San Francisco fue un proceso que comenzó gracias a las universidades locales (Standford, para ser más preciso). Esto puede tomarse como una similitud con el contexto actual, ya que el potencial que existe en las universidades de Córdoba es inmenso.&lt;br /&gt;Pero, Silicon Valley no se formó sólo por buenas universidades, ni tampoco por capitales extranjeros, se formó con capitales locales, conocidos como &lt;span style="font-weight: bold;"&gt;"capitalistas de riesgo"&lt;/span&gt; (&lt;a href="http://en.wikipedia.org/wiki/Kleiner_Perkins_Caufield_%26_Byers"&gt;Kleiner Perkins Caufield &amp;amp; Byers&lt;/a&gt; , &lt;a href="http://en.wikipedia.org/wiki/John_Doerr"&gt;John Doerr&lt;/a&gt;, etc.). Ahora bien,  ¿Has conocido, querido lector tecnólogo, algún capitalista de riesgo en este país, de capitales locales, que busque talentos y buenas ideas?. Espero ser completamente ignorante y que los comentarios se llenen con nombres de capitalistas locales, de verdad... Pero no creo...&lt;br /&gt;Me atajo antes de que comenten sobre &lt;span style="font-weight: bold;"&gt;Marcos Galperin&lt;/span&gt; (argentino y presidente y CEO de Mercado Libre). Si, es cierto que recibió capital para su versión de e-Bay, pero hay que decir que lo ideó mientras cursaba su MBA en (adivinen dónde), si, Standford. Más info en &lt;a href="http://www.cio.com.au/index.php/id;256451782"&gt;este artículo&lt;/a&gt;.&lt;br /&gt;Conozco gente con proyectos geniales, que serían un éxito comercial, salvo por el pequeño detalle de no tener capital. Proyectos open-source, desarrollo de lenguajes, compiladores, lenguajes DSL, clusters, etc. Veo muchas ganas, conocimiento, pero no veo apoyo del gobierno ni de capitales. En todo caso, veo empresas multinacionales (en alguna de la cual también terminaré trabajando yo seguramente) pagando a 6 programadores con lo que en EEUU pagan a 1 sólo.&lt;br /&gt;&lt;br /&gt;En fin, ya me enojé, pego un portazo y me voy.&lt;br /&gt;&lt;br /&gt;Saludos&lt;br /&gt;Pablo&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2314746509945518009?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2314746509945518009/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2314746509945518009&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2314746509945518009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2314746509945518009'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/04/jajaja-que-buenos-chistes-que-cuenta.html' title='Jajaja!! Que buenos chistes que cuenta Adobe!!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4589063602325179389</id><published>2008-03-22T16:37:00.013-03:00</published><updated>2008-12-08T23:19:50.293-02:00</updated><title type='text'>NetBeans: ya soy adulto para escribir código!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/cry.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 100px; height: 100px;" src="http://two.xthost.info/ytrio40/img/cry.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Atención&lt;/span&gt;: El siguiente post es una solución parcial, si descubres la solución completa, harás un enorme aporte&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Evidentemente soy un programador al estilo &lt;span style="font-weight: bold;"&gt;Eclipse&lt;/span&gt;. No tengo nada en contra de &lt;span style="font-weight: bold;"&gt;NetBeans&lt;/span&gt;, al contrario, desde hace varias versiones lo vengo instalando y probando. Pero hay algo realmente molesto en este editor en cuanto a desarrollo de interfaces gráficas: &lt;span style="font-weight: bold;"&gt;El código autogenerado.&lt;/span&gt;&lt;br /&gt;Lo malo de esto es que no es modificable por defecto, lo cual seria entendible si fuera lo único que utilizara el editor para "armar" el diseñador visual, sin embargo, NetBeans crea los archivos &lt;span style="font-weight: bold;"&gt;.form&lt;/span&gt; (en XML), los que aparentemente contienen (lo estoy visualizando en este momento) una descripción de todos los componentes del formulario.&lt;br /&gt;&lt;br /&gt;Ahora, yo sé que &lt;span style="font-weight: bold;"&gt;NetBeans quiere lo mejor para mí&lt;/span&gt;, pero creo que ya soy grandecito para echarle mano al código autogenerado y aguantármelas si algo sale mal.&lt;br /&gt;&lt;br /&gt;Entonces, querido lector, nada de abrir el NotePad para modificar el código a mano, NetBeans te ayudará (aunque no tan fácilmente). Aquí va una forma de modificar el código:&lt;br /&gt;&lt;br /&gt;La siguiente aplicación son las ventanas que crea el mismo IDE para un proyecto de interfaces visuales:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/R-VsXMiMK6I/AAAAAAAAAIg/yCpz5EUznb4/s1600-h/principal.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/R-VsXMiMK6I/AAAAAAAAAIg/yCpz5EUznb4/s320/principal.gif" alt="" id="BLOGGER_PHOTO_ID_5180666092117044130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A esta pantalla le he agregado un JButton común y corriente. Ahora bien, si se fijan en el código generado, está utilizando el constructor vacío del JButton, pero yo me he puesto caprichoso y quiero usar el constructor con string:&lt;br /&gt;&lt;br /&gt;&lt;img style="width: 418px; height: 116px;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/R-Vso8iMK7I/AAAAAAAAAIo/U9Yvw6tckOk/s1600/generado.gif" alt="[generado.gif]" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;¿Cómo hacerlo? En primer lugar, vuelve a la parte de diseño visual, selecciona el botón y en la ventana de "Inspector", click derecho sobre nuestro botón y selecciona "Customize Code":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/R-Vtt8iMK8I/AAAAAAAAAIw/ou80bL61iX0/s1600-h/customize.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/R-Vtt8iMK8I/AAAAAAAAAIw/ou80bL61iX0/s320/customize.gif" alt="" id="BLOGGER_PHOTO_ID_5180667582470695874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora aparece la siguiente pantalla, donde podremos cambiar el código autogenerado simplemente seleccionando en el primer combo "custom creation":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/R-VuGMiMK9I/AAAAAAAAAI4/DQqrw5zYssA/s1600-h/codecustomizer.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/R-VuGMiMK9I/AAAAAAAAAI4/DQqrw5zYssA/s320/codecustomizer.gif" alt="" id="BLOGGER_PHOTO_ID_5180667999082523602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora, todo muy lindo, pero ¿como borro la propiedad setText("")?&lt;br /&gt;&lt;br /&gt;Te juro, querido lector, que he buscado una solución para hacerlo desde NetBeans, pero no la encuentro. Tiene que haberla, esto no puede ser!!!!!&lt;br /&gt;Cualquier ayuda será bienvenida.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4589063602325179389?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4589063602325179389/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4589063602325179389&amp;isPopup=true' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4589063602325179389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4589063602325179389'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/03/netbeans-ya-soy-adulto-para-escribir.html' title='NetBeans: ya soy adulto para escribir código!!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6uz0hSfL-0M/R-VsXMiMK6I/AAAAAAAAAIg/yCpz5EUznb4/s72-c/principal.gif' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-264077268637350729</id><published>2008-02-18T00:14:00.007-02:00</published><updated>2008-02-18T00:56:19.839-02:00</updated><title type='text'>Mundo Java ambientalista</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/latierra.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 99px; height: 99px;" src="http://two.xthost.info/ytrio40/img/latierra.gif" alt="" border="0" /&gt;&lt;/a&gt;Si, querido lector, como tú y yo sabemos, los programadores no solemos ver la luz del sol muy a menudo. Sin embargo, aunque parezca una excepción de &lt;span style="font-weight: bold;"&gt;.NET&lt;/span&gt; (del tipo &lt;span style="font-weight: bold;"&gt;descripción&lt;/span&gt;: "", &lt;span style="font-weight: bold;"&gt;código&lt;/span&gt;: -23561135, &lt;span style="font-weight: bold;"&gt;clase&lt;/span&gt;: Exception, es decir, ininteligible), me encanta salir a andar en bicicleta todas las tardes, es muy divertido, asusto viejas cuando paso raudamente al lado, hago que los automovilistas me insulten mientras me cruzo, etc.&lt;br /&gt;El otro día vi un documental que te recomiendo, se llama "&lt;a href="http://www.youtube.com/watch?v=wnjx6KETmi4"&gt;An inconvenient truth&lt;/a&gt;". A pesar de ser una película de un político (Al Gore), muestra la realidad que creamos, que estamos viviendo y que nuestros hijos padecerán.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wnjx6KETmi4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/wnjx6KETmi4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Si no lo comprendes querido programador, prueba leer esto:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;package &lt;/span&gt;earth;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;"&gt;public class&lt;/span&gt; EarthLife&lt;span style="color: rgb(204, 0, 0);"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;public static&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;void &lt;/span&gt;main(String[] args) &lt;span style="color: rgb(204, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: rgb(51, 102, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolean &lt;/span&gt;generatingProfitsForFew = &lt;span style="color: rgb(51, 102, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: rgb(51, 102, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&lt;/span&gt;(keepDestroying() &lt;span style="color: rgb(51, 102, 255);"&gt;&amp;amp;&amp;amp;&lt;/span&gt; generatingProfitsForFew)&lt;span style="color: rgb(204, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateMoreProfitsForFew();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;killAnimalSpecies();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateMorePoverty();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generatePollution();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keepPeopleWatchingTV();&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: rgb(51, 102, 255);"&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/span&gt;(changeForSaveEarth(&lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;you&lt;/span&gt;))&lt;span style="color: rgb(204, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thread heal = beginHealing();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;heal.start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generatingProfitsForFew = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;br /&gt;    &lt;span style="color: rgb(204, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println("Our sons will live!!");&lt;br /&gt;  &lt;span style="color: rgb(204, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No sé Uds. pero yo estoy empezando a hacer mi parte.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-264077268637350729?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/264077268637350729/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=264077268637350729&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/264077268637350729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/264077268637350729'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/02/mundo-java-ambientalista.html' title='Mundo Java ambientalista'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7169164038294101844</id><published>2008-02-08T19:36:00.000-02:00</published><updated>2008-02-08T20:45:44.721-02:00</updated><title type='text'>Orcas en la UTN</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/orca.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 111px; height: 111px;" src="http://two.xthost.info/ytrio40/img/orca.gif" alt="" border="0" /&gt;&lt;/a&gt;De repente me encuentro en el laboratorio de &lt;a href="http://www.investigacion.frc.utn.edu.ar/mslabs/"&gt;Investigación de Software&lt;/a&gt;,  en la &lt;a href="http://www.frc.utn.edu.ar/"&gt;Universidad Tecnológica Nacional&lt;/a&gt; (Córdoba) con los alumnos más inteligentes de (por lo menos) la carrera de &lt;span style="font-weight: bold;"&gt;Ingeniería en Sistemas de Información&lt;/span&gt;. Por supuesto me he preguntado y re-preguntado en un ciclo infinito que demonios hago aquí. Por suerte estoy seguro que la poca fe se irá diluyendo con el paso de los días.&lt;br /&gt;Y si no llego a encajar, puedo argumentar que me he incorporado como "retrasador oficial de proyectos", alguien tiene que hacer ese trabajo.&lt;br /&gt;&lt;br /&gt;Ahora, hablando en serio, tengo la suerte de poder participar como desarrollador con 5 tipos que saben una barbaridad de &lt;span style="font-weight: bold;"&gt;.Net&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Java &lt;/span&gt;y no olvidemos: &lt;a href="http://layerd.net/Default.es.aspx"&gt;LayerD&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿De que viene el proyecto?&lt;/span&gt; Bueno, de la mano del tío &lt;span style="font-weight: bold;"&gt;Bill &lt;/span&gt;("no me hice rico firmando cheques"), estamos desarrollando un Sistema SOA para incorporar a la nueva versión de &lt;a href="http://msdn2.microsoft.com/es-ar/vstudio/default.aspx"&gt;Visual Studio - Orcas&lt;/a&gt;. Obviamente no es Java, lo más cercano es el café que compro en la cantina en la mañana, pero nadie es perfecto, de todos modos ;)&lt;br /&gt;Por el momento no voy a dar muchos detalles del proyecto, a lo mejor hagamos un blog para contar los avances, pero les puedo adelantar que tiene de todo, Web Services, desarrollo para Mobile, WPF, Silverlight, bajo y alto nivel, y lo más importante: NO HAY UNA CLASE FACTURA NI PEDIDO!!!!!!!!!.&lt;br /&gt;Lo bueno de esto es que finalmente la gente de Redmond va a saber que existimos desarrolladores en Argentina y que también podemos producir. Por supuesto que la clásica frase de los simpsons "no me hice rico firmando cheques" sigue siendo cierta, pero la oportunidad lo vale (&lt;span style="font-style: italic;"&gt;pensamiento aleatorio: ".Net te he elegido y no por el dinero"&lt;/span&gt;).&lt;br /&gt;Yo todavía estoy corriendo detrás del tren, pero creo que estoy a punto de saltar para poder ayudar mejor, pero a pesar de esto, mi percepción como última incorporación al equipo es que el proyecto está genial, para mí, para mis compañeros y para la Universidad. Espero que no aparezcan moscas que nos arruinen el picnic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿.Net me ha atrapado?&lt;/span&gt; Bueno, la respuesta está en el primer tomo de los "The Hitchhiker's guide to the galaxy", "resistence is useless". Y si, la verdad es que me lo venía venir hace tiempo, después de todo, lo que me divierte es aprender y desarrollar a lo largo del ciclo de vida del software, y no sólo un lenguaje en particular.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2QW9FCUYcY0&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/2QW9FCUYcY0&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7169164038294101844?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7169164038294101844/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7169164038294101844&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7169164038294101844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7169164038294101844'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/02/orcas-en-la-utn.html' title='Orcas en la UTN'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2160920740976316398</id><published>2008-01-18T02:11:00.000-02:00</published><updated>2008-12-08T23:19:50.442-02:00</updated><title type='text'>Java es perjudicial para la ingenieros del mañana</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/profe.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 112px; height: 112px;" src="http://two.xthost.info/ytrio40/img/profe.gif" alt="" border="0" /&gt;&lt;/a&gt;Bien, ahora que tengo tu atención querido lector, puedo detallar un poco más esto. En realidad, creo que ha habido una gran confusión, en un comentario anterior, me pasaron el siguiente artículo titulado: &lt;a href="http://www.diarioti.com/gate/n.php?id=16275"&gt;"Eminencias informáticas: 'Java es perjudicial'".&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora bien, antes de opinar, lo mejor es ir a la fuente directamente y leer el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;paper&lt;/span&gt; original para saber con exactitud que están diciendo estas "eminencias". Encontré el artículo, pero estoy seguro que debido a la extensión &lt;span style="font-weight: bold;"&gt;.mil&lt;/span&gt; de la &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;url&lt;/span&gt; que lo presenta, no se puede ingresar directamente. Pero decidí no darme por vencido encontrar alguna forma de ver el artículo. Aquí tienen 2 opciones:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Google Caché&lt;/span&gt;: pueden seguirlo en este &lt;a href="http://64.233.169.104/search?q=cache:yv_7KunL4u4J:www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html+java+Dewar+Schonberg+STSC+Crosstalk&amp;amp;hl=es&amp;amp;ct=clnk&amp;amp;cd=4&amp;amp;gl=ar"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;link&lt;/span&gt;, &lt;/a&gt;pero no hay imágenes (de todos modos no importa ya que las únicas imágenes que aparecen son los 2 "eminentes").&lt;/li&gt;&lt;li&gt;Estos &lt;span style="font-weight: bold;"&gt;.mil&lt;/span&gt; hijos de "mil" discriminan a los que pueden ver el artículo por la dirección &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ip&lt;/span&gt;, así que usando el querido &lt;a href="http://anonymouse.org/tos.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Anonymouse&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;org&lt;/span&gt;&lt;/a&gt;, se puede ver en este &lt;a href="http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;link&lt;/span&gt;.&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;Ahora que todos podemos ver el artículo, quiero mandarle &lt;span style="font-weight: bold;"&gt;UN SALUDO GRANDE&lt;/span&gt; a los servidores de la U.S. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Airforce&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/R5As48YE9-I/AAAAAAAAAIY/vJGg3tGDDyI/s1600-h/forearm.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 130px; height: 113px;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/R5As48YE9-I/AAAAAAAAAIY/vJGg3tGDDyI/s200/forearm.jpg" alt="" id="BLOGGER_PHOTO_ID_5156670930130630626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Realizada mi descarga de rabia, pasaré a expresar mi opinión del artículo. Los autores presentan tres tendencias fundamentales de los ingenieros de software actuales y futuros. Concuerdo completamente con estas falencias, especialmente con una presente consecuencia "&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;We&lt;/span&gt; are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;training&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;easily&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;replaceable&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;professional&lt;/span&gt;&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;Perspectiva personal - experiencia diaria&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El otro día me puse a ver unas charlas de Google &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Developers&lt;/span&gt; acerca de &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Cluster&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Computing&lt;/span&gt;&lt;/span&gt; y &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Map&lt;/span&gt; Reduce&lt;/span&gt; (por cierto, tengo que escribir de esto y lo recomiendo muchísimo). Varios algoritmos de árboles y grafos, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;super&lt;/span&gt; interesante. Lo malo fue que para resolver un problema, el presentador empezó a hablar de &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;LISP&lt;/span&gt;&lt;/span&gt; y lenguajes funcionales. Lo único que &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_19"&gt;vi&lt;/span&gt; en la facultad de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;LISP&lt;/span&gt; es "QUE ES UN LENGUAJE FUNCIONAL!!!!!". Tengo como pendiente estudiar un poco más de este paradigma, realmente me avergonzó no saber que es el cálculo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;lamda&lt;/span&gt; y cómo maneja las listas este lenguaje.&lt;br /&gt;En ese momento me di cuenta de que no tengo una formación demasiado amplia en cuanto a paradigmas, salvo por la orientación a objetos y funcional. &lt;span style="font-weight: bold;"&gt;Pero los demás también sirven!!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;Perspectiva educativa local - Argentina - Córdoba - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;UTN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bien, los que cursan o cursaron hasta hace poco en esta universidad, sin duda pueden ver lo "actualizado" que estamos en relación con universidades estadounidenses. Yo tuve la suerte de comenzar en primero y segundo año con C y C++, después aprendí Java por mí cuenta. Desde hace 3 o 4 años se abandonó C y C++ en favor de Java.&lt;br /&gt;&lt;br /&gt;Hagamos una comparación sencilla: Como alumno, después de aprender C++ (y ni siquiera en profundidad), aprender Java fue cosa de niños, la verdad. Sin embargo, me doy cuenta como profesor que enseña Java como lenguaje inicial de lo difícil que les resulta a las nuevas generaciones de programadores, realmente complicado. Y la verdad es que esto me pone un poco nervioso. Y ni siquiera estamos hablando de punteros (a.k.a. apuntadores).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;Qué quiere el mercado de ti, querido programador?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Salvo que actualmente no estés trabajando, esta pregunta tiene respuesta sencilla: el mercado quiere &lt;span style="font-weight: bold;"&gt;piezas intercambiables con facilidad&lt;/span&gt;, que sepan lo mínimo e indispensable para terminar las altas, bajas y modificaciones usando &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Struts&lt;/span&gt;&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;Hibernate&lt;/span&gt;&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;Spring&lt;/span&gt;&lt;/span&gt;, etc. sin saber bien porqué esos requerimientos (tal vez moda, tal vez recomendación de otros desarrolladores, etc).&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Ah&lt;/span&gt;, por si no te has dado cuenta, las &lt;span style="font-weight: bold;"&gt;"pieza intercambiable"&lt;/span&gt; eres tú, querido desarrollador. Pero este debate con tintes sindicalistas es harina de otro costal y para otra oportunidad.&lt;br /&gt;&lt;br /&gt;Para resumir, el &lt;span style="font-weight: bold;"&gt;mercado no quiere que &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;reinventemos&lt;/span&gt; la rueda&lt;/span&gt;, si ya está hecho, no hace falta hacerlo de nuevo, lo que también se puede traducir en &lt;span style="font-weight: bold;"&gt;"No intentar mejorar lo que está hecho"&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;"No innovar"&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;"No pienses mucho"&lt;/span&gt;, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;Si, mucho &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;bla&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;bla&lt;/span&gt;, pero cuál es la conclusión de todo esto?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La conclusión no es ni revolucionaria, ni novedosa, ni pro ni en contra Java, C, C++, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;LISP&lt;/span&gt;. Te lo explicaré con un ejemplo:&lt;br /&gt;&lt;br /&gt;Hace varios años fui a una entrevista de trabajo, donde me preguntaron cuál era el mejor lenguaje según mi consideración. Mi respuesta fue C++ y nunca me dieron el trabajo. Por supuesto reflexioné sobre el tema durante mucho tiempo y me di cuenta de la mejor respuesta a era: "&lt;span style="font-weight: bold;"&gt;Depende ¿Qué problema intentas resolver?&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Y que mejor para resolver un problema, que conocer las opciones que tenemos a mano para resolverlo. Estas opciones &lt;span style="font-weight: bold;"&gt;NO SON LENGUAJES&lt;/span&gt;, son &lt;span style="font-weight: bold;"&gt;PARADIGMAS &lt;/span&gt;de programación.&lt;br /&gt;Si el único paradigma de programación que aprendemos es el orientado a objetos, entonces es probable que podamos resolver muchos problemas, pero siempre quedará la duda: "&lt;span style="font-weight: bold;"&gt;¿Habrá algo mejor?&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Recuerda: &lt;span style="font-style: italic;"&gt;"Cuando la única herramienta que tenemos a mano es un martillo, todos los problemas son clavos"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 153);font-size:85%;" &gt;Saludos&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2160920740976316398?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2160920740976316398/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2160920740976316398&amp;isPopup=true' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2160920740976316398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2160920740976316398'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/01/java-es-perjudicial-para-la-ingenieros.html' title='Java es perjudicial para la ingenieros del mañana'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6uz0hSfL-0M/R5As48YE9-I/AAAAAAAAAIY/vJGg3tGDDyI/s72-c/forearm.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-44217306588413441</id><published>2008-01-10T12:05:00.000-02:00</published><updated>2008-01-10T12:29:47.223-02:00</updated><title type='text'>Buscando algoritmos (supergeek post)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/supergeek.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 110px; height: 110px;" src="http://two.xthost.info/ytrio40/img/supergeek.gif" alt="" border="0" /&gt;&lt;/a&gt;Este es uno de los posts más "&lt;span style="font-weight: bold;"&gt;supergeeks&lt;/span&gt;" que voy a escribir (y por suerte, no será el último). Pero la verdad es que he disfrutado mucho con el resultado de la búsqueda.&lt;br /&gt;No es nada del otro mundo, pero no sabía que en la mejor enciclopedia on-line (&lt;span style="font-weight: bold;"&gt;wikipedia&lt;/span&gt;), existían un listado tan interesante de algoritmos. Muchos de ellos ya los conocía pero lo había olvidado, otros, son completamente nuevos (para mí), lo que me hace feliz, la verdad, siempre hay algo para aprender.&lt;br /&gt;No intenten buscar el código fuente para cada uno de ellos, algunos son puramente teóricos o dependen del problema que se quiera resolver.&lt;br /&gt;Dentro de las categoría que más me interesaron están las de "&lt;a href="http://en.wikipedia.org/wiki/List_of_algorithms#Compression_algorithms"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Compression algorithms&lt;/span&gt;&lt;/a&gt;", "&lt;a href="http://en.wikipedia.org/wiki/List_of_algorithms#Cryptographic_algorithms"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;Cryptographic algorithms&lt;/span&gt;&lt;/a&gt;", "&lt;a href="http://en.wikipedia.org/wiki/List_of_algorithms#Operating_systems_algorithms"&gt;&lt;span class="tocnumber"&gt;8.3&lt;/span&gt; &lt;span class="toctext"&gt;Operating systems algorithms&lt;/span&gt;&lt;/a&gt;", "&lt;a href="http://en.wikipedia.org/wiki/List_of_algorithms#Neural_networks"&gt;&lt;span class="tocnumber"&gt;10&lt;/span&gt; &lt;span class="toctext"&gt;Neural networks&lt;/span&gt;&lt;/a&gt;" (estos me los tengo que aprender bien para rendir Inteligencia Artificial), "&lt;a href="http://en.wikipedia.org/wiki/List_of_algorithms#Numerical_algorithms"&gt;&lt;span class="tocnumber"&gt;14&lt;/span&gt; &lt;span class="toctext"&gt;Numerical algorithms&lt;/span&gt;&lt;/a&gt;" (cuantos recuerdos).&lt;br /&gt;&lt;br /&gt;Uds. se preguntarán: &lt;span style="font-weight: bold;"&gt;¿Esto es lo que hace en sus vacaciones?&lt;/span&gt; Respueta: si, entre muchas otras cosas. &lt;span style="font-weight: bold; font-style: italic;"&gt;"Carpe Diem Memento Mori" . &lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;Hoy me levante y decidí como vivir este día.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-44217306588413441?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/44217306588413441/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=44217306588413441&amp;isPopup=true' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/44217306588413441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/44217306588413441'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/01/buscando-algoritmos-supergeek-post.html' title='Buscando algoritmos (supergeek post)'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7376581673572241075</id><published>2008-01-08T20:55:00.000-02:00</published><updated>2008-01-08T20:58:56.632-02:00</updated><title type='text'>Educación, Trabajo y Tecnología</title><content type='html'>&lt;div style="text-align: center;"&gt;No hay nada para agregar, sólo visita el siguiente link del blog de Franco Iacomella:&lt;br /&gt;&lt;/div&gt;&lt;h3 style="text-align: center;" class="storytitle"&gt;&lt;a href="http://francoiacomella.org/blog/educacion-trabajo-y-tecnologia/" rel="bookmark"&gt;Educación, Trabajo y Tecnología&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;Pablo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7376581673572241075?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7376581673572241075/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7376581673572241075&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7376581673572241075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7376581673572241075'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/01/educacin-trabajo-y-tecnologa.html' title='Educación, Trabajo y Tecnología'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6697343867154358896</id><published>2008-01-06T23:45:00.000-02:00</published><updated>2008-01-07T00:49:43.053-02:00</updated><title type='text'>Splash Screen con SwingWorker</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/splashsworker.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 95px; height: 95px;" src="http://two.xthost.info/ytrio40/img/splashsworker.gif" alt="" border="0" /&gt;&lt;/a&gt;Me han pedido que haga un ejemplo de una ventana de Bienvenida / Cargando con &lt;span style="font-weight: bold;"&gt;SwingWorker&lt;/span&gt;. El ejemplo en sí es bastante básico, pero creo que servirá para ilustrar el uso y una posible solución (quizá no la mejor de todas).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Esta pantalla (no estaba muy creativo) se va a mostrar cuando se inicie la aplicación (&lt;span style="font-style: italic;"&gt;perdón por la calidad de la animación, creo que estoy decayendo en la calidad de los tutoriales&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/tutoriales/splashswingworker.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 325px; height: 159px;" src="http://two.xthost.info/ytrio40/tutoriales/splashswingworker.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta pantalla es el puntapié inicial para el resto de mi aplicación (es el que tiene el &lt;span style="font-weight: bold;"&gt;void main&lt;/span&gt;). Aquí se genera un worker que actualiza el label de descripción de carga. La actualización es realizada usando el &lt;span style="font-weight: bold;"&gt;Thread.sleep();&lt;/span&gt; para que tenga exactamente 1 segundo de duración entre &lt;span style="color: rgb(0, 0, 0);"&gt;actualización y actualización. Veamos parte del código que lo realiza:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;iframe src="http://two.xthost.info/ytrio40/tutoriales/swingworker_3.html" height="100" scrolling="yes" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;La clase &lt;span style="font-weight: bold;"&gt;MiSwingWorkerInit &lt;/span&gt;es una inner class de la ventana emergente &lt;span style="font-weight: bold;"&gt;WelcomeWindow&lt;/span&gt;. Básicamente, la clave de ejecución está en el método &lt;span style="font-weight: bold;"&gt;doInBackGround()&lt;/span&gt; el cual lo único que hace es seleccionar el mensaje que se mostrará. En una aplicación real, aquí deberían realizarse todas las actividades previas a la carga de la pantalla principal de la aplicación. Una aclaración adicional, si se fijan estoy usando el método &lt;span style="font-weight: bold;"&gt;this.setProgress(100);&lt;/span&gt; con el único propósito de que se ejecute un evento interno del swingworker. Este evento notificará a la aplicación general de que se ha terminado el proceso y que puede seguir cargando la pantalla principal.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;¿Dónde se inicia el proceso del SwingWorker? &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;En el siguiente código pueden visualizarlo: &lt;/span&gt;&lt;br /&gt;&lt;iframe src="http://two.xthost.info/ytrio40/tutoriales/swingworker_4.html" height="100" scrolling="yes" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Es bastante simple el inicio de su ejecución, lo único que hay que hacer es instanciar un objeto de SwingWorker y darle &lt;span style="font-weight: bold;"&gt;execute()&lt;/span&gt;. Pero hay algo más interesante aquí, la llamada al método &lt;span style="font-weight: bold;"&gt;addPropertyChangeListener(this);&lt;/span&gt; bueno, lo que hago aquí es pedirle al worker que me avise (en forma de evento) cuando ocurra algún cambio en alguna propiedad. Ahora, si se fijan en la primera porción de código, notará que esto ocurrirá cuando se invoque al método &lt;span style="font-weight: bold;"&gt;setProgress(100)&lt;/span&gt; del worker. Si bien esto se podría hacer como una clase anónima al mejor estilo eclipse y los actionPerformed, no me queda otra opción que declarar a la misma ventana para que implemente la interfaz &lt;span style="font-weight: bold;"&gt;PropertyChangeListener&lt;/span&gt;, ya que de otra manera, no podré llamar a setVisible(false).&lt;br /&gt;Por supuesto, el implementar la interfaz, hace que deba tener en la clase el método &lt;span style="font-weight: bold;"&gt;propertyChange&lt;/span&gt;, de &lt;span style="color: rgb(0, 0, 0);"&gt;la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://two.xthost.info/ytrio40/tutoriales/swingworker_5.html" height="100" scrolling="yes" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Cuando en este método verifique que ha cambiado la propiedad "progress" (interna del SwingWorker), entonces puedo sacar la ventana de Cargando y mostrar la ventana Principal.&lt;br /&gt;&lt;br /&gt;Fácil, ¿no?&lt;br /&gt;&lt;br /&gt;Cualquier duda, no duden en consultar, les dejo el link con los fuentes (hecho en eclipse) &lt;a href="http://two.xthost.info/ytrio40/tutoriales/SwingWorkerWelcome.rar"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6697343867154358896?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6697343867154358896/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6697343867154358896&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6697343867154358896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6697343867154358896'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/01/splash-screen-con-swingworker.html' title='Splash Screen con SwingWorker'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6802161705251409781</id><published>2008-01-03T20:51:00.000-02:00</published><updated>2008-01-03T21:14:30.437-02:00</updated><title type='text'>Tomcat vs JBoss vs Gerònimo vs GlassFish</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/enguardia.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 96px; height: 96px;" src="http://two.xthost.info/ytrio40/img/enguardia.gif" alt="" border="0" /&gt;&lt;/a&gt;Retomando la lectura de los newsletter de &lt;a href="http://www.theserverside.com/"&gt;The Server Side&lt;/a&gt;, llegué a un artículo de &lt;a href="http://www.javaworld.com/javaworld/jw-12-2007/jw-12-appservers.html"&gt;The Java World&lt;/a&gt;, donde se comparan &lt;span style="font-weight: bold;"&gt;Tomcat, JBoss y Gerónimo&lt;/span&gt;.&lt;br /&gt;El artículo en sí está bastante bueno, se nota que el autor tiene bastante experiencia en la instalación y configuración de los servidores en distintas plataformas, aunque el benchmark realizado no es precisamente el más completo de todos.&lt;br /&gt;&lt;br /&gt;Ahora, la parte más interesante la pueden ver en los comentarios, no sé si el autor se olvidó o lo hizo a propósito, pero nunca mencionó a &lt;span style="font-weight: bold;"&gt;GlassFrish &lt;/span&gt;de Sun, ¿que sucedió? inmediatamente los defensores de GlassFish atacaron de a montones. Debo confesar que me causa mucha gracia cuando los comentarios muestran que lo quieren matar al buen hombre (matar en sentido figurado, por supuesto).&lt;br /&gt;&lt;br /&gt;De todos modos, el benchmark en sí está incompleto sin GlassFish y por lo menos alguno comercial, así se podría ver en un mejor espectro las diferencias, ventajas y desventajas de cada uno. También hay que considerar algo muy importante que quiero suponer que todos nos preguntamos antes de elegir cualquier servidor/contenedor: ¿Cuáles son los requisitos de mi aplicación? ¿Cuál es el volúmen de usuarios que accederán en las horas pico? ¿Qué tan eficiente es el uso de las sesiones, cuánta información promedio se almacenará durante cuánto tiempo?, etc, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Algunos links:&lt;/span&gt;&lt;br /&gt;-Contraofensiva en Java.net, &lt;a href="http://weblogs.java.net/blog/kalali/archive/2007/12/four_open_sourc.html"&gt;aquí&lt;/a&gt;&lt;br /&gt;-Matriz de servidores en The Server Side (muy desactualizada), &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=ServerMatrix"&gt;aquí&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6802161705251409781?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6802161705251409781/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6802161705251409781&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6802161705251409781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6802161705251409781'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/01/tomcat-vs-jboss-vs-gernimo-vs-glassfish.html' title='Tomcat vs JBoss vs Gerònimo vs GlassFish'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8180733155534707155</id><published>2008-01-01T20:14:00.000-02:00</published><updated>2008-01-01T20:47:35.622-02:00</updated><title type='text'>LANCOR vs OLPC</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/justiciaolpc.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 91px; height: 91px;" src="http://two.xthost.info/ytrio40/img/justiciaolpc.gif" alt="" border="0" /&gt;&lt;/a&gt;En noviembre del año pasado nos enterábamos que una empresa Nigeria (Lancor) iba a &lt;a href="http://blogs.cnet.com/8301-13505_1-9824699-16.html"&gt;demandar &lt;/a&gt;a &lt;a href="http://www.laptop.org/"&gt;OLPC &lt;/a&gt;(One Laptop per Child) debido a que supuestamente se habían infringido patentes en los drivers del teclado para &lt;span style="font-weight: bold;"&gt;XO&lt;/span&gt; (el sistema operativo de OLPC).&lt;br /&gt;Bueno, finalmente ha llegado a la justicia esta demanda por &lt;span style="font-weight: bold;"&gt;U$S 20.000.000&lt;/span&gt; y como si fuera poco, también piden la prohibición de entregar laptops OLPC en todo Nigeria. Además parece que todo el proceso va a durar varios meses (&lt;span style="font-style: italic;"&gt;como estamos acostumbrados todos los que vivimos en el tercer mundo&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Yo personalmente espero que la justicia no se duerma, o al menos no se corrompa y que permita seguir los intentos por eliminar el &lt;span style="font-weight: bold;"&gt;analfabetismo digital&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;si, ya sé lo que estás pensando, pero nunca pierdo las esperanzas, me gusta soñar&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Fuente: &lt;a href="http://blogs.cnet.com/8301-13505_1-9838465-16.html?tag=cnetfd.blogs.item"&gt;CNet Blogs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8180733155534707155?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8180733155534707155/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8180733155534707155&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8180733155534707155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8180733155534707155'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2008/01/lancor-vs-olpc.html' title='LANCOR vs OLPC'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2870023760132764302</id><published>2007-12-29T21:27:00.000-03:00</published><updated>2007-12-29T21:50:10.328-03:00</updated><title type='text'>Cumpliendo antes de fin de año</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/bici.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 83px; height: 83px;" src="http://two.xthost.info/ytrio40/img/bici.gif" alt="" border="0" /&gt;&lt;/a&gt;Casi no hay nada más que hacer, ya respondí todos los correos de este blog, arreglé los links que me pidieron (aunque no terminé de enviar los ejemplos que me pidieron). Agregué la posibilidad de que accedan fácilmente al los RSS con FeedBurner (creo que me lo habían pedido en junio o julio -diosito querido-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Balance de este año?&lt;/span&gt; Yo ya lo hice en forma personal, si les interesa, lo mejor fue terminar de cursar la universidad (quedan 4 materias nada más); reencontrarme con la bicicleta (se los recomiendo, de ahí salen los mejores algoritmos y &lt;span style="font-weight: bold;"&gt;"La bici e' libera"&lt;/span&gt;, leì por ahí en un video de YouTube), leí varios libros, no tantos como hubiera querido, pero no está bajo el promedio; por suerte no le debo plata a nadie, aunque algunos me deben unos pesos por ahí; descubrí a &lt;span style="font-weight: bold;"&gt;Sublime &lt;/span&gt;(como para continuar haciéndome fanático de bandas que ya no existen o cuyos miembros han muerto).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Agradecer: &lt;/span&gt;si, quiero agradecer a todos los que me leyeron y siguieron entrando al sitio aún cuando no publiqué nada durante casi 2 meses. A los que putearon y a los que hacen consultas y aportes, gracias totales.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;¿Planificación para el año que viene? &lt;/span&gt;Nunca fui tan ordenado, pero por lo menos ya sé lo que quiero hacer el próximo año, lo único que me falta es planificar cómo lo voy a hacer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;Saludos a todos y feliz año&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pablo&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2870023760132764302?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2870023760132764302/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2870023760132764302&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2870023760132764302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2870023760132764302'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/12/cumpliendo-antes-de-fin-de-ao.html' title='Cumpliendo antes de fin de año'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6609277178567563284</id><published>2007-11-20T02:13:00.000-03:00</published><updated>2007-11-20T02:54:34.552-03:00</updated><title type='text'>J2ME - Tus días están contados</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/bye.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 108px; height: 108px;" src="http://two.xthost.info/ytrio40/img/bye.gif" alt="" border="0" /&gt;&lt;/a&gt;Por lo menos así parece según &lt;span style="font-weight: bold;"&gt;Google&lt;/span&gt;, más una alianza con 30 compañías de telefonía, software, celulares y otras.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Esta "alianza", llamada &lt;a href="http://www.openhandsetalliance.com/index.html"&gt;Open Handset Alliance&lt;/a&gt;, tiene como objetivo y copio textual: &lt;span style="font-style: italic;"&gt;"to accelerate innovation in mobile and offer consumers a richer, less expensive, and better mobile experience"&lt;/span&gt;.&lt;br /&gt;Básicamente, crearon &lt;a href="http://code.google.com/android/index.html"&gt;Android&lt;/a&gt;, una plataforma de desarrollo de aplicaciones móviles (para celulares, palms y etc, etc, etc), abierta, gratis y con una estructura que tiene como base el kernel de Linux (que inventará &lt;span style="font-weight: bold;"&gt;Bill &lt;/span&gt;ahora, seguro tiene que contraatacar).&lt;br /&gt;Todavía no la he probado, pero además del SDK con sus librerías y documentación, también existen plugins para eclipse y emuladores.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;En cuanto a las empresas que están, las pueden ver &lt;a href="http://www.openhandsetalliance.com/oha_members.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Las empresas que faltan (a primera vista):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nokia&lt;/li&gt;&lt;li&gt;Palm&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Alcatel?¿?¿?¿?¿?¿ WTF?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sun Microsystems (con ironía me pregunto por qué)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft (obvio - sin palabras)&lt;/li&gt;&lt;/ul&gt;Ahora bien, la pregunta es si el título de este post es correcto o no. Bueno, según lo que he aprendido en el último curso de &lt;span style="font-weight: bold;"&gt;Gerenciamiento Estratégico&lt;/span&gt; (y saqué buenas notas - jajajajaja), tenemos a empresas como &lt;span style="font-weight: bold;"&gt;Motorola &lt;/span&gt;y &lt;span style="font-weight: bold;"&gt;Samsung &lt;/span&gt;que parecen dispuestas a implementar en sus aparatos esta tecnología, esto está bien, pero no es decisivo. Sin embargo, uno que otro ejemplo deberíamos hacer, aunque sea para conocer la tecnología, porque se puede apreciar la empresa &lt;span style="font-weight: bold;"&gt;China Mobile Communications Corporation &lt;/span&gt;y si esto entró al mercado Chino, podemos decir que eso marcará una tendencia muy importante.&lt;br /&gt;&lt;br /&gt;Por cierto, les dejo unos videos que explican la tecnología (muy recomendables):&lt;br /&gt;&lt;br /&gt;1-Arquitectura&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Mm6Ju0xhUW8&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/Mm6Ju0xhUW8&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;2-Ciclo de Vida&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/fL6gSd4ugSI&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/fL6gSd4ugSI&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;3-APIs&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/MPukbH6D-lY&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/MPukbH6D-lY&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6609277178567563284?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6609277178567563284/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6609277178567563284&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6609277178567563284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6609277178567563284'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/11/j2me-tus-das-estn-contados.html' title='J2ME - Tus días están contados'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4660097828123388226</id><published>2007-11-17T20:04:00.000-03:00</published><updated>2007-11-17T20:22:08.935-03:00</updated><title type='text'>Trabajo de hormiga - Arreglando links</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/hormiga.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 96px; height: 96px;" src="http://two.xthost.info/ytrio40/img/hormiga.gif" alt="" border="0" /&gt;&lt;/a&gt;Y si....&lt;br /&gt;Algún día tenía que terminar de cursar la carrera y encontrar un tiempo para arreglar los links del blog.&lt;br /&gt;&lt;br /&gt;Ahora puedo decir que casi estoy tranquilo, aunque 6 finales me separan del preciado titulo de ingeniero.&lt;br /&gt;&lt;br /&gt;En fin, a los que reciben el RSS, seguramente van a recibir como 20 post seguidos, &lt;span style="font-weight: bold;"&gt;mil disculpas&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4660097828123388226?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4660097828123388226/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4660097828123388226&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4660097828123388226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4660097828123388226'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/11/trabajo-de-hormiga-arreglando-links.html' title='Trabajo de hormiga - Arreglando links'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4024016780713039530</id><published>2007-11-02T18:50:00.000-03:00</published><updated>2007-11-02T19:05:11.208-03:00</updated><title type='text'>Llorando como niña chiquita</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/llorando.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 104px; height: 104px;" src="http://two.xthost.info/ytrio40/img/llorando.gif" alt="" border="0" /&gt;&lt;/a&gt;Si, asi me siento ahora mismo. Todos los arhivos de tutoriales y todas las imágenes de los post, han sido eliminadas del servidor gratuito que tenía. &lt;span style="font-weight: bold;"&gt;GRACIAS POR AVISAR, PEDAZO DE HIJOS DE UNA CARRETILLA DE P.....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si bien tengo BAK de todo y ya cree otra cuenta en otro servidor, esto va a tardar un buen rato, además, no estoy con mucho tiempo libre ultimamente.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4024016780713039530?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4024016780713039530/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4024016780713039530&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4024016780713039530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4024016780713039530'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/11/llorando-como-nia-chiquita.html' title='Llorando como niña chiquita'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2639744816305470353</id><published>2007-10-23T00:17:00.000-03:00</published><updated>2007-11-17T19:09:05.215-03:00</updated><title type='text'>Mejor jugar online - Proyecto Darkstar</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/projectdarkstar.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 121px; height: 121px;" src="http://two.xthost.info/ytrio40/img/projectdarkstar.gif" alt="" border="0" /&gt;&lt;/a&gt;En la página oficial de &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;, se puede encontrar una noticia bastante interesante (aún para aquellos que nunca programamos un juego como la gente).&lt;br /&gt;El proyecto &lt;a href="http://www.projectdarkstar.com/"&gt;DarkStar&lt;/a&gt; no es un motor de juegos ni un framework de comunicaciones, es (como uno de sus creadores lo indica) &lt;span style="font-style: italic;"&gt;"una pieza de infraestructura de software para aplicaciones online que requieren tiempos críticos de latencia y escalabilidad masiva, lo que se traduce en juegos online multijugador"&lt;/span&gt; (perdón por la traducción).&lt;br /&gt;&lt;br /&gt;Básicamente, el software consta de 2 paquetes: un &lt;span style="font-weight: bold;"&gt;servidor &lt;/span&gt;y un set de librerías para utilizar en el &lt;span style="font-weight: bold;"&gt;cliente&lt;/span&gt;. El servidor permite manejar la escalabilidad, balanceo de carga (&lt;span style="font-weight: bold;"&gt;tip: si no saben usar Threads, es un buen momento para comenzar, no digan que no les avisé&lt;/span&gt;) y persistencia entre otros.&lt;br /&gt;El cliente, básicamente se ocupa de facilitar la comunicación con el servidor, envío de mensajes y eventos, pero recuerden, &lt;span style="font-weight: bold;"&gt;este paquete no agrega nada de visualización ni es un motor de juegos&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En cuanto a la arquitectura, consta de 3 capas definidas por:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Comunicaciones:&lt;/span&gt; con la posibilidad de publicar-suscribir y conexión directa cliente/servidor.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Execution Kernel:&lt;/span&gt; se encarga de ejecutar las tareas en respuesta a eventos (como un application server de J2EE)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Object Store: &lt;/span&gt;la capa de persistencia.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Aquí tienen algunos links:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;Artículo: "&lt;a href="http://java.sun.com/developer/technicalArticles/Interviews/kesselman_qa.html"&gt;Project Darkstar's New World of Online Games&lt;/a&gt;"&lt;br /&gt;Artículo: &lt;a href="http://research.sun.com/spotlight/2007/2007-08-30_darkstar.html"&gt;Detalle de arquitectura&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;No sé a Uds., pero yo no veo las horas de estar con un poco de tiempo para ponerme a programar algún jueguito, a ver que se puede hacer en detalle con este paquete.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2639744816305470353?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2639744816305470353/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2639744816305470353&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2639744816305470353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2639744816305470353'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/10/mejor-jugar-online-proyecto-darkstar.html' title='Mejor jugar online - Proyecto Darkstar'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7688042607024568281</id><published>2007-10-21T19:24:00.001-03:00</published><updated>2007-11-17T19:09:26.124-03:00</updated><title type='text'>Tarde, como siempre - JMaki 1.0</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/tardejmaki.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 104px; height: 104px;" src="http://two.xthost.info/ytrio40/img/tardejmaki.gif" alt="" border="0" /&gt;&lt;/a&gt;La historia de mi vida, siempre llegando tarde a todos lados (tengo que realizar un serio examen de conciencia acerca de eso, pero seguramente cuando lo haga será demasiado tarde...).&lt;br /&gt;Bien, lo importante es que finalmente &lt;span style="font-weight: bold;"&gt;JMaki &lt;/span&gt;ha sacado la versión &lt;span style="font-weight: bold;"&gt;1.0&lt;/span&gt;. Les recuerdo que esta librería, permite incorporar &lt;span style="font-weight: bold;"&gt;AJAX &lt;/span&gt;a nuestras aplicaciones &lt;span style="font-weight: bold;"&gt;Java &lt;/span&gt;y &lt;span style="font-weight: bold;"&gt;PHP&lt;/span&gt;, "&lt;span style="font-style: italic;"&gt;tomando prestados&lt;/span&gt;" componentes de diversos fabricantes (Google, Yahoo YUI, Dojo), además de contar con plugins para Eclipse y NetBeans.&lt;br /&gt;&lt;br /&gt;Puedes ver &lt;a href="https://ajax.dev.java.net/v1.0-releasenotes.html"&gt;aquí&lt;/a&gt; las &lt;span style="font-style: italic;"&gt;release notes&lt;/span&gt;.&lt;br /&gt;Y &lt;a href="https://ajax.dev.java.net/"&gt;aquí &lt;/a&gt;la página principal de JMaki.&lt;br /&gt;&lt;br /&gt;La probaré y después les cuento todo el chisme Ajaxiano.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7688042607024568281?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7688042607024568281/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7688042607024568281&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7688042607024568281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7688042607024568281'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/10/tarde-como-siempre-jmaki-10.html' title='Tarde, como siempre - JMaki 1.0'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-604603103252970440</id><published>2007-10-12T15:29:00.000-03:00</published><updated>2007-11-17T19:09:44.369-03:00</updated><title type='text'>Hacia el futuro con tecnología Argentina</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/layerd.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 96px; height: 96px;" src="http://two.xthost.info/ytrio40/img/layerd.gif" alt="" border="0" /&gt;&lt;/a&gt;Hoy me siento muy contento de poder escribir este post. Las nuevas tecnologías nunca se disfrutan más que cuando han sido desarrolladas en la tierra de uno. Para todos los interesados en saber el futuro del desarrollo, nacido en &lt;span style="font-weight: bold;"&gt;Argentina&lt;/span&gt;, y especialmente si se encuentran en &lt;span style="font-weight: bold;"&gt;Córdoba&lt;/span&gt;, los invito a participar el &lt;span style="font-weight: bold;"&gt;miércoles 17 de Octubre a las 19hs&lt;/span&gt;, &lt;a href="http://www.institucional.frc.utn.edu.ar/sistemas/Extension/ExtensionNovedades.asp"&gt;en el salón de actos&lt;/a&gt; de la &lt;span style="font-weight: bold;"&gt;Universidad Tecnológica Nacional&lt;/span&gt; (FRC) de la presentación de los resultados del &lt;a href="http://layerd.net/"&gt;Proyecto LayerD&lt;/a&gt;, pensado y realizado por un tipo cuya capacidad intelectual sobrepasa a cualquiera, y por si fuera poco, lo considero un gran amigo, &lt;span style="font-weight: bold;"&gt;Alexis Ferreyra&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Resumo a continuación (robado del correo de invitación) que es LayerD:&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; font-style: italic; text-align: justify;"&gt;&lt;span style="" lang="ES-AR"&gt;"Para los que no recuerdan (he sido muy molesto con esto deberían recordarlo &lt;/span&gt;&lt;span  lang="ES-AR" style="font-family:Wingdings;"&gt;&lt;span style=""&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="" lang="ES-AR"&gt;) LayerD es un framework de programación, es decir son un conjunto de lenguajes de programación y compiladores que incorporan algunas técnicas poco comunes y relativamente novedosas como la posibilidad de escribir un programa e implementarlo en plataformas diversas como .NET o Java, permite escribir extensiones para los lenguajes agregando nuevas funciones (algo similar a plug-ins en un sentido), los lenguajes en éste framework poseen reflexión completa en tiempo de compilación y si bien son orientados a objetos es factible trabajar con paradigmas más abstractos como se mostrará en el seminario; también permiten los lenguajes incorporar herramientas de refactoring y programación RAD directamente en el compilador haciéndolo independiente del entorno utilizado, entre otras cosas."&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos y no falten!!!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-604603103252970440?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/604603103252970440/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=604603103252970440&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/604603103252970440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/604603103252970440'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/10/hacia-el-futuro-con-tecnologa-argentina.html' title='Hacia el futuro con tecnología Argentina'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-9032302915206428905</id><published>2007-09-26T20:09:00.000-03:00</published><updated>2007-11-17T19:09:59.711-03:00</updated><title type='text'>No deje que su sistema se "achanche"</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/chochan.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 108px; height: 108px;" src="http://two.xthost.info/ytrio40/img/chochan.gif" alt="" border="0" /&gt;&lt;/a&gt;Para los que no están subscriptos al newsletter de &lt;span style="font-weight: bold;"&gt;TheServerSide.com&lt;/span&gt;, se los recomiendo, porque siempre aparecen nuevos artículos donde podemos enterarnos de nuevas tecnologías, problemas de las tecnologías actuales y experiencias de verdaderos expertos de Java.&lt;br /&gt;Casi todos sabemos que un cluster es un conjunto de servidores que trabajan en forma conjunta para brindar un servicio de alta performance y particularmente de tolerancia a fallos.&lt;br /&gt;En el artículo que escribe &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=J2EEClustering&amp;amp;asrc=EM_NLN_2261655&amp;amp;uid=2903157"&gt;Wang Yu&lt;/a&gt;, describe y detalla las características de los servicios J2EE bajo un entorno de cluster. &lt;span style="font-weight: bold;"&gt;Muy recomendable.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.theserverside.com/tt/articles/article.tss?l=J2EEClustering&amp;amp;asrc=EM_NLN_2261655&amp;amp;uid=2903157"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 359px; height: 53px;" src="http://www.theserverside.com/tt/articles/content/J2EEClustering/J2EEClustering.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-9032302915206428905?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/9032302915206428905/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=9032302915206428905&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/9032302915206428905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/9032302915206428905'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/09/no-deje-que-su-sistema-se-achanche.html' title='No deje que su sistema se &quot;achanche&quot;'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3682119620715668516</id><published>2007-09-21T15:45:00.000-03:00</published><updated>2007-11-17T19:10:26.979-03:00</updated><title type='text'>¿Se durmió la seguridad en mi aplicación?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/seguridad_sleep.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 98px; height: 98px;" src="http://two.xthost.info/ytrio40/img/seguridad_sleep.gif" alt="" border="0" /&gt;&lt;/a&gt;Ya le he confesado en algún post anterior, mis aplicaciones tienden a ser muy débiles. Pero por suerte hace tiempo que vengo tratando de cambiar esto. Les quiero presentar dos cosas: primero una &lt;a href="http://www.owasp.org/index.php/Top_10_2007"&gt;lista &lt;/a&gt;(top 10) de vulnerabilidades explotadas en los sitios web. El origen de este listado proviene desde al &lt;a style="font-weight: bold;" href="http://www.owasp.org/index.php/Main_Page"&gt;OWASP&lt;/a&gt; (&lt;span style="font-style: italic;"&gt;Open Web Application Security Project&lt;/span&gt;). Esta organización realiza estudios de seguridad no sólo a nivel web, sino para cualquier tipo de aplicación de software.&lt;br /&gt;&lt;br /&gt;Aquí va la lista, para más info, ver los links correspondientes:&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A1" title="Top 10 2007-A1"&gt;A1 - Cross Site Scripting (XSS)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A2" title="Top 10 2007-A2"&gt;A2 - Injection Flaws&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A3" title="Top 10 2007-A3"&gt;A3 - Malicious File Execution&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A4" title="Top 10 2007-A4"&gt;A4 - Insecure Direct Object Reference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A5" title="Top 10 2007-A5"&gt;A5 - Cross Site Request Forgery (CSRF)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A6" title="Top 10 2007-A6"&gt;A6 - Information Leakage and Improper Error Handling&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A7" title="Top 10 2007-A7"&gt;A7 - Broken Authentication and Session Management&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A8" title="Top 10 2007-A8"&gt;A8 - Insecure Cryptographic Storage&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A9" title="Top 10 2007-A9"&gt;A9 - Insecure Communications&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.owasp.org/index.php/Top_10_2007-A10" title="Top 10 2007-A10"&gt;A10 - Failure to Restrict URL Access&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo segundo que les quería presentar es un nuevo framework que nos permite controlar la seguridad de nuestra aplicación Web Java, casi sin importar el framework controlador que usemos (siempre y cuando sea Spring ó Struts 1 y 2). Se llama &lt;a style="font-weight: bold;" href="http://www.hdiv.org/index.htm"&gt;HDIV &lt;/a&gt;(&lt;span style="font-weight: bold;"&gt;HTTP Data Integrity Validator&lt;/span&gt;), es open-source y configurable en XML.&lt;br /&gt;Recomiendo bajar la presentación PPT donde se expone de manera rápida la propuesta de este framework (según prometen, el costo en performance es muy bajo, repito, según prometen). Aún no lo he probado en profundidad, cuando lo haga, comentaré más a fondo.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3682119620715668516?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3682119620715668516/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3682119620715668516&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3682119620715668516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3682119620715668516'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/09/se-durmi-la-seguridad-en-mi-aplicacin.html' title='¿Se durmió la seguridad en mi aplicación?'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6307916779165840853</id><published>2007-09-12T12:28:00.000-03:00</published><updated>2007-09-12T12:41:05.577-03:00</updated><title type='text'>Dilbert programa en Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;Generalmente nunca me gustaron las historietas (más conocidas como comics), pero esta vez es digno de mencionar que el famoso Dilbert, programa en Java.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://dilbert.com/comics/dilbert/archive/images/dilbert2007016295907.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 325px; height: 112px;" src="http://dilbert.com/comics/dilbert/archive/images/dilbert2007016295907.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Este, sin duda en el casi primer año de vida de este blog, es el post más ñoño que he hecho, pero peor sería debatir sobre el tema, como lo hacen en &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=46812&amp;asrc=EM_NLN_2166048&amp;amp;uid=2903157"&gt;TheServerSite.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6307916779165840853?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6307916779165840853/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6307916779165840853&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6307916779165840853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6307916779165840853'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/09/dilbert-programa-en-java.html' title='Dilbert programa en Java'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4520109345577027815</id><published>2007-09-01T21:20:00.000-03:00</published><updated>2007-11-17T19:15:56.464-03:00</updated><title type='text'>Ganadores del JDJ Readers choice 2007</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/jdjwinners2K7.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 103px; height: 103px;" src="http://two.xthost.info/ytrio40/img/jdjwinners2K7.gif" alt="" border="0" /&gt;&lt;/a&gt;Finalmente están publicados los ganadores del &lt;a href="http://java.sys-con.com/read/417254_1.htm"&gt;"Java Developer's Journal"&lt;/a&gt; &lt;span style="font-weight: bold;"&gt;Readers' Choice Awards 2007&lt;/span&gt;. Algunas sorpresas, algunos que merecían ganar (a mí gusto) y otros que debo probar para no quedarme fuera del mundo Java.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Veamos algunos de los ganadores y después me comentan si están de acuerdo o no:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-Mejor libro&lt;/span&gt;: (quién más) &lt;i&gt;Thinking in Java 4th Edition&lt;/i&gt;, de Bruce Eckel.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-Mejor aplicación Java&lt;/span&gt;: Eclipse IDE. (Mi corazón late sin cesar &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.rism.ac.th/ESweb/subject/values/heart-red-animated.gif"&gt;&lt;img style="cursor: pointer; width: 24px; height: 24px;" src="http://www.rism.ac.th/ESweb/subject/values/heart-red-animated.gif" alt="" align="middle" border="0" /&gt;&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-Mejor herramienta de monitoreo&lt;/span&gt;: Compuware Vantage (habrá que probarla)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-Mejor App Server comercial:&lt;/span&gt; (y si...) WebLogic, BEA Systems, Inc.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;-Mejor App Server gratuito&lt;/span&gt;: (y si... de nuevo) JBOSS (casi GlassFish, casi Gerónimo, casi Websphere)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;-Mejor librería de clases&lt;/span&gt;: SWT, de eclipse (que poca atención le he prestado)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;-Mejor herramienta de debugging&lt;/span&gt;: Eclipse IDE (alzo mi voz en un estridente grito de GOOOLLL!!!! )&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;-Mejor IDE&lt;/span&gt;: Eclipse IDE (ahora si, para que tengan &lt;span style="font-style: italic;"&gt;MyEclipse 5.0, BEA Workshop, IntelliJ IDEA 6.0&lt;/span&gt;)&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.last.fm/avatar/982b08eaa917c11de6ba191a4abb5522.gif"&gt;&lt;img style="cursor: pointer; width: 50px; height: 50px;" src="http://static.last.fm/avatar/982b08eaa917c11de6ba191a4abb5522.gif" alt="" align="middle" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;-Mejor Arquitectura de Persistencia&lt;/span&gt;: (te lo estarás imaginando) Hibernate&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;-Mejor plataforma rich client&lt;/span&gt;: (aunque comercial, concuerdo con el resultado) MyEclipse 5.0&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;-Mejor producto innovador&lt;/span&gt;: QUIEN MÁS, PERO QUIÉN MÁS PUEDE SER!!! Eclipse IDE&lt;br /&gt;&lt;br /&gt;Bueno, sacarán como primera conclusión mi fanatismo por eclipse. He dejado varios ganadores de lado, así que visiten la página de JDJ.&lt;br /&gt;Segundo, no presten atención sólo al primer puesto, me gusta que hayan puesto los finalistas, eso nos indica que se está usando en el mundo y podremos prepararnos para un futuro cambio. Recuerden que esto cambia, y &lt;span style="font-weight: bold;"&gt;rápido!!&lt;/span&gt;. A no quedarse atrás, yo avisé.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4520109345577027815?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4520109345577027815/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4520109345577027815&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4520109345577027815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4520109345577027815'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/09/ganadores-del-jdj-readers-choice-2007.html' title='Ganadores del JDJ Readers choice 2007'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-554644705642026437</id><published>2007-08-30T12:09:00.000-03:00</published><updated>2007-11-17T19:17:46.662-03:00</updated><title type='text'>Un pequeño paso para la NASA, un gran paso para Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/spacenasa.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 100px; height: 100px;" src="http://two.xthost.info/ytrio40/img/spacenasa.gif" alt="" border="0" /&gt;&lt;/a&gt;A veces es increíble hasta donde llega mi ignorancia del mundo. Había leído en la página principal de Sun hace bastante tiempo y tenía marcado en favoritos del FireFox, un &lt;a href="http://java.sun.com/developer/technicalArticles/javase/worldwind/"&gt;artículo &lt;/a&gt;que describe (bastante en general) la utilización de un API de la NASA para ver imágenes satelitales. Si, ya sé que existe el Google Earth y otros, pero nunca me puse a pensar en que la NASA brindaría una API completamente open-source.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Me parece una iniciativa extraordinaria, debido a que está orientada al desarrollo de herramientas para la educación y aprendizaje. Y por si fuera poco, está disponible para .NET y Java.&lt;br /&gt;&lt;br /&gt;Les dejo el link de &lt;a href="http://learn.arc.nasa.gov/"&gt;NASA Learning Technologies&lt;/a&gt;, para más información.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-554644705642026437?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/554644705642026437/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=554644705642026437&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/554644705642026437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/554644705642026437'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/08/un-pequeo-paso-para-la-nasa-un-gran.html' title='Un pequeño paso para la NASA, un gran paso para Java'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4375889244685237080</id><published>2007-08-28T16:48:00.000-03:00</published><updated>2007-11-17T19:20:47.415-03:00</updated><title type='text'>El vaso medio lleno (ya no te odio .NET)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/pensando.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 85px; height: 85px;" src="http://two.xthost.info/ytrio40/img/pensando.gif" alt="" border="0" /&gt;&lt;/a&gt;Hacía mucho tiempo que no maldecía a &lt;span style="font-weight: bold;"&gt;.NET&lt;/span&gt; en este blog. Resulta que estoy programando mi tesis de ingeniería en este framework (C#) y he llegado a un punto en donde el cambio (y el crecimiento personal) me obligan a tomar una postura más abierta hacia esta tecnología.&lt;br /&gt;Creo que nunca odié a .NET ni a Microsoft, como tampoco amo a Sun y Java. Son sólo medios para lograr lo que me gusta. El cambio está tan presente, que ponerse a perder tiempo entre el open-source, lo bueno y lo malo, lo comercial y lo no comercial, francamente me ha sobrepasado.&lt;br /&gt;Hace varios años que concurro a &lt;span style="font-weight: bold;"&gt;TechNights de Microsoft&lt;/span&gt; y he aprendido muchísimo de tipos como&lt;a href="http://eugeserrano.wordpress.com/"&gt; Eugenio Serrano&lt;/a&gt;, un verdadero apasionado de la programación. Pero haciendo una retrospectiva, ¿A cuántos &lt;span style="font-weight: bold;"&gt;TechNights de Sun/Java&lt;/span&gt; fui? ¿De cuántos me enteré? Absolutamente ninguno. ¿Y el &lt;a href="http://www.cordobajug.org/"&gt;grupo de usuarios Java&lt;/a&gt; de mi ciudad? Me comuniqué con ellos, promocioné el sitio (con los alumnos de paradigmas de programación, donde soy ayudante de cátedra) y las supuestas charlas que iban a dar, de verdad quería colaborar, pero nunca más recibí feedback.&lt;br /&gt;No reniego del grupo de usuarios de Córdoba, yo sé que se hace todo a pulmón, pero sé que somos muchos a los que nos gusta Java y que se puede hacer algo interesante, tan interesante como los TechNigths que hace Microsoft.&lt;br /&gt;&lt;br /&gt;Hoy por hoy, la verdad es que le estoy (finalmente) agarrando el gusto a &lt;span style="font-weight: bold;"&gt;.NET&lt;/span&gt;. Nunca me pareció una mala propuesta, pero siempre se me complicaba más que Java (sé lo que estás pensando, ¿Microsoft más complicado que Java?). Bueno, mi lema es "momento que soy lento...".&lt;br /&gt;En conclusión, estoy aprendiendo a ver el vaso medio lleno, posibilidades donde antes no las veía, oportunidades y menos amenazas. Quizá me estoy volviendo viejo, como decía el Carpo &lt;span style="font-style: italic;"&gt;"Yo soy un hombre bueno, lo que pasa es que me estoy viniendo viejo..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Me atajo para los que me van a decir &lt;span style="font-weight: bold;"&gt;"Formá tu propio grupo gil"&lt;/span&gt;. Denme tiempo, todo requiere de planeación, asignación de prioridades y recursos. Para el año que viene ya estoy pensando en ello.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4375889244685237080?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4375889244685237080/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4375889244685237080&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4375889244685237080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4375889244685237080'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/08/el-vaso-medio-lleno-ya-no-te-odio-net.html' title='El vaso medio lleno (ya no te odio .NET)'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3854543606265277257</id><published>2007-07-23T15:58:00.000-03:00</published><updated>2007-11-17T19:33:58.061-03:00</updated><title type='text'>Struts 2 - ServletRequestAware y SessionAware</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/roundx.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 98px; height: 113px;" src="http://two.xthost.info/ytrio40/img/roundx.gif" alt="" border="0" /&gt;&lt;/a&gt;Me han pedido un ejemplo del uso de &lt;span style="font-weight: bold;"&gt;ServletRequestAware&lt;/span&gt;, así que aquí va el action correpondiente usando sesiones y el request.&lt;br /&gt;Prometo para una próxima entrega, la manipulación de archivos.&lt;br /&gt;Pueden copiar la clase directamente al proyecto de "&lt;span style="font-weight: bold;"&gt;Struts 2 - Round 1&lt;/span&gt;", no debería ser complicado para nada. Perdón por el código sin tabulaciones, no encuentro la forma de mostrar código en blogger, tal vez alguno me pueda ayudar.&lt;br /&gt;&lt;/div&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;package &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;prueba;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;java.util.Map;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;javax.servlet.http.HttpServletRequest;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;org.apache.struts2.interceptor.ServletRequestAware;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;org.apache.struts2.interceptor.SessionAware;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;business.User;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;com.opensymphony.xwork2.ActionSupport;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public class &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Login &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;extends &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ActionSupport &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;implements &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;SessionAware, ServletRequestAware&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;private &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String usuario;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;private &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String password;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;private &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Map sesion;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;private &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;HttpServletRequest request;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(100, 100, 100);"&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;  public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String execute&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;() &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;throws &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Exception &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;User user = &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;User&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;()&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;user.setName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;usuario&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;user.setPassword&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;password&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;//sesion se llena automáticamente&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;//con el método setSession(Map m)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;sesion.put&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"_USER"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, user&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;//request se llena automáticamente&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;//con el método setServletRequest(...)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String btn = request.getParameter&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"btnAceptar"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;//Si lo valido correctamente...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;addActionMessage&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Este es un ActionMessage de SUCCESS"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;addActionMessage&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"El botón presionado es: "&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+btn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;return &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;SUCCESS;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;return &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ERROR;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String getUsuario&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;return &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;usuario;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;setUsuario&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String usuario&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.usuario = usuario;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String getPassword&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;return &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;password;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;setPassword&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;String password&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.password = password;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;//Agregado al implementar SessionAware&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(100, 100, 100);"&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;setSession&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Map s&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;sesion = s;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;//Agregado al implementar ServeltRequestAware&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(100, 100, 100);"&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;setServletRequest&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;HttpServletRequest request&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.request = request;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3854543606265277257?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3854543606265277257/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3854543606265277257&amp;isPopup=true' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3854543606265277257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3854543606265277257'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/07/struts-2-servletrequestaware-y.html' title='Struts 2 - ServletRequestAware y SessionAware'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3061101777854796142</id><published>2007-07-23T01:22:00.000-03:00</published><updated>2008-12-08T23:19:50.905-02:00</updated><title type='text'>La caja negra de Sun MicroSystems</title><content type='html'>&lt;div style="text-align: justify;"&gt;¿Se acerca tu cumpleaños? ¿Tus padres se ganaron la lotería? ¿Eres un magnate poderoso?. Entonces puedes tener la gran e impresionante "&lt;span style="font-weight: bold;"&gt;Black Box&lt;/span&gt;" de Sun. ¿Qué es esto, te preguntas?.&lt;br /&gt;&lt;/div&gt;Bueno, para que desperdiciar letras si una foto vale más que mil palabras...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/RqQyZv8CWKI/AAAAAAAAAHI/eD_QvzOe6Eg/s1600-h/bbx1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/RqQyZv8CWKI/AAAAAAAAAHI/eD_QvzOe6Eg/s200/bbx1.jpg" alt="" id="BLOGGER_PHOTO_ID_5090248896781899938" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/RqQysP8CWLI/AAAAAAAAAHQ/UASzpww-T9U/s1600-h/bbx2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/RqQysP8CWLI/AAAAAAAAAHQ/UASzpww-T9U/s200/bbx2.jpg" alt="" id="BLOGGER_PHOTO_ID_5090249214609479858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y aquí tienen un par de links adicionales:&lt;br /&gt;-&lt;a href="http://www.sun.com/emrkt/blackbox/news.jsp"&gt;Poject Black Box&lt;/a&gt;&lt;br /&gt;-&lt;a href="http://www.sun.com/emrkt/blackbox/gallery.xml?t=2&amp;p=&amp;amp;s="&gt;Galería de fotos&lt;/a&gt;&lt;br /&gt;-&lt;a href="http://www.informationweek.com/galleries/showImage.jhtml?galleryID=7&amp;imageID=1&amp;amp;articleID=197800265"&gt;Más fotos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3061101777854796142?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3061101777854796142/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3061101777854796142&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3061101777854796142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3061101777854796142'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/07/la-caja-negra-de-sun-microsystems.html' title='La caja negra de Sun MicroSystems'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6uz0hSfL-0M/RqQyZv8CWKI/AAAAAAAAAHI/eD_QvzOe6Eg/s72-c/bbx1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5767388726534040912</id><published>2007-07-16T23:59:00.000-03:00</published><updated>2007-11-17T19:34:10.522-03:00</updated><title type='text'>Struts 2 - Round 2 - Accediendo a la sesión</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/round2.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 93px; height: 93px;" src="http://two.xthost.info/ytrio40/img/round2.gif" alt="" border="0" /&gt;&lt;/a&gt;Seré breve. En el post anterior vimos que los nuevos Action de Struts son clases bastantes simples, lo único que hubo que tener en cuenta es que heredaba funcionalidad de la clase &lt;span style="font-weight: bold;"&gt;ActionSupport&lt;/span&gt;.&lt;br /&gt;También sabemos que aplicando el patrón "&lt;span style="font-style: italic;"&gt;dependency injection&lt;/span&gt;", Struts 2 automáticamente llenaba todos los atributos de mi clase (siempre y cuando tuvieran el mismo nombre que en el form y su correspondiente método set).&lt;br /&gt;Bien, pero el método &lt;span style="font-weight: bold;"&gt;execute()&lt;/span&gt; no recibe ningún parámetro como lo recibíamos en Struts 1. ¿Cómo accederemos a la sesión, al request, al response, a cookies, a los objetos de mensajes y errores?&lt;br /&gt;&lt;br /&gt;La respuesta se encuentra en las &lt;span style="font-weight: bold;"&gt;interfaces &lt;/span&gt;y los &lt;span style="font-weight: bold;"&gt;interceptors&lt;/span&gt; que el framework nos proporciona, por ejemplo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;org.apache.struts2.interceptor.&lt;span style="font-weight: bold;"&gt;ApplicationAware&lt;/span&gt;&lt;/li&gt;&lt;li&gt;org.apache.struts2.interceptor.&lt;span style="font-weight: bold;"&gt;CookiesAware&lt;/span&gt;&lt;/li&gt;&lt;li&gt;org.apache.struts2.interceptor.&lt;span style="font-weight: bold;"&gt;ParameterAware&lt;/span&gt;&lt;/li&gt;&lt;li&gt;org.apache.struts2.interceptor.&lt;span style="font-weight: bold;"&gt;ServletRequestAware&lt;/span&gt;&lt;/li&gt;&lt;li&gt;org.apache.struts2.interceptor.&lt;span style="font-weight: bold;"&gt;ServletResponseAware&lt;/span&gt;&lt;/li&gt;&lt;li&gt;org.apache.struts2.interceptor.&lt;span style="font-weight: bold;"&gt;SessionAware&lt;/span&gt;&lt;/li&gt;&lt;li&gt;com.opensymphony.xwork2.&lt;span style="font-weight: bold;"&gt;ValidationAware&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Como ven, todo lo que diga "&lt;span style="font-weight: bold;"&gt;Aware&lt;/span&gt;" hace que nuestro action pueda acceder a una variedad de objetos adicionales con los cuales trabajar. Recuerden que los action deberían ser una capa intermedia entre la capa de negocio y la de presentación y nunca deberíamos utilizarlos como objetos de negocio.&lt;br /&gt;&lt;br /&gt;Cada una de estas interfaces nos hará agregar métodos adicionales para recibir de Struts, el objeto deseado (nuevamente por dependency injection). Por supuesto, la mayoría de estos métodos son del tipo &lt;span style="font-weight: bold;"&gt;set&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Esto es bastante fácil de utilizar, si necesitan código de ejemplo, sólo deben solicitarlo.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5767388726534040912?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5767388726534040912/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5767388726534040912&amp;isPopup=true' title='16 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5767388726534040912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5767388726534040912'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/07/struts-2-round-2-accediendo-la-sesion.html' title='Struts 2 - Round 2 - Accediendo a la sesión'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8028754452593650109</id><published>2007-07-13T15:21:00.000-03:00</published><updated>2008-12-08T23:19:51.093-02:00</updated><title type='text'>Struts 2 - Round 1</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/round1.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 86px; height: 86px;" src="http://two.xthost.info/ytrio40/img/round1.gif" alt="" border="0" /&gt;&lt;/a&gt;Bien, aquí va el primer intento de correr &lt;span style="font-weight: bold;"&gt;Struts 2.&lt;/span&gt; He tratado de empezar a interactuar con un formulario, pasando por alto el Hola Mundo. Para los que quieran más información, les recomiendo el &lt;a href="http://struts.apache.org/2.x/docs/core-developers-guide.html"&gt;Core Developers Guide&lt;/a&gt; y &lt;a href="http://www.roseindia.net/struts/struts2/index.shtml"&gt;este&lt;/a&gt; tutorial.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El objetivo del ejercicio es simplemente hacer el formulario de login de una aplicación. Esto va a requerir copiar librerías, conocer la arquitectura de Struts 2 y escribir 3 JSP, 1 clase y un XML.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 153, 51);font-family:verdana;" &gt;1. Arquitectura básica&lt;/span&gt;&lt;br /&gt;Este gráfico muestra sólo una parte de la arquitectura de Struts 2 (la que nos sirve para ahora). Si quieren ver algo un poco más detallado, hacer click &lt;a href="http://struts.apache.org/2.x/docs/big-picture.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/RpfOC4-OGxI/AAAAAAAAAHA/nqnidmIWN-0/s1600-h/Struts2+-round1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 292px; height: 145px;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/RpfOC4-OGxI/AAAAAAAAAHA/nqnidmIWN-0/s320/Struts2+-round1.jpg" alt="" id="BLOGGER_PHOTO_ID_5086760853186681618" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold; color: rgb(204, 153, 51);font-family:verdana;" &gt;2. Estructura del Proyecto&lt;/span&gt;&lt;br /&gt;Vamos a hacer 3 páginas JSP:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;index.jsp&lt;/span&gt;: contendrá simplemente un link y un botón.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;login.jsp&lt;/span&gt;: el formulario de entrada de usuario.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;principal.jsp&lt;/span&gt;: la página de resultado de comprobación.&lt;/li&gt;&lt;/ul&gt;También vamos a necesitar de una clase:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Login.java&lt;/span&gt;: esta será nuestra Action. Struts 2 no requiere que herede funcionalidad de ninguna otra clase o implemente alguna interfaz, pero para no darle trabajo al &lt;span style="font-style: italic;"&gt;reflection&lt;/span&gt;, voy a hacer que herede funcionalidad de &lt;span style="font-weight: bold;"&gt;ActionSupport&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(204, 153, 51);font-family:verdana;" &gt;3. Los paquetes JAR a instalar en el lib del proyecto&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;struts2-core-2.0.8.jar&lt;/li&gt;&lt;li&gt;xwork-2.0.3.jar&lt;/li&gt;&lt;li&gt;freemaker-2.3.8.jar&lt;/li&gt;&lt;li&gt;ognl-2.6.11.jar&lt;/li&gt;&lt;li&gt;commons-logging-1.1.jar&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(204, 153, 51);font-family:verdana;" &gt;4. login.jsp&lt;/span&gt;&lt;br /&gt;Voy a utilizar aquí los tags de Struts, para lo cual, necesito la directiva &lt;span style="font-weight: bold;"&gt;tag&lt;/span&gt;:&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;&lt;/span&gt;&lt;br /&gt;Y entre las etiquetas :&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&amp;lt;s:form action="Login"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    &amp;lt;s:textfield key="usuario" label="Usuario registrado :"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    &amp;lt;s:password key="password" label="Contraseña"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    &amp;lt;s:submit/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&amp;lt;/s:form&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La única consideración importante aquí es &lt;span style="font-weight: bold;"&gt;action="Login"&lt;/span&gt;. Sucede que para que Struts pueda verificar que se está invocando a un Action, se debería invocar (por GET o POST) a &lt;span style="font-weight: bold;"&gt;Login.action&lt;/span&gt;, sin embargo, y debido a que estamos usando las etiquetas de Struts, esto Login aparecerá de forma correcta cuando sea procesada la JSP. Pero esto no es del todo cierto, ya que si la página JSP no es mostrada al usuario como resultado de la invocación a alguna acción, seguirá saliendo en el HTML resultante un &lt;span style="font-weight: bold;"&gt;action="Login"&lt;/span&gt; y esto resultará en un error 404. ¿Te preguntas por qué? Yo también, aunque por el momento no tengo respuesta...&lt;br /&gt;&lt;br /&gt;Las páginas index.jsp y principal.jsp no tienen nada de especial, así que las saltearé casi con desprecio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 153, 51);font-family:verdana;" &gt;4. La clase Login.java&lt;/span&gt;&lt;br /&gt;Esta es la acción propiamente dicha, aquí va el código:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://two.xthost.info/ytrio40/tutoriales/struts2Login.html" height="200" scrolling="yes" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lo importante de desatacar es que ya no necesitamos &lt;span style="font-weight: bold;"&gt;ActionForms &lt;/span&gt;ni ningún otro tipo de clase que represente el formulario a tratar. Aquí Struts 2 utiliza el patrón &lt;span style="font-style: italic;"&gt;Dependency Injection&lt;/span&gt; para rellenar los atributos que se necesiten, por esa razón, si tenemos que tener en cuenta la creación de un get/set para cada componente de presentación que queramos tratar.&lt;br /&gt;Con respecto al método &lt;span style="font-weight: bold;"&gt;execute()&lt;/span&gt;, como ven no recibe parámetros y retorna un String representando el resultado de la acción (error, exito o cualquier otro string).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 153, 51);font-family:verdana;" &gt;4. Todo muy lindo, pero ¿cómo configuro esto?. El archivo struts.xml&lt;/span&gt;&lt;br /&gt;&lt;iframe src="http://two.xthost.info/ytrio40/tutoriales/struts.xml" height="200" scrolling="yes" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lo importante a destacar son las etiquetas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;package:&lt;/span&gt; simboliza una unidad de trabajo, es exactamente el mismo concepto que paquetes en UML y en Java.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;action:&lt;/span&gt; la acción propiamente dicha&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;result:&lt;/span&gt; el resultado posible. Si no incluimos un nombre, será utilizado por defecto cuando la acción resulte en SUCCESS.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;OK, estoy ya se hizo muy largo, les dejo &lt;a href="http://two.xthost.info/ytrio40/tutoriales/Struts2Test.rar"&gt;los fuentes&lt;/a&gt; para que jueguen un poco y en próximos post veremos cómo acceder a la sesión, al request, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8028754452593650109?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8028754452593650109/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8028754452593650109&amp;isPopup=true' title='17 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8028754452593650109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8028754452593650109'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/07/struts-2-round-1.html' title='Struts 2 - Round 1'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6uz0hSfL-0M/RpfOC4-OGxI/AAAAAAAAAHA/nqnidmIWN-0/s72-c/Struts2+-round1.jpg' height='72' width='72'/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6777041367285537611</id><published>2007-07-10T16:41:00.000-03:00</published><updated>2007-11-17T19:34:17.056-03:00</updated><title type='text'>Struts 2: Abajo lo viejo, arriba lo nuevo</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/romper.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 115px; height: 115px;" src="http://two.xthost.info/ytrio40/img/romper.gif" alt="" border="0" /&gt;&lt;/a&gt;Creo que es la primera vez que no siento la famosa "resistencia al cambio". He estado leyendo un poco qué es lo nuevo de &lt;span style="font-weight: bold;"&gt;Struts 2&lt;/span&gt; y la verdad es que me ha convencido hasta el momento. Investigaré más a fondo e intentaré escribir un poco más de detalle.&lt;br /&gt;Por el momento, les puedo comentar que es lo nuevo de &lt;a href="http://struts.apache.org/2.x/"&gt;Struts 2&lt;/a&gt;:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;La arquitectura&lt;/span&gt;: no más el &lt;span style="font-style: italic;"&gt;ActionServlet&lt;/span&gt;, ahora es un filtro, &lt;span style="font-style: italic;"&gt;FilterDispatcher&lt;/span&gt;. Además incorpora interceptors (como filtros adicionales)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Tags:&lt;/span&gt; soporte para AJAX con tags propios (en realidad, usa DOJO), ahora soporta validación dentro del mismo tag. Y por supuesto, tags específicos para JSP, Velocity y Freemaker.&lt;br /&gt;&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;Compatibilidad con Spring&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Configuración:&lt;/span&gt; todavía podemos realizar la configuración mediante XML (aunque ha cambiado la nomenclatura), pero además, podemos utilizar annotations, wildcards en los archivos xml, e incluso NINGUNA CONFIGURACIÓN!! (esto, por supuesto, en estado experimentar y para que funcione debemos seguir una serie de reglas de nomenclatura).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Nuevo enfoque de validación&lt;/span&gt;: ya no utiliza el framework de jakarta commons, sino el enfoque de webwork.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Mejor manejo de los checkbox&lt;/span&gt;: al fin!!&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Adiós a los FormBeans:&lt;/span&gt; ahora los forms estarán basados en POJOs.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;La primera impresión (apenas hice el Hello World y analicé las aplicaciones de ejemplo), fue que realmente me pareció muy fácil de implementar, más fácil que Struts 1, es realmente muy rápido de entender y aplicar (hasta el momento). Pero sólo el tiempo podrá formar una opinión sólida. La contra es que no se encuentran tutoriales en español, por el momento todo en inglés, así que en próximos post, iré detallando más, como una humilde contribución.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6777041367285537611?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6777041367285537611/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6777041367285537611&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6777041367285537611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6777041367285537611'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/07/struts-2-abajo-lo-viejo-arriba-lo-nuevo.html' title='Struts 2: Abajo lo viejo, arriba lo nuevo'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7463641658029853964</id><published>2007-07-06T16:07:00.000-03:00</published><updated>2007-11-17T19:39:04.304-03:00</updated><title type='text'>El evangelio de Roger Pressman</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/evangelio.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 106px; height: 106px;" src="http://two.xthost.info/ytrio40/img/evangelio.gif" alt="" border="0" /&gt;&lt;/a&gt;Finalmente, ha llegado a mis manos el famoso libro de &lt;span style="font-weight: bold;"&gt;Roger Pressman&lt;/span&gt; "&lt;a href="http://www.cuspide.com/isbn/9701054733"&gt;Ingeniería del Software&lt;/a&gt;". Siempre he considerado que es como la "biblia del desarrollo de software" y que no podía terminar mi tesis de ingeniería sin haberlo leído. [En este punto muchos no estarán de acuerdo, acepto sugerencias de otros libros y autores]&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por el momento no puedo dar una crítica exhaustiva del libro, apenas he comenzado a leerlo, pero habiendo dado un vistazo general a los contenidos, puedo decir que son 992 páginas de pura ingeniería que cubren todo el ciclo de vida del SW. Me ha interesado mucho una sección especial cubre la "&lt;span style="font-weight: bold;"&gt;Aplicación de la ingeniería Web&lt;/span&gt;",  muy útil para estos días, y por supuesto, un tema que siempre me ha resultado de especial interés, las métricas de software.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7463641658029853964?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7463641658029853964/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7463641658029853964&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7463641658029853964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7463641658029853964'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/07/el-evangelio-de-roger-pressman.html' title='El evangelio de Roger Pressman'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2236422415650959381</id><published>2007-06-26T20:40:00.000-03:00</published><updated>2007-11-17T19:41:39.602-03:00</updated><title type='text'>¿Se puede estar al día con Java?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/tarde.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 113px; height: 113px;" src="http://two.xthost.info/ytrio40/img/tarde.gif" alt="" border="0" /&gt;&lt;/a&gt;Lo cierto es que por más que trate, no se puede (&lt;span style="font-style: italic;"&gt;vamos, piensa que puedes y podrás!!!&lt;/span&gt;). No, por más que me mis múltiples personalidades intenten motivarme, cada vez me doy cuenta de que es imposible.&lt;br /&gt;Pero por lo menos podemos realizar algunas lecturas rápidas de varios temas de gran trascendencia. Y par ello, veamos que ofrece la &lt;span style="font-weight: bold;"&gt;JavaONE&lt;/span&gt;. Este &lt;a href="http://developers.sun.com/learning/javaoneonline/index.jsp"&gt;link &lt;/a&gt;está un poco escondido para mi gusto, pero después de renegar un poco, finalmente lo encontré.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Algunos de los slides que más me gustaron son:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;De la JavaONE 2007 pueden encontrar:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-6590&amp;amp;yr=2007&amp;amp;track=8"&gt;Killer JavaScript Technology Frameworks for Java Platform Developers&lt;/a&gt;: An Exploration of Prototype, Script.aculo.us, and Rico&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-6836&amp;amp;yr=2007&amp;amp;track=8"&gt;Creating Amazing Web Interfaces with Ajax&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-6014&amp;amp;yr=2007&amp;amp;track=8"&gt;You Are Hacked: Ajax Security Essentials for Enterprise Java Technology Developers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-6045&amp;amp;yr=2007&amp;amp;track=8"&gt;Web Algorithms&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;De la JavaONE 2006:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-4619&amp;amp;yr=2006&amp;amp;track=coreenterprise"&gt;How to Represent the Architecture of Your Enterprise Application Using UML 2.0 and More&lt;/a&gt; (del SEI - muy bueno si te interesa UML 2.0 y la arquitectura de software)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-9056&amp;amp;yr=2006&amp;amp;track=coreenterprise"&gt;Java  Persistence API In 60 Minutes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-3396&amp;amp;yr=2006&amp;amp;track=coreenterprise"&gt;Enterprise JavaBeans 3.0&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Por supesto, hay muchísimos más, pero no el tiempo no alcanza nunca para leerlos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2236422415650959381?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2236422415650959381/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2236422415650959381&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2236422415650959381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2236422415650959381'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/06/se-puede-estar-al-da-con-java.html' title='¿Se puede estar al día con Java?'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5078724496707225538</id><published>2007-06-12T04:03:00.000-03:00</published><updated>2007-11-17T19:44:17.138-03:00</updated><title type='text'>¿Me están tomando el pelo?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://two.xthost.info/ytrio40/img/pelo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 102px; height: 102px;" src="http://two.xthost.info/ytrio40/img/pelo.gif" alt="" border="0" /&gt;&lt;/a&gt;El siguiente post puede parecer pernicioso, confieso que lo es, además de agrandado.... ¡Pero con fundamentos!&lt;br /&gt;El siguiente &lt;a href="http://200.32.12.145/notas.asp?idcanal=38&amp;amp;id=52160"&gt;link &lt;/a&gt;contiene una nota sobre "&lt;span style="font-weight: bold;"&gt;Escasez de programadores Java&lt;/span&gt;". Si eres un lector que se encuentra fuera de Argentina, es cierto, no hay mucha oferta de programadores Java, pero no es eso a lo que apunto. De lo que me quejo es de la frase que afirma que para ser programador Java, es necesario &lt;span style="font-style: italic;"&gt;"ser un usuario inteligente del mundo de la informática, y querer programar, se puede empezar de cero, pero hay que saber manejar un procesador de texto, Internet, tener idea de qué es un disco rígido, y cómo se guarda un archivo"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;¡Oh, querido lector que has pasado días enteros tratando de aprender que es el JDK, JRE, Javabeans, configurando eclipse, renegando con los NullPointerException!&lt;br /&gt;&lt;br /&gt;Confieso que entiendo completamente que se quiera "&lt;span style="font-weight: bold;"&gt;inundar&lt;/span&gt;" el mercado con programadores a bajo costo, pero y la calidad?, qué sucede con conocimientos básicos de lógica, algoritmos y estructuras de datos, matemática discreta, etc.?&lt;br /&gt;Para ser de esos que programan lo que pensó otro, mejor me hago carpintero. Si no pienso la mejor manera de hacer lo que programo, si no pienso en la arquitectura, los patrones, las capas, en fin, en la ingeniería de software, mejor abandono todo aquí.&lt;br /&gt;&lt;br /&gt;Pero cuidado, he conocido gente que ha pasado de ser artesano a programador, pero excelentes programadores, conozco gente de 17 años que programa como los dioses, pero estoy convencido de que se necesita un poquito más de formación académica (por lo menos más que saber usar un procesador de textos) para programar en Java. Esto lo veo en los cursos que dicto y en la misma facultad. Java/.Net, son lenguajes difíciles para comenzar. Seguro que una vez que se supera la primer curva de aprendizaje, es muchísimo más fácil, pero hay que superarla!!!&lt;br /&gt;&lt;br /&gt;En fin, por las dudas voy a empezar una segunda profesión, que siempre me ha interesado: la carpintería.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5078724496707225538?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5078724496707225538/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5078724496707225538&amp;isPopup=true' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5078724496707225538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5078724496707225538'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/06/me-estn-tomando-el-pelo.html' title='¿Me están tomando el pelo?'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-6273482388245786789</id><published>2007-06-07T17:49:00.000-03:00</published><updated>2007-06-07T17:58:46.398-03:00</updated><title type='text'>[OT] ¿Que es un EJB?</title><content type='html'>&lt;div style="text-align: justify;"&gt;El siguente video fue sacado desde el &lt;a href="http://marcelosoft.blogspot.com/"&gt;blog de Marcelo!&lt;/a&gt;, lo ví cuando estaba de ronda por &lt;a href="http://codear.com.ar/"&gt;CodeAR&lt;/a&gt;. Simplemente no podía dejar de postearlo. Vean y juzguen por ustedes mismos.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="align: center;"&gt;&lt;br /&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vFlTYRleZpU"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/vFlTYRleZpU" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-6273482388245786789?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/6273482388245786789/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=6273482388245786789&amp;isPopup=true' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6273482388245786789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/6273482388245786789'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/06/ot-que-es-un-ejb.html' title='[OT] ¿Que es un EJB?'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4044408696435075461</id><published>2007-05-27T23:27:00.000-03:00</published><updated>2007-05-27T23:54:40.957-03:00</updated><title type='text'>AJAX en Java - Proyecto JMaki</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://three.fsphost.com/ytrio/img/jmaki.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 112px; height: 112px;" src="http://three.fsphost.com/ytrio/img/jmaki.gif" alt="" border="0" /&gt;&lt;/a&gt;Querido lector: Para empezar quiero decirles que si, &lt;span style="font-weight: bold;"&gt;estoy con vida&lt;/span&gt;. Después de varios exámenes, trabajo y una gripe que me dejó en la cama todo un fin de semana + feriado, estoy con vida.&lt;br /&gt;He trabajado con un poco de &lt;span style="font-weight: bold;"&gt;Ajax &lt;/span&gt;(más precisamente con &lt;a href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt;) desde hace un tiempo. Francamente las librerías de Yahoo! me han servido muchísimo. Pero en estos últimos días, comencé a investigar un poco más. Ya había visto a &lt;a href="https://ajax.dev.java.net/"&gt;JMaki&lt;/a&gt;, el cual trae un plugin para NetBeans, por lo que no le había dado mucho de mi tiempo (yo soy más de eclipse).&lt;br /&gt;Pero la última semana volví a visitar el sitio y me dí con que ahora &lt;span style="font-weight: bold;"&gt;tenemos plugin para eclipse!!!!&lt;br /&gt;&lt;/span&gt;Bueno, no es para descorchar cientos de botellas, pero por lo menos, me parece que el proyecto ha avanzado muchísimo (a pesar de que todavía se encuentra en la versión &lt;span style="font-family: verdana;"&gt;0.9.2&lt;span style="font-family: georgia;"&gt;) y logró llamar mi atención.&lt;br /&gt;Es por eso que voy a empezar a escribir un par de tutoriales aunque sean iniciales, ya que no hay mucha documentación en castellano.&lt;br /&gt;&lt;br /&gt;Por el momento, de lo que he practicado, hay cosas que me gustan, como por ejemplo:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-family: georgia;"&gt;El que incorpore librerías populares como dojo, yui, google, scriptaculous&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-family: georgia;"&gt;El que no sea exclusivo de Java, sino que también sirve para PHP&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-family: georgia;"&gt;El que no haya que mandarle al usuario todas las librerías aunque sólo usemos una de ellas&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-family: georgia;"&gt;El que incorpore tags de JSP&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Y por supuesto, hay cosas que no me gustan tanto:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si agrego &lt;span style="font-style: italic;"&gt;widgets &lt;/span&gt;a mi página, como por ejemplo un &lt;span style="font-style: italic;"&gt;dropdownCalendar&lt;/span&gt;, a pesar de que se muestra una caja de texto con el valor seleccionado, si hago un &lt;span style="font-weight: bold;"&gt;post&lt;/span&gt;, nunca se pasa este valor al servidor (lo que equivale a verificar &lt;span style="font-weight: bold;"&gt;todos &lt;/span&gt;los campos con JavaScript antes de enviarlo)&lt;/li&gt;&lt;/ul&gt;Seguiré investigando y les cuento.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Ah!!, y un gusto volver al blog&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4044408696435075461?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4044408696435075461/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4044408696435075461&amp;isPopup=true' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4044408696435075461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4044408696435075461'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/05/ajax-en-java-proyecto-jmaki.html' title='AJAX en Java - Proyecto JMaki'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1096267154330982822</id><published>2007-05-05T00:28:00.000-03:00</published><updated>2007-11-17T19:47:24.227-03:00</updated><title type='text'>Actualizando links</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://three.fsphost.com/ytrio/img/links.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 106px; height: 106px;" src="http://three.fsphost.com/ytrio/img/links.gif" alt="" border="0" /&gt;&lt;/a&gt;Tal como lo ven en la imagen, tengo la cabeza en este momento. Estoy actualizando los links de tutoriales de post anteriores. Detallo a continuación:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://two.xthost.info/ytrio40/tutoriales/JSmooth.pdf"&gt;Tutorial de JSmooth&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://two.xthost.info/ytrio40/tutoriales/Internacionalizacion.rar"&gt;Tutorial de internazionalización (I18N)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://two.xthost.info/ytrio40/tutoriales/Metadatos.pdf"&gt;Metadatos  &lt;/a&gt;y &lt;a href="http://two.xthost.info/ytrio40/tutoriales/jAnnotations.rar"&gt;Tutorial de Annotations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://two.xthost.info/ytrio40/tutoriales/objectSocket.rar"&gt;Tutorial de transferencia de Object por Sockets&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Mil disculpas a los RSS que se van a volver locos. &lt;span style="font-weight: bold;"&gt;PERDÓN!!!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1096267154330982822?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1096267154330982822/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1096267154330982822&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1096267154330982822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1096267154330982822'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/05/actualizando-links.html' title='Actualizando links'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2569820311308413002</id><published>2007-04-30T20:41:00.000-03:00</published><updated>2007-04-30T21:12:08.331-03:00</updated><title type='text'>Nos adueñamos del tiempo - Fechas en Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://three.fsphost.com/ytrio/img/tiempo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 94px; height: 94px;" src="http://three.fsphost.com/ytrio/img/tiempo.gif" alt="" border="0" /&gt;&lt;/a&gt;¿Cansado de renegar con los objetos &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html"&gt;Date&lt;/a&gt; y &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/GregorianCalendar.html"&gt;GregorianCalendar&lt;/a&gt;?&lt;br /&gt;¿Le han pedido que calcule la cantidad de días entre dos fechas?&lt;br /&gt;¿Está a punto de apretar el gatillo? &lt;span style="font-weight: bold;"&gt;NO LO HAGA!!!!&lt;/span&gt;&lt;br /&gt;Este post fue motivado por un foro de &lt;a href="http://www.lawebdelprogramador.com/news/new.php?id=44&amp;texto=Java&amp;amp;pagina=1"&gt;La Web del  Programador&lt;/a&gt;, que tanto me ha ayudado y en donde intento colaborar también. ¿Se han fijado que muy pocas veces encontramos tutoriales o proyectos de ejemplo donde pongan fechas?. Debo confesar que en varios cursos iniciales las trato de evitar hasta que veo que los alumnos han avanzado en sus conocimientos. Quiero presentarles un API llamada &lt;a href="http://www.joda.org/"&gt;JODA&lt;/a&gt; (no sé exactamente que significan las siglas), pero en especial las &lt;a href="http://joda-time.sourceforge.net/index.html"&gt;Joda-Time&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Por ejemplo, para calcular la cantidad de días entre dos fechas con el API de Java (java.util) debería hacer lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//Creo las dos instancias de fecha&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;br /&gt;GregorianCalendar gc = new GregorianCalendar(2000, 11, 20);&lt;br /&gt;     GregorianCalendar gc1 = new GregorianCalendar(2000, 11, 25);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;//Obtengo los objetos Date para cada una de ellas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;        Date fec1 = gc.getTime();&lt;br /&gt;     Date fec2 = gc1.getTime();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;//Realizo la operación&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;        long time = fec2.getTime() - fec1.getTime();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;//Muestro el resultado en días&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;        System.out.println(time/(3600*24*1000));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora, un par de consideraciones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El método &lt;span style="font-weight: bold;"&gt;getTime()&lt;/span&gt; retorna un long que simboliza la cantidad de milisegundos transcurridos desde el 01/01/1970.&lt;/li&gt;&lt;li&gt;El resultado de restar los dos long da como resultado (nuevamente) cantidad de milisegundos.&lt;/li&gt;&lt;li&gt;La fórmula &lt;span style="font-weight: bold;"&gt;time/(3600*24*1000)&lt;/span&gt; sirve para pasar los milisegundos a días.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Ahora veamos cómo se hace con el API de Joda:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;//Creo las dos instancias de fecha&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;DateMidnight jodafec1 = new DateMidnight(2000, 11, 20);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DateMidnight jodafec2 = new DateMidnight(2000, 11, 25);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//Realizo la operación&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Period periodo = new Period(jodafec2.getMillis()-jodafec1.getMillis());&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//Muestro el resultado en días&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;System.out.println(periodo.getDays());&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sin duda esta nueva forma reduce la complejidad de los cálculos, sólo veo una cosa en contra de esta API: utiliza demasiado los parámetros tipo &lt;span style="font-style: italic;"&gt;Object&lt;/span&gt;, lo que nos daría un poco de riesgo al momento de comprobación de tipos, pero los mismos creadores lo admiten, en pos de la facilidad de extensión que tiene esta librería.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2569820311308413002?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2569820311308413002/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2569820311308413002&amp;isPopup=true' title='13 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2569820311308413002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2569820311308413002'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/04/fechas-en-java.html' title='Nos adueñamos del tiempo - Fechas en Java'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7728529858041258338</id><published>2007-04-28T20:16:00.000-03:00</published><updated>2008-12-08T23:19:51.185-02:00</updated><title type='text'>La informática y las condiciones de trabajo 2</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/RjTz5HDmhZI/AAAAAAAAAGI/q6W0vSH8ZjQ/s1600-h/huelga2.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://three.fsphost.com/ytrio/img/huelga2.gif" alt="" id="BLOGGER_PHOTO_ID_5058936443916158354" border="0" /&gt;&lt;/a&gt;Bien, este post está (obviamente) relacionado con "&lt;a href="http://mundojava.blogspot.com/2007/02/la-informtica-y-las-condiciones-de.html"&gt;La informática y las condiciones de trabajo&lt;/a&gt;". Este tuvo un par de discusiones bastante interesantes. Pero han pasado muchas cosas en este periodo de tiempo.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Simplemente quiero pasarles un par de links para que lean. Me he dado cuenta de que todos los trabajadores de la informática, entre los que encontramos a los que capacitamos, los desarrolladores, los técnicos, los recibidos, los no recibidos, pero por sobre todo a los que quieren empezar a trabajar, &lt;span style="font-weight: bold;"&gt;ya saben lo que está sucediendo &lt;/span&gt;en las empresas de IT de Córdoba - Argentina.&lt;br /&gt;&lt;br /&gt;Pero soy positivo, yo empiezo a ver aires de cambio en los trabajadores (lamentablemente no en las empresas).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Aquí van los links:&lt;br /&gt;&lt;br /&gt;Este es lo que originó el segundo link: &lt;a href="http://200.32.12.132/07/03/26/secciones/economia/nota.asp?nota_id=56289"&gt;La voz del interior - "Como a EDS, Pyme tecnológicas piden que les subsidien el empleo"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Este es el &lt;a href="http://jperezsistemas.wordpress.com/"&gt;segundo &lt;/a&gt;(leer las opiniones) .&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7728529858041258338?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7728529858041258338/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7728529858041258338&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7728529858041258338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7728529858041258338'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/04/la-informtica-y-las-condiciones-de.html' title='La informática y las condiciones de trabajo 2'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8886891901577069567</id><published>2007-04-25T21:55:00.000-03:00</published><updated>2008-12-08T23:19:51.435-02:00</updated><title type='text'>Modalidad "chismosa"</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/Ri_5EXDmhWI/AAAAAAAAAFw/utTC1rZ-uh8/s1600-h/viejaDeBarrio.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/Ri_5EXDmhWI/AAAAAAAAAFw/utTC1rZ-uh8/s320/viejaDeBarrio.gif" alt="" id="BLOGGER_PHOTO_ID_5057534759864272226" border="0" /&gt;&lt;/a&gt;Efectivamente, hoy me puse los ruleros y voy a contar el último chisme que me he encontrado por la web.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;En realidad no es muy nuevo que digamos, pero resulta que la &lt;span style="font-weight: bold;"&gt;Apache Software Foundation&lt;/span&gt;    (&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://is.rice.edu/%7Eheider/FUN/images/gifs/pray.gif"&gt;&lt;img align="middle" style="cursor: pointer; width: 28px; height: 21px;" src="http://is.rice.edu/%7Eheider/FUN/images/gifs/pray.gif" alt="" border="0" /&gt;&lt;/a&gt; alabados sean), más precisamente &lt;span style="font-weight: bold;"&gt;Geir Magnusson Jr&lt;/span&gt;, VP del proyecto &lt;a href="http://harmony.apache.org/"&gt;Harmony&lt;/a&gt;, ha escrito una&lt;a href="http://www.apache.org/jcp/sunopenletter.html"&gt; carta abierta para Sun Microsystems&lt;/a&gt;, donde plantea varias quejas acerca de las licencias de Sun para el JDK-SE. La carta es bastante detallada y por momentos dura.&lt;br /&gt;&lt;/div&gt;Pero la cosa no terminó ahí, ya que desde la página de Sun hay un &lt;a href="http://blogs.sun.com/ontherecord/entry/apache_open_letter_to_sun"&gt;intento de respuesta&lt;/a&gt;, de hecho, ellos mismos lo ponen como un "initial thoughts" donde dicen entre otras cosas, que no pueden mantener contentos a todos los stakeholders y que la prioridad está puesta en hacer accesible la plataforma Java a las comunidades GNU/Linux (pregunta: ¿no era Java ya multiplataforma? - quizá no entendí bien ese punto).&lt;br /&gt;&lt;br /&gt;Desde este humilde blog, envío un "haya paz!!!" más un "haya open-source!!!!"-&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8886891901577069567?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8886891901577069567/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8886891901577069567&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8886891901577069567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8886891901577069567'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/04/modalidad-chismosa.html' title='Modalidad &quot;chismosa&quot;'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/Ri_5EXDmhWI/AAAAAAAAAFw/utTC1rZ-uh8/s72-c/viejaDeBarrio.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3716366085248085038</id><published>2007-04-19T23:52:00.000-03:00</published><updated>2008-12-08T23:19:51.600-02:00</updated><title type='text'>Lo tenía en mis narices!!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/RigwdrcEOiI/AAAAAAAAAFo/sJ5zSlAkYVQ/s1600-h/nariz.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/RigwdrcEOiI/AAAAAAAAAFo/sJ5zSlAkYVQ/s320/nariz.gif" alt="" id="BLOGGER_PHOTO_ID_5055343868158163490" border="0" /&gt;&lt;/a&gt;Algo que me gusta mucho de Java es que nunca se termina de aprender. Siempre hay algo más (esto puede parecer tedioso para muchos). Pero esto hace que nuestro cerebro se active.&lt;br /&gt;Hace poco tiempo estaba charlando con un compañero de facultad y me contaba lo que tenían planeado para su tesis. Básicamente consistía en un &lt;a href="http://www.uvnc.com/index.html"&gt;VNC &lt;/a&gt;hecho con Java (más algunas cosas que francamente no creo que sean posibles).&lt;br /&gt;El caso es que me contó de una clase de Java, en el paquete &lt;span style="font-weight: bold;"&gt;java.awt&lt;/span&gt;, se llama &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Robot.html"&gt;Robot &lt;/a&gt;y quizá para muchos de uds. sea común o nada nuevo (de hecho, no es nuevo, ya que existe desde la versión &lt;span style="font-weight: bold;"&gt;1.4.2 del JDK&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Esta clase permite tomar el control de mouse y del teclado en el sistema operativo en el que estemos trabajando!!!!! (&lt;span style="font-style: italic;"&gt;como pueden ver, la clase me ha gustado mucho&lt;/span&gt;). Y por si fuera poco, es recontra-archi-facilísima de usar, por ejemplo, para que mi programa Java presione el botón de inicio de Windows, simplemente hago lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;tt class="java"&gt;&lt;span class="java10"&gt;Robot r = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;Robot&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;   r.mouseMove&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java7"&gt;30&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java7"&gt;750&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;   r.mousePress&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;InputEvent.BUTTON1_MASK&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;/span&gt;&lt;span class="java8"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Bueno, la pregunta del millón: ¿Y para que puedo usar esto? Respuesta: para lo que quieras, aunque la mayoría de las veces se usa para hacer programas que realicen test automatizados, como es el caso de &lt;a href="http://abbot.sourceforge.net/doc/overview.shtml"&gt;Abbot Java GUI Test Framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3716366085248085038?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3716366085248085038/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3716366085248085038&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3716366085248085038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3716366085248085038'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/04/lo-tena-en-mis-narices.html' title='Lo tenía en mis narices!!!'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/RigwdrcEOiI/AAAAAAAAAFo/sJ5zSlAkYVQ/s72-c/nariz.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-9170261428738063344</id><published>2007-04-08T16:40:00.001-03:00</published><updated>2009-04-04T20:18:42.446-03:00</updated><title type='text'>Aprendiendo Eclipse 3.2</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/RhlJRne8biI/AAAAAAAAAFg/kxe0h1kRECc/s1600-h/eclipse.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/RhlJRne8biI/AAAAAAAAAFg/kxe0h1kRECc/s320/eclipse.gif" alt="" id="BLOGGER_PHOTO_ID_5051149024078097954" border="0" /&gt;&lt;/a&gt;Hola, estoy experimentando un poco con &lt;a href="http://www.debugmode.com/wink/"&gt;Wink&lt;/a&gt;, un programa que permite realizar presentaciones del tipo Flash, capturando pantallas.&lt;br /&gt;De paso voy a comenzar una serie de tutoriales o "How to" de &lt;span style="font-weight: bold;"&gt;eclipse&lt;/span&gt;, ya que no siempre resulta intuitivo para el principiante.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Así que aquí va la primera parte, pueden verla en línea &lt;a href="http://two.xthost.info/ytrio40/tutoriales/Primer%20Programa%20eclipse.rar"&gt;aquí&lt;/a&gt; (no lo recomiendo a menos que tengan banda ancha, está un poco pesada), pero también pueden descargarla desde &lt;a href="http://two.xthost.info/ytrio40/tutoriales/Primer%20Programa%20eclipse.rar"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Espero que les sirva.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-9170261428738063344?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/9170261428738063344/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=9170261428738063344&amp;isPopup=true' title='10 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/9170261428738063344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/9170261428738063344'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/04/aprendiendo-eclipse-32.html' title='Aprendiendo Eclipse 3.2'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6uz0hSfL-0M/RhlJRne8biI/AAAAAAAAAFg/kxe0h1kRECc/s72-c/eclipse.gif' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-142359640382482350</id><published>2007-04-06T01:06:00.000-03:00</published><updated>2008-12-08T23:19:52.107-02:00</updated><title type='text'>Optimizando las conexiones JDBC</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6uz0hSfL-0M/RhXJXne8bhI/AAAAAAAAAFY/CbprWA_5PFM/s1600-h/jdbc.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_6uz0hSfL-0M/RhXJXne8bhI/AAAAAAAAAFY/CbprWA_5PFM/s320/jdbc.gif" alt="" id="BLOGGER_PHOTO_ID_5050163964738825746" border="0" /&gt;&lt;/a&gt;Estaba tratando de adentrarme más en el mundo de JDBC 4.0, pero me topé con información muy importante acerca de la performance y las mejores prácticas de programación con respecto al acceso a bases de datos.&lt;br /&gt;En lugar de leer cientos de artículos y las especificaciones, les recomiendo tomarse una hora para ver el siguiente &lt;span style="font-weight: bold;"&gt;webcast&lt;/span&gt;: &lt;a href="http://www.javalobby.org/eps/jdbc-performance/"&gt;JDBC Performance Best Practices&lt;/a&gt;. Este webcast pertenece a &lt;a href="http://www.javalobby.org/"&gt;JavaLobby&lt;/a&gt;, un excelente lugar para encontrar información útil.&lt;br /&gt;&lt;br /&gt;No crean que soy vago por no detallar, pero este webcast lo merece...&lt;br /&gt;Bueno, lo admito, también tiene su cuota de vagancia.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-142359640382482350?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/142359640382482350/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=142359640382482350&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/142359640382482350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/142359640382482350'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/04/optimizando-las-conexiones-jdbc.html' title='Optimizando las conexiones JDBC'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6uz0hSfL-0M/RhXJXne8bhI/AAAAAAAAAFY/CbprWA_5PFM/s72-c/jdbc.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-5699251481073415886</id><published>2007-03-30T20:52:00.000-03:00</published><updated>2008-12-08T23:19:52.248-02:00</updated><title type='text'>MundoJava se pone la gorra</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/Rg2kcYeofsI/AAAAAAAAAFQ/ZN-qhaVOb40/s1600-h/lagorra.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/Rg2kcYeofsI/AAAAAAAAAFQ/ZN-qhaVOb40/s320/lagorra.gif" alt="" id="BLOGGER_PHOTO_ID_5047871564866420418" border="0" /&gt;&lt;/a&gt;Aunque soy un agradecido de todo lo que sea open-source y mis búsquedas de librerías las haga siempre en &lt;a href="http://www.sourceforge.org/"&gt;SourceForge&lt;/a&gt;, hoy me pongo la gorra de policía y presento una API para manejar licencias: &lt;a href="http://www.websina.com/products/jlicense.html"&gt;JLicense&lt;/a&gt;.&lt;br /&gt;Lo cierto es que siempre nos toca desarrollar una aplicación que necesita manejar licencias, generalmente para poder brindar una versión "demo" a nuestro futuro Cliente.&lt;br /&gt;JLicense nos permite crear distintos tipos de licencias para empaquetar nuestra aplicación sin necesidad de crear claves y comprobaciones manualmente. Nos sirve cuando estamos apurados por completar esa parte del soft, pero por otro lado, nos perdemos toda la diversión de explorar la el paquete &lt;a href="http://java.sun.com/javase/6/docs/api/javax/crypto/package-summary.html"&gt;java.crypto&lt;/a&gt;  y &lt;a href="http://java.sun.com/javase/6/docs/api/javax/security/auth/package-summary.html"&gt;java.security&lt;/a&gt; (lo tengo como una materia pendiente).&lt;br /&gt;Para explicar en detalle el método que utiliza JLicense para generar la licencia, debería tener una larga charla con mi amigo &lt;span style="font-weight: bold;"&gt;Dr. Crow&lt;/span&gt;, quien me ha avivado muchas veces con problemas de seguridad y la tiene más clara, pero en esta ocasión, me limitaré a dar las bases.&lt;br /&gt;&lt;br /&gt;JLicense utiliza el algoritmo &lt;a href="http://es.wikipedia.org/wiki/DSA"&gt;DSA &lt;/a&gt;(&lt;a href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica"&gt;criptografía asimétrica&lt;/a&gt;) para generar 2 claves (una pública y otra privada). Para generarla podemos utilizar la aplicación &lt;span style="font-weight: bold;"&gt;createDSAKey &lt;/span&gt;aunque aquí aparece la primera desventaja: JLicense &lt;span style="font-weight: bold;"&gt;no es open-source&lt;/span&gt;. Pero, el binario se puede utilizar gratuitamente. El problema está en que deberíamos modificar un archivo de código fuente para poder utilizar nuestra clave pública.&lt;br /&gt;&lt;br /&gt;Si queremos generar una licencia, podemos utilizar la utilidad &lt;span style="font-weight: bold;"&gt;createLicense&lt;/span&gt; (línea de comandos) o podemos utilizar la clase LicenseTool. Esto nos genera un archivo &lt;span style="font-weight: bold;"&gt;license.lic&lt;/span&gt;, que deberemos empaquetar con nuestra aplicación.&lt;br /&gt;&lt;br /&gt;Por último, deberemos incorporar a nuestra aplicación, las librerías: com.websina.license y com.websina.util y NADA MÁS (a menos que le dejemos una backdoor a cualquier cracker).&lt;br /&gt;Y en nuestro código:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;LicenseManager manager = LicenseManager.getInstance();&lt;br /&gt;boolean valid = manager.isValid();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y listo, validamos. Pero, amigos, al final de todo, nunca nada es completamente seguro, sin mencionar la facilidad de decompilación del código Java. Sin embargo, es una buena herramienta para practicar y lograr resultados rápidamente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-5699251481073415886?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/5699251481073415886/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=5699251481073415886&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5699251481073415886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/5699251481073415886'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/03/mundojava-se-pone-la-gorra.html' title='MundoJava se pone la gorra'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/Rg2kcYeofsI/AAAAAAAAAFQ/ZN-qhaVOb40/s72-c/lagorra.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-3958857013862956388</id><published>2007-03-22T00:25:00.000-03:00</published><updated>2008-12-08T23:19:52.464-02:00</updated><title type='text'>Ahora si que es más fácil jugar con el System Tray</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/RgH4dNkpY9I/AAAAAAAAAFE/VPxTQovh3KE/s1600-h/juego.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/RgH4dNkpY9I/AAAAAAAAAFE/VPxTQovh3KE/s320/juego.gif" alt="" id="BLOGGER_PHOTO_ID_5044586238374929362" border="0" /&gt;&lt;/a&gt;No, no es el sucesor del Galaxy (uy, que viejo!!). Una de las novedades del JDK 1.6 en cuanto al aspecto visual de las aplicaciones es que ahora es mucho más fácil utilizar el System Tray del entorno de ventanas que estemos usando.&lt;br /&gt;Ahora, esto está bueno porque antes, para poder usarlo, teníamos que acceder por medio de JNI, es decir, usando otro lenguaje compatible.&lt;br /&gt;&lt;/div&gt;De hecho, todavía existen varias librerías que nos permitían hacerlo sin mucho trabajo, pro ejemplo:&lt;br /&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Una iniciativa estudiantil: &lt;a href="http://jeans.studentenweb.org/java/trayicon/trayicon.html"&gt;Windows Tray Icon&lt;/a&gt;&lt;/li&gt;&lt;li&gt;El imprescindible Open Source: &lt;a href="http://systray.sourceforge.net/"&gt;SysTray for Java&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Un artículo: &lt;a href="http://www.codeproject.com/Purgatory/system_tray_in_java.asp"&gt;Java System Tray Application using Visual Basic&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Y había otras librerías pagas que han sido completamente hundidas por el open-source y la nueva versión.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Y si, ahora es más fácil. Simplemente tenemos dos clases: &lt;a href="http://java.sun.com/javase/6/docs/api/java/awt/SystemTray.html"&gt;java.awt.SystemTray&lt;/a&gt; y &lt;a href="http://java.sun.com/javase/6/docs/api/java/awt/TrayIcon.html"&gt;java.awt.TrayIcon&lt;/a&gt;. La primera sirve para acceder por medio de Java a la barra de estado donde se muestran los iconos, &lt;span style="font-weight: bold;"&gt;pero ojo!!!&lt;/span&gt;, no significa que podemos acceder a cualquier icono, sólo a los que &lt;span style="font-weight: bold;"&gt;nuestra aplicación haya puesto ahí&lt;/span&gt;. Por cada aplicación que creemos, sólo habrá un objeto SystemTray y no puede ser instanciado con el operador &lt;span style="font-style: italic;"&gt;new&lt;/span&gt;, sino llamando a &lt;span style="font-style: italic;"&gt;getSystemTray()&lt;/span&gt;. La clase TrayIcon representa un icono, se le puede agregar un menú emergente (el tradicional Swing), un tooltip y eventos, por supuesto. De esta clase, podemos tener todas las instancias que queramos.&lt;br /&gt;&lt;br /&gt;Les dejo este link para que vean un ejemplo: &lt;a href="http://java.sun.com/developer/technicalArticles/javase/6_desktop_features/#SystemTray"&gt;New and Updated Desktop Features in Java SE 6, Part 1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;He probado un par de ejemplos, pero cuando tenga tiempo, me hago uno interesante y se los paso.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-3958857013862956388?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/3958857013862956388/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=3958857013862956388&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3958857013862956388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/3958857013862956388'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/03/ahora-si-que-es-ms-fcil-jugar-con-el.html' title='Ahora si que es más fácil jugar con el System Tray'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/RgH4dNkpY9I/AAAAAAAAAFE/VPxTQovh3KE/s72-c/juego.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-1665807298571452844</id><published>2007-03-19T20:44:00.000-03:00</published><updated>2008-12-08T23:19:52.832-02:00</updated><title type='text'>Un poco de lectura de Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/Rf8iDxgLFHI/AAAAAAAAAE8/RaNnp1GPNuQ/s1600-h/lectura.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/Rf8iDxgLFHI/AAAAAAAAAE8/RaNnp1GPNuQ/s200/lectura.gif" alt="" id="BLOGGER_PHOTO_ID_5043787555901478002" border="0" /&gt;&lt;/a&gt;Me han pedido que les recomiende algunos libros o recursos para empezar a programar en Java. Así que este corto post será una pequeña recopilación de los libros que considero como más entendibles.&lt;br /&gt;&lt;br /&gt;Como recursos, el primero (bastante obvio) es internet. Pero para ser más preciso, recomiendo muchísimo &lt;a href="http://java.sun.com/docs/books/tutorial/"&gt;"The Java Tutorial"&lt;/a&gt;. Es el primer lugar a donde recurrir para aprender lo básico especialmente cuando tenemos poco tiempo. Ojo, primero está todo en inglés y además, no esperen encontrar temas de J2EE en The Java Tutorial, pero sí en &lt;a href="http://java.sun.com/j2ee/1.4/docs/tutorial/doc/"&gt;"The J2EE Tutorial"&lt;/a&gt;, aunque  este último no es tan fácil de entender debo decir.&lt;br /&gt;En cuanto a otros links de interés para tutoriales en castellano,  &lt;a href="http://www.javahispano.org/canyamo.action"&gt;Java Hispano&lt;/a&gt; y &lt;a href="http://www.programacion.net/java/"&gt;Java en Castellano&lt;/a&gt; son muy buenos lugares para empezar.&lt;br /&gt;&lt;br /&gt;En cuanto a libros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El mejor de todos &lt;a href="http://www.cuspide.com/isbn/9702605180"&gt;"Cómo programar en Java"&lt;/a&gt;, de Deitel &amp; Deitel. &lt;span style="font-weight: bold;"&gt;Contras&lt;/span&gt;: &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;carísimo&lt;/span&gt;. Pros: &lt;/span&gt;"emuleable" ;)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;En general, los de la editorial Users.code (&lt;a href="http://www.tectimes.com/onweb/seccion.aspx?s=2&amp;numero=lpcu072"&gt;"Java, la guía total del programador"&lt;/a&gt;, &lt;a href="http://www.tectimes.com/onweb/seccion.aspx?s=2&amp;amp;numero=lpcu090"&gt;"Programación Web Java"&lt;/a&gt; y &lt;a href="http://www.tectimes.com/onweb/seccion.aspx?s=2&amp;numero=lpcu064"&gt;"Programación para celulares"&lt;/a&gt;) son bastante buenos y &lt;span style="font-weight: bold;"&gt;baratos&lt;/span&gt;!!!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un clásico de clásicos, &lt;a href="http://www.mindview.net/Books/TIJ/"&gt;"Thinking in Java"&lt;/a&gt;, de Bruce Eckel.&lt;/li&gt;&lt;/ul&gt;Ahora, el que definitivamente NO recomiendo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.casadellibro.com/fichas/fichabiblio/0,1094,2900000938929,00.html?codigo=2900000938929&amp;amp;titulo=J2EE%3A+MANUAL+DE+REFERENCIA"&gt;J2EE, Manual de Referencia&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Saludos&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-1665807298571452844?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/1665807298571452844/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=1665807298571452844&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1665807298571452844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/1665807298571452844'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/03/un-poco-de-lectura-de-java.html' title='Un poco de lectura de Java'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6uz0hSfL-0M/Rf8iDxgLFHI/AAAAAAAAAE8/RaNnp1GPNuQ/s72-c/lectura.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-8965769024709609550</id><published>2007-03-04T19:23:00.000-03:00</published><updated>2008-12-08T23:19:52.983-02:00</updated><title type='text'>Empezando a medir el Software</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/RetHPtW4Z2I/AAAAAAAAAEU/Ulu_YOET1bc/s1600-h/medir.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/RetHPtW4Z2I/AAAAAAAAAEU/Ulu_YOET1bc/s320/medir.gif" alt="" id="BLOGGER_PHOTO_ID_5038198943343208290" border="0" /&gt;&lt;/a&gt;Últimamente me he estado preocupando un poco más por los pasos previos a la programación. Me refiero a los pasos más administrativos, quizá vistos como un poco aburridos desde el punto de vista del programador, pero definitivamente tanto o más importantes que la programación (y escribo como ingeniero 8D ).&lt;br /&gt;Siempre es un problema cuando en un nuevo proyecto nos preguntan: &lt;span style="font-weight: bold;"&gt;¿Cuánto va a tardar?, ¿Cuánto va a costar?.&lt;br /&gt;&lt;/span&gt;Bueno, lo que hacemos siempre es basarnos en la experiencia para poder aproximar, pero existen modelos de cálculo para estimar el &lt;span style="font-weight: bold;"&gt;tamaño&lt;/span&gt;, el &lt;span style="font-weight: bold;"&gt;esfuerzo &lt;/span&gt;y la &lt;span style="font-weight: bold;"&gt;planificación &lt;/span&gt;de los sistemas de software y no son nuevos, ya hace mucho tiempo que se conocen, el problema es aplicarlos, como ustedes saben.&lt;br /&gt;Me ha tocado aplicarlo hace poco tiempo y debo decir que fue una muy buena experiencia para profundizar en el conocimiento de los requerimientos a satisfacer, además de poder presentar una planificación más matemática.&lt;br /&gt;Me voy a detener en el cálculo del tamaño. He utilizado un modelo que se llama "&lt;span style="font-weight: bold;"&gt;Puntos de Función&lt;/span&gt;" creado por Allan Albrecht (en 1979!!!). Básicamente, lo que se propone es asignar un puntaje al sistema a desarrollar basados en la cantidad de funcionalidad que tendrá. No hablamos de líneas de código, no hablamos de cantidad de clases y objetos, ni de métodos o procedimientos, simplemente de funcionalidad.&lt;br /&gt;Para poder realizar el cálculo, se deben contar aspectos tales como:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La cantidad e &lt;span style="font-weight: bold;"&gt;archivos lógicos&lt;/span&gt; (archivos y tablas de BD) que tendrá la aplicación&lt;/li&gt;&lt;li&gt;La cantidad de&lt;span style="font-weight: bold;"&gt; interfaces externas&lt;/span&gt; (por ejemplo, conectores para sistemas &lt;span style="font-style: italic;"&gt;legacy&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Las &lt;span style="font-weight: bold;"&gt;entradas externas&lt;/span&gt; (por ejemplo, las interfaces de usuario)&lt;/li&gt;&lt;li&gt;Las &lt;span style="font-weight: bold;"&gt;salidas externas&lt;/span&gt; (por ejemplo, generación de informes o reportes)&lt;/li&gt;&lt;li&gt;Las &lt;span style="font-weight: bold;"&gt;consultas &lt;/span&gt;(presentación de información leída de uno o más grupos de datos, menos elaborada que  la anterior)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Una vez contadas estas características (que no es un trabajo sencillo, créanme), se agrupan en una tabla y se ponderan. Los ponderadores están calculados en base al estudio de muchísimos proyectos.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;El resultado final: &lt;span style="color: rgb(153, 0, 0);"&gt;un número&lt;/span&gt;&lt;/span&gt;. Este número positivo representa el tamaño del software. La unidad de medida es "Puntos de función ajustados".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Qué hacemos con ese número?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se puede calcular la cantidad de esfuerzo (medido en [meses-hombre]), el tamaño de los recursos humanos requerido (basado en el esfuerzo) y por supuesto, la duración estimada.&lt;br /&gt;&lt;br /&gt;Dejo una serie de recursos adicionales para los que estén interesados:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La querida &lt;a href="http://es.wikipedia.org/wiki/M%C3%A9trica_de_punto_funci%C3%B3n"&gt;Wikipedia&lt;/a&gt; les describe en forma general y les da más links.&lt;/li&gt;&lt;li&gt;Un paper escrito por &lt;a href="http://www.inegi.gob.mx/inegi/contenidos/espanol/prensa/Contenidos/Articulos/tecnologia/puntosxfuncion.pdf"&gt;Sergio Eduardo Durán (pdf)&lt;/a&gt; (muy recomendable).&lt;/li&gt;&lt;li&gt;Un &lt;a href="http://mit.ocw.universia.net/1.264J/NR/rdonlyres/Civil-and-Environmental-Engineering/1-264JDatabase--Internet--and-Systems-Integration-TechnologiesFa/B9F015C9-1D80-4D56-A492-78420A4C962B/0/functionpointestimation.pdf"&gt;PDF&lt;/a&gt; con el proceso de cálculo muy simplificado.&lt;/li&gt;&lt;li&gt;El &lt;a href="http://www.ifpug.org/default.htm"&gt;"International Function Point Group"&lt;/a&gt;, con documentación sólo para socios, pero están en el emule (para que tengan!!).&lt;/li&gt;&lt;li&gt;Y recomiendo muchísimo el libro de &lt;a href="http://www.amazon.com/Rapid-Development-Steve-McConnell/dp/1556159005"&gt;Steve McConnell - Rapid Development - Taming Wild Software Schedules&lt;/a&gt;. (excelente libro)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Saludos, hasta la próxima.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-8965769024709609550?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/8965769024709609550/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=8965769024709609550&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8965769024709609550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/8965769024709609550'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/03/empezando-medir-el-software.html' title='Empezando a medir el Software'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6uz0hSfL-0M/RetHPtW4Z2I/AAAAAAAAAEU/Ulu_YOET1bc/s72-c/medir.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-4075814453185057389</id><published>2007-02-25T21:11:00.000-03:00</published><updated>2008-12-08T23:19:53.488-02:00</updated><title type='text'>La informática y las condiciones de trabajo</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6uz0hSfL-0M/ReIniOskwRI/AAAAAAAAAD8/M0fn0c_r5KE/s1600-h/huelga.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_6uz0hSfL-0M/ReIniOskwRI/AAAAAAAAAD8/M0fn0c_r5KE/s200/huelga.gif" alt="" id="BLOGGER_PHOTO_ID_5035630802367725842" border="0" /&gt;&lt;/a&gt;Estaba leyendo un artículo publicado por el diario &lt;span style="font-weight: bold;"&gt;Clarín.com&lt;/span&gt; titulado &lt;a href="http://www.clarin.com/suplementos/informatica/2007/02/21/f-00211.htm"&gt;"Creador de soft, profesión con futuro"&lt;/a&gt;. El artículo describe el incremento de productividad y de necesidad de mano de obra calificada que se ha dado en Argentina en la industria del Software desde la gran crisis del 2001 (De la Rúa, corralito, Cavallo, les suena?).&lt;br /&gt;Esto no es nada nuevo para los que vivimos de esta actividad, de hecho, yo mismo el año pasado colaboré para "buscar mano de obra" en la empresa en la que trabajaba. Lo cierto es que no fue fácil encontrar gente lo suficientemente calificada para cubrir las necesidades de las industrias locales. Es en este momento donde muchas empresas optan por capacitar ellos mismos a la futura mano de obra, de hecho, también me ha tocado capacitar para este propósito.&lt;br /&gt;Ahora bien, el artículo (y la ley de oferta y demanda) dicen que estas condiciones hacen que las ofertas de trabajo mejoren, y &lt;span style="font-weight: bold;"&gt;aquí está el problema&lt;/span&gt;.&lt;br /&gt;Yo voy a referirme de lo que pasa en mi ciudad con la siguiente pregunta, &lt;span style="font-weight: bold;"&gt;¿Dónde están las mejoras en las condiciones?.&lt;/span&gt;&lt;span&gt; Porque lo que veo aquí es lo siguiente:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Bajos salarios&lt;/span&gt;. Convengamos que un salario de $1200 (menos de U$S400) no es un buen salario y menos cuando en Argentina se necesitan $900 para &lt;span style="font-weight: bold;"&gt;no ser pobre&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;La última moda de no efectivizar y poner condición de &lt;span style="font-weight: bold;"&gt;monotributista&lt;/span&gt;. Básicamente, para aquellos amigos lectores fuera de Argentina, esto significa que tu empleador puede despedirte cuando quiera y sin preavisar ni pagar ningún tipo de indemnización ni ningún tipo de contribución para jubilación, asignaciones familiares, vacaciones u obras sociales.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Existencia de incubadoras o polos&lt;/span&gt;. Esto está muy bien, las empresas deberían juntarse con el objetivo de buscar nuevos mercados de exportación o para contribuir al desarrollo tecnológico. Lo malo de esto es que generalmente se utiliza como herramienta de "extorsión" con dichos habituales como por ejemplo "si no te gusta, te puedes ir, pero cuidado, que esta empresa pertenece a cierto polo superimportante de Córdoba y no vas a poder ingresar a trabajar a ninguna de las empresas miembro de este polo superimportante de Córdoba".&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No hay Plan de Carrer&lt;/span&gt;a. Propongo que intentes preguntar en el dpto de personal cuál es el Plan de Carrera de la Empresa y si puedes sacar una foto con tu celular a la expresión de sorpresa del rostro del gerente de personal, armaremos un fotolog!!&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No hay beneficios sociales&lt;/span&gt;. Por la misma razón del segundo punto.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Conclusión, sería bueno tener una entidad que defienda al trabajador de la informática, ya que los polos, institutos tecnológicos y consejos provinciales de ciencias informáticas sólo sirven para disminuir los costos de las empresas a costas de los trabajadores de informática.&lt;br /&gt;&lt;br /&gt;FUUUUUA!!! Que enojado que me puse!!!&lt;br /&gt;Adjunto lo que el &lt;a href="http://www.cpcipc.org/"&gt;Consejo Provincial&lt;/a&gt; dicta como &lt;a href="http://www.pcmasmas.com/viewtopic.php?t=3684&amp;start=0&amp;amp;sid=10403da0c5362aca95ae113a2f345d46"&gt;sueldos promedio en la ciudad de Córdoba&lt;/a&gt; rescatado de un foro, ya que la página del consejo está en remodelación (esperemos que remodelen los salarios también).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Saludos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-4075814453185057389?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/4075814453185057389/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=4075814453185057389&amp;isPopup=true' title='11 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4075814453185057389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/4075814453185057389'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/02/la-informtica-y-las-condiciones-de.html' title='La informática y las condiciones de trabajo'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6uz0hSfL-0M/ReIniOskwRI/AAAAAAAAAD8/M0fn0c_r5KE/s72-c/huelga.gif' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7889157349007308231</id><published>2007-02-24T19:40:00.000-03:00</published><updated>2008-12-08T23:19:53.682-02:00</updated><title type='text'>Estoy volviendo</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/ReDAOdow_4I/AAAAAAAAADk/t-HL8lGxqeA/s1600-h/back.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/ReDAOdow_4I/AAAAAAAAADk/t-HL8lGxqeA/s320/back.gif" alt="" id="BLOGGER_PHOTO_ID_5035235738106527618" border="0" /&gt;&lt;/a&gt;Bueno, después de bastante tiempo, vacaciones, muerte psíquica de .NET y reclamos de pagos atrasados a mi antiguo jefe, este blog está volviendo. Ayer estuve en una conferencia local de Microsoft (si, todavía estoy tratando de entender .NET) donde se presentaba un asistente de eventos que en líneas generales permitía identificar errores no administrados en un sistema (bastante interesante) y se presentaba un tema que produjo (sin ánimo de ofender) sorpresa en bastantes caras que pude ver: &lt;span style="font-weight: bold;"&gt;globalización&lt;/span&gt;. Ahora, lo raro de esto es que me parecieron que varias personas lo vieron como novedad, aunque hace muchísimo tiempo que estaba implementado en Java e incluso en .NET. Ya por el 2001, yo sabía de la existencia de esta herramienta en .NET.&lt;br /&gt;&lt;br /&gt;De todos modos, debo decir que siempre las conferencias de Microsoft en &lt;span style="font-weight: bold;"&gt;Córdoba &lt;/span&gt;(la ciudad donde vivo) son interesantes no sólo por las charlas en sí, sino también para conocer desarrolladores de los buenos (y en varias tecnologías, no sólo en tecnologías Microsoft). Además, por si fuera poco, siempre al final hay comida y bebida.&lt;br /&gt;&lt;br /&gt;Bueno, ahora llega el momento de replantear el objetivo de este blog. Por un lado, el nombre me limitaría bastante a Java, pero planeo escribir un poco más acerca de Metodologías de desarrollo (últimamente he estado investigando mucho &lt;span style="font-style: italic; font-weight: bold;"&gt;Puntos de Función&lt;/span&gt; para la medición del tamaño del Software), arquitectura de software y de patrones. Pero siempre orientado al trabajo con Java, mi lenguaje favorito.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Saludos, y resist psychic death!!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7889157349007308231?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7889157349007308231/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7889157349007308231&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7889157349007308231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7889157349007308231'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/02/estoy-volviendo.html' title='Estoy volviendo'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6uz0hSfL-0M/ReDAOdow_4I/AAAAAAAAADk/t-HL8lGxqeA/s72-c/back.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-7937475333865897002</id><published>2007-01-29T20:45:00.000-03:00</published><updated>2008-12-08T23:19:53.856-02:00</updated><title type='text'>Resistiendo la muerte psiquica de .NET</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uz0hSfL-0M/Rb6JRx-LS-I/AAAAAAAAADA/3EUjkgQT9TU/s1600-h/resist2.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_6uz0hSfL-0M/Rb6JRx-LS-I/AAAAAAAAADA/3EUjkgQT9TU/s320/resist2.gif" alt="" id="BLOGGER_PHOTO_ID_5025605172756958178" border="0" /&gt;&lt;/a&gt;Este blog está momentaneamente detenido por culpa de &lt;span style="font-weight: bold;"&gt;Microsoft &lt;/span&gt;(que ego, no?). Lo que sucede es que me estoy peleando con &lt;span style="font-weight: bold;"&gt;.NET&lt;/span&gt; en un proyecto.&lt;br /&gt;Es probable que yo no sepa nada de nada de .NET, pero si hay algo que me he dado cuenta en este casi mes sin escribir, es que .NET no es fácil para nada.&lt;br /&gt;Quizá porque sé Java, pero lanzo por este medio una proclama para todos aquellos que opten por aprender .NET sólo porque dicen que es más fácil que Java/J2EE. Gente: porque se puedan arrastrar controles para hacer una página ASPX no significa que sea fácil!!!&lt;br /&gt;He intentado hacer andar componentes de la interfaz de &lt;a href="http://developer.yahoo.com/yui/"&gt;Yahoo!! (YUI)&lt;/a&gt; para interactuar usando AJAX, pero me ha costado horrores!!!&lt;br /&gt;Debo decir que finalmente he podido lograrlo, pero no gracias a la "flexibilidad" en la capa de presentación de .NET, sino a la flexibiliad de los componentes de Yahoo! y de Javascript.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ah, una cosa más, no me vengan con ATLAS. Lo he probado y no lo he podido hacer funcionar...&lt;br /&gt;&lt;br /&gt;Saludos&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;PF&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-7937475333865897002?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/7937475333865897002/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=7937475333865897002&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7937475333865897002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/7937475333865897002'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/01/resistiendo-la-muerte-psiquica-de-net.html' title='Resistiendo la muerte psiquica de .NET'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6uz0hSfL-0M/Rb6JRx-LS-I/AAAAAAAAADA/3EUjkgQT9TU/s72-c/resist2.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-2546942021766820177</id><published>2007-01-06T01:09:00.000-03:00</published><updated>2008-12-08T23:19:54.191-02:00</updated><title type='text'>El patrón Decorator y una aplicación real</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6uz0hSfL-0M/RZ8lsIJiCII/AAAAAAAAAAM/qYVBCwvLb-I/s1600-h/pintor.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_6uz0hSfL-0M/RZ8lsIJiCII/AAAAAAAAAAM/qYVBCwvLb-I/s320/pintor.gif" alt="" id="BLOGGER_PHOTO_ID_5016769949945956482" border="0" /&gt;&lt;/a&gt;Este post está directamente relacionado con el anterior. Yo sabía que no todos lo iban a entender o que les iba a gustar. Fue así como el único comentario prácticamente me quería boxear (pero con onda). Por cierto, recomiendo su &lt;a href="http://www.sarcobjects.com.ar/blog/"&gt;blog&lt;/a&gt;. Lo bueno de todo esto es que todos los días se aprende algo nuevo. Del comentario, surgieron otros frameworks, de los cuales me gustó la propuesta de la empresa Open Symphony, &lt;a href="http://www.opensymphony.com/sitemesh/"&gt;SiteMesh&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Este framework implementa el patrón Decorator de la &lt;a href="http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o"&gt;GangOfFour&lt;/a&gt;. Este patrón dice (básicamente) que podríamos a partir de una salida estándar a un usuario, modificarla para adaptar esta salida a otros tipos de usuarios. Por ejemplo, en el caso de SiteMesh, teniendo como punto de partida una página HTML, podemos "transformarla" en otro tipo de salida (para imprimir, PDF, WML, etc.).&lt;br /&gt;&lt;br /&gt;Para implementarlo utiliza una funcionalidad de los Servlets que siempre me ha gustado, pero que no he tenido la oportunidad de usar en algo serio: &lt;a href="http://java.sun.com/javaee/5/docs/tutorial/doc/Servlets8.html#wp64572"&gt;&lt;span style="font-weight: bold;"&gt;Los Filtros&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Los filtros son una funcionalidad en J2EE que nos permite implementar otro patrón (&lt;a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html"&gt;intercepting filter&lt;/a&gt;). Consiste en la posibilidad de realizar procesamiento de una o más peticiones antes y después de ejecutar un servlet determinado.&lt;br /&gt;De esta manera, cuando un servlet/jsp genera una salida HTML, teniendo configurado SiteMesh (no más de 5 minutos), más uno o más archivos decoradores, es posible que la salida generada se adapte al usuario.&lt;br /&gt;&lt;br /&gt;Lo mejor de SiteMesh es que no lleva más de 1 hora / hora y media de lectura para aprenderlo. Muy positivo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-2546942021766820177?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/2546942021766820177/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=2546942021766820177&amp;isPopup=true' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2546942021766820177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/2546942021766820177'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/01/el-patrn-decorator-y-una-aplicacin-real.html' title='El patrón Decorator y una aplicación real'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6uz0hSfL-0M/RZ8lsIJiCII/AAAAAAAAAAM/qYVBCwvLb-I/s72-c/pintor.gif' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116780213651871093</id><published>2007-01-03T01:42:00.000-03:00</published><updated>2007-01-03T03:19:09.176-03:00</updated><title type='text'>Los Templates Engines y su conexión con lo insano</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/582187/loco.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/955466/loco.gif" alt="" border="0" /&gt;&lt;/a&gt;Lo que van a leer en este post puede provocar serios trastornos en su salud mental (y esto para&lt;span style="font-weight: bold;"&gt; programadores web en general&lt;/span&gt;, no sólo de Java).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Para empezar, &lt;span style="font-weight: bold;"&gt;¿Cuál es el objetivo de un Template Engine?&lt;/span&gt;. Lo voy a responder directamente desde la &lt;a href="http://en.wikipedia.org/wiki/Template_processor"&gt;wikipedia&lt;/a&gt;:&lt;br /&gt;&lt;/div&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;"A &lt;/span&gt;&lt;b style="font-style: italic;"&gt;template processor&lt;/b&gt;&lt;span style="font-style: italic;"&gt; (also known as a &lt;/span&gt;&lt;i style="font-style: italic;"&gt;template engine&lt;/i&gt;&lt;span style="font-style: italic;"&gt; or a &lt;/span&gt;&lt;i style="font-style: italic;"&gt;template parser&lt;/i&gt;&lt;span style="font-style: italic;"&gt;) is &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Software" title="Software"&gt;software&lt;/a&gt;&lt;span style="font-style: italic;"&gt; or a &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Software_component" title="Software component"&gt;software component&lt;/a&gt;&lt;span style="font-style: italic;"&gt; that is designed to combine one or more &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Template_%28software_engineering%29" title="Template (software engineering)"&gt;templates&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with a &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Data_model" title="Data model"&gt;data model&lt;/a&gt;&lt;span style="font-style: italic;"&gt; to produce one or more result documents. For purposes of this article, a result document is any kind of formatted output, including &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Documents" title="Documents"&gt;documents&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Web_page" title="Web page"&gt;web pages&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, or &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Source_code" title="Source code"&gt;source code&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, either in whole or in fragments."&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Esta definición es hermosa, y de hecho, acertadísima. El problema de los templates es la forma en la que nos los quieren "&lt;span style="font-style: italic;"&gt;vender&lt;/span&gt;", nos dicen que los diseñadores de sitios web pueden trabajar en paralelo con los programadores y evitar que los diseñadores modifiquen o borren código que tanto esfuerzo costó al programador escribir. Pues yo digo que es una &lt;span style="font-weight: bold;"&gt;MENTIRA&lt;/span&gt;.&lt;br /&gt;Ojo, no reniego de la eficacia de los Templates y de como nos ayudan a modificar nuestras páginas web muchísimo más rápido, de hecho, &lt;a href="http://jakarta.apache.org/velocity/index.html"&gt;Velocity &lt;/a&gt;y &lt;a href="http://freemarker.org/"&gt;FreeMaker &lt;/a&gt;realizan extraordinarios trabajos y son muy útiles.&lt;br /&gt;&lt;br /&gt;Pero absolutamente ninguno soluciona la (muchas veces abismal) distancia entre diseñador/programador. De hecho, les propongo que elijan uno y lean apenas el primer ejemplo del "user guide". Si están trabajando con Struts, seguramente les conviene empezar con &lt;a href="http://struts.apache.org/1.x/struts-tiles/"&gt;Tiles&lt;/a&gt;.&lt;br /&gt;Todos proponen lo mismo, aprender un nuevo lenguaje que resulta más rápido al diseñador  aprender. Claro, en vez de enseñarle al diseñador a hacer &lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;%if(&lt;/span&gt;&lt;span style="font-style: italic;"&gt;condición&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;){&lt;/span&gt;&lt;span style="font-style: italic;"&gt;tareas&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;%&gt;&lt;/span&gt;, podemos enseñarle &lt;span style="font-weight: bold;"&gt;&lt;#if &lt;/span&gt;&lt;span style="font-style: italic;"&gt;condición&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;tareas&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;#if&gt;&lt;/span&gt;.&lt;img align="middle" style="margin: 0pt 0pt 10px 10px;" src="http://photos1.blogger.com/x/blogger/1700/3926/200/632635/devil014.gif" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solución propuesta&lt;/span&gt;: No tratemos de que el diseñador arme una página web y de que por arte de magia nunca existan más problemas con el programador. Tampoco intentaría que un diseñador aprendiera un lenguaje de programación (Java, PHP, Python o cualquiera de templates), francamente, no creo que pueda funcionar. Pero claro, todo depende del diseñador...&lt;br /&gt;Tampoco digo que no se deba usar alguna herramienta de templates, al contrario, estoy convencido de que nos ayuda a la hora de modificar la diagramación o características de nuestro sitio (como por ejemplo, la internacionalización). Y, mi querido amigo/a, &lt;span style="font-weight: bold;"&gt;le estoy pasando más responsabilidad al programador&lt;/span&gt;.&lt;br /&gt;Por mi parte estoy muy contento con &lt;a href="http://struts.apache.org/1.x/struts-tiles/"&gt;&lt;span style="font-weight: bold;"&gt;Tiles&lt;/span&gt; &lt;/a&gt;de Struts, me gusta porque es bastante básico, no necesito más de lo que &lt;span style="font-weight: bold;"&gt;Tiles/JSTL/EL&lt;/span&gt; me ofrece para trabajar. Además podemos armar una buena arquitectura para no reinventar la rueda.&lt;br /&gt;Para el caso de PHP, todavía estoy investigando... Smarty no me convence demasiado...&lt;br /&gt;&lt;br /&gt;Pueden consultar el siguiente &lt;a href="http://www.java-source.net/open-source/template-engines"&gt;link &lt;/a&gt;para ver que otros Templates Engines existen para Java.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116780213651871093?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116780213651871093/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116780213651871093&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116780213651871093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116780213651871093'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2007/01/los-templates-engines-y-su-conexin-con.html' title='Los Templates Engines y su conexión con lo insano'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116734546547961540</id><published>2006-12-28T19:09:00.000-03:00</published><updated>2006-12-28T22:58:00.906-03:00</updated><title type='text'>Buscando la validación inteligente</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/187089/buscando.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/214182/buscando.gif" alt="" border="0" /&gt;&lt;/a&gt;La tarea de validar. No sé a ustedes, pero a mí siempre me ha parecido un trabajo repetitivo y aburrido. Tiene que haber una forma de hacerlo fácil y sin codificar demasiadas cosas (sencillo y rápido, básicamente).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;He buscado diferentes alternativas para realizar todo este proceso y llegué a la siguiente conclusión. No importa si es una página web o Swing, &lt;a href="http://www.apache.org"&gt;Apache &lt;/a&gt;siempre tiene algo para ayudarte.&lt;br /&gt;En realidad, a todo este proceso lo resumo en 2 formas de validar: &lt;span style="font-style: italic;"&gt;A mano&lt;/span&gt; o con &lt;a style="font-style: italic; font-weight: bold;" href="http://jakarta.apache.org/commons/validator/"&gt;Jakarta Commons Validator&lt;/a&gt;. Y esto, en forma independiente a si se está realizando una aplicación de escritorio o web.&lt;br /&gt;Pero esperen, momento, no se pongan locos y vayan a creer que ya se solucionaron todos los problemas, no se puede escapar completamente de codificar algunas cosas a mano. Por ejemplo, siempre es conveniente poner una máscara a los &lt;span style="font-weight: bold;"&gt;JTextField &lt;/span&gt;o utilizar el calendario DHTML de &lt;a href="http://www.dynarch.com/projects/calendar/"&gt;DynaArch&lt;/a&gt; en una página web.&lt;br /&gt;Lo que me gusta de Jakarta Commons es que muy fácil de configurar (XML basado en JavaBeans), muy completo, intuitivo y fácil de extender, lo que hace que sea declarado como un &lt;span style="font-weight: bold;"&gt;Framework &lt;/span&gt;de validación. Lo recomiendo mucho, además si se está programando para la web y se está utilizando algún framework como &lt;span style="font-weight: bold;"&gt;Struts&lt;/span&gt;, sepan que el framework de validación de Struts, es Jakarta Commons Validator. En este útlimo punto no puedo decirles si es mejor o no al entorno de validación de &lt;span style="font-weight: bold;"&gt;Spring&lt;/span&gt;, ya que no lo he analizado a fondo.&lt;br /&gt;Jakarta Commons Validator tiene además, fuentes de validación &lt;span style="font-weight: bold;"&gt;JavaScript&lt;/span&gt;, así que ni siquiera se hace dependiente de validación realizada en el servidor, tranquilamente podemos incorporar estas librerías a nuestra página web y realizar validación (básica, por supuesto) en el Cliente.&lt;br /&gt;&lt;br /&gt;Como adelante de algún próximo post, estoy investigando la posibilidad de incorporar al los JavaBeans, validación por medio de Jakarta, pero sin generar ningún documento XML en forma manual, sino a través de las &lt;span style="font-weight: bold;"&gt;Java annotations&lt;/span&gt;. Esto me suena muy interesante, ya que sólo necesitaríamos (en principio) "marcar" los métodos setters con la validación adecuada.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/225670/extraextra.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/792854/extraextra.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Actualización de último momento!!!&lt;/span&gt;&lt;div style="text-align: justify;"&gt;Siempre sucede, cuando parece que después de tanto esfuerzo cerebral, has tenido una buena &lt;span style="font-weight: bold;"&gt;idea&lt;/span&gt;, te dás cuenta de que alguien te gano de mano y que además, lo ha pensado mejor...&lt;br /&gt;Bueno, resulta que existe un proyecto que intenta realizar validaciones de objetos (no sólo de JavaBeans) a través de annotations.&lt;br /&gt;Se llama OVal y pueden encontrarlo en &lt;a href="http://sourceforge.net/projects/oval/"&gt;sourceforge.org&lt;/a&gt; Parece muy interesante por lo poco que he visto.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;Por último, les dejo algunos links interesantes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Artículo de Sun &lt;a href="http://java.sun.com/developer/JDCTechTips/2001/tt1120.html"&gt;"Validating Numerical Input in a JTextField"&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jakarta.apache.org/commons/validator/"&gt;Jakarta Commons Validator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Artículo de developer.com &lt;a href="http://www.developer.com/java/ent/article.php/10933_3503446_1"&gt;"Dynamic Error Notification and Construction with Java Swing"&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116734546547961540?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116734546547961540/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116734546547961540&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116734546547961540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116734546547961540'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/12/buscando-la-validacin-inteligente.html' title='Buscando la validación inteligente'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116698454007513691</id><published>2006-12-24T15:01:00.000-03:00</published><updated>2006-12-24T15:32:04.850-03:00</updated><title type='text'>A votar por Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/548202/vote.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/939353/vote.gif" alt="" border="0" /&gt;&lt;/a&gt;La revista SYS-CON, en su sección &lt;a href="http://jdj.sys-con.com/general/readerschoice.htm"&gt;Java Developer Journal (JDJ)&lt;/a&gt; está receptando votos para diferentes categorías de productos relacionados con Java, desde el mejor libro hasta el mejor servidor de aplicaciones, pasando por la mejor librería, herramienta de reportes, artículo técnico, IDE, etc.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Lo recomiendo porque es un buen lugar para ponernos al día y ver que otros productos están siendo utilizados en Java. He visto módulos o librerías de clases muy interesantes, aunque pagos, pero también aparecen varias alternativas open-source.&lt;br /&gt;&lt;br /&gt;También pueden ver &lt;a href="http://jdj.sys-con.com/read/171303_3.htm"&gt;aquí &lt;/a&gt;los resultados de la última votación, que salió en este año (2006 todavía), en ella pueden ver a IntelliJ-IDEA como mejor IDE, Bea Web Logic Server como mejor servidor de aplicaciones y a Eclipse como la mejor herramienta de desarrollo en equipo.&lt;br /&gt;&lt;br /&gt;Veremos que resultados se obtienen ahora...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jdj.sys-con.com/general/readerschoice.htm"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/136306/468x60-JDJ.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116698454007513691?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116698454007513691/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116698454007513691&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116698454007513691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116698454007513691'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/12/votar-por-java.html' title='A votar por Java'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116684805815451954</id><published>2006-12-23T01:05:00.000-03:00</published><updated>2007-12-29T20:40:10.165-03:00</updated><title type='text'>JDK 1.6: La clase SwingWorker con ejemplos</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/621999/worker1.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" alt="" src="http://photos1.blogger.com/x/blogger/1700/3926/320/242213/worker1.gif" border="0" /&gt;&lt;/a&gt;Lo prometido es deuda, así que desarrollaré un pequeño ejemplo para demostrar cómo se utiliza la clase &lt;span style="font-weight: bold;"&gt;SwingWorker&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El ejemplo más obvio que se me ocurre es el un JProgressBar que de actualice de forma automática.&lt;br /&gt;Existen dos formas de realizarlo, la tradicional (compartir al hilo el JProgressBar) y la nueva, que es utilizando un modelo de eventos para realizar la actualización. Vamos a usar las dos para marcar diferencias.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/235494/swingWorkerEX1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; width: 274px; cursor: pointer; height: 180px;" alt="" src="http://photos1.blogger.com/x/blogger/1700/3926/320/343319/swingWorkerEX1.jpg" border="0" /&gt;&lt;/a&gt;La imagen de la derecha refleja como se verá el programa andando. Ya pueden intuir que sucederá cuando se haga click en "Start Worker" y en "Cancel Worker". Sin embargo lo importante es cómo se actualizará la barra de progreso y el JLabel de "Completado ...".&lt;br /&gt;Estos dos componentes que se actualizarán tienen aspectos bastante interesantes. El JProgressBar se actualiza en "tiempo real", ya que estará accedido por el SwingWorker directamente (esto es, porque estoy declarando el SwingWorker como "inner class"). En cambio, el JLabel de porcentaje, no será accedido por el SwingWorker, sino que su actualización será parte de un evento. En el siguiente diagrama se puede ver un poco más la interacción de los hilos principales del programa.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/338582/SwingWorkerEX_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://photos1.blogger.com/x/blogger/1700/3926/320/821890/SwingWorkerEX_1.jpg" border="0" /&gt;&lt;/a&gt;Ahora bien, el acceso al JProgressBar no es nada novedoso, de hecho probablemente ya lo hayan hecho antes. Lo novedoso aquí es la aparición del Event Dispatch Thread, quien será el encargado ahora de notificar a un "Listener" que ha cambiado alguna propiedad en el SwingWorker. En nuestro caso, tomaremos una propiedad implícita del SwingWorker llamada &lt;span style="font-weight: bold;"&gt;progress&lt;/span&gt; (de tipo entero, rango 0-100, accedido por setProgress(int) y getProgress()).&lt;br /&gt;&lt;br /&gt;Ahora veamos un poco el código fuente de esto. El siguiente fragmento muestra la creación y llamada a ejecución de un SwingWorker (trabajador):&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://two.xthost.info/ytrio40/tutoriales/swingworker_1.html" height="100" scrolling="yes" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;La clase que implementa SwingWorker se llama &lt;strong&gt;MiWorker&lt;/strong&gt;. Es bastante intuitivo, invocando a &lt;strong&gt;execute();&lt;/strong&gt; se inicia la ejecución del Thread. Pero cuidado, el SwingWorker se ejecutará sólo una vez por más invocaciones que hagamos a &lt;strong&gt;execute()&lt;/strong&gt;.&lt;br /&gt;Quiero hacer más hincapié en la inner class &lt;strong&gt;PropertyChangeListener&lt;/strong&gt;. El hilo de manejo de eventos de Java será el encargado de invocar el método &lt;em&gt;propertyChange&lt;/em&gt; automáticamente cuando el Worker "dispare" una notificación de que ha cambiado alguna propiedad. Esta propiedad puede ser una designada por nosotros (en cuyo caso deberemos invocar a &lt;em&gt;firePropertyChange()&lt;/em&gt; en nuestro código) o podemos usar alguna de las 2 propiedades designadas por defecto (progress y state). En este último caso, el mismo worker dispara la notificación al hilo de eventos para que este notifique (asincrónicamente) a los listeners.&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;iframe src="http://two.xthost.info/ytrio40/tutoriales/swingworker_2.html" height="100" scrolling="yes" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;En este fragmento se describe la inner class MiWorker. Es aquí donde se realiza todo el proceso. Es nuestro hilo de ejecución. Sólo 1 método es estrictamente requerido, el &lt;strong&gt;doInBackGround()&lt;/strong&gt; quien será el encargado de realizar todo el procesamiento. Eso que ven en la declaración de la clase (&lt;string,&gt;) es lo que se conoce como &lt;em&gt;Generics&lt;/em&gt;, una muy buena utilidad incorporada en la versión 1.5 del JDK. Les recomiendo leer más acerca de este tema en &lt;em&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/java/generics/index.html"&gt;The Java Tutorial&lt;/a&gt;&lt;/em&gt;.&lt;br /&gt;Si se fijan, estoy accediendo en forma directa al JProgressBar (ojo, esto es posible porque MiWorker es una inner class), sin embargo, no accedo al JLabel. El cambio de este componente se dará de forma asíncrona cuando se invoca una y otra vez a setProgress. Esto está bueno porque no necesariamente se notificará al &lt;em&gt;Listener&lt;/em&gt; una y otra vez. Por ejemplo, si se ejecuta muchas veces se notificará el progreso 1, el 2,3,4 pasarán de largo y se notificará el 5, etc..&lt;br /&gt;&lt;br /&gt;Ya no puedo extenderme más, así que espero que les sirva, les dejo los fuentes en el siguiente link: &lt;a href="http://two.xthost.info/ytrio40/tutoriales/worker.rar"&gt;worker.rar (6Kb)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;em&gt;Saludos PF&lt;/em&gt;&lt;/span&gt;&lt;/string,&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116684805815451954?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116684805815451954/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116684805815451954&amp;isPopup=true' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116684805815451954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116684805815451954'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/12/jdk-16-la-clase-swingworker-con.html' title='JDK 1.6: La clase SwingWorker con ejemplos'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116649095437073087</id><published>2006-12-18T21:43:00.000-03:00</published><updated>2006-12-20T01:48:57.273-03:00</updated><title type='text'>JDK 1.6: La clase SwingWorker</title><content type='html'>&lt;div style="TEXT-ALIGN: justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/497234/worker.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://photos1.blogger.com/x/blogger/1700/3926/320/310729/worker.gif" border="0" /&gt;&lt;/a&gt;En principio, esta clase no es completamente nueva (de hecho, estaba creada de manera separada al JDK -&lt;a href="http://www.programacion.net/cursos/swing/example-swing/SwingWorker.java"&gt;aquí pueden ver la antigua versión&lt;/a&gt;-). Pero en la última versión del JDK, ya la encontramos como parte integrante del paquete &lt;span style="FONT-WEIGHT: bold"&gt;javax.swing&lt;/span&gt;. El objetivo de esta clase es la de implementar en un hilo/thread separado, cualquier funcionalidad que pudiera requerir mucho consumo de tiempo. Así por ejemplo, podríamos tener un &lt;span style="FONT-STYLE: italic"&gt;worker&lt;/span&gt; que cargara imágenes para crear una animación dentro de un applet, o un &lt;span style="FONT-STYLE: italic"&gt;worker&lt;/span&gt; que actualizara componentes en pantalla.&lt;br /&gt;&lt;/div&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;div style="TEXT-ALIGN: justify"&gt;Es sumamente útil para crear aplicaciones de escritorio que no se queden "tildadas" mientras el programa realiza alguna operación de larga duración.&lt;br /&gt;Describiré en este post cómo funciona esta clase. En el próximo mostraré un ejemplo andando:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/692029/SwingWorker.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger/1700/3926/320/574699/SwingWorker.jpg" border="0" /&gt;&lt;/a&gt;La clase SwingWorker es una clase abstracta, lo que significa que para usarla, deberemos o bien, crear una nueva clase que herede funcionalidad o crear una clase interna (generalmente, el más usado y recomendable por el acceso que nos da al resto de los componentes visuales). La figura nos muestra también, que esta clase no extiende de ninguna otra, sino que implementa 3 interfaces. Evidentemente la interfaz &lt;span style="FONT-STYLE: italic"&gt;Runnable&lt;/span&gt; sirve para que esta clase se comporte como un hilo de ejecución. La interfaz Future sirve para retornar un resultado de alguna computación asincrónica (es decir, esperar hasta que se complete una operación y se pueda retornar el resultado). Por último, la interfaz &lt;span style="FONT-STYLE: italic"&gt;RunnableFuture&lt;/span&gt; sirve para asociar un &lt;span style="FONT-STYLE: italic"&gt;Future&lt;/span&gt; con el método &lt;span style="FONT-WEIGHT: bold"&gt;run().&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;/span&gt;&lt;br /&gt;No hay que olvidar que un &lt;span style="FONT-WEIGHT: bold"&gt;SwingWorker&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold"&gt;es un hilo de ejecución&lt;/span&gt;. Esto significa que deberemos tener el mismo cuidado que tendríamos al escribir cualquier hilo de ejecución.&lt;br /&gt;Sin embargo, hay ciertas propiedades que hacen de esta clase, un poco más especial. Por ejemplo, un Worker se ejecuta sólo una vez. Por más de que llamemos al método de ejecución una y otra vez, esto no hará que se ejecute como un hilo de ejecución aparte.&lt;br /&gt;Además, el &lt;span style="FONT-WEIGHT: bold"&gt;SwingWorker&lt;/span&gt;, puede interactuar con el resto de la aplicación por medio de &lt;span style="FONT-WEIGHT: bold"&gt;eventos&lt;/span&gt;. Esto es importante, porque pasamos responsabilidad al &lt;span style="FONT-STYLE: italic"&gt;Event Dispatch Thread&lt;/span&gt; de Java (este hilo es cargado automáticamente por cualquier aplicación visual de Java y es el encargado de manejar todos loa eventos visuales que se produzcan).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0)font-size:130%;" &gt;Funcionamiento&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bien, como la clase SwingWorker es abstracta, significa que deberemos sobrescribir algunos de sus métodos.&lt;br /&gt;El principal y más importante de estos métodos es el &lt;span style="FONT-WEIGHT: bold"&gt;T doInBackGround() throws Exception&lt;/span&gt; Recuerden que la T proviene de &lt;span style="FONT-STYLE: italic"&gt;Generics&lt;/span&gt; y simboliza un tipo de datos. Podrían considerar a este método como el &lt;span style="FONT-STYLE: italic"&gt;run()&lt;/span&gt; de la clase Thread. El objetivo de este método es el de ejecutar todas las operaciones de alto costo de tiempo. En definitiva, aquí deberemos escribir todo el procesamiento.&lt;br /&gt;Existe otro método necesario, &lt;span style="FONT-WEIGHT: bold"&gt;void done()&lt;/span&gt; Este método será invocado por el &lt;span style="FONT-STYLE: italic"&gt;Event Dispatch Thread&lt;/span&gt; automáticamente cuando &lt;span style="FONT-WEIGHT: bold"&gt;doInBackGround()&lt;/span&gt; termine su ejecución. No es un método de finalización en sí, pero nos sirve para realizar acciones de completado de nuestro worker.&lt;br /&gt;Por último, existe el método &lt;span style="FONT-WEIGHT: bold"&gt;public final void execute()&lt;/span&gt; Este método sirve para dar el puntapié inicial a nuestro worker. Si lo comparamos con la clase Thread, sería el start() de nuestro hilo.&lt;br /&gt;&lt;br /&gt;En el siguiente gráfico, se ve en líneas generales el contexto de un worker. Los métodos publish() y process() sirven para interactuar en forma asíncrona con el resto de la aplicación (aplicando una versión del patrón publicar-suscribir)&lt;br /&gt;En el próximo post, mostraré un ejemplo concreto.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/767746/SwingWorker1.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 393px; CURSOR: pointer; HEIGHT: 196px; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger/1700/3926/320/502351/SwingWorker1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,0,153); FONT-STYLE: italicfont-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="TEXT-ALIGN: justify"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116649095437073087?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116649095437073087/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116649095437073087&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116649095437073087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116649095437073087'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/12/jdk-16-la-clase-swingworker.html' title='JDK 1.6: La clase SwingWorker'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116622099786663564</id><published>2006-12-15T19:00:00.000-03:00</published><updated>2006-12-15T19:48:51.803-03:00</updated><title type='text'>JDK 1.6: Ordenando por columnas un JTable</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/960106/sorting.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/640057/sorting.gif" alt="" border="0" /&gt;&lt;/a&gt;Para los que no se enteraron o los que no recuerdan, cuando queríamos tener un JTable que se pudiera ordenar si el usuario presionaba sobre la cabecera de una columna, teníamos que  (en líneas generales):&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Captar el evento del mouse cuando se hacía click en la cabecera de la columna.&lt;/li&gt;&lt;li&gt;Crear un TableModel apropiado que pudiera ordenar los elementos.&lt;/li&gt;&lt;li&gt;Sobrescribir los métodos del TableModel para que fuera consecuente con nuestros deseos.&lt;/li&gt;&lt;li&gt;Rezar tres oraciones para que lo hubiéramos escrito bien.&lt;/li&gt;&lt;/ul&gt;El procedimiento para hacerlo todavía lo pueden ver en &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#sorting"&gt;The Java Tutorial&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Bueno, el sufrimiento para ordenar un JTable ha terminado!!!!&lt;br /&gt;En la última versión de Java, uno de las nuevas cualidades de los JTable, es que se pueden ordenar con muy poco trabajo, tan poco, que se reduce a &lt;span style="font-weight: bold;"&gt;una sola línea de código&lt;/span&gt; para ordenaciones simples. Por ejemplo:&lt;br /&gt;&lt;br /&gt;   &lt;span style=";font-family:arial;font-size:85%;"  &gt;  jTable = new JTable(datos, cols);&lt;br /&gt;    &lt;span style="font-weight: bold;"&gt; jTable.setAutoCreateRowSorter(true);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La primera línea es conocida por todos, con ella creamos un nuevo objeto "Grilla". La novedad viene en la seguna línea, este método fue agregado en esta nueva versión de Java y permite que se cree automáticamente un objeto (interno) para la ordenación de la grilla.&lt;br /&gt;&lt;br /&gt;Si se necesitara hacer algo más personalizado, Java nos brinda nuevos objetos para la ordenación, entre ellos: &lt;span style="font-weight: bold;"&gt;RowSorter&lt;/span&gt; (abstracta) y &lt;span style="font-weight: bold;"&gt;TableRowSorter&lt;/span&gt; (implementación de RowSorter).&lt;br /&gt;Lo único que deberemos tener en cuenta es en el proceso de selección de filas. Debido a que el índice de una fila seleccionada se basa en el índice "visual" y no en el índice del modelo, se necesita realizar una "conversión" de índices. Pero no se pongan nerviosos, ya que esta conversión la lleva a cabo el mismo objeto JTable, simplemente invocando al método &lt;span style="font-weight: bold; font-style: italic;"&gt;convertoRowIndexToModel(int index)&lt;/span&gt;&lt;span style="font-style: italic;"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Seguramente muchos vamos a disfrutar esta nueva opción del JDK 1.6. Seguiré investigando un poco más acerca de la nuevas funcionalidades de esta versión y después les cuento.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116622099786663564?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116622099786663564/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116622099786663564&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116622099786663564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116622099786663564'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/12/jdk-16-ordenando-por-columnas-un.html' title='JDK 1.6: Ordenando por columnas un JTable'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116596549808444884</id><published>2006-12-12T19:45:00.000-03:00</published><updated>2006-12-12T20:54:25.900-03:00</updated><title type='text'>Sun se calza el traje de Papá Noel y te regala...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 134px; height: 83px;" src="http://photos1.blogger.com/x/blogger/1700/3926/1600/219612/navidad.gif" alt="" border="0" /&gt;Ayer finalmente ha salido la nueva versión del JDK (1.6) de Java (&lt;span style="font-weight: bold;"&gt;Mustang&lt;/span&gt;). Si han estado visitando los últimos meses la página oficial de Java (&lt;a href="http://www.java.sun.com"&gt;www.java.sun.com&lt;/a&gt;), ya habrán visto varios artículos relacionados con esta nueva versión. De todos modos, voy a listar algunas de las novedades que se trae esta nueva versión. En posteriores artículos (cuando me ponga a estudiarlo a fondo), detallaré más sobre las nuevas cualidades.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);font-size:130%;" &gt;Integración con Servicios Web:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ahora tendremos una nueva API para firmas digitales XML.&lt;/li&gt;&lt;li&gt;APIs para JAX-WS integrada.&lt;/li&gt;&lt;li&gt;Nuevo soporte para JAXB 2.0 (Java Architecture for XML Binding).&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);font-size:130%;" &gt;Soporte para lenguajes de scripting:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta parte es una de las más interesantes, básicamente, esta API nos permitirá acceder y controlar objetos de Java desde un lenguaje de scripting, crear contenido web y embeber un ambiente de scripting. Esto no significa que vamos a poder escribir código JavaScript dentro de Java en forma nativa, pero sí tendremos objetos que nos harán este trabajo un poco más fácil, por ejemplo, vamos a poder registrar un objeto de Java contra un objeto que nos permitirá ejecutar una porción de código Javascript. Este código podrá acceder entonces al objeto de Java y manipularlo. Sobre este tema detallaré en el próximo artículo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);font-size:130%;" &gt;En cuanto a Bases de Datos:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Soporte para &lt;span style="font-weight: bold;"&gt;JDBC 4.0&lt;/span&gt;. Esto implica soporte para XML, SQL 2003, mejora en el manejo de pooling de conexiones, mejora en el manejo de excepciones y varias mejoras adicionales.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;font-size:130%;" &gt;En cuanto al desarrollo para aplicaciones de escritorio:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mejoras en el Look &amp; Feel.&lt;/li&gt;&lt;li&gt;(Dicen en el sitio oficial) Mejoras en el desempeño y performance.&lt;/li&gt;&lt;li&gt;Mejoras con respecto a la internacionalización.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;POR FIN!!!&lt;/span&gt;: Los &lt;span style="font-weight: bold;"&gt;JTable &lt;/span&gt;ahora se pueden filtrar y ordenar.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;("emulado" de .NET)&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;SwingWorker&lt;/span&gt;: bueno, eso de "emulado=copiado" es relativo, si bien se encuentra ya implementado en .NET hace rato, todo viene de un artículo publicado en 1998 &lt;a href="http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html"&gt;&lt;span style="font-weight: bold;"&gt;"Threads and Swing"&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116596549808444884?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116596549808444884/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116596549808444884&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116596549808444884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116596549808444884'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/12/sun-se-calza-el-traje-de-pap-noel-y-te.html' title='Sun se calza el traje de Papá Noel y te regala...'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116561663062361429</id><published>2006-12-08T18:56:00.000-03:00</published><updated>2006-12-08T19:32:15.870-03:00</updated><title type='text'>Bienvenidos los videos tutoriales</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/536543/tv.gif" alt="" border="0" /&gt;¿Cansado de los tutoriales interminables? ¿Sientes que no tienes la voluntad necesaria para ponerte a leer páginas y páginas de información y ejemplos de Java? ¿Necesitado de un poco más de dinamismo?&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Bien, entonces quizá te sirva lo siguiente. Creo que la mayoría ya conoce a &lt;a href="http://www.youtube.com/"&gt;YouTube &lt;/a&gt;(considerado el mejor invento del 2005).&lt;br /&gt;Aquí van a poder encontrar varios tutoriales de Java, realizados por una empresa española llamada&lt;a href="http://www.consultoriajava.com/"&gt; Consultoría Java&lt;/a&gt;, con complejidades que varían desde cómo realizar el "Hola mundo" hasta conexión a Bases de Datos.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Aquí van algunos video tutoriales:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=L22Iy4hWvys"&gt;Hola Mundo en Java&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=xlcaBvyLBwc"&gt;Acceso a BBDD en Java (&lt;span style="font-weight: bold;"&gt;RECOMENDADO&lt;/span&gt;)&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=bACxc1RAed4"&gt;Conoce mejor un paquete: java.lang&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=wHW4oiL2cbI"&gt;Conoce mejor un paquete: java.util&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=2gWTVxe31g8"&gt;Gestión de Excepciones con try catch throws (&lt;span style="font-weight: bold;"&gt;RECOMENDADO&lt;/span&gt;)&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Para los interesados en otros lenguajes, hay también tutoriales de PHP y Delphi.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116561663062361429?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116561663062361429/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116561663062361429&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116561663062361429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116561663062361429'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/12/bienvenidos-los-videos-tutoriales.html' title='Bienvenidos los videos tutoriales'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116484763341713935</id><published>2006-11-29T21:24:00.000-03:00</published><updated>2007-12-29T20:34:10.608-03:00</updated><title type='text'>Post Nro 13 - Java NO genera ejecutables (.EXE)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 86px; height: 86px;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/759975/mumie.gif" alt="" border="0" /&gt;Bienvenidos al post nro. &lt;span style="color: rgb(255, 0, 0); font-weight: bold;font-family:georgia;" &gt;13&lt;/span&gt;. En realidad el número no me provoca ningún tipo de sentimiento en especial, lo que me preocupaba es que ya pasó una semana desde el último post y no estaba para nada creativo.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Este tema no lo daba en ningún curso hasta que un alumno me lo hizo notar (gracias &lt;span style="font-weight: bold;"&gt;Fede&lt;/span&gt;, alias &lt;span style="font-weight: bold;"&gt;Kal-El&lt;/span&gt;) y comprendí la importancia que tiene, especialmente en los cursos iniciales. El objetivo era saber si se podía correr una aplicación Java en un pendrive.&lt;br /&gt;Bien, todo parte de que Java no genera ejecutables de ningún tipo, recuerden que lo único generado es código intermedio (&lt;span style="font-weight: bold;"&gt;bytecode&lt;/span&gt;), es decir, archivo con extensión &lt;span style="font-weight: bold;"&gt;.class&lt;/span&gt;.&lt;br /&gt;Existen 2 formas de hacer correr una aplicación Java en una máquina distinta en la que se desarrolló, pero antes, sea cual sea la forma en que la despliegue, necesito:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Tener acceso al JRE: hago hincapié en que no dije "instalar", basta con tener acceso a un directorio que contenga el JRE, más precisamente, al archivo java.exe (en windows) o java (en linux).&lt;/li&gt;&lt;li&gt;Empaquetar mi aplicación en uno o varios JAR (Java ARchive, más detalles en próximos posts). Si bien este punto no es necesario, es muy recomendable.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 51, 0); font-weight: bold;"&gt;Forma 1 - Chapada a la antigua&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta primer forma consiste en correr la aplicación por medio de la línea de comandos (antiguo DOS). Esta forma es más habitual para los usuarios Linux. Consiste en lo siguiente:&lt;br /&gt;Si nuestra aplicación se llama &lt;span style="font-weight: bold;"&gt;MiPrograma.jar&lt;/span&gt; y quiero correrla desde la línea de comandos, necesitaré escribir lo siguiente:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;C:&gt;\&lt;directorio_de_app&gt;\&lt;/directorio_de_app&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;java -jar MiPrograma.jar&lt;/span&gt;&lt;br /&gt;Esto hará que se ejecute la aplicación (si está bien empaquetada). Este comando se puede escribir en un archivo con extensión &lt;span style="font-weight: bold;"&gt;.bat&lt;/span&gt;/&lt;span style="font-weight: bold;"&gt;.sh&lt;/span&gt; para poder tener un acceso directo y hacerlo un poco más visual.&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);font-size:130%;" &gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Forma 2 - Creación a mano de un archivo .exe&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Podríamos hacer uso de otro lenguaje que sí genere código ejecutable (VB, C, C++, Pascal, etc.) para que se invoque automáticamente a la línea de comandos y se ejecute la aplicación, o, podríamos utilizar un programa que lo haga por nosotros.&lt;br /&gt;De este tipo de programas hay varios, pero me interesa uno en especial, aunque todavía es beta, tiene muy buen funcionamiento y me ha servido mucho, se llama &lt;span style="font-weight: bold;"&gt;JSmooth&lt;/span&gt; y pueden descargarlo del siguiente &lt;a href="http://jsmooth.sourceforge.net/"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;El primer proyecto que se arma con este programa suele ser un poco complicado, por eso voy a dejar un pequeño tutorial de cómo usarlo.&lt;br /&gt;Lo que tiene de bueno este programa es que se puede generar un ejecutable que contenga a la aplicación o que utilice un jar serparado, además, se puede configurar ampliamente la máquina virtual de Java, incluso se puede añadir mensajes específicos al usuario para que la instale.&lt;br /&gt;Como si eso fuera poco, es posible incorporar todo el JRE de Java para que la aplicación la utilice accediendo a un directorio específico. Eso está muy bueno, ya que pueden prescindir de obligar al usuario que instale el JRE, directamente lo podemos distribuir con nuestra aplicación.&lt;br /&gt;&lt;br /&gt;De esta manera, podemos crear un .exe (entorno Windows) sin muchos problemas, incluso podemos correr la aplicación directamente desde un CD o un pendrive. Muy recomendable.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Links:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tutorial: &lt;a href="http://two.xthost.info/ytrio40/tutoriales/JSmooth.pdf"&gt;(PDF)&lt;/a&gt;&lt;br /&gt;JSmooth: &lt;a href="http://jsmooth.sourceforge.net/"&gt;http://jsmooth.sourceforge.net/&lt;/a&gt;&lt;br /&gt;Launch4j: &lt;a href="http://launch4j.sourceforge.net/"&gt;http://launch4j.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116484763341713935?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116484763341713935/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116484763341713935&amp;isPopup=true' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116484763341713935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116484763341713935'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/11/post-nro-13-java-no-genera-ejecutables.html' title='Post Nro 13 - Java NO genera ejecutables (.EXE)'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116423292316630667</id><published>2006-11-22T18:37:00.000-03:00</published><updated>2007-05-05T00:24:48.968-03:00</updated><title type='text'>Internationalization</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1700/3926/1600/879283/mundo2.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 74px; height: 74px;" src="http://photos1.blogger.com/x/blogger/1700/3926/200/43062/mundo2.gif" alt="" border="0" /&gt;&lt;/a&gt;Para explicarlo concisamente, creo que lo mejor es responder una serie de preguntas, después, les dejo el ejemplo para que lo bajen y analicen.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(102, 0, 0);"&gt;&lt;br /&gt;¿Qué es &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 0);font-size:130%;" &gt;internationalization&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(102, 0, 0);"&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cuando desarrollamos, aunque sea el sistema para el videoclub de la esquina, siempre es más conveniente que tratemos de hacerlo lo más prolijo posible, de manera de que no debamos gastar demasiado tiempo en "mantenimiento" del código (por no decir arreglar lo que hicimos mal). La característica de &lt;span style="font-weight: bold;"&gt;internacionalización &lt;/span&gt;de Java nos ayuda bastante a la hora de mostrar y de recibir datos en nuestras pantallas (J2SE - J2EE indistintamente).&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;¿Por qué y cuándo debería usarlo?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En la documentación oficial y en la mayoría de los tutoriales, vamos a encontrar que deberíamos utilizar &lt;span style="font-weight: bold;"&gt;internationalization&lt;/span&gt; cuando nuestra aplicación va a ser utilizada por personas de diferentes países o culturas (monedas y forma de representar métricas por ejemplo).&lt;br /&gt;Lo cierto es que va mucho más lejos la cosa. Pienso que deberíamos utilizarla por el simple hecho de que nos va a ser más simple en un futuro agregar esta condición (por más de que no esté planteado desde el principio del desarrollo), además, recuerden esta regla:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;LOS REQUERIMIENTOS VAN A CAMBIAR!!!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Se los aseguro, por experiencia propia, lo que hoy llaman "Representante", mañana lo van a llamar "Agente", ¿por qué? van a preguntar Uds., la respuesta será: "Porqué nuestro nuevo consultor de imagen dijo que será cool...".&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/1700/3926/200/maniac.0.gif" alt="" align="middle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;font-size:130%;" &gt;¿Dónde debería usarlo?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta pregunta es de más fácil respuesta. Como regla general, nunca deberíamos tener una salida (ya sea por consola, por objeto swing o por navegador) que no sea "internacionalizada". Tratar de no dar mensajes al usuario del estilo &lt;span style="font-style: italic;"&gt;System.out.println("Cantidad de dinero en la cuenta:  $"+dinero);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;font-size:130%;" &gt;¿Cómo se usa?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En el siguiente gráfico se los muestro:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 412px; height: 128px;" src="http://photos1.blogger.com/x/blogger/1700/3926/320/707455/interna.png" alt="" border="0" /&gt;&lt;br /&gt;Resulta que por cada idioma que queramos incorporar a nuestra aplicación, necesitaremos un archivo .properties donde definiremos las etiquetas y mensajes en el idioma adecuado. Ahora, deben tener en cuenta el nombre de los archivos. Donde dice "MessageBoundle" puede ir lo que Uds. quieran, pero por cada definición de lengua y país, deberá especificar en el nombre del archivo estas características (por ejemplo &lt;span style="font-weight: bold;"&gt;"es" &lt;/span&gt;de español en &lt;span style="font-weight: bold;"&gt;"AR" &lt;/span&gt;por Argentina).&lt;br /&gt;De esta manera, cuando quieran incorporar otra lengua a la aplicación, lo único que deberemos definir será un nuevo archivo de propiedades.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;font-size:130%;" &gt;¿Qué son los Resource Bundles y Locales?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Básicamente, tenemos en Java 2 Clases: &lt;span style="font-weight: bold;"&gt;ResourceBundle &lt;/span&gt;y &lt;span style="font-weight: bold;"&gt;Locale&lt;/span&gt;. La primera clase representa un recurso externo, es decir, un archivo de propiedades.&lt;br /&gt;La segunda, identifica un lenguaje y un país en particular, su constructor recibe 2 parámetros: el primero es un String que indica el lenguaje, y el segundo, es otro string que indica el país.&lt;br /&gt;&lt;br /&gt;La idea es crear un objeto del tipo Locale para representar el país y lengua a utilizar, y con este objeto, instanciar un ResourceBundle, que nos servirá para obtener del archivo de propiedades, cada una de las etiquetas respectivas.&lt;br /&gt;&lt;br /&gt;Su uso es bastante sencillo, les dejo el código fuente para que lo prueben, allí encontrarán un poco más de detalle.&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:130%;" &gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Links:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Fuentes: &lt;a href="http://three.fsphost.com/ytrio/tutoriales/Internacionalizacion.rar"&gt;download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;font-size:130%;" &gt;Algunos artículos de utilidad:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Artículo: &lt;a href="http://java.sun.com/products/jfc/tsc/articles/InputMethod/inputmethod.html"&gt;"Using imput methods on the Java Platform"&lt;/a&gt;&lt;br /&gt;Artículo: &lt;a href="http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/"&gt;"Java Internationalization: Localization with ResourceBundles"&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116423292316630667?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116423292316630667/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116423292316630667&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116423292316630667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116423292316630667'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/11/internationalization.html' title='Internationalization'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116371937876475561</id><published>2006-11-16T19:37:00.000-03:00</published><updated>2007-11-20T18:27:24.940-03:00</updated><title type='text'>Experimentando con Java Annotations</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 80px; height: 66px;" src="http://photos1.blogger.com/blogger/1700/3926/320/professor.0.gif" alt="" border="0" /&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;Metadatos, (¿no lo hacíamos con &lt;span style="font-weight: bold;"&gt;XDoclet&lt;/span&gt;?) . Si, es cierto, pero ahora, con la última versión de Java (&lt;span style="font-weight: bold;"&gt;Tiger&lt;/span&gt;), tenemos la posibilidad de darle más flexibilidad a nuestro código, y con un soporte directo de la máquina virtual, sin necesidad de toda una librería externa (esta parte no es del todo cierta).&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt; Básicamente, Java da soporte directo para muy pocas annotations, pero también da la posibilidad de crear nuestras propias anotaciones. Es esto lo que voy a hacer para demostrar como funciona.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;&lt;br /&gt;Como el objetivo de este blog no es hacer tutoriales interminables, y además, estamos limitados en espacio, me tome la libertad de hacer un pequeñísimo ultra mini tutorial para que vean en detalle cómo desarrollar una aplicación orientados a los atributos.&lt;br /&gt;&lt;br /&gt;El tutorial es muy corto, así que no tienen razón para no leerlo. Además, les dejo los fuentes de la aplicación (desarrollada con Eclipse).&lt;br /&gt;&lt;br /&gt;Espero que les sirva&lt;br /&gt;&lt;a href="http://two.xthost.info/ytrio40/tutoriales/Metadatos.pdf"&gt;Puedes bajar el tutorial aquí (PDF)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://two.xthost.info/ytrio40/tutoriales/jAnnotations.rar"&gt;Puedes bajar los fuentes aquí (RAR)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116371937876475561?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116371937876475561/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116371937876475561&amp;isPopup=true' title='8 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116371937876475561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116371937876475561'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/11/experimentando-con-java-annotations.html' title='Experimentando con Java Annotations'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116346327242002209</id><published>2006-11-13T20:31:00.000-03:00</published><updated>2006-11-22T22:01:15.586-03:00</updated><title type='text'>Finalmente Java es Open Source</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 65px; height: 61px;" src="http://photos1.blogger.com/blogger/1700/3926/320/jumpfrog.gif" alt="" border="0" /&gt;Si, es cierto, ya nada de rumores ni de noticias sin fundamento. Finalmente, después de tanto tiempo y de tantas idas y vueltas, Java es &lt;span style="font-weight: bold;"&gt;Open-Source. &lt;/span&gt;¿Que más tenemos para decir? Ah, si los detalles:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Por ahora, sólo se libera la VM Hotspot y javac. Todo java 6 (Mustang), a esperar hasta el 2007.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sun está apostando mucho a su proyecto GlassFish, un servidor de aplicaciones gratuito (¿Tendrá miedo &lt;span style="font-weight: bold;"&gt;JBoss&lt;/span&gt;?).&lt;/li&gt;&lt;li&gt;El "gobierno" de las especificaciones sigue bajo el mando de la JCP (Java Community Process). Este punto es importante por las implicancias que trae y la obvia pregunta (¿es libre?)&lt;/li&gt;&lt;li&gt;El código de Java se libera utilizando la licencia GPL v2 con una pequeña excepción: &lt;span style="font-weight: bold;"&gt;El código generado con Java no necesita ser GPL&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;En la &lt;a href="http://www.java.sun.com"&gt;página principal de java&lt;/a&gt; se pueden ver más detalles y las opiniones de todos los personajes de siempre, Richard Satllman, Tim O'Reilly y por supuesto, (Todo el mundo a hacer una reverencia):&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;img style="border: 0pt none ; cursor: pointer;" src="http://photos1.blogger.com/blogger/1700/3926/320/pray.gif" alt="" align="middle" border="0" /&gt;&lt;span style="font-weight: bold;"&gt; &lt;span style=";font-family:verdana;font-size:130%;"  &gt;James Gosling&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:130%;"  &gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116346327242002209?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116346327242002209/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116346327242002209&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116346327242002209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116346327242002209'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/11/finalmente-java-es-open-source.html' title='Finalmente Java es Open Source'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116318741616789879</id><published>2006-11-10T16:20:00.000-03:00</published><updated>2006-11-11T19:48:57.013-03:00</updated><title type='text'>Algunas herramientas para comenzar un proyecto</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1700/3926/1600/trabajo_stress.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/1700/3926/320/trabajo_stress.gif" alt="" border="0" /&gt;&lt;/a&gt;Bien, quiero dar una lista de herramientas que me han sido de utilidad para iniciar proyectos y mantenerlos. Por supuesto que siempre depende de los gustos y comodidad de cada profesional. Y además es recomendable, que &lt;span style="font-weight: bold;"&gt;no&lt;/span&gt; sigamos el listado como una receta de cocina ni como una obligación, mucho menos seguirlo como una lista exhaustiva.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CVS / Subversion:&lt;/span&gt; Son muy parecidos y cumplen con el mismo objetivo. Su concepto es tan simple que hace dudar acerca de su funcionalidad final. Esto pensaba yo hasta que comencé a utilizarlo. Ya sea en un pequeño proyecto de un sólo programador, o en un entorno de múltiples desarrolladores trabajando en el mismo proyecto, una herramienta que nos permita "versionar" nuestro código, es algo impagable. Generalmente CVS es una herramienta de consola (un poco complicado de configurar al principio), por eso les recomiendo una versión para Windows (&lt;a href="http://www.march-hare.com/cvspro/es.asp"&gt;CVSNT&lt;/a&gt;). Personalmente los he probado a los dos y me quedo con &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; (aunque la página muestra un warning para Windows, nunca me dio ningún problema). Por supuesto, además del servidor de versiones, necesitaremos algún plugin para poder acceder, como eclipse es mi IDE favorito hasta el momento, les recomiendo el plugin &lt;a href="http://subclipse.tigris.org/"&gt;Subclipse&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Log4J / Jakarta Commons Logging:&lt;/span&gt; Los &lt;span style="font-style: italic;"&gt;System.out.println("...");&lt;/span&gt; son útiles pero únicamente en el instante. Necesitamos algo un poco más poderoso para poder monitorear (=instrumentar) nuestra aplicación, especialmente cuando ya está en producción. Popularizada por la mayoría de las librerías y herramientas open-source, &lt;a href="http://logging.apache.org/log4j/docs/"&gt;Log4J &lt;/a&gt;se ha convertido en una de las mejores herramientas para hacerlo, aún más utilizada que las librerías del propio JDK. Inclusive, ha trascendido los límites de Java y existen versiones para PHP, .NET, C, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Control de Normas:&lt;/span&gt; alguna herramienta que pueda analizar nuestro código según estándares y que además pueda sugerirnos mejoras, es bastante útil para no cometer demasiados errores que perjudiquen la performance de nuestra aplicación (ver el último post).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;XDoclet:&lt;/span&gt; definido como "attribute oriented programming", nos permite incorporar dentro de nuestro código, metadatos (dentro de líneas de comentario), con la finalidad de que, utilizando Ant, podamos generar nuevos artefactos. Yo lo he utilizado para generar los archivos de configuración de Hibernate, y funciona bastante bien. &lt;a href="http://xdoclet.sourceforge.net/xdoclet/index.html"&gt;Aquí pueden ver la página principal&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Apache JMeter: &lt;/span&gt;esta herramienta nos permite realizar pruebas funcionales y mediciones de performance. Pueden ver su página &lt;a href="http://jakarta.apache.org/jmeter/index.html"&gt;haciendo click aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Herramienta de modelado y documentación:&lt;/span&gt; básicamente, alguna herramienta que nos permita modelar en UML. Hay muchas alternativas, yo he probado el clásico de clásicos Rational y varios con versiones comunitarias. De estos últimos me ha gustado mucho el &lt;a href="http://www.visual-paradigm.com/"&gt;VisualParadigm &lt;/a&gt;y debo decir que el &lt;a href="http://www.gentleware.com/"&gt;Poseidón &lt;/a&gt;me ha hecho perder varias semanas de trabajo (no sé como estará en la última versión).&lt;br /&gt;&lt;br /&gt;No considero cada una de estas herramientas imprescindibles, pero debo decir que nuestro objetivo debe ser el de "optimizar el tiempo". Por ejemplo, si consideran que son más rápidos en escribir el xml de hibernate antes de aprender XDoclet, escriban xml. Pero analicen un poco antes de comenzar el proyecto, ¿cómo puedo optimizar el tiempo de desarrollo?, ¿existirá alguna herramienta que lo haga por mí?, etc..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116318741616789879?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116318741616789879/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116318741616789879&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116318741616789879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116318741616789879'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/11/algunas-herramientas-para-comenzar-un.html' title='Algunas herramientas para comenzar un proyecto'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116301589256545082</id><published>2006-11-08T16:43:00.000-03:00</published><updated>2006-11-08T16:58:12.573-03:00</updated><title type='text'>[OFF Topic] Gracias Cordoba.net</title><content type='html'>&lt;div style="text-align: justify;"&gt;Quiero agradecer a uno de los sitios líderes de mi ciudad, Córdoba (Argentina) por recomendar este humilde blog.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Muchas Gracias &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.cordoba.net/canal.asp?idCanal=38"&gt;Cordoba.net&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; !!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1700/3926/1600/cordoba_net.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/1700/3926/320/cordoba_net.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116301589256545082?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116301589256545082/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116301589256545082&amp;isPopup=true' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116301589256545082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116301589256545082'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/11/off-topic-gracias-cordobanet.html' title='[OFF Topic] Gracias Cordoba.net'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35311316.post-116270208132562141</id><published>2006-11-05T01:12:00.000-03:00</published><updated>2006-11-05T03:34:54.856-03:00</updated><title type='text'>¿Quién dijo que yo escribía buen código?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1700/3926/1600/programador.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/1700/3926/320/programador.gif" alt="" border="0" /&gt;&lt;/a&gt;En realidad, esa no fue la primera pregunta, sino ¿estaré escribiendo buen código?. Sin tratar de apelar a la humildad sino al conocimiento de uno mismo, la respuesta fue un rotundo "no creo...". Ahora bien, sé que he leído sobre nomenclatura en articulos, pdf, blogs y siempre he tratado de atenerme a las reglas, pero aún así sé que se puede mejorar.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Bien, existen varias herramientas de análisis de código, pero detallaré sobre una en especial, llamada "&lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt;". Esta herramienta se encarga de analizar el código fuente y tratar de encontrar problemas no sólo de nomenclatura, sino además de optimización, como por ejemplo, las clásicas variables declaradas y nunca usadas, líneas de debug del tipo "System.out" sin borrar, parámetros de sólo lectura que podrían ser declarados finales, buen uso del StringBuffer y hasta puede identificar código duplicado mediante el clásico "Cut &amp; Paste".&lt;br /&gt;&lt;br /&gt;Esta herramienta, que se distribuye bajo licencia "BSD", es bastante completa, configurable (podemos crear nuestras propias reglas), brinda hasta ejemplos de cómo mejorar nuestro código y cómo si fuera poco, se integra completamente con varios IDEs, entre ellos Eclipse, IntelliJ IDEA, JBuilder, Netbeans, JDeveloper, y varios más.&lt;br /&gt;&lt;br /&gt;En el siguiente &lt;a href="http://pmd.sourceforge.net/scoreboard.html"&gt;link&lt;/a&gt;, se pueden apreciar los resultados de analizar con este programa varios proyectos de SourceForge, ordenados por eficiencia, por ejemplo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Hibernate&lt;/span&gt;: está casi en la mitad de la lista, con un porcentaje de %0.25 de código no usado.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;XDoclet&lt;/span&gt;: marcado en un rojo furioso, un %1.07 de código no usado y 30 problemas encontrados.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JUnit&lt;/span&gt;: con un cómodo color verde, apenas tiene un %0.07 de código no usado.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JasperRepots&lt;/span&gt;: cerca de &lt;span style="font-weight: bold;"&gt;Spring&lt;/span&gt;, se posicionan casi al frente, con muy pocos problemas.&lt;/li&gt;&lt;/ul&gt;También podrán encontrar en la misma página de PMD, links a &lt;a href="http://pmd.sourceforge.net/similar-projects.html"&gt;proyectos similares.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y si se están preguntando cómo me fué a mí....&lt;br /&gt;Mi lema es "&lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;Todos los días se aprende algo nuevo&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1700/3926/1600/PMD_Detalles.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/1700/3926/320/PMD_Detalles.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);font-family:georgia;" &gt;Saludos PF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35311316-116270208132562141?l=mundojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundojava.blogspot.com/feeds/116270208132562141/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35311316&amp;postID=116270208132562141&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116270208132562141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35311316/posts/default/116270208132562141'/><link rel='alternate' type='text/html' href='http://mundojava.blogspot.com/2006/11/quin-dijo-que-yo-escriba-buen-cdigo.html' title='¿Quién dijo que yo escribía buen código?'/><author><name>Pablo Frias</name><uri>http://www.blogger.com/profile/05936890766924966573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-gKTNZhQUpVQ/TYYoRKP8JuI/AAAAAAAAAUw/PfcTCrzx0Os/s220/pablo_perfil.jpg'/></author><thr:total>1</thr:total></entry></feed>
