<?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-4286784136012598160</id><updated>2011-12-02T08:03:09.851-01:00</updated><category term='hibernate'/><category term='eclipse debug'/><category term='productividad'/><category term='java'/><category term='personal'/><category term='técnicas de programación'/><category term='PNL'/><category term='liderazgo'/><category term='seguridad'/><category term='ágil'/><category term='motivación'/><category term='calidad'/><category term='kindle'/><category term='test'/><category term='equipos estimación'/><category term='libros'/><category term='eventos Scrum'/><category term='spring'/><category term='Scrum'/><category term='organización personal'/><category term='eventos'/><category term='tdd'/><category term='eclipse'/><category term='JUnit'/><category term='equipos'/><title type='text'>Redescubriendo</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>70</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-422597561772141042</id><published>2011-11-20T12:32:00.006-01:00</published><updated>2011-11-20T16:36:59.029-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='liderazgo'/><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><title type='text'>Liderazgo</title><content type='html'>&lt;table style="margin-right: 15px; text-align: left; width: 250px;" align="left" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MiVtVFcUMZg/TskBr8dt2nI/AAAAAAAAAv4/zzSGq-18m30/s1600/photo_10092_20090418.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img src="http://4.bp.blogspot.com/-MiVtVFcUMZg/TskBr8dt2nI/AAAAAAAAAv4/zzSGq-18m30/s200/photo_10092_20090418.jpg" border="0" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-style: italic;"&gt;&lt;td style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;Foto de &lt;a href="http://www.everystockphoto.com/photographer.php?photographer_id=52092"&gt;Freerange&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;El liderazgo es un concepto realmente complejo. No podría escribir mucho más sobre ello de lo que &lt;a href="http://es.wikipedia.org/wiki/Liderazgo"&gt;ya hay en la Wikipedia&lt;/a&gt;. Pero sí que puedo hablar sobre las personas que para mí reflejan el mejor ejemplo que haya podido ver de líderes natos: mis padres.&lt;br /&gt;&lt;br /&gt;Casi todos los niños quieren a su padre. Yo además siempre he tenido la suerte de admirar al mío. Supo educarnos desde el respeto, no desde el miedo (no recuerdo ni una sola bofetada, torta...). Nos inculcó unos valores y nos enseñó a luchar por nuestros sueños desde el ejemplo. Nos enseñó a caminar con sus pasos no con sus palabras, siendo siempre consecuente con sus principios.&lt;br /&gt;&lt;br /&gt;Es un hombre que no se limita a hablarnos de valores, sino a practicarlos. Se esfuerza para ser una referencia en la familia,  y lo hace muy bien. Además se ha dejado la vida trabajando para que tengamos lo necesario para seguir el camino que él nos ayudó a marcar.&lt;br /&gt;&lt;br /&gt;Evidentemente, alguien como él no afrontaría solo su mayor proyecto, la familia. Siempre ha sabido hacer un gran equipo con una mujer extraordinaria: mi madre. Ella se ha encargado de que siempre hayamos estado arropados por el calor de la familia. Con la cálida y firme mano de una madre que siempre ha estado ahí para marcar el rumbo cuando, como todos los niños, nos desviábamos de él. Nunca ha mostrado cansancio a la hora de ayudarnos a dar un paso más hacia nuestras metas.&lt;br /&gt;&lt;br /&gt;En varias etapas tuvo que combinar el trabajo con el hogar y nunca buscó excusas para estar siempre ahí, para ser un foco en nuestras vidas, un refugio cuando lo necesitamos.&lt;br /&gt;&lt;br /&gt;El más claro ejemplo del resultado de sus valores, de sus cualidades como líderes de mi familia, es que a día de hoy, aunque ya hace algunos años que me he independizado, sigo consultando con ellos las decisiones importantes y sigo contando con su apoyo. Siguen siendo capaz de motivarnos y de animarnos, no porque sean nuestros padres, no por el "cargo que ocupan", sino porque son una referencia.&lt;br /&gt;&lt;br /&gt;Otro buen ejemplo es que nunca han antepuesto sus intereses. Por ejemplo, como para muchas madres, el que me fuera de casa, y encima me fuera a otra isla, no fue nada fácil para mi madre. Pero nunca intentó disuadirme de mi decisión, intentó que sus sentimientos no fueran un lastre y fue una de las personas que más me apoyó. Cada vez que aparece un bache en su camino, vuelve a ser un ejemplo para nosotros. Siempre con una palabra de ánimo, siempre con ganas de seguir adelante, siempre optimista...&lt;br /&gt;&lt;br /&gt;Para mí eso es el liderazgo, la capacidad de alentar a una persona a conseguir unos objetivos, sin usar para ello una posición privilegiada, sólo con su ejemplo, con sus valores, con su trabajo...Y es exactamente lo que mis padres han hecho realmente bien.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-422597561772141042?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/422597561772141042/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/11/liderazgo.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/422597561772141042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/422597561772141042'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/11/liderazgo.html' title='Liderazgo'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-MiVtVFcUMZg/TskBr8dt2nI/AAAAAAAAAv4/zzSGq-18m30/s72-c/photo_10092_20090418.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-3667286285655428880</id><published>2011-11-05T09:00:00.006-01:00</published><updated>2011-11-06T08:54:45.251-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>¿Sumas o restas?</title><content type='html'>&lt;table style="margin-right: 15px; text-align: left; width: 250px;" align="left" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.sxc.hu/pic/l/r/re/reuben4eva/470762_72700959.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img src="http://www.sxc.hu/pic/l/r/re/reuben4eva/470762_72700959.jpg" width="200" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-style: italic;"&gt;&lt;td style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;Foto de &lt;a href="http://www.everystockphoto.com/photographer.php?photographer_id=50525"&gt;reuben4eva&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Este lunes vi que en TVE2 estaban entrevistando a &lt;a href="http://www.alvarogonzalezalorda.com/"&gt;Álvaro González-Alorda&lt;/a&gt;. No pude ver la entrevista completa (por desgracia), pero escuché una frase que quedó grabada en mí: “Hay dos tipos de personas, los que te dan gasolina y los que te la quitan”. Álvaro la había escuchado en una reunión y creyó que era fantástica...yo también lo creo. Y probablemente haya calado tanto, probablemente la siga recordando perfectamente (pese a mi maltrecha memoria) porque encaja perfectamente con mi, cada vez mayor, convicción de que somos tóxicos con nosotros mismos y con los demás. Entenderás lo que quiero decir...&lt;br /&gt;&lt;br /&gt;Constantemente estoy comentando con mi pareja que señalar los problemas realmente no aporta mucho, lo que nos hace avanzar son las soluciones. No somos conscientes, pero al día estamos lanzando demasiados mensajes negativos, y al mismo tiempo los recibimos casi sin darnos cuenta. ¿Te has parado a analizar esto?. Te pongo un ejemplo:&lt;br /&gt;&lt;br /&gt;En Diciembre un amigo (y compañero de trabajo) y yo haremos parte de &lt;a href="http://caminodesantiago.consumer.es/los-caminos-de-santiago/primitivo/"&gt;El Camino Primitivo&lt;/a&gt;.  Al hablarlo con la gente, muchos me dicen que en esa época hará mucho frío, que nos mojaremos, que a ver si nos van a robar en los albergues... El otro día, cuando se lo conté a un amigo me dijo, con un tono alentador: "¡Qué guapo! Eso con dos perras vas a Decatlhon y consigues un buen equipo para el frío, la lluvia y el viento...porque también deben tener en cuenta el viento".&lt;br /&gt;&lt;br /&gt;Puede que no seamos ni conscientes, pero la diferencia es abismal. En el primer caso, simplemente se limitan a señalar los obstáculos. En el segundo, no sólo me ofrecía soluciones, sino que estas me las comentó antes que el propio problema. Para una persona que dude, que no lo tenga realmente claro, estar escuchando constantemente los problemas con los que se puede encontrar, puede ser la razón para desistir.&lt;br /&gt;&lt;br /&gt;También podemos ver un ejemplo en dos posturas típicas ante una propuesta. Imagina que propones a tus amigos/compañeros hacer X los jueves. Piensa en estos dos tipos de respuestas, que seguro que ya has escuchado alguna vez:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Los jueves no puedo, tengo que (poner aquí cualquier motivo). &lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(Como diría Joaquín Sabina, este es un punto final de los finales, al que no le siguen dos puntos suspensivos)&lt;/span&gt;&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Los jueves no puedo, tengo que (poner aquí cualquier motivo). Pero cualquier otro día, cuando quieras. Incluso lo podemos hacer por la tarde para que venga más gente...&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(Y aquí sí que le siguen dos puntos suspensivos)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Puede que en ambos casos, los que responden estén en las mismas condiciones. Puede que tengan las mismas ganas de participar. Puede que si le propones al primero hacerlo otro día, acepte de buena gana. Pero el caso es que uno se limita a lanzar un mensaje negativo, a señalar un obstáculo. El segundo refleja una situación y ofrece alternativas, soluciones.&lt;br /&gt;&lt;br /&gt;Incluso es más frecuente bromear en negativo que en positivo. "No te despistes, que cuando te des cuenta te pega la patada" (referido a la pareja), "Aprovecha ahora que luego se acabaron las aficiones, el dormir..." (referido a los futuros hijos)...&lt;br /&gt;&lt;br /&gt;Tampoco debemos caer en el error de convertirnos en unos temerarios. De  ignorar los problemas, de no mirar los obstáculos. Pero podemos cambiar  radicalmente el mensaje sin ser inconscientes. Podemos señalar el  obstáculo, pero sin usar un mensaje negativo, acompañándolo de  alternativas. En &lt;a href="http://enelahora.com/2011/08/mario-alonso-puig-reinventarse/"&gt;esta entrada&lt;/a&gt; explican perfectamente la diferencia entre una persona positiva, un optimista y una persona negativa. Me permito copiar una parte, ya que lo explica mejor de lo que yo pudiera hacerlo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 153, 153);"&gt;Optimista es aquella persona que está convencida que todo va a salir  bien. Una persona positiva es aquella que está buscando lo mejor de lo  que hay. Es decir, lo que hace es ante una situación difícil es sacar  los aspectos favorables, se centra en poner toda la atención, todo el  foco, en la solución y en la oportunidad; la persona que toma el punto  de vista negativo se regodea, pone toda la atención en el problema y no  puede encontrar una solución aunque la tenga delante de sus narices.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En la entrada también comentan como adoptar una postura positiva, si bien no nos va a curar, sí que puede ayudar mucho a la hora de afrontar una enfermedad. Y pese a todos los beneficios que una postura así puede aportar, no entiendo por qué tendemos a caminar en el sentido opuesto.&lt;br /&gt;&lt;br /&gt;Pequeñas dosis de "veneno" cada día, puede matar un gran proyecto. Piensa en ello y decide qué mensajes quieres escuchar... Decide qué mensajes quieres transmitir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-3667286285655428880?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/3667286285655428880/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/11/sumas-o-restas.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3667286285655428880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3667286285655428880'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/11/sumas-o-restas.html' title='¿Sumas o restas?'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8083353670683227838</id><published>2011-10-31T16:53:00.004-01:00</published><updated>2011-10-31T21:04:21.812-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Jugando con el feedback</title><content type='html'>&lt;table style="margin-right: 15px; text-align: left; width: 250px;" align="left" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/2/25/Basket.jpg/799px-Basket.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/25/Basket.jpg/799px-Basket.jpg" border="0" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-style: italic;"&gt;&lt;td style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;Foto de &lt;a href="http://commons.wikimedia.org/w/index.php?title=User:MarcoCrupi&amp;amp;action=edit&amp;amp;redlink=1"&gt;MarcoCrupi&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;No pretendo establecer como norma dedicar cada entrada a alquien, como ya hice en &lt;a href="http://eclijava.blogspot.com/2011/10/club-de-lectura.html"&gt;la anterior&lt;/a&gt;. Pero me veo obligado a mencionar que esta se la debo a &lt;a href="http://www.linkedin.com/in/jaimechaves"&gt;Jaime Chaves&lt;/a&gt;, ya que el juego lo vi en uno de sus cursos, y cuando le solicité información, bastante tiempo después, me la facilitó amablemente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Ingredientes&lt;/span&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Una papelera (o cualquier objeto que pueda cumplir las funciones de una canasta).&lt;/li&gt;&lt;li&gt;Unos cuantas bolas de papel, o pelotitas de plástico, o sobres de azúcar (esto fue lo que usamos nosotros), ...&lt;/li&gt;&lt;li&gt;Una venda u otro elemento que nos permita tapar los ojos sin que se pueda ver nada.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un grupo de personas dispuestas a aprender.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Preparación&lt;/span&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Separamos a cuatro personas del grupo.&lt;/li&gt;&lt;li&gt;Sin que estas cuatro personas puedan escucharlo, damos al grupo las siguientes instrucciones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Los compañeros que hemos separado, deberán intentar encestar las bolas de papel en la papelera con los ojos cerrados.&lt;/li&gt;&lt;li&gt;Al primer compañero, no le diremos nada mientras lo está intentando.&lt;/li&gt;&lt;li&gt;En el turno del segundo, diremos lo bien que lo está haciendo, que las está metiendo todas, aunque no se acerque ni de casualidad.&lt;/li&gt;&lt;li&gt;Para el tercero haremos todo lo contrario, indicándole lo mal que lo está haciendo, que no se acerca a la canasta, que no mete ni una, aunque no sea así.&lt;/li&gt;&lt;li&gt;Y por último, en el turno del cuarto compañero le ofreceremos un feedback adecuado a la situación.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Haremos pasar a la sala a los cuatro compañeros, de uno en uno, explicándoles que el objetivo es encestar las bolas que le daremos y que deberá hacerlo con los ojos tapados.&lt;/li&gt;&lt;li&gt;Por último, pediremos a los cuatro compañeros que nos cuenten cómo se ha sentido cada uno, y (si no pasa nada extraordinario) podemos explicar el poder del feedback adecuado, en el momento adecuado, viendo que el último compañero será el mejor que lo haga.&lt;/li&gt;&lt;/ol&gt;Es un estupendo juego para hacer entender el poder del feedback cuando lo practicamos de forma responsable. No podemos estar dando palmaditas en la espalda constantemente. Tampoco podemos estar repitiendo hasta la saciedad que el trabajo del equipo es una mierda. Igualmente, no podemos dejarlo pasar... Las retrospectivas y el feedback son herramientas muy útiles que debemos incorporar en nuestro día a día para poder avanzar, siempre de una forma responsable y coherente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8083353670683227838?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8083353670683227838/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/10/jugando-con-el-feedback.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8083353670683227838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8083353670683227838'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/10/jugando-con-el-feedback.html' title='Jugando con el feedback'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7079563364905539713</id><published>2011-10-25T17:09:00.006Z</published><updated>2011-10-25T21:40:03.129Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='libros'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Club de lectura</title><content type='html'>&lt;table style="margin-right: 15px; text-align: left; width: 250px;" align="left" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a style="margin-left: auto; margin-right: auto;" imageanchor="1" href="http://upload.wikimedia.org/wikipedia/commons/3/38/Libri_books.jpg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/3/38/Libri_books.jpg" border="0" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-style: italic;"&gt;&lt;td style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;Foto de &lt;a href="http://commons.wikimedia.org/wiki/User:Twice25"&gt;Twice25&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; Esta entrada va dedicada al señor Peraza por dos razones. La primera, que el lunes fue a leer mi nueva entrada en el blog y me hizo saber su decepción al ver que no había publicado nada (qué bien me sentó ;) ). La segunda, que la iniciativa que voy a contar surgió a raíz de una propuesta/comentario/idea suya.&lt;br /&gt;&lt;br /&gt;A dicha idea le fuimos dando forma hasta hacerla interesante y convertirla en la propuesta que hoy hemos "hecho oficial". A partir de ahora, cada miembro del equipo elegirá un libro (evidentemente, relacionado directa o indirectamente con el desarrollo de software) y dedicará algo de tiempo al día a su lectura.&lt;br /&gt;&lt;br /&gt;Cada vez que alguno de nosotros termine un libro, preparará una pequeña presentación sobre el mismo, para compartir con el resto del equipo el conocimiento que haya podido extraer y así intentar que el equipo se beneficie.&lt;br /&gt;&lt;br /&gt;Creo que la iniciativa fomentará la lectura y que compartamos conocimiento. Dos buenos ingredientes para seguir progresando. Ya contaré qué tal evoluciona y a la vez compartiré mi primera presentación (o  la de alguno de mis compañeros si me la presta ;) ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7079563364905539713?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7079563364905539713/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/10/club-de-lectura.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7079563364905539713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7079563364905539713'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/10/club-de-lectura.html' title='Club de lectura'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8451266339816683621</id><published>2011-10-15T17:05:00.007Z</published><updated>2011-10-16T10:07:19.439Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='calidad'/><category scheme='http://www.blogger.com/atom/ns#' term='técnicas de programación'/><title type='text'>Comentar o no comentar... siguiendo tendencias</title><content type='html'>Me he topado varias veces con debates en torno a si añadir comentarios en el código es bueno o malo. Y aunque dudo que lo que yo pueda pensar al respecto vaya a inclinar la balanza de un lado u otro, me apetecía escribir sobre este tema.&lt;br /&gt;&lt;br /&gt;Lo que no podemos negar es que al comentar el código se está duplicando información: por un lado está el comentario sobre el código y por otro el propio código. Esto hace que cada vez que la información a la que hacen referencia cambie se deba hacer cambios en dos puntos. Y lo que es peor, si la información cambia y (por las prisas, despistes, ...) no actualizamos tanto el código como el comentario, al final tendremos un comentario desactualizado, y más que aclarar lo que hace es confundirnos.&lt;br /&gt;&lt;br /&gt;También deberíamos pensar por qué creemos que es necesario añadir un comentario. En &lt;a href="http://www.agapea.com/libros/The-Pragmatic-Programmer-isbn-020161622X-i.htm"&gt;The Pragmatic Programmer&lt;/a&gt; podemos leer "Programmers are taught to comment their code: good code has lots of comments. Unfortunately, they are never taught why code needs comments: bad code requires lots of comments." Puede que la necesidad de comentar el código refleje una carencia: no has elegido buenos nombres para los métodos/variables/clases, el código es demasiado complejo, etc.&lt;br /&gt;&lt;br /&gt;Dicho esto, también deberíamos tener en cuenta que nadie te conoce mejor que tú  mismo. Nadie conoce a tu equipo mejor de lo que lo conoces tú. Y nadie conoce tus proyectos mejor que tú. Si desde tu punto de vista añadir un comentario va a aportar más beneficios que problemas, yo creo que no debes sentir el más mínimo remordimiento por ponerlo. Te aseguro que no va a morir un angelito por ello. Al final es una cuestión de rentabilidad, si sabes los costes y los beneficios, está en tu mano, y no en la de otros, decidir. Personalmente, puedo decir que en muchas ocasiones he agradecido un buen comentario.&lt;br /&gt;&lt;br /&gt;Al pensar en esto, y viendo algunas posturas en ciertos debates, creo que a veces sufrimos lo que yo llamo &lt;span style="font-style: italic;"&gt;efecto peinado intelectual&lt;/span&gt;. ¿Te ha pasado alguna vez que el Beckham de turno se hace un peinado "diferente" y a los pocos días no haces más que ver a gente con el mismo peinado? Pues a algunos nos suele pasar algo similar en nuestra profesión. Cuando alguien de peso hace una afirmación tendemos a repetirla y asumirla sin muchos miramientos. Desde luego, hay que respetar y tener en cuenta lo que dicen los buenos profesionales, pero siempre desde un punto de vista crítico.&lt;br /&gt;&lt;br /&gt;Al pensar en este tema, también suelo recordar un chiste que, probablemente por mi simpleza, siempre me ha hecho mucha gracia:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;están dos pájaros en una rama... y le dice uno a otro, ¡pío!... a lo que el otro contesta... haz lo que te salga de los cojones&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8451266339816683621?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8451266339816683621/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/10/comentar-o-no-comentar-siguiendo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8451266339816683621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8451266339816683621'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/10/comentar-o-no-comentar-siguiendo.html' title='Comentar o no comentar... siguiendo tendencias'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6804934170240293389</id><published>2011-10-08T22:33:00.007Z</published><updated>2011-10-10T06:14:27.696Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PNL'/><category scheme='http://www.blogger.com/atom/ns#' term='libros'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><title type='text'>PNL. Programación neurolingüística: o cómo empecé a plantearme que igual me equivocaba yo y no el mundo</title><content type='html'>Me he planteado varias veces si me apetecía o si sería interesante publicar reseñas sobre los libros que leo. Y la verdad es que la idea no acababa de convencerme, de hecho sólo he hablado &lt;a href="http://eclijava.blogspot.com/2010/12/fish.html"&gt;de uno&lt;/a&gt;. Pero he decidido que empezaré a hablar de aquellos que han conseguido provocar un cambio en mí.&lt;br /&gt;&lt;br /&gt;Y para empezar, he elegido el libro &lt;a href="http://www.agapea.com/libros/PNL-Programacion-neurolinguistica-isbn-8441400490-i.htm"&gt;PNL, Programación neurolingüística&lt;/a&gt;, que ya había nombrado en &lt;a href="http://eclijava.blogspot.com/2010/12/no-hay-fracaso-solo-retroalimentacion.html"&gt;esta otra entrada&lt;/a&gt;. En realidad pensaba hablar de un libro técnico, ya que es lo que realmente me gusta y lo que hago, pero los acontecimientos de esta semana me hicieron cambiar de opinión... ya lo entenderás.&lt;br /&gt;&lt;br /&gt;En su momento había leído en varios foros que era difícil llegar a entender la PNL sólo con un libro, que es necesario un taller o alguna actividad donde podamos aprender de la mano de un experto. Creo que es cierto, ya que tras haber leído el libro dudo que realmente pudiera aplicar sus principios. Pero sí que me ha parecido interesante, ya que me aportó algunas ideas y me hizo reflexionar sobre otras, todas enfocadas a conseguir lo que queremos. El objetivo final es cambiar nuestra forma de ver las cosas para conseguir el éxito.&lt;br /&gt;&lt;br /&gt;Aunque lo que realmente produjo un cambio en mí fue cómo trata el tema de los mapas mentales. Los mapas mentales son la herramienta con la que interpretamos lo que sucede a nuestro alrededor. A través de la experiencia de toda nuestra vida, los vamos configurando y los usamos para interpretar la realidad. Pero tu mapa es distinto del mío y &lt;span style="font-weight: bold;"&gt;ninguno de los dos es la realidad objetiva&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;¿Alguna vez has usado la frase "es que la gente no piensa", cuando alguien hace o dice algo que choca frontalmente con tu forma de pensar? Sinceramente, yo sí. Los que me conocen saben que soy una persona conciliadora... es frecuente que use el "igual es que..." para proponer alternativas cuando se intenta juzgar una acción de otra persona.  Pero aun así, sí que he pensado "es que no piensa" en más de una ocasión... ¡Qué osadía por mi parte! y por la de todos los que lo hemos hecho alguna vez.&lt;br /&gt;&lt;br /&gt;Pensar así implica: que doy por hecho que mis mapas mentales son los válidos y los que han hecho que otras personas actúen de forma distinta están equivocados. Y que no he sido lo suficientemente tolerante para intentar imaginar qué hace que la otra persona piense o actúe diferente. Creo que no entender bien el concepto de mapas mentales, no entender que lo que percibimos no es la realidad, sino nuestra interpretación de la misma, es la base de la intolerancia.&lt;br /&gt;&lt;br /&gt;Había dicho antes que algo en esta semana me hizo elegir esta entrada, y ese algo ha sido los comentarios que han surgido tras la muerte de Steve Jobs. He leído en más de un blog frases similares a "cómo una persona tan inteligente pudo.." por haber retrasado la cirugía por usar medicinas alternativas.&lt;br /&gt;&lt;br /&gt;Como puede leerse en líneas anteriores, para mí esto implica dos cosas: los que han dicho eso tienen la osadía de definir lo que hubiera sido una decisión inteligente. Y por otro lado, ni le han dado el beneficio de la duda, no se  han molestado en pensar qué le hizo hacer eso realmente. Desde luego, no tengo las capacidades del señor Jobs, pero podría pensar varios motivos por los que actuó así... por ejemplo, puede que no quisiera hacer nada que mermara su calidad de vida (como los efectos debastadores de la quimioterapia), pero al ver que su familia no comprendía su decisión y que sufría con ella cambió de opinión, ect, etc, etc.&lt;br /&gt;&lt;br /&gt;Ya no tiramos a la hoguera a aquellos que piensen de forma distinta, pero (puede que sea algo innato) seguimos sin llevar bien esa situación. Creo que entender el concepto de mapa mental es clave para una relación social sana, y a mí este libro me ha ayudado mucho a ello. No podría contar ya cuántas veces lo he recordado tras su lectura, precisamente para obligarme a pensar de otra forma e intentar entender mejor a los demás.&lt;br /&gt;&lt;br /&gt;Para acabar, me gustaría compartir una historia que leí en "Los 7 hábitos de la gente altamente efectiva" y que hizo que diera más peso todavía  a la importancia de entender el concepto de mapas mentales:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 153, 153);"&gt;Era domingo por la mañana en el metro de Nueva York. La gente estaba tranquilamente sentada, leyendo el periódico, perdida en sus pensamientos o descansando con los ojos cerrados. La escena era tranquila y pacífica. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 153, 153);"&gt;Entonces, de pronto, entraron en el vagón un hombre y sus hijos. Los niños eran tan alborotadores e ingobernables que de inmediato se modificó todo el clima.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 153, 153);"&gt;El hombre se sentó junto a mí y cerró los ojos, en apariencia ignorando y abstrayéndose de la situación. Los niños vociferaban de aquí para allá, arrojando objetos, incluso arrebatando los periódicos de la gente. Era muy molesto. Pero el hombre sentado junto a mí no hacía nada.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 153, 153);"&gt;Resultaba difícil no sentirse irritado. Yo no podía creer que fuera tan insensible como para permitir que los chicos corrieran salvajemente, sin impedirlo ni asumir ninguna responsabilidad. Se veía que las otras personas que estaban allí se sentían igualmente irritadas. De modo que, finalmente, con lo que me parecía una paciencia y contención inusuales, me volví hacia él y le dije: «Señor, sus hijos están molestando a muchas personas. ¿No puede controlarlos un poco más?».&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 153, 153);"&gt;El hombre alzó los ojos como si sólo entonces hubiera tomado conciencia de la situación, y dijo con suavidad: «Oh, tiene razón. Supongo que yo tendría que hacer algo. Volvemos del hospital donde su madre ha muerto hace más o menos una hora. No sé qué pensar, y supongo que tampoco ellos saben cómo reaccionar».&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6804934170240293389?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6804934170240293389/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/10/pnl-programacion-neurolinguistica-o.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6804934170240293389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6804934170240293389'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/10/pnl-programacion-neurolinguistica-o.html' title='PNL. Programación neurolingüística: o cómo empecé a plantearme que igual me equivocaba yo y no el mundo'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-797592776912293909</id><published>2011-10-02T17:10:00.005Z</published><updated>2011-10-02T20:36:19.153Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><title type='text'>Cuando el medio se convirte en el fin, es el fin del medio</title><content type='html'>&lt;table style="margin-right: 15px; text-align: left; width: 250px;" align="left" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a style="margin-left: auto; margin-right: auto;" imageanchor="1" href="http://everystockphoto.s3.amazonaws.com/everystockphoto_384280_o.jpg"&gt;&lt;img src="http://everystockphoto.s3.amazonaws.com/everystockphoto_384280_o.jpg" border="0" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-style: italic;"&gt;&lt;td style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;Foto de &lt;a href="http://www.everystockphoto.com/photographer.php?photographer_id=10581"&gt;dcJohn&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; Cuando empecé a estudiar las metodologías ágiles, uno de los temas más recurrentes con los que me encontraba era la documentación: es necesario, no es necesario, cuánto y cómo... Fue en el libro &lt;a href="http://www.agapea.com/libros/User-Stories-Applied-isbn-0321205685-i.htm"&gt;User Stories Applied&lt;/a&gt; donde encontré la respuesta más coherente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Extensive upfront requirements gathering and documentation can kill a project in many ways. One of the most common is when the requirements document itself becomes a goal.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El problema, es que creo que con las metodologías ágiles está ocurriendo lo mismo: se han convertido en el objetivo, no en un medio para lograrlo. Por ejemplo, en varios cursos de Scrum he visto como al comentar ciertos problemas que otros colegas tienen al aplicarlo, con frecuencia se llega a una de estas conclusiones:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Realmente no estás siguiendo Scrum.&lt;/li&gt;&lt;li&gt;Se ha intentado aplicar Scrum donde no era aconsejable.&lt;/li&gt;&lt;/ol&gt;Incluso, en ciertos entornos o circunstancias, los que no programan haciendo TDD, &lt;a href="http://en.wikipedia.org/wiki/Pair_programming"&gt;junto a otro compañero&lt;/a&gt;, en &lt;a href="http://www.pomodorotechnique.com/"&gt;intervalos de 25 minutos&lt;/a&gt;, pueden parecer "raritos", cuanto menos.&lt;br /&gt;&lt;br /&gt;Si tuviera que destacar algo del equipo en el que estoy actualmente, no sería la arquitectura que usamos, ni la metodologías, ni las herramientas, ... De esto simplemente diría que los usuarios están contentos con los resultados, los jefes también y, por supuesto, nosotros mismos. Así que podría decirse que el resultado es "&lt;a href="http://www.artima.com/intv/goodenough.html"&gt;good enough&lt;/a&gt;". Sabemos que no hemos elegido las opciones perfectas, simplemente, atendiendo al conocimiento que teníamos, elegimos las opciones más adecuadas, intentando mejorar constantemente. Lo que yo destacaría es que no paramos de reírnos. El equipo no se disuelve tras la jornada laboral y el ambiente durante esta es el mismo que puede haber cuando algunos salimos a correr, pescar, cenar, tomar algo, ... En definitiva, nos sentimos a gusto con lo que hacemos, nos lo pasamos bien y el usuario está contento con el resultado. Creo que ese es el objetivo, y no el usar unas determinadas herramientas.&lt;br /&gt;&lt;br /&gt;Las metodologías ágiles han demostrado que son una buena apuesta para conseguir buenos resultados; pero no debemos dejar de pensar que son otras herramientas: debemos cargar nuestra caja con el mayor número de ellas para poder elegir en cada momento las más adecuadas. Incluso, cuando las conozcamos lo suficiente, adaptarlas a nuestras necesidades.&lt;br /&gt;&lt;br /&gt;Podemos ver un ejemplo de lo que quiero decir en el deporte, concretamente en la natación. Parece que todo está estudiado, existen técnicas para conseguir la mayor eficiencia posible en los movimientos, pero de pronto aparece alguien como &lt;a href="http://www.prensa.com/impreso/magnussen-es-la-revelacion/14037"&gt;Magnussen&lt;/a&gt; y bate records con un estilo propio. Se trata de un deportista de élite, que sin duda &lt;span style="font-weight: bold;"&gt;conocerá perfectamente todas las técnicas posibles&lt;/span&gt;, pero al final ha hecho lo más sensato: nadar de la forma que mejores resultados le proporciona, sin fijarse si cumple con lo establecido o no.&lt;br /&gt;&lt;br /&gt;También quiero aclarar que mi intención no es sacar el dedo acusador, esta entrada me señala a mí el primero. Reconozco que he probado ciertas cosas simplemente porque es lo que parece que todos hacen. Mi intención es madurar en este sentido e intentar no perder de vista que el objetivo es hacer software de calidad.&lt;br /&gt;&lt;br /&gt;En resumen, yo diría que en cualquier actividad (deporte, natación, fotografía, ...) no &lt;span style="font-weight: bold; font-style: italic;"&gt;debes demostrar que sabes hacerlo, céntrate en hacerlo lo mejor posible&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-797592776912293909?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/797592776912293909/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/10/cuando-el-medio-se-convirte-en-el-fin.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/797592776912293909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/797592776912293909'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/10/cuando-el-medio-se-convirte-en-el-fin.html' title='Cuando el medio se convirte en el fin, es el fin del medio'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5488771821811342287</id><published>2011-09-25T11:35:00.012Z</published><updated>2011-09-25T15:36:29.934Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><title type='text'>Cuidado, cerrar la sesión no basta para proteger tus datos</title><content type='html'>&lt;table style="margin-right: 15px; text-align: left; width: 250px;" align="left" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a style="margin-left: auto; margin-right: auto;" imageanchor="1" href="http://farm3.static.flickr.com/2037/2178424477_c8158ee015_d.jpg"&gt;&lt;img src="http://farm3.static.flickr.com/2037/2178424477_c8158ee015_d.jpg" border="0" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-style: italic;"&gt;&lt;td style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;Foto de &lt;a href="http://www.flickr.com/photos/ul_marga/"&gt;ul_Marga&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; Es probable que ya sepas el "problema de seguridad" que voy a describir. También es probable que, atendiendo a lo que me dedico, yo también tuviera que haberlo sabido ya, pero lo cierto es que lo descubrí no hace mucho haciendo unas pruebas (convencido de que no obtendría el resultado que obtuve) y creo que es una buena idea compartirlo, por si hay más personas que como yo no sepan que a veces no basta con cerrar nuestra sesión en aquellas páginas en las que debemos autentificarnos.&lt;br /&gt;&lt;br /&gt;Como se suele decir, vale más una imagen que mil palabras, así que creo que la forma más sencilla de describir el problema, es con un ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;En un navegador (he probado en el Chrome y Firefox) accede a una página que requiera que te autentifiques para poder acceder (Gmail, Facebook, ...)&lt;/li&gt;&lt;li&gt;Introduce tus datos y navega un poco por el portal (por ejemplo, basta con que leas dos correos si has accedido a Gmail).&lt;/li&gt;&lt;li&gt;Cierra tu sesión.&lt;/li&gt;&lt;li&gt;Marca la opción &lt;span style="font-style: italic; font-weight: bold;"&gt;Trabajar sin conexión&lt;/span&gt; en tu navegador.&lt;/li&gt;&lt;li&gt;Ahora pulsa sobre &lt;span style="font-style: italic; font-weight: bold;"&gt;Ir a la página anterior&lt;/span&gt;, ... sorpresa: puedes ver las páginas que habías visitado.&lt;/li&gt;&lt;/ol&gt;Si no hubieras marcado la opción &lt;span style="font-style: italic; font-weight: bold;"&gt;Trabajar sin conexión&lt;/span&gt;, al intentarlo te habría redirigido a la página de login, pero al evitar que el navegador acceda a la red podemos ver las páginas anteriores sin problema.&lt;br /&gt;&lt;br /&gt;Y esto no es todo, no hace falta usar la opción &lt;span style="font-style: italic; font-weight: bold;"&gt;Ir a la página anterior&lt;/span&gt;, también podemos hacer uso del historial (por si habías pensado en cerrar la ventana/pestaña).&lt;br /&gt;&lt;br /&gt;Una opción rápida, podría ser limpiar el historial si has accedido desde un ordenador que no es tuyo o que compartes con más personas.&lt;br /&gt;&lt;br /&gt;P.D.: Yeray comenta una solución mejor en los comentarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5488771821811342287?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5488771821811342287/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/09/cuidado-cerrar-la-sesion-no-basta-para.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5488771821811342287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5488771821811342287'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/09/cuidado-cerrar-la-sesion-no-basta-para.html' title='Cuidado, cerrar la sesión no basta para proteger tus datos'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-865069461894464727</id><published>2011-09-23T20:11:00.020Z</published><updated>2011-09-27T21:10:56.086Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><category scheme='http://www.blogger.com/atom/ns#' term='organización personal'/><title type='text'>Lo siento, hoy no llevo tiempo suelto en los bolsillos</title><content type='html'>&lt;div style="text-align: justify;"&gt;Las visitas que tuvo el blog entre el domingo y el lunes han roto todas las estadísticas. Son cifras bastante humildes, pero fueron diez veces mayores que las que ha tenido cualquiera de las entradas anteriores. Eso, y saber que las personas que empezaron leyendo este blog  en su inicio continúan haciéndolo y comentando conmigo lo que escribo, es una buena inyección de motivación. Desde luego son dos buenas razones para seguir consiguiendo &lt;a href="http://eclijava.blogspot.com/2011/09/pon-fecha-de-caducidad-tus-habitos.html"&gt;caritas felices&lt;/a&gt;, e incluso publicar alguna entrada extra como  hoy ;)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-3gUyKDwuIV8/Tnzo4nEMrrI/AAAAAAAAAvc/wW5BvhTO0lg/s1600/0071%2B-%2B20110731%2B17.47.20.JPG"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px;" src="http://1.bp.blogspot.com/-3gUyKDwuIV8/Tnzo4nEMrrI/AAAAAAAAAvc/wW5BvhTO0lg/s320/0071%2B-%2B20110731%2B17.47.20.JPG" alt="" id="BLOGGER_PHOTO_ID_5655651291327409842" border="0" /&gt;&lt;/a&gt;Si has leído otras entradas sabrás que me intereso mucho por temas relacionados con la productividad, la gestión efectiva del tiempo, motivación, etc. Este interés hace que preste atención a ciertas cuestiones, y así he visto que todavía no sabemos manejar el tiempo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Me explico, creo que con el tiempo nos pasa como cuando apareció el euro, si no lo pasábamos a pesetas no lo manejábamos bien (para ser sinceros, todavía lo veo mejor cuando hago la conversión). Hay varios artículos, aplicaciones, técnicas, etc que nos hacen pensar en el valor económico para poder valorar el tiempo. Por ejemplo:&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;&lt;a href="http://tobytripp.github.com/meeting-ticker/"&gt;Esta aplicación&lt;/a&gt; calcula el coste de una reunión&lt;br /&gt;&lt;/li&gt;&lt;li style="margin-top: 10px;"&gt;Otro ejemplo es &lt;a href="http://www.xing.com/net/psicogym/pensamientos-265239/imagina-que-existe-un-banco-que-cada-manana-acredita-en-tu-cuenta-la-suma-de-86-400-15980686/"&gt;una bonita historia&lt;/a&gt; que leí por primera vez en una novela (y que luego me llegó muchas veces al correo en forma de presentaciones, animaciones, etc.) donde se intenta hacer entender la importancia de aprovechar el tiempo usando una analogía con el dinero.&lt;/li&gt;&lt;li style="margin-top: 10px;"&gt;&lt;a href="http://thinkwasabi.com/2011/02/hipoteca-tareas-diarias/"&gt;Esta entrada&lt;/a&gt;, muy recomendable, en el blog ThinkWasabi, donde nos invita a calcular el coste (económico) de nuestras tareas diarias.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Pero lo que realmente me parece curioso, es que no he encontrado nada que nos haga reflexionar sobre el coste del tiempo de otras personas. La mayoría de nosotros nos sentimos incómodos si tenemos que pedir dinero y nos apresuramos a devolverlo, pero no sentimos algo similar al "pedir tiempo". Seguro que no produce la misma sensación la frase "me puedes dejar un euro" que ".. ya que vas...", "no te importa y... son sólo cinco minutos", ...&lt;br /&gt;&lt;br /&gt;¿Has pensado en el gasto en tiempo que tendrán los usuarios cuando desarrollas una aplicación? ¿Lo que implica entregar un software que no ha sido suficientemente probado, que no es amigable, ...? ¿Has pensado en el tiempo de tus amigos/compañeros/familiares cuando vas a disponer de él?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Todos nos escandalizaríamos, como mínimo, si vemos a alguien meter la mano en el bolsillo de otra persona y coger dinero. Pero ver como alguien hace perder tiempo al resto (colarse, no respetar el turno de palabra, ...), ya es algo casi que normal. ¿Esa persona piensa en que el tiempo de esas otras personas tiene un valor?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;No soy un experto en esto, pero sí que me apetecía reflexionar "en voz alta" sobre ello, pues al menos yo, contestaría que no a la mayoría de las preguntas anteriores. Puede que debamos seguir la propuesta de Berto Pena (&lt;a href="http://thinkwasabi.com/2011/02/hipoteca-tareas-diarias/"&gt;el punto 3 de los ejemplos anteriores&lt;/a&gt;), pero para calcular el tiempo que hacemos gastar a otras personas, antes de hacerlo.&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/4286784136012598160-865069461894464727?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/865069461894464727/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/09/lo-siento-hoy-no-llevo-tiempo-suelto-en.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/865069461894464727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/865069461894464727'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/09/lo-siento-hoy-no-llevo-tiempo-suelto-en.html' title='Lo siento, hoy no llevo tiempo suelto en los bolsillos'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-3gUyKDwuIV8/Tnzo4nEMrrI/AAAAAAAAAvc/wW5BvhTO0lg/s72-c/0071%2B-%2B20110731%2B17.47.20.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5781934972482112066</id><published>2011-09-18T09:24:00.007Z</published><updated>2011-09-18T11:19:53.467Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Pon fecha de caducidad a tus hábitos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-aggreZiKRH0/TnW5NULXM6I/AAAAAAAAAvE/HgijOlvmUG4/s1600/IMG_1852.JPG"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 213px;" src="http://4.bp.blogspot.com/-aggreZiKRH0/TnW5NULXM6I/AAAAAAAAAvE/HgijOlvmUG4/s320/IMG_1852.JPG" alt="" id="BLOGGER_PHOTO_ID_5653628545639330722" border="0" /&gt;&lt;/a&gt;Los hábitos son una herramienta muy potente y muchos autores afirman que son la clave del éxito. Desde el punto de vista de la productividad, el objetivo del hábito es actuar. Nos permite realizar aquellas cosas que se nos resistían y por tanto recurrimos a ellos cuando vemos que algo "no va bien".&lt;br /&gt;&lt;br /&gt;Pero a la larga, pueden suponer una barrera, un tope en nuestro crecimiento, o hacer que aparezcan otros problemas. Por ejemplo, para una persona que no hace ejercicio, y nota que esto puede repercutir en su salud y bienestar, coger el hábito de salir a correr tres veces por semana es algo muy positivo. Pero una vez hemos interiorizado esto, el propio hábito se puede convertir en otro problema. Puede que a la larga aparezcan las lesiones por no tomar en serio los estiramientos, o haber realizado ejercicios de fuerza para fortalecer las lumbares, etc.&lt;br /&gt;&lt;br /&gt;Mi objetivo es que un hábito caduque para que pueda dar paso a otra versión evolucionada de éste, siempre que sea necesario (evidentemente, hay casos en los que esto no nos interesa o no es necesario). Siguiendo con el ejemplo del deporte, una vez que he establecido el hábito, lo rompería para comenzar a crear uno nuevo que incluya dedicar quince minutos a los estiramientos en cada sesión. Si el tiempo apremia, sería cuestión de replantear los entrenamientos de forma que nunca se ponga en peligro lo conseguido hasta ahora (y deje de salir a correr), pero siempre dando importancia a los estiramientos. Otro ejemplo lo podríamos tener con la lectura. Si he creado el hábito de leer X páginas de un buen libro técnico al día, puede que deba esforzarme en establecer un nuevo hábito que incluya poner en práctica algo de lo que he leído una vez por semana, por ejemplo, o compartir lo aprendido mediante el blog, reuniones, etc.&lt;br /&gt;&lt;br /&gt;Aunque hay muchas herramientas para hacer un seguimiento de nuestro propósito, soy un poco nostálgico y prefiero el lápiz y papel. Tengo definidas unas plantillas, siempre con 21 iteraciones (tras muchas lecturas y atendiendo a mi propia naturaleza, 21 me pareció una buena cifra) en las que puedo marcar si he cumplido el objetivo o no. Las iteraciones pueden ser de días, semanas, etc. según nos interese. Además, añado dos líneas donde indico, en una quién es el responsable (en mi caso, las comparto con mi pareja, por lo que el autor puedo ser yo, ella, o la pareja) y cuál es el objetivo. Luego, voy coloreando el verde las caritas felices si cumplo el objetivo de la iteración, o en rojo la carita triste si no lo he cumplido.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-jmShbT6Rgog/TnW-FYEQ31I/AAAAAAAAAvM/tVN9POfw17E/s1600/blog01.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 291px;" src="http://1.bp.blogspot.com/-jmShbT6Rgog/TnW-FYEQ31I/AAAAAAAAAvM/tVN9POfw17E/s320/blog01.png" alt="" id="BLOGGER_PHOTO_ID_5653633906802483026" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-9cA6hZMUsts/TnW-QD-vQuI/AAAAAAAAAvU/jqWL455MplA/s1600/blog02.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 291px;" src="http://3.bp.blogspot.com/-9cA6hZMUsts/TnW-QD-vQuI/AAAAAAAAAvU/jqWL455MplA/s320/blog02.png" alt="" id="BLOGGER_PHOTO_ID_5653634090389160674" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5781934972482112066?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5781934972482112066/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/09/pon-fecha-de-caducidad-tus-habitos.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5781934972482112066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5781934972482112066'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/09/pon-fecha-de-caducidad-tus-habitos.html' title='Pon fecha de caducidad a tus hábitos'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-aggreZiKRH0/TnW5NULXM6I/AAAAAAAAAvE/HgijOlvmUG4/s72-c/IMG_1852.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-535907156534283558</id><published>2011-09-10T18:11:00.003Z</published><updated>2011-09-11T08:54:40.252Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='kindle'/><title type='text'>Con un kindle en mis manos</title><content type='html'>Aunque este tema estaba fuera de carta, lo vi interesante porque, por un lado, retomo de una vez la actividad del blog, que ya &lt;a href="http://respirahondoycuenta.blogspot.com/"&gt;alguien&lt;/a&gt; me había dado unos cuantos toques de atención ;) Y por otro, además de compartir algunas cosas que considero interesantes, queda a modo de recordatorio para mí mismo.&lt;br /&gt;&lt;br /&gt;Como anuncia el título, hace poco que tengo el Kindle y he encontrado algunas utilidades interesantes:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Gracias a Xelso, voy a poder matar el aburrimiento con el buscaminas. Y además, nos cuenta otros cuatro trucos más &lt;a href="http://www.xelso.com/ocio/5-trucos-imprescindibles-para-tu-kindle-3"&gt;aquí&lt;/a&gt;.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Cambiar el diccionario por un traductor de Ingles - Español&lt;/li&gt;&lt;li&gt;Realizar una copia de seguridad de tu Kindle&lt;/li&gt;&lt;li&gt;Utilizando tu Kindle como calculadora&lt;/li&gt;&lt;li&gt;Consejos para buscar libros electrónicos para tu Kindle&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;: ya estuve probando esta aplicación antes de elegir &lt;a href="http://www.diigo.com/"&gt;Diigo&lt;/a&gt;. En su momento no me convenció, pero he vuelto a ella porque permite maquetar las páginas que hayas registrado, para visualizarlas en el Kindle. Simplemente tienes que generar el fichero (también puede generarlo en formato ePub o pdf) Lo que más me ha gustado, es que crea una única entrada y al acceder a ella encuentras un índice con el listado de páginas que habías registrado.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://sendtoreader.com/"&gt;SEND to READER&lt;/a&gt;: también nos permite formatear una página web y enviarla al Kindle, a través de un correo. Para registrar las páginas, basta con añadir un marcador con un pequeño script, que luego usaremos en cada página que nos interese. Personalmente, de momento me quedo con Instapaper, ya que me agrupa e indexa el contenido. Otra opción con esta herramienta, es que podemos generar nuestros propios documentos para el kindle.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.zonaereader.com/foro/viewtopic.php?f=1&amp;amp;t=1185"&gt;Un artículo&lt;/a&gt; que explica cómo mejorar la experiencia de navegación.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.zonaereader.com/foro/viewtopic.php?f=1&amp;amp;t=1195"&gt;Un directorio de webs&lt;/a&gt; adaptadas a ereaders.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Los &lt;a href="http://www.zonaereader.com/foro/viewtopic.php?f=20&amp;amp;t=1056"&gt;pasos a seguir&lt;/a&gt; para poder leer las noticias en el Kindle, usando Calibre.&lt;/li&gt;&lt;/ol&gt;En &lt;a href="http://www.zonaereader.com/"&gt;ZonaeReader&lt;/a&gt; hay muchos trucos más, espero seguir investigando. Y si los señores de Amazon, tienen a bien aceptar mi petición, igual en una próxima entrada presento una utilidad hecha en casa ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-535907156534283558?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/535907156534283558/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/09/con-un-kindle-en-mis-manos.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/535907156534283558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/535907156534283558'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/09/con-un-kindle-en-mis-manos.html' title='Con un kindle en mis manos'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7611901510755643276</id><published>2011-06-30T07:16:00.002Z</published><updated>2011-06-30T17:26:32.993Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Cuando descubrí que no era quien creía ser...</title><content type='html'>&lt;div&gt;Ayer asistí a una conferencia sobre coaching de la mano de &lt;a href="http://www.equiposytalento.com/tv/fragmentos/Eva-Lopez-Acevedo-y-Silvia-Guarnieri/directoras/escuela-europea-de-coaching/"&gt;Silvia Guarnieri&lt;/a&gt;, y aunque dijo muchas cosas interesantes, hubo algo que aún resuena en mi cabeza y produjo un cambio importante en mí, o por lo menos eso quiero pensar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Todo empezó con una anecdota. Nos contó que hace tiempo ella pensaba que nunca tendría un perro. Creía que no podría soportar tener en casa un animal sucio, que lo llenaría todo de pelo… Pero su hija le insistió tanto que acabaron teniendo uno (del que se ocuparían su marido y la niña). Al poco tiempo de tenerlo, el perro enfermó y ella no sabía ni que hacer para que se recuperara. Lo pasó realmente mal. El perrito ya reconocía el ruido de sus tacones cuando llegaba a casa, se había integrado y ella no soportaba verlo mal. En ese punto pensó: no soy la mujer que pensaba que era. ¿Cuántas mentiras más me he creído sobre mí misma? Pensaba que jamás podría tener un perro y ahora mírenme... A partir de ahí empezó a mirar las cosas desde otro punto de vista. Siempre creyó que no tenía madera de emprendedora y se embarcó en negocios, etc. etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esa historia me hizo pensar en una frase que espero releer con frecuencia: NO soy todo aquello que he intentado &lt;span style="font-size:130%;"&gt;&lt;span style="font-style: italic;"&gt;sinceramente&lt;/span&gt;&lt;/span&gt; y no conseguí. Puedo llegar a ser todo lo demás.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7611901510755643276?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7611901510755643276/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/06/cuando-descubri-que-no-era-quien-creia.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7611901510755643276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7611901510755643276'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/06/cuando-descubri-que-no-era-quien-creia.html' title='Cuando descubrí que no era quien creía ser...'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-2676213606482054510</id><published>2011-06-23T19:07:00.006Z</published><updated>2011-06-24T06:13:25.619Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>¿Nosotros o ellos? El test de los pronombres de Reich</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Robert_Reich"&gt;Robert Reich&lt;/a&gt; es un político americano (fue secretario de trabajo durante la presidencia de Bill Clinton) ideó un test bastante ingenioso para medir la salud de una organización. Al hablar con un empleado escucha atentamente los pronombres que usan para referirse a la empresa. Si usan "nosotros" es síntoma de que se sienten parte de algo importante y con significado.&lt;br /&gt;&lt;br /&gt;Puedes consultar la entrevista hecha a Reich &lt;a href="http://www.pbs.org/wgbh/pages/frontline/america/interviews/reich.html"&gt;aquí&lt;/a&gt;. La parte en la que pone "&lt;span style="font-style: italic;"&gt;I'm not going to do one extra thing for this company that I don't have to do." &lt;/span&gt;la he escuchado en varias ocasiones. Con esta filosofía desde luego la empresa es difícil que llegue lejos, o por lo menos, que llegue a donde podría llegar.&lt;br /&gt;&lt;br /&gt;Afortunadamente, yo uso el nosotros... ¿y tú? ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-2676213606482054510?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/2676213606482054510/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/06/nosotros-o-ellos-el-test-de-los.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/2676213606482054510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/2676213606482054510'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/06/nosotros-o-ellos-el-test-de-los.html' title='¿Nosotros o ellos? El test de los pronombres de Reich'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5297583796669692923</id><published>2011-05-18T17:15:00.005Z</published><updated>2011-05-19T06:22:28.710Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Motivación intrínseca: el origen</title><content type='html'>He leído mucho sobre la motivación intrínseca, pero hasta hace poco no sabía cuándo había surgido este término, quién lo introdujo, etc. Gracias a &lt;a href="http://www.agapea.com/libros/LA-SORPRENDENTE-VERDAD-SOBRE-QUE-GESTI-isbn-8498750784-i.htm"&gt;Daniel H. Pink&lt;/a&gt; ahora sí lo sé y puedo contártelo &lt;img src="http://ingprod.com/images/smile.gif"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-UBlDh79dXpM/TdQK616tZxI/AAAAAAAAAsU/14J8EE_Epm0/s1600/rhesus"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 213px;" src="http://3.bp.blogspot.com/-UBlDh79dXpM/TdQK616tZxI/AAAAAAAAAsU/14J8EE_Epm0/s320/rhesus" alt="" id="BLOGGER_PHOTO_ID_5608119442005124882" border="0"&gt;&lt;/a&gt;Se señala a &lt;a href="http://en.wikipedia.org/wiki/Harry_Harlow"&gt;Harry F. Harlow&lt;/a&gt; como el primero en distinguir entre motivación intrínseca y las recompensas externas. Esta distinción es el fruto de un estudio realizado por Harlow, junto a dos colegas, en el que dieron a ocho &lt;a href="http://es.wikipedia.org/wiki/Macaca_mulatta"&gt;monos rhesus&lt;/a&gt; un rompecabezas mecánico durante dos semanas.&lt;br /&gt;&lt;br /&gt;Desde un principio los monos empezaron a jugar con el rompecabezas, mostrándose concentrados en la tarea. Nadie les enseñaría a resolverlo, no fueron animados a hacerlos ni se les planteaba necesidades externas; pero al final del estudio, eran capaces de dar con la solución con frecuencia y de forma rápida.&lt;br /&gt;&lt;br /&gt;El resultado era muy extraño. Hasta entonces, los científicos creían que la conducta está condicionada principalmente por dos impulsos: el biológico y las recompensas y castigos. Pero con la solución del rompecabezas no obtenían comida, agua u otras cosas que pudieran satisfacer sus necesidades biológicas. Y tampoco habían recibido recompensas o afecto al resolverlos.&lt;br /&gt;&lt;br /&gt;Se obtuvo  un aprendizaje significativo y un rendimiento eficiente sin recurrir a motivadores extrínsecos. ¿Qué había ocurrido?. Para dar respuesta Harlow formuló una nueva teoría que apuntaba a un tercer impulso. La tarea en sí misma era una gratificación intrínseca. Los monos resolvían el rompecabezas simplemente porque disfrutaban haciéndolo. A este nuevo impulso, Harlow lo acabó llamando &lt;font style="font-weight: bold; font-style: italic;"&gt;motivación intrínseca&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;Estos fueron sólo los primeros pasos, pero ya hablaré en más detalle del camino seguido por Harlow, que luego continuó &lt;a href="http://en.wikipedia.org/wiki/Edward_L._Deci"&gt;Deci&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5297583796669692923?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5297583796669692923/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/05/motivacion-intrinseca-el-origen.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5297583796669692923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5297583796669692923'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/05/motivacion-intrinseca-el-origen.html' title='Motivación intrínseca: el origen'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-UBlDh79dXpM/TdQK616tZxI/AAAAAAAAAsU/14J8EE_Epm0/s72-c/rhesus' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8914018091383286059</id><published>2011-03-12T07:18:00.003-01:00</published><updated>2011-03-12T07:45:16.367-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><category scheme='http://www.blogger.com/atom/ns#' term='organización personal'/><title type='text'>Calcular la hipoteca de tus tareas + abandonar la mierda</title><content type='html'>Hace tiempo que no escribía nada, probablemente por la segunda idea del título de esta entrada, aunque luego matizaré un poco el concepto "mierda". Lo cierto es que seguía dos ideas que luego vi por escritas en sitios distintos, por personas distintas, y que refleja a la perfección la forma en la que intento gestionar mi tiempo ahora mismo.&lt;br /&gt;&lt;br /&gt;Por un lado está &lt;a href="http://thinkwasabi.com/2011/02/hipoteca-tareas-diarias/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+thinkwasabi+%28ThinkWasabi%29&amp;amp;utm_content=Google+Reader"&gt;este artículo&lt;/a&gt; de Berto Pena, que nos invita a:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Identificar aquellas tareas que realizamos día a día (por ejemplo leer el mail) y que nos quitan tiempo y atención para otras más importantes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Anotar cuánto tiempo de media nos quita cada una de las tareas identificadas.&lt;/li&gt;&lt;li&gt;Calcular el total del tiempo invertido.&lt;/li&gt;&lt;li&gt;Plantearse cuánto vale un minuto de nuestra vida y con ello ver cuánto pagamos diariamente por todo el tiempo invertido en las tareas que hemos anotado.&lt;/li&gt;&lt;li&gt;Luego nos propone una serie de ideas para reducir el coste de lo que llama &lt;span style="font-style: italic;"&gt;hipoteca diaria&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;A esta idea, siguiendo con la analogía, yo añado la compra de tiempo a crédito. No sólo gastamos un tiempo muy valioso diariamente casi sin que nos demos cuenta, sino que además muchas veces no disponemos de ese tiempo y lo cogemos prestado de otras tareas. El problema, es que a la larga la deuda se acumula.&lt;br /&gt;&lt;br /&gt;Sin haber llegado a este artículo, personalmente (por eso de año nuevo propósitos nuevos) ya había hecho un cálculo del tiempo que gastaba y en qué. También había detectado que parte de ese tiempo en realidad era tiempo que tendría que estar asignado a otras tareas a las que  ya les debía demasiado. En ese punto, empecé a dar pasos lógicos: evitar las tareas que generen un menor beneficio (cuánto me aportan / cuánto me cuestan).&lt;br /&gt;&lt;br /&gt;Para expresar esta forma de gestionar el tiempo, en la que vamos descartando aquellas cosas "menos rentables" me quedo con un fragmento de una entrevista hecha a Steve Jobs que leí hace poco. Relata parte de una conversación telefónica entre &lt;a href="http://en.wikipedia.org/wiki/Mark_Parker"&gt;Mark Parker&lt;/a&gt; y Steve Jobs en la que Parker le preguntó a Jobs si tenía algún consejo que darle:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-weight: bold; font-style: italic;"&gt;Hacéis algunos de los mejores productos,&lt;br /&gt; pero también mucha mierda.&lt;br /&gt; Abandona la mierda y céntrate en lo bueno.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Es una idea muy simple, pero coincide a la perfección con lo que estaba haciendo y me pareció un gran consejo: simple, conciso, directo, ... efectivo. Como decía al principio, en mi caso no doy un sentido tan literal al concepto mierda. Es cierto que he dejado de lado tareas que igual sí que están más cerca del significado que le da Jobs (como el foro :P ), pero también he tenido que dejar de lado tareas que para nada son una mierda (como las charlas de Agile-Canarias) para poder reducir mi deuda con otras tareas que por los motivos que sean, son más rentables (desde el punto de vista de la gestión del tiempo, claro).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8914018091383286059?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8914018091383286059/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/03/calcular-la-hipoteca-de-tus-tareas.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8914018091383286059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8914018091383286059'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/03/calcular-la-hipoteca-de-tus-tareas.html' title='Calcular la hipoteca de tus tareas + abandonar la mierda'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6649179030758093689</id><published>2011-01-17T16:51:00.004-01:00</published><updated>2011-01-18T06:54:22.679-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Los seis sombreros</title><content type='html'>&lt;a href="http://es.wikipedia.org/wiki/Edward_De_Bono"&gt;Edward de Bono&lt;/a&gt; propone una metodología realmente interesante que puede ser usada en todo tipo de situaciones, como puede ser una reunión, negociaciones, etc. Esta metodología es conocida como "Los seis sombreros".&lt;br /&gt;&lt;br /&gt;El nombre es debido a que emplea la metáfora de los sombreros pensantes, asociando seis sombreros de diferentes colores con ciertas formas de pensar. La asociación es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El &lt;span style="font-weight: bold; font-style: italic;"&gt;sombrero blanco&lt;/span&gt; representa la neutralidad. Sólo se tienen en cuenta hechos y datos objetivos.&lt;/li&gt;&lt;li&gt;El &lt;span style="font-weight: bold; font-style: italic;"&gt;sombrero rojo&lt;/span&gt; se asocia a las emociones. Aporta un punto de vista intuitivo sin reparar en justificaciones.&lt;/li&gt;&lt;li&gt;El &lt;span style="font-weight: bold; font-style: italic;"&gt;sombrero negro&lt;/span&gt; aportará el pesimismo. Se centra en indicar por qué algo no puede hacerse.&lt;/li&gt;&lt;li&gt;El &lt;span style="font-weight: bold; font-style: italic;"&gt;sombrero amarillo&lt;/span&gt; es el opuesto al sombrero negro y aporta un punto de vista positivo. Se centra en buscar los beneficios.&lt;/li&gt;&lt;li&gt;La creatividad va a cargo del &lt;span style="font-weight: bold; font-style: italic;"&gt;sombrero verde&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;El &lt;span style="font-weight: bold; font-style: italic;"&gt;sombrero azul&lt;/span&gt; organizará y controlará todo el proceso de pensamiento. No fija su foco en el asunto que se trata, sino que mantiene una visión global.&lt;/li&gt;&lt;/ul&gt;Entre las muchas aplicaciones que puede tener esta técnica, me parece muy interesante a la hora de tomar decisiones en un equipo. Por un lado, promueve la creatividad y facilitará la aparición de nuevas ideas. Por otro, rompe ciertas barreras y permite que fluyan las ideas y opiniones de una forma más efectiva.&lt;br /&gt;&lt;br /&gt;Por ejemplo, imagina que se ha hecho una propuesta con la que todo el equipo está entusiasmado, pero hay algo que no acabas de ver claro. Puede que para no contagiar de ese pesimismo al equipo, o por timidez, o por lo que sea... no expongas tus dudas. Con esta técnica, llegará el momento de asumir el papel de pesimista y todos tendrán que enfocar sus opiniones desde ese punto de vista, con lo que aflorarán todas las dudas que puedan haber en el equipo. Lo mismo ocurrirá con los otros cuatro puntos de vista.&lt;br /&gt;&lt;br /&gt;Existen varias aproximaciones para combinar los sombreros, supongo que lo mejor es probar y establecer un proceso en el que nos sintamos cómodos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6649179030758093689?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6649179030758093689/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/01/los-seis-sombreros.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6649179030758093689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6649179030758093689'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/01/los-seis-sombreros.html' title='Los seis sombreros'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6158210172617005119</id><published>2011-01-02T19:30:00.004-01:00</published><updated>2011-01-02T19:37:45.459-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='organización personal'/><title type='text'>Veinticuatro horas: ni más ni menos.</title><content type='html'>&lt;div style="text-align: center; font-style: italic;"&gt;No hay nada más equitativamente repartido&lt;br /&gt;en el mundo que la razón; todos creen tener suficiente.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;René Descartes&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Creo que con el tiempo pasa justo lo contrario: nadie tiene suficiente. Debe haber pocas personas que no hayan usado alguna vez la frase “es que no tengo tiempo”, o alguna variante para justificar una decisión.&lt;br /&gt;&lt;br /&gt;Estamos en una época que propicia la reflexión sobre lo que hemos hecho y sobre lo que queremos hacer. En esta reflexión me he dado cuenta de lo irresponsable que puede llegar a ser usar esta excusa.&lt;br /&gt;&lt;br /&gt;Para empezar, lo cierto es que TODOS disponemos de veinticuatro horas al día, ni un segundo más, ni un segundo menos. Y teniendo en cuenta que somos libres para decidir qué hacemos y qué no, la frase “es que no tengo tiempo” carece de sentido en la mayoría de los casos. (Soy consciente de que esta generalización no es del todo cierta, pero temas como la esclavitud o explotación infantil no están en el ámbito de este blog y para los posibles lectores la afirmación sí que es cierta).&lt;br /&gt;&lt;br /&gt;Puede parecer una tontería, pero en estos días he estado pensando que lo que he dicho en el párrafo anterior es una idea clave. Pongamos por ejemplo una situación típica: no hacemos tests porque no tenemos tiempo. Si no damos por válida esta justificación nos obligamos a ir más allá... para otros equipos, que desarrollan software de calidad y en tiempos establecidos, los tests son un ingrediente indispensable. Esos equipos trabajan el mismo número de horas que el resto. Luego, ¿por qué no hacemos tests? Y a partir de ahí, debemos afrontar la realidad y buscar los motivos en elementos de los que debemos responsabilizarnos (falta de formación, falta de práctica, falta de organización, …) y no dejarlo de la mano de algo incontrolable como es el tiempo. Con esta nueva mentalidad, al final encontraremos la causa real y, o decidimos trabajar para eliminar los impedimentos que tengamos, o por lo menos seremos honesto con nosotros mismos y con el resto.&lt;br /&gt;&lt;br /&gt;Prohibir esta frase, “no tengo tiempo”, no sólo nos obliga a responsabilizarnos de nuestra situación sino que hará que seamos más respetuosos con el resto. Pongamos otro ejemplo: la gente que ha organizado la &lt;a href="http://www.aos2010.agile-spain.com/"&gt;OAS2010&lt;/a&gt;. Seguro que al invitar a algún amigo/compañero han recibido por respuesta: “me gustaría, pero es que no tengo tiempo”. ¿Qué quiere decir esto? ¿Que la gente que lo ha organizado, que además asistirán, tienen días más largos que el resto de los mortales? ¿Qué tienen menos obligaciones? La realidad es que esa gente, a la que debemos estar muy agradecidos, no han podido hacer otras cosas mientras estaban con la organización. Personalmente creo que sería mucho más correcto algo como “es que prefiero hacer otras cosas”, “es interesante, pero no tanto como para que dedique mi tiempo”, “para mí ahora es más importante X”, …&lt;br /&gt;&lt;br /&gt;En lo profesional, en muchas ocasiones esta filosofía nos hará perder la etiqueta de “víctima”. ¿Queremos cambiar? ¿Queremos mejorar?... costará tiempo y debemos decidir si estamos dispuestos a invertirlo o no, pero es responsabilidad nuestra tomar la decisión, no podemos culpar al reloj.&lt;br /&gt;&lt;br /&gt;Desde luego pensar así no significa que no sea totalmente lícito decidir que no haremos algo porque queremos invertir ese tiempo en otras cosas: desde cuidar de un familiar hasta quedarnos sin hacer nada, … Lo que quiero decir es que si decido no hacer algo, debo ser consciente de que yo soy el responsable, y “es que no tengo tiempo” no es más que una excusa, que está bien si simplemente lo usamos para ahorrarnos explicaciones, pero &lt;span style="font-weight: bold;"&gt;se convierte en peligrosa cuando nos la creemos&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Y con esto en mente nace mi principal propósito para este año: no usar la frase “no tengo tiempo”. Si no hago tanto deporte como me gustaría, si no leo tanto como me había propuesto, si no practico o invierto el tiempo que considero necesario en mi formación, etc, etc... tendré que reflexionar un poco sobre ello. Al final, tendré que buscar mecanismos para conseguir aquello a lo que no estoy llegando, o rebajar mis expectativas, pero siendo consciente de que soy el responsable.&lt;br /&gt;&lt;br /&gt;Feliz Año!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6158210172617005119?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6158210172617005119/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2011/01/veinticuatro-horas-ni-mas-ni-menos.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6158210172617005119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6158210172617005119'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2011/01/veinticuatro-horas-ni-mas-ni-menos.html' title='Veinticuatro horas: ni más ni menos.'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5651272668077379276</id><published>2010-12-14T18:23:00.005-01:00</published><updated>2010-12-14T20:26:55.352-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>No hay fracaso, sólo retroalimentación</title><content type='html'>Hace poco escribí &lt;a href="http://eclijava.blogspot.com/2010/11/minimal-i-intente-erre-aprendi.html" target="_blank"&gt;una entrada&lt;/a&gt; sobre la actitud que deberíamos tener ante los errores. Pero este fin de semana he visto en dos sitios distintos nuevos enfoques (para mí) sobre el tema y me apetecía escribir sobre ello.&lt;br /&gt;&lt;br /&gt;Por un lado, leyendo &lt;a href="http://www.agapea.com/libros/PNL-Programacion-neurolinguistica-isbn-8441400490-i.htm" target="_blank"&gt;este libro&lt;/a&gt; sobre &lt;a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_neuroling%C3%BC%C3%ADstica" target="_blank"&gt;PNL&lt;/a&gt; (ya pondré una reseña sobre el mismo en cuanto lo termine) me encontré con este principio:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-weight: bold; font-style: italic;"&gt;No hay fracaso, sólo retroalimentación&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Normalmente, cuando algo no sale como lo hemos planeado tendemos a pensar que hemos fracasado. En PNL, que las cosas no salgan como se han planeado no es ni bueno ni malo, simplemente es información. Cito el ejemplo del libro:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Si hizo rechinar los cambios al aprender a conducir, ello no significa que fracasó como conductor... sólo que aprendió cuáles eran los resultados de cambiar de marcha de esa manera específica, cambió su comportamiento y en consecuencia se benefició&lt;/span&gt;.&lt;br /&gt;En el ejemplo, se usa la información para mejorar. Este cambio de mentalidad es fundamental, ya que la sensación de fracaso siempre afecta de forma negativa a nuestro comportamiento.&lt;br /&gt;&lt;br /&gt;Por otro lado, en la charla de &lt;a href="http://twitter.com/search?q=%23AgileCanarias" target="_blank"&gt;Agile-Canarias&lt;/a&gt;, &lt;a href="http://www.carlosble.com/" target="_blank"&gt;Carlos Ble&lt;/a&gt; (que prensentó una interesantísima charla sobre XP) hablando sobre los equipos comentó algo que me gustó mucho y me parece realmente interesante. No tengo buena memoria, pero intentando ser lo más fiel posible, era algo así:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Si te equivocas, debes ser honesto y reconocerlo, el equipo lo entenderá. ¡Hombre! Si te equivocas siete veces en lo mismo...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Creo que tiene toda la razón. Debemos ser honestos, admitir que nos hemos equivocado en algo no nos hará peores profesionales, todo lo contrario. Uniendo las dos ideas anteriores, aprenderemos a reconocer nuestros errores sin sentimiento de culpabilidad ni de fracaso. Sabremos mejorar con la información que esos errores nos ofrece y por tanto habremos mejorado un poco, a la vez que somos transparentes y sinceros con nuestro trabajo.&lt;br /&gt;&lt;br /&gt;En el libro aparecen dos ejemplos que me llamaron mucho la atención y que me gustaría citar:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Fracasó en los negocios a la edad de 31 años.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Fue derrotado en una campaña legislativa a los 32.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Volvió a fracasar en los negocios  a los 34.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Experimentó la muerte de su novia a los 35.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Tuvo una crisis nerviosa a los 36.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Perdió unas elecciones a los 38.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Perdió una campaña para el Congreso a los 43.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Perdió una campaña para el Congreso a los 46.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Perdió una campaña para el Congreso a los 48.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Perdió una campaña al Senado a los 55.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Fracasó en un esfuerzo por convertirse en vicepresidente de los EE.UU. a los 56.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Perdió una campaña al Senado a los 58.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204); font-weight: bold;"&gt;Fue elegido presidente a los 60.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204);"&gt;Su nombre era Abraham Lincoln.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Thomas Edison, después de intentar 9.999 modos de perfeccionar la bombilla eléctrica, insistió: "No fracasé. Simplemente descubrí otra manera de no inventar la bombilla eléctrica."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En resumen, creo que hay que ser bastante maduro para aprender de los errores y asumirlos sin miedos, en vez de sentirnos frustrados con ellos. Éste es el camino correcto.&lt;br /&gt;&lt;br /&gt;Para seguir con la dinámica de la &lt;a href="http://eclijava.blogspot.com/2010/12/fish.html" target="_blank"&gt;entrada anterior&lt;/a&gt;, te recomiendo visitar &lt;a href="http://www.dosisdiarias.com/2010/11/feliz-cumpleanos-4-anos-de-humor-para.html" target="_blank"&gt;este enlace&lt;/a&gt;, que muestra un grave error y espero que consiga una sonrisa &lt;img src="http://ingprod.com/images/smile.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5651272668077379276?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5651272668077379276/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/12/no-hay-fracaso-solo-retroalimentacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5651272668077379276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5651272668077379276'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/12/no-hay-fracaso-solo-retroalimentacion.html' title='No hay fracaso, sólo retroalimentación'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5400847601159872628</id><published>2010-12-07T19:10:00.003-01:00</published><updated>2010-12-07T21:35:03.323-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libros'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Fish</title><content type='html'>Arquímedes decía sobre la palanca: "dadme un punto de apoyo y moveré el mundo". Yo tengo claro que mi punto de apoyo es la familia (en su más amplio sentido). La palanca adecuada podría ser una aleación de una buena gestión del tiempo y la motivación adecuada. Por esto, me decidí a leer &lt;a href="http://www.agapea.com/libros/FISH--isbn-8495787474-i.htm"&gt;fish&lt;/a&gt;. Por eso, y porque en su contraportada leí algo que me enganchó:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;El trabajo es una recompensa para quien disfruta de él&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;El libro cuenta el reto al que se enfrenta Mary Jane, la protagonista, cuando es ascendida como jefa de un departamento que se había ganado la empatía del resto de los trabajadores. Para referirse a este departamento se usaban frases como "no responden", "son insoportables", "están en el limbo", ... "vertedero de energía tóxica".&lt;br /&gt;&lt;br /&gt;Un día Mary Jane llega por casualidad a &lt;a href="http://en.wikipedia.org/wiki/Pike_Place_Market"&gt;Pike Place&lt;/a&gt;, un famoso mercado. Allí descubre cuatro ingredientes que cambiarán su vida, el departamento que dirige y a todos sus miembros. Descubrirá como con estos cuatro ingredientes, los trabajadores de ese mercado hacen su trabajo diferente, disfrutando de él.&lt;br /&gt;&lt;br /&gt;Realmente recomiendo leer el libro. Cuenta una historia ficticia, basada en la historia real del mercado, pero al menos yo sentí que los principios son aplicables en la vida real. Es tan corto que no merece la pena que lo destripe contando esos cuatro ingredientes aquí. No soy especialmente rápido leyendo y lo acabé ayer en "una sentada", por lo que puedes verlo así: si no te gusta sólo habrás perdido un rato. Si te gusta, igual podrá ayudarte el resto de tu vida laboral. Personalmente espero tenerlo presente cuando me toque "liderar" un equipo.&lt;br /&gt;&lt;br /&gt;Poniendo en práctica uno de los ingredientes ("alegrarles el día"), dejo este vídeo de un fan de Bob Marley y espero que por lo menos la entrada sirva para arrancar una sonrisa &lt;img src="http://ingprod.com/images/smile.gif" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Gd5yN43TqCk?fs=1&amp;amp;hl=es_ES"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Gd5yN43TqCk?fs=1&amp;amp;hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="640"&gt;&lt;/embed&gt;&lt;/object&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/4286784136012598160-5400847601159872628?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5400847601159872628/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/12/fish.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5400847601159872628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5400847601159872628'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/12/fish.html' title='Fish'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-3594226323234426595</id><published>2010-11-22T18:48:00.004-01:00</published><updated>2010-11-24T05:12:54.368-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='equipos estimación'/><title type='text'>Minimal (III): Estimando con la Güija.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/TOrJcIa32LI/AAAAAAAAANs/1SxreN53GzI/s1600/75269_9698.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/TOrJcIa32LI/AAAAAAAAANs/1SxreN53GzI/s200/75269_9698.jpg" alt="" id="BLOGGER_PHOTO_ID_5542463776566532274" border="0" /&gt;&lt;/a&gt;Poniendo al día el blog de &lt;a href="http://es.linkedin.com/in/angelagueda"&gt;Angel Agueda&lt;/a&gt; me encontré con una curiosa técnica de estimación, basada en la &lt;a href="http://es.wikipedia.org/wiki/G%C3%BCija"&gt;Güija&lt;/a&gt;. Como la idea de la serie &lt;span style="font-style: italic;"&gt;Minimal&lt;/span&gt; es escribir entradas muy cortas no voy a explicar de qué va, ya que Angel lo ha hecho muy bien en &lt;a href="http://legnita.wordpress.com/2010/11/04/estimacion-de-guija/"&gt;esta entrada&lt;/a&gt;, y &lt;a href="http://www.scrumalliance.org/articles/195-ouija-board-estimation"&gt;aquí puedes ver&lt;/a&gt; el artículo del que parte la idea.&lt;br /&gt;&lt;br /&gt;Desde luego es una opción ingeniosa, aunque a voz de pronto el pero que le veo es que no "obliga" a los participantes a implicarse. En otras técnicas, como estimación de póker, todos deben pensar en un valor antes de tener inforamción del resto. Si ese valor se desvía mucho de la media, habrá que explicar por qué lo hemos elegido, por lo que la elección debe ser mínimamente responsable. Con esta técnica, simplemente puedes dejarte llevar. Por otro lado, los miembros más decididos tendrán las de ganar y puede que ese sea un inconveniente en ciertos grupos, en los que alguien con razones de peso para elegir otro valor, se deje llevar por inseguridad, timidez u otras razones.&lt;br /&gt;&lt;br /&gt;Supongo que dependerá de los equipos y cada situación. Desde luego, lo interesante es conocer una nueva opción, bastante ingeniosa en mi opinión.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-3594226323234426595?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/3594226323234426595/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/11/minimal-iii-estimando-con-la-guija.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3594226323234426595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3594226323234426595'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/11/minimal-iii-estimando-con-la-guija.html' title='Minimal (III): Estimando con la Güija.'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/TOrJcIa32LI/AAAAAAAAANs/1SxreN53GzI/s72-c/75269_9698.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5585075835376269614</id><published>2010-11-21T17:05:00.004-01:00</published><updated>2010-11-22T05:05:25.285-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>El framework Play</title><content type='html'>Hace un par de semanas tuve que empezar un pequeño proyecto para una empresa, por lo que tenía que decidir el entorno en el que lo haría. Uno de mis objetivos (bastante importante) era poder entregar nuevas funcionalidades muy rápido, lo que limita bastante las opciones: por un lado, no podía dedicar tiempo a buscar herramientas más allá de las que ya conocía; por otro, de las opciones que conocía debía descartar aquellas que no dominaba lo suficiente. Esto, unido a las ganas de probar &lt;a href="http://www.playframework.org/"&gt;Play&lt;/a&gt;, me hizo decidirme. Aunque digo probar, y no usar algo que no conociera era un requisito, en realidad iba a trabajar con Java, y ya había mirado la documentación de Play y me parecía realmente sencillo. También estaba convencido que cumpliría con las necesidades del proyecto.&lt;br /&gt;&lt;br /&gt;Hay muchas cosas muy interesantes (copia alguna de las ventajas de los lenguajes dinámicos), en la página del framework destacan &lt;a href="http://www.playframework.org/documentation/1.0/5things"&gt;estas cinco&lt;/a&gt; y &lt;a href="http://www.rojotek.com/blog/2010/04/10/eleven-reasons-to-use-the-play-framework-for-java-web-development/"&gt;aquí exponen once&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;. Para mí, una de ellas es la facilidad para desplegar una aplicación y todas las opciones que dan. Con poco más de cinco líneas de explicación el usuario tenía el entorno en su propio equipo (por sus necesidades, usarla como aplicación independiente era más que suficiente, al menos de momento).&lt;br /&gt;&lt;br /&gt;La &lt;a href="http://www.playframework.org/documentation/1.0/home"&gt;documentación que ofrecen&lt;/a&gt; está muy bien (ha cubierto casi todo lo que he ido necesitando, y no descarto que lo poco que no he encontrado haya sido por no buscar bien) y para buscar lo que quede fuera hay varios blogs o también está &lt;a href="http://groups.google.com/group/play-framework"&gt;este grupo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Si te interesa probarlo, puedes seguir &lt;a href="http://www.playframework.org/"&gt;este vídeo&lt;/a&gt; o seguir el tutorial &lt;a href="http://www.playframework.org/documentation/1.0/firstapp"&gt;Your first Play application&lt;/a&gt;. También diría que podemos compartir un proyecto y practicar juntos, pero no me ha salido bien los dos intentos anteriores, así que mejor no &lt;img src="http://ingprod.com/images/smile.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5585075835376269614?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5585075835376269614/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/11/el-framework-play.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5585075835376269614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5585075835376269614'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/11/el-framework-play.html' title='El framework Play'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8414676750938765632</id><published>2010-11-18T18:46:00.006-01:00</published><updated>2010-11-18T21:26:01.058-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse debug'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Minimal(II): Uso de filtros cuando depuramos en Eclipse</title><content type='html'>Mi compañero José Luis, un autentico crack, me comentó hace algún tiempo un truquito de Eclipse que no conocía y que permite crear filtros para evitar saltar al código de ciertas clases. Podemos definir qué paquetes o clases queremos ignorar y aunque usemos el F5 (Step Into) en una llamada a algún método de dicho paquete o clase, no se entrará en él.&lt;br /&gt;&lt;br /&gt;Para configurar los filtros nos dirigimos a &lt;span style="font-weight: bold; font-style: italic;"&gt;Windows -&gt; Preferences -&gt; Java -&gt; Debug -&gt; Step Filtering&lt;/span&gt;. Una vez allí activamos la casilla &lt;span style="font-weight: bold; font-style: italic;"&gt;Use Step Filters&lt;/span&gt; y ya podremos agregar los filtros.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/__M-jEzMkoHM/TOWGnjBOkuI/AAAAAAAAANk/3p2r8ysNM7g/s1600/filtros.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 167px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/TOWGnjBOkuI/AAAAAAAAANk/3p2r8ysNM7g/s200/filtros.png" alt="" id="BLOGGER_PHOTO_ID_5540982930522673890" border="0" /&gt;&lt;/a&gt;Aunque antes he dicho que no se entrará al código de las clases/paquetes que incluyamos en el filtro, no es del todo cierto. Si incluimos por ejemplo una clase nuestra, pero en esta agregamos breakpoints, sí que se parará la depuración en esos puntos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8414676750938765632?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8414676750938765632/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/11/minimalii-uso-de-filtros-cuando.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8414676750938765632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8414676750938765632'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/11/minimalii-uso-de-filtros-cuando.html' title='Minimal(II): Uso de filtros cuando depuramos en Eclipse'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/TOWGnjBOkuI/AAAAAAAAANk/3p2r8ysNM7g/s72-c/filtros.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-202847146416213852</id><published>2010-11-17T18:05:00.003-01:00</published><updated>2010-11-17T20:05:14.586-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Minimal (I): Intenté, erré, aprendí</title><content type='html'>&lt;span style="font-style: italic;"&gt;Suelo tomar notas de artículos, comentarios, etc... de los cuales creo que sería interesante hablar en el blog, pero la falta de tiempo ha hecho que no pueda elaborar esas pequeñas ideas para crear una nueva entrada. Como se me está saturando &lt;/span&gt;&lt;a style="font-style: italic;" href="http://es.wikipedia.org/wiki/Getting_Things_Done"&gt;la bandeja&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, he decidido que esta semana voy a escribir una serie de pequeñas entradas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aún recuerdo cuando de niño mis tías siempre me decían "no se equivoca el que no hace nada". Ellas no castigaban los errores, premiaban el valor de intentarlo. De entre las muchas cosas que me enseñaron, ésta es una idea que intento tener siempre presente. Cada día tenemos que tomar decisiones, tanto en nuestro trabajo como en nuestra vida personal, y si dejamos que el miedo a equivocarnos nos paralice, estamos condenados a no avanzar. "Ya sabes por qué salió mal, para la próxima lo harás mejor" era otra frase que les escuchaba mucho.&lt;br /&gt;&lt;br /&gt;Si tropiezas y caes, pero es hacia adelante... realmente habrás avanzado. Esto pretendía ser corto, y como vale más una imagen que mil palabras, quería compartir este vídeo, al que llegué gracias a la gente de &lt;a href="http://www.pragmatic.es/"&gt;pragmatic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object height="390" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/B791YGNpmuE&amp;amp;rel=0&amp;amp;hl=es_ES&amp;amp;feature=player_embedded&amp;amp;version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/B791YGNpmuE&amp;amp;rel=0&amp;amp;hl=es_ES&amp;amp;feature=player_embedded&amp;amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="390" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-202847146416213852?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/202847146416213852/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/11/minimal-i-intente-erre-aprendi.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/202847146416213852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/202847146416213852'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/11/minimal-i-intente-erre-aprendi.html' title='Minimal (I): Intenté, erré, aprendí'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7669254827211891962</id><published>2010-09-16T05:07:00.002Z</published><updated>2010-09-16T05:09:10.233Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Nuevo curso en Gran Canaria: Gestión de Proyectos con Scrum Manager</title><content type='html'>No pude anunciar este curso junto a la edición que celebraremos en Tenerife por una serie de "problemillas". Pero ya están todos los cabos atados y me alegra poder darle publicidad por aquí.&lt;br /&gt;&lt;br /&gt;Si te apetece Aprender y comprender:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/TJEn6vbVQ-I/AAAAAAAAAMk/VcW3rmLmOUk/s1600/Curso+GC.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 142px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/TJEn6vbVQ-I/AAAAAAAAAMk/VcW3rmLmOUk/s200/Curso+GC.jpg" alt="" id="BLOGGER_PHOTO_ID_5517234908622570466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Las razones, fortalezas y debilidades de los modelos de procesos y prácticas de la industria del software.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; A gestionar proyectos y equipos de programación con los criterios de procesos y agilidad más adecuados a las características de su empresa y de su producto.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Las fortalezas, debillidades y criterios de decisión entre la gestión predictiva y la gestión ágil.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Los criterios y estrategias para la gestión ágil de organizaciones, proyectos y equipos para desarrollo de software.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Todos los componentes del modelo Scrum de forma práctica:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Propietario de producto: responsabilidades, visión, plan de producto y product backlog.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Responsabilidades y artefactos del equipo: estimación y métricas ágiles, pila del sprint (sprint backlog), gráfico de avance (burndown), pizarras kanban.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Responsabilidades y estrategias de la organización en la implantación y mejora de una "Scrum Management"&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/ul&gt;Ahora tienes la oportunidad de hacerlo de la mano de una gran profesional como es &lt;a href="http://ar.linkedin.com/in/cruata"&gt;Claudia Ruata&lt;/a&gt;. En &lt;a href="http://www.scrummanager.net/cursos/108-gestion-de-proyectos-con-scrum-manager"&gt;este enlace&lt;/a&gt; podrás encontrar más información del curso. Y en &lt;a href="http://www.scrummanager.net/index.php?option=com_content&amp;amp;view=article&amp;amp;id=130"&gt;este otro&lt;/a&gt;, realizar la inscripción.&lt;br /&gt;&lt;br /&gt;Aunque en la web no esté publicado, en este caso en concreto ofrecemos un descuento del 10% a&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt; los colegiados del  Colegio de Ingenieros Técnicos en Informática de Canarias y a los socios de la  Asociación de Ingenieros en Informática de Canarias&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Hace ya más de tres años que me vine a vivir a Tenerife y he perdido el contacto con muchos de mis compañeros. Sin contar un curso en el que colaboré con &lt;a href="http://www.carlosble.com/"&gt;Carlos&lt;/a&gt;, al que asistió un compañero que venía desde Fuerteventura, y la primera reunión de Agile-Canarias, a la que vino &lt;a href="http://es.linkedin.com/pub/n%C3%A9stor-bethencourt/12/817/a38"&gt;Néstor&lt;/a&gt;, no he coincidido con nadie más en estos andares por el agilismo. Esta puede ser una buena oportunidad para volver a pasar un buen rato juntos aprendiendo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7669254827211891962?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7669254827211891962/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/09/nuevo-curso-en-gran-canaria-gestion-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7669254827211891962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7669254827211891962'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/09/nuevo-curso-en-gran-canaria-gestion-de.html' title='Nuevo curso en Gran Canaria: Gestión de Proyectos con Scrum Manager'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__M-jEzMkoHM/TJEn6vbVQ-I/AAAAAAAAAMk/VcW3rmLmOUk/s72-c/Curso+GC.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-817874156431174505</id><published>2010-09-07T05:08:00.003Z</published><updated>2010-09-09T15:49:19.145Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Nuevo curso en Tenerife: Gestión de Proyectos con Scrum Manager - Nivel II</title><content type='html'>&lt;div style="text-align: justify;"&gt;Para &lt;a href="http://ar.linkedin.com/in/cruata"&gt;Clauida Ruata&lt;/a&gt;, &lt;a href="http://www.navegapolis.net/content/view/25/45/"&gt;Juan Palacio&lt;/a&gt; y para mí, fue muy agradable ver la buena valoración que en general hicieron los asistentes al curso &lt;a href="http://eclijava.blogspot.com/2010/04/flexibilidad-con-scrum-conclusiones.html"&gt;Flexibilidad con Scrum&lt;/a&gt; que celebramos en Tenerife en Semana Santa.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Esto, unido a la sensación de que muchos nos quedamos con las ganas de desarrollar la parte &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/TIkB1ZnJFRI/AAAAAAAAAMA/0UjVagRyVQ0/s1600/AuditorioTenerife.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 142px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/TIkB1ZnJFRI/AAAAAAAAAMA/0UjVagRyVQ0/s200/AuditorioTenerife.jpg" alt="" id="BLOGGER_PHOTO_ID_5514941235611637010" border="0" /&gt;&lt;/a&gt;práctica,  nos hizo plantearnos realizar un segundo nivel del curso. Claudia y  Juan han trabajado mucho para darle forma a esa idea y ahora en Tenerife  tendremos la oportunidad de disfrutar de la primera convocatoria del  curso &lt;a href="http://www.scrummanager.net/index.php?option=com_content&amp;amp;view=article&amp;amp;id=131"&gt;Gestión de Proyectos con Scrum Manager - Nivel II.&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;En  esta ocasión sólo hemos organizado un grupo, por lo que las plazas  estarán más limitadas que en la edición anterior. Aunque el curso será  el 8 de Noviembre y todavía queda mucho tiempo, te recomiendo que te  inscribas ya, pues realmente merecerá la pena. Claudia consigue  contagiarme su entusiasmo en cada reunión que tenemos con respecto a  este curso. Puedo asegurar que han trabajado (y continúan haciéndolo)  para ofrecer algo que seguro no querrás perderte.&lt;br /&gt;&lt;br /&gt;En el &lt;a href="http://www.scrummanager.net/index.php?option=com_content&amp;amp;view=article&amp;amp;id=131"&gt;enlace anterior&lt;/a&gt; encontrarás la descripción del curso y &lt;a href="http://www.scrummanager.net/index.php?option=com_content&amp;amp;view=article&amp;amp;id=132"&gt;en este otro&lt;/a&gt; el formulario de inscripción. Te esperamos en Noviembre &lt;img src="http://www.carlosble.com/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /&gt;&lt;br /&gt;&lt;br /&gt;P.D.: Debo agradecer a &lt;a href="http://developerscookbook.blogspot.com/"&gt;Yeray Darias&lt;/a&gt; su, como siempre incondicional, apoyo y colaboración en el diseño del cartel. Y también  le agradezco a &lt;a href="http://picasaweb.google.com/patrycja.sklodowska/Teneryfa20092010?feat=email#5435169857549353842"&gt;Patrycja&lt;/a&gt; que me haya permitido usar la foto del cartel.&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/4286784136012598160-817874156431174505?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/817874156431174505/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/09/nuevo-curso-en-tenerife-gestion-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/817874156431174505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/817874156431174505'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/09/nuevo-curso-en-tenerife-gestion-de.html' title='Nuevo curso en Tenerife: Gestión de Proyectos con Scrum Manager - Nivel II'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__M-jEzMkoHM/TIkB1ZnJFRI/AAAAAAAAAMA/0UjVagRyVQ0/s72-c/AuditorioTenerife.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-4428023445517985637</id><published>2010-07-11T17:05:00.005Z</published><updated>2010-07-15T05:34:24.947Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='organización personal'/><title type='text'>Organízate con Eficacia - David Allen</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/TDn7ixkVTuI/AAAAAAAAAKM/bbFNGlJHWPY/s1600/DSC_0005.JPG"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 133px; height: 200px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/TDn7ixkVTuI/AAAAAAAAAKM/bbFNGlJHWPY/s200/DSC_0005.JPG" alt="" id="BLOGGER_PHOTO_ID_5492697795394883298" border="0" /&gt;&lt;/a&gt;Hace un par de días que terminé de leer "&lt;a href="http://www.amazon.com/Organizate-Eficacia-Getting-Things-Spanish/dp/849662708X"&gt;Organízate con Eficacia&lt;/a&gt;" de David Allen, y la verdad es que me alegro de haberlo leído. A veces tuve la sensación de que no estaba enfocado para alguien como yo (eso de "... dile a tu secretaria que ..." se me queda grande), pero las ideas generales son aplicables para cualquier persona, sea cual sea su profesión y rol.&lt;br /&gt;&lt;br /&gt;David Allen ofrece varias técnicas para gestionar nuestras tareas y ser más eficientes evitando el estrés. Pero de todo el libro, para mí lo realmente revelador y lo que realmente supondrá un cambio en mi forma de gestionarme es el hecho de tener que anotar la acción física siguiente de cada tarea. Pararse y pensar durante un instante cuál debe ser el primer paso para realizar la tarea hace que rompamos muchos de los impedimentos que, consiente o inconscientemente, hacen que vayamos dejando tareas pendientes. Además, también es una forma natural de conseguir el "divide y vencerás" ya que en cada momento estarás obligado a centrarte en la siguiente acción, en vez de gastar energía en tratar una tarea en su totalidad.&lt;br /&gt;&lt;br /&gt;Si ahora tuviera que explicar por qué me decidí a leer este libro, usaría una de las citas que encontré en el propio libro:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Las personas que utilizan peor su tiempo son las primeras en quejarse de su escasez&lt;/span&gt;&lt;br /&gt;Jean de la Bruysre&lt;br /&gt;&lt;br /&gt;Creo que David Allen ofrece unas buenas herramientas para sacar más partido a nuestro tiempo, o por lo menos para tener un mayor control sobre él y así, siendo realmente consciente de todas nuestras responsabilidades y pudiendo decidir de forma responsable que otras asumimos, dejar de sufrir la frustración que produce no poder cumplir con nuestros compromisos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-4428023445517985637?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/4428023445517985637/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/07/organizate-con-eficacia-david-allen.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4428023445517985637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4428023445517985637'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/07/organizate-con-eficacia-david-allen.html' title='Organízate con Eficacia - David Allen'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/TDn7ixkVTuI/AAAAAAAAAKM/bbFNGlJHWPY/s72-c/DSC_0005.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1799305554807025274</id><published>2010-06-14T22:04:00.003Z</published><updated>2010-06-14T22:31:08.004Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Conferencia Agile-Spain 2010</title><content type='html'>Tras poner al día las tareas que fueron quedando pendientes mientras estaba en la &lt;a href="http://conferencia2010.agile-spain.com/"&gt;Conferencia Agile-Spain 2010&lt;/a&gt;, es hora de escribir mi impresión sobre este evento.&lt;br /&gt;&lt;br /&gt;He de ser honesto y admitir que el punto más negativo de la conferencia, para mí, lo llevaba desde casa. El networking es fundamental en este tipo de eventos y una de las actividades con las que más puedes aprender. Pero los que me conocen saben que cuando estoy con gente con la que no tengo la suficiente confianza no soy la persona más abierta del mundo y eso hizo que no lo aprovechara del todo. Si alguno de los asistentes pasara por este blog (qué orgullo &lt;img src="http://ingprod.com/images/smile.gif" /&gt;), decir que simplemente soy patológicamente introvertido, y aunque por mi actitud la imagen que refleje pueda ser de borde, rarito, antipático, … simplemente es timidez.&lt;br /&gt;&lt;br /&gt;El resto ha estado genial. Hay que felicitar a todos los que estuvieron en la organización, porque ha salido realmente bien. Desde luego, siempre hay cosas que se pueden mejorar, ya se vio en la retrospectiva que se hizo al final de la conferencia, pero eso es normal. Y el hecho de que hicieran una retrospectiva para intentar mejorar ya es otro aspecto a valorar positivamente en cuanto a la organización.&lt;br /&gt;&lt;br /&gt;En lo que al contenido se refiere, mi única pena era tener que elegir y no poder asistir a todo. Por destacar algo, debo decir que llevaba mucho tiempo leyendo a &lt;a href="http://www.presionblogosferica.com/"&gt;Ángel Medinilla&lt;/a&gt; y viendo sus vídeos, así que disfruté mucho de sus dos sesiones. Además, hubo una frase en una de ellas que seguro que usaré más de una vez. No la recuerdo literalmente, pero era algo como: &lt;span style="font-style: italic;"&gt;Nadie lee un manual para aprender a nadar. A nadar se aprende practicando, y al principio debemos estar dispuestos a tragar un poco de agua&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;También me pareció muy buena la idea que tuvo &lt;a href="http://www.agilar.org/profile/xavier.quesada"&gt;Xavier Quesada&lt;/a&gt; en una de las sesiones. Enumeró los puntos que trataría, y sobre la marcha entre todos los priorizamos, así fue tratando primero aquellos que más nos interesaban. En muy poco tiempo todo se sincronizó y estaba todo listo para que empezara la exposición. Además, es suya otra de las frases que me traigo apuntada: &lt;span style="font-style: italic;"&gt;Si los clientes están acostumbrados a que les entreguen basura, quizás se conformen con que les entreguen basura a tiempo...&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Y entre lo destacado, en mi opinión está la keynote de &lt;a href="http://www.crisp.se/henrik.kniberg"&gt;Henrik Kniberg&lt;/a&gt;. Fue realmente &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/TBapFLQatmI/AAAAAAAAAJ8/I_lhv5ACGew/s1600/DSC01882.JPG"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/TBapFLQatmI/AAAAAAAAAJ8/I_lhv5ACGew/s200/DSC01882.JPG" alt="" id="BLOGGER_PHOTO_ID_5482755502756247138" border="0" /&gt;&lt;/a&gt;interesante (también me hubiera gustado ir a su taller). Él nos hizo una visita rápida mientras impartíamos el nuestro &lt;img src="http://ingprod.com/images/smile.gif" /&gt;&lt;br /&gt;&lt;br /&gt;No podría cerrar esta entrada sin agradecer a &lt;a href="http://www.carlosble.com/"&gt;Carlos&lt;/a&gt; el haber contado conmigo y demostrar una vez más que es un gran tipo. Por ejemplo, cuando tuve el problema con el avión, él hizo suyo ese problema también y sufrió las mismas consecuencias (el jueves estuvimos en al conferencia habiendo dormido menos de cuatro horas). Dicen que quien con niños se acuesta, meado se despierta… Espero que en el sentido positivo también se cumpla, y haya aprendido algo en los días que he compartido con él.&lt;br /&gt;&lt;br /&gt;En resumen, realmente mereció la pena (algún día escribiré lo movidito que fue mi llegada) y espero poder estar en la próxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-1799305554807025274?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1799305554807025274/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/06/conferencia-agile-spain-2010.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1799305554807025274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1799305554807025274'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/06/conferencia-agile-spain-2010.html' title='Conferencia Agile-Spain 2010'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__M-jEzMkoHM/TBapFLQatmI/AAAAAAAAAJ8/I_lhv5ACGew/s72-c/DSC01882.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8486671222941580164</id><published>2010-06-05T00:14:00.007Z</published><updated>2010-06-05T07:30:38.009Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse debug'/><title type='text'>Eclipse: Breakpoints en todos los métodos o atributos de una clase</title><content type='html'>&lt;div style="text-align: center; font-style: italic;"&gt;Me siento como un mosquito en una playa nudista:&lt;br /&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: center;"&gt;sé lo que quiero, pero no por dónde empezar.&lt;br /&gt;Stephen Bayne&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Esta cita refleja muy bien lo que me pasa con las entradas que tengo pendientes para en el blog. La falta de tiempo ha hecho que se me acumulen y no sabía por cual empezar. Hace tiempo que no escribo nada sobre Eclipse, así que he elegido esta.&lt;br /&gt;&lt;br /&gt;Supón que vas a depurar una aplicación y te interesa que la ejecución pare cuando se produzca una llamada a cualquiera de los métodos de una clase concreta. Desde que haya unos cuantos métodos, poner un breakpoint en cada uno de ellos puede ser bastante tedioso. Una forma de evitar tener que ponerlos uno a uno, es a través de la vista Outline.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/TAmXl27R72I/AAAAAAAAAJk/aDMs28WsreM/s1600/blog00.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 130px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/TAmXl27R72I/AAAAAAAAAJk/aDMs28WsreM/s200/blog00.png" alt="" id="BLOGGER_PHOTO_ID_5479077098328026978" border="0" /&gt;&lt;/a&gt;Basta con seleccionar los métodos que nos interese, hacer clic con el botón derecho y elegir &lt;span style="font-weight: bold; font-style: italic;"&gt;Toggle Method Breakpoint&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/TAmXzfMuQuI/AAAAAAAAAJs/NltroeMzzaU/s1600/blog02.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 158px; height: 200px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/TAmXzfMuQuI/AAAAAAAAAJs/NltroeMzzaU/s200/blog02.png" alt="" id="BLOGGER_PHOTO_ID_5479077332476904162" border="0" /&gt;&lt;/a&gt;Otra situación que nos podría interesar mientras depuramos la aplicación, es que la ejecución pare en cualquier punto en el que se acceda a una variable concreta. Para ello, también desde la vista Outline, podemos seleccionar las variables que nos interese y pulsando el botón derecho del ratón elegimos &lt;span style="font-style: italic; font-weight: bold;"&gt;Toggle Watchpoint&lt;/span&gt;. Esto hará que la ejecución pare en cualquier punto en el que se lea o modifique las variables seleccionadas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/TAmX-2G-ZFI/AAAAAAAAAJ0/IrQRyfCYfeo/s1600/blog03.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 162px; height: 200px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/TAmX-2G-ZFI/AAAAAAAAAJ0/IrQRyfCYfeo/s200/blog03.png" alt="" id="BLOGGER_PHOTO_ID_5479077527605371986" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8486671222941580164?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8486671222941580164/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/06/eclipse-breakpoints-en-todos-los.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8486671222941580164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8486671222941580164'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/06/eclipse-breakpoints-en-todos-los.html' title='Eclipse: Breakpoints en todos los métodos o atributos de una clase'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/TAmXl27R72I/AAAAAAAAAJk/aDMs28WsreM/s72-c/blog00.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-4776936476483137893</id><published>2010-05-26T05:28:00.002Z</published><updated>2010-05-26T05:40:54.558Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>El elefante (ágil) encadenado</title><content type='html'>Hace un par de años “descubrí” a &lt;a href="http://es.wikipedia.org/wiki/Jorge_Bucay"&gt;Jorge Bucay&lt;/a&gt; a través de &lt;span style="font-style: italic;"&gt;"Cartas para Claudia"&lt;/span&gt;. La verdad es que me encantó, no sólo lo que decía sino el cómo lo hacía. De hecho, sigo teniendo muchas de las ideas que saqué de ese libro presentes en mi vida.&lt;br /&gt;&lt;br /&gt;Por eso, hace un par de semanas, durante un taller de &lt;a href="http://www.lagrua.es/archives/816"&gt;Rubén Turienzo&lt;/a&gt; al que fui con &lt;a href="http://developerscookbook.blogspot.com/"&gt;un buen amigo&lt;/a&gt;, cuando nombraron el cuento “El elefante encadenado” de Jorge Bucay, tomé nota para leerlo al llegar a casa. Como siempre, las conclusiones de las historias depende mucho de quién las lea, a mí me hizo pensar mucho en el agilismo y en la situación actual de la industria del software:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;&lt;span style="font-style: italic; color: rgb(51, 0, 153);"&gt;Cuando yo era chico me encantaban los circos, y lo que más me gustaba de los circos eran los animales. También a mí como a otros, después me enteré, me llamaba la atención el elefante.&lt;br /&gt;&lt;br /&gt;Durante la función, la enorme bestia hacía despliegue de su peso, tamaño y fuerza descomunal… pero después de su actuación y hasta un rato antes de volver al escenario, el elefante quedaba sujeto solamente por una cadena que aprisionaba una de sus patas a una pequeña estaca clavada en el suelo.&lt;br /&gt;&lt;br /&gt;Sin embargo, la estaca era sólo un minúsculo pedazo de madera apenas enterrado unos centímetros en la tierra. Y aunque la cadena era gruesa y poderosa me parecía obvio que ese animal capaz de arrancar un árbol de cuajo con su propia fuerza, podría, con facilidad, arrancar la estaca y huir.&lt;br /&gt;&lt;br /&gt;El misterio es evidente: ¿Qué lo mantiene entonces?. ¿Por qué no huye?&lt;br /&gt;&lt;br /&gt;Cuando tenía cinco o seis años, yo todavía confiaba en la sabiduría de los grandes. Pregunté entonces a algún maestro, a algún padre, o a algún tío por el misterio del elefante. Alguno de ellos me explicó que el elefante no se escapa porque estaba amaestrado.&lt;br /&gt;&lt;br /&gt;Hice entonces la pregunta obvia: “Si está amaestrado ¿por qué lo encadenan?”&lt;br /&gt;&lt;br /&gt;No recuerdo haber recibido ninguna respuesta coherente.&lt;br /&gt;&lt;br /&gt;Con el tiempo me olvidé del misterio del elefante y la estaca… y sólo lo recordaba cuando me encontraba con otros que también se habían hecho la misma pregunta.&lt;br /&gt;&lt;br /&gt;Hace algunos años descubrí que por suerte para mí alguien había sido lo bastante sabio como para encontrar la respuesta:&lt;br /&gt;&lt;br /&gt;El elefante del circo no escapa porque ha estado atado a una estaca parecida desde que era muy, muy pequeño.&lt;br /&gt;&lt;br /&gt;Cerré los ojos y me imaginé al pequeño recién nacido sujeto a la estaca.&lt;br /&gt;&lt;br /&gt;Estoy seguro de que en aquel momento el elefantito empujó, tiró y sudó tratando de soltarse. Y a pesar de todo su esfuerzo no pudo. La estaca era ciertamente muy fuerte para él.&lt;br /&gt;&lt;br /&gt;Juraría que se durmió agotado y que al día siguiente volvió a probar, y también al otro y al que le seguía…&lt;br /&gt;&lt;br /&gt;Hasta que un día, un terrible día para su historia, el animal aceptó su impotencia y se resignó a sus destino.&lt;br /&gt;&lt;br /&gt;Este elefante enorme y poderoso, que vemos en el circo, no escapa porque cree –pobre– que NO PUEDE.&lt;br /&gt;&lt;br /&gt;Él tiene registro y recuerdo de su impotencia, de aquella impotencia que sintió poco después de nacer.&lt;br /&gt;&lt;br /&gt;Y lo peor es que jamás se ha vuelto a cuestionar seriamente ese registro.&lt;br /&gt;&lt;br /&gt;Jamás… jamás… intentó poner a prueba su fuerza otra vez…&lt;br /&gt;&lt;br /&gt;Vamos por el mundo atados a cientos de estacas que nos restan libertad… condicionados por el recuerdo de «no puedo»… Tu única manera de saber, es intentar de nuevo poniendo en el intento todo tu corazón…&lt;br /&gt;&lt;br /&gt;JORGE BUCAY&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/4286784136012598160-4776936476483137893?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/4776936476483137893/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/05/el-elefante-agil-encadenado.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4776936476483137893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4776936476483137893'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/05/el-elefante-agil-encadenado.html' title='El elefante (ágil) encadenado'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6287521947867717082</id><published>2010-04-17T19:02:00.013Z</published><updated>2010-04-17T19:52:46.787Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Primeros pasos con Google App Engine</title><content type='html'>Había oído hablar de &lt;a href="http://appengine.google.com/"&gt;Google app engine&lt;/a&gt; (GAE), y sabía que ya daba soporte para Java, pero no me había puesto a probarlo. Así que el fin de semana pasado me creé una cuenta y estuve "jugando" un poco. A modo de recordatorio, apunto los pasos seguidos. Si ya sabes cómo empezar una aplicación de este tipo, o simplemente no te interesa, salta directamente al último párrafo, pues igual sí que te interesa la propuesta ;)&lt;br /&gt;&lt;br /&gt;En primer lugar accedí con mi cuenta de Google a la página de &lt;a href="http://appengine.google.com/"&gt;GAE&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/S8oHquMJ_jI/AAAAAAAAAHw/tNe9zz2clL8/s1600/01.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 92px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/S8oHquMJ_jI/AAAAAAAAAHw/tNe9zz2clL8/s200/01.png" alt="" id="BLOGGER_PHOTO_ID_5461185928675065394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Tras la autentificación, se muestra un botón para crear una nueva aplicación.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/S8oPaM6XEHI/AAAAAAAAAIw/-ldKyh9pvgY/s1600/02.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 49px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/S8oPaM6XEHI/AAAAAAAAAIw/-ldKyh9pvgY/s200/02.png" alt="" id="BLOGGER_PHOTO_ID_5461194440957169778" border="0" /&gt;&lt;/a&gt;Como sistema de seguridad, Google pedirá un número de teléfono móvil al que enviarán un código para poder continuar con el proceso.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/S8oPz7O7oNI/AAAAAAAAAI4/zaMr-Ok1kdA/s1600/03.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 66px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/S8oPz7O7oNI/AAAAAAAAAI4/zaMr-Ok1kdA/s200/03.png" alt="" id="BLOGGER_PHOTO_ID_5461194882888212690" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/S8oP9g6eCQI/AAAAAAAAAJA/J36ssf3fXo8/s1600/04.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 53px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/S8oP9g6eCQI/AAAAAAAAAJA/J36ssf3fXo8/s200/04.png" alt="" id="BLOGGER_PHOTO_ID_5461195047621757186" border="0" /&gt;&lt;/a&gt;Cuando hayamos introducido el código que nos facilitan, debemos indicar un nombre para la aplicación (comprobando que no exista ya) y una descripción.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/S8oI12PgCbI/AAAAAAAAAIQ/qx6UN5JHJ24/s1600/05.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 112px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/S8oI12PgCbI/AAAAAAAAAIQ/qx6UN5JHJ24/s200/05.png" alt="" id="BLOGGER_PHOTO_ID_5461187219326765490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/S8oQO1-Z8bI/AAAAAAAAAJI/jTeJA1UJ2Nk/s1600/06.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 66px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/S8oQO1-Z8bI/AAAAAAAAAJI/jTeJA1UJ2Nk/s200/06.png" alt="" id="BLOGGER_PHOTO_ID_5461195345333186994" border="0" /&gt;&lt;/a&gt;En este punto, ya podríamos subir nuestra aplicación a los servidores de Google. Para poder implementarla, usaré Eclipse y para ello he instalado el plugin correspondiente que puedes descargar usando esta url: http://dl.google.com/eclipse/plugin/3.4. Cuando tengamos este plugin, podremos crear un nuevo tipo de proyecto (Web Application Project) asociado a un icono con la imagen de una 'g'.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/S8oKCh__DKI/AAAAAAAAAIg/8Wi2PD84LIY/s1600/07.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 68px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/S8oKCh__DKI/AAAAAAAAAIg/8Wi2PD84LIY/s200/07.png" alt="" id="BLOGGER_PHOTO_ID_5461188536742907042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Tendremos que seleccionar un nombre para el proyecto (que no tiene que coincidir con el nombre que dimos a la aplicación en GAE) y un paquete. También nos debemos asegurar de que no está marcada la casilla "Use Google Web Toolkit".&lt;br /&gt;&lt;br /&gt;Por defecto se crean algunas clases y vistas. Para ejecutarlas o depurarlas, al pulsar con el botón derecho sobre el proyecto tanto en la opción "Run as" como en "Debug as" veremos nuevamente un icono con la 'g' y la etiqueta "Web Application".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/S8oLJOGV3XI/AAAAAAAAAIo/BrNExgG9fyY/s1600/12.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 52px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/S8oLJOGV3XI/AAAAAAAAAIo/BrNExgG9fyY/s200/12.png" alt="" id="BLOGGER_PHOTO_ID_5461189751171571058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Desde Eclipse podemos desplegar la aplicación en Google, pulsando con el botón derecho sobre el proyecto Google -&gt; Deploy to App Engine. Debemos indicar nuestra cuenta y contraseña en Google para poder subir la aplicación. También hay que acceder a la opción "App Engine Project Settings..." y rellenar los campos "Application ID" (nombre que dimos en GAE a la aplicación) y un número para la versión (en GAE tendremos un historial con las versiones que se van subiendo y en un momento dado se puede indicar que se use cualquiera de ellas).&lt;br /&gt;&lt;br /&gt;Como ven, es realmente sencillo. &lt;a href="http://gregoriomena.appspot.com/inicio.jsp"&gt;Aquí&lt;/a&gt; pueden ver el estado actual de las pruebas que he ido haciendo. Mi intención es ir añadiendo funcionalidad a la aplicación y me gustaría hacerlo de forma colaborativa (Google permite asociar a varias personas a un proyecto para poder colaborar). El primer hito es permitir hacer estimación de poker y me gustaría que lo hiciéramos juntos. Ya intenté algo parecido hace tiempo, pero al no haber nada definido todo quedó en el aire. Ahora ya hay una idea, un entorno, ... faltan ganas. Y si tienes... pues a currar que yo estaré encantado. Creo que esto ofrece muchas posibilidades de aprender entre todos. Puedes mandarme un correo, comentar esta entrada, o rellenar el formulario que he incluido en la aplicación (opción "Participar" en el menú principal).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6287521947867717082?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6287521947867717082/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/04/primeros-pasos-con-google-app-engine.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6287521947867717082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6287521947867717082'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/04/primeros-pasos-con-google-app-engine.html' title='Primeros pasos con Google App Engine'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/S8oHquMJ_jI/AAAAAAAAAHw/tNe9zz2clL8/s72-c/01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-2584004921335984121</id><published>2010-04-09T19:01:00.004Z</published><updated>2010-04-10T08:47:33.915Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Responsabilidad de todos</title><content type='html'>Si me preguntaran qué se debe cambiar para salir de la crisis en la que lleva metido el desarrollo de software tanto tiempo, no tendría claro del todo la respuesta ¿La relación con el cliente, las metodologías (producto, proyecto y gerencia), las herramientas, …? Probablemente le pase lo mismo a la mayoría, o ya no tendríamos este problema.&lt;br /&gt;&lt;br /&gt;Aunque si me preguntaran quién es el responsable del cambio sí que lo tendría claro: TÚ, ... YO, ... &lt;span style="font-weight:bold;"&gt;TODOS&lt;/span&gt;. No importa el papel que juegues en la empresa, cuál sea tú rol ni la posición en la jerarquía… todos podemos/debemos contribuir al cambio.&lt;br /&gt;&lt;br /&gt;Es frecuente escuchar que hacemos propuestas pero nadie nos escucha. La verdad es que muchas veces cuando hacemos esas propuestas creemos que nuestros jefes, o quienes deben tomar las decisiones, son los reyes magos. Creemos que basta con entregarles nuestra lista de peticiones y listo.&lt;br /&gt;&lt;br /&gt;Debemos ser honestos con nosotros mismos: una propuesta sola no vale nada. Es la responsabilidad, la convicción y la capacidad de trabajo que acompaña a la idea lo que hace que pueda prosperar. Si crees en lo que haces, estás dispuesto a luchar por ello y lo haces de forma responsable, al final acabarás consiguiendo tus propósitos. La pregunta es: ¿estamos dispuestos?&lt;br /&gt;&lt;br /&gt;No digo que debamos convertirnos en héroes y arrastrar por los demás. Simplemente creo que debemos “darles un empujoncito” para que miren hacia el camino que consideramos correcto y andarlo juntos. No me resulta fácil expresar lo que pienso sobre este tema, pero gracias a &lt;a href="http://www.presionblogosferica.com"&gt;Ángel&lt;/a&gt; he descubierto un vídeo que expresa a la perfección lo que quiero reflejar:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="400" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BCPrNg1SO_g&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=es_ES&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/BCPrNg1SO_g&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=es_ES&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="400" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-2584004921335984121?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/2584004921335984121/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/04/responsabilidad-de-todos.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/2584004921335984121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/2584004921335984121'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/04/responsabilidad-de-todos.html' title='Responsabilidad de todos'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6269472152327104379</id><published>2010-04-05T04:45:00.003Z</published><updated>2010-04-05T04:52:37.792Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos Scrum'/><title type='text'>Flexibilidad con Scrum: Conclusiones</title><content type='html'>Ya hace bastante tiempo que escribí sobre el curso “&lt;a href="http://eclijava.blogspot.com/2010/01/curso-flexibilidad-con-scrum-en.html"&gt;Flexibilidad con Scrum&lt;/a&gt;” que estaba organizando. Y mucho más tiempo desde que surgió la idea. Pero el tiempo pasa volando, y por fin el curso se celebró esta semana, así que hoy, tras despedir a &lt;a href="http://ar.linkedin.com/in/cruata"&gt;Claudia Ruata&lt;/a&gt; (&lt;a href="http://es.linkedin.com/in/juanpalacio"&gt;Juan Palacio&lt;/a&gt; ya se había marchado el viernes), es un buen momento para reflexionar sobre lo que ha pasado estos días.&lt;br /&gt;&lt;br /&gt;Para mí ha sido una experiencia inolvidable. Las personas con las que pude hablar, al ir acabando el curso, estaban muy contentas y lo valoraban muy bien. Probablemente esa fuera una de las mayores recompensas por el tiempo que había invertido en la organización. Que algunos se acercaran a mí y me felicitaran por el trabajo o me agradecieran lo que había hecho es algo que me ha hecho sentir realmente bien.  Cuando empecé con esto estaba convencido de que sería algo muy positivo para los profesionales de aquí, y es reconfortante comprobar que no estaba equivocado, y ver que estaban contentos con el resultado.&lt;br /&gt;&lt;br /&gt;La segunda recompensa ha sido conocer a Claudia y su madre, y Juan y su familia. Hoy le comentaba a Claudia (y lo hacía de corazón) que hasta ahora la admiraba como profesional… pero ahora además la aprecio como persona. Lo mismo me ha ocurrido con Juan. Son personas fantásticas y el simple hecho de haberlos conocidos ya era un buen motivo para organizar el curso. Es muy agradable “trabajar” con personas así y espero que este sólo haya sido un primer punto de un largo camino, y que volvamos a coincidir pronto.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.carlosble.com"&gt;Carlos Ble&lt;/a&gt; ya ha grabado un &lt;a href="http://www.podgramando.es/uncategorized/scrummanager-en-tenerife"&gt;podcast&lt;/a&gt; en el que Claudia y Juan explican qué es ScrumManager, entre otras cosas. Y en el que yo explico, en mi opinión, por qué tuvo tanta aceptación la convocatoria del curso. No voy a repetirme (a escuchar el podcast &lt;img class="wp-smiley" alt=":-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_smile.gif"/&gt; ) pero sí que me faltó un punto muy importante, y ya no es por qué la convocatoria tuvo éxito, sino por qué me fue posible darle forma. Creo que básicamente, hay cuatro razones:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La principal es María, mi pareja. Tanto en esto, como en todo lo que hago siempre tengo su apoyo, y eso me da fuerzas para afrontar cualquier proyecto. No es que ella me apoye en mis proyectos, es que hace casi seis años que mis proyectos y sus proyectos se han convertido en nuestros proyectos, y juntos los hemos ido afrontando. Ella es la responsable de que muchos tuviéramos un sitio en el que almorzar durante los días del curso, que tuviéramos preparado el libro de ejercicios, etc., etc., … No soy muy ducho en literatura, así que hago mía una frase de la película “Una mente maravillosa” para expresar lo que pretendo decir: "He buscado en lo físico y en lo metafísico, y sólo en las ecuaciones del amor he encontrado alguna lógica. Estoy aquí gracias a ti, tú eres mi razón de ser, tú eres todas mis razones. Gracias"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Evidentemente, sin Juan y Claudia esto no hubiera sido posible. En el podcast, mientras definían qué es ScrumManager, Claudia decía que era un sueño. Cuando alguien vive su profesión con el corazón, siempre está dispuesto a colaborar. Desde el principio apoyaron mi propuesta y trabajaron para que se hiciera posible.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;El tercer ingrediente fundamental ha sido la situación laboral privilegiada que tengo. Mis jefes siempre han procurado que en la empresa nos sintamos cómodos y que podamos llevar adelante nuestras inquietudes. El entorno que han creado permite que trabajar no sea una mera obligación para mí, y eso me hace crecer profesionalmente y mantener la ilusión para mejorar. Digamos que ese entorno mantiene viva la misma llama que me llevó a plantear este curso. Sin todo esto, y sin la flexibilidad que ofrecen, probablemente la situación hubiera sido bien distinta.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;El último punto se refleja mejor con una anécdota: necesitaba unos altavoces para uno de los grupos, y &lt;a href="http://developerscookbook.blogspot.com/"&gt;Yeray Darias&lt;/a&gt; se ofreció a llevarlos. Justo el primer día de curso del segundo grupo, al llegar a la universidad y ver a Yeray, pensé que se me había olvidado recordarle que contaba con los altavoces, y se lo comenté. Pues al mismo tiempo que yo dije “&lt;span style="font-style: italic;"&gt;pero sabía que podía contar contigo&lt;/span&gt;” él decía “&lt;span style="font-style: italic;"&gt;tú sabías que podías contar conmigo&lt;/span&gt;”. Esto es una realidad, y saber que para cualquier proyecto de este tipo puedo contar con personas como Yeray y otros más, facilita mucho las cosas.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;En resumen, puedo decir que ha sido uno de los mejores proyectos en los que me he embarcado, ya que ha servido a muchos, he aprendido muchísimas cosas (tanto por participar en el curso como por todo lo que ha ido ocurriendo en estos días) y ha sido un verdadero placer conocer a un grupo de personas increíbles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6269472152327104379?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6269472152327104379/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/04/flexibilidad-con-scrum-conclusiones.html#comment-form' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6269472152327104379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6269472152327104379'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/04/flexibilidad-con-scrum-conclusiones.html' title='Flexibilidad con Scrum: Conclusiones'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7321292814810006330</id><published>2010-03-10T17:10:00.002-01:00</published><updated>2010-03-10T17:17:47.177-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Agil-Canarias: Hagámoslo realidad</title><content type='html'>Hace tiempo &lt;a href="http://www.carlosble.com/"&gt;Carlos Ble&lt;/a&gt; intentó poner en marcha el grupo local &lt;a href="http://www.linkedin.com/groups?home=&amp;amp;gid=1791557&amp;amp;trk=anet_ug_hm&amp;amp;goback=.anh_1791557"&gt;Agile-Canarias&lt;/a&gt;, siguiendo la filosofía de otros grupos como &lt;a href="http://sites.google.com/site/agilemadrid/"&gt;Agile-Madrid&lt;/a&gt;, &lt;a href="%28http://agile-spain.wikidot.com/quedadas-barcelona"&gt;Agile-Barcelona&lt;/a&gt;, etc… pero todo quedó un poco parado tras la primera reunión.&lt;br /&gt;&lt;br /&gt;Ahora, gracias a &lt;a href="http://es.linkedin.com/in/franreyesperdomo"&gt;Fran Reyes&lt;/a&gt;, que ha vuelto a lanzar la propuesta, estamos intentando que ese proyecto sea una realidad. De momento, lo intentaremos organizar él y yo… ¿te animas a colaborar?&lt;br /&gt;&lt;br /&gt;Ya tenemos un lugar donde celebrar las reuniones. Jesús Alberto, subdirector de Ordenación Académica de la &lt;a href="http://www.escuelas.ull.es/etsii/portal/viewcategory.aspx?id=326"&gt;ETSII&lt;/a&gt;, mostró su interés desde el momento en el que le comenté la idea, y con ánimo de fomentar este tipo de eventos ofrece su colaboración. Sólo falta concretar un día (en Abril) y que te apuntes en la &lt;a href="https://docs.google.com/Doc?docid=0AbVyQjhdU_WXZGM0dzl6c18yN2RkazZoNmd4&amp;amp;hl=en"&gt;siguiente lista&lt;/a&gt; &lt;img class="wp-smiley" alt=":-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_smile.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7321292814810006330?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7321292814810006330/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/03/agil-canarias-hagamoslo-realidad.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7321292814810006330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7321292814810006330'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/03/agil-canarias-hagamoslo-realidad.html' title='Agil-Canarias: Hagámoslo realidad'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1954132247892984214</id><published>2010-02-23T05:31:00.003-01:00</published><updated>2010-02-23T05:51:06.163-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Motivación intrínseca / extrínseca</title><content type='html'>Tras la &lt;a href="http://eclijava.blogspot.com/2010/02/estimacion-de-poker.html"&gt;entrada que escribí con Lucía&lt;/a&gt; he visto en el blog una nueva posibilidad: las colaboraciones. Me encantó la experiencia, y me mostró que así podría ofrecer contenido de más calidad al contar con la experiencia de otra persona y también podría ofrecer la perspectiva de profesionales que no estén directamente relacionados con el desarrollo del software. Por otro lado, realmente más importante para mí, es una forma de poder realizar algo junto a personas a las que aprecio, pero que por su profesión o circunstancias no tenemos la oportunidad de trabajar juntos.&lt;br /&gt;&lt;br /&gt;No es nada sencillo, pues muchos de los colaboradores en los que he pensado no se dedican a la programación en ninguno de sus aspectos, pero lo que escribo hoy es una clara muestra de que todo es posible si realmente crees en ello, pues hoy la colaboradora es Nala, un bulldog francés que se ha ganado un importante puesto en mi vida y que me ayudará a explicar de forma gráfica la diferencia entre motivación intrínseca y extrínseca.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Motivación intrínseca&lt;span&gt;&lt;/span&gt;&lt;/span&gt;. Nace de nosotros mismo, y es la motivación que sentimos al hacer aquellas cosas que nos gustan, que el simple hecho de hacerlas ya es una recompensa en sí misma. Al realizar determinadas tareas en determinados entornos que generan este tipo de motivación veremos que no nos cuesta concentrarnos, que ponemos empeño no sólo en acabar la tarea, sino en hacerlo bien y sin buscar una compensación extra. Para mí, aunque igual no podamos relacionarlo directamente con nuestro trabajo, el siguiente vídeo muestra de forma clara lo que una persona puede conseguir cuando hace algo con pasión, cuando sus acciones son movidas por el amor y no necesita más recompensa.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="445" height="364"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zbXwlgjZ1oY&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;rel=0&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/zbXwlgjZ1oY&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;rel=0&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;Motivación extrínseca&lt;/span&gt;&lt;/span&gt;. Por muy ideal que sea el entorno en el que trabajemos, pueden haber tareas que no sean del todo de nuestro agrado. Y aquí puede entrar en juego la motivación extrínseca, que nos anima a realizar una tarea pensando que al finalizar obtendremos una recompensa. Lo cierto es que con este tipo de motivación será más difícil mantener la concentración, nos bastará con realizar la tarea lo suficientemente bien para recibir el premio y evidentemente, si desaparece la recompensa desaparecerá las ganas de realizar la tarea. Quizás no veamos valor en este tipo de motivación, pero  lo cierto es que puede llegar a ser muy útil y lograr hacer más llevaderas ciertas tareas que no son del agrado del equipo. Por ejemplo, cuando estuvimos adiestrando a Nala, el etólogo nos recomendó que cuando fuera a pasar mucho tiempo sola, la metiéramos en un transportin para hacer que su carácter fuera más equilibrado. Lo cierto es que ella prefiere salir con nosotros, y cuando le decimos que entre al transportin suele intentar persuadirnos. Para ello, primero se sienta, mostrando que se portará bien… si le seguimos insistiendo se echaría y luego se haría la muerta, todo con el objetivo de hacernos reír y aguantar un poco más fuera. Pero si ponemos en juego un motivador extrínseco (un trocito del bizcocho que le encanta) su actitud es totalmente diferente:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bLXttV0ZP78&amp;amp;hl=es&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/bLXttV0ZP78&amp;amp;hl=es&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Prometo que las siguientes colaboraciones serán más serias, pero hay que reconocer que Nala lo ha hecho genial y yo me he divertido mucho. En términos de motivación, divertirte con tu trabajo es todo un éxito, así que creo que esta entrada no ha estado mal, por lo menos para Nala y para mí &lt;img class="wp-smiley" alt=":-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_smile.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-1954132247892984214?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1954132247892984214/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/02/motivacion-intrinseca-extrinseca.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1954132247892984214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1954132247892984214'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/02/motivacion-intrinseca-extrinseca.html' title='Motivación intrínseca / extrínseca'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5643249975193701442</id><published>2010-02-18T05:09:00.002-01:00</published><updated>2010-02-18T05:17:11.152-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><title type='text'>Falacia del costo irrecuperable</title><content type='html'>Hace unas semanas, intentando aprender de los que más saben, leí &lt;a href="http://www.threeriversinstitute.org/blog/?p=438"&gt;este artículo&lt;/a&gt; de Kent Beck. No es cuestión de traducirlo, porque ya &lt;a href="http://www.dosideas.com/noticias/reflexiones/819-ya-no-es-mi-dinero-lecciones-de-poker-por-kent-beck.html"&gt;lo ha hecho&lt;/a&gt; la gente de DosIdeas, pero sí que me gustaría comentarlo.&lt;br /&gt;&lt;br /&gt;Kent Beck pone el ejemplo de una partida de poker en la que pierde mucho, y sólo piensa en seguir apostando para poder recuperar su dinero. Pero se da cuenta de que  ya no era su dinero, había dejado de serlo desde que lo apostó. Tras esta reflexión, vuelve a jugar como si fuera la primera partida.&lt;br /&gt;&lt;br /&gt;Luego explica que esta situación pasa también cuando programamos. Cito la traducción hecha por Leonardo De Seta para esta parte, porque este punto es realmente interesante:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Mi experiencia es que lo correcto en esta situación en donde no sabemos lo que hicimos para romper las pruebas es volver inmediatamente a un estado verde conocido, y volver a ejecutar las pruebas. Luego comenzar el refactor otra vez y correr las pruebas a cada paso. &lt;strong&gt;Pero, y aquí está la parte irracional, mientras más tiempo llevamos haciendo el refactor, más tentados estamos en seguir&lt;/strong&gt;. Esta es la Falacia del Costo Irrecuperable en acción.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;Mientras más llevo haciendo un refactor, menos recuerdo todos los pasos, más difícil será encontrar el error, mayor el valor de empezar otra vez. &lt;strong&gt;Mientras más difícil es comenzar otra vez (emocionalmente), más valioso es comenzar otra vez&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Ya no es mi tiempo. ¿Estuve haciendo un refactor por un minuto? ¿Una hora? ¿Un día? No importa. Ya no es mi tiempo. Se lo di al programa. Se fue. Lo que haga ahora no debería estar influenciado por la magnitud del tiempo que ya invertí. Ya no es mi tiempo.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;Esto que explica Kent Beck se basa en la falacia del costo irrecuperable o falacia de la concordia. Esta falacia se produce cuando alguien realiza una inversión que parece ser no rentable y razona de la siguiente manera: «No puedo parar ahora, de otra manera lo que he invertido hasta el momento se perderá». Esto es verdad, por supuesto, pero irrelevante para la decisión de si uno debe continuar invirtiendo en el proyecto. Es decir, los argumentos para seguir invirtiendo en el proyecto no se deben basar en el miedo a la pérdida de lo invertido sino en las expectativas de funcionamiento del proyecto ambas cosas totalmente independientes.&lt;br /&gt;&lt;br /&gt;Desde luego, ahora intento tener muy en cuenta esta historia al tomar decisiones, no sólo cuando programo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5643249975193701442?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5643249975193701442/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/02/falacia-del-costo-irrecuperable.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5643249975193701442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5643249975193701442'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/02/falacia-del-costo-irrecuperable.html' title='Falacia del costo irrecuperable'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-3677678856409190685</id><published>2010-02-09T21:39:00.004-01:00</published><updated>2010-02-10T06:22:41.319-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><title type='text'>Estimación de poker</title><content type='html'>Desde la primera vez que leí acerca de la estimación de poker, tuve claro que era una técnica que podía aportar mucho al equipo. Desde mi punto de vista, sus principales ventajas (teniendo en cuenta mis circunstancias) son:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Visión general del proyecto. Estimar el tiempo que se debe invertir en realizar una tarea, requiere hacer un esfuerzo e imaginar cómo la haríamos y qué hace falta para realizarla. Esto hace que todos los miembros del equipo tengan una idea más precisa de lo que se hará en la siguiente iteración y no sólo de su parte.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Flujo de conocimiento. Cuando algún miembro hace una estimación que se sale de la media, tanto por encima como por abajo, lo normal es que explique en qué se basa. Esto puede hacer, por ejemplo, que este miembro o miembros muestren una situación que el resto del equipo no han tenido en cuenta y que hubiera hecho que se incumplieran las estimaciones; o que informe de alguna librería, utilidad, etc., que facilitaría en gran medida la implementación de la tarea y por eso requiere mucho menos tiempo.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Distribución de la responsabilidad en la estimación. La estimación ya no depende de una o algunas personas. Todo el equipo se implica en este proceso, aportando mucho más valor.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Afortunadamente, en mi empresa trabajamos en un ambiente distendido en el que las ideas no tienen las puertas cerradas. Siempre que se hagan responsablemente, toda propuesta es bienvenida, por lo que he aprovechado que estábamos a punto de iniciar una nueva iteración en un proyecto importante para proponer el uso de esta técnica.&lt;br /&gt;&lt;br /&gt;Como me costaría ser objetivo, en las siguientes líneas Lucía explicará su experiencia con la estimación de poker. Ella ha sido la encargada de dirigir el proceso, así que nadie mejor para ofrecer una impresión parcial:&lt;br /&gt;&lt;br /&gt;Bueno, antes de empezar a expresar mi opinión, quiero darte las gracias Gregorio por ofrecerme la oportunidad de aportar mi granito de arena a este blog, por el cual te felicito.&lt;br /&gt;&lt;br /&gt;Empezando con la experiencia en sí, aunque sólo ha sido un primer pequeño pasito, creo que ha sido muy enriquecedora. En primer lugar, este tipo de estimación exige que haya una descripción clara de la tarea a realizar, pero que no sea excesivamente extensa. En nuestro caso, escogimos realizar la estimación vía web, usando la herramienta google wave con la extensión 'ScrumPoker'. El hecho de tener que explicar la tarea de forma escrita, no hablada, da menos interacción entre los participantes, pues no permite tan claramente un turno de dudas y preguntas tras la explicación de la tarea, lo que podría haber sido una desventaja, pero creo que en nuestro caso ha servido para definir con más rigor las tareas, lo cual en sí ya es una ventaja. Además, también nos evitamos que el turno de dudas se extienda demasiado, ya que, en todo caso, las dudas se responden directamente a la persona.&lt;br /&gt;&lt;br /&gt;También el ser vía web creo que ha podido dar un poco más de tranquilidad a los participantes en las primeras estimaciones, pues para quien estima por primera vez puede ser un poco violento el dar una estimación muy desviada con respecto al resto dentro de una reunión 'cara a cara'. Además se evita el peligro de no tomar del todo en serio la estimación al ser una forma tan distendida de estimar, hablando claramente, no se corre el riesgo de demasiados comentarios jocosos durante la reunión que, antes de que todos los componentes hayan visto la utilidad de este tipo de estimación, es fácil que se dé.&lt;br /&gt;&lt;br /&gt;En cuanto al momento de la estimación, la acogida por el grupo de trabajo fue muy buena, ya que todos los componentes se han implicado y han respondido muy bien. Al estudiar los resultados he visto que, salvo alguna excepción, las estimaciones eran muy similares, lo que facilita enormemente la estimación final de la tarea. En este sentido, he visto realmente útil los siguientes aspectos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Facilidad a la hora de especificar la estimación final: el tener una visión de todo el equipo acerca de la duración de cada tarea hace más fácil especificar la estimación definitiva, así como da más seguridad sobre estar acercándonos más a una duración real.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Mayor conocimiento de los componentes del equipo: al ver la estimación realizada por cada componente del equipo, se conoce algo más de la forma de trabajo de cada persona, y las diferencias existentes en el equipo según tareas. Esto ayuda mucho para saber también quién sería el mejor candidato para cada tarea, lo cual es una ventaja extra que, hasta realizar la estimación, admito que no había previsto.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Creo que otro punto importante es el que señala Gregorio acerca del flujo de conocimiento, aunque si quiero ser sincera, creo que aún es pronto para saber el impacto que ha tenido en el grupo el conocer previamente la descripción de cada tarea (en este aspecto, espero que dentro de un tiempo Gregorio me deje otro “cachito” de blog para describir como ha influido &lt;img class="wp-smiley" alt=":-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_smile.gif" /&gt;).&lt;br /&gt;&lt;br /&gt;Esta primera prueba que hemos hecho creo que ha sido solo una pequeña aproximación a la estimación de poker, pues hubo algunos aspectos que creo que hicieron que no se pudiera sacar todo lo positivo posible, como la falta de tiempo para poder comentar mejor las desviaciones de las estimaciones o el desconocimiento de la herramienta utilizada. Aún así, Roma no se construyó en un día, y creo sinceramente que si la primera vez que se realiza ha dado tan buenos resultados, seguramente en la siguiente iteración, con más tiempo, con el equipo conociendo ya de qué se trata exactamente, las ventajas que nos dé este tipo de estimación pueden aumentar.&lt;br /&gt;&lt;br /&gt;Para terminar, querría sólo comentar brevemente la experiencia del uso de la extensión 'ScrumPoker' de google wave. Creo que es una gran herramienta, muy sencilla de usar, y que hace muy cómoda este tipo de estimación, aunque aún está en fase de pruebas y, como es normal, tiene algunos errores que debe arreglar para ser realmente útil. Creo que cuando haya terminado la fase de pruebas, puede ser una herramienta que facilite mucho las estimaciones en los proyectos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Lucía Manescau García&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-3677678856409190685?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/3677678856409190685/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/02/estimacion-de-poker.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3677678856409190685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3677678856409190685'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/02/estimacion-de-poker.html' title='Estimación de poker'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-2840215980908186264</id><published>2010-02-06T07:58:00.003-01:00</published><updated>2010-02-06T08:08:48.026-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Metodologías ágiles: ¿Somos capaces?</title><content type='html'>Cuando empecé a leer sobre las metodologías ágiles, dos de los conceptos que más se repetían eran “&lt;span style="font-weight: bold; font-style: italic;"&gt;equipos auto-organizados&lt;/span&gt;” y “&lt;span style="font-weight: bold; font-style: italic;"&gt;profesionales competentes&lt;/span&gt;”. Estos días he estado pensando en estos conceptos, tras leer dos artículos:&lt;br /&gt;&lt;br /&gt;Uno de ellos fue “&lt;a href="http://www.pilarjerico.com/adios-al-trabajo-fijo-bienvenida-la-empleabilidad?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+PilarJerico+%28Pilar+Jerico%29&amp;amp;utm_content=Google+Reader"&gt;Adiós al trabajo fijo, bienvenida la empleabilidad&lt;/a&gt;” de Pilar Jericó. Mientras lo leía, me quedé reflexionando en el siguiente fragmento:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Y por último y puede que más complicado, el profesional ha de velar por su propia carrera. Ya no vale quedarse de brazos cruzados para que la empresa decida qué es lo mejor para uno mismo. La persona se ha de preocupar de su formación y ser exigente con su propia empleabilidad. Si se está en una vía muerta, ha de poner los medios para salir de ahí estudiando, buscando alternativas o lo que sea… El objetivo personal no debería perderse nunca de vista: En el hipotético caso de que a uno lo echen (o amorticen su puesto, como se dice más elegantemente), tiene que ser empleable en otra organización. Desgraciadamente, esta crisis ha encontrado  desprevenidas a muchas personas, que siguen culpando el sistema, cuando han estado durante años haciendo y repitiendo lo mismo. Ojala esta situación nos ayude a darnos cuenta de que de nosotros sólo depende nuestro futuro y que nuestro compromiso sólo tenemos que desarrollarlo si también nos aporta valor a nosotros.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;¿Necesitamos una razón exterior, como es la crisis, para intentar ser competentes, formarnos, etc? Los estudios indican que para que un profesional sea realmente efectivo se debe trabajar la motivación intrínseca… pero si nos hace falta un toque de atención, como ha sido en este caso la situación del mercado laboral, para intentar estar a la altura, ¿podemos tener un problema? ¿Con esta radiografía de nuestro panorama, es factible hablar de equipos auto-organizados?&lt;br /&gt;&lt;br /&gt;En &lt;a href="http://www.marianolozano.com/2010/01/26/las-oficinas-de-las-multinacionales-americanas-en-espana-en-peligro/"&gt;este otro artículo&lt;/a&gt;, se habla de la intención de una multinacional norteamericana de cerrar su cede en España. Entre los motivos, yo me quedé pensando en estos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;… la falta de compromiso …&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;… &lt;span style="font-style: italic;"&gt;se quejan de lo poco operativos que son los españoles con los que comparten proyectos. Al parecer, y me lo creo, los españoles siempre se están quejando de esto o lo otro, no buscan de manera intuitiva soluciones a los problemas que surgen sino que intentan encontrar culpables para justificarse ellos mismos&lt;/span&gt; … (Con respecto a esto, sería interesante leer el &lt;a href="http://www.presionblogosferica.com/2010/02/04/montanas-en-la-tierra-media/"&gt;siguiente artículo&lt;/a&gt; de Ángel Medinilla)&lt;br /&gt;&lt;br /&gt;Reflexionando sobre estos dos artículos, lo primero que me planteo es si esto es un reflejo fiel de nuestra situación… ¿qué opinas? Luego, ¿puede ser esta una de las razones por la que otros países nos lleven ventaja en cuanto a la aplicación de las metodologías que están demostrando ser la solución a los problemas frecuentes en nuestra industria?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-2840215980908186264?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/2840215980908186264/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/02/metodologias-agiles-somos-capaces.html#comment-form' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/2840215980908186264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/2840215980908186264'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/02/metodologias-agiles-somos-capaces.html' title='Metodologías ágiles: ¿Somos capaces?'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-3706774898349378893</id><published>2010-01-29T05:23:00.003-01:00</published><updated>2010-01-29T05:32:15.069-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><title type='text'>Kanban vs Scrum en castellano</title><content type='html'>Una vez alguien (creo que fue &lt;a href="http://www.agileforall.com/blog/"&gt;Bob Hartman&lt;/a&gt;)  escribió en su blog que no pondría más de dos o tres artículos por semana porque no daba tiempo a que la gente los asimilara. En cierto modo, no es buena idea que vuelva a publicar una entrada ahora, cuando acabo de escribir una justo ayer. Puede que al final una oculte a la otra y queden algunas sin leer… hay que tener en cuenta que no cuento las visitas por miles &lt;img class="wp-smiley" alt=":-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_smile.gif" /&gt;. Pero me apetecía hacer pública esta noticia.&lt;br /&gt;&lt;br /&gt;Hace tiempo, un grupo de personas empezamos a traducir el libro &lt;a href="http://www.infoq.com/minibooks/kanban-scrum-minibook"&gt;Kanban and Scrum - making the most of both&lt;/a&gt;, proyecto que ha visto hoy la luz. Ángel Medinilla explica muy bien de que va el libro y el proceso de traducción &lt;a href="http://www.presionblogosferica.com/2010/01/28/kanban-vs-scrum-en-castellano/"&gt;Aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Simplemente me gustaría añadir que ha sido un placer colaborar con &lt;a href="http://www.proyectalis.com/"&gt;Ángel Medinilla&lt;/a&gt;, &lt;a href="http://www.plainconcepts.com/"&gt;Rodrigo Corral&lt;/a&gt;, &lt;a href="http://www.agilar.org/"&gt;Xavier Quesada-Allue&lt;/a&gt;, &lt;a href="http://www.gailen.es/"&gt;Jorge Uriarte&lt;/a&gt;, &lt;a href="https://syst.eui.upm.es/"&gt;Agustín Yagüe&lt;/a&gt;, &lt;a href="http://teosanchez.blogspot.com/"&gt;Teo Sánchez&lt;/a&gt;, &lt;a href="http://www.navegapolis.net/"&gt;Juan Palacio&lt;/a&gt;, &lt;a href="http://legnita.wordpress.com/"&gt;Ángel Agueda&lt;/a&gt;, Laura Morillo-Velarde, Jorge Jiménez, Javier Sánchez y Juan Quijano.&lt;br /&gt;&lt;br /&gt;He tenido la oportunidad de aportar mi granito de arena a una buena causa (granito bastante pequeño en comparación con el trabajo de otros) y a la vez aprender. Lo que demuestra que, con ayuda de comunidades como Agil-Spain, un pequeño esfuerzo bien enfocado puede ayudar a muchos, y a la vez beneficiarnos. Vamos, la retribución Kármica que comenta Ángel &lt;img class="wp-smiley" alt=":-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_smile.gif" /&gt;&lt;br /&gt;&lt;br /&gt;El libro lo pueden descargar &lt;a href="http://www.proyectalis.com/documentos/KanbanVsScrum_Castellano_FINAL.pdf"&gt;AQUÍ&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-3706774898349378893?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/3706774898349378893/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/01/kanban-vs-scrum-en-castellano.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3706774898349378893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3706774898349378893'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/01/kanban-vs-scrum-en-castellano.html' title='Kanban vs Scrum en castellano'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1374983270127302279</id><published>2010-01-28T05:34:00.005-01:00</published><updated>2010-01-28T05:46:53.133-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse: Java Exception Breakpoints</title><content type='html'>Hoy he rescatado de la lista de temas pendientes uno sobre Eclipse por dos razones, la primera es que este blog lo llamé eclijava por algo, y la verdad es que Eclipse lo tenía olvidado. La otra es que son las seis y pico de la mañana, y en un rato tendré que estar en mi trabajo, así que no podía elegir un tema muy largo.&lt;br /&gt;&lt;br /&gt;Probablemente el error más frecuente en una aplicación es una excepción. Seguramente todos nos hayamos puesto a depurar la aplicación por un problema de este tipo, y para esto Eclipse nos ofrece una opción muy interesante: los "Java Exception Breakpoints". Si nos vamos a la vista "Breakpoints", veremos un icono que contiene una J y un símbolo de exclamación.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/S2ExENdoaYI/AAAAAAAAAHg/uiahJILBhNk/s1600-h/EasyCapture3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 121px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/S2ExENdoaYI/AAAAAAAAAHg/uiahJILBhNk/s400/EasyCapture3.png" alt="" id="BLOGGER_PHOTO_ID_5431676573988710786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pulsando en él, se nos abrirá una nueva ventana en la que podremos definir la excepción asociada al breakpoint. Al permitir comodines, como el asterisco, es muy cómo buscarla. En esta ventana también podremos definir el tipo de excepciones que queremos tratar: capturadas o no capturadas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/S2ExnDWfocI/AAAAAAAAAHo/aaeuaW1pov4/s1600-h/EasyCapture4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 349px; height: 400px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/S2ExnDWfocI/AAAAAAAAAHo/aaeuaW1pov4/s400/EasyCapture4.png" alt="" id="BLOGGER_PHOTO_ID_5431677172569842114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hace tiempo que descubrí esta opción, y para alguien "adicto" a al depurador como yo, es algo muy interesante.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-1374983270127302279?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1374983270127302279/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/01/eclipse-java-exception-breakpoints.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1374983270127302279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1374983270127302279'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/01/eclipse-java-exception-breakpoints.html' title='Eclipse: Java Exception Breakpoints'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/S2ExENdoaYI/AAAAAAAAAHg/uiahJILBhNk/s72-c/EasyCapture3.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8772099074272522580</id><published>2010-01-20T18:04:00.002-01:00</published><updated>2010-01-20T18:09:05.407-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventos Scrum'/><title type='text'>Curso Flexibilidad con Scrum en Tenerife</title><content type='html'>No había publicado una entrada en este blog anunciando el &lt;a href="http://www.scrummanager.net/cursoscalendario/116"&gt;curso de Scrum&lt;/a&gt; que se celebrará en Marzo en Tenerife porque ya lo había hecho yo mismo en &lt;a href="http://www.iexpertos.com/es/blog/flexibilidad-con-scrum-en-tenerife-marzo-2010"&gt;esta entrada de iExpertos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pero creo que es necesario que publique unas líneas al respecto aquí, ya que debo agradecer a &lt;a href="http://www.linkedin.com/in/cruata"&gt;Claudia Ruata&lt;/a&gt; y &lt;a href="http://www.navegapolis.net/content/view/25/45/"&gt;Juan Palacio&lt;/a&gt; lo que están haciendo. Desde el momento que le comenté la idea a Juan se ha mostrado interesado y dispuesto a hacer posible este curso. Igualmente, Claudia se sumó a la iniciativa desde que tuvo ocasión, y debemos tener en cuenta que ambos invertirán parte de sus vacaciones en el curso, esfuerzo que realmente valoro y agradezco.&lt;br /&gt;&lt;br /&gt;Siempre resulta agradable ver como los profesionales a los que admiras y respetas, también son grandes personas. Soy un privilegiado al poder colaborar con ellos (y aprender de ellos) en ScrumManager.&lt;br /&gt;&lt;br /&gt;Ya ellos, apostando por esta idea, han publicando un banner del curso tanto desde &lt;a href="http://scrummanager.net/ok/"&gt;ScrumManager&lt;/a&gt;, como desde &lt;a href="http://www.navegapolis.net/"&gt;Navegapolis&lt;/a&gt; (se alterna con el anuncio del libro Flexibilidad con Scrum) y &lt;a href="http://www.horusms.com/"&gt;Horus&lt;/a&gt;. Espero que esto, y la promoción que hacemos desde Tenerife, sea suficiente para que todos los interesados en aprender esta metodología puedan aprovechar la oportunidad.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.scrummanager.net/cursoscalendario/116"&gt;&lt;br /&gt;&lt;img hspace="0" height="75" border="0" width="500" vspace="0" title="Curso Flexibilidad con Scrum en Tenerife. 29 y 30 de Marzo." alt="Curso Flexibilidad con Scrum en Tenerife. 29 y 30 de Marzo." src="http://www.scrummanager.net/ok/file.php/1/images/Flexibilidad_con_scrum_tenerife_marzo_2010.jpg"/&gt;&lt;br /&gt;&lt;/a&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/4286784136012598160-8772099074272522580?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8772099074272522580/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/01/curso-flexibilidad-con-scrum-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8772099074272522580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8772099074272522580'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/01/curso-flexibilidad-con-scrum-en.html' title='Curso Flexibilidad con Scrum en Tenerife'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-4710832107721402390</id><published>2010-01-16T09:58:00.003-01:00</published><updated>2010-01-16T10:09:34.885-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Publicado el libro: Diseño Agil con TDD</title><content type='html'>Puede que esta entrada llegue un poco tarde o que ya no tenga sentido. He estado bastante liado, y sin ser un ratito a las seis y pico de la mañana para escribir la &lt;a href="http://eclijava.blogspot.com/2010/01/la-maldicion-del-conocimiento.html"&gt;anterior entrada&lt;/a&gt;, no he tenido tiempo de tocar el blog.&lt;br /&gt;&lt;br /&gt;Pero para mí es muy gratificante escribirla, así que aunque llegue tarde, pues ya se ha hablado de esto &lt;a href="http://www.carlosble.com/?p=529"&gt;aquí&lt;/a&gt;, &lt;a href="http://developerscookbook.blogspot.com/2010/01/diseno-agil-con-tdd.html"&gt;aquí&lt;/a&gt;, &lt;a href="http://www.javahispano.org/contenidos/es/publicado_libro_diseno_agil_con_tdd/?menuId=NEWS"&gt;aquí&lt;/a&gt;, &lt;a href="http://agilizar.es/blog/11/01/2010/diseno-agil-con-tdd/"&gt;aquí&lt;/a&gt;, &lt;a href="http://www.navegapolis.net/content/view/951/61/"&gt;aquí&lt;/a&gt;, y muchos sitios más... me gustaría añadir algunas líneas, no con respecto al resultado, que ya se ha dicho todo, pero sí sobre el proceso.&lt;br /&gt;&lt;br /&gt;He tenido la suerte no sólo de &lt;a href="http://www.dirigidoportests.com/el-libro"&gt;leer el libro&lt;/a&gt; antes que la mayoría, sino que también he visto como ha ido evolucionando. El simple hecho de tener acceso a los comentarios de los revisores, ofrece otra forma totalmente diferente de leer un libro, sin duda mucho más enriquecedora. A todo lo que me ha aportado este libro, se suma lo que me ha aportado ir viendo los puntos de vistas de los otros profesionales implicados, a los que valoro mucho.&lt;br /&gt;&lt;br /&gt;Por otro lado, ha sido un proceso de reencuentros. Entre los revisores se encontraba &lt;a href="http://es.linkedin.com/pub/n%C3%A9stor-bethencourt/12/817/a38"&gt;Néstor Betancour&lt;/a&gt;,  con el que compartí muchos y buenos momentos en la facultad. Siempre es un placer estar en un proyecto con alguien como él. También entre los revisores y coautores estaban &lt;a href="http://developerscookbook.blogspot.com/"&gt;Yeray Darias&lt;/a&gt; (escribió un capítulo, que al final quedará para un segundo libro) y &lt;a href="http://es.linkedin.com/in/franreyesperdomo"&gt;Fran Reyes&lt;/a&gt;, dos de los miembros del primer equipo del que formé parte como programador. Profesionalmente lo mejor que me pudo pasar fue empezar en ese equipo, pues sin duda marcará una referencia para siempre. Dejando atrás la empresa, me llevé la amistad y todo lo que había aprendido de ellos. El poder seguir haciendo cosas juntos es un verdadero placer.&lt;br /&gt;&lt;br /&gt;Por todo esto, no sólo debo agradecer a Carlos que ponga a disposición de todos un libro con tanta calidad y que tanto ayudará a muchos, sino el haberme permitido colaborar en este proyecto que tanto me ha aportado. Por si lo de ser revisor junto a todos estos profesionales fuera poco, también me brindó la oportunidad de aportar mi humilde granito de arena como coautor. ¡Gracias Carlos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-4710832107721402390?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/4710832107721402390/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/01/publicado-el-libro-diseno-agil-con-tdd.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4710832107721402390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4710832107721402390'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/01/publicado-el-libro-diseno-agil-con-tdd.html' title='Publicado el libro: Diseño Agil con TDD'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6487360101977315483</id><published>2010-01-13T05:41:00.002-01:00</published><updated>2010-01-13T05:46:24.370-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='equipos'/><title type='text'>La maldición del conocimiento</title><content type='html'>Ayer impartí &lt;a href="http://www.iexpertos.com/es/blog/proximo-curso-de-tdd-en-tenerife-enero-2010"&gt;el curso&lt;/a&gt; sobre  historias de usuarios y test de aceptación. Para mí es muy agradable ver que la evaluación de los alumnos ha sido muy buena, pero por suerte o por desgracia, normalmente suelo ser la persona más crítica conmigo, así que desde que terminó el curso y probablemente durante unos días toca anotar las cosas a mejorar, mientras voy haciendo retrospectiva.&lt;br /&gt;&lt;br /&gt;Haciendo esa evaluación propia, vino a mi cabeza un artículo que leí hace tiempo y que dejé pendiente para escribir algo sobre él. Se trata de "&lt;a href="http://elartedepresentar.com/2009/05/14/la-maldicion-del-conocimiento-cuanto-mas-sabes-peor-te-explicas/"&gt;La maldición del conocimiento: cuanto más sabes peor te explicas&lt;/a&gt;". Realmente recomiendo que lo lean, es muy cortito y para mí la idea está del todo acertada. Lo bueno es que también incluye unas pautas para evitar esto (pautas que tendré más en cuenta en el futuro, ya que por ejemplo Java no es una canción igual de conocidas para todos &lt;img class="wp-smiley" src="http://www.carlosble.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)"/&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6487360101977315483?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6487360101977315483/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/01/la-maldicion-del-conocimiento.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6487360101977315483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6487360101977315483'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/01/la-maldicion-del-conocimiento.html' title='La maldición del conocimiento'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5723188122323005779</id><published>2010-01-09T12:44:00.003-01:00</published><updated>2010-01-09T16:40:19.399-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='técnicas de programación'/><title type='text'>Patito de goma</title><content type='html'>Tras las vacaciones navideñas, y con las pilas más cargadas, era hora de volver a la rutina. Así que retomo el blog hablando de una técnica que "descubrí" justo en estas navidades.&lt;br /&gt;&lt;br /&gt;Intentando convertir en tradición el ir a cenar la noche antes de Reyes, este año volvimos a quedar un grupo de amigos. Estas cenas son para mí muy importantes. Entre otras cosas, porque mis primas también forman parte del grupo, así que puedo pasar un buen rato con amigos y familia, que teniendo en cuenta lo poco que voy a Gran Canaria, es de agradecer. Por otro lado, algunos de estos amigos, son también informáticos, y aunque no sea lo normal (aunque suene raro) a veces, mientras nos ponemos al día, se habla de informática (es normal hacer un pequeño resumen de qué está haciendo cada uno, informáticos o no, para saber en qué andamos todos).&lt;br /&gt;&lt;br /&gt;El caso es que Ayose e Iván (dos amigos, también programadores) me contaron que cuando los miembros de &lt;a href="http://www.banot.net/"&gt;Banot&lt;/a&gt; trabajaban con ellos en Foton, les enseñaron la técnica del &lt;span style="font-weight:bold;"&gt;patito de goma&lt;/span&gt;. La idea es simple, cuando tengas un problema, cuéntaselo a un patito de goma.&lt;br /&gt;&lt;br /&gt;Puede parecer una tontería, pero ¿no te ha pasado que al contarle tu problema a un compañero de pronto te viene a la cabeza una posible solución? Cuando nos enfrentamos a un problema, puede que nos ofusquemos y no seamos capaces de tener una visión global. El simple hecho de parar, y contarlo a un compañero, puede hacer que lo veamos desde otra perspectiva. Por otro lado, para explicar tu problema debes ordenar las ideas, para expresar exactamente qué está pasando y qué quieres conseguir realmente. Igual al ordenar estas ideas, y aclararte, la solución se hace más evidente.&lt;br /&gt;&lt;br /&gt;Si muchas veces basta con alejarse del problema un segundo, u ordenar las ideas, para encontrar la solución… ¿en vez de implicar a un compañero y su tiempo, por qué no probar con el patito de goma? Si aún así no encuentras la solución, siempre tendrás al compañero en el que habías pensado al principio, y tampoco será tiempo perdido el intento, ya que seguro que como le has explicado ya el problema al patito, te costará menos contárselo a tu compañero.&lt;br /&gt;&lt;br /&gt;¿Por qué un patito de goma?... podría contestar con otra pregunta: ¿por qué &lt;a href="http://www.pomodorotechnique.com/"&gt;un tomate&lt;/a&gt;? Seguro que tiene su historia, pero eso es lo de menos, usa un amiguito invisible si te es más cómodo &lt;img class="wp-smiley" src="http://www.carlosble.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5723188122323005779?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5723188122323005779/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2010/01/patito-de-goma.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5723188122323005779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5723188122323005779'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2010/01/patito-de-goma.html' title='Patito de goma'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1892344228085319670</id><published>2009-12-31T10:13:00.003-01:00</published><updated>2009-12-31T18:41:36.472-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Resumen del 2009</title><content type='html'>El último día del año siempre es un buen punto para echar un vistazo atrás y ver cómo  nos ha ido en general. Este post pretende hacer eso, un pequeño resumen de cómo me ha ido el año profesionalmente.&lt;br /&gt;&lt;br /&gt;En &lt;a href="http://www.gmrcanarias.com/"&gt;mi empresa&lt;/a&gt; hemos madurado mucho como equipo. Siempre intentando mejorar, por un lado hemos hecho uso de nuevas herramientas o intentado usar las antiguas de forma más eficiente. Por otro, en cuanto a las metodologías que seguimos en la forma de trabajar, hemos aplicado algunas nuevas, que han ido dando sus frutos. Y de una forma u otra, me gusta pensar que, aunque de forma muy humilde, en algo he podido contribuir a esta mejora. Y espero poder seguir aportando algo para que en el 2.010 sigamos esta línea.&lt;br /&gt;&lt;br /&gt;En cuanto a la formación, además de intentar aprender siguiendo varios blogs, listas de correo, foros, etc… he realizado algunos cursos, de los que destacaría:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El de &lt;a href="http://sergialmar.wordpress.com/2009/05/04/primer-curso-core-spring-realizado/"&gt;Core Spring&lt;/a&gt; (si vemos la foto, mirando desde donde está el profesor como referencia, a su izquierda estoy yo… el segundo de la fila, al ladito de Ben Corrie a ver si se me pegaba algo &lt;img alt=";-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_wink.gif" class="wp-smiley" /&gt; y acompañado a mi izquierda por dos compañeros de trabajo, José e Isabel).&lt;/li&gt;&lt;li&gt;Los tres cursos que ofrece actualmente la plataforma &lt;a href="http://www.scrummanager.net/ok/"&gt;ScrumManager&lt;/a&gt;&lt;/li&gt;&lt;li&gt;El curso de TDD impartido por &lt;a href="http://www.carlosble.com/"&gt;Carlos Ble&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Este último curso probablemente marque un punto de inflexión en mi carrera. Hasta ahí, me había limitado a aprender de lo que otros ofrecen, pero me propuse cambiar mi filosofía. Por un lado, mi objetivo era contribuir, modestamente, en todo lo que pudiera. Si no nos limitamos a seguir el trabajo de otros, por muy poco que seamos capaces de aportar, con pequeños granitos de arena entre todos podríamos formar una gran montaña. Por otro lado, intenté ver la formación de una forma proactiva, sin limitarme a esperar a los cursos que me pudieran interesar, sino esforzarme para hacerlos realidad.&lt;br /&gt;&lt;br /&gt;En ese sentido, he estado implicado en varios proyectos. El primero fue organizar el &lt;a href="http://www.iexpertos.com/es/blog/curso-de-tdd-en-tenerife"&gt;curso de TDD&lt;/a&gt;. Era un curso que me interesaba hacer y que en mi opinión valía la pena, así que me puse manos a la obra para que Carlos lo volviera a realizar.&lt;br /&gt;&lt;br /&gt;Esta colaboración fue bastante productiva, primero porque en mi opinión el curso tuvo bastante éxito, y después porque hemos seguido trabajando juntos en otros proyectos. Por ejemplo, Carlos me brindó la oportunidad de participar como revisor de &lt;a href="http://www.scrummanager.net/blog/author/acardoza/"&gt;su libro&lt;/a&gt;, y luego la de participar en uno de los capítulos, donde me encargué de ordenar y añadir pinceladas propias a lo que ya había escrito Carlos. También participaré en la &lt;a href="http://www.carlosble.com/?p=506"&gt;próxima edición&lt;/a&gt; del curso, ampliando un poco el temario.&lt;br /&gt;&lt;br /&gt;En cuanto a ScrumManager, desde el principio estaba convencido de que era un marco de trabajo que tendría éxito. Así, no sólo realicé los cursos que ofrecían, accediendo a su &lt;a href="http://www.scrummanager.net/directorio?sobi2Task=sobi2Details&amp;amp;catid=2&amp;amp;sobi2Id=50"&gt;directorio de profesionales certificados&lt;/a&gt;, sino que aprovechando la oportunidad que me han brindado, intentaré participar de forma activa en todo lo que pueda, como &lt;a href="http://www.scrummanager.net/colaboradores"&gt;colaborador&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;También gracias a &lt;a href="http://www.navegapolis.net/content/view/25/45/"&gt;Juan Palacio&lt;/a&gt;, uno de los fundadores de ScrumManager, se ha hecho realidad lo que empezó como una idea, una simple propuesta. En marzo se celebrará en Tenerife la primera edición en Canarias del curso &lt;a href="http://www.iexpertos.com/es/blog/flexibilidad-con-scrum-en-tenerife-marzo-2010"&gt;Flexibilidad con Scrum&lt;/a&gt;. Cuando le hice la propuesta a Juan, deposité muchas ilusiones en este proyecto, y me alegra ver que gracias a él, y al esfuerzo que hemos hecho desde iExpertos, al final será posible poder ofrecer un curso de tal calidad en Canarias.&lt;br /&gt;&lt;br /&gt;Me he dado cuenta de que el post ya es demasiado largo y no es mi intención aburrir. Creo que he repasado los logros más importantes, y podría concluir que ha sido un buen año para mí, espero poder continuar en esta línea. Aunque para finalizar, me gustaría mencionar otro proyecto en el que colaboro, intentando mostrar las ventajas de hacer actividades como esta. &lt;a href="http://www.presionblogosferica.com/"&gt;Ángel Medinilla&lt;/a&gt; está coordinado un proyecto para traducir el libro &lt;a href="http://www.infoq.com/minibooks/kanban-scrum-minibook"&gt;Kanban and Scrum - making the most of both&lt;/a&gt;. Esto hará que muchos puedan leer este libro en español, lo que produce una grata sensación, a los que participamos, de haber colaborado en algo que será beneficioso para muchos. Por otro lado, estamos teniendo la oportunidad de participar con varias personas de diferentes partes del mundo en un proyecto común, con la gestión ágil que está guiando Ángel. Desde luego, para los que quieran empezar a ver lo que es Scrum, por ejemplo, proyectos como este son una gran oportunidad, de aprender y a la vez aportar algo a otros.&lt;br /&gt;&lt;br /&gt;Quiero agradecerte el que hayas pasado por aquí a leerme. Las seis visitas diarias que recibe actualmente este blog de media, no son suficientes como para ganarme la vida con él, pero me basta con que tú pases de vez en cuando para seguir animado a continuarlo &lt;img alt=";-)" src="http://www.carlosble.com/wp-includes/images/smilies/icon_wink.gif" class="wp-smiley" /&gt; Feliz año nuevo!!&lt;br /&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:11pt;"  &gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-1892344228085319670?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1892344228085319670/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/12/resumen-del-2009.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1892344228085319670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1892344228085319670'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/12/resumen-del-2009.html' title='Resumen del 2009'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7880978650155298796</id><published>2009-12-16T05:31:00.003-01:00</published><updated>2009-12-16T05:41:32.372-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>La sorprendente ciencia de la motivación</title><content type='html'>Aprovechando que el curso que estaba haciendo en &lt;a href="http://www.scrummanager.net/ok/"&gt;Open Knowledge Scrum&lt;/a&gt; estaba relacionado en cierto modo con mi &lt;a href="http://eclijava.blogspot.com/2009/12/efecto-hawthorne.html"&gt;entrada anterior&lt;/a&gt;, abrí un tema de discusión en el foro.&lt;br /&gt;&lt;br /&gt;Lo bueno, a parte de poder aprender de los puntos de vista de otros profesionales, es que &lt;a href="http://www.elraul.com/"&gt;Raúl Uribe&lt;/a&gt; en su respuesta compartió con todos el &lt;a href="http://www.ted.com/talks/dan_pink_on_motivation.html"&gt;enlace a un vídeo&lt;/a&gt; realmente interesante. Ya comentaba, en la entrada anterior, que creo que la clave del éxito, tanto personal como del equipo, es la motivación… y sobre esto trata la conferencia magistralmente expuesta por Dan Pink. Curiosamente, poniendo al día el Google Reader descubrí que en DosIdeas habían hecho una &lt;a href="http://www.dosideas.com/motivacion/784-dan-pink-y-la-sorprendente-ciencia-de-la-motivacion.html"&gt;trascripción del vídeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Igualmente interesante son los artículos a los que &lt;a href="http://www.navegapolis.net/content/view/25/45/"&gt;Juan Palacio&lt;/a&gt; hace referencia en este hilo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.navegapolis.net/content/view/115/98/"&gt;¿Cómo motivar a los programadores?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.navegapolis.net/content/view/608/98/"&gt;Por favor, no motive a los programadores&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.navegapolis.net/content/view/147/98/"&gt;El mito de las evaluaciones de desempeño&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;Personalmente creo que sí es importante crear un caldo de cultivo para la motivación en un equipo. Por ejemplo, en mi empresa se intenta asignar a cada miembro del equipo aquellas tareas con las que más a gusto se siente… hacer lo que te gusta, es una forma de mantener la motivación. Puede que esto no se vea como intentar motivar, sino como intentar no desmotivar… llamémoslo X, pero creo que acciones de este tipo sí que son fundamentales.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7880978650155298796?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7880978650155298796/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/12/la-sorprendente-ciencia-de-la.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7880978650155298796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7880978650155298796'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/12/la-sorprendente-ciencia-de-la.html' title='La sorprendente ciencia de la motivación'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6771605917876997972</id><published>2009-12-13T09:50:00.002-01:00</published><updated>2009-12-13T09:56:22.877-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='motivación'/><title type='text'>Efecto Hawthorne</title><content type='html'>Hace algún tiempo leí un artículo que hablaba de un estudio realizado para evaluar el efecto que tiene sobre la productividad una serie de factores como el sueldo, los niveles de luz, el descanso, etc. Se comprobó que aumentando el nivel de intensidad luminosa en el entorno de los trabajadores, se aumentaba la productividad. Sorprendentemente, cuando se disminuyó la intensidad luminosa la productividad también aumentaba. Y lo mismo pasaba con prácticamente todos los aspectos que se fueron cambiando.&lt;br /&gt;&lt;br /&gt;Al final del estudio, se concluyó que la auténtica causa de la mejoría en el desempeño es la sensación de los trabajadores de estar siendo atendidos por el propio estudio. A este efecto se le conoce como efecto Hawthorne, por haber sido realizado, entre 1927 y 1932, en la &lt;a href="http://en.wikipedia.org/wiki/Hawthorne_Works"&gt;Hawthorne Plant&lt;/a&gt; de la Western Electric Company en Cicero, Illinois.&lt;br /&gt;&lt;br /&gt;Seguí buscando información, porque me había parecido algo muy interesante, y me encontré con un análisis también llamativo: el estudio suponía un cambio en el día a día de los trabajadores. En general, la gente llega a aburrirse con un trabajo monótono. De hecho, hay empresas, como Fujitsu, que tienen como normal introducir algún aspecto experimental en todos sus proyectos, para romper así con la rutina de sus trabajadores.&lt;br /&gt;&lt;br /&gt;Personalmente, creo que al final todo se puede resumir en un solo concepto: motivación. Muchas veces escuchamos: “se me ha pasado el día volando”. En mi caso, eso siempre pasa ante tareas que realmente me gustan, al afrontar nuevos retos, ante cambios en el equipo a favor de la mejora continua, etc. Estoy convencido de que, siguiendo la línea de una &lt;a href="http://eclijava.blogspot.com/2009/11/como-hacerlo-posible.html"&gt;entrada anterior&lt;/a&gt;, convenientemente motivados un equipo puede conseguir grandes logros. Por tanto, debe ser un tema a tener en cuenta cómo motivar el equipo.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;span style="font-style:italic;"&gt;I can accept failure, everyone fails at something. But I can't accept not trying.&lt;/span&gt;&lt;br /&gt;Michael Jordan&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6771605917876997972?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6771605917876997972/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/12/efecto-hawthorne.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6771605917876997972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6771605917876997972'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/12/efecto-hawthorne.html' title='Efecto Hawthorne'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-4755015398817091323</id><published>2009-12-10T19:06:00.003-01:00</published><updated>2009-12-10T19:50:52.899-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>JUnit 4.7: TemporaryFolder</title><content type='html'>Como comenté en una &lt;a href="http://eclijava.blogspot.com/2009/11/junit-47-rule.html"&gt;entrada anterior&lt;/a&gt;, he estado haciendo pruebas con la versión 4.7 de JUnit (aunque ya está disponible la 4.8, pero esta entrada lleva su tiempo en el tintero).&lt;br /&gt;&lt;br /&gt;Otra funcionalidad que he "descubierto" y me parece muy interesante, la ofrece la clase TemporaryFolder. Con ella, podremos crear archivos y carpetas, con la ventaja de que estos se eliminarán automáticamente al finalizar el test.&lt;br /&gt;&lt;br /&gt;Para muestra un botón:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java" style="font-family: monospace;"&gt;&lt;code&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;package &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;es.gmr.junit;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;java.io.File;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;org.junit.Assert;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;org.junit.Rule;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;org.junit.Test;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;org.junit.rules.TemporaryFolder;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;public class &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;TemporaryFolderTest &lt;/span&gt;&lt;span style="color:#000000;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#646464;"&gt;@Rule&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;TemporaryFolder temporaryFolder =&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;    &lt;/span&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;TemporaryFolder&lt;/span&gt;&lt;span style="color:#000000;"&gt;()&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#646464;"&gt;@Test&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;deberiaPasar&lt;/span&gt;&lt;span style="color:#000000;"&gt;() &lt;/span&gt;&lt;span style="color:#7f0055;"&gt;&lt;b&gt;throws &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Exception &lt;/span&gt;&lt;span style="color:#000000;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;    &lt;/span&gt;&lt;span style="color:#000000;"&gt;File newFile =&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;      &lt;/span&gt;&lt;span style="color:#000000;"&gt;temporaryFolder.newFile&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"gangamuza.txt"&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;    &lt;/span&gt;&lt;span style="color:#000000;"&gt;Assert.assertTrue&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"El fichero no existe"&lt;/span&gt;&lt;span style="color:#000000;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;        &lt;/span&gt;&lt;span style="color:#000000;"&gt;newFile.exists&lt;/span&gt;&lt;span style="color:#000000;"&gt;())&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;En este caso, el test pasará sin problemas, ya que el fichero &lt;span style="font-style:italic;"&gt;gangamuza.txt&lt;/span&gt; se habrá creado en un directorio temporal. (En mi caso, en C:\Documents and Settings\gregoriomr\Configuración local\Temp). Y al finalizar el test, tanto el directorio que se crea temporalmente para almacenar los ficheros, como el fichero &lt;span style="font-style:italic;"&gt;gangamuza.txt&lt;/span&gt; se han eliminado.&lt;br /&gt;&lt;br /&gt;Aunque durante la ejecución del test se produjera una excepción, los directorios y ficheros se eliminarán igualmente, con lo que nos evita tener que controlar muchas situaciones. También tiene un método similar, para crear directoiros: &lt;span style="font-style:italic;"&gt;newFolder&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Por poner un pero, si cancelamos la ejecución del test antes de que finalice, evidentemente no se eliminarán los ficheros y directorios. El "problema" es que cada vez que se ejecuta crea un directorio temporal cuyo nombre sigue el patrón "junit" + 19 dígitos, que va cambiando en cada ejecución. Por lo que un directorio que se quede sin borrar, ya no será recuperado y no ha implementado forma de eliminarlo en la siguiente iteración.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-4755015398817091323?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/4755015398817091323/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/12/junit-47-temporaryfolder.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4755015398817091323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4755015398817091323'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/12/junit-47-temporaryfolder.html' title='JUnit 4.7: TemporaryFolder'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1486279157611737579</id><published>2009-12-05T09:30:00.002-01:00</published><updated>2009-12-05T09:48:59.026-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Eventos: Curso de ATDD+TDD en Tenerife (Enero 2010)</title><content type='html'>Ha pasado bastante tiempo desde que anuncié el último evento que consideré interesante. Pero la verdad es que ha faltado algo de tiempo, y también ha influido el hecho de que esté organizando yo mismo los próximos eventos que anunciaré. Pero antes de hacerlo, tengo el placer de anunciar el próximo &lt;a href="http://www.iexpertos.com/es/blog/proximo-curso-de-tdd-en-tenerife-enero-2010"&gt;curso de ATDD + TDD&lt;/a&gt; que impartirá &lt;a href="http://www.carlosble.com/?p=506"&gt;Carlos Ble&lt;/a&gt;, la quinta edición ya. Curso para el que me ha brindado la oportunidad de colaborar &lt;img alt=";)" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif" align="absmiddle" /&gt;&lt;br /&gt;&lt;br /&gt;Personalmente me alegro de haber contribuido a que se realizara la anterior edición en Tenerife, porque creo que es un curso recomendable y del que la gente a la que animé salió contenta (o por lo menos no me han dicho lo contrario &lt;img alt="Smile" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif" align="absmiddle" /&gt; ). Espero que nos veamos por allí.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-1486279157611737579?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1486279157611737579/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/12/eventos-curso-de-atddtdd-en-tenerife.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1486279157611737579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1486279157611737579'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/12/eventos-curso-de-atddtdd-en-tenerife.html' title='Eventos: Curso de ATDD+TDD en Tenerife (Enero 2010)'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6720290938642593658</id><published>2009-11-11T17:27:00.000-01:00</published><updated>2009-11-11T18:04:34.103-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>JUnit 4.7: @Rule</title><content type='html'>En mi empresa nos estamos tomando bastante enserio el tema de los tests, así que he dedicado algunos ratos libres a buscar herramientas que nos ayuden en esta tarea. Entre otras cosas, he leído sobre la versión 4.7 de JUnit, y descubrí una característica bastante interesante. Para presentarla, voy a seguir un ejemplo que probablemente haga que se les ponga los pelos de punta a muchos, pero creo que es un ejemplo bastante sencillo y claro.&lt;br /&gt;&lt;br /&gt;Supongamos que tenemos una batería de test, y de alguna forma queremos hacer que ciertos tests se ejecuten los días pares y el resto los impares. Lo primero es definir una nueva anotación para poder anotar en los test si se deben ejecutar los días pares o los impares.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java" style="font-family: monospace;"&gt;&lt;code&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;package&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;es.gmr.junit;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;java.lang.annotation.ElementType;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;java.lang.annotation.Retention;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;java.lang.annotation.RetentionPolicy;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;java.lang.annotation.Target;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#646464"&gt;@Retention&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;RetentionPolicy.RUNTIME&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#646464"&gt;@Target&lt;/font&gt;&lt;font color="#000000"&gt;({&lt;/font&gt;&lt;font color="#000000"&gt;ElementType.METHOD&lt;/font&gt;&lt;font color="#000000"&gt;})&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;@interface&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;DateAnnotation&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;boolean&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;ejecutarDiasPares&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;default&amp;nbsp;true&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Esta nueva funcionalidad de JUnit, requiere que creemos una clase que implemente la interfaz MethodRule. Esta clase interceptará las llamadas a los métodos del test y realizará las acciones convenientes, que en nuestro caso es ejecutar el método si se cumple la condición adecuada (día par o impar).&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java" style="font-family: monospace;"&gt;&lt;code&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;package&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;es.gmr.junit;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;java.util.Calendar;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;org.junit.rules.MethodRule;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;org.junit.runners.model.FrameworkMethod;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;org.junit.runners.model.Statement;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;ManejadorEjecucion&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;implements&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;MethodRule&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#646464"&gt;@Override&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Statement&amp;nbsp;apply&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;Statement&amp;nbsp;stament,&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;final&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;FrameworkMethod&amp;nbsp;frameworkMethod,&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;final&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Object&amp;nbsp;obj&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;return&amp;nbsp;new&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Statement&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#646464"&gt;@Override&lt;/font&gt;&lt;br /&gt;        &lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;void&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;evaluate&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;throws&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Throwable&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;DateAnnotation&amp;nbsp;dateAnnotation&amp;nbsp;=&amp;nbsp;frameworkMethod.getAnnotation(DateAnnotation.&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffffff"&gt;            &lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;dateAnnotation&amp;nbsp;==&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffffff"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;frameworkMethod.invokeExplosively&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;obj&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffffff"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;}&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;else&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffffff"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;Calendar&amp;nbsp;calendar&amp;nbsp;=&amp;nbsp;Calendar.getInstance&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffffff"&gt;            &lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;boolean&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;hoyEsPar&amp;nbsp;=&amp;nbsp;calendar.get&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;Calendar.DAY_OF_MONTH&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;%&amp;nbsp;&lt;/font&gt;&lt;font color="#990000"&gt;2&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;==&amp;nbsp;&lt;/font&gt;&lt;font color="#990000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;boolean&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;ejecutarDiasPares&amp;nbsp;=&amp;nbsp;dateAnnotation.ejecutarDiasPares&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;hoyEsPar&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;ejecutarDiasPares&amp;nbsp;||&amp;nbsp;!hoyEsPar&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!ejecutarDiasPares&lt;/font&gt;&lt;font color="#000000"&gt;){&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;frameworkMethod.invokeExplosively&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;obj&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&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;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Por último, en la clase donde se implementan los test, debe haber declarada una variable pública del tipo de la clase que hemos implementado en el punto anterior (&lt;span style="font-style:italic;"&gt;ManejadorEjecucion&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt;) y anotada con @Rule.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java" style="font-family: monospace;"&gt;&lt;code&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;package&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;es.gmr.junit;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;org.junit.Rule;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;org.junit.Test;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;TestPruebas&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#646464"&gt;@Rule&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;ManejadorEjecucion&amp;nbsp;manejadorEjecucion&amp;nbsp;=&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;ManejadorEjecucion&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#646464"&gt;@Test&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#646464"&gt;@DateAnnotation&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;ejecutarDiasPares&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;void&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;diasParesTest&lt;/font&gt;&lt;font color="#000000"&gt;(){&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;System.out.println&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;Hoy&amp;nbsp;es&amp;nbsp;par&amp;#34;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;...&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#646464"&gt;@Test&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#646464"&gt;@DateAnnotation&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;ejecutarDiasPares&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;void&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;diasImparesTest&lt;/font&gt;&lt;font color="#000000"&gt;(){&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;System.out.println&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;Hoy&amp;nbsp;es&amp;nbsp;impar&amp;#34;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//...&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Al ejecutar, veremos que hoy sólo se lanzará el test diasImparesTest.&lt;br /&gt;&lt;br /&gt;Como comentaba al principio, esto es sólo un ejemplo para "jugar" con esta anotación. He estado haciendo pruebas para crear mocks, o probar concurrencia, pero son ejemplos que seguro que se llevarían muchas más líneas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6720290938642593658?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6720290938642593658/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/11/junit-47-rule.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6720290938642593658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6720290938642593658'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/11/junit-47-rule.html' title='JUnit 4.7: @Rule'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7051283658717741847</id><published>2009-11-03T18:40:00.000-01:00</published><updated>2009-11-03T19:08:29.775-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><title type='text'>¿Cómo hacerlo posible?</title><content type='html'>Desde que empecé a interesarme por las metodologías ágiles, he leído varias veces que la gente habla de un problema recurrente: el rechazo al cambio.&lt;br /&gt;&lt;br /&gt;Para poder entrar en estas metodologías se requiere un cambio importante, ya que debemos modificar la forma de pensar, organizarnos, realizar las tareas, enfocar los objetivos, etc. Todo esto sumado a un considerable esfuerzo orienado a la formación, ya que se hacen imprescindibles ciertas herramientas y se deben aplicar nuevas metodologías de programación.&lt;br /&gt;&lt;br /&gt;Personalmente creo que el primer error en este camino es preguntarnos si es posible el cambio en nuestro equipo. Puede que lleve poco tiempo en el negocio como para que mi forma de pensar se haya amoldado a la realidad, y por eso yo creo que la respuesta a esta pregunta es SÍ, por lo que sobra.&lt;br /&gt;&lt;br /&gt;Nos solemos encontrar con el típico problema del tiempo, pero debemos ser realistas, y pensar que nuestros días tienen las mismas horas que los del resto de las empresas, sobre todo aquellas situadas en países en los que, con bastante ventaja sobre nosotros, estas metodologías se han impuesto con excelentes resultados. No se trata de experimentar, estamos hablando de algo que ha demostrado su valor. Por todo esto, cada vez que debamos plantear un cambio que nos haga mejorar, creo que se debería cambiar la pregunta ¿es posible? por esta otra: ¿cómo lo hago posible?.&lt;br /&gt;&lt;br /&gt;Si crees que esto que he dicho no tiene mucho sentido, piensa por un momento si como usuario de un metro, podrías cambiar la forma de pensar del resto de usuarios para que en vez de saturar las escaleras mecánicas prefirieran subir y bajar caminando. O hacer cambiar la mentalidad de los usuarios de un parque, para que hagan uso de las papeleras... ¿Parece imposible verdad? La gente de "&lt;a href="http://www.thefuntheory.com/"&gt;The fun Theory&lt;/a&gt;", una iniciativa que recomiendo seguir, probablemente no se preguntaron si era posible, simplemente pensaron en cómo hacerlo.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2lXh2n0aPyw&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/2lXh2n0aPyw&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cbEKAwCoCKw&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/cbEKAwCoCKw&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7051283658717741847?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7051283658717741847/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/11/como-hacerlo-posible.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7051283658717741847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7051283658717741847'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/11/como-hacerlo-posible.html' title='¿Cómo hacerlo posible?'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-3908861664726684158</id><published>2009-11-03T18:38:00.001-01:00</published><updated>2009-11-03T18:38:29.313-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>De vuelta...</title><content type='html'>Tras varias semanas moviditas, ya casi puedo dar por finalizado uno de los proyectos más importantes a los que me he enfrentado: comprar mi propio piso y mudarme. Mi novia y yo no pensábamos que conllevara tanto trabajo. Nos decidimos por un piso que estaba completamente vacío, así que tuvimos que invertir bastante tiempo en comprar los electrodomésticos, luces, muebles, camas, etc., etc., etc.&lt;br /&gt;&lt;br /&gt;En un equipo de dos personas, ambos pasamos por todos los roles: electricistas, albañiles, pintores, carpinteros, ... ;) Y sumando, al final nos damos cuenta de que hemos invertido muchas horas.&lt;br /&gt;&lt;br /&gt;En cuanto al papeleo, es otro tema que se llevó su tiempo. Probablemente haya un arbolito menos por nuestra culpa :S&lt;br /&gt;&lt;br /&gt;Pero ya CASI todo está en su sitio, y por fin las cosas volverán a la normalidad. Actualizar el blog es una de tantas tareas que he tenido que dejar de lado, pero espero volver a retomarla. Intentaré que el contenido vaya mejorando, y ser constante. De momento, he cambiado la imagen (etapa nueva, look nuevo) y por lo menos ya hay una referencia a quién escribe "&lt;a href="http://www.ingprod.com/"&gt;About&lt;/a&gt;", que ya han sido varias las personas que me han comentado que debería estar. Aunque me queda como tarea pendiente actualizar mi CV, ya que según lo que consta en él, todavía trabajo en la empresa que dejé hace más de un año :S&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-3908861664726684158?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/3908861664726684158/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/11/de-vuelta.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3908861664726684158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3908861664726684158'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/11/de-vuelta.html' title='De vuelta...'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-9042852701281667153</id><published>2009-10-15T05:32:00.000Z</published><updated>2009-10-15T05:45:17.437Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Eventos: Integración Continua - Buenas Prácticas</title><content type='html'>Ya he publicado algunos eventos, pero hay lo hago con especial ilusión, ya que soy uno de las personas que están implicadas en su organización. Justo ahora acabo de publicarlo en &lt;a href="http://www.iexpertos.com/?page_id=148"&gt;iExpertos.com&lt;/a&gt;, se trata de una charla sobre buenas prácticas en la integración continua impartida por &lt;a href="http://jmbeas.blogspot.com/"&gt;José Manuel Beas&lt;/a&gt; aquí, en Tenerife, el 7 de Noviembre de 10:30 a 14:30.&lt;br /&gt;&lt;br /&gt;   Sigo creyendo que con convicción podemos conseguir una formación de calidad entre todos, sin tener que ir a por ella a otros lugares. Espero que se animen y aprevechen la que considero una gran oportunidad, ya que José Manuel Beas sin duda tiene mucho que aportar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-9042852701281667153?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/9042852701281667153/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/10/eventos-integracion-continua-buenas.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/9042852701281667153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/9042852701281667153'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/10/eventos-integracion-continua-buenas.html' title='Eventos: Integración Continua - Buenas Prácticas'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1325800691715280961</id><published>2009-09-24T23:21:00.000Z</published><updated>2009-09-24T23:22:10.215Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Eventos: Metodologías ágiles &amp;&amp; Scrum &amp;&amp; ISTQB</title><content type='html'>En la &lt;a href="http://eclijava.blogspot.com/2009/09/eventos-scrum.html"&gt;entrada anterior&lt;/a&gt; comenté que una de las opciones para realizar un curso de Scrum era el portal &lt;a href="http://www.scrummanager.net/"&gt;ScrumManager&lt;/a&gt;. Ya he terminado el curso, y debo decir, ahora sí con criterio, que merece la pena realizarlo. El formato me ha parecido muy cómodo (lecciones en el portal, documentación, una presentación, enlaces a material extra, ...) y el contenido era muy claro y resultaba fácil asimilar los conceptos. Además, las dudas que pudieran surgir eran rápidamente resueltas en el foro. Del chat no puedo opinar porque no tuve la suerte de poder asistir a ninguna de las dos tutorías.&lt;br /&gt;&lt;br /&gt;Para pasar el examen basta con seguir las lecciones (al menos desde mi punto de vista, aunque hay gente que no lo superó). Yo no tuve mucho tiempo para dedicarle al curso, y no tuve problema en superarlo con un 89% teniendo pendiente aún revisar el pdf y la presentación del curso (me queda el resquemor de no haber sacado un par de horas para mirar con más calma lo que me faltaba y haber acertado las preguntas que me faltaron :S ).&lt;br /&gt;&lt;br /&gt;Además, personalmente apuesto por esta plataforma: la formación es gratuita (y de calidad), por lo que las certificaciones no son sólo un negocio. Además, cada curso te otorga un número determinado de puntos de acreditación, que pueden indicar la cantidad de conocimiento que has ido adquiriendo (no basta con hacer el curso, debes superar una prueba), así como tu interés por aprender constantemente. Ofrecen un directorio de profesionales certificados. Y es un punto de encuentro para compartir conocimientos y seguir aprendiendo.&lt;br /&gt;&lt;br /&gt;Actualmente está abierta la matrícula para el &lt;a title="Haga clic aquí para entrar al curso" href="http://www.scrummanager.net/ok/course/view.php?id=5"&gt;Curso de Introducción Scrum Manager&lt;/a&gt;, que empezará el 1 de Octubre. Y el 28 de Septiembre se volverá a abrir el plazo para matricularse en el curso &lt;a title="Haga clic aquí para entrar al curso" href="http://www.scrummanager.net/ok/course/view.php?id=4"&gt;Scrum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Del 6 al 8 de Octubre se impartirá el curso: Certificación Ingeniero de Pruebas ISTQB en Madrid, pudiendo realizar el examen para obtener la certificación el día 8. Creo que es una opción muy interesante (de hecho me han avisado porque ya me interesé por él hace tiempo), ya que se imparte en español y es un tema que me interesa mucho, pero el precio (1400 euros el curso más 200 el examen) hacen que de momento lo tenga que dejar pasar... igual alguno de ustedes tiene más suerte ;). Yo por ahora, tengo en mi pila de tareas pendiente el mirar la &lt;a href="http://www.calidadysoftware.com/descargas/Full_ISTQB_material_for_foundation_level.zip"&gt;documentación&lt;/a&gt; que te prepara para el examen (en inglés).&lt;br /&gt;&lt;br /&gt;Otro evento en el que me encantaría estar (aunque no va a poder ser) es el &lt;a href="http://www.agile-spain.com/agile-open-spain-2009"&gt;Agile Open Spain&lt;/a&gt;, que se celebrará en Madrid los días 23 y 24 de octubre. En &lt;a href="http://groups.google.es/group/agile-spain/web/sesiones-agile-open-spain-2009"&gt;este enlace&lt;/a&gt; se puede ver los temas que se han ido proponiendo, o proponer algún tema nuevo. Los nombres de las personas que ya han hecho propuestas ya son familiares a los que intentamos aprender algo de este mundillo, y sin duda  será un gran evento.&lt;br /&gt;&lt;br /&gt;P.D.: Para que los conceptos estén siempre presentes un &lt;a href="http://willyxoft.posterous.com/test-1-102"&gt;fondo de pantalla&lt;/a&gt; ... algo friki ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-1325800691715280961?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1325800691715280961/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/09/eventos-metodologias-agiles-scrum-istqb.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1325800691715280961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1325800691715280961'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/09/eventos-metodologias-agiles-scrum-istqb.html' title='Eventos: Metodologías ágiles &amp;&amp; Scrum &amp;&amp; ISTQB'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8215652020940743602</id><published>2009-09-09T16:10:00.000Z</published><updated>2009-09-09T16:42:21.561Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Eventos: Scrum</title><content type='html'>Supongo que a muchos les habrá pasado como a mí: enterarse de un curso cuando ya ha acabado, o no quedan plazas. Mi idea es aportar mi humilde granito de arena, indicando los eventos que me puedan parecer interesantes, para compartirlos con todos ustedes, por si fuera de su interés. Igualmente, cualquier noticia saben que será bien recibida ;)&lt;br /&gt;&lt;br /&gt;   En esta entrada pondré tres alternativas para los que quieran aprender un poco más de Scrum (a través de cursos claro):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.scrummanager.net/ok/"&gt;La primera opción&lt;/a&gt; es gratuita y online. El curso lo imparte &lt;a href="http://www.linkedin.com/in/cruata"&gt;Claudia Ruata&lt;/a&gt;, y aunque empezó hace poco, lo que he visto ya es suficiente para decir que está muy bien y el contenido es realmente bueno, igual que la plataforma usada. Ya no es posible matricularse para esta edición, pero irán saliendo nuevas convocatorias.&lt;/li&gt;&lt;li&gt;Si se prefiere un curso presencial, se tiene esta &lt;a href="http://www.ebtecnos.es/sections/actualidad-formativa/curso-de-metodologia/downloadFile/attachedFile_f0/Programa_Curso_Scrum.pdf?nocache=1251364840.16"&gt;otra opción&lt;/a&gt;. Está organizado por &lt;a href="http://www.ebtecnos.es/"&gt;EBTecnos&lt;/a&gt; y se impartirá el 5 y 6 de noviembre en Málaga (de 9:30 a 18:30 con una hora para almorzar), y el coste es de sólo 290 euros (260 para los socios). En este caso el profesor es Ángel Medinilla, del que soy un fiel seguidor y creo que asistir a un curso impartido por él sería una gran oportunidad.&lt;/li&gt;&lt;li&gt;La tercera opción sería en Madrid el 12 y 13 de noviembre. En este caso el coste es de 464 euros (incluidos los dos almuerzos). El horario y el profesor son los mismos que en el caso anterior.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;   Los que estén interesados en las opciones presenciales, si quieren pueden ponerse en contacto conmigo, ya que para el curso de Madrid podrían conseguir un descuento de hasta 60 euros (teniendo en cuenta que hay que pagar el curso, los billetes y la estancia, no está nada mal), y para el curso de Málaga, igualmente si hay gente interesada se podría buscar la forma de ahorrar gastos.&lt;br /&gt;&lt;br /&gt;   P.D.: Para los que no lean a Ángel, dejo un enlace a &lt;a href="http://www.presionblogosferica.com/2009/08/28/fabulas-empresariales-el-mago-del-metodo/"&gt;una de las entradas de su blog&lt;/a&gt; que me ha parecido muy buena ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8215652020940743602?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8215652020940743602/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/09/eventos-scrum.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8215652020940743602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8215652020940743602'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/09/eventos-scrum.html' title='Eventos: Scrum'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1809369119621077440</id><published>2009-08-24T16:26:00.000Z</published><updated>2009-08-24T16:46:17.269Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Hibernate: Usando un constructor en las sentencias HQL</title><content type='html'>De vuelta a la "rutina" y con las pilas cargadas tras las vacaciones, voy a escribir una nota que tenía pendiente hace tiempo.&lt;br /&gt;&lt;br /&gt;Se trata de la posibilidad de usar un constructor dentro de una sentencia &lt;a href="https://www.hibernate.org/hib_docs/nhibernate/html/queryhql.html"&gt;HQL&lt;/a&gt;. Por ejemplo (y me vuelvo a mojar con los ejemplos aunque no suelo elegir los más adecuados) puede que en nuestra arquitectura tengamos beans para gestionar las vistas, y que uno de estos beans maneje datos de varias clases del modelo. Podría ser interesante en determinadas ocasiones, que en las consultas podamos obtener directamente instancias de este bean, para no tener que obtener una instancia del modelo con cierto número de campos y relaciones, cuando sólo nos interesa unos pocos datos.&lt;br /&gt;&lt;br /&gt;La forma de hacerlo es realmente simple, basta con añadir el new a la sentencia, e indicar los parámetros que le pasamos al constructor. Un ejemplo simple sería (no describo la clase Usuario ya que es sencillo imaginarla):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;select new DatosUsuario(usr.id, usr.nombre, usr.direccion.codigoPostal)&lt;br /&gt;from Usuario usr ...&lt;span style="font-weight: bold;"&gt;&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/4286784136012598160-1809369119621077440?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1809369119621077440/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/08/hibernate-usando-un-constructor-en-las.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1809369119621077440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1809369119621077440'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/08/hibernate-usando-un-constructor-en-las.html' title='Hibernate: Usando un constructor en las sentencias HQL'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-6054807678440138748</id><published>2009-08-04T07:27:00.000Z</published><updated>2009-08-04T07:46:04.365Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><title type='text'>Ágil: eventos</title><content type='html'>Esta entrada en realidad es sólo una cuña publicitaria, intentando aportar mi humilde granito de arena para promover el desarrollo ágil.&lt;br /&gt;&lt;br /&gt;Hace poco se dieron en la Tenerife Lan Party 2K9 dos charlas relacionadas con estos temas, una dada por &lt;a href="http://jmbeas.blogspot.com/"&gt;José Manuel Beas&lt;/a&gt; ("&lt;a href="http://www.tenerife-lanparty.com/2k9/tecnicas-desarrollo-agil-de-software.html"&gt;Cómo dar los primeros pasos en el agilismo&lt;/a&gt;") y otra por &lt;a href="http://www.carlosble.com"&gt;Carlos Ble&lt;/a&gt; ("&lt;a href="http://www.tenerife-lanparty.com/2k9/los-principios-agiles.html"&gt;Los principios ágiles&lt;/a&gt;"). El caso es que tras las charlas, algunos fuimos a tomar algo y seguir hablando, y ahí se sacaron unas fotos. José Manuel me ha pasado el enlace a la foto (en la que él precisamente no sale), que es &lt;a href="http://picasaweb.google.com/lh/photo/c9VFcX766AY8aoTz-M6UWw?feat=directlink"&gt;este&lt;/a&gt;. La idea de publicar esta foto, es demostrar que por estos lares (Tenerife) hay bastante gente interesada en estos temas, y creo que la idea del grupo Agil Canarias puede ser una realidad. Ahora muchos estamos de vacaciones (esta entrada se cocina en La Gomera ;) ) pero en septiembre espero animar a Carlos para que se organice otro encuentro. Personalmente, la forma de funcionar del grupo de Barcelona me parece muy buena, y a ellos le está funcionando muy bien, así que podríamos emularlos. De todas formas, el primer paso es apuntarse en la lista de &lt;a href="http://www.agile-spain.com/"&gt;Agil Spain&lt;/a&gt;, si todavía no lo has hecho y te interesa el tema.&lt;br /&gt;&lt;br /&gt;Aprovechando la entrada "publicitaria", decirles que a finales de agosto habrá un curso de Scrum en Valencia. En &lt;a href="http://www.xtremobyte.com/xsot/curso21.php"&gt;este enlace&lt;/a&gt; está toda la información. El curso lo dará &lt;a href="http://www.navegapolis.net/"&gt;Juan Palacio&lt;/a&gt;, y la verdad es que el precio me parece bastante interesante (incluye la certificación). Si te animas, probablemente nos veamos por allí ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-6054807678440138748?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/6054807678440138748/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/08/agil-eventos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6054807678440138748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/6054807678440138748'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/08/agil-eventos.html' title='Ágil: eventos'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7185614939096135952</id><published>2009-07-30T21:07:00.000Z</published><updated>2009-07-30T22:21:37.615Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Parametrizar un test JUnit</title><content type='html'>Supongamos que queremos ejecutar un test varias veces con distintos valores. Una opción podría ser algo como lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 415px; height: 250px; text-align: left;"&gt;&lt;code&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;es.gmr.test;&lt;/span&gt;&lt;br /&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;java.util.Arrays;&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;java.util.List;&lt;/span&gt;&lt;br /&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.junit.Before;&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.junit.Test;&lt;/span&gt;&lt;br /&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;junit.framework.Assert;&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;TestParametrizar &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;List&amp;lt;Integer&amp;gt; datos;&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;@Before&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;setUp&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(127, 0, 85);"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.datos = Arrays.asList&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;5&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;6&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;}&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;@Test&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;test&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;for &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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer num : &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;.datos&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;testEsPar&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;num&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;}&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(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;testEsPar&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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer x&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;Assert.assertEquals&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;x + &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;" no es un número par"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;0&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(0, 0, 0);"&gt;x % &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2&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;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Lo malo de esta opción, es que si la ejecutamos (desde Eclipse por ejemplo) veremos lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/SnIWyu25VBI/AAAAAAAAAFQ/QDLgIQxTLJA/s1600-h/EasyCapture1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 87px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/SnIWyu25VBI/AAAAAAAAAFQ/QDLgIQxTLJA/s320/EasyCapture1.png" alt="" id="BLOGGER_PHOTO_ID_5364375166979232786" border="0" /&gt;&lt;/a&gt;Es decir, si uno de los valores del listado no supera el test, no se continuará con los siguientes. Para evitar esto, JUnit 4 nos permite generar parámetros para lanzar varias veces un test con dichos parámetros. Para ello, primero deberemos anotar nuestra clase con @RunWith(Parameterized.class). También tendremos que tener un método anotado con @Parameters, que será el encargado de generar la lista de parámetros. Por último, la clase debe tener un constructor con un argumento del tipo de los parámetros, ya que cada vez que se lance un test, se llamará a este constructor para inicializar el parámetro. Con todo esto, obtenemos el siguiente test:&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 415px; height: 250px; text-align: left;"&gt;&lt;code&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;es.gmr.test;&lt;/span&gt;&lt;br /&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;java.util.ArrayList;&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;java.util.Collection;&lt;/span&gt;&lt;br /&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.junit.Test;&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.junit.runner.RunWith;&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.junit.runners.Parameterized;&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.junit.runners.Parameterized.Parameters;&lt;/span&gt;&lt;br /&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;junit.framework.Assert;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(100, 100, 100);"&gt;@RunWith&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Parameterized.&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;class&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(127, 0, 85);"&gt;&lt;b&gt;public class &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TestParametrizar &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 final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer num;&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;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TestParametrizar&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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer x&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;.num = x;&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(100, 100, 100);"&gt;@Parameters&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 static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Collection&amp;lt;Integer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[]&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt; init&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(127, 0, 85);"&gt;&lt;b&gt;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Collection&amp;lt;Integer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[]&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt; datos = &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;ArrayList&amp;lt;Integer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[]&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&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;datos.add&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] {&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2&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;datos.add&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] {&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;4&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;datos.add&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] {&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;5&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;datos.add&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] {&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;6&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;datos;&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(100, 100, 100);"&gt;@Test&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;test&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;Assert.assertEquals&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;this&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.num + &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;" no es un número par"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;0&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(127, 0, 85);"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.num % &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2&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;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Ahora, se lanzarán tantos tests como parámetros hayamos definido, y el resultado sería algo así:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/SnIcdUEtlwI/AAAAAAAAAFY/ERZuwkHwfak/s1600-h/EasyCapture2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 95px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/SnIcdUEtlwI/AAAAAAAAAFY/ERZuwkHwfak/s320/EasyCapture2.png" alt="" id="BLOGGER_PHOTO_ID_5364381396081940226" border="0" /&gt;&lt;/a&gt;Vemos que cada parámetro hace que se ejecute un test, y aunque con uno de ellos el test falle, se sigue tratando lo siguientes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7185614939096135952?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7185614939096135952/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/07/parametrizar-un-test-junit.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7185614939096135952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7185614939096135952'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/07/parametrizar-un-test-junit.html' title='Parametrizar un test JUnit'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/SnIWyu25VBI/AAAAAAAAAFQ/QDLgIQxTLJA/s72-c/EasyCapture1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-4701681397479187222</id><published>2009-07-26T17:08:00.000Z</published><updated>2009-07-26T17:40:52.895Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><title type='text'>Ser lider (I)</title><content type='html'>Ya hace bastante que no dedico un rato a escribir algo por aquí, y con varios temas en mente a la espera de tiempo, hoy me voy a poner a ello.&lt;br /&gt;&lt;br /&gt;En esta entrada simplemente voy a hacer referencia a dos artículos que a mí personalmente me han hecho reflexionar bastante. El primero es de José Manuel Beas, punto de referencia obligado para todos los que intentamos saber algo sobre metodologías ágiles. Al final del artículo "&lt;a href="http://jmbeas.blogspot.com/2009/07/liderar-mediante-el-ejemplo.html"&gt;Liderar mediante el ejemplo&lt;/a&gt;" (que recomiendo leer) deja la siguiente reflexión:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Si en tu día a día crees que los demás deberían hacer las cosas de otra manera y estás convencido de que las cosas no se pueden cambiar, quizás podrías intentar seguir el ejemplo de Martin Fowler y liderar mediante el ejemplo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hay que ser realmente bueno para poder cambiar la filosofía de un equipo con un simple gesto. A mí me hizo pensar como personas como Fowler, pueden hacer &lt;span style="font-weight:bold;"&gt;cosas grandes con gestos pequeños&lt;/span&gt;. Aunque luego José Manuel me contaba (cuando le comenté que iba a hacer referencia a su artículo, hace ya bastante tiempo :S ) que la historia no era realmente así (luego lo explicaba &lt;a href="http://jmbeas.blogspot.com/2009/07/liderar-mediante-el-ejemplo-fe-de.html"&gt;aquí&lt;/a&gt; y &lt;a href="http://jmbeas.blogspot.com/2009/07/fe-de-erratas-de-la-fe-de-erratas.html"&gt;aquí&lt;/a&gt;) yo me sigo quedando con la idea principal, con el hecho de que si creemos realmente en algo y recorremos con paso firme ese camino puede que al final nos acaben siguiendo.&lt;br /&gt;&lt;br /&gt;Y si se leen el artículo, decir que la lectura "&lt;a href="http://jmbeas.wdfiles.com/local--files/leadership/ReluctantLeaderReluctantFollower.pdf"&gt;Reluctant Leader, Reluctant Follower&lt;/a&gt;" que recomienda José Manuel es realmente interesante. Yo ya me he dejado una frase anotada en mi lista de citas:&lt;br /&gt;&lt;br /&gt;"... &lt;span style="font-style:italic;"&gt;like a river—adapting to the rocks but always flowing down hill&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;El otro artículo puede ser algo más polémico. Hace más o menos una semana, Leonardo De Seta escribió un artículo titulado "&lt;a href="http://www.dosideas.com/metodologias/672-necesitamos-matar-a-las-vacas-sagradas.html"&gt;Necesitamos matar a las vacas sagradas&lt;/a&gt;". No quiero ni imaginar lo difícil que debe ser para alguien, cuestionar la utilidad de un miembro de su equipo dentro del mismo. Imagina que te toca a ti, y le debes decir a un compañero al que conoces hace años que no está aportando gran cosa al equipo y debes prescindir de él; o se lo debes decir a alguien que te saca años de experiencia, o que lleva más tiempo que tú en la empresa/organización, ... Como dice el autor:&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style:italic;"&gt;Pero no es fácil sacar a la luz a nuestras propias vacas sagradas. Suelen ser sagradas por algún motivo (aunque no suele ser muy bueno), y quienes se atrevan a señalar a esta vaca seguramente se encontrarán con rechazo de quienes intentan proteger el pasado de la institución.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;En el artículo, hay una frase que me ha gustado bastante, y creo que esta filosofía nos ayudaría/empujaría a todos a mejorar cada día:&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style:italic;"&gt;Las organizaciones tiene que creer que si cualquier valor, creencia, proceso, política o mantra corporativo es lo suficientemente valioso para tenerlo, también debería ser lo suficientemente fuerte como para ser desafiado&lt;/span&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-4701681397479187222?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/4701681397479187222/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/07/ser-lider-i.html#comment-form' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4701681397479187222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4701681397479187222'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/07/ser-lider-i.html' title='Ser lider (I)'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8231464417625069326</id><published>2009-06-02T19:07:00.000Z</published><updated>2009-06-03T21:56:39.354Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Java: lambdaj</title><content type='html'>Hace unos días, hablando con un amigo, digamos ... Federico, me decía que hace tiempo que no pongo nada en el blog. Y tiene razón, así que aprovechando que he estado jungando con la librería &lt;a href="http://code.google.com/p/lambdaj/"&gt;lambdaj&lt;/a&gt;, voy a poner las pruebitas que he hecho.&lt;br /&gt;&lt;br /&gt;Lambaj emula los lenguajes funcionales, permitiendo tratar colecciones de una forma más sencilla, intentando reducir el número de líneas de código necesarias para operar sobre ellas.&lt;br /&gt;&lt;br /&gt;Antes de empezar, comentar que si miramos el código mostrado en los ejemplos que acompañan a la documentación de la librería, vemos que se llaman directamente funciones como &lt;span style="font-style: italic;"&gt;asList&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;forEach&lt;/span&gt;, ... Evidentemente, si simplemente copiamos y pegamos este código en nuestro proyecto (tras haber incluido la librería), no compilará. Lo que se ha hecho en el ejemplo es importar de forma estática los métodos estáticos de ciertas clases. Es decir, si lo hacemos de la forma más habitual, tendría que hacer algo como:&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 400px; text-align: left;"&gt;&lt;br /&gt;&lt;code&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.Arrays;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Arrays.asList(...)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pero si hacemos uso de los &lt;span style="font-style: italic; font-weight: bold;"&gt;static imports&lt;/span&gt;, que permiten acceso a los miembros estáticos extendiendo el tipo. Es decir, todos los campos estáticos, métodos, etc. estarán disponibles para nuestra Clase. Por ejemplo, podríamos hacer algo como:&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 400px; text-align: left;"&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;java.util.Arrays.asList;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;asList(...)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bien, aclarado esto, vamos a ver algunos ejemplos. Para realizar las pruebas, usé la siguiente clase:&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 500px; height: 250px; text-align: left;"&gt;&lt;code&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;es.gmr.modelo;&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;Coche &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;Integer cilindrada = &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;null&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(127, 0, 85);"&gt;&lt;b&gt;private &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer anyo = &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;null&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(127, 0, 85);"&gt;&lt;b&gt;private &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;boolean &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;disponible = &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;false&lt;/b&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;// --- Constructor&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;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&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;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer cilindrada, Integer anyo&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;.cilindrada = cilindrada;&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;.anyo = anyo;&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;// --- getters &amp;amp;&amp;amp; setters&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;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer getCilindrada&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;cilindrada;&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(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;setCilindrada&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer cilindrada&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;.cilindrada = cilindrada;&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(127, 0, 85);"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer getAnyo&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;anyo;&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(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;setAnyo&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Integer anyo&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;.anyo = anyo;&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(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;boolean &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;isDisponible&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;disponible;&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(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;setDisponible&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;boolean &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;disponible&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;.disponible = disponible;&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;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Y ahí va el primer ejemplo: invocar un método sobre todos los objetos de una lista&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 500px; height: 250px; text-align: left;"&gt;&lt;code&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;es.gmr.pruebas;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ch.lambdaj.Lambda.forEach;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;java.util.Arrays.asList;&lt;/span&gt;&lt;br /&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;java.util.List;&lt;/span&gt;&lt;br /&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;es.gmr.modelo.Coche;&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;PruebaLambdaj &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;public static &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;main&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&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;args&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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;List&lt;coche&gt; listaCoches = asList&lt;/coche&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;1600&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2000&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;1400&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2002&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(127, 0, 85);"&gt;&lt;b&gt;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2005&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;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;forEach&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;listaCoches&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.setDisponible&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;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;for &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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche coche : listaCoches&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;System.out.println&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"¿Está disponible? " &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(0, 0, 0);"&gt;coche.isDisponible&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(42, 0, 255);"&gt;"SI" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;: &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"NO"&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;}&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;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Algo importante a tener en cuenta, que en la documentación no he visto, es que si la clase Coche no tuviera el constructor sin parámetros, tendríamos un error en tiempo de ejecución.&lt;br /&gt;&lt;br /&gt;En el segundo ejemplo se filtrará la lista, obteniendo sólo los coches matriculados después del año 2000. La librería trae algunos filtros, pero lo interesante es que podemos implementar nuestros propios filtros, con la librería &lt;a href="http://code.google.com/p/hamcrest/" style="text-decoration: none; color: rgb(0, 0, 0);"&gt;Hamcrest&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 500px; height: 250px; text-align: left;"&gt;&lt;code&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;es.gmr.pruebas;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ch.lambdaj.Lambda.filter;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;java.util.Arrays.asList;&lt;/span&gt;&lt;br /&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;java.util.List;&lt;/span&gt;&lt;br /&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.hamcrest.Description;&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.hamcrest.Matcher;&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.junit.matchers.TypeSafeMatcher;&lt;/span&gt;&lt;br /&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;es.gmr.modelo.Coche;&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;PruebaLambdaj &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;public static &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;main&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&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;args&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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;List&lt;coche&gt; listaCoches = asList&lt;/coche&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;1600&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2000&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;1400&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2002&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(127, 0, 85);"&gt;&lt;b&gt;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2005&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;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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Matcher&lt;coche&gt; nuevo = &lt;/coche&gt;&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;TypeSafeMatcher&lt;coche&gt;&lt;/coche&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(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;boolean &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;matchesSafely&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche item&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;item.getAnyo&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;() &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2000&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;}&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;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;describeTo&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Description description&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;description.appendText&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"nuevo()"&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;}&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;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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;List&lt;coche&gt; listaFiltrada = filter&lt;/coche&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;nuevo, listaCoches&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;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;for &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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche coche : listaFiltrada&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;System.out.println&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Año matriculación: " &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+ coche.getAnyo&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;}&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;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Por último, vemos dos formas de ordenar la lista, con un &lt;span style="font-style: italic;"&gt;Comparator&lt;/span&gt; y sin él:&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 500px; height: 250px; text-align: left;"&gt;&lt;code&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;es.gmr.pruebas;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ch.lambdaj.Lambda.on;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ch.lambdaj.Lambda.sort;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;import static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;java.util.Arrays.asList;&lt;/span&gt;&lt;br /&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;java.util.Comparator;&lt;/span&gt;&lt;br /&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;java.util.List;&lt;/span&gt;&lt;br /&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;es.gmr.modelo.Coche;&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;PruebaLambdaj &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;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;public static &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;main&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&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;args&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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;List&lt;coche&gt; listaCoches = asList&lt;/coche&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;1600&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2000&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;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;1400&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2002&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(127, 0, 85);"&gt;&lt;b&gt;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;2005&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;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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Comparator&lt;coche&gt; comparator = &lt;/coche&gt;&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;Comparator&lt;coche&gt;&lt;/coche&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;int &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;compare&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche c1, Coche c2&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;-&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;1 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;* c1.getCilindrada&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;()&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.compareTo&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;c2.getCilindrada&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;}&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;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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;List&lt;coche&gt; listaOrdenadaA = sort&lt;/coche&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;listaCoches, on&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche.&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.getCilindrada&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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;List&lt;coche&gt; listaOrdenadaB = sort&lt;/coche&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;listaCoches, on&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche.&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, comparator&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;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;for &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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche coche : listaOrdenadaA&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;System.out.println&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Cilindrada: " &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+ coche.getCilindrada&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;}&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(0, 0, 0);"&gt;System.out.println&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"---"&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;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;for &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;final &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Coche coche : listaOrdenadaB&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;System.out.println&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Cilindrada: " &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+ coche.getCilindrada&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;}&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;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hay muchas más opciones... pero para muestra un botón ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8231464417625069326?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8231464417625069326/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/06/java-lambdaj.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8231464417625069326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8231464417625069326'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/06/java-lambdaj.html' title='Java: lambdaj'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8640254781350644277</id><published>2009-05-19T19:47:00.000Z</published><updated>2009-05-20T18:06:53.579Z</updated><title type='text'>Eclipse: Detail formatters</title><content type='html'>Todos los que nos hemos peleado con el depurador de Eclipse (sin el que no sería nadie) nos habremos fijado en la poca información que se muestra en la vista &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Variables &lt;/span&gt;&lt;/span&gt;a primera instancia. Por ejemplo, si tenemos una clase &lt;span style="font-weight: bold; font-style: italic;"&gt;Usuario &lt;/span&gt;como esta:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/ShMOTXy5k8I/AAAAAAAAAEA/Pn4kFgRdr7E/s1600-h/EasyCapture2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 161px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/ShMOTXy5k8I/AAAAAAAAAEA/Pn4kFgRdr7E/s320/EasyCapture2.png" alt="" id="BLOGGER_PHOTO_ID_5337625709331977154" border="0" /&gt;&lt;/a&gt;Y estamos depurando el siguiente "programa":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/ShMOzW4HvjI/AAAAAAAAAEI/XbXGvsH5Z6U/s1600-h/EasyCapture3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 66px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/ShMOzW4HvjI/AAAAAAAAAEI/XbXGvsH5Z6U/s320/EasyCapture3.png" alt="" id="BLOGGER_PHOTO_ID_5337626258841255474" border="0" /&gt;&lt;/a&gt;La información que nos muestra la vista (si no entramos a desglosar la variable que nos interesa, y no se ha implementado el método &lt;span style="font-weight: bold; font-style: italic;"&gt;toString&lt;/span&gt;) nos dice bastante poco.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/ShMQUNhccPI/AAAAAAAAAEQ/LGJ3kuSi1_o/s1600-h/EasyCapture6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 319px; height: 193px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/ShMQUNhccPI/AAAAAAAAAEQ/LGJ3kuSi1_o/s320/EasyCapture6.png" alt="" id="BLOGGER_PHOTO_ID_5337627922777534706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para evitar esto, Eclipse nos permite usar una expresión alternativa al &lt;span style="font-style: italic; font-weight: bold;"&gt;toString&lt;/span&gt;. Para ello, en tiempo de depuración, pulsamos con el botón derecho sobre la variable que nos interese y seleccionamos &lt;span style="font-weight: bold; font-style: italic;"&gt;New Detail Formater&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/ShQ-267d8zI/AAAAAAAAAEY/-5HZUJxVe58/s1600-h/EasyCapture2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 248px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/ShQ-267d8zI/AAAAAAAAAEY/-5HZUJxVe58/s320/EasyCapture2.png" alt="" id="BLOGGER_PHOTO_ID_5337960571593421618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El editor nos permitirá escribir expresiones, haciendo uso de los métodos y atributos de la clase seleccionada (&lt;span style="font-weight: bold; font-style: italic;"&gt;Usuario&lt;/span&gt;), y ofreciendo la posibilidad de autocompletar el texto al escribir. Si escribimos algo como lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/ShRCBigMcII/AAAAAAAAAEw/4Fc2-HWkmN0/s1600-h/EasyCapture6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 211px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/ShRCBigMcII/AAAAAAAAAEw/4Fc2-HWkmN0/s320/EasyCapture6.png" alt="" id="BLOGGER_PHOTO_ID_5337964052550021250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora la información mostrada en la vista &lt;span style="font-weight: bold; font-style: italic;"&gt;Variables &lt;/span&gt;nos dice mucho más.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/ShRCgPKUHFI/AAAAAAAAAE4/Z6s98Iqj-d4/s1600-h/EasyCapture7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 277px; height: 167px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/ShRCgPKUHFI/AAAAAAAAAE4/Z6s98Iqj-d4/s320/EasyCapture7.png" alt="" id="BLOGGER_PHOTO_ID_5337964579933920338" border="0" /&gt;&lt;/a&gt;Si además queremos que se muestre en la columna Value, accedemos a &lt;span style="font-weight: bold;"&gt;Window - Preferences - Java - Debug - Detail Formatters&lt;/span&gt; y seleccionamos la casilla "&lt;span style="font-weight: bold; font-style: italic;"&gt;As the label for variables&lt;/span&gt; ..."&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/ShRDaRTxjMI/AAAAAAAAAFA/vDmWoksVMQw/s1600-h/EasyCapture8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 229px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/ShRDaRTxjMI/AAAAAAAAAFA/vDmWoksVMQw/s320/EasyCapture8.png" alt="" id="BLOGGER_PHOTO_ID_5337965576942881986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Con lo que ahora la vista quedaría así:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/ShREQg-3lrI/AAAAAAAAAFI/_M8ItD_zdUY/s1600-h/EasyCapture9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 286px; height: 180px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/ShREQg-3lrI/AAAAAAAAAFI/_M8ItD_zdUY/s320/EasyCapture9.png" alt="" id="BLOGGER_PHOTO_ID_5337966508863100594" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8640254781350644277?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8640254781350644277/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/05/eclipse-detail-formatters.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8640254781350644277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8640254781350644277'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/05/eclipse-detail-formatters.html' title='Eclipse: Detail formatters'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/ShMOTXy5k8I/AAAAAAAAAEA/Pn4kFgRdr7E/s72-c/EasyCapture2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-4408596774706932461</id><published>2009-05-13T17:44:00.000Z</published><updated>2009-05-13T18:45:08.093Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Hibernate: @Embeddable</title><content type='html'>Supongamos que estamos ante la siguiente situación: varias clases de nuestro modelo comparten ciertos atributos, y por las razones que sean, no es posible/conveniente plantearlo con herencia. Por ejemplo, varias clases almacenan un &lt;span style="font-weight: bold;"&gt;peso &lt;/span&gt;y una &lt;span style="font-weight: bold;"&gt;altura&lt;/span&gt;. Podríamos tener una clase &lt;span style="font-weight: bold; font-style: italic;"&gt;Medidas&lt;/span&gt;, que centralizara estos campos, e indicar que será "embebida":&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;package &lt;/span&gt;es.gmr.pruebas;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;import&lt;/span&gt; javax.persistence.Column;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;import&lt;/span&gt; javax.persistence.Embeddable;&lt;br /&gt;&lt;br /&gt;@Embeddable&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;public class &lt;/span&gt;Medidas {&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name="PESO")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Integer peso;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name="ALTURA")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Integer altura;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ...&lt;br /&gt;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Ahora, cada clase que necesite estos campos, sólo tendrá que añadir una instancia de &lt;span style="font-weight: bold; font-style: italic;"&gt;Medidas &lt;/span&gt;y ya tendrá incluida las anotaciones para &lt;span style="font-weight: bold; font-style: italic;"&gt;peso &lt;/span&gt;y &lt;span style="font-weight: bold; font-style: italic;"&gt;altura &lt;/span&gt;como si fueran atributos propios.&lt;br /&gt;&lt;br /&gt;¿Pero qué pasa si para una determinada clase, las columnas de la tabla correspondiente en base de datos no se llaman PESO y ALTURA?. ¿O si una clase en concreto necesita dos instancias de &lt;span style="font-weight: bold; font-style: italic;"&gt;Medidas&lt;/span&gt;? En esos casos podríamos sobrescribir el mapeo, con la anotación &lt;span style="font-style: italic;"&gt;@AttributeOverrides&lt;/span&gt;. Un ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;package &lt;/span&gt;es.gmr.pruebas;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;import&lt;/span&gt; javax.persistence.*;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "MY_CLASE")&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;public class &lt;/span&gt;MyClase {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;span style="color: rgb(51, 204, 0);"&gt;// Usará los valores dados por defecto en el mapeo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Medidas unaMedida;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   @Embedded&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   @AttributeOverrides( {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      @AttributeOverride(name="peso", column =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;         @Column(name="OTRO_PESO") ),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      @AttributeOverride(name="altura", column =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;         @Column(name="OTRA_ALTURA") )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   } )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   IntegerMedidas otraMedida;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ...&lt;br /&gt;}&lt;/div&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-4408596774706932461?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/4408596774706932461/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/05/hibernate-embeddable.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4408596774706932461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/4408596774706932461'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/05/hibernate-embeddable.html' title='Hibernate: @Embeddable'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-3525521923484571100</id><published>2009-04-27T17:56:00.000Z</published><updated>2009-04-27T18:52:40.821Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Property Editor</title><content type='html'>Hace ya bastantes días que no escribo nada aquí, pero hoy tengo ingredientes suficientes para hacer un nuevo post: tiempo y un tema. Aunque es el primer día del &lt;a href="http://www.springsource.com/training/spr001"&gt;curso&lt;/a&gt;, ya tengo cositas para mantener el blog activo, así que espero que junto a otros temas que tengo pendientes de escribir, pueda mantener esto vivo.&lt;br /&gt;&lt;br /&gt;Hasta ahora, cuando definía un bean en Spring, para asignar valores a sus atributos o hacía referencia a otro bean, o a un tipo "simple".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/SfX9HqTJK9I/AAAAAAAAADo/eAu3kD3-W7s/s1600-h/EasyCapture14.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 57px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/SfX9HqTJK9I/AAAAAAAAADo/eAu3kD3-W7s/s320/EasyCapture14.png" alt="" id="BLOGGER_PHOTO_ID_5329444042118343634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;¿Pero qué ocurre si &lt;span style="font-style: italic; font-weight: bold;"&gt;var02 &lt;/span&gt;no fuera de tipo Integer, String, List, ... sino que se trata de una clase de nuestro dominio? Para esto, Spring nos ofrece los &lt;span style="font-weight: bold; font-style: italic;"&gt;Property Editor&lt;/span&gt;. Para ver su funcionamiento, veamos un ejemplo. Supongamos que tenemos la siguiente clase:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/SfX4JYN1DCI/AAAAAAAAADI/wR7wVAXPILc/s1600-h/EasyCapture5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 237px; height: 131px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/SfX4JYN1DCI/AAAAAAAAADI/wR7wVAXPILc/s320/EasyCapture5.jpg" alt="" id="BLOGGER_PHOTO_ID_5329438574065814562" border="0" /&gt;&lt;/a&gt;Y que ahora, el atributo &lt;span style="font-style: italic; font-weight: bold;"&gt;var02 &lt;/span&gt;de &lt;span style="font-style: italic; font-weight: bold;"&gt;MiClase &lt;/span&gt;será una instancia de &lt;span style="font-weight: bold; font-style: italic;"&gt;Usuario&lt;/span&gt;. La declaración anterior, nos daría un error, ya que el &lt;span style="font-weight: bold; font-style: italic;"&gt;setVar02 &lt;/span&gt;espera un parámetro de tipo &lt;span style="font-weight: bold; font-style: italic;"&gt;Usuario&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;El primer paso que debemos dar para solucionar esta situación, es implementar una clase que a partir de una cadena de texto sea capaz de crear una instancia de &lt;span style="font-weight: bold; font-style: italic;"&gt;Usuario&lt;/span&gt;, y a la vez, a partir de una instancia de &lt;span style="font-weight: bold; font-style: italic;"&gt;Usuario &lt;/span&gt;nos devuelva una cadena de texto, para que se encargue de "traducir" lo que hayamos configurado. Esta clase debe extender a &lt;span style="font-style: italic; font-weight: bold;"&gt;java.beans.PropertyEditorSupport&lt;/span&gt; y sobreescribir los métodos:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;public void setAsText(String text) throws IllegalArgumentException&lt;/li&gt;&lt;li&gt;public String getAsText()&lt;/li&gt;&lt;/ol&gt;Para nuestro caso, un ejemplo puede ser la siguiente clase:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/SfX-DsJRECI/AAAAAAAAADw/wH7GuTmuqFw/s1600-h/EasyCapture15.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/SfX-DsJRECI/AAAAAAAAADw/wH7GuTmuqFw/s320/EasyCapture15.png" alt="" id="BLOGGER_PHOTO_ID_5329445073405939746" border="0" /&gt;&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;El siguiente paso es indicarle a Spring que queremos añadir nuestro propio &lt;span style="font-style: italic;"&gt;Property Editors&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/SfX-V0CqsSI/AAAAAAAAAD4/5oHtZaDJuVo/s1600-h/EasyCapture16.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 78px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/SfX-V0CqsSI/AAAAAAAAAD4/5oHtZaDJuVo/s320/EasyCapture16.png" alt="" id="BLOGGER_PHOTO_ID_5329445384763388194" border="0" /&gt;&lt;/a&gt;Y ahora si que podremos definir &lt;span style="font-style: italic; font-weight: bold;"&gt;miBean&lt;/span&gt;, haciendo que &lt;span style="font-style: italic; font-weight: bold;"&gt;var02 &lt;/span&gt;se inicialice con una instancia de &lt;span style="font-style: italic; font-weight: bold;"&gt;Usuario&lt;/span&gt;, en la que &lt;span style="font-weight: bold; font-style: italic;"&gt;nombre &lt;/span&gt;contendrá la cadena "Gregorio" y &lt;span style="font-style: italic; font-weight: bold;"&gt;apellido &lt;/span&gt;la cadena "Mena".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/SfX8uXejT0I/AAAAAAAAADg/LLOH6DSAsA8/s1600-h/EasyCapture13.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 55px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/SfX8uXejT0I/AAAAAAAAADg/LLOH6DSAsA8/s320/EasyCapture13.png" alt="" id="BLOGGER_PHOTO_ID_5329443607569190722" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-3525521923484571100?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/3525521923484571100/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/04/property-editor.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3525521923484571100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/3525521923484571100'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/04/property-editor.html' title='Property Editor'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__M-jEzMkoHM/SfX9HqTJK9I/AAAAAAAAADo/eAu3kD3-W7s/s72-c/EasyCapture14.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7124136212927137174</id><published>2009-04-05T12:38:00.000Z</published><updated>2009-04-05T18:02:22.879Z</updated><title type='text'>Trucos para Eclipse (I)</title><content type='html'>Cuando se pasa tantas horas al día trabajando con una aplicación, conocer algunos de sus &lt;span style="font-style: italic;"&gt;truquitos&lt;/span&gt; puede suponer un ahorro de tiempo importante a la larga.&lt;br /&gt;Hoy me he decidido a escribir el primer post de una serie "&lt;span style="font-style: italic;"&gt;Trucos para Eclipse (N)&lt;/span&gt;" que espero que vaya creciendo poco a poco.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Escapar texto al pegar&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Supongamos que tenemos la siguiente línea de código&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;String mensaje = &lt;span style="color: rgb(51, 102, 255);"&gt;"Los archivos deben estar en "&lt;/span&gt;;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;y copiamos y pegamos lo siguiente &lt;span style="font-style: italic;"&gt;"C:\temp"&lt;/span&gt;. Como no se han escapado las comillas, Eclipse avisará del error; y además debemos tener en cuenta que  &lt;span style="font-weight: bold;"&gt;\t&lt;/span&gt; representa un tabulador...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/SdirKcK6XpI/AAAAAAAAACg/tax-f5SEGLA/s1600-h/EasyCapture2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 506px; height: 57px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/SdirKcK6XpI/AAAAAAAAACg/tax-f5SEGLA/s320/EasyCapture2.png" alt="" id="BLOGGER_PHOTO_ID_5321191155587243666" border="0" /&gt;&lt;/a&gt;Para evitar esto, le podemos indicar a Eclipse que escape, por nosotros, el texto necesario. Para ello, vamos a &lt;span style="font-weight: bold;"&gt;Window -&gt; Preference -&gt; Java -&gt; Editor -&gt; Typing&lt;/span&gt;  y marcamos la casilla &lt;span style="font-weight: bold;"&gt;"Escape text when pasting into a string literal"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__M-jEzMkoHM/Sdi1hHZjyXI/AAAAAAAAACo/c2SwU1TzJek/s1600-h/EasyCapture1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 311px; height: 73px;" src="http://2.bp.blogspot.com/__M-jEzMkoHM/Sdi1hHZjyXI/AAAAAAAAACo/c2SwU1TzJek/s320/EasyCapture1.png" alt="" id="BLOGGER_PHOTO_ID_5321202540264802674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Búsquedas incrementales&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hasta hace poco tiempo, para realizar búsquedas en el fichero que estaba editando, usaba el &lt;span style="font-weight: bold;"&gt;Ctrl + F&lt;/span&gt; de toda la vida. Lo malo es que el Firefox, por ejemplo, me tenía mal acostumbrado y por eso echaba de menos que Eclipse fuera realizándo la búsqueda conforme yo iba introduciendo el texto a buscar. Para mi alegría, me entero de que esto mismo se puede hacer usando &lt;span style="font-style: italic; font-weight: bold;"&gt;Ctrl + J&lt;/span&gt;. Cuando lo hayamos pulsado, en la barra inferior indicará que estamos realizando una búsqueda incremental, y podremos in escribiendo el texto que queremos buscar.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/Sdi1xDM43DI/AAAAAAAAACw/AQ2S6gRDWxo/s1600-h/EasyCapture2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 46px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/Sdi1xDM43DI/AAAAAAAAACw/AQ2S6gRDWxo/s320/EasyCapture2.png" alt="" id="BLOGGER_PHOTO_ID_5321202814015822898" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7124136212927137174?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7124136212927137174/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/04/trucos-para-eclipse-i.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7124136212927137174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7124136212927137174'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/04/trucos-para-eclipse-i.html' title='Trucos para Eclipse (I)'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__M-jEzMkoHM/SdirKcK6XpI/AAAAAAAAACg/tax-f5SEGLA/s72-c/EasyCapture2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8125784368889051724</id><published>2009-04-01T19:15:00.000Z</published><updated>2009-04-01T21:35:22.975Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='calidad'/><title type='text'>FindBugs</title><content type='html'>Hace poco más de año y medio que empecé a trabajar por cuenta ajena y tuve mi primer contacto con J2EE. Rodeado de personas muy buenas en todo esto, a menudo me surgía la misma duda: &lt;font style="font-style: italic;"&gt;¿se podría hacer mejor?&lt;/font&gt;. Desde entonces he aprendido bastantes cosas, y lo cierto es que ya no me hago esa pregunta, pues estoy convencido de que la respuesta es &lt;font style="font-weight: bold;"&gt;SÍ&lt;/font&gt;. Así que mi pregunta ha cambiado a &lt;span style="font-style: italic;"&gt;¿qué podría mejorar?&lt;/span&gt; o &lt;span style="font-style: italic;"&gt;¿cómo podría mejorarlo?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hoy he estado probando FindBugs, que creo que me puede ayudar bastante a contestar las preguntas anteriores. Si bien es cierto que no me dirá si uso la arquitectura adecuada, sí que podré revisar lo básico, y ya se sabe que a veces los detalles marcan la diferencia.&lt;br /&gt;&lt;br /&gt;Para usarlo, basta con descargarlo desde su &lt;a href="http://findbugs.sourceforge.net/"&gt;web&lt;/a&gt;. Una vez lo hayamos descomprimido, podremos ejecutar el fichero &lt;font style="font-style: italic;"&gt;findbugs.bat &lt;/font&gt;&lt;font&gt;que se encuentra&lt;/font&gt;&lt;font style="font-style: italic;"&gt; &lt;/font&gt;en la carpeta &lt;font style="font-style: italic;"&gt;bin&lt;/font&gt;. Cuando se haya cargado la aplicación, vamos a &lt;font style="font-weight: bold;"&gt;Fichero &lt;/font&gt;-&gt; &lt;font style="font-weight: bold;"&gt;Nuevo Proyecto&lt;/font&gt;. En la venta que se abre, le damos un nombre al proyecto, y se selecciona la aplicación que se quiere comprobar.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/SdPDb54fV7I/AAAAAAAAACQ/jpUYBeISkwc/s1600-h/EasyCapture1.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 266px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/SdPDb54fV7I/AAAAAAAAACQ/jpUYBeISkwc/s320/EasyCapture1.bmp" alt="" id="BLOGGER_PHOTO_ID_5319810469016328114" border="0"&gt;&lt;/a&gt;&lt;br /&gt;Tras darle a &lt;span style="font-style: italic;"&gt;Finish&lt;/span&gt;, realizará en análisis y nos mostrará las posibles causas de ineficiencia y problemas de seguridad.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/SdPE617bkfI/AAAAAAAAACY/1i13uxSx8m4/s1600-h/EasyCapture2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/SdPE617bkfI/AAAAAAAAACY/1i13uxSx8m4/s320/EasyCapture2.png" alt="" id="BLOGGER_PHOTO_ID_5319812100042494450" border="0"&gt;&lt;/a&gt;&lt;br /&gt;Pinchando en un bug concreto en la parte superior, se mostrará en la inferior una descripción del problema, la clase en la que se encuentra y la línea concreta que lo provoca.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8125784368889051724?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8125784368889051724/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/04/findbugs.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8125784368889051724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8125784368889051724'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/04/findbugs.html' title='FindBugs'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__M-jEzMkoHM/SdPDb54fV7I/AAAAAAAAACQ/jpUYBeISkwc/s72-c/EasyCapture1.bmp' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-5017177015152096027</id><published>2009-03-31T17:35:00.000Z</published><updated>2009-03-31T20:00:26.581Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Annotations</title><content type='html'>Más allá del @SuppressWarnings("unchecked"), @Override, ect... no había usado las anotaciones hasta que las usamos con Hibernate, pero no había pasado de ahí.&lt;br /&gt;&lt;br /&gt;Hace poco, intenté aprovechar su potencial, creando mis propias anotaciones, lo que resulto ser muy sencillo. Supongamos que queremos implementar un método genérico que realice comprobaciones sobre algunos campos de la instancia pasada por parámetro. Lo primero que debemos hacer es poder marcar en nuestras clases qué campos deben ser comprobados, y qué comprobación se debe realizar. Para ello, usaré mi propia anotación en los getters de los mismos:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;package &lt;/span&gt;es.gmr.pruebas;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;import&lt;/span&gt; java.lang.annotation.*;&lt;br /&gt;@Retention(RetentionPolicy.&lt;span style="color: rgb(51, 102, 255);"&gt;RUNTIME&lt;/span&gt;)&lt;br /&gt;@Target(ElementType.&lt;span style="color: rgb(51, 102, 255);"&gt;METHOD&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;public @interface&lt;/span&gt; MiAnotacion {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;int &lt;/span&gt;opcion ();&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Del código anterior cabe destacar:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;@Retention&lt;/span&gt;: con esta anotación especificamos el tiempo de vida que va a tener&lt;br /&gt;nuestra nueva anotación: &lt;span style="font-style: italic;"&gt;RetentionPolicy.SOURCE&lt;/span&gt; indica que la&lt;br /&gt;anotación sólo debe ser visible para el código fuente e ignorada por el compilador y&lt;br /&gt;la máquina virtual, &lt;span style="font-style: italic;"&gt;RetentionPolicy.CLASS&lt;/span&gt; es tenida en cuenta por el compilador&lt;br /&gt;pero ignorada por la máquina virtual, y &lt;span style="font-style: italic;"&gt;RetentionPolicy.RUNTIME&lt;/span&gt; va a ser tenida&lt;br /&gt;en cuenta por la máquina virtual en tiempo de ejecución.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;@Target&lt;/span&gt;: cuando desarrollamos una nueva anotación, deberemos especificarle a&lt;br /&gt;qué tipo de elemento del código es aplicable. De esta manera, podemos acceder a&lt;br /&gt;los tipos por medio de constantes definidas en la clase &lt;span style="font-style: italic;"&gt;ElementType&lt;/span&gt;. En este caso se ha indicado que serán aplicadas a los métodos, ya que la usaremos en los getters.&lt;/li&gt;&lt;/ol&gt;El siguiente paso es añadir esta anotación en donde nos interese:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;package &lt;/span&gt;es.gmr.pruebas;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;public class&lt;/span&gt; MiClase {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;String&lt;/span&gt; campo1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public String&lt;/span&gt; campo2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public String&lt;/span&gt; campo3;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@MiAnotacion(opcion = 1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public &lt;/span&gt;String getCampo1() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;campo1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public void&lt;/span&gt; setCampo1(String campo1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(51, 102, 255);"&gt;campo1 &lt;/span&gt;= campo1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@MiAnotacion(opcion = 2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public &lt;/span&gt;String getCampo2() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;campo2&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public void&lt;/span&gt; setCampo02(String campo2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(51, 102, 255);"&gt;campo2 &lt;/span&gt;= campo2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public &lt;/span&gt;String getCampo3() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;campo3&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public void&lt;/span&gt; setCampo3(String campo3) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(51, 102, 255);"&gt;campo3 &lt;/span&gt;= campo3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;En &lt;span style="font-style: italic;"&gt;MiClase &lt;/span&gt;hemos indicado que al &lt;span style="font-weight: bold;"&gt;campo1 &lt;/span&gt;se le aplicará la comprobación marcada con un 1 (lo ideal sería usar constantes para cada tipo de comprobación), al &lt;span style="font-weight: bold;"&gt;campo2 &lt;/span&gt;la comprobación marcada con un 2 y sobre el &lt;span style="font-weight: bold;"&gt;campo3 &lt;/span&gt;no se realizarán comprobaciones.&lt;br /&gt;&lt;br /&gt;Por último implementamos el método que realice las comprobaciones:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;package &lt;/span&gt;es.gmr.pruebas;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;import &lt;/span&gt;java.lang.reflect.*;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;public class&lt;/span&gt; Comprobacion {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;void &lt;/span&gt;comprobar(Object obj){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Method[] methods = &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;command.getClass().getMethods();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;for &lt;/span&gt;(Method metodo : methods){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;if &lt;/span&gt;(!metodo.getName().startsWith(&lt;span style="color: rgb(51, 102, 255);"&gt;"get"&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;&lt;span style="color: rgb(127, 0, 85);"&gt;continue;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MiAnotacion aux =&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;metodo.getAnnotation(MiAnotacion .&lt;span style="color: rgb(127, 0, 85);"&gt;class&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(127, 0, 85);"&gt;if &lt;/span&gt;(aux!= &lt;span style="color: rgb(127, 0, 85);"&gt;null&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;&lt;span style="color: rgb(127, 0, 85);"&gt;switch&lt;/span&gt; (aux.opcion()){&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;...&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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-5017177015152096027?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/5017177015152096027/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/03/annotations.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5017177015152096027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/5017177015152096027'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/03/annotations.html' title='Annotations'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7114946100669596705</id><published>2009-03-22T08:59:00.001-01:00</published><updated>2009-05-28T13:19:32.796Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Plugin: EclEmma</title><content type='html'>Siempre que implemento un test, para un servicio por ejemplo, me surgen las mismas preguntas ¿se me habrá quedado partes del código sin verificar? ¿qué otras pruebas merece la pena añadir? ¿...? Con estas preguntas en mente, estuve buscando en internet y encontré lo que para mí, es simplemente una maravilla: &lt;span style="font-weight: bold;"&gt;EclEmma&lt;/span&gt;. Nominada a mejor herramienta de desarrollo Open Source basada en Eclipse del 2007, la verdad es que ofrece razones para ello.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EclEmma &lt;/span&gt;es un plugin Java de cobertura de código para Eclipse. Internamente está basado en la herramienta de cobertura de código Java &lt;span style="font-weight: bold;"&gt;EMMA&lt;/span&gt;. Lo mejor, es que no requiere ningún esfuerzo por parte del desarrollador, basta con instalarla [&lt;a href="http://www.eclemma.org/installation.html"&gt;instrucciones&lt;/a&gt;] y reiniciar.&lt;br /&gt;&lt;br /&gt;Para ver su funcionamiento, usaremos el siguiente test:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt; &lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;package &lt;/span&gt;es.gmr.pruebas;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;import&lt;/span&gt; junit.framework.TestCase;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;public class&lt;/span&gt; Test01 extends TestCase {&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;   public void&lt;/span&gt; testCompleto(){&lt;br /&gt;      MiClase miClase = &lt;span style="color: rgb(127, 0, 85);"&gt;new &lt;/span&gt;MiClase();&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;br /&gt;      int &lt;/span&gt;valor;&lt;br /&gt;      valor = miClase.miMetodo(5, 6);&lt;br /&gt;      System.&lt;span style="color: rgb(51, 102, 255);"&gt;out&lt;/span&gt;.println(&lt;span style="color: rgb(51, 102, 255);"&gt;"Valor: "&lt;/span&gt; + valor);&lt;br /&gt;      valor = miClase.miMetodo(6, 5);&lt;br /&gt;      System.&lt;span style="color: rgb(51, 102, 255);"&gt;out&lt;/span&gt;.println(&lt;span style="color: rgb(51, 102, 255);"&gt;"Valor: "&lt;/span&gt; + valor);&lt;br /&gt;   }&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;package &lt;/span&gt;es.gmr.pruebas;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;public class&lt;/span&gt; MiClase {&lt;br /&gt;   &lt;span style="color: rgb(127, 0, 85);"&gt;public int&lt;/span&gt; miMetodo(&lt;span style="color: rgb(127, 0, 85);"&gt;int&lt;/span&gt; x, &lt;span style="color: rgb(127, 0, 85);"&gt;int&lt;/span&gt; y){&lt;br /&gt;      &lt;span style="color: rgb(127, 0, 85);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;f&lt;/span&gt; (x &gt; y){&lt;br /&gt;         &lt;span style="color: rgb(127, 0, 85);"&gt;return&lt;/span&gt; x;&lt;br /&gt;      }&lt;br /&gt;      &lt;span style="color: rgb(127, 0, 85);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;f&lt;/span&gt; (y &gt; x){&lt;br /&gt;         &lt;span style="color: rgb(127, 0, 85);"&gt;return&lt;/span&gt; y;&lt;br /&gt;      }&lt;br /&gt;      &lt;span style="color: rgb(127, 0, 85);"&gt;return&lt;/span&gt; 0;&lt;br /&gt;   }&lt;br /&gt;}&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Luego, pulsando con el botón derecho sobre el test que queremos comprobar, tendremos una  nueva opción&lt;span style="font-style: italic; font-weight: bold;"&gt; Coverage as&lt;/span&gt;, donde seleccionaremos &lt;span style="font-weight: bold; font-style: italic;"&gt;JUnit Test.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/ScZLQ1nViVI/AAAAAAAAABQ/UHA4BJu1MrA/s1600-h/EasyCapture7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 36px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/ScZLQ1nViVI/AAAAAAAAABQ/UHA4BJu1MrA/s320/EasyCapture7.png" alt="" id="BLOGGER_PHOTO_ID_5316019162799507794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando se haya ejecutado el test, en la vista &lt;span style="font-weight: bold; font-style: italic;"&gt;Coverage&lt;/span&gt;, podremos ver qué porcentage del código se ha usado en cada clase. En este caso, vemos que para la clase MiClase sólo se ha usado el 86,7%.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/ScZMItAlSGI/AAAAAAAAABY/qruGHc92vSE/s1600-h/EasyCapture1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 71px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/ScZMItAlSGI/AAAAAAAAABY/qruGHc92vSE/s320/EasyCapture1.png" alt="" id="BLOGGER_PHOTO_ID_5316020122562152546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Si visualizamos el código de MiClase, vemos que el plugin ha marcado en verde las líneas que se han usado durante el test, y en rojo las que no. Con esto, resulta mucho más sencillo determinar que pruebas faltan por hacer (obligar a que X e Y sean iguales).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/ScZiZ5z1UeI/AAAAAAAAABg/HA0oxvQghmI/s1600-h/EasyCapture2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 158px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/ScZiZ5z1UeI/AAAAAAAAABg/HA0oxvQghmI/s320/EasyCapture2.png" alt="" id="BLOGGER_PHOTO_ID_5316044607311925730" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7114946100669596705?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7114946100669596705/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/03/plugin-eclemma.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7114946100669596705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7114946100669596705'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/03/plugin-eclemma.html' title='Plugin: EclEmma'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__M-jEzMkoHM/ScZLQ1nViVI/AAAAAAAAABQ/UHA4BJu1MrA/s72-c/EasyCapture7.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-7859281896637116347</id><published>2009-03-22T08:49:00.001-01:00</published><updated>2009-03-22T13:21:47.964-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Optimizar el uso de String (I)</title><content type='html'>Puede que una de las caracteriasticas más importantes sobre los String en Java, en cuanto a la optimización, es que son inmutables, es decir, nunca cambian tras su creación. Por ejemplo, si tenemos el siguiente código:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;String texto = "Hola";&lt;br /&gt;texto = texto + " y adios";&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;Al ejecutarse la segunda línea, habrán dos instancias de String en memoria: "Hola" y "Hola y adios". Si estamos implementando un método que realiza varias operaciones como esta, este hecho puede hacer que sea bastante ineficiente. Para solucionarlo, podríamos usar la clase &lt;span style="font-style: italic;"&gt;StringBuffer&lt;/span&gt;. Por ejemplo, la diferencia en tiempo entre ejecutar este código:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;String texto1 = "";&lt;br /&gt;for (int i = 1; i &lt;= 10000; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;texto1 = texto1 + "*"; &lt;/div&gt;&lt;/center&gt;&lt;br /&gt;y este otro:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;StringBuffer sb = new StringBuffer();&lt;br /&gt;for (int i = 1; i &lt;= 10000; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append("*");&lt;br /&gt;String texto2 = sb.toString(); &lt;/div&gt;&lt;/center&gt;&lt;br /&gt;es de 40 a 1, por lo que podemos comprobar que &lt;span style="font-style: italic;"&gt;StringBuffer &lt;/span&gt;puede resultar una opción interesante cuando vamos a realizar tareas de este tipo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-7859281896637116347?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/7859281896637116347/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/03/optimizar-el-uso-de-string-i.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7859281896637116347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/7859281896637116347'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/03/optimizar-el-uso-de-string-i.html' title='Optimizar el uso de String (I)'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-8126793739557728744</id><published>2009-03-21T19:04:00.000-01:00</published><updated>2009-03-21T21:05:42.361-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Templates</title><content type='html'>Los &lt;span style="font-style: italic;"&gt;Templates &lt;/span&gt;son los que se encargan, por ejemplo, de que cuando escribimos &lt;span style="color: rgb(255, 0, 0);"&gt;for &lt;/span&gt;y pulsamos &lt;span style="font-style: italic;"&gt;Ctrl + espacio&lt;/span&gt;, aparezca un popup con una serie de opciones, y al elegir una de ellas se completa de forma automática el código.&lt;br /&gt;&lt;br /&gt;Para gestionarlos, debemos acceder a &lt;span style="font-weight: bold;"&gt;Window -&gt; Preferences -&gt; Java -&gt; Editor -&gt; Templates&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Supongamos que con frecuecia declaramos variables y las inicialiamos de la forma:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 75%; text-align: left;"&gt;UnaClase miVariable = &lt;span style="color: rgb(255, 0, 0);"&gt;new &lt;/span&gt;UnaClase();&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;Podríamos crear un template que nos ayude a hacerlo de una formá más rápida. Para ello, pulsamos &lt;span style="font-style: italic;"&gt;New &lt;/span&gt;en el panel de los templates&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/ScVPCUIAhhI/AAAAAAAAAA4/7LndIu0hXXI/s1600-h/EasyCapture1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 251px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/ScVPCUIAhhI/AAAAAAAAAA4/7LndIu0hXXI/s320/EasyCapture1.png" alt="" id="BLOGGER_PHOTO_ID_5315741836361369106" border="0" /&gt;&lt;/a&gt;En la venta que se nos muestra, le daremos un nombre al template (será lo que se deba escribir para usarlo posteriormente), una descripción y definimos el template. En nuestro caso, el template tendrá la forma:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;${tipo} ${nombre} = new ${tipo}();&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__M-jEzMkoHM/ScVPplY7xgI/AAAAAAAAABA/HBbl57n1nfs/s1600-h/EasyCapture5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 176px;" src="http://1.bp.blogspot.com/__M-jEzMkoHM/ScVPplY7xgI/AAAAAAAAABA/HBbl57n1nfs/s320/EasyCapture5.png" alt="" id="BLOGGER_PHOTO_ID_5315742511010661890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Por último, le damos a &lt;span style="font-style: italic;"&gt;OK &lt;/span&gt;y salimos de la gestión de los templates. Ahora, si cuando estemos escribiendo el código escribimos &lt;span style="font-style: italic;"&gt;nuevaV&lt;/span&gt; y pulsamos &lt;span style="font-style: italic;"&gt;Ctrl + Espacio&lt;/span&gt;, nos aparecerá el nuevo template:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__M-jEzMkoHM/ScVQ-T7DOfI/AAAAAAAAABI/eKgbhRbcqNI/s1600-h/EasyCapture6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 287px; height: 90px;" src="http://4.bp.blogspot.com/__M-jEzMkoHM/ScVQ-T7DOfI/AAAAAAAAABI/eKgbhRbcqNI/s320/EasyCapture6.png" alt="" id="BLOGGER_PHOTO_ID_5315743966610799090" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-8126793739557728744?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/8126793739557728744/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/03/templates.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8126793739557728744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/8126793739557728744'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/03/templates.html' title='Templates'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__M-jEzMkoHM/ScVPCUIAhhI/AAAAAAAAAA4/7LndIu0hXXI/s72-c/EasyCapture1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-404332956008816867</id><published>2009-03-21T12:16:00.000-01:00</published><updated>2009-03-21T12:29:12.317-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Breakpoint condicional</title><content type='html'>Supongamos que queremos depurar un método que está lanzando un NullPointerException. Concretamente, lo lanza en un bucle que itera una lista de mil elementos, y no tenemos ni idea de cual de ellos provoca la excepción. Ir iteración a iteración hasta que el error ocurra puede resultar bastante tedioso. Para evitar esto, Eclipse nos permite definir un breakpoint de forma condicional. De esta forma, podremos decirle que el breakpoint sólo se active cuando la variable sea &lt;span style="color: rgb(255, 0, 0);"&gt;null&lt;/span&gt;, por ejemplo.&lt;br /&gt;&lt;br /&gt; Para ello, pulsando con el botón derecho sobre el breakpoint y seleccionamos la opción &lt;span style="font-style: italic;"&gt;BreakPoint Properties...&lt;/span&gt; El el panel que se muestra, debemos activar la casilla &lt;span style="font-style: italic;"&gt;Enable Condition&lt;/span&gt; y en el area de texto escribir la condición que queramos (con la ventaja de que podemos autocompletar el texto) haciendo uso de las variables disponibles en este punto del método.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__M-jEzMkoHM/ScTqqG_EoTI/AAAAAAAAAAw/Y-i4cf6tzsk/s1600-h/breakPoint+condicional.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://3.bp.blogspot.com/__M-jEzMkoHM/ScTqqG_EoTI/AAAAAAAAAAw/Y-i4cf6tzsk/s320/breakPoint+condicional.png" alt="" id="BLOGGER_PHOTO_ID_5315631469354590514" border="0" /&gt;&lt;/a&gt;   Según el ejemplo mostrado en la imagen anterior, el breakpoint que hemos puesto sólo se activrá cuando la variable &lt;span style="font-weight: bold; font-style: italic;"&gt;usuario &lt;/span&gt;sea &lt;span style="color: rgb(255, 0, 0);"&gt;null&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-404332956008816867?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/404332956008816867/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/03/breakpoint-condicional.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/404332956008816867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/404332956008816867'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/03/breakpoint-condicional.html' title='Breakpoint condicional'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__M-jEzMkoHM/ScTqqG_EoTI/AAAAAAAAAAw/Y-i4cf6tzsk/s72-c/breakPoint+condicional.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4286784136012598160.post-1045227875584850743</id><published>2009-03-21T11:52:00.000-01:00</published><updated>2009-03-22T08:48:42.867-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Inicializar listas</title><content type='html'>En ocasiones, necesitamos inicializar listas con algunos valores. La forma básica de hacerlo es:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java"  style="font-family:monospace;"&gt;List&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt; miLista &lt;span style="color: rgb(51, 153, 51);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;new&lt;/span&gt; ArrayList&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;miLista.&lt;span style="color: rgb(0, 102, 51);"&gt;add&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"1"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;miLista.&lt;span style="color: rgb(0, 102, 51);"&gt;add&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"2"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;Una alternativa, sería hacerlo de esta otra forma:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;br /&gt;&lt;pre class="java"  style="font-family:monospace;"&gt;List&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt; miLista &lt;span style="color: rgb(51, 153, 51);"&gt;=&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;   new&lt;/span&gt; ArrayList&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;{&lt;/span&gt; add&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"1"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt; add&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"2"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;pero no cumple las recomenadciones de estilo, con lo quedaría bastante engorroso también:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java"  style="font-family:monospace;"&gt;List&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt; miLista &lt;span style="color: rgb(51, 153, 51);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;new&lt;/span&gt; ArrayList&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;   add&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"1"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;   add&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"2"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;La segunda alternativa, que nos deja un código más límpio, sería:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java"  style="font-family:monospace;"&gt;List&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt; miLista &lt;span style="color: rgb(51, 153, 51);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 51, 153);"&gt;Arrays&lt;/span&gt;.&lt;span style="color: rgb(0, 102, 51);"&gt;asList&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 51, 153);"&gt;String&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"1"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;"2"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/center&gt;&lt;br /&gt;Que sería la mejor solución si se usa Java 1.4. Pero si usamos Java 1.5, la mejor opción sería:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;div style="border: 1px inset rgb(0, 0, 0); padding: 5px; background: rgb(204, 204, 204) none repeat scroll 0% 0%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 80%; text-align: left;"&gt;&lt;pre class="java"  style="font-family:monospace;"&gt;List&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;&lt;/span&gt;String&lt;span style="color: rgb(51, 153, 51);"&gt;&gt;&lt;/span&gt; miLista &lt;span style="color: rgb(51, 153, 51);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 51, 153);"&gt;Arrays&lt;/span&gt;.&lt;span style="color: rgb(0, 102, 51);"&gt;asList&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;"1"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;"2"&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="java"  style="font-family:monospace;"&gt;&lt;span style="color: rgb(51, 153, 51);"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4286784136012598160-1045227875584850743?l=eclijava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclijava.blogspot.com/feeds/1045227875584850743/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://eclijava.blogspot.com/2009/03/inicializar-listas.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1045227875584850743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4286784136012598160/posts/default/1045227875584850743'/><link rel='alternate' type='text/html' href='http://eclijava.blogspot.com/2009/03/inicializar-listas.html' title='Inicializar listas'/><author><name>Gregorio Mena Rodríguez</name><uri>http://www.blogger.com/profile/00019302583907825188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/__M-jEzMkoHM/ScPk_eeX1RI/AAAAAAAAAAM/Oq1Qc7dycws/S220/Avatar01.jpg'/></author><thr:total>1</thr:total></entry></feed>
