<?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-4170768470549625640</id><updated>2011-11-28T00:23:25.850Z</updated><category term='micromanagement'/><category term='pydev'/><category term='ingeniería del software'/><category term='integración contínua'/><category term='web'/><category term='gestión'/><category term='seguridad'/><category term='huelga'/><category term='peopleware'/><category term='uva'/><category term='junit'/><category term='offline'/><category term='wtf'/><category term='redes sociales'/><category term='calidad'/><category term='blewspace'/><category term='empleo'/><category term='idea peregrina'/><category term='chrome'/><category term='arquitectura'/><category term='wcag 2.0'/><category term='opinión'/><category term='firefox'/><category term='iphone'/><category term='facelets'/><category term='css'/><category term='libros'/><category term='teiid'/><category term='spring'/><category term='investigación'/><category term='richfaces'/><category term='javarebel'/><category term='eclipse'/><category term='diseño'/><category term='mashup'/><category term='antipatrones'/><category term='xp'/><category term='agil'/><category term='19N'/><category term='jsf'/><category term='enhydra shark'/><category term='macintosh'/><category term='mysql'/><category term='java'/><category term='google maps'/><category term='rhds'/><category term='seam'/><category term='ágil'/><category term='dilbert'/><category term='maven2'/><category term='wcag 1.0'/><category term='bolonia'/><category term='trac'/><category term='programación'/><category term='jpa'/><category term='software'/><category term='estándares'/><category term='CexC'/><category term='red hat developer studio'/><category term='opera unite'/><category term='project'/><category term='ubuntu'/><category term='j2ee'/><category term='pruebas'/><category term='ide'/><category term='firefox collections'/><category term='ubiquidad'/><category term='google'/><category term='subversion'/><category term='svn'/><category term='trabajo'/><category term='the mythical man-month'/><category term='google app engine'/><category term='enlaces'/><category term='formación'/><category term='wcag wg'/><category term='entorno de desarrollo'/><category term='iso'/><category term='myfaces'/><category term='geolocalización'/><category term='mapa'/><category term='buenas prácticas'/><category term='agile'/><category term='frameworks'/><category term='python'/><category term='ajax4jsf'/><category term='windows'/><category term='informática'/><category term='metodología'/><category term='linux'/><category term='hibernate'/><category term='dry'/><category term='jsfunit'/><category term='tabs'/><category term='mylyn'/><category term='kubuntu'/><category term='ajax'/><category term='howto'/><category term='tutorial'/><category term='jbpm'/><category term='boeing'/><category term='hudson'/><category term='google gears'/><category term='pestañas'/><category term='blog'/><category term='innovación'/><category term='google chrome'/><category term='tip'/><category term='netbeans'/><category term='seo'/><category term='scrum'/><category term='dune'/><category term='jboss'/><category term='accesibilidad'/><category term='wcag'/><category term='google desktop'/><category term='postmortem'/><category term='universidad'/><category term='excepciones'/><title type='text'>Ideas + Ingeniería del Software</title><subtitle type='html'>Versión 0.00 de un blog sobre &lt;strong&gt;desarrollo&lt;/strong&gt;, &lt;strong&gt;ingeniería de software&lt;/strong&gt; y &lt;strong&gt;tecnologías de la información&lt;/strong&gt;. Hablaremos de &lt;strong&gt;metodologías&lt;/strong&gt; (Scrum...), &lt;strong&gt;herramientas&lt;/strong&gt; (Eclipse...), &lt;strong&gt;tecnologías&lt;/strong&gt; (J2EE...), &lt;strong&gt;frameworks&lt;/strong&gt; (JSF...), &lt;strong&gt;Ajax&lt;/strong&gt; (RichFaces, Ajax4JSF...), &lt;strong&gt;buenas prácticas&lt;/strong&gt; (DRY...)...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://iiso.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>94</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8613497152084362608</id><published>2011-02-19T19:27:00.001Z</published><updated>2011-02-19T19:28:11.151Z</updated><title type='text'>¡De mudanza!</title><content type='html'>Estoy en proceso de migración de blogs y demás gaitas a un único servidor: &lt;a href="http://www.juanignaciosl.com/"&gt;http://www.juanignaciosl.com&lt;/a&gt; . A partir de ahora todo el contenido (pasado, presente y futuro) relativo a mí lo podrás encontrar ahí. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Concretamente, el apartado de Ingeniería del Software (el sustituto de este blog) lo encontrarás en &lt;a href="http://www.juanignaciosl.com/categorias/ingenieria-del-software"&gt;http://www.juanignaciosl.com/categorias/ingenieria-del-software&lt;/a&gt; . También hay los siguientes apartados:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.juanignaciosl.com/personal"&gt;Blog personal&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.juanignaciosl.com/categorias/fotografia"&gt;Blog de fotografía&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.juanignaciosl.com/categorias/fotografia/galeria"&gt;Galería fotográfica&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.juanignaciosl.com/categorias/viajes"&gt;Blog de viajes&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;span class="dropcaps"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8613497152084362608?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8613497152084362608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8613497152084362608'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2011/02/de-mudanza.html' title='¡De mudanza!'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8345363042418404118</id><published>2010-12-01T19:04:00.005Z</published><updated>2010-12-01T19:14:07.363Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>SEO, redes sociales...</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt;ño y medio sin escribir... ¡Cuánto tiempo!&lt;div&gt;Quién me lo iba a decir, es un tema viejo el que me anima a escribir una nueva entrada. Estoy aprendiendo sobre &lt;b&gt;SEO y redes sociales&lt;/b&gt;, comenzando a ver de primera mano conceptos de los que llevo años leyendo, y aplicando técnicas para mejorar posicionamiento y visitas.&lt;/div&gt;&lt;div&gt;Formo parte de &lt;a href="http://www.blogger.com/notedetengas.es"&gt;Notedetengas, un magazine cultural independiente&lt;/a&gt;. Escribimos sobre todo acerca de &lt;a href="http://notedetengas.es/musica/"&gt;música&lt;/a&gt; y &lt;a href="http://notedetengas.es/teatro/"&gt;teatro&lt;/a&gt; (crónicas de conciertos y actuaciones, principalmente), y es algo que lleva un trabajo monumental. Mucha gente y mucho esfuerzo invertido diariamente (y de forma muchísimo más disciplinada de lo que cabría esperar) del que hay que sacar el mayor provecho posible. Y no hablo de beneficios económicos, sino en términos de visitas. Creo que invertimos una cantidad de tiempo brutal y hacemos un trabajo que debe revertir en un mayor número de usuarios.&lt;/div&gt;&lt;div&gt;Por si esto no fuese suficiente, recientemente hemos publicado un proyecto de &lt;a href="http://acordesurbanos.com/"&gt;conciertos acústicos&lt;/a&gt;. Fuertemente inspirados por la &lt;a href="http://blogotheque.net/"&gt;Blogotheque&lt;/a&gt;, comenzamos &lt;a href="http://acordesurbanos.com/"&gt;AU! (Acordes Urbanos)&lt;/a&gt;pretendiendo hacer algo similar en nuestra ciudad. ¡Más trabajo de posicionamiento y de visitas!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;¿Y toda esta introducción por qué? Porque una de las medidas más eficaces que puedes hacer es invertir en Facebook y redes sociales en general. Y hoy me he topado con los interesantes resultados de un estudio:&lt;/div&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_5883191"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/IAB_Spain/informe-redes-sociales-iab-2010-noviembre-2010" title="Informe redes sociales IAB Spain 2010 - Noviembre 2010"&gt;Informe redes sociales IAB Spain 2010 - Noviembre 2010&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse5883191" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=informeredessocialesiab2010-noviembre2010-101124001748-phpapp02&amp;stripped_title=informe-redes-sociales-iab-2010-noviembre-2010&amp;userName=IAB_Spain" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5883191" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=informeredessocialesiab2010-noviembre2010-101124001748-phpapp02&amp;stripped_title=informe-redes-sociales-iab-2010-noviembre-2010&amp;userName=IAB_Spain" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/IAB_Spain"&gt;IAB Spain&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Notas a destacar:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Tuenti parece parar su progresión, pero sigue siendo la "2ª potencia" en este país. Su baza es la facilidad. Equipara a Facebook en menores de 24 años.&lt;/li&gt;&lt;li&gt;Gran crecimiento (especialmente en notoriedad) de Twitter. La temática más habitual es la cultura y entretenimiento.&lt;/li&gt;&lt;li&gt;Los usuarios de redes sociales son más activos en el Mundo Real™ que los no usuarios. ¡Buena noticia para los que anunciamos conciertos!&lt;/li&gt;&lt;li&gt;No hay una percepción negativa de la publicidad en las redes sociales. Se nota que tienen la lección aprendida.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;En próximas entradas, más notas sobre mi aprendizaje en esto de técnicas de SEO y de mejora de visitas... Stay tuned!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8345363042418404118?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8345363042418404118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8345363042418404118'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2010/12/seo-redes-sociales.html' title='SEO, redes sociales...'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-2206161018253082051</id><published>2009-06-16T15:29:00.005+01:00</published><updated>2009-06-16T17:27:22.489+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opera unite'/><title type='text'>Opera Unite: involucionando la web</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;oy Opera ha puesto fin al &lt;a href="http://www.genbeta.com/navegadores/la-imagen-de-la-semana-opera-prepara-algo"&gt;hype que ellos mismos comenzaron hace un par de días&lt;/a&gt;, desvelando su proyecto secreto: &lt;a href="http://unite.opera.com/"&gt;Opera Unite&lt;/a&gt;. Aunque comercialmente se pueden decir muchas más cosas, lo  resumiré en &lt;span style="font-weight: bold;"&gt;un servidor web dentro del navegador&lt;/span&gt;. Mediante esto y un API se desarrollan &lt;a style="font-weight: bold;" href="http://unite.opera.com/services/"&gt;servicios&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; que se ejecutarán en tu ordenador&lt;/span&gt;. Por ejemplo, reproductor multimedia, gestor para compartir ficheros, páginas web, chat...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actualización 0906161825: &lt;/span&gt;Ender Wiggins, un tío mucho más responsable que yo, lo está probando antes de juzgarlo (ver comentarios), por lo que tacho un par de cosas de las que me quejo sin deberlo (no lo borro para que quede constancia ;) ).&lt;br /&gt;&lt;br /&gt;Vaya por delante que (todavía) no lo he probado, pero el concepto en sí no me gusta, por muchas razones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La fundamental es que obviamente &lt;span style="font-weight: bold;"&gt;tienes que tener el ordenador encendido constantemente&lt;/span&gt; para que esto sea útil. Somos muchos los hace años (incluso hoy, seguro) nos montamos un servidor ftp, web o similar para poder acceder a nuestros ficheros o colgar nuestras páginas web, pero se debía a que no había demasiadas alternativas posibles. Hoy en día, con servicios de almacenamiento baratos (o muy asequibles, más que el consumo energético de nuestro sobremesa) podemos cubrir esto fácilmente. Algunas de los siguientes motivos por lo que no me gusta no dejan de ser derivados de esto.&lt;/li&gt;&lt;li&gt;No quiero poder acceder a mi ordenador desde cualquier parte. Lo que quiero es poder colgar mi contenido en la red y poder acceder a él donde sea.&lt;/li&gt;&lt;li&gt;Aún en el caso de querer acceder a mi ordenador, las alternativas son incontables: servidores web, ftp, ssh... Servidores multimedia que además convierten el formato del contenido (hay varios que se orientan a ser servidores para la Wii, por ejemplo). Hasta WinAmp ofrece desde hace tiempo un servidor propio.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;El modelo p2p de distribución de contenido se popularizó entre otras cosas por las implicaciones legales de que &lt;span style="font-style: italic;"&gt;un&lt;/span&gt; proveedor se convirtiese en distribuidor de contenido. La SGAE y similares se estarán frotando las manos al ver la cantidad de incautos que van a compartir sus colecciones de mp3.&lt;/li&gt;&lt;li&gt;Hay alternativas para todas las funcionalidades que ofrece que seguro que son mejores. No creo que su servidor web pueda competir con Apache, por ejemplo.&lt;/li&gt;&lt;li&gt;Siempre se ha podido compartir ficheros (email, directamente a través de cualquier &lt;span style="font-style: italic;"&gt;messenger&lt;/span&gt;, servidores propios...). No hay nada novedoso en esto.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Normalmente si quiero compartir ficheros lo hago con Dropbox, que me da 2GB gratis. Y si mis necesidades son mayores, por 10$ al mes tengo 50GB. Sólo el consumo energético de tener el ordenador encendido a todas horas seguro que es mayor. Es un cliente muy ligero, que ni se nota que está corriendo, y me permite tener sincronizados directorios entre varios ordenadores, y también compartir mediante enlaces públicos. Y mi contenido siempre está accesible en su web.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Si quiero compartir &lt;span style="font-style: italic;"&gt;de verdad&lt;/span&gt;, lo hago mediante p2p.&lt;/li&gt;&lt;li&gt;¿Realmente queremos comprometer aún más la seguridad de nuestro ordenador personal?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;¿Qué valor van a tener los enlaces a páginas alojadas en PCs, que dependen de tener el ordenador encendido? Además, obviamente la fiabilidad de un PC y una red casera no tiene nada que ver con un servidor "de verdad".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;Se necesita, sí o sí, usar DNS dinámicas.&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;Nuestras conexiones a internet suelen ser asimétricas, con una velocidad de subida irrisoria. Poner contenido online es lento una vez, pero todos los accesos a ellos son bastante rápidos. Sin embargo, con Opera Unite serán lentos siempre (hasta que Telefónica quiera, al menos).&lt;/li&gt;&lt;li&gt;En la época en la que las prácticas se entregaban en disquetes sí era muy útil montarnos un servidor ftp. Hoy en día, con una memoria USB de 16GB en el bolsillo, no lo es tanto. Y con almacenamiento en red gratuíto, menos.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;¿Qué pinta toda esta funcionalidad en el navegador?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;A la gente ya le costaba configurar el router para redirigir puertos del eMule, esto será lo mismo.&lt;/strike&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;El título del artículo, "involucionando la web", es, sin duda, exagerado e injusto. El producto en sí mismo puede estar bien y en algún caso puede que incluso sea útil, especialmente para usuarios sin conocimientos técnicos que quieran montar un servidor casero fácilmente. Sin embargo, &lt;span style="font-style: italic;"&gt;necesitaba&lt;/span&gt; poner el contrapunto a &lt;a href="http://www.genbeta.com/navegadores/la-imagen-de-la-semana-opera-prepara-algo"&gt;lo que ellos dijeron que significaría, "reinventaremos la Web"&lt;/a&gt;, y a lo que veo en la blogosfera (&lt;a href="http://unmundolibre.net/2009/06/16/la-revolucion-de-opera-unite/"&gt;revolución&lt;/a&gt;, y &lt;a href="http://www.arturogoga.com/2009/06/16/opera-revela-opera-unite/"&gt;2&lt;/a&gt;...). Desde hace años la tendencia que parece claro que funciona es aligerar los equipos personales y utilizar tanto contenidos como aplicaciones disponibles en la red. Esto es un paso al contrario.&lt;br /&gt;Ójala GDrive, si finalmente se materializa, cumpla las expectativas creadas: gran(-dísimo) espacio de almacenamiento, API para acceder al contenido, búsqueda completa... Eso sí sería un paso adelante.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-2206161018253082051?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2206161018253082051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2206161018253082051'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/06/opera-unite-involucionando-la-web.html' title='Opera Unite: involucionando la web'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1343552086030031433</id><published>2009-06-14T17:34:00.005+01:00</published><updated>2009-06-14T19:18:43.968+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox collections'/><category scheme='http://www.blogger.com/atom/ns#' term='redes sociales'/><title type='text'>Redes sociales (II): Firefox Collections</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt;unque en estos meses de &lt;strike&gt;humo&lt;/strike&gt; nubes hablar de redes sociales suena demodé, tenemos novedades para Firefox que nos pueden hacer reflexionar sobre ello.&lt;br /&gt;Las &lt;a href="https://addons.mozilla.org/en-US/firefox/collections/editors_picks"&gt;Firefox Collections&lt;/a&gt; son conjuntos de extensiones, listados, que puedes compartir y a las que te puedes suscribir. Por ejemplo, la primera colección que iba a figurar en el editor's pics no podía ser otra: &lt;a href="https://addons.mozilla.org/en-US/firefox/collection/webdeveloper"&gt;Web Developer's Toolbox&lt;/a&gt;. Hecha por el usuario &lt;a href="https://addons.mozilla.org/en-US/firefox/user/4757633"&gt;Mozilla&lt;/a&gt; (pero podría ser cualquiera), recopila las extensiones que ellos consideran fundamentales para el desarrollo web. Yo, una vez me instale la extensión '&lt;a href="https://addons.mozilla.org/en-US/firefox/pages/collector"&gt;Add-on Collector&lt;/a&gt;', puedo suscribirme a esta lista. Al hacerlo podré instalar las extensiones que la componen, recibiré actualizaciones si añade alguna al listado... Es una funcionalidad social pero muy potente. Cada sector puede colaborar generando un lote de extensiones interesantes: brokers de bolsa, bloggers, desarrolladores...&lt;br /&gt;Esto genera una funcionalidad colateral muy interesante: sincronización de extensiones entre navegadores. Es algo que llevo necesitando desde que comencé a usar Firefox, y, aunque había formas de hacer algo similar, nada que me satisficiese.&lt;br /&gt;No sé cómo se lo plantearon en Mozilla: ¿Cubrir la necesidad de sincronizar extensiones y de ahí salió la idea de compartirlo? ¿Al revés? ¿Ambas a la vez? El hecho es que la funcionalidad social (compartir colecciones) es la generalización de un caso particular (sincronizar mis extensiones) de interés para el usuario. Este es un ejemplo perfecto de solución del &lt;a href="http://iiso.blogspot.com/2009/02/redes-sociales-i-el-arranque-en-frio.html"&gt;problema del arranque en frío en redes sociales comentado con anterioridad&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cubre una necesidad personal existente...&lt;/li&gt;&lt;li&gt;... y a la vez aporta un gran valor añadido.&lt;/li&gt;&lt;/ul&gt;Dos nuevas notas mentales que siempre denería tener presente:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cuando vayas a implementar algo, piensa si en vez de resolver el caso específico puedes encontrar una solución más general...&lt;/li&gt;&lt;li&gt;... y piensa si esa solución general tiene potencial con un botón "compartir con más gente".&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1343552086030031433?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1343552086030031433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1343552086030031433'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/06/redes-sociales-ii-firefox-collections.html' title='Redes sociales (II): Firefox Collections'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-730241868992387123</id><published>2009-06-14T16:50:00.004+01:00</published><updated>2009-06-15T08:42:31.028+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='investigación'/><category scheme='http://www.blogger.com/atom/ns#' term='innovación'/><category scheme='http://www.blogger.com/atom/ns#' term='teiid'/><category scheme='http://www.blogger.com/atom/ns#' term='CexC'/><title type='text'>CexC, Teiid y el estado del blog</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;levo mucho sin actualizar el blog (dos meses), y antes de la última entrada el ritmo ya había bajado. Alguna razón tenía que haber, además del habitual cansancio. Esta página siempre ha sido una vía de escape de mis inquietudes tecnológicas, pero últimamente me parecía estar totalmente desinteresado de las novedades del sector. El escaso tiempo libre y el que me ocupa &lt;a href="http://www.flickr.com/photos/juanignaciosl/"&gt;la fotografía&lt;/a&gt; hacían el resto.&lt;br /&gt;Dándole un poco de vueltas este desinterés realmente no existe, lo que ocurre símplemente es que lo cubro en horas de trabajo. Hasta ahora mi trabajo había sido de desarrollo o de gestión de proyectos, lo que apenas dejaba margen al &lt;span style="font-style: italic;"&gt;cacharreo&lt;/span&gt; con nuevas tecnologías, por lo que esa &lt;span style="font-style: italic;"&gt;necesidad&lt;/span&gt; que realmente tengo de estar al día, de probar cosas nuevas, se cubría en casa.&lt;br /&gt;Desde finales del año pasado estoy trabajando en el &lt;a href="http://www.cexc.es/"&gt;Centro Experimental del Conocimiento&lt;/a&gt; (&lt;a href="http://www.cexc.es/"&gt;CexC&lt;/a&gt; para los amigos), y mi papel es, en gran medida, realizar un esfuerzo de investigación e innovación. Para nosotros es fundamental evolucionar nuestra forma de trabajo y mejorar constantemente las herramientas a utilizar, y una buena parte de mi tiempo se va en leer artículos, noticias, descargar nuevas aplicaciones o componentes, y probarlos y pegarme con ellos. La verdad es que da gusto cuando, en este sector tan condicionado por los plazos y clientes, se tiene oportunidad de invertir una buena parte de tu tiempo en tareas de innovación, y se confía en la adopción de nuevas tecnologías en vez de atarse a la &lt;span style="font-style: italic;"&gt;tradición&lt;/span&gt;.&lt;br /&gt;Como medio para dar algo más de visibilidad a esto, y como medio de comunicación, en el &lt;a href="http://www.cexc.es/index.php?option=com_content&amp;amp;view=category&amp;amp;layout=blog&amp;amp;id=78&amp;amp;Itemid=414&amp;amp;lang=es"&gt;CexC acabamos de abrir un blog de nuevas tecnologías&lt;/a&gt; en el que ir mostrando al menos una parte de esta inversión.  Todavía está en pañales, pero os agradecería que figurase en vuestros marcadores o lectores RSS.&lt;br /&gt;&lt;a href="http://www.cexc.es/index.php?option=com_content&amp;amp;view=category&amp;amp;layout=blog&amp;amp;id=78&amp;amp;Itemid=414&amp;amp;lang=es"&gt;La primera entrada habla de Teiid&lt;/a&gt;, una fantástica herramienta para virtualización de datos que acaban de liberar en jboss.org. Cualquiera que haya realizado una aplicación empresarial con varias fuentes de datos diferentes sabrá valorarla como corresponde, en mi opinión. El primer artículo es introductorio, pero iremos ampliando con ejemplos prácticos de esta y otras tecnologías de JBoss con las que trabajamos desde hace tiempo.&lt;br /&gt;Todavía no dispone de comentarios (espero activarlo en breve), así que quien quiera abrir el diálogo que lo haga por aquí mismo.&lt;br /&gt;Nos vemos por el &lt;a href="http://www.cexc.es/"&gt;CexC&lt;/a&gt; :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-730241868992387123?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/730241868992387123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/730241868992387123'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/06/cexc-teiid-y-el-estado-del-blog.html' title='CexC, Teiid y el estado del blog'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-2857111490967867750</id><published>2009-04-18T10:10:00.005+01:00</published><updated>2009-06-14T18:05:33.204+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postmortem'/><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Postmortem: estimaciones y creación del sprint backlog</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;stamos cerrando el último proyecto, una aplicación de gestión de datos con múltiples perfiles que controlan el trabajo y la información introducida por los demás. Acaba de entrar en explotación con bastante éxito: ni un error en los cuatro primeros días de uso, fundamentales porque corresponden con una primera fase que tiene un plazo límite. A partir de ahora, mantenimiento correctivo y algo de evolutivo.&lt;br /&gt;Es un buen momento para comenzar el postmortem y analizar los errores cometidos.&lt;br /&gt;&lt;br /&gt;Hemos usado Scrum como metodología, y la conclusión es que nos ha aportado tan poco como cualquier otra metodología que hubiésemos usado, pero al menos no ha molestado. No creo que nos haya aportado un auténtico &lt;span style="font-style: italic;"&gt;valor&lt;/span&gt;, pero creo que estamos en el buen camino. El gran reto que teníamos para el desarrollo del proyecto era el uso de una pila de desarrollo nueva para casi todos, y contra eso no hay metodología que valga.&lt;br /&gt;&lt;br /&gt;El product backlog se hizo a partir de las reuniones de contacto con los usuarios y de los primeros documentos de prototipado y requisitos que nos pasaron. Hasta ahí, bien, no es un artefacto que tenga mayor complicación.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Para &lt;span style="font-weight: bold;"&gt;estimar el product backlog&lt;/span&gt; hicimos planning poker con el equipo, tras haber contado de qué iba el proyecto. A todas luces &lt;span style="font-weight: bold;"&gt;la estimación era muy optimista&lt;/span&gt;, y se cumplió aquello de que los &lt;span style="font-style: italic;"&gt;técnicos&lt;/span&gt; son &lt;span style="font-style: italic;"&gt;positivos&lt;/span&gt; y que los &lt;span style="font-style: italic;"&gt;gestores&lt;/span&gt; son pesimistas. Sin que sirva de precedente, los &lt;span style="font-style: italic;"&gt;gestores&lt;/span&gt; tenían razón. Sin embargo, creo que &lt;span style="font-weight: bold;"&gt;si el mismo equipo volviese a comenzar el proyecto sí cumpliría las estimaciones&lt;/span&gt; que salieron de esa reunión. La &lt;span style="font-weight: bold;"&gt;experiencia en la tecnología&lt;/span&gt; y una &lt;span style="font-weight: bold;"&gt;mejor gestión de los requisitos&lt;/span&gt; habrían hecho que se hubiese podido implementar en los tiempos dichos.&lt;br /&gt;&lt;br /&gt;Creo que nuestro gran error desde el punto de vista de la metodología fue la &lt;span style="font-weight: bold;"&gt;creación del sprint backlog&lt;/span&gt;. Lo hizo una persona (yo, como Scrum Master). Gran equivocación. &lt;span style="font-weight: bold;"&gt;Lo debe hacer el equipo en conjunto&lt;/span&gt;. El equipo careció de una &lt;span style="font-style: italic;"&gt;visión global&lt;/span&gt; del proyecto, lo cual no trajo más que problemas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Se adquirieron tareas en el orden incorrecto.&lt;/li&gt;&lt;li&gt;No se sabía qué era común y qué no, así que era más difícil organizarse para la reutilización.&lt;/li&gt;&lt;li&gt;"Marchas atras" por mala comprensión de las tareas.&lt;/li&gt;&lt;li&gt;Funcionalmente se depende del criterio de una única persona.&lt;/li&gt;&lt;li&gt;La estimación de las tareas habría sido más acertada con un mejor conocimiento del problema.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;Ya en un plano más técnico, otra fuente de problemas iniciales fue la &lt;span style="font-weight: bold;"&gt;ausencia de un modelo de entidades&lt;/span&gt; del que partir. Se pretendió hacer de forma totalmente incremental, exprimiendo al máximo la generación del modelo de datos de Hibernate a partir de las clases. En los anteriores proyectos, &lt;a href="http://iiso.blogspot.com/2009/03/cuando-hacer-el-modelo-de-datos.html"&gt;como ya he comentado&lt;/a&gt;, se nos imponía que un analista crease el modelo de datos, y que eso se tomase como base para comenzar el desarrollo. El extremo contrario tampoco es útil:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No es una tarea trivial, y es poco tolerante a errores. No pasa nada si haces mal un campo en una pagina, pero un error en el modelo de entidades puede tener consecuencias bastante dramáticas. Hacerlo exige un conocimiento profundo de los requisitos.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Una equivocación de una persona puede tener un desagradable efecto de malentendidos de los requisitos en cadena.&lt;/li&gt;&lt;li&gt;No es fácil compartimentar inicialmente para que la gente pueda trabajar independientemente.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Para la próxima...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El product backlog lo hará el Scrum Master como esta vez, antes de la primera reunión (tampoco tiene sentido movilizar a más personas para él).&lt;/li&gt;&lt;li&gt;En el sprint meeting &lt;span style="font-weight: bold;"&gt;el sprint backlog se hará entre todos los miembros del equipo&lt;/span&gt;. En vez de llevar a la reunión el sprint backlog prefabricado, leerlo, y estimar a partir de esa lectura, se generará durante ella, y tras la creación de cada tarea se hará la estimación de la misma. Sí, nos llevará mucho más tiempo, pero no será perdido, sino &lt;span style="font-style: italic;"&gt;invertido&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;En caso de tratarse de una aplicación de gestión, probablemente durante el propio sprint planning se hará un modelo de entidades (entidades del sistema y su relación entre ellas, sin necesidad de entrar a nivel de propiedad). Algo muy básico, pero que permita tener un punto de arranque común y afianzar los requisitos. Eso sí, me mantengo en la opinión de que con Hibernate ya debemos trabajar en términos de entidades y no de tablas.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-2857111490967867750?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2857111490967867750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2857111490967867750'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/04/postmortem-estimaciones-y-creacion-del.html' title='Postmortem: estimaciones y creación del sprint backlog'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1371021017722257904</id><published>2009-04-08T15:11:00.003+01:00</published><updated>2009-04-08T15:23:25.020+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><title type='text'>Java en Google App Engine</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;asta ahora el hosting accesible (gratuito o de precios ajustados) era territorio dominante de la plataforma LAMP (Linux + Apache + MySQL + PHP) o derivados. Este ha sido uno de los factores determinantes de la proliferación de herramientas open source para foros, blogging, etc.&lt;br /&gt;Por el contrario el mundo empresarial está copado, también en gran parte, por Java (aunque sitios como Flickr o Yahoo! demuestran que PHP es un sistema que no tiene que limitarse a eso, pero este es otro tema).&lt;br /&gt;Hoy Google ha anunciado la &lt;a href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html"&gt;disponibilidad de Java en Google App Engine&lt;/a&gt;. Además, con &lt;a href="http://google-code-updates.blogspot.com/2009/04/standards-based-persistence-for-java.html"&gt;soporte para JPA&lt;/a&gt;. Por fin hay una alternativa real al LAMP (¡ojo, que no tiene nada de malo, pero las alternativas siempre son buenas!).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1371021017722257904?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1371021017722257904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1371021017722257904'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/04/java-en-google-app-engine.html' title='Java en Google App Engine'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7771745664966529841</id><published>2009-03-22T14:40:00.003Z</published><updated>2009-03-22T14:47:27.287Z</updated><title type='text'>Los ordenadores son, esencialmente, deterministas</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;os ordenadores, fallos hardware aparte, son autómatas deterministas: dado un estado inicial, una serie de operaciones llevan siempre al mismo resultado.&lt;br /&gt;Una conclusión de esto es que no hacen "cosas raras". Puede haber cosas mal hechas, claro está, pero sus efectos son predecibles.&lt;br /&gt;Un caso paradigmático de esto son las librerías. En todas hay bugs, claro, pero pocos. Si algo "no funciona" revisa antes tu código. Las librerías de código abierto son usadas por millones de desarrolladores, y revisadas por gran parte de ellos (¿aún no has asociado las fuentes a los binarios en Eclipse? ¿A qué esperas?). Sin embargo, tu código es nuevo y sólo tuyo, probablemente el problema esté ahí.&lt;br /&gt;Cuando llamamos a un SAT lo primero que nos preguntan es ¿está enchufado? Sí, es irritante, pero, ¿compruebas que tu código lo está? El determinismo hace que para solucionar la mayor parte de los errores en el código no sea necesario ni pensar. Símplemente un análisis metódico desde el error nos conduce al error: vete a la línea que falla y vete "tirando del hilo". El problema aparecerá solo.&lt;br /&gt;&lt;br /&gt;PS: ¿Ah, que estás utilizando librerías propietarias, sin el código? Mmm... ¡Buena suerte!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7771745664966529841?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7771745664966529841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7771745664966529841'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/03/los-ordenadores-son-esencialmente.html' title='Los ordenadores son, esencialmente, deterministas'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7766217849529400947</id><published>2009-03-19T18:53:00.006Z</published><updated>2009-03-22T14:40:02.451Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='ubiquidad'/><title type='text'>IPhone 3.0 y ubiquidad</title><content type='html'>&lt;span class="dropcaps"&gt;N&lt;/span&gt;o es mi costumbre usar este blog para hacer reseñas de productos, pero sí me gustaría hablar un poco del IPhone, a cuento del reciente anuncio de la &lt;a href="http://www.tuaw.com/2009/03/17/iphone-3-0-feature-roundup/"&gt;versión 3.0&lt;/a&gt; de su sistema operativo.&lt;br /&gt;Se habla mucho de cloud computing, Web 3.0 y demás milongas últimamente, que, en mi opinión, sólo sirven para alimentar los blogs, las columnas en las revistas, y con ello, las nóminas, de supuestos visionarios. Nuevas etiquetas para productos que ya existen.&lt;br /&gt;Sin embargo, la auténtica &lt;span style="font-style: italic;"&gt;evolución&lt;/span&gt; (no creo que haya &lt;span style="font-style: italic;"&gt;re&lt;/span&gt;voluciones a la vista) de Internet es la presencia &lt;a href="http://es.wikipedia.org/wiki/Computaci%C3%B3n_ubicua"&gt;ubíqua&lt;/a&gt; de la misma. Hace aproximadamente cinco años trabajé en proyectos de I+D sobre este tema, y se veía claro que el futuro pasaba por ahí. Sin embargo, el precio de los dispositivos y la cara y escasa cobertura de Internet de calidad lo hacían imposible.&lt;br /&gt;A día de hoy los dispositivos están al alcance de cualquiera, y la conexión es más que aceptable, así que esto está a punto de estallar. Google lo sabe y se ha posicionado con Android. Apple, con su iPhone, ya lo está experimentando.&lt;br /&gt;La versión 3.0 contiene dos bombas potenciales en este aspecto: las &lt;span style="font-weight: bold;"&gt;compras &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;in-app&lt;/span&gt; y la &lt;span style="font-weight: bold;"&gt;conexión de dispositivos&lt;/span&gt;.&lt;br /&gt;Sí, todos gritábamos por tener, por favor, &lt;span style="font-style: italic;"&gt;cortapega&lt;/span&gt; ("ortodoxo", ya que con jailbreaking ya se podía), tethering y A2DP (Bluetooth Estéreo). Pero lo que puede ser una &lt;span style="font-style: italic;"&gt;revolución ubíqua&lt;/span&gt; es lo otro.&lt;br /&gt;Las compras in-app permiten un modelo de negocio basado en micropagos, para ofrecer contenido de calidad (de pago). &lt;span style="font-style: italic;"&gt;Off-topic: ¿tendrá el siguiente iPhone una pantalla de &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.geekets.com/2009/03/19/flepia-un-ebook-reader-a-todo-color/"&gt;lector de ebooks a color&lt;/a&gt;&lt;span style="font-style: italic;"&gt; y reventará el mercado?&lt;/span&gt;&lt;br /&gt;La conexión a dispositivos permitirá conectar cualquier aparato a Internet, sin requerir una dedicada. Ya estoy empezando a pensar aplicaciones &lt;span style="font-style: italic;"&gt;online&lt;/span&gt; a aparatos que ahora son &lt;span style="font-style: italic;"&gt;offline&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;Quien quiera innovar y forrarse, que piense en ubiquidad y se deje de modas pasajeras.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7766217849529400947?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7766217849529400947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7766217849529400947'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/03/iphone-30-y-ubuquidad.html' title='IPhone 3.0 y ubiquidad'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7342500104442890727</id><published>2009-03-19T09:56:00.002Z</published><updated>2009-03-19T09:59:09.751Z</updated><title type='text'>Artesanía</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;l desarrollo de software tiene más de artesanía que de ingeniería. Sí, hay métricas, calidad, automatizaciones... Pero lo que requiere de la persona que lo realiza es que sea un buen artesano, que haga las cosas con esmero, meticulosidad...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7342500104442890727?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7342500104442890727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7342500104442890727'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/03/artesania.html' title='Artesanía'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6739979564466987943</id><published>2009-03-08T15:15:00.002Z</published><updated>2009-03-08T15:57:50.249Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Cuándo hacer el modelo de datos</title><content type='html'>&lt;span class="dropcaps"&gt;S&lt;/span&gt;i me preguntasen por el mínimo común denominador de la aplicación de las metodologías tradicionales que he visto en los últimos años, respondería sin dudar &lt;span style="font-style: italic;"&gt;el modelo de datos&lt;/span&gt;. La gestión de los requisitos es muy variable, el diseño y la construcción varían enormemente... Sin embargo, el momento y la forma en que se hace el modelo de datos siempre era la misma. Una vez recogidos los requisitos, durante el análisis, el paso clave que marcaba, en cierto modo, el fin del trabajo del analista y el comienzo del resto, era la validación del modelo de datos.&lt;br /&gt;&lt;br /&gt;En las metodologías tradicionales se hace en dos partes: en la fase de análisis se hace el modelo lógico, y en diseño se hace el físico. En la práctica siempre he visto que esto se fusionaba. Quizá por las herramientas, quizá por lo innecesario de la división, siempre se hace directamente el segundo.&lt;br /&gt;&lt;br /&gt;Desde que uso Hibernate había querido aprovechar al máximo la potencia de su mapeo relacional, relegando el modelo de datos a un segundo plano en favor del modelo de clases. Esto, que parece un detalle menor, en mi opinión tiene una gran importancia práctica. Hacerlo implicaría que el analista/diseñador haría, en vez del modelo, directamente las clases, las cuales generarían el primero automáticamente. Expuse esta idea esgrimiendo una serie de ventajas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El trabajo de modelado aportaría más información, ya que los modelos Java más las anotaciones de persistencia aportan más información y valor que las tablas (se introducen validaciones de datos, propiedades calculadas, documentación...).&lt;/li&gt;&lt;li&gt;Eliminaríamos el problemático trabajo de mapear tablas existentes.&lt;/li&gt;&lt;li&gt;Adelantaríamos el trabajo de la programación de las entidades.&lt;/li&gt;&lt;li&gt;Podríamos anticipar cosas como pruebas automáticas para verificar la corrección del modelo.&lt;/li&gt;&lt;li&gt;Personalmente trabajo mejor con una herramienta de desarrollo que con una de modelado. Andar con el ratón, dobles clicks y diálogos me parece engorroso y lento, aunque esto ya son preferencias de cada uno.&lt;/li&gt;&lt;li&gt;No renunciamos a la información gráfica, ya que podemos generar diagramas tanto de clases como de objetos mediante ingeniería inversa (NetBeans es realmente útil para esto).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;La idea no prosperó, y los siguientes proyectos se hicieron como anteriormente.&lt;br /&gt;&lt;br /&gt;Al pasar a metodologías ágiles, al desaparecer estas fases, toca decidir cuándo realizar este trabajo. Scrum obviamente no entra en esta decisión, así que, ya con la capacidad de decisión, me adherí al principio de &lt;a href="http://en.wikipedia.org/wiki/Continuous_design"&gt;diseño contínuo&lt;/a&gt; y además adopté las ideas anteriores. De esta forma, no se haría el trabajo explícito de modelado de los datos, sino que, a medida que se avanzase en la aplicación, se iría mejorando a través del propio diseño de las clases.&lt;br /&gt;&lt;br /&gt;Ya con el proyecto en desarrollo, saco las siguientes conclusiones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No realizar análisis del modelo de datos, sino trabajar directamente en el diseño de las clases, es muy práctico: es mucho más tolerante a los cambios (hemos pasado de claves &lt;span style="font-style: italic;"&gt;deferred&lt;/span&gt; a compuestas de forma trivial, por ejemplo), facilita el trabajo en equipo (no más "lanza de nuevo el script de base de datos, que he cambiado el esquema")... Me reafirmo, por tanto, en los puntos expuestos antes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Desaparece la mentalidad de "tenemos que ceñirnos al modelo de datos a cualquier coste". He visto auténticos malabarismos por parte de desarrolladores por querer respetar el modelo del analista por todos los medios. El hecho de no tenerlo tira esa barrera.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pese a esto, sigue siendo necesario hacer un trabajo previo de análisis. Comprender las clases y las relaciones entre ellas es fundamental para el desarrollo del proyecto. No es necesario especificar desde un principio cada propiedad de cada clase, sus longitudes máximas y sus validaciones, pero sí es importante tener claro lo antes posible el esquema general. Los desarrolladores tendemos a centrarnos en "pantallas", y en una no está la auténtica lógica de las relaciones entre los datos.&lt;/li&gt;&lt;/ul&gt;Para el siguiente proyecto estoy pensando incluso en hacer una primera versión del modelo de clases en el primer Sprint Meeting. En este creamos una tarea específica para ello, pero esto hace que el conocimiento quede en una sola persona. Creo que el trabajo de hacer una primera aproximación, incluso antes de la estimación de las tareas, ayudaría a todo el equipo a comprender el problema a resolver y la complejidad del desarrollo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6739979564466987943?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6739979564466987943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6739979564466987943'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/03/cuando-hacer-el-modelo-de-datos.html' title='Cuándo hacer el modelo de datos'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7207715186657321511</id><published>2009-02-20T15:52:00.003Z</published><updated>2009-02-20T16:20:17.593Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>¿Qué hacer cuando los usuarios/clientes se ponen nerviosos?</title><content type='html'>&lt;span class="dropcaps"&gt;C&lt;/span&gt;omo dirían en El Hormiguero... "¡Los usuarios, ese gran &lt;span style="font-style: italic;"&gt;desconocío'&lt;/span&gt;'!"&lt;br /&gt;&lt;br /&gt;Hoy se nos han puesto nerviosos los usuarios/clientes. Hacemos aplicaciones a medida, y hace un par de semanas tuvimos la última reunión (aún hay requisitos sin cerrar, pero bueno, tenemos claro que tenemos que aprender a convivir con eso). Nos han perido que &lt;span style="font-weight: bold;"&gt;quieren &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;ver&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; algo cuanto antes &lt;/span&gt;(obviamente cambiando la planificación acordada).&lt;br /&gt;&lt;br /&gt;Ante una situación así se me ocurren tres &lt;span style="font-weight: bold;"&gt;alternativas&lt;/span&gt;:&lt;br /&gt;a) Como no es lo pactado, nos ceñimos a lo hablado, así que dentro de mes y algo nos vemos. Hasta entonces, dejadnos tranquilos.&lt;br /&gt;b) Ok, el cliente siempre tiene la razón, así que nos adaptamos. Cambiamos la duración del sprint, adelantando la demo, aunque reduciendo el número de historias de usuario que presentamos.&lt;br /&gt;c) Nos mantenemos como estamos, pero, como el cliente siempre tiene la razón, os daremos versiones previas de prueba (abriendo acceso a alguno de nuestros servidores).&lt;br /&gt;&lt;br /&gt;La a) es la típica en la programación por contrato, la ortodoxa, la que te enseñan en clase. Tiene sus ventajas y sus inconvenientes. Por un lado, sí, estás en tu derecho de "plantarte", ya que así está acordado. Pero por otro, no satisfaces la solicitud del cliente. Personalmente no me gusta. Predispones al usuario a tirar a la basura lo que le enseñes en la fecha acordada. Y, no lo olvidemos, en ese momento&lt;span style="font-style: italic;"&gt; pueden tener razón&lt;/span&gt; (sí, señores, los desarrolladores también nos equivocamos).&lt;br /&gt;&lt;br /&gt;La b) es la que inicialmente pensamos. No es demasiado mala, ya que no aumenta la "densidad de trabajo", y contenta a los usuarios. Pero presenta varios problemas. La duración del sprint no se debe cambiar, y mucho menos por gente no &lt;span style="font-style: italic;"&gt;comprometida&lt;/span&gt;. Además, es tarea específica del Scrum Master evitar este tipo de situaciones. Y, dejando ya de lado Scrum, te permite menos margen de error. Aunque la "densidad de trabajo" no cambie, es más difícil cumplir el plazo.&lt;br /&gt;&lt;br /&gt;La c) es la que finalmente se va a tomar. No sólo no rompe reglas de la metodología, sino que va a potenciar que el trabajo se haga como se debe. Ya habíamos quedado clara la "definición de hecho" y la integración contínua, así que en cualquier momento se podría desplegar el código del repositorio para probar. Y, además, permite satisfacer la necesidad del usuario (¡incluso mejor que con la opción b), ya que podrá ver más antes) e implicarle más. Tendremos feedback antes, minimizando el impacto del cambio de requisitos. Queda claro (tanto para el equipo como para el usuario) que la fecha de la demo es cuando debe estar el producto &lt;span style="font-style: italic;"&gt;estable&lt;/span&gt;, que hasta entonces sólo estará viendo una versión en desarrollo.&lt;br /&gt;&lt;br /&gt;En teoría todo pinta bien, ya veremos en la práctica :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7207715186657321511?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7207715186657321511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7207715186657321511'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/02/que-hacer-cuando-los-usuariosclientes.html' title='¿Qué hacer cuando los usuarios/clientes se ponen nerviosos?'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7189539536326127263</id><published>2009-02-15T13:27:00.003Z</published><updated>2009-02-15T14:03:42.316Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='redes sociales'/><title type='text'>Redes Sociales (I): el arranque en frío</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;as redes sociales basan su funcionamiento en el comportamiento de las personas que las conforman, y, como sistema humano que son, presentan ciertos fenómenos más o menos indeseables.&lt;br /&gt;Uno de ellos es el fenómeno del &lt;span style="font-weight: bold;"&gt;arranque en frío&lt;/span&gt;. En general se refiere a que, dada una situación &lt;span style="font-style: italic;"&gt;inicial&lt;/span&gt; de un sistema o un elemento (en función del contexto el significado de &lt;span style="font-style: italic;"&gt;inicial&lt;/span&gt; varía), su estado posee una gran inercia, por lo que es difícil que comience a funcionar.&lt;br /&gt;Esta propiedad, como otras tantas cosas en informática, puede verse a muchos niveles. La aplicación más amplia puede ser el arranque en frío &lt;span style="font-weight: bold;"&gt;de la red en sí misma&lt;/span&gt;: por lo que sea planificas la creación de una nueva red social -justo lo que el mundo necesita-, pero al no tener usuarios los usuarios no se registran, en forma de problema recursivo. El éxito de una red social es el uso que de ella den los usuarios y sus interacciones, por lo que, al estar vacía, tiene poco valor.&lt;br /&gt;Se proponen &lt;a href="http://socialmedia.typepad.com/blog/2008/07/the-cold-start-problem-in-social-media.html"&gt;varias soluciones&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Por supuesto, haz algo que tenga interés.&lt;/li&gt;&lt;li&gt;Establece mecanismos que recompensen la creación de contenidos.&lt;/li&gt;&lt;li&gt;Proporciona APIs de forma que los usuarios puedan extender y conectar el sistema.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Alimenta tu sitio a través de APIs y enlaces de otros sitios. Una utilidad muy importante es la de &lt;span style="font-style: italic;"&gt;importar contactos&lt;/span&gt;. Nadie a estas alturas de la vida se planteará introducir &lt;span style="font-style: italic;"&gt;de nuevo&lt;/span&gt; las direcciones de sus amigos a mano.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Maximiza la visibilidad social del contenido creado por los usuarios.&lt;/li&gt;&lt;li&gt;No generes spam.&lt;/li&gt;&lt;li&gt;Permanece atento a los usuarios y añade nueva funcionalidad con frecuencia.&lt;/li&gt;&lt;/ul&gt;Yo añadiría otras:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ofrece &lt;span style="font-weight: bold;"&gt;contenido desde el principio&lt;/span&gt; de su apertura "pública". Mediante un conjunto de "usuarios expertos" puedes crear contenido de forma que cuando el sitio "abra" ya esté funcionando.&lt;/li&gt;&lt;li&gt;Haz que los usuarios &lt;span style="font-style: italic;"&gt;quieran&lt;/span&gt; registrarse. Uno de los &lt;a href="http://barrapunto.com/articles/08/12/15/169214.shtml"&gt;aciertos que han llevado al éxito a Tuenti&lt;/a&gt; ha sido el sistema de invitaciones, creando una sensación de &lt;span style="font-style: italic;"&gt;exclusividad&lt;/span&gt; que hace que la gente &lt;span style="font-style: italic;"&gt;quiera&lt;/span&gt; estar. Es otra de las motivaciones del "beta" ya generalizado en los "servicios 2.0".&lt;/li&gt;&lt;/ul&gt;Si nos "acercamos", encontramos un nuevo caso de problema de "arranque en frío": el de el &lt;span style="font-weight: bold;"&gt;contenido nuevo&lt;/span&gt;. La primera vez que leí al respecto fue referido a &lt;a href="http://www.lastfm.es/"&gt;last.fm&lt;/a&gt;, el servicio en el que los usuarios envían sus preferencias musicales. El problema es, esencialmente, que hay contenido que parte con tanta ventaja (Los Beatles, Rolling, Radiohead, Coldplay...) que es difícil que el nuevo cobre relevancia. Yo lo notaba con la característica de "reproducir artistas similares" del magno reproductor &lt;a href="http://amarok.kde.org/"&gt;Amarok&lt;/a&gt;. Pusiese lo que pusiese, a eso de una o dos horas los Beatles o los Rolling hacían de agujero negro: al final el contenido que suena acaba estando relacionado con ellos, y se convierten en lo único que reproduce el sistema.&lt;br /&gt;Este problema es difícil de combatir por su propia esencia. De hecho, alguno podría discutir que no se debe combatir, y que el éxito del contenido de una red no debe estar manipulado. Si las &lt;a href="http://www.flickr.com/photos/rosie_hardy/"&gt;fotos de rosiehardy&lt;/a&gt; son tan buenas, ¿por qué no debe estar &lt;span style="font-style: italic;"&gt;abonada&lt;/span&gt; a la portada del &lt;span style="font-style: italic;"&gt;explore&lt;/span&gt;?&lt;br /&gt;Como para todo, hay soluciones, al menos parciales:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Introducir &lt;span style="font-weight: bold;"&gt;aleatoriedad &lt;/span&gt;para evitar los "agujeros negros". Esta es la estrategia del nuevo Amarok. Han complicado la lista dinámica de forma que sea posible "escapar" de esos artistas destacados.&lt;/li&gt;&lt;li&gt;Creación de &lt;span style="font-weight: bold;"&gt;listas específicas que favorezcan las novedades&lt;/span&gt;: listas de "lo más nuevo", "lo más escuchado en los últimos días", etc.&lt;/li&gt;&lt;li&gt;No crear elementos que penalicen aún más el arranque en frío. Por ejemplo, en el concurso de fotografía de Público han creado una &lt;span style="font-weight: bold;"&gt;página de '&lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.publico.es/fotolibre/galeria?semana=3&amp;amp;categoriaSel=0&amp;amp;categoria=3&amp;amp;semanaSel=3&amp;amp;mostrar=masvotadas"&gt;las más votadas&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;'&lt;/span&gt;. Esto es muy negativo, porque los usuarios &lt;span style="font-style: italic;"&gt;casuales&lt;/span&gt; entrarán a ver lo que hay e irán a esa página en vez de recorrer la galería entera, lógicamente, favoreciendo el voto de las más votadas. Existiendo algo así se premia rapidez en la carga y en el posicionamiento inicial en vez de la calidad en sí. Yo lo sufrí la semana pasada, esta estoy intentando &lt;a href="http://www.publico.es/fotolibre/galeria/detalle/foto/15282"&gt;hacer lo contrario&lt;/a&gt; :).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7189539536326127263?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7189539536326127263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7189539536326127263'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/02/redes-sociales-i-el-arranque-en-frio.html' title='Redes Sociales (I): el arranque en frío'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6416711693261675607</id><published>2009-02-12T16:23:00.004Z</published><updated>2009-02-12T17:37:54.019Z</updated><title type='text'>Estrategias motivadoras 'alternativas'</title><content type='html'>&lt;span class="dropcaps"&gt;M&lt;/span&gt;i pareja lleva una agencia de &lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=viajes+ecuador,+valladolid&amp;amp;jsv=145d&amp;amp;sll=41.646749,-4.728241&amp;amp;sspn=0.376615,0.872726&amp;amp;ie=UTF8&amp;amp;latlng=41648136,-4720005,10009788525587113481&amp;amp;ei=5k6USffqOZTk2wLo-cT-CA&amp;amp;sig2=emavrZCAyDtx33Pb51LJDw&amp;amp;cd=7"&gt;viajes Ecuador en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Valladolid&lt;/span&gt;&lt;/a&gt; (enlace patrocinado ;) ) y hoy me contaba que en uno de los cursos a los que va a ir son muy dados a hacer que la gente participe a base de &lt;span style="font-weight: bold;"&gt;premios&lt;/span&gt;. Cuando alguien responde una pregunta, le dan un detalle (un imán o similar). Obviamente el "premio" no es la finalidad, ni del curso ni de los asistentes, pero convierten algo que normalmente es aburrido y unidireccional en algo más divertido y, sobre todo, más &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;participativo&lt;/span&gt;.&lt;br /&gt;Siempre habrá alguno que diga que esto es algo &lt;span style="font-style: italic;"&gt;estúpido&lt;/span&gt; e incluso una &lt;span style="font-style: italic;"&gt;falta de respeto&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;poco profesional&lt;/span&gt;, que es como las sardinas de las focas o los plátanos de los monos... ¿Vosotros lo veis así? Yo no. Ojo, sólo hablo de &lt;span style="font-style: italic;"&gt;premios "alternativos"&lt;/span&gt;, no incentivos "de verdad" (económicos o, en general, caros, eso es tema para otro post).&lt;br /&gt;En mi opinión, estos premios alternativos son más que un juego, que permite establecer una relación de confianza mayor. Los resultados son claros: más gente va al curso, la que va se lo pasa mejor, y además, participa.&lt;br /&gt;&lt;br /&gt;¿Incentivos como estos son aplicables a la gestión de proyectos o, en general, a una empresa de desarrollo de software? No hablo de algo que vaya a aumentar la productividad de forma generalizada o una nueva bala de plata, sólo algo positivo, de escasa importancia. Últimamente estoy teniendo que dar más charlas de las que me gustaría, y noto que son bastante pesadas. Hago lo posible por mejorar la participación, pero no es fácil. Incluso el trabajo diario se podría intentar hacer algo más ameno (sí, ya sé que es trabajo, y sí, sé que no somos niños y no hay por qué convertir todo en un juego, pero a nadie le amarga un dulce).&lt;br /&gt;Alguno hay ya en marcha: para &lt;a href="https://hudson.dev.java.net/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Hudson&lt;/span&gt;&lt;/a&gt;, el &lt;a href="http://www.albertodevega.es/index.php?blog=1&amp;amp;title=integracion-continua&amp;amp;more=1&amp;amp;c=1&amp;amp;tb=1&amp;amp;pb=1"&gt;sistema de integración contínua&lt;/a&gt;, hay un plugin que se llama "&lt;a href="http://hudson.gotdns.com/wiki/display/HUDSON/The+Continuous+Integration+Game+plugin"&gt;El Juego de la Integración Contínua&lt;/a&gt;". En resumidas cuentas, se dan puntos por "hacer las cosas bien": añadir pruebas, participar en compilaciones correctas, mejorar las métricas de calidad... Yo lo he instalado en nuestro servidor, en unas semanas os diré cuál es el balance.&lt;br /&gt;Obviaremos el &lt;a href="http://kennardconsulting.blogspot.com/2008/12/new-features-in-eclipse-35.html"&gt;sistema de logros para Eclipse&lt;/a&gt; ;)&lt;br /&gt;No se necesita nada tecnológicamente elevado, con una caja de cartón puede valer. Un par de personas en el anterior despacho hicimos una hucha de &lt;span style="font-style: italic;"&gt;fails&lt;/span&gt;, cada vez que cometíamos una burrada poníamos 10 céntimos.&lt;br /&gt;&lt;br /&gt;¿Qué opináis? ¿Tenéis trucos para hacer vuestras exposiciones más llevaderas? ¿Y en el trabajo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6416711693261675607?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6416711693261675607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6416711693261675607'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/02/estrategias-motivadoras-alternativas.html' title='Estrategias motivadoras &apos;alternativas&apos;'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1819750718923002110</id><published>2009-02-08T19:06:00.003Z</published><updated>2009-02-08T19:47:52.493Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><title type='text'>Resolución de problemas</title><content type='html'>&lt;span class="dropcaps"&gt;U&lt;/span&gt;no de los indicadores más claros, en mi opinión, de la validez (aptitud y actitud, principalmente) de alguien en un trabajo es la forma en la que afronta un problema. Por ejemplo, plantear un problema en una aplicación web en una entrevista de trabajo, puede permitir conocer muchas cosas del entrevistado:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;¿Comprende el modelo cliente/servidor? No sería la primera vez que escucho a gente que no comprende dónde se ejecuta el PHP y dónde el Javascript.&lt;/li&gt;&lt;li&gt;¿Es capaz de leer los errores? Lejos quedan aquellos volcados típicos de ensamblador o C. Los lenguajes y los entornos de hoy suelen dar información significativa de lo que ocurre cuando hay un problema. Sin embargo, no todo el mundo realmente se para a interpretarlo.&lt;/li&gt;&lt;li&gt;¿Está acostumbrado a programar tests? Hoy en día se puede probar casi todo, desde el acceso a datos hasta problemas de interfaz. Sugerir programar una prueba cuando aparece un problema sería un muy buen síntoma.&lt;/li&gt;&lt;li&gt;¿Tiene &lt;span style="font-style: italic;"&gt;recursos&lt;/span&gt;? Pensar en problemas frecuentes o ofrecer alternativas de solución suelen ir relacionado con experiencia real.&lt;/li&gt;&lt;/ul&gt;Cuando alguien me pide ayuda y su discurso está plagado de "no sé", "esto &lt;span style="font-style: italic;"&gt;debería&lt;/span&gt; funcionar", "antes iba bien", tiemblo, y si encima se remata con un "no, no he probado eso" o "espera que miro qué pone el error", directamente se me cae el alma a los pies. Es habitual decir que un ingeniero se dedica a resolver problemas. Viendo la ineptitud que a veces presentamos para hacerlo, no me extraña que nadie considere la Informática una Ingeniería.&lt;br /&gt;&lt;br /&gt;Me encantan 'C.S.I.' y 'House'. Ambas tienen en común que el leitmotiv es la resolución de un problema. La primera se centra en la recopilación de pruebas, mientras que la segunda es sobre investigación del problema en sí y &lt;span style="font-style: italic;"&gt;prueba y error&lt;/span&gt;. De hecho, ofrecen dos perspectivas diferentes de cómo afrontar un problema:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;En C.S.I. es necesario ser muy meticuloso y seguir unos protocolos establecidos (por temas legales) y se dispone de una cantidad razonablemente alta de recursos (un departamento, helicópteros, alta tecnología...). No se presupone nada. Se recopilan y analizan pruebas, y cuando surge una hipótesis se deben conseguir hechos que lo contrasten. Si no se hace así, el señor juez dejará libre al malo por no validez del proceso. La ventaja de esta aproximación es que, con tiempo, la verdad suele salir a la luz por sí misma: el mismo proceso de recopilación de pruebas te lleva al asesino, no hay crimen perfécto (¿o sí?). Ellos tienen el agravante de que su &lt;span style="font-style: italic;"&gt;problema&lt;/span&gt; (el malo) sigue corriendo mientras ellos avanzan.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;En House se suele trabajar con prisas (el paciente se muere cada vez más rápido) una cantidad limitada de recursos (no puedes dedicar todo el hospital para un paciente) pero muy buenos (tiene un equipo de los mejores profesionales). Hay procedimientos, sí, pero los protagonistas suelen estar por encima de ellos, considerando como único protocolo el conseguir que el paciente no muera. Mediante diagnóstico diferencial, similar al método socrático, y un (exagerado) proceso de prueba y error se genera el conocimiento que permite localizar el problema.&lt;/li&gt;&lt;/ul&gt;En mi opinión en informática la resolución de errores se asemeja a House. Cuando encuentras un fallo (aparece un síntoma), hay que...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Pensar posibles lugares problemáticos (posibles enfermedades): ¿problema de configuración del servidor? ¿Fallo en la lógica de negocio? ¿Problema con el acceso a datos?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hacer los análisis no costosos ni intrusivos: "¿está enchufado?" "¿El usuario y password son correctos?" "¿La base de datos está levantada?".&lt;/li&gt;&lt;li&gt;Priorizar (por probabilidad y coste) los problemas posibles, y comenzar la prueba y error.  &lt;span style="font-style: italic;"&gt;Nota: quita el tratamiento después de cada prueba (deja el código como estaba).&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;A éstos añadiría un punto 0 que no encaja en la analogía: prepara una prueba que primero demuestre que hay un problema, y que después te sirva para demostrar que lo has resuelto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1819750718923002110?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1819750718923002110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1819750718923002110'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/02/resolucion-de-problemas.html' title='Resolución de problemas'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5358340535478528081</id><published>2009-02-08T13:15:00.002Z</published><updated>2009-02-08T13:28:14.426Z</updated><title type='text'>¿Los usuarios a la tecnología o la tecnología a los usuarios?</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;ace un mes abría una incidencia con Orange porque la velocidad de sincronización me había bajado aproximadamente a la mitad. El otro día me llamaban para cerrar la incidencia, indicándome que la culpa sería de Telefónica, que habría venido más ADSLs en la zona, por lo que la velocidad se reduce. Intenté no pagar mi indignación con la pobre señorita del teléfono, pero hay varias cosas que claman al cielo...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;¿A mí que me cuentas de Telefónica? Yo tengo contrato con Orange (incluso la línea), y una de las razones para cambiar a &lt;span style="font-style: italic;"&gt;vuestro&lt;/span&gt; ADSL fue tener "un único pagador" (cuando tenía problemas antes se pasaban la patata caliente).&lt;/li&gt;&lt;li&gt;¿Cómo que porque haya más clientes se baja la velocidad? ¿Si mi vecino abre el grifo yo no me puedo duchar? ¡Estáis vendiendo por encima de la capacidad!&lt;/li&gt;&lt;/ul&gt;Dejemos al margen mis problemas con Orange. En Nubeblog enlazaron, casi coincidiendo con lo anterior, unos datos sobre que &lt;a href="http://www.nubeblog.com/2009/02/05/las-pymes-en-usa-y-uk-pasan-del-cloud-hosting/"&gt;las PYMES &lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://www.nubeblog.com/2009/02/05/las-pymes-en-usa-y-uk-pasan-del-cloud-hosting/"&gt;pasan (sic) del Cloud Computing&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;Estos dos hechos me llevaron a una discusión filosófica (soy mucho de filosofar contra mí mismo). &lt;span style="font-style: italic; font-weight: bold;"&gt;¿Cuántos detalles técnicos debe conocer un usuario?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;¿Para qué quiere una PYME saber qué es el Cloud Computing? ¿Para qué quiero yo saber que mi problema es porque tienes malas condiciones respecto a la reventa de la línea? Dime que me vas a hacer un backup a través de Internet a un 10% de mi coste actual. Dime que no se puede ofrecer un servicio de más calidad en mis condiciones y ofréceme otra oferta... Ahorrate lo demás, ¡no me importa!&lt;br /&gt;&lt;br /&gt;Haz buenos productos sin entrar en tecnicismos y detalles que no le aportan nada al usuario. Lo demás es autobombo (o excusas).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5358340535478528081?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5358340535478528081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5358340535478528081'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/02/los-usuarios-la-tecnologia-o-la.html' title='¿Los usuarios a la tecnología o la tecnología a los usuarios?'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8783118608221972487</id><published>2009-02-01T17:54:00.003Z</published><updated>2009-02-01T18:31:08.183Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='enlaces'/><title type='text'>X enlaces de los X últimos días</title><content type='html'>&lt;span class="dropcaps"&gt;U&lt;/span&gt;nas cuantas cosas de las que he compartido en Google Reader en los últimos días.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sinergiasincontrol.blogspot.com/2009/01/48-tu-informtico-est-trabajando.html"&gt;&lt;span style="font-weight: bold;"&gt;¿Tu informático está trabajando?&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Estados mentales de un informático, desde el 100% improductivo hasta el &lt;span style="font-style: italic;"&gt;flow&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://agilesoftwaredevelopment.com/leanprinciples"&gt;&lt;span style="font-weight: bold;"&gt;Seven Principles of Lean Software Developement&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;La semillita que papá puso en mamá para dejar de parchear el desarrollo en cascada mediante desarrollo por contratos, de la cual salieron las metodologías ágiles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/sgreene/salesforcecom-agile-transformation-agile-2007-conference?type=powerpoint"&gt;&lt;span style="font-weight: bold;"&gt;Salesforce.com Agile Transformation&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Soy un adicto de los casos reales. Aquí vemos cómo Salesforce.com adoptó metodologías ágiles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.secretgeek.net/copy_paste_dont_do_it.asp"&gt;&lt;span style="font-weight: bold;"&gt;Can You Cure the Copy/Paste Disease?&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Sí, sé que &lt;a href="http://iiso.blogspot.com/2009/01/micromanagement.html"&gt;sufro micromanagementitis&lt;/a&gt;, pero nunca dejaré de amenazar con cortar dedos a quien cortapegue, y me gustan los artículos que me dan la razón (soy así :) ).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://elegantcode.com/2009/01/26/agile-in-the-trenches/"&gt;&lt;span style="font-weight: bold;"&gt;Agile in the Trenches&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Más casos reales. Creo que un caso así demuestra la utilidad, a veces puesta en duda, de un Scrum Master.&lt;br /&gt;&lt;br /&gt;OFFTOPIC: &lt;a href="http://www.adn.es/blog/risto_mejide/impresa/cultura/20090129/POS-0005-que-llueva-que-llueva.html"&gt;&lt;span style="font-weight: bold;"&gt;Que llueva, que llueva&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;La convivencia en pareja trajo consigo una negociación en la que intercambiamos los gorgoritos de los &lt;span style="font-style: italic;"&gt;triunfitos&lt;/span&gt; por las carreras de Alonso, los Nadal - Federer, y unos cuantos &lt;span style="font-style: italic;"&gt;tuercebotas&lt;/span&gt;. Dicho sin prosa, a cambio de ver deporte sin discutir, durante unos meses al año tengo que soportar Operación Triunfo.&lt;br /&gt;El programa en sí no es &lt;span style="font-style: italic;"&gt;tan&lt;/span&gt; terrible. El esfuerzo de la música en directo no es habitual en televisión estos días, y que todos, participantes e invitados, interpreten en directo, es bueno. Y siempre hay alguno que canta bien, eso es así. Además la música de fondo siempre es muy buena (en el último año escuché Muse, Coldplay, Los Planetas, Arcade Fire...), ya sólo queda que promocionen esa en vez del último &lt;span style="font-style: italic;"&gt;hit&lt;/span&gt; de Vale Music. No me gusta el lado reality, pero, por encima de todo, me disgusta la idiotización musical que este programa ha producido. En los últimos castings se hacía patente: la mayor parte de los adolescentes que engordaban las infinitas colas de candidatos habían vivido &lt;span style="font-style: italic;"&gt;sólo&lt;/span&gt; con Operación Triunfo. Cuando se les ponía a prueba con una canción no conocían la versión original, sino la del anterior triunfito. Se piensan que &lt;span style="font-style: italic;"&gt;triunfar&lt;/span&gt; es salir de ese programa. Dadme a un currante de garitos madrileños como &lt;a href="http://profile.myspace.com/index.cfm?fuseaction=user.viewProfile&amp;amp;friendID=115399108"&gt;Luis Ramiro&lt;/a&gt;, &lt;a href="http://www.marwanweb.com/"&gt;Marwan&lt;/a&gt; o &lt;a href="http://www.andreslewin.com/"&gt;Andrés Lewin&lt;/a&gt;, y retirad del mercado los clones prefabricados.&lt;br /&gt;Al grano, que me voy por las ramas.&lt;br /&gt;En las últimas ediciones el principal interés pasó del escenario al jurado, a Risto Mejide. Tengo que admitir que, como el 90% de la audiencia, disfruto sus minutos como un niño. Su personaje de publicista hiriente y odioso me encanta, pero lo que se puede ver más allá me parece también del máximo interés. Más allá de su fachada, nos ha dejado estos días un artículo directo, sincero y, en mi opinión, terriblemente acertado. Quien quiera estancarse en la mediocridad y dejarse llevar por el torrente de la crisis, que lo haga. Pero que no venga luego lloriqueando.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://jcesarperez.blogspot.com/2009/01/programacion-basada-en-google-pbg.html"&gt;Programación Basada en Google&lt;/a&gt;&lt;br /&gt;Desconozco si Julio César Pérez figura en esas listas de &lt;span style="font-style: italic;"&gt;gurús&lt;/span&gt;, pero su blog me encanta. Pocas entradas, pero admirablemente escritas, y siempre de valor. En general es un tipo práctico (atajos de Eclipse, ejemplos de código...) pero esta vez hace una reflexión muy acertada sobre un antipatrón de desarrollo que todos reconocemos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8783118608221972487?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8783118608221972487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8783118608221972487'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/02/x-enlaces-de-los-x-ultimos-dias.html' title='X enlaces de los X últimos días'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6276531109571058679</id><published>2009-01-29T19:29:00.004Z</published><updated>2009-01-29T20:15:12.428Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='micromanagement'/><title type='text'>Micromanagement</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;oy he caído por casualidad en una &lt;a href="http://www.geekherocomic.com/2009/01/28/micro-management/"&gt;tira sobre micromanagement&lt;/a&gt; en &lt;a href="http://www.geekherocomic.com/"&gt;Geek Hero Comic&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.geekherocomic.com/comics/2009-01-28-micro-management.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 477px; height: 151px;" src="http://www.geekherocomic.com/comics/2009-01-28-micro-management.png" alt="" border="0" /&gt;&lt;/a&gt;Está claro que esta tira no es &lt;a href="http://sinergiasincontrol.blogspot.com/"&gt;Sinergia Sin Control&lt;/a&gt;, pero me ha hecho pararme a pensar si tengo un problema: me he visto reflejado con el tipo del peinado de el de Simply Red (o el Actor Secundario Bob, o Bisbal, o mi amigo Valle ^_^).&lt;br /&gt;Tengo que admitir que soy muy maniático con muchos detalles que considero importantes, y, más que importantes, &lt;span style="font-style: italic;"&gt;malos síntomas&lt;/span&gt;. Hoy mismo, en una presentación sobre metodología de desarrollo que he hecho para los compañeros, me he declarado un entrometido maniático, y les he pedido disculpas por anticipado al respecto.&lt;br /&gt;Concretamente, soy MUY maniático con estos &lt;span style="font-style: italic;"&gt;detalles&lt;/span&gt; (entre otros), que si seguís el blog ya habréis visto comentados:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Programar usando el ratón en vez de &lt;span style="font-style: italic;"&gt;dominar&lt;/span&gt; (progresivamente) los atajos de teclado.&lt;/li&gt;&lt;li&gt;No aprovechar las vistas de Eclipse, en sus diferentes variantes: ordenar el código mediante algún criterio en vez de utilizar la vista 'outline'; no utilizar //TODOs y //FIXME para que aparezcan en Tasks; no explotar las posibilidades de la depuración...&lt;/li&gt;&lt;li&gt;¡Cortapegar!&lt;/li&gt;&lt;li&gt;Nomenclatura de variables.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;Buscando &lt;a href="http://en.wikipedia.org/wiki/Micromanagement"&gt;al respecto del micromanagement&lt;/a&gt; he encontrado &lt;a href="http://santi-garcia.blogspot.com/2008/02/microsupervisin-micromanagement.html"&gt;diversas&lt;/a&gt; &lt;a href="http://www.mindtools.com/pages/article/newTMM_90.htm"&gt;opiniones&lt;/a&gt; y &lt;a href="http://www.businessknowhow.com/growth/micromanage.htm"&gt;descripciones&lt;/a&gt;. En general se puede definir como &lt;span style="font-style: italic;"&gt;gestionar intentando controlar todos los detalles, hasta el más pequeño, sin capacidad de delegación o de confianza.&lt;/span&gt;&lt;br /&gt;Tengo que admitir que me siento bastante representado en unos cuantos puntos (la Wikipedia lo asocia a desórdenes obsesivos compulsivos, no sé si diría que tanto, pero casi), así que debo reconocer mi errores al respecto (alguno ciertamente grave). En mi defensa, diré que mi intención siempre fue intentar ayudar, pero está claro que no siempre fue de forma correcta.&lt;br /&gt;Prometo esforzarme en mejorar :).&lt;br /&gt;Una vez hecho este ejercicio de autocrítica...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;¿Dónde está la barrera que separa el &lt;span style="font-style: italic;"&gt;micromanagement&lt;/span&gt; del &lt;span style="font-style: italic;"&gt;management&lt;/span&gt; y del &lt;span style="font-style: italic;"&gt;mentoring&lt;/span&gt;?&lt;/span&gt; Parece claro que los tres son prácticas relacionadas. Diría incluso que el micromanagement es la perversión de la unión de los otros dos, es llevarlos al extremo. Pero ¿dónde comienza uno y empieza el otro? Creo que &lt;span style="font-weight: bold;"&gt;es algo subjetivo, que depende de los implicados&lt;/span&gt;. Lo que a una persona le puede parecer una ayuda, una sugerencia, a otro le puede parecer un &lt;span style="font-style: italic;"&gt;entrometimiento&lt;/span&gt;. Seguramente llegar al punto de la confrontación es un síntoma, pero hay otros, como la falta de percepción de confianza, que no son tan fáciles de ver.&lt;br /&gt;&lt;br /&gt;Sin embargo, &lt;span style="font-style: italic;"&gt;¿no son herramientas como Checkstyle una forma de micromanagement? ¿No lo es el Daily Scrum?&lt;/span&gt; Yo los veo como herramientas para mejorar la calidad del producto y uno mismo, pero esa es mi percepción...&lt;br /&gt;&lt;br /&gt;¿Qué opináis? ¿&lt;span style="font-style: italic;"&gt;Microge&lt;/span&gt;stionais? ¿Lo habéis sufrido alguna vez? ¿Creéis que con ciertas personas o en ciertos momentos puede ser necesario adoptar posturas así? ¿Cómo lo evitaríais?&lt;br /&gt;&lt;br /&gt;Supongo que, como siempre, &lt;a href="http://es.wikipedia.org/wiki/Proverbios_latinos"&gt;&lt;span style="font-style: italic;"&gt;in medio stat virtus&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;P.D.: a los compañeros que leáis esto, no dudéis en atarme en corto en este aspecto ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6276531109571058679?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6276531109571058679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6276531109571058679'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/micromanagement.html' title='Micromanagement'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8636975084594608229</id><published>2009-01-25T20:11:00.002Z</published><updated>2009-01-25T20:29:54.485Z</updated><title type='text'>Trazabilidad</title><content type='html'>&lt;span class="dropcaps"&gt;P&lt;/span&gt;odríamos explicar la &lt;span style="font-weight: bold;"&gt;trazabilidad&lt;/span&gt; (bidireccional) en el contexto del desarrollo de software como "&lt;span style="font-style: italic;"&gt;dado un requisito llegar a la línea de código que lo implementa, y al contrario, dada una línea, saber con qué requisitos corresponde&lt;/span&gt;"(a grandes rasgos, no cortapegéis esto para nada importante ;) ).&lt;br /&gt;Esto tiene muchos matices y complicaciones, tanto teóricas como prácticas. ¿Realmente es importante? ¿Necesitamos bidireccionalidad? La trazabilidad es claramente una función no biyectiva: una misma línea probablemente corresponde con varios requisitos, y un requisito corresponde con muchos fragmentos de código dispersos.&lt;br /&gt;Hasta hace poco siempre había visto esto como algo imposible de conseguir -a un coste razonable-. Los requisitos se registraban en un procesador de textos, las tareas en un diagrama de Gantt, y el código en un repositorio, todo desconectado. Los intentos que ví para solucionar esto eran &lt;span style="font-style: italic;"&gt;añadir&lt;/span&gt; funcionalidad a estas herramientas para lograr lo que se necesitaba. Por ejemplo, hay (caros) plugins para Word que añaden "orientación a requisitos", permitiendo, por ejemplo, versionarlos. En las tareas del Project habría que meter los códigos de los requisitos. En los commits de código, los códigos de las tareas... Trabajo, trabajo, trabajo. Al final, se abandonaba.&lt;br /&gt;El problema era de planteamiento. Es inutil &lt;span style="font-style: italic;"&gt;forzar&lt;/span&gt; el uso de herramientas para un fin ajeno a los objetivos del implicado: al programador no le da ningún beneficio el esfuerzo extra de añadir el código de la tarea. Al analista, el uso de herramientas más complejas que el word le supone también más trabajo. El gestor del proyecto probablemente no tiene ni tiempo ni ganas de actualizar o comprobar el diagrama de gantt...&lt;br /&gt;La solución ha venido de forma conjunta a la adopción de técnicas ágiles y el cambio de herramientas &lt;span style="font-style: italic;"&gt;integradas&lt;/span&gt;. Las tareas se añaden en el gestor de incidencias (Trac en nuestro caso). Esto, de paso, soluciona el problema del versionado. Además, al ser información estructurada, al estar en una base de datos, se pueden generar informes y vistas en función de las necesidades. Al programador se le da el Eclipse con Mylyn, que le da valor añadido. Indicar la tarea en la que está trabajando no sólo no es trabajo (hacer un click en ella), sino que le aporta valor añadido, ya que el entorno recuerda el contexto (la perspectiva, las vistas, los ficheros abiertos...), haciéndole más fácil alternar entre tareas. Al final, en el gestor tenemos los requisitos (con su histórico) y podemos ver el código relacionado.&lt;br /&gt;&lt;br /&gt;¿Moraleja? Si tienes que &lt;span style="font-style: italic;"&gt;forzar&lt;/span&gt; a tu equipo a algo, la culpa no es del que no te hace caso, sino tuya. Las herramientas adecuadas para las tareas adecuadas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8636975084594608229?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8636975084594608229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8636975084594608229'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/trazabilidad.html' title='Trazabilidad'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6268009342070729506</id><published>2009-01-24T11:55:00.003Z</published><updated>2009-01-24T12:03:43.832Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='integración contínua'/><category scheme='http://www.blogger.com/atom/ns#' term='calidad'/><title type='text'>Calidad de Código</title><content type='html'>&lt;span class="dropcaps"&gt;P&lt;/span&gt;ractiques Integración Contínua o no, creo que tus scripts de compilación deberían ejecutar también unas cuantas herramientas de calidad de código. En mi opinión este tipo de herramientas es útil tanto para controlar (y mejorar) la calidad del código en sí como para formar al equipo en una &lt;span style="font-weight: bold;"&gt;mentalidad de mejora contínua&lt;/span&gt;.&lt;br /&gt;Yo acabo de integrar las siguientes (y la lista probablemente siga aumentando):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://findbugs.sourceforge.net/"&gt;FindBugs&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://checkstyle.sourceforge.net/"&gt;CheckStyle&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://pmd.sourceforge.net/cpd.html"&gt;CPD&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://emma.sourceforge.net/"&gt;Emma&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kclee.de/clemens/java/javancss/"&gt;JavaNCSS&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://clarkware.com/software/JDepend.html"&gt;JDepend&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;A esto hay que añadir que Hudson integra también el seguimiento de las tareas abiertas (TODOSs, FIXMEs, etc) que también es fundamental.&lt;br /&gt;&lt;br /&gt;¿Qué otras herramientas utilizáis?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6268009342070729506?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6268009342070729506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6268009342070729506'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/calidad-de-cdigo.html' title='Calidad de Código'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8859878165231246717</id><published>2009-01-20T21:56:00.002Z</published><updated>2009-01-20T22:22:58.037Z</updated><title type='text'>Informática Corporativa</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;n muchas organizaciones, y muy notablemente en la Administración, se viene creando un departamento (o &lt;span style="font-style: italic;"&gt;movimiento&lt;/span&gt;, o &lt;span style="font-style: italic;"&gt;tendencia&lt;/span&gt;, o &lt;span style="font-style: italic;"&gt;normativa&lt;/span&gt;...) de &lt;span style="font-weight: bold;"&gt;"Informática Corporativa"&lt;/span&gt;. Procede de que la organización crece &lt;span style="font-style: italic;"&gt;horizontalmente&lt;/span&gt; y &lt;span style="font-weight: bold;"&gt;la informática&lt;/span&gt;, que es transversal (ya que afecta y se desarrolla en todos los departamentos), &lt;span style="font-weight: bold;"&gt;se vuelve heterogénea&lt;/span&gt; en la organización. Esta heterogeneidad es vista como algo negativo, ya que &lt;span style="font-weight: bold;"&gt;en apariencia aumenta los costes&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El &lt;span style="font-weight: bold;"&gt;personal es menos &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;flexible&lt;/span&gt;, ya que un especialista en la tecnología de un departamento puede no serlo para otro.&lt;/li&gt;&lt;li&gt;Los &lt;span style="font-weight: bold;"&gt;recursos hardware son menos versátiles&lt;/span&gt;, ya que las aplicaciones desarrolladas en un departamento no son desplegables en otro.&lt;/li&gt;&lt;/ul&gt;Para dar forma a esta &lt;span style="font-style: italic;"&gt;informática corporativa&lt;/span&gt; se establecen unos &lt;span style="font-weight: bold;"&gt;procedimientos&lt;/span&gt; (casi siempre a medida, &lt;span style="font-weight: bold;"&gt;síndrome NIH&lt;/span&gt;) que dan lugar a una &lt;span style="font-weight: bold;"&gt;arquitectura común&lt;/span&gt; para los desarrollos.&lt;br /&gt;Esto, visto desde el punto de vista funcional, desde la organización se pretende interpretar como algo fantástico: durante uno o dos (o más) años estudiamos las tecnologías disponibles, para seleccionar la &lt;span style="font-style: italic;"&gt;más mejor&lt;/span&gt;, especializarnos en ella, y utilizarla para todo.&lt;br /&gt;En la práctica, lo que sucede es que las organizaciones tardan dos años en seleccionar una &lt;span style="font-weight: bold;"&gt;tecnología que ya está obsoleta para cuando se implanta&lt;/span&gt; por primera vez, y se pelea contra ella durante años. Los errores cometidos durante el estudio (todos nos equivocamos) en vez de solventarse se &lt;span style="font-style: italic;"&gt;parchean&lt;/span&gt;, para mantenerse de forma supuestamente ortodoxa en la normativa. El personal de &lt;span style="font-style: italic;"&gt;toda&lt;/span&gt; la organización se especializa (en el mejor de los casos) en herramientas que carecen de interés en muy poco tiempo, y &lt;span style="font-weight: bold;"&gt;se estancan&lt;/span&gt; en ellas. Por tanto, todo intento de &lt;span style="font-style: italic;"&gt;cambio&lt;/span&gt; se percibe como una amenaza, una intromisión en su trabajo. Además, como la arquitectura se convierte en &lt;span style="font-style: italic;"&gt;normativa&lt;/span&gt;, se prohíbe la instalación en la red interna de todo aquello que se salga de ella.&lt;br /&gt;La informática cambia con mucha frecuencia. Y, aunque no cambiase, &lt;span style="font-weight: bold;"&gt;no hay balas de plata&lt;/span&gt;. Intentar hacer norma de una tecnología es una locura: no hay nada que sirva para todo (ni en metodologías ni en herramientas) y lo &lt;span style="font-style: italic;"&gt;menos malo para todo&lt;/span&gt; lo es hoy pero no mañana.&lt;br /&gt;&lt;br /&gt;No me gusta señalar problemas sin proponer alternativas. ¿Solución? &lt;span style="font-weight: bold;"&gt;Normaliza el cambio&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Establece una política de &lt;span style="font-weight: bold;"&gt;formación&lt;/span&gt; que permita que la gente no sólo se  &lt;span style="font-style: italic;"&gt;recicle &lt;/span&gt;periódicamente, sino que también &lt;span style="font-style: italic;"&gt;evolucione&lt;/span&gt; constantemente.&lt;/li&gt;&lt;li&gt;Haz una &lt;span style="font-weight: bold;"&gt;revisión tras cada proyecto&lt;/span&gt; para analizar los puntos positivos y negativos.&lt;/li&gt;&lt;li&gt;Haz un &lt;span style="font-weight: bold;"&gt;estudio de viabilidad real&lt;/span&gt;, en el que &lt;span style="font-style: italic;"&gt;de verdad&lt;/span&gt; se estudien alternativas de implementación.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;El cambio es bueno&lt;/span&gt;. ¡Esto no significa que cada mes tengas que hacer las cosas de forma diferente! Si tienes gente formada, y haces un estudio de viabilidad real, el cambio surgirá de forma progresiva y natural: se irán incorporando cosas nuevas, se sustituirán componentes mejorables... Incluso los "cambios radicales" (piensa en un primer proyecto con Python en vez de J2EE) parecerán normales, ya que, en el fondo, &lt;span style="font-style: italic;"&gt;los conceptos son los mismos.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PD: mañana tengo que trabajar en mostrar que &lt;span style="font-style: italic;"&gt;un &lt;/span&gt;&lt;/span&gt;cambio &lt;span style="font-style: italic;"&gt;es positivo, ¡deseadme suerte! ;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8859878165231246717?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8859878165231246717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8859878165231246717'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/informtica-corporativa.html' title='Informática Corporativa'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5248505434750506973</id><published>2009-01-18T11:49:00.003Z</published><updated>2009-01-18T11:59:47.280Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='enlaces'/><title type='text'>X enlaces de esta semana</title><content type='html'>&lt;span class="dropcaps"&gt;U&lt;/span&gt;nas cuantas cosas que me han llamado la atención esta semana:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.saasmania.com/2009/01/16/la-lopd-y-el-cloud-computing/"&gt;&lt;span style="font-weight: bold;"&gt;La LOPD y el Cloud Computing&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Interesante artículo sobre las implicaciones legales de externalizar los datos.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.noop.nl/2009/01/100-interview-questions-for-software-developers.html"&gt;100 Interview Questions for Software Developers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Preguntas que debes hacer (o para las que te debes preparar) en una entrevista de trabajo.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://natishalom.typepad.com/nati_shaloms_blog/2009/01/getting-ready-for-the-cloud.html"&gt;Getting ready for the cloud&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Desplegar una aplicación Java existente en Amazon EC2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5248505434750506973?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5248505434750506973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5248505434750506973'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/x-enlaces-de-esta-semana.html' title='X enlaces de esta semana'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-503188335839628638</id><published>2009-01-13T16:04:00.003Z</published><updated>2009-01-13T16:39:55.065Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><category scheme='http://www.blogger.com/atom/ns#' term='excepciones'/><title type='text'>Buenas prácticas: Tratamiento de Excepciones</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;ntrada rápida que resume algo que ya he escrito en otros sitios, y que me gustaría tener público (¡y recibir comentarios!).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Criterios a tener en cuenta al tratar excepciones en Java&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Es mejor que la aplicación falle a no saber que ha fallado (y &lt;span style="font-style: italic;"&gt;qué&lt;/span&gt; ha fallado)&lt;/span&gt;. Corolario: si no vas a tratar una excepción correctamente, mejor no hagas nada y que la aplicación falle.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Siempre que se produzca un error en la aplicación tiene que haber &lt;span style="font-weight: bold;"&gt;información sobre el error en pantalla&lt;/span&gt;, al menos indicando que se ha producido un error. Corolario: no te limites a trazar el error en el log, ¡no siempre habrá alguien mirando!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No traces mediante System.out o System.err, &lt;span style="font-weight: bold;"&gt;utiliza un sistema de logging&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Si sólo vas a relanzar la excepción, no la relances, haz que el método lance ese tipo de excepción.&lt;/li&gt;&lt;li&gt;No loguees y relances constantemente, no es necesario. &lt;span style="font-weight: bold;"&gt;Los únicos puntos que no deben lanzar excepciones son los métodos invocados directamente por la aplicación&lt;/span&gt;, para que no le llegue al navegador la traza del error. Y si utilizas un framework que gestione bien las excepciones (como Seam), incluso puedes saltarte esta norma.&lt;/li&gt;&lt;li&gt;Cuando escribas en el log, escribe información significativa, como los parámetros recibidos por el método. Lo trivial (el nombre del método, por ejemplo) ya se verá en la traza.&lt;/li&gt;&lt;li&gt;Al trazar, no concatenes el mensaje de la excepción, vuelca la excepción en sí (toda la traza).&lt;/li&gt;&lt;li&gt;Un método no debería declararse como &lt;span style="font-style: italic;"&gt;throws Exception&lt;/span&gt;, ya que enmascara todas las excepciones, sin permitir gestionar el error concreto. No pasa nada, por ejemplo, por que lance varias: &lt;span style="font-style: italic;"&gt;throws IOException, MiOtraException&lt;/span&gt;. De esta forma, el que la invoque sabrá a qué tipos de error se debe enfrentar.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Contraejemplos&lt;/span&gt; (ejemplos de cómo &lt;span style="font-style: italic;"&gt;no&lt;/span&gt; se deben hacer las cosas):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;} catch(Exception e) { };&lt;/span&gt; : se ocultan los errores, es imposible saber qué ocurre.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;} catch(Exception e) { System.err.println(e) };&lt;/span&gt; : estamos trazando en err, ni se ve nada en pantalla ni en el log, así que en explotación no sabremos qué ocurre.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;} catch(Exception e) { log.debug("Ha ocurrido algo malo: "+e); };&lt;/span&gt; : el nivel de log es incorrecto (debería ser &lt;span style="font-style: italic;"&gt;error&lt;/span&gt;), no se dan datos sobre el error, estamos concatenando la excepción, no estamos relanzando...&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;} catch(Exception e) { log.error(e) };&lt;/span&gt; : no se dan datos sobre el error, y no estamos lanzando nada, así que en pantalla no se verán los errores.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Ejemplos válidos en otras circunstancias&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;} catch(Exception e) { log.error("Identificador: "+id, e); throw new MiExcepcion(e) };&lt;/span&gt; : trazamos el error (la excepción) e indicamos un parámetro que puede estar provocando el error. Además, lanzamos una excepción (que contiene la provocada, para no perder traza) para que el nivel superior pueda seguir tratando el error. Esto sería incorrecto, de todas formas, si en nuestro sistema esto vuelca la traza en el interfaz de usuario. Aparte, probablemente incluso sea innecesario hacer esto (ver último ejemplo correcto).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;} catch(Exception e) { log.error("Identificador: "+id, e); anhadirMensajeDeErrorAlUsuario(e) };&lt;/span&gt; : trazamos el error (la excepción) e indicamos un parámetro que puede estar provocando el error. Además, mostramos un mensaje de error en pantalla. Esto sería incorrecto, de todas formas, si este método es invocado por un nivel que necesita procesar el error específicamente.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;...) throws IOException&lt;/span&gt; : si el método no va a hacer nada interesante con la excepción, ¿para qué capturarla?&lt;/li&gt;&lt;/ul&gt;Actualización 0901131738: este es un tema del que se pueden encontrar infinidad de fuentes, como &lt;a href="http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html"&gt;en java.net, con más detalle, en inglés&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-503188335839628638?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/503188335839628638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/503188335839628638'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/buenas-prcticas-tratamiento-de.html' title='Buenas prácticas: Tratamiento de Excepciones'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8538427030384112520</id><published>2009-01-11T09:40:00.002Z</published><updated>2009-01-11T10:00:24.126Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='enlaces'/><title type='text'>Dos enlaces de esta semana</title><content type='html'>&lt;span class="dropcaps"&gt;U&lt;/span&gt;no de &lt;i&gt;morralla comercial&lt;/i&gt; y otro de programación:&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.nubeblog.com/2009/01/08/soa-ha-muerto-larga-vida-a-los-servicios/"&gt;SOA ha muerto. Larga vida a los servicios&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¿Qué significa "SOA ha muerto"? ¡Nada! Lo único que consiguen grupos como Burton con declaraciones como estas es cambiar las conversaciones de &lt;span style="font-style: italic;"&gt;enteradillos&lt;/span&gt; que los directivos que no saben de qué están hablando mantienen entre reuniones. Igual, siendo malpensado, consiguen también redirigir inversiones: ya han conseguido &lt;span style="font-style: italic;"&gt;vender&lt;/span&gt; su consultoría acerca de SOA, ahora tienen que conseguir vender otra, y ya sabemos que este es el año del Cloud Computing...&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://willcode4beer.com/opinion.jsp?set=fixing_nnpp"&gt;Lead developer, Are Yoy Mentoring?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un buen artículo sobre cómo &lt;span style="font-style: italic;"&gt;reintegrar&lt;/span&gt; a un programador &lt;span style="font-style: italic;"&gt;negativo&lt;/span&gt;. En vez de quejarse, tener iniciativa, preguntarle, utilizar herramientas de análisis estático...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8538427030384112520?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8538427030384112520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8538427030384112520'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/dos-enlaces-de-esta-semana.html' title='Dos enlaces de esta semana'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3095746118883858311</id><published>2009-01-08T22:19:00.002Z</published><updated>2009-01-08T22:21:35.826Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><title type='text'>Introducción a Seam</title><content type='html'>&lt;span class="dropcaps"&gt;C&lt;/span&gt;omo apoyo para una próxima sesión de formación he preparado una modesta presentación/resumen de lo que es Seam, muy por encima. Las principales fuentes son el manual de referencia y "Seam in Action", así que si quieres conocerlo en profundidad, nada como las fuentes originales, mucho más detalladas y sin mis gazapos (ni tonterías de mi cosecha ni relación con trabajo previo mío).&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=dg2n4368_21hmxkftgj" width="410" frameborder="0" height="342"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3095746118883858311?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3095746118883858311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3095746118883858311'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/introduccin-seam.html' title='Introducción a Seam'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8321109273573487691</id><published>2009-01-04T17:40:00.016Z</published><updated>2009-01-06T13:50:29.300Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='libros'/><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><category scheme='http://www.blogger.com/atom/ns#' term='peopleware'/><title type='text'>Reseña: Peopleware</title><content type='html'>&lt;span class="dropcaps"&gt;P&lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;eopleware&lt;/span&gt; es &lt;span style="font-size:100%;"&gt;otro&lt;/span&gt; de esos clásicos que todos los informáticos deberíamos leer. Es un libro atípico, porque habla de la Ingeniería del Software en términos de personas, sentimientos, emociones...&lt;br /&gt;&lt;br /&gt;A continuación, la tabla de contenidos con el argumento de cada capítulo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Contenido del libro&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Parte I: La gestión del recurso humano&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;El software lo desarrollan personas, no máquinas, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;adecuemonos&lt;/span&gt; a eso.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 1: En algún lugar, en este momento, un proyecto va a fracasar&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Los proyectos software fracasan, principalmente, por cuestiones sociológicas, no técnicas.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 2: Haz una hamburguesa de queso, vende una hamburguesa de queso&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;El desarrollo de software es inherentemente diferente de la producción (industrial).&lt;/span&gt; Es un error aplicar técnicas de producción (pensar en las personas como máquinas) al desarrollo.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 3: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Vienna&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;waits&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;for&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;you&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;(Dejo el nombre del capítulo en inglés por ser un extracto de una canción de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Billy&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Joel&lt;/span&gt;, '&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Stranger&lt;/span&gt;'.)&lt;/span&gt;&lt;br /&gt;Más horas de trabajo no implica ni más ni mejor trabajo, para las personas el trabajo no es lo más importante. La adicción al trabajo &lt;span style="font-style: italic;"&gt;sí&lt;/span&gt; es un problema.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 4: Calidad - si el tiempo lo permite&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Comprometer la calidad no es una buena estrategia: mina la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;auto&lt;br /&gt;estima&lt;/span&gt; de la gente.&lt;/span&gt; De hecho, a la larga una mayor calidad redunda también en una mayor productividad.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 5: Revisión a la Ley de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Párkinson&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;No es cierto que el trabajo de desarrollo se expanda hasta abarcar todo el tiempo disponible para él.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 6: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Laetril&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;No existen los remedios mágicos ni las soluciones que multiplican la productividad.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Parte &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;II&lt;/span&gt;: El entorno de la oficina&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Factores externos a las personas que afectan a la productividad.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 7: La política de mobiliario&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Las políticas de mobiliario no parecen estar pensadas en pro de las personas (y, por tanto, tampoco de su productividad).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 8: "Es imposible hacer nada aquí de 9 a 5"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Factores como el ruido o el espacio están más correlacionados con la productividad que la experiencia o el lenguaje de programación.&lt;br /&gt;&lt;br /&gt;El capítulo 8 expone datos muy interesantes sobre un estudio que los autores han realizado durante años. Dan un ejercicio a dos candidatos de cientos de empresas, y relacionan los resultados con factores ambientales.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 9: Ahorrar dinero con el espacio&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;La cantidad y calidad del espacio para el trabajador es fundamental.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Interludio&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;: Medición de la productividad y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;OVNIs&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Medir la productividad es difícil, pero puedes medir &lt;span style="font-style: italic;"&gt;algo&lt;/span&gt; que al menos te permita saber tu posición respecto a la competencia.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 10: Tiempo &lt;span style="font-style: italic;"&gt;mental&lt;/span&gt; contra tiempo &lt;span style="font-style: italic;"&gt;de cuerpo presente&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Para que el tiempo se aproveche al máximo el cerebro debe entrar en un estado llamado "de flujo", al que cuesta llegar pero del que es muy fácil salir por culpa de interrupciones.&lt;/span&gt; Para maximizar la productividad hay que maximizar la proporción de "tiempo de flujo" respecto al "tiempo de cuerpo presente".&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 11: El teléfono&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Un mundo sin teléfono sería algo fantástico, pero como no parece posible, hay que conseguir minimizar el impacto de las llamadas: silenciar el timbre (o al menos bajar el volumen), utilizar sistemas alternativos, etc.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 12: El retorno de la puerta&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;El entorno de oficina tradicional, de dos, tres o cuatro personas, con paredes y puertas, se ha perdido, equivocadamente, en favor de entornos diáfanos, con mucho ruido y sin &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;privacidad&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En este capítulo se expone un interesante estudio sobre la música y el trabajo. Si bien la parte lógica/matemática del trabajo no se ve afectada, la parte creativa se ve anulada si estas escuchando música.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 13: Realizando pasos de paraguas&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;Nota: para los curiosos, podéis consultar el &lt;a href="http://forum.wordreference.com/showthread.php?t=238064"&gt;significado de 'paso de paraguas' ('&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;umbrella&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;step&lt;/span&gt;')&lt;/a&gt;, que no tiene traducción directa.&lt;/span&gt;&lt;br /&gt;En este capítulo se exponen varios conceptos de arquitectura y decoración de interiores para hacer un mejor entorno de trabajo: situación de las ventanas, de los muros, de los espacios compartidos... El resumen más correcto, aunque impreciso, sería decir que "hay que construir como se lleva haciendo desde hace miles de años".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Parte &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;III&lt;/span&gt;: La gente correcta&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Cómo (y por qué) conseguir a los mejores, mantenerlos, y aprovecharlos al máximo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 14: El factor &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Hornblower&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;Nota: '&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Hornblower&lt;/span&gt;' aquí se refiere a &lt;a href="http://en.wikipedia.org/wiki/Horatio_Hornblower"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Horatio&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Hornblower&lt;/span&gt;&lt;/a&gt;, protagonista de una serie de novelas de C.S.Forrester sobre las guerras napoleónicas.&lt;/span&gt;&lt;br /&gt;La gente es diferente, y eso es bueno. No hay que potenciar la similitud y la &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;entropía&lt;/span&gt;, sino todo lo contrario. A menor &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;entropía&lt;/span&gt; (entendida como igualdad), más trabajo hecho.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 15: Contratar un malabarista&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;En las entrevistas de trabajo no basta con preguntar a los candidatos, hay que ver sus habilidades en la práctica.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 16: Feliz de estar aquí&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;El coste de la rotación es muy elevado (más de 5 meses de trabajo), hay que conseguir &lt;strike&gt;mantener a la gente&lt;/strike&gt; que la gente quiera quedarse.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 17: Sistema &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;autoreparable&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Cuando se automatiza un sistema humano, por ejemplo al aplicar una Metodología, se pierde gran parte del valor humano.&lt;/span&gt; Concretamente, cuando el valor de una Metodología es hacer algo uniforme, mejor sería conseguirlo mediante formación, herramientas, y revisión por parejas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Parte &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;IV&lt;/span&gt;: Crecer equipos productivos&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;Nota: he traducido 'growing' como 'crecer', aunque&lt;/span&gt;  &lt;span style="font-style: italic;"&gt;no suene demasiado bien, para mantener la metáfora agrícola.&lt;/span&gt;&lt;br /&gt;Ya tienes la gente, ahora tienes que hacerla trabajar en equipo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 18: El todo es más que la suma de las partes&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Tienes que conseguir hacer que el equipo esté totalmente cohesionado en pos de un fin común.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 19: El &lt;span style="font-style: italic;"&gt;Black Team&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;El &lt;a href="http://www.t3y.com/tangledwebs/07/tw0706.html"&gt;&lt;span style="font-style: italic;"&gt;Black Team&lt;/span&gt;&lt;/a&gt; es&lt;/span&gt; el paradigma de equipo cohesionado. Fue un equipo de testers de IBM, temido por los desarrolladores por su eficacia, aún cuando todo el equipo inicial había cambiado.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 20: "Equipocidio"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;No es fácil determinar qué debes hacer para conseguir un gran equipo, pero sí hay varias cosas que &lt;span style="font-style: italic;"&gt;no&lt;/span&gt; debes hacer: gestión defensiva, burocracia, separación física, fragmentar el tiempo de la gente, reducir la calidad del producto, establecer hitos imposibles y control de camarilla.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 21: Cena de espagueti&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;El mejor jefe es aquel que consigue gestionar sin que parezca que hace nada.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 22: Open Kimono&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;La mejor gestión es aquella en la que se confía plenamente en los miembros del equipo y en la que la autoridad se ejerce de forma natural, no mediante imposiciones.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 23: Química para la formación de equipos&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Para que una organización siga una estrategia correcta de formación de equipos, debe cuidar lo siguiente: culto a la calidad; proporcionar realimentación positiva; sentimiento de élite; alentar la heterogeneidad; preservar los equipos exitosos; proporcionar dirección estratégica, no táctica.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Parte &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;V&lt;/span&gt;: Debería ser divertido trabajar aquí&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;El trabajo no debería ser algo aburrido, una carga, algo negativo... Debería ser divertido, interesante, enriquecedor...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 24: Caos y orden&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;La tendencia natural en el trabajo es ir hacia el orden, pero introducir deliberadamente elementos novedosos, aumentando el caos, disminuyendo así la entropía, es positivo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 25: Electrones libres&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Hay gente que no encaja en puestos &lt;/span&gt;específicos, pero que aportan gran valor a la empresa. No siempre es necesario regirse por estrictas jerarquías.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Capítulo 26: Holgar Dansk&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Introducir los cambios parte de la iniciativa individual.&lt;/span&gt; Si algo es sensato, hazlo, que será más fácil de lo esperado, encontrarás ayuda.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Valoración personal&lt;/span&gt;&lt;br /&gt;Peopleware es un libro excepcional. No se limita a obviedades, y no se limita a exponer problemas. Entra en muchos temas en profundidad, incluso aportando datos concretos, y aporta soluciones (por ejemplo, enumerando alternativas al uso de Metodologías). Es un libro imprescindible, que nunca envejecerá, y útil no sólo para &lt;span style="font-style: italic;"&gt;jefes&lt;/span&gt;. Provocador y agitador a todos los niveles. Hay muchísimas cosas aplicables constantemente. Yo ya me estoy haciendo una lista...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8321109273573487691?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8321109273573487691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8321109273573487691'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/resea-peopleware.html' title='Reseña: Peopleware'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6302838878965757544</id><published>2009-01-03T08:28:00.004Z</published><updated>2009-01-03T08:58:54.224Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='calidad'/><category scheme='http://www.blogger.com/atom/ns#' term='formación'/><category scheme='http://www.blogger.com/atom/ns#' term='wtf'/><title type='text'>WTF como ejercicios en entrevistas y en formación</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt; estas alturas del año ya habréis visto el &lt;a href="http://www.pcworld.com/article/156240/.html?tk=rss_main"&gt;código responsable del cuelgue masivo de los Zune&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:courier new;"&gt;    while (days &gt; 365) {&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;     if (IsLeapYear(year)) {&lt;br /&gt;&lt;/span&gt;        &lt;span style="font-family:courier new;"&gt;if (days &gt; 366) {&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;               &lt;br /&gt;         days -= 366;&lt;/span&gt;&lt;br /&gt;         &lt;span style="font-family:courier new;"&gt;year += 1;&lt;/span&gt;&lt;br /&gt;       &lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;    &lt;/span&gt; &lt;span style="font-family:courier new;"&gt;} else {&lt;/span&gt;&lt;br /&gt;       &lt;span style="font-family:courier new;"&gt;days -= 365;&lt;/span&gt;&lt;br /&gt;       &lt;span style="font-family:courier new;"&gt;year += 1;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;  &lt;/span&gt; &lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Este código no creo que entre en la categoría de &lt;a href="http://thedailywtf.com/"&gt;WTFs&lt;/a&gt;, a todo el mundo se le puede patinar un igual. Sin embargo, me viene de perlas para uno de los trabajos que voy a tener en los próximos días: preparar ejercicios de programación para formación y contratación (¿por qué será que &lt;span style="font-style: italic;"&gt;recruiting&lt;/span&gt; me parece más preciso?). En un &lt;a href="http://iiso.blogspot.com/2008/11/mi-opinin-sobre-las-enseanzas.html"&gt;post anterior en el que hablaba de mi opinión sobre la aptitud y actitud profesional&lt;/a&gt;, &lt;a href="http://jcesarperez.blogspot.com/"&gt;Julio César Pérez&lt;/a&gt; comentaba lo siguiente&lt;br /&gt;&lt;blockquote&gt;La pregunta estrella era implementar una funcion recursiva que calculara el factorial de un numero entero en cualquier lenguaje. Sólo el 10% la hicieron bien y todos los candidatos eran como mínimo ingenieros.&lt;/blockquote&gt;Ya me habían mirado raro a veces por opinar que las entrevistas hay que orientarlas en ese sentido, pero desde que supe que &lt;a href="http://google.dirson.com/post/3593-preguntas-curiosas-entrevista-google/"&gt;Google pide programar en una pizarra&lt;/a&gt; me he sentido reafirmado: las entrevistas deben ser prácticas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Contexto&lt;/span&gt;&lt;br /&gt;Trabajo en un entorno parcialmente universitario, por lo que una de nuestras razones de ser es la ocupación de estudiantes, con las ventajas e inconvenientes que esto conlleva.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Requisitos&lt;/span&gt;&lt;br /&gt;Necesito una forma de...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;poder evaluar en una entrevista de trabajo los conocimientos (si hablamos de gente con experiencia)  o la aptitud (si hablamos de becas) de una persona.&lt;/li&gt;&lt;li&gt;facilitar la autoformación del personal, nuevo o no, que se va a incorporar a proyectos con nuevas tecnologías.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Alternativas de implementación&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Para las entrevistas, recopilar una serie de WTFs y trozos de código, tanto correctos como no, y preguntar al entrevistado por ellos.&lt;/li&gt;&lt;li&gt;Para la formación, plantear ejercicios cortos con tareas de no más de una o dos horas, en el que se busque escribir código lo más impecablemente posible. Una vez completado el ejercicio, alguien revisaría el código escrito para pulir entre los dos todo lo mejorable.&lt;/li&gt;&lt;/ul&gt;Esto último de la revisión, aunque algo exigente (ocupa a dos personas en código de prueba) me parece fundamental. En mi opinión, &lt;span style="font-weight: bold;"&gt;pensar que una persona aprende a programar símplemente programando es falso&lt;/span&gt;. Conozco gente que programa mal y lo seguirá haciendo toda su vida, porque ni lee código de otros, ni libros, y nadie le corrige sus errores. Especialmente en entornos de formación, la figura del revisor me parece fundamental.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Calidad de código en el motor de integración contínua como formación: tanto instalar plugins de Eclipse como generar informes de calidad de código pueden ser positivos para aprender. Si se presta atención a los warnings de FindBugs, PMD o Metrics se puede aprender mucho (¡a la vez que mejoras la calidad!).&lt;/li&gt;&lt;/ul&gt;PD: aquí, al hablar de "código WTF" me refiero a código con una elevada medida de "WTF" como en la siguiente viñeta:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/smitty/2245445147/"&gt;&lt;img style="cursor: pointer; width: 500px; height: 453px;" src="http://farm3.static.flickr.com/2203/2245445147_ff54c5997d.jpg" alt="" 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/4170768470549625640-6302838878965757544?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6302838878965757544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6302838878965757544'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2009/01/wtf-como-ejercicios-en-entrevistas-y-en.html' title='WTF como ejercicios en entrevistas y en formación'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2203/2245445147_ff54c5997d_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1302734480422060303</id><published>2008-12-13T17:40:00.004Z</published><updated>2008-12-13T18:16:40.299Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wcag'/><category scheme='http://www.blogger.com/atom/ns#' term='accesibilidad'/><category scheme='http://www.blogger.com/atom/ns#' term='wcag wg'/><category scheme='http://www.blogger.com/atom/ns#' term='wcag 2.0'/><title type='text'>WCAG 2.0 (finalmente)</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;n la página del &lt;a href="http://www.w3.org/WAI/GL/"&gt;WCAG WG&lt;/a&gt; tenemos finalmente &lt;a href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/"&gt;&lt;span style="font-weight: bold;"&gt;WCAG 2.0&lt;/span&gt;, la nueva versión de las recomendaciones de accesibilidad&lt;/a&gt;. Para facilitarnos la vida tenemos una &lt;a href="http://www.w3.org/WAI/WCAG20/quickref/20081211/"&gt;referencia rápida personalizable&lt;/a&gt;, una &lt;a href="http://www.w3.org/TR/2008/NOTE-UNDERSTANDING-WCAG20-20081211/"&gt;&lt;span style="font-style: italic;"&gt;referencia comprensible&lt;/span&gt;&lt;/a&gt; (ya se podía hacer este tipo de cosas siempre que se hacen referencias ilegibles) y una &lt;a href="http://www.w3.org/TR/2008/NOTE-WCAG20-TECHS-20081211/"&gt;guía de técnicas&lt;/a&gt;. ¡Incluso una lista de &lt;a href="http://www.w3.org/TR/2008/NOTE-WCAG20-TECHS-20081211/failures.html"&gt;fallos comunes de accesibilidad&lt;/a&gt;!&lt;br /&gt;Las recomendaciones se agrupan en cuatro &lt;span style="font-weight: bold;"&gt;principios&lt;/span&gt;. Una web debe ser correctamente...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/#perceivable"&gt;percibible&lt;/a&gt;: la información y los componentes del interfaz deben presentarse de forma que sean percibibles por los usuarios: alternativas textuales, contraste adecuado, presentable con estructura más simple...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/#operable"&gt;operable&lt;/a&gt;: accesible a través del teclado, facilitar la localización y la navegación...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/#understandable"&gt;comprensible&lt;/a&gt;: texto legible y comprensible, navegación consistente, tolerante a errores de usuario...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/#robust"&gt;robusta&lt;/a&gt;: maximizar compatibilidad con agentes de usuario presentes y futuros...&lt;/li&gt;&lt;/ul&gt;Se mantienen los &lt;span style="font-weight: bold;"&gt;tres niveles A, AA y AAA&lt;/span&gt; que indica los "criterios de éxito" que cumple la página o la alternativa propuesta.&lt;br /&gt;&lt;br /&gt;Se dice explícitamente que no pasa nada por usar tecnologías no accesibles, siempre que no afecten a los criterios de accesibilidad.&lt;br /&gt;&lt;br /&gt;Sí, &lt;span style="font-weight: bold;"&gt;se puede usar Javascript&lt;/span&gt;. Usarlo no hace que tu página sea usable ni deje de serlo. Desaparece, por tanto, la mayor limitación técnica que existía con la WCAG 1.0.&lt;br /&gt;&lt;br /&gt;Ni siquiera es necesario que la página esté correctamente formada. &lt;a href="http://www.w3.org/TR/2008/NOTE-WCAG20-TECHS-20081211/G192"&gt;Adecuarse totalmente a especificaciones&lt;/a&gt; es una técnica &lt;span style="font-style: italic;"&gt;suficiente&lt;/span&gt; para pasar directamente varios criterios, pero no &lt;span style="font-style: italic;"&gt;necesaria&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;De hecho, muchas de &lt;a href="http://www.w3.org/TR/2008/NOTE-WCAG20-TECHS-20081211/"&gt;las técnicas&lt;/a&gt; estas líneas me recuerdan más a criterios de &lt;span style="font-style: italic;"&gt;usabilidad&lt;/span&gt; que a &lt;span style="font-style: italic;"&gt;accesibilidad&lt;/span&gt;, aunque siempre hemos sabido que al segundo se llega a través del primero. Por ejemplo, aquello de &lt;a href="http://www.w3.org/TR/2008/NOTE-WCAG20-TECHS-20081211/failures.html#F84"&gt;no hacer enlaces de "pulsa aquí"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Seguiremos teniendo que realizar un trabajo en formación y desarrollo para que una página sea accesible, pero será algo &lt;span style="font-style: italic;"&gt;lógico&lt;/span&gt;, centrándonos &lt;span style="font-style: italic;"&gt;de verdad&lt;/span&gt; en que la página sea accesible, no en pasar ciertos criterios porque lo ponga en una especificación.&lt;br /&gt;&lt;br /&gt;Es un paso adelante. Me queda todavía mucho trabajo para analizarlo en profundidad, pero era muy importante que apareciese una nueva versión definitiva de esta especificación, el impacto, incluso legal, de la misma es muy importante.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1302734480422060303?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1302734480422060303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1302734480422060303'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/12/wcag-20-finalmente.html' title='WCAG 2.0 (finalmente)'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6601833375422839787</id><published>2008-12-13T10:36:00.003Z</published><updated>2008-12-13T11:05:57.753Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wcag 1.0'/><category scheme='http://www.blogger.com/atom/ns#' term='accesibilidad'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='wcag wg'/><category scheme='http://www.blogger.com/atom/ns#' term='wcag 2.0'/><title type='text'>Accesibilidad y aplicaciones web</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;ubo un tiempo en que &lt;span style="font-weight: bold;"&gt;la web era "sólo" información&lt;/span&gt;: texto, imágenes (poco más contenido multimedia, el ancho de banda era lamentable) e hiperenlaces. Como cualquiera se podía poner a hacer una página y los navegadores &lt;span style="font-style: italic;"&gt;tragaban con todo&lt;/span&gt; el código era innecesariamente malo. Si a eso le sumamos la &lt;a href="http://en.wikipedia.org/wiki/Browser_wars"&gt;guerra de navegadores&lt;/a&gt;, en la que competían por ver cuál implementaba más etiquetas indeseables, no es difícil pensar la razón por la que los &lt;a style="font-weight: bold;" href="http://www.w3c.es/"&gt;estándares web&lt;/a&gt; comenzaron a cobrar importancia.&lt;br /&gt;Uno de los grupos de consolidación de estándares era el &lt;a href="http://www.w3.org/WAI/GL/"&gt;WCAG WG&lt;/a&gt;, encargado de algo tan loable como asegurarse de que aquella maraña de información cumplía unos requisitos mínimos para que la gente con discapacidad pueda disfrutar de ellos. En 1999 publican &lt;a style="font-weight: bold;" href="http://www.w3.org/TR/WCAG10/"&gt;WCAG 1.0&lt;/a&gt;, la (única hasta hace poco) &lt;span style="font-weight: bold;"&gt;guía de referencia sobre qué es una página web accesible&lt;/span&gt;.&lt;br /&gt;La web, que comenzó siendo puramente información, ha ido creciendo hasta tomar el papel de un &lt;span style="font-weight: bold;"&gt;simbionte en nuestra vida&lt;/span&gt;: la necesitamos para casi todo, y además ella se alimenta de nosotros, de nuestras aportaciones, en lo que se ha llamado Web 2.0. Se ha metido en nuestras vidas y en nuestros trabajos, en forma de &lt;span style="font-style: italic;"&gt;aplicaciones&lt;/span&gt; web. Éstas no son sólo información, &lt;span style="font-weight: bold;"&gt;son también comportamiento&lt;/span&gt;. No son sólo una evolución de la web, sino que &lt;span style="font-weight: bold;"&gt;sustituyen a las aplicaciones de escritorio&lt;/span&gt;. Una aplicación web, técnicamente, es algo mucho más complejo que una página. Para que sea verdaderamente cómoda es necesario utilizar técnicas más avanzadas, que, entre otras cosas, implican scripts.&lt;br /&gt;Eso choca con la WCAG 1.0, ya que en uno de sus puntos más restrictivos, dice que la página &lt;a style="font-weight: bold;" href="http://www.w3.org/TR/WCAG10/#gl-new-technologies"&gt;debe funcionar sin lenguajes de script&lt;/a&gt;. Eso lleva años sin ser asumible por una aplicación, especialmente desde que los usuarios exigen Ajax. El problema es que &lt;span style="font-weight: bold;"&gt;javascript ya NO es un problema &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;real&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; de accesibilidad&lt;/span&gt;. Los lectores de pantalla han mejorado notablemente, y no es necesario adherirse a una restricción tan exigente. El propio WCAG WG es consciente de ello y lleva años trabajando en la siguiente versión, que acaba de ser publicada. El 11 de diciembre de 2008 &lt;span style="font-weight: bold;"&gt;se ha publicado la primera versión pública no borrador de la guía &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.w3.org/TR/WCAG20/"&gt;WCAG 2.0&lt;/a&gt;. No sólo eso, sino que están trabajando en otra más, &lt;a href="http://www.w3.org/TR/wai-aria/"&gt;ARIA&lt;/a&gt;, que consigue que algo tan inaccesible (hasta ahora) como el framework GWT pueda serlo.&lt;br /&gt;&lt;br /&gt;Esto, que personalmente es un hito alentador (¡voy a poder hacer aplicaciones web ajax accesibles &lt;span style="font-style: italic;"&gt;de verdad&lt;/span&gt; y además &lt;span style="font-style: italic;"&gt;certificadas&lt;/span&gt;!) &lt;span style="font-weight: bold;"&gt;legalmente en España sigue siendo un problema&lt;/span&gt;. Los políticos y abogados de este país no saben aquello del &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt;, y disfrutan en su &lt;a href="http://en.wikipedia.org/wiki/Not_Invented_Here"&gt;síndrome NIH&lt;/a&gt;. &lt;a style="font-weight: bold;" href="http://www.inteco.es/Accesibilidad/Normativa_1/Descarga/DescargaUNE_139803"&gt;La norma UNE 139803:2004&lt;/a&gt;, sobre accesiblidad, en vez vez de decir algo como "la página web debe estar conforme a las especificaciones de accesibilidad del WCAG WG" &lt;span style="font-weight: bold;"&gt;es un cortapega de las normas presentes cuando fue redactada&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En mi opinión lo que debemos hacer es &lt;span style="font-weight: bold;"&gt;seguir WCAG 2.0 y/o ARIA, que son el presente y futuro de la accesibilidad web&lt;/span&gt;. Las demás consideraciones dejémoslas en manos de los abogados...&lt;br /&gt;&lt;br /&gt;En breve, implicaciones de WCAG 2.0. ¡&lt;span style="font-style: italic;"&gt;Stay tuned&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;PD: mientras escribía esto ha sido cuando he visto que &lt;a href="http://www.w3.org/WAI/GL/"&gt;WCAG 2.0 es estable&lt;/a&gt;, no os imagináis el alegrón que me he llevado. Ahora, a empollarlo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6601833375422839787?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6601833375422839787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6601833375422839787'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/12/accesibilidad-y-aplicaciones-web.html' title='Accesibilidad y aplicaciones web'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1286178601401662567</id><published>2008-12-08T17:07:00.004Z</published><updated>2008-12-08T18:35:39.254Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='metodología'/><title type='text'>Los roles en el desarrollo de software</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt; raíz de mi reciente incorporación al incipiente &lt;a href="http://www.cexc.es/"&gt;Centro Experimental del Conocimiento&lt;/a&gt; me ha venido a la mente el recurrente tema de los roles y las jerarquías en el desarrollo de software.&lt;br /&gt;&lt;br /&gt;En &lt;a href="http://www.developer.com"&gt;developer.com&lt;/a&gt; han hecho una serie de artículos sobre los &lt;a href="http://www.developer.com/mgmt/article.php/3490871"&gt;roles en el desarrollo de software&lt;/a&gt;. Una frase es especialmente reveladora sobre lo que creo que debe ser cualquier clasificación:&lt;br /&gt;&lt;span style="font-family:Verdana, Arial, Helvetica;font-size:-1;"&gt;&lt;b&gt;&lt;/b&gt;&lt;blockquote&gt;&lt;b&gt;Developer (Dev) &lt;/b&gt; - The heart and soul of the process&lt;/blockquote&gt;&lt;/span&gt;Es una serie de artículos bastante interesantes, hablando no sólo de en qué consiste cierto papel sino en qué debes hacer si aspiras a ciertos puestos.&lt;br /&gt;&lt;br /&gt;Al menos en mi alrededor a la gente que toma parte en el desarrollo de software se la clasifica en &lt;span style="font-style: italic;"&gt;programadores&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;analistas&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;diseñadores&lt;/span&gt; y &lt;span style="font-style: italic;"&gt;jefes de proyecto&lt;/span&gt; (obviando las divisiones transversales de &lt;span style="font-style: italic;"&gt;becario&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;junior&lt;/span&gt; y &lt;span style="font-style: italic;"&gt;senior&lt;/span&gt;). En paralelo a esta jerarquía existe la nube de &lt;span style="font-style: italic;"&gt;comerciales&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Problemas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta división jerárquica tiene, en mi opinión, innumerables &lt;span style="font-weight: bold;"&gt;problemas&lt;/span&gt;. Primero enunciaré los problemas que veo, para acabar con mi propuesta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;El &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://es.wikipedia.org/wiki/Principio_de_Peter"&gt;Principio de Peter&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Las personas que realizan bien su trabajo son promocionadas a puestos de mayor responsabilidad una y otra vez, hasta que alcanzan su nivel de &lt;a href="http://es.wikipedia.org/w/index.php?title=Incompetencia&amp;amp;action=edit&amp;amp;redlink=1" class="new" title="Incompetencia (aún no redactado)"&gt;incompetencia.&lt;/a&gt;&lt;/blockquote&gt;A largo plazo se acaba en puestos para los que no se vale, símplemente porque el &lt;span style="font-style: italic;"&gt;inferior&lt;/span&gt; se hacía bien. Sí, hay formas de mitigarlo, pero denota un problema de esencia en una organización jerárquica.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Ser programador &lt;span style="font-style: italic;"&gt;no&lt;/span&gt; es fracasar&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hace poco me contaban de un ingeniero informático que se refería a otro prácticamente en términos de fracaso, símplemente porque está trabajando como programador. En la carrera muchos profesores nos educan que programar es una tarea de bajo nivel, sin interés, mecánica, indigna para ingenieros, apropiada para "la gente de módulos". Sólo estoy de acuerdo en una cosa: programar puede ser inadecuada para ingenieros, sí, pero porque han salido de la carrera sin saber programar ni hacer nada por intentarlo. Obviamente a esos les pondría delante de unos libros y un teclado, y les haría trabajar hasta que corrigiesen eso.&lt;br /&gt;Hay autores que opinan que programar es automatizable (coincidencia o no, suelen ser vendedores de herramientas CASE). Yo me alineo con Robert L. Glass, que dice que el 80% del trabajo de programar es intelectual. Programar no es una tarea mecánica ni menor. Ser programador es un trabajo de responsabilidad, intelectual, que requiere dedicación, esfuerzo, autoexigencia y constante renovación. Tener buenos programadores es crítico para el desarrollo de un proyecto.&lt;br /&gt;La jerarquía promueve la visión de que "lo que hay que conseguir" es salir de los puestos "inferiores" (programador) lo antes posible y "ascender" a puestos de mayor "responsabilidad" (y sueldo). Esto es simplista, erróneo e indeseable. Conozco programadores incapaces cuya único plan profesional es hacer tiempo en puestos de &lt;span style="font-style: italic;"&gt;codificador &lt;/span&gt;hasta que el contador sea suficientemente grande como para que el mercado le promocione a analista. Yo no le quiero ni de programador, ni de analista.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ericsink.com/No_Programmers.html"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Quiero &lt;span style="font-style: italic;"&gt;desarrolladores&lt;/span&gt;, no &lt;span style="font-style: italic;"&gt;programadores&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La jerarquía hace que los programadores se conviertan símplemente en recursos que pican código, ¡tanto desde su punto de vista como desde el de sus "superiores"! La jerarquía les hace convertirse en personas sin responsabilidades, sin iniciativas propias, que no se implican en el trabajo de los demás, que no cuestionan los planteamientos...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Quiero trabajo en equipo, no delegación de la responsabilidad&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El trabajo de un &lt;span style="font-style: italic;"&gt;programador&lt;/span&gt; se limita a implementar la especificación de un diseñador. ¿Qué se consigue con esto?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Los programadores no se sienten con la responsabilidad de corregir el código de otros.&lt;/li&gt;&lt;li&gt;Los errores cometidos por los diseñadores no son corregidos, ya que nadie lo considera parte de su trabajo.&lt;/li&gt;&lt;li&gt;El trabajo de diseño lo hace una persona diferente al que realmente lo implementa (hecho #29 de "Facts and Fallacies of Software Engineering").&lt;/li&gt;&lt;li&gt;Se subcontrata el trabajo de programación, porque parece que no es importante, aunque al final lo que sucede es que las organizaciones dependen de subcontratas en sus herramientas clave, y el conocimiento adquirido se pierde al acabar el &lt;span style="font-style: italic;"&gt;sub&lt;/span&gt;contrato.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Se acaba produciendo una separación entre los programadores, que se sienten minusvalorados, que no perciben formar parte de la organización,  y el resto.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Si el modelo en cascada es erróneo, ¿para qué insistir en él? &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lo primero que te cuentan en Ingeniería del Software es el modelo en cascada, y lo segundo es que no vale como método de desarrollo. ¿Por qué insistimos en usarlo, directa o indirectamente? La jerarquía inicial no es más que el reflejo de esta metodología en el organigrama de la empresa.&lt;br /&gt;En mi opinión, el proceso &lt;span style="font-style: italic;"&gt;mental&lt;/span&gt; de desarrollo de software &lt;span style="font-style: italic;"&gt;sí&lt;/span&gt; es en cascada, pero no se requiere de explicitación, de la misma forma que cuando se hace un modelo de datos &lt;span style="font-style: italic;"&gt;se tienen en cuenta&lt;/span&gt; las formas normales pero no se explicitan.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;¿Realmente respetas lo que implica la jerarquía en cascada? &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este tipo de jerarquías llevan implícito un orden numérico que suele obviarse. En un desglose tradicional del trabajo en cascada se asume que el nivel directamente inferior es numéricamente mayor: un jefe de proyecto, dos o tres analistas, cinco o seis diseñadores, diez o doce programadores... Esta organización &lt;span style="font-style: italic;"&gt;puede&lt;/span&gt; tener un sentido cuando esto se respeta, y puede dar unas garantías que no dan otras, como que los analistas o diseñadores "firmen" partes del trabajo, asumiendo su corrección y adquiriendo su responsabilidad. Pero... ¿tu organización lo puede mantener? ¿Tiene sentido un proyecto en el que sus integrantes son un "analista" y dos "programadores"?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Reduce la versatilidad del equipo dificulta la gestión&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;Si alguien es programador no le pidas que haga de analista:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le estarás pagando como programador pero estará asumiendo la responsabilidad de analista.&lt;/li&gt;&lt;li&gt;No tiene por qué asumir ese trabajo: &lt;span style="font-style: italic;"&gt;no es&lt;/span&gt; analista.&lt;/li&gt;&lt;li&gt;Tendrá una visión de temporalidad de su trabajo.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Su uso refleja la inmadurez de la organización &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Adoptarlo es una decisión que se adopta sin pensar. En mi opinión se adopta por los siguientes motivos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Uso de metodologías en cascada (que no queremos, ¿no?).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Facilita la definición de la carrera profesional y salarial.&lt;/li&gt;&lt;li&gt;Situa a los comerciales en un punto muy elevado (cosa deseable, en mi experiencia, desde el punto de vista de los jefes).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Mi propuesta&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-style: italic;"&gt;   No size fits all&lt;/span&gt;, así que un buen punto de partida es tirar a la basura la precondición de que la jerarquía es esa. Partiendo de eso...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Desarrolladores, no programadores, ni analistas, ni diseñadores&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un mismo miembro del equipo debe desarrollar su habilidad en todas las técnicas implicadas en el desarrollo. Además, adoptando el principio de desarrollo ágil de &lt;a href="http://www.design-nation.net/es/archivos/000478.php"&gt;&lt;span style="font-style: italic;"&gt;propiedad colectiva del código&lt;/span&gt;&lt;/a&gt; y extendiéndolo a cualquier otro &lt;span style="font-style: italic;"&gt;producto&lt;/span&gt; del desarrollo, todos deben implicarse en el desarrollo, corrección y evolución del código, análisis y diseño.&lt;br /&gt;Por otra parte, no me valen analistas que no saben programar. Deberíamos estar en una de esas condiciones que "nunca suceden", pero en la práctica sí hay analistas "puestos". Aunque el rol de &lt;a href="http://www.developer.com/mgmt/article.php/3500171"&gt;analista funcional&lt;/a&gt; está ahí y es importante, sólo es un &lt;span style="font-style: italic;"&gt;rol&lt;/span&gt;, no una &lt;span style="font-style: italic;"&gt;responsabilidad&lt;/span&gt; ni una persona concreta. Lo mismo ocurre con el de &lt;a href="http://www.developer.com/mgmt/article.php/3504496"&gt;arquitecto de soluciones&lt;/a&gt; (diseñador).&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PD: aquí "análisis" y "diseño" no son las fases del modelo en cascada, sino las técnicas que se llevan a cabo para la resolución de ciertos problemas funcionales o técnicos ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Separa las condiciones contractuales de tu rol en los proyectos y en la organización&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si alguien es un buen desarrollador y está a gusto en ello, debe poder desarrollar toda su vida profesional como tal. Haz que un desarrollador pueda comenzar en tu empresa como becario o junior pero que pueda desempeñar ese mismo trabajo durante años, y que su contrato mejore en consecuencia. ¿Por qué un gran programador que lleva muchos años en la empresa no puede cobrar más que cualquier comercial? Permite un cambio de rol si él quiere y realmente vale, pero no lo impongas como necesario para mejoras contractuales. Esto conseguirá que los desarrolladores estén realmente motivados: verán su trabajo recompensado, tendrán responsabilidades...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Implica a las personas, no a los roles, en las decisiones clave de la organización&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;¡Haz que él también lo sepa! Tenle en cuenta a la hora de tomar decisiones técnicas. Que sepa que su papel en la organización no es sólo codificar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;¿Es esto válido en cualquier caso?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No,&lt;span style="font-style: italic;"&gt; no size fits all&lt;/span&gt;. En el fondo estas ideas están fuertemente influenciadas por mi trabajo en aplicaciones web y de gestión, y en mi convencimiento de que una metodología de trabajo ágil es lo mejor en la mayor parte de los desarrollos. Siempre digo lo mismo: algo así no vale en todos los casos. Por ejemplo, si piensas desarrollar el software para poner un satélite en órbita, necesitarás un proceso muy estricto en el que las especificaciones pasen por muchas manos para asegurar su validez y determinar las responsabilidades.&lt;br /&gt;Pero no ponemos satélites en órbita a diario. Creo que &lt;span style="font-style: italic;"&gt;por defecto&lt;/span&gt; la organización debería reflejar las tendencias de los últimos años, y relegar las tradicionales a  campos en los que son más adecuadas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1286178601401662567?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1286178601401662567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1286178601401662567'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/12/los-roles-en-el-desarrollo-de-software.html' title='Los roles en el desarrollo de software'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5543150371696090158</id><published>2008-12-02T16:23:00.002Z</published><updated>2008-12-02T16:58:47.285Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='libros'/><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><title type='text'>Reseña: Facts and Fallacies of Software Engineering</title><content type='html'>&lt;span class="dropcaps"&gt;F&lt;/span&gt;acts and Fallacies of Software Engineering (FFSE, para abreviar) es un libro que recopila &lt;span style="font-weight: bold;"&gt;"55 hechos y 5 + 5 falacias"&lt;/span&gt; (al autor le gustaba la reiteración de la 'f') &lt;span style="font-weight: bold;"&gt;del desarrollo del software&lt;/span&gt;. Los hechos son un resumen de lo que considera más importante saber a la hora de gestionar y desarrollar proyectos software, y las falacias, los engaños o equivocaciones más frecuentemente extendidos como ciertas.&lt;br /&gt;&lt;br /&gt;El autor es &lt;span style="font-weight: bold;"&gt;Robert L. Glass&lt;/span&gt;, uno de los pioneros en el desarrollo de software: lleva más de 54 años metido en esto, así que algo debe saber. Publica un newsletter bimensual de pago, &lt;a href="http://www.developerdotstar.com/mag/bios/software_practitioner.html"&gt;The Software Practitioner&lt;/a&gt;. Declara que, tras haber trabajado tanto desarrollando como gestionando, "le gusta más hacer que dirigir hacer a otros". Un tipo así no me podía caer mal.&lt;br /&gt;&lt;br /&gt;La &lt;span style="font-weight: bold;"&gt;estructura&lt;/span&gt; de cada hecho o falacia siempre es la misma: expone el contenido, la controversia (si la hay), y concluye con las fuentes y referencias citadas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ejemplos&lt;/span&gt; de hechos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El factor más importante es la calidad de los programadores.&lt;/li&gt;&lt;li&gt;Los mejores programadores son hasta 28 veces mejores que los peores.&lt;/li&gt;&lt;li&gt;Una de las dos causas más probables de fracaso de proyectos son los requisitos inestables.&lt;/li&gt;&lt;li&gt;Eliminar los errores es la fase que más tiempo consume del ciclo de vida.&lt;/li&gt;&lt;li&gt;La estimación se hace en el momento equivocado y la hace la gente equivocada.&lt;/li&gt;&lt;/ul&gt;Ejemplos de falacias:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No puedes gestionar lo que no puedes medir.&lt;/li&gt;&lt;li&gt;Herramientas y técnicas: una vale para todos los casos.&lt;/li&gt;&lt;/ul&gt;El &lt;span style="font-weight: bold;"&gt;balance&lt;/span&gt; del libro no es positivo, pero más por culpa de mis expectativas que porque el libro falle. Me ha decepcionado, probablemente me equivoqué al encargarlo, me tenía que haber informado más. Mi primer fallo es no haber hecho cuenta de lo que implica que sean sólo 200 páginas. No me gustan los libros innecesariamente grandes, pero considerando que se ocupa de 65 temas, eso deja poco más de tres páginas para cada uno. Si a eso añadimos que de esas tres páginas un trozo no despreciable se va en citar fuentes, podéis imaginar que no trata en profundidad casi nada. Cada hecho se resume a mostrar su opinión, citando ejemplos o fuentes interesantes, y comentar muy por encima la discusión al respecto.&lt;br /&gt;A esto le uno que &lt;span style="font-weight: bold;"&gt;estoy de acuerdo con prácticamente todo&lt;/span&gt;, y con todo lo importante, así que en mí genera poco debate, que es siempre una de las cosas interesantes de leer opiniones ("¿No pensamos igual? ¿Estoy equivocado, o es él?"). Para que me den la razón en todo prefiero no leer o no discutir, lo interesante es cuando las opiniones no son iguales.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lo mejor&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Es una buena recopilación del "estado del arte" de la ingeniería del software, para ver de qué pie cojeamos.&lt;/li&gt;&lt;li&gt;Es gratificante ver que no soy el único que le preguntó a su profesor (bueno, él a sus alumnos) que por qué la estimación se sitúa antes de la recogida de requisitos sin obtener respuesta :).&lt;/li&gt;&lt;li&gt;Las fuentes son una buena biblioteca que todos los ingenieros del software deberíamos leer.&lt;/li&gt;&lt;li&gt;&lt;strike&gt;Tener algo físico que lanzarle a tu jefe a la cabeza&lt;/strike&gt;. Tener una opinión más contrastada que la propia que poder utilizar como argumento con jefes y gestores que desprecian la programación y otras tareas &lt;span style="font-style: italic;"&gt;triviales&lt;/span&gt; de esto de desarrollar aplicaciones.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Lo peor&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No entra en profundidad.&lt;/li&gt;&lt;li&gt;No se aportan soluciones a los problemas.&lt;/li&gt;&lt;li&gt;Las cifras concretas aportadas, sin que las considere importantes de todas formas, me siguen pareciendo vagas y poco contrastables. Valen como idea general, pero no como cálculo aproximado (aunque puede que nunca lo vayan a ser, así que lo mejor creo que sería no intentar aportar cifras).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5543150371696090158?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5543150371696090158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5543150371696090158'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/12/resea-facts-and-fallacies-of-software.html' title='Reseña: Facts and Fallacies of Software Engineering'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8884196692103170915</id><published>2008-11-19T19:26:00.002Z</published><updated>2008-11-19T20:40:04.290Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='informática'/><category scheme='http://www.blogger.com/atom/ns#' term='19N'/><category scheme='http://www.blogger.com/atom/ns#' term='huelga'/><title type='text'>Manifestación Informática 19N</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/albelop/3043958028/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3289/3043958028_e8f019bec3_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;&lt;a href="http://www.flickr.com/photos/albelop/3043958028/"&gt;Manifestación Informática 19N&lt;/a&gt;&lt;br /&gt;Cargado originalmente por &lt;a href="http://www.flickr.com/people/albelop/"&gt;alberto.ipollo&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Hoy era el día.&lt;br /&gt;&lt;br /&gt;Mi opinión sobre la huelga era que había que hacerla, todos. Sobre todo, para curarnos en salud de lo que pueda pasar. Por mí, le quitaba las atribuciones a todo el mundo. Lo que no quiero es que al final le acaben dando las mías a otro. Y todo apunta a que el ninguneo que sufre nuestra carrera puede llevar a eso.&lt;br /&gt;&lt;br /&gt;El balance ha sido mediocre. Me he encontrado con mucha gente que no veía desde la facultad, y eso es bueno porque quiere decir que desde las empresas nos hemos movilizado bastante. Pero, por otro lado, me han faltado estudiantes. Al no ser una huelga &lt;i&gt;oficial&lt;/i&gt; ha habido gente que trabaja que no la ha podido secundar, así que mi esperanza era que se movilizase el colectivo de estudiantes.&lt;br /&gt;&lt;br /&gt;De todas formas, es bueno ver que nos empezamos a mover, y que esto se ha repetido en toda España (basta con buscar en Flickr).&lt;br /&gt;&lt;br /&gt;Es un pequeño paso para nosotros, a ver si es el comienzo de un buen camino.&lt;br /&gt;&lt;br /&gt;Pondría una &lt;a href="http://www.flickr.com/photos/juanignaciosl/sets/72157609459718247/"&gt;foto de las mías&lt;/a&gt;, pero ésta de Alberto es mucho mejor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8884196692103170915?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8884196692103170915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8884196692103170915'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/11/manifestacin-informtica-19n.html' title='Manifestación Informática 19N'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3289/3043958028_e8f019bec3_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7880600659420981104</id><published>2008-11-12T07:33:00.003Z</published><updated>2008-11-12T13:18:11.960Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='informática'/><category scheme='http://www.blogger.com/atom/ns#' term='huelga'/><title type='text'>Problemas a la hora de la huelga</title><content type='html'>[Actualización 081112]: la respuesta por parte de un representante de UGT ha sido que los sindicatos no apoyan (ni apoyarán) la huelga por no existir un sindicato sectorial que agrupe a los informáticos. Por tanto, la vía que nos queda es formar asambleas de trabajadores afectados, votar, y realizar a la empresa la solicitud formal de la huelga. En &lt;a href="http://www.huelgainformatica.es/"&gt;la página de la huelga&lt;/a&gt; están los modelos para estos trámites. NO se necesita al comité de empresa y NO se necesita un 33% de la plantilla, los trabajadores tienen derecho a huelga a título individual. Los que estamos en empresas públicas llegamos tarde, deberíamos haberlo pedido con 10 días naturales (aún así lo estamos solicitando, para que al menos quede constancia). Los que estéis en empresas privadas estáis a tiempo todavía.&lt;br /&gt;&lt;br /&gt;&lt;span class="dropcaps"&gt;E&lt;/span&gt;n mi empresa está circulando esta ayuda:&lt;br /&gt;&lt;br /&gt;Desde el ITA estamos intentando apoyar la huelga, pero creo que la sensación general tanto aquí como en otras empresas es que no sabemos cómo hacerlo, resumo en este correo los problemas que estamos teniendo a la hora de irnos a la huelga y las soluciones que vemos.&lt;br /&gt;&lt;br /&gt;El principal problema es que la huelga no está convocada por ningún sindicato, con lo cuál o presionamos a los sindicatos para que la convoquen o hay que convocarla en cada empresa por separado. Movilizando a los sindicatos mayoritarios la gente se podría adscribir a la huelga sin tener que estar montando tinglados en cada empresa por separado.&lt;br /&gt;&lt;br /&gt;Las vías que tenemos son:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Movilización de los sindicatos&lt;/span&gt;&lt;br /&gt;Movilizando a los sindicatos mayoritarios la gente se podría adscribir a la huelga sin tener que estar montando tinglados en cada empresa por separado.&lt;br /&gt;Las vías que tenemos son:&lt;br /&gt;- Presionar a los comités de empresa y secciones sindicales para que contacten con la delegación provincial de Valladolid (Unión provincial UGT Valladolid por ejemplo) para que convoquen la huelga al menos en Valladolid, con esto todos nos podríamos ir a la huelga sin tener que solicitarla.&lt;br /&gt;- Otro frente son las sindicatos sectoriales, informáticos no tenemos en general, pero sí existe en el caso de UGT una Federación de servicios públicos en la que entraría la gente que trabaja en la administración (FSP), este sería otra vía de presión, que la gente que trabaja en la administración hable con sus secciones sindicales o comités y hablen con la delegación  para que se convoque la huelga.&lt;br /&gt;- Los colegios profesionales de informáticos deberían estar haciendo lo mismo, presionar, pero incluso a nivel nacional para que sea UGT-nacional, CCOO, etc,… la que convoque la huelga.&lt;br /&gt;&lt;br /&gt;Por supuesto hablo de UGT pero porque es lo que me han comentado, lo mismo CCOO, CGT&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Convocatoria de huelga en empresa&lt;/span&gt;&lt;br /&gt;Si con lo anterior no conseguimos nada, la alternativa es convocarla en cada empresa, la convocatoria la puede hacer el comité de empresa o una asamblea de los trabajadores afectados con mayoría absoluta. Para convocar la huelga:&lt;br /&gt;- Crear asamblea eligiendo a un presidente y secretario&lt;br /&gt;- Celebrar votación secreta&lt;br /&gt;- Si se aprueba por mayoría simple nombrar un comité de huelga.&lt;br /&gt;- Reflejar en un acta el motivo de la asamblea, el resultado de la votación (resultado no hace falta los votos particulares) y el comité de huelga y que lo firmen presidente y secretario.&lt;br /&gt;- Notificar a la empresa de la huelga (modelo de preaviso)&lt;br /&gt;- Notificar a la delegación provincial de trabajo y a la delegación de gobierno. (modelos de comunicación de HUELGA)&lt;br /&gt;Esto es para convocar la huelga, después la gente se puede adscribir a la huelga el mismo día sin aviso.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En resumen:  que cada uno que reciba este correo haga dos tareas muy simples:&lt;br /&gt;1.- Reenviarlo a la gente interesada. (por favor es independiente de que estés o no de acuerdo con hacer huelga).&lt;br /&gt;2.- Con los que tenga al lado, que se junte y sin esperar más busque el teléfono de alguien de su comité de empresa y le pida que contacte con la delegación provincial para que convoquen la huelga.  Si desde vuestro comité no son permeables al tema, intentad directamente contactar con la delegación provincial de UGT /CCOO/CGT o presentad un escrito al comité solicitándolo.&lt;br /&gt;&lt;br /&gt;Iba a poner un tercer punto de contactar con colegio profesional (de Castilla y León) pero en Valladolid esto no está sirviendo para nada, sinceramente yo plantearía presentar un escrito al colegio para que devuelvan las cuotas que están cobrando porque no sabemos exactamente qué hacen con el dinero si en casos como estos no se mueven.&lt;br /&gt;&lt;br /&gt;PD: la opinión aquí reflejada sobre el colegio de castilla y león se debe a dos cosas:&lt;br /&gt;Consideramos que a falta de un sindicato sectorial, el Colegio es el que debería &lt;span style="font-style: italic;"&gt;organizar&lt;/span&gt; este tipo de movimientos, encabezando manifestaciones y ayudando en trámites legales. Creemos que no sólo no han hecho nada (más que decir que la apoyan) sino que la respuesta dada a una consulta de un compañero es... pobre, por decirlo suavemente. En mi opinión, cuando escribes a alguien en un Colegio pidiendo ayuda para una huelga es algo serio, y prefiero que me digan que no me pueden ayudar a que contesten con chascarrillos. A título personal, perfecto. Pero cuando escribes a una asociación de lo que sea, no preguntas a la persona, sino al colectivo. Por ejemplo, pese a todo lo que se está moviendo estos días, en la &lt;a href="http://www.cpiicyl.org/"&gt;página principal&lt;/a&gt; se ve que símplemente se hacen eco de lo resuelto en el Consejo de Colegios, sin decir ni proponer ninguna otra cosa (bueno, una tira cómica)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7880600659420981104?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7880600659420981104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7880600659420981104'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/11/problemas-la-hora-de-la-huelga.html' title='Problemas a la hora de la huelga'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5721767781364608166</id><published>2008-11-08T09:36:00.009Z</published><updated>2008-11-08T16:47:03.974Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='informática'/><category scheme='http://www.blogger.com/atom/ns#' term='bolonia'/><category scheme='http://www.blogger.com/atom/ns#' term='opinión'/><title type='text'>Mi opinión sobre el estado de la informática</title><content type='html'>[Actualización 0811081720: "Sobre la huelga"]&lt;br /&gt;[Actualización 0811081742: enlace al blog de Enrique Barreiro]&lt;br /&gt;&lt;br /&gt;&lt;span class="dropcaps"&gt;A&lt;/span&gt;ntes de nada, y &lt;a href="http://juanignaciosl.blogspot.com/2007/07/imho.html"&gt;como ya dije en otro lugar&lt;/a&gt;, esto que pongo aquí es, como siempre que hablo, IMHO :)&lt;br /&gt;&lt;br /&gt;Estos días está habiendo un flame tremendo a cuenta de la &lt;span style="font-style: italic;"&gt;regulación&lt;/span&gt; de informática, de telecomunicaciones, de las enseñanzas europeas, y de la huelga informática. No enlazo los temas anteriores porque si has llegado hasta aquí seguramente tengas en tu bandeja de entrada referencias por triplicado a ellos.&lt;br /&gt;&lt;br /&gt;He puesto mi (micro) opinión en twitter y también he opinado en el &lt;a href="http://boloniaiifordummies.blogspot.com/"&gt;blog de informática de un amiguete&lt;/a&gt;, pero he creído conveniente resumirlo aquí también. Me centraré en resumir mi opinión, porque rebatir argumentos ya lo he hecho en el otro blog (y es bastante aburrido).&lt;br /&gt;&lt;br /&gt;Dos enlaces: &lt;a href="http://boloniaiifordummies.blogspot.com/"&gt;Bolonia for dummies&lt;/a&gt; me ha sido de gran ayuda. Me parece un gran post: útil, con datos, perfectamente escrito, y objetivo. Otro fundamental es la explicación de &lt;a href="http://enriquebarreiro.blogspot.com/2008/11/qu-pasa-con-la-ingeniera-informtica.html"&gt;Enrique Barreiro&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Sobre la regulación profesional&lt;/span&gt;&lt;br /&gt;No me gusta la regulación, en casi nada de la vida. Creo en la autoregulación del mercado y de la sociedad en general. Creo que cuanto menos se entrometan los gobiernos en nuestra vida, mejor. Y creo en el reconocimiento personal, no colectivo.&lt;br /&gt;Por esto mismo, no me gusta la regulación profesional. En mi opinión un título no demuestra nada. Yo quiero ser bueno en mi trabajo, y que eso me lleve a tener un buen puesto, un buen sueldo, y una buena vida en general. &lt;span style="font-weight: bold;"&gt;Mi vía para eso fue sacarme el título de Ingeniería Informática, pero estoy convencido de que no es la única&lt;/span&gt;. Hay gente no titulados, de módulos, titulados técnicos y titulados superiores de otras carreras (sí, también &lt;span style="font-style: italic;"&gt;telecos&lt;/span&gt;) que son profesionales infinitamente mejores que yo: saben muchísimo más, son más productivos y más trabajadores. Y los hay peores: veo titulados que no llegan ni al nivel de un "usuario avanzado". Por tanto, &lt;span style="font-weight: bold;"&gt;el título no demuestra nada&lt;/span&gt;, y, por tanto, &lt;span style="font-weight: bold;"&gt;nadie debe estar obligado a contratar o no a alguien porque tenga un título&lt;/span&gt;. No nos engañemos: &lt;span style="font-style: italic;"&gt;la regulación de atribuciones profesionales no da derechos, sino que impone obligaciones&lt;/span&gt;.&lt;br /&gt;Toda regla tiene su excepción: no, no creo que nuestra carrera sea igual que la de un médico. Yo, cuando escribo código, no tengo &lt;span style="font-style: italic;"&gt;constantemente&lt;/span&gt; la vida de nadie en mis manos. Es cierto que sí puedo diseñar sistemas críticos, en cuyo caso sí deberían ser exigibles todas las garantías posibles (y el título &lt;span style="font-style: italic;"&gt;podría&lt;/span&gt; ser &lt;span style="font-style: italic;"&gt;una&lt;/span&gt; de ellas&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;)&lt;/span&gt;&lt;/span&gt;, pero de ahí a compararme con un médico, ni de lejos. No soy médico porque ni me gusta ni creo valer para ello.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Sobre la intromisión profesional&lt;/span&gt;&lt;br /&gt;Este es uno de los grandes llantos de nuestro sector. Distinguiré entre dos casos, la intromisión 'razonable' y la intromisión 'lamentable'.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sobre la intromisión lamentable&lt;/span&gt;&lt;br /&gt;La intromisión 'lamentable' es esa que se da en ciertas empresas carniceras en la que los jefes &lt;span style="font-weight: bold;"&gt;gestionan los programadores por peso&lt;/span&gt;, y les da igual que sea Ingeniero Superior en Informática con 10 años de experiencia que un Licenciado en Historia con un curso de Java (curiosamente a esos jefes "no les gusta programar", lo cual realmente significa que no tienen ni idea ni de programar ni de informática). Esas empresas &lt;span style="font-weight: bold;"&gt;merecen el máximo de mis desprecios&lt;/span&gt;, y me dan exactamente igual que se vayan a pique en el mayor de los estrépitos. Si eres un buen informático y estás haciendo un proyecto en una empresa en la que cogen a alguien que no tiene ni idea y le pagan tanto o más que a tí, ¿qué haces allí? Cambia de empresa. Creo que los informáticos, aunque cobremos más, &lt;span style="font-weight: bold;"&gt;salimos mucho más baratos&lt;/span&gt;. Y eso se tiene que demostrar a diario, con hechos, lo cual debería llevar a que esta &lt;span style="font-style: italic;"&gt;intromisión lamentable&lt;/span&gt; desapareciese por selección natural: las empresas que pretendan sacar así los proyectos desaparecerán, y las que hagan lo contrario, prosperarán. Mirad, como siempre, a Google: contrata a los mejores y les da un buen salario y una buena vida. De ahí no puede salir nada malo.&lt;br /&gt;&lt;br /&gt;PD: perdón a los Licenciados en Historia por ponerles como ejemplo, espero que comprendáis el argumento :). Y sí, seguro que hay alguno que es mejor informático que muchos, como digo arriba :).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sobre la intromisión razonable&lt;/span&gt;&lt;br /&gt;El hecho innegable es que hay mucha &lt;span style="font-weight: bold;"&gt;demanda de informáticos&lt;/span&gt;. Sí, estamos mal, pero aún así, laboralmente puede que seamos de las carreras con una mejor situación, pese a la crisis. No me cambio por algún amigo Ingeniero Químico, por muchas atribuciones profesionales que tengan.&lt;br /&gt;La demanda es tal que &lt;span style="font-weight: bold;"&gt;la oferta no es suficiente&lt;/span&gt; (¿conocéis informáticos en paro?) y se necesitan más informáticos de los que lo son profesionalmente (módulos, técnicos y superiores). Aceptando este argumento, creo que &lt;span style="font-weight: bold;"&gt;es razonable que&lt;/span&gt;, salvo que prefiramos que no se hagan los proyectos, &lt;span style="font-weight: bold;"&gt;entren otros a hacer &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;nuestro &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;trabajo&lt;/span&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;br /&gt;En esta intromisión, los que están mejor situados, por perfil, son los telecos. Apenas dan nada de informática en la carrera, pero sí hacen cosas, y su preparación les debe predisponer a aprender con cierta facilidad. Eso es así.  ¿Dónde está el problema? El hecho es que se necesitan informáticos, ¿qué problema hay en que sean telecos? Si la persona es apta, inteligente, capaz, ¿por qué no? Otra cosa es que sea un perfecto inepto y encima le asciendan, claro. Pero ese es otro problema.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sobre los telecos&lt;/span&gt;&lt;br /&gt;Hace años me dijeron que teleco es una carrera diseñada a imagen y semejanza del perfil que Telefónica necesitaba hace tiempo, lo cual explica muchas cosas. Creo que el 90% los conocimientos que les imparten en la práctica ya no valen para nada. El perfil que se crea no tiene salidas profesionales ya, Telefónica dejó de demandarlo hace tiempo. Los amigos telecos que tengo están casi todos colocados por Madrid, en consultoras, de auditores o similar. Les cogieron por ser personas válidas, no por sus conocimientos. Parece que esto es suficiente para que muchos informáticos quieran condenarles al ostracismo, temerosos de que &lt;span style="font-style: italic;"&gt;nos quiten el trabajo&lt;/span&gt;. No me malinterpretéis: creo que el &lt;span style="font-style: italic;"&gt;teleco prototípico&lt;/span&gt; no puede ser comparado informáticamente con el &lt;span style="font-style: italic;"&gt;informático prototípico&lt;/span&gt;. Pero eso es eso, estereotipos.&lt;br /&gt;Pero también he visto lo contrario: telecos que no sólo son inteligentes y trabajadores, sino también &lt;span style="font-weight: bold;"&gt;buenos informáticos&lt;/span&gt;.&lt;br /&gt;Todo esto me lleva a lo siguiente: Teleco es una carrera que necesita una reorientación, o desaparecer. Como hacerla desaparecer no es viable, &lt;span style="font-weight: bold;"&gt;veo normal que lo reorienten, mediante estas fichas académicas de Bolonia, hacia informática&lt;/span&gt;. "La sociedad necesita informáticos, formemos más". A mí, mientras no les den atribuciones profesionales que nos excluyan a los informáticos, me parece bien.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sobre el reconocimiento profesional&lt;/span&gt;&lt;br /&gt;El otro llanto habitual es lo mal reconocida que está nuestra carrera. Es cierto. La sociedad en general piensa que se informático es usar el Word, instalar Windows, y estar encerrado en el dormitorio chateando. Bueno. ¿Y qué? ¿Los jefes que nos pagan piensan eso? No. ¿Que el tuyo sí? Vete de esa empresa.&lt;br /&gt;Demos la vuelta a esto, y hagamos algo de autocrítica:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jcesarperez.blogspot.com/2008/10/en-qu-se-diferencia-un-programador-de.html"&gt;A veces nos creemos semidioses&lt;/a&gt;. Nuestro título nos convierte en una esponja ávida de conocimientos, un Neo capaz de aprender en segundos cualquier cosa, nos da bula para descalificar a todos, nos concede el don de la infabilidad.&lt;/li&gt;&lt;li&gt;Ni nosotros valoramos la programación. Hace años escuchaba a un profesor hablar con desprecio de la salida profesional de programar, y ayer mismo me hablaban de un informático que se refería a los programadores como fracasados.&lt;/li&gt;&lt;li&gt;Seamos más exigentes con nosotros mismos. Nos pasamos el día despotricando sobre el trabajo de los demás ("puto Windows", "qué lento va el Eclipse", "qué mierda es J2EE"...) y no nos damos cuenta de lo mal que hacemos a veces nuestro trabajo ("bueno, lo cortapego y ya está", "así funciona, sé que está mal pero no lo toques"...).&lt;/li&gt;&lt;li&gt;Menos quejarnos, y más movimiento: ¿nuestro jefe &lt;span style="font-style: italic;"&gt;teleco &lt;/span&gt;es un inepto que no nos deja trabajar correctamente? Hagamos propuestas, ofrezcamos alternativas, &lt;span style="font-style: italic;"&gt;demostremos&lt;/span&gt; que se puede hacer mejor. O cambiemos de empresa. ¡O hagamos una!&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;Sobre la huelga&lt;/span&gt;&lt;br /&gt;Supongo que después de lo expuesto aquí se esperará que esté en contra de ir a &lt;a href="http://www.huelgainformatica.es/"&gt;la huelga&lt;/a&gt;. Si dependiese exclusivamente de mí, la verdad es que no iría. Sin embargo, si el sector decide movilizarse, con los colegios encabezando la manifestación, creo que &lt;span style="font-weight: bold;"&gt;mi obligación es secundarla&lt;/span&gt;. Creo que el problema es algo sobre lo que hay que informarse y discutir. Mi conclusión, tras haberlo hecho, es que no hay razón para la alarma social, aunque sí hay motivos para estar descontento. ¿Justifica esto una huelga? No lo sé. Pero si la mayor parte del sector piensa que sí, y eso incluye a los colegios, creo que &lt;span style="font-weight: bold;"&gt;todos debemos apoyarlo&lt;/span&gt;. &lt;span style="font-style: italic;"&gt;Los trapos sucios se lavan en casa, pero en la calle debemos ser uno&lt;/span&gt;. Individualmente puedo pensar que no hay motivo para una huelga, pero esa es una discusión que debemos mantener los informáticos. Sin embargo, si el colectivo piensa lo contrario que yo, creo que lo correcto es unirme. Si no hiciese esto sería como si me junto con un grupo de amigos para ir de vacaciones pero sólo voy si van donde yo quiero.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Conclusión&lt;/span&gt;&lt;br /&gt;Sí, la situación actual es mejorable. Pero ni los&lt;span style="font-style: italic;"&gt; telecos&lt;/span&gt; son el demonio, ni nosotros somos dioses, ni un título demuestra nada. Y la informática no es Medicina, yo puedo depurar mis fallos, un médico no puede resucitar. Si yo programo un brazo quirúrgico, que me exijan garantías, pero para hacer una aplicación web, que me dejen tranquilo. Bolonia no nos va a borrar el cerebro, ni va a hacer que nos despidan. A mí, con que no me quiten, con que no me excluyan, con que no pongan a otros porque sí en mi lugar, me vale. Si un teleco es mejor informático que yo, que le contraten a él. Sólo pido que nadie deba contratar a otro en vez que a mí porque lo diga una ley, y eso, a día de hoy, no va a ocurrir. Y si los informáticos somos mejores que otros, demostrémoslo. Manejemos las herramientas como nuestras propias manos. Conozcamos la industria y el estado de la tecnología. Abracemos los cambios y las novedades. Tengamos iniciativa y seamos exigentes con nosotros mismos.&lt;br /&gt;&lt;br /&gt;IMHO, claro :)&lt;br /&gt;&lt;br /&gt;PD: este post es, por su propia naturaleza, de los que no aportan nada: sólo es mi opinión. Lo único interesante que puede salir de él es una discusión (¡entendida como debate!), así que todo comentario será especialmente bienvenido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5721767781364608166?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5721767781364608166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5721767781364608166'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/11/mi-opinin-sobre-las-enseanzas.html' title='Mi opinión sobre el estado de la informática'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7141382536004534049</id><published>2008-11-01T20:50:00.002Z</published><updated>2008-11-02T14:10:23.801Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven2'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='pydev'/><category scheme='http://www.blogger.com/atom/ns#' term='trac'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>Eclipse: el núcleo del entorno de desarrollo</title><content type='html'>&lt;span style="font-style: italic;"&gt;[Actualización 081101: Maven2, JBoss Tools con Seam]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[Actualización 081102: TestNG]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="dropcaps"&gt;U&lt;/span&gt;n programador debe programar. Se programa con el &lt;pon tu="" ide="" favorito=""&gt;. Todo lo que le suponga a la persona salirse de él, va a ser trabajo adicional que no es bienvenido.&lt;br /&gt;Sin embargo, en el &lt;a href="http://iiso.blogspot.com/2008/10/organizando-un-entorno-de-desarrollo.html"&gt;entorno de desarrollo&lt;/a&gt; tenemos repositorio de código, gestor de tareas, servidores, bases de datos, sistemas de integración contínua... Todas esas herramientas tienen su utilidad, pero interesa &lt;span style="font-weight: bold;"&gt;controlar todo desde un único punto&lt;/span&gt;.&lt;br /&gt;Además, probablemente tengamos a un señor con corbata empeñado en saber en qué emplean las horas los programadores, cómo van los proyectos... Tenemos que &lt;span style="font-weight: bold;"&gt;maximizar la información minimizando el trabajo de soporte&lt;/span&gt;.&lt;br /&gt;Nuestro objetivo aquí es &lt;span style="font-weight: bold;"&gt;integrar el Eclipse con el resto de herramientas&lt;/span&gt; lo máximo posible. En este breve artículo hablaremos también de &lt;a href="http://www.eclipse.org/mylyn/"&gt;Mylyn&lt;/a&gt;, ese "interfaz orientado a tareas" que integra Ganymede.&lt;br /&gt;&lt;br /&gt;Nos centraremos en la forma de integrar Eclipse con el resto de elementos del entorno, dejando las virtudes y defectos de cada uno en los enlaces sugeridos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Subversion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Una de las razones para usar Subversion sobre CVS es que Ganymede integra soporte nativo para el mismo. Bueno, casi. Por un problema de licencias tendremos que instalar el &lt;a href="http://www.eclipse.org/subversive/"&gt;plugin de Subversive&lt;/a&gt; y un &lt;a href="http://www.polarion.org/index.php?page=overview&amp;amp;project=subversive"&gt;conector SVN&lt;/a&gt;.&lt;br /&gt;En los enlaces tenemos los &lt;span style="font-style: italic;"&gt;update center&lt;/span&gt; que configurar en Eclipse para instalar todo. Partiendo del Eclipse J2EE no lo conseguí. Insisto en mi recomendación de comenzar con el Eclipse básico.&lt;br /&gt;El trabajo diario de sincronización esencialmente es igual que con el CVS, así que no voy a profundizar más en esto.&lt;br /&gt;// TODO: ¿cambios?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Trac&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Para poder conectar el Trac como repositorio de tareas con Mylyn/Eclipse hay que hacer dos pasos adicionales.&lt;br /&gt;Por un lado, tenemos que instalar el &lt;span style="font-weight: bold;"&gt;conector de Trac&lt;/span&gt;, que no viene en la distribución por defecto de Mylyn. En la &lt;a href="http://www.eclipse.org/mylyn/downloads/"&gt;página de descarga de Mylyn&lt;/a&gt; tenemos el update center de los extras.&lt;br /&gt;Por otro, tenemos que instalar el &lt;a href="http://trac-hacks.org/wiki/XmlRpcPlugin"&gt;plugin que permite acceder a Trac mediante &lt;span style="font-weight: bold;"&gt;xml rpc&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Hecho esto podremos configurar el repositorio de tareas del proyecto (propiedades del proyecto --&gt; Repositorio de tareas --&gt; Añadir nuevo repositorio). En la vista "Task list" (no confundir con la tradicional "Tasks" de TODOs y FIXMEs) tendremos los tickets. Si no te aparecen todos (como a mí), botón derecho sobre la vista --&gt; new --&gt; query, y sin filtrar te aparecerá.&lt;br /&gt;Si quieres saber qué es Mylyn, echa un ojo al &lt;a href="http://live.eclipse.org/node/573"&gt;webminar&lt;/a&gt;. Realmente creo que es muy interesante, y que puede cambiar (¡y facilitar!) la forma de trabajar.&lt;br /&gt;Desde el punto de vista de la integración con Trac, se puede tanto crear nuevas tareas/tickets como editar los existentes. Además, marcar una tarea como activa registra el tiempo empleado en ella. A aprenderse los &lt;a href="http://wiki.eclipse.org/Mylyn/User_Guide#Shortcuts"&gt;atajos de Mylyn&lt;/a&gt; ;).&lt;br /&gt;Hay cosas que todavía no están integradas como ambos, como el seguimiento de tareas, pero &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=212108"&gt;están en ello&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;JBoss Server&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;JBoss, aparte de tener su propia versión de Eclipse, el &lt;a href="http://www.jboss.com/products/devstudio"&gt;JBoss Developer Studio&lt;/a&gt; (de pago, que yo creía que iban a redenominar Red Hat Developer Studio), libera un conjunto de plugins bajo la denominación &lt;a href="https://www.jboss.org/tools/"&gt;JBoss Tools&lt;/a&gt; que puedes &lt;a href="https://www.jboss.org/tools/download/index.html"&gt;descargar&lt;/a&gt;.&lt;br /&gt;Desde la vista "Servers" se pueden crear nuevos servidores. Hay conectores específicos para cada versión, que se autoconfiguran con indicar el directorio donde has descomprimido la distribución del servidor.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Seam&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Seam es la niña bonita de JBoss en lo que a desarrollo Java empresarial en estos momentos, y JBoss Tools tiene soporte para ello. Para activarlo, en las propiedades de Eclipse, buscamos Seam y configuramos la ruta en la que nos hemos descargado el framework.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Google App Engine (PyDev)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;La integración de Eclipse hacia el Google App Engine la conseguiremos a través de PyDev.&lt;br /&gt;Una vez configurado el PyDev (consultar documentación), añadimos los módulos de Google App Engine para que funcione el &lt;span style="font-weight: bold;"&gt;autocompletar&lt;/span&gt;, entre otras cosas. Hay que meter en los módulos el directorio en el que hemos descomprimido el GAE, y los tres que hay dentro de lib (más información sobre &lt;a href="http://daily.profeth.de/2008/04/google-app-engine-eclipse-pydev.html"&gt;configurar GAE en PyDev en otro blog&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;También interesa ejecutar el servidor desde el entorno, especialmente para ver en la consola los mensajes. Creamos una nueva &lt;span style="font-weight: bold;"&gt;configuración de lanzamiento&lt;/span&gt; (Run --&gt; Run Configurations... --&gt; New --&gt; Phython Run). Como módulo principal configuraremos la ruta al lanzamiento del servidor, "dev_appserver.py". En el PYTHONPATH estarán las de python y una de pydev (al menos con mi versión) Como argumentos, estos (el puerto es un ejemplo):&lt;br /&gt;${project_loc}&lt;br /&gt;--port=9999&lt;br /&gt;&lt;br /&gt;&lt;/pon&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;MySQL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Descargamos el &lt;a href="http://dev.mysql.com/downloads/connector/j/5.1.html"&gt;mysql java connector&lt;/a&gt;.&lt;br /&gt;En la vista "Data Source Explorer" podemos definir una conexión a una base de datos. Con el botón "New Connection Profile" elegiremos "Generic JDBC", un nombre, y pondremos la siguiente configuración (ejemplo de acceso a mi base de datos de Amarok):&lt;br /&gt;URL: jdbc:mysql://localhost:3306/amarok&lt;br /&gt;Driver class: com.mysql.jdbc.Driver&lt;br /&gt;Usuario y nombre de la base de datos.&lt;br /&gt;Jar descargado del conector.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Hudson&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Se está desarrollando un &lt;a href="http://code.google.com/p/hudson-eclipse/"&gt;plugin para conectar Eclipse con Hudson&lt;/a&gt;, actualmente en su versión 1.0.4. Introduce una vista en la que se listan los builds, y un icono con el estado de los mismos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Maven2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Hay un &lt;a href="http://m2eclipse.codehaus.org/"&gt;plugin de Maven2 para Eclipse&lt;/a&gt;. Al instalarlo me dí cuenta de que no estaba ejecutando Eclipse sobre el JDK de Sun, sino sobre otro JRE (requisito de Maven2). Para solucionarlo, &lt;span style="font-style: italic;"&gt;sudo aptitude install sun-java6-jdk&lt;/span&gt;, y &lt;span style="font-style: italic;"&gt;sudo update-alternatives --set java /usr/lib/jvm/java-6-sun/jre/bin/java&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;TestNG&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/testng-eclipse/"&gt;Hay un plugin de TestNG para Eclipse&lt;/a&gt;. Tras instalarlo basta con botón derecho --&gt; Run As --&gt; TestNG Suite sobre una prueba para ejecutarla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7141382536004534049?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7141382536004534049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7141382536004534049'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/10/eclipse-el-ncleo-del-entorno-de_15.html' title='Eclipse: el núcleo del entorno de desarrollo'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6072106281043096102</id><published>2008-11-01T20:01:00.002Z</published><updated>2008-11-02T14:02:43.415Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='pydev'/><category scheme='http://www.blogger.com/atom/ns#' term='trac'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='mylyn'/><category scheme='http://www.blogger.com/atom/ns#' term='entorno de desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>Organizando un entorno de desarrollo libre</title><content type='html'>&lt;span style="font-style: italic;"&gt;[Actualización 081101: Maven2]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[Actualización 081102: TestNG]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="dropcaps"&gt;C&lt;/span&gt;omo el movimiento se demuestra andando, he invertido unas cuantas horas en preparar un &lt;span style="font-weight: bold;"&gt;entorno de desarrollo&lt;/span&gt;. En los próximos meses tengo en mente hacer desarrollos en Google App Engine (Python) y también con Seam (J2EE), así que es un buen momento para para probar herramientas diversas. El objetivo es que, asumiendo los costes de instalación y de aprendizaje, el trabajo diario sea sencillo y completo, para lo cual es fundamental la &lt;span style="font-weight: bold;"&gt;integración&lt;/span&gt; de las herramientas.&lt;br /&gt;Consta de los siguientes elementos principales:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.kubuntu.org/"&gt;Kubuntu&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://es.wikipedia.org/wiki/Subversion"&gt;Subversion&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.jboss.org/jbossas/"&gt;JBoss Server&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/www.eclipse.org"&gt;Eclipse&lt;/a&gt;, con ...&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/mylyn/"&gt;Mylyn&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://pydev.sourceforge.net/"&gt;PyDev&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Vayamos por partes, indicando brevemente la motivación y las referencias utilizadas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Kubuntu&lt;/span&gt;&lt;br /&gt;Usar GNU/Linux para desarrollo basado en herramientas libres es comodísimo y potente. La instalación de las herramientas viene soportada por APT, y mediante ficheros de configuración y módulos adicionales se puede hacer casi cualquier cosa. Lo he intentado en Windows y no me parece tan sencillo.&lt;br /&gt;(K)Ubuntu porque es amigable con el usuario a la vez que tiene lo bueno de Debian (¡APT!), y no requiere compilar todo como Gentoo. Además, hay muchísima documentación actualizada. Y &lt;a href="http://www.kubuntu.org/"&gt;Kubuntu&lt;/a&gt; en vez de Ubuntu porque soy de KDE.&lt;br /&gt;&lt;br /&gt;Instalarlo habría sido trivial si no me hubiese empeñado en usar el FakeRAID de la placa (ya que lo pagas...).  Seguí las &lt;a href="http://www.vicente-navarro.com/blog/2008/05/01/instalar-ubuntu-hardy-heron-sobre-un-fakeraid"&gt;fantásticas instrucciones para instalar Linux Ubuntu 8.04 sobre un FakeRAID&lt;/a&gt; que ha compartido &lt;a href="http://www.vicente-navarro.com/"&gt;Vicente Navarro&lt;/a&gt; y no hubo mayor problema.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Repositorio Subversion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;En las últimas semanas he sufrido un número ingente de conflictos entre ramas de un proyecto en el que trabajo con CVS, y quiero saber si Subversion ha mejorado algo esto. Aparte de CVS y &lt;a href="http://es.wikipedia.org/wiki/Subversion"&gt;SVN&lt;/a&gt; hay otros muchos &lt;a href="http://en.wikipedia.org/wiki/Software_configuration_management"&gt;SCMs&lt;/a&gt;, pero no he querido complicarme más para que el resto de herramientas (Eclipse, Hudson, Trac...) se puedan conectar a él sin problemas.&lt;br /&gt;Apt-get, un poco de configuración en un par de ficheros, y tienes tu servidor SVN montado. Utilicé una &lt;a href="http://www.guia-ubuntu.org/index.php?title=Subversion"&gt;guía de SVN en Ubuntu en castellano&lt;/a&gt;, y otra &lt;a href="https://help.ubuntu.com/community/Subversion"&gt;en inglés&lt;/a&gt; para rellenar los huecos de autenticación de la primera.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Trac&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Buscando gestores de incidencias libres los más habituales parecen ser &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt; y Bugzilla. Éste segundo tiene fama de monstruoso y complejo de administrar, lo cual no era opción en mi entorno. Trac, por el contrario, es sencillo, lo voy a poder conectar con Eclipse, se conecta al SVN, integra un wiki, es extensible mediante plugins...&lt;br /&gt;Para instalarlo lo obtenemos con apt-get y seguimos la &lt;a href="http://trac.edgewall.org/wiki/TracInstall"&gt;guía de instalación&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;JBoss Server 4.2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;El desarrollo Java pretendo hacerlo con Seam, que es de JBoss, así que me parece la elección más cómoda. Ya he sufrido el SJSAS/Glassfish, que no tiene por qué ser un mal servidor, pero no lo tienen en cuenta al documentar las librerías, y quiero probar otras cosas. &lt;a href="https://www.jboss.org/jbossas/"&gt;JBoss Server&lt;/a&gt; es un servidor completo y con soporte profesional en caso de necesitarlo. Contiene a Tomcat como servidor web. Hice una prueba rápida con Seam en la versión 5 pero el despliegue fallaba, así que he preferido mantenerme en la 4.2, más contrastada.&lt;br /&gt;Tampoco lo he encontrado en repositorios APT, así que a bajarlo a mano. Como pretendo usarlo de desarrollo, lanzado desde Eclipse, ni me molesto en crear el servicio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Google App Engine&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Acostumbrado a J2EE, probar &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt; me parece muy interesante para dejar de elegir Java por defecto. Desde que pasé de PHP a Struts no había usado lenguajes de script para desarrollo web.&lt;br /&gt;Todo lo que necesitas saber para comenzar está en el &lt;a href="http://code.google.com/appengine/docs/gettingstarted/"&gt;tutorial básico&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;MySQL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Profesionalmente siempre había usado Oracle. Al elegir una base de datos libre la elección sencilla es &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;.&lt;br /&gt;Tanto el cliente como el servidor están en APT, así que la instalación es sencilla.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Eclipse&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;No hay mucho que decir. No dudo que haya otros también muy buenos, pero &lt;a href="http://www.blogger.com/www.eclipse.org"&gt;Eclipse&lt;/a&gt; es el IDE de referencia. Como con SVN o Trac además, no sólo lo elijo por él en sí mismo, sino por su extensibilidad y conectividad.&lt;br /&gt;&lt;br /&gt;La última versión es Ganymede. No está en ningún repositorio APT todavía, así que hay que instalarlo tradicionalmente. Inicialmente bajé el paquete J2EE, pero después aparecían problemas de compatibilidad de paquetes de plugins, así que mejor bajar el "clásico" y luego añadirle lo que sea.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Mylyn&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/mylyn/"&gt;Mylyn&lt;/a&gt; es una parte de Eclipse que favorece el desarrollo orientado a tareas. Integra en una vista las tareas asignadas, lleva conteo del tiempo empleado, asocia a cada tarea un contexto (para abrir los ficheros interesantes en cada momento) y un largo etcétera. Es algo que puede cambiar la forma de trabajar (¡para bien!). Igual que el Lightroom favorece el flujo de trabajo de un fotógrafo, Mylyn lo hace del programador.&lt;br /&gt;Viene de serie con Ganymede, así que no hay más que hablar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;PyDev&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Llevo años con Eclipse y probablemente me quedan unos cuantos más, así que quiero seguir usando ese entorno para programar también en Python. &lt;a href="http://pydev.sourceforge.net/"&gt;PyDev&lt;/a&gt; es el plugin de referencia, y para quien quiera pagar por más, tienen una extensión al mismo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Hudson&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Tras documentarme y ver que no hay uno realmente dominante en el mercado, y que ninguno "lo tiene todo", utilicé esta &lt;a href="http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix"&gt;matriz comparativa de sistemas de integración contínua&lt;/a&gt; para elegir el más adecuado. Los más comentados, Cruise Control y Continuum, los descarté por no soportar Trac. Hasta donde sé el tercero en discordia entre los libres es &lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;, que sí tenía todo lo que necesitaba (y también extensible mediante plugins), así que es el elegido. En el libro &lt;a href="http://oreilly.com/catalog/9780596527938/"&gt;Java Power Tools&lt;/a&gt; (una interesante referencia de herramientas actuales) revisan esos tres junto a LuntBuild.&lt;br /&gt;La "instalación" de Hudson consiste en bajarse el war y ejecutarlo con java -jar hudson.war --httpPort=7777.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Maven&lt;/span&gt;&lt;br /&gt;Maven es una herramienta para gestionar varios aspectos de un proyecto: dependencias, compilación, documentación... Se podría ver como un recubriento de Ant orientado a proyectos.&lt;br /&gt;Aparte de las ventajas directas de usarlo, se produce un efecto colateral: el despliegue en un sistema de integración contínua de un proyecto configurado para Maven es trivial (si el sistema de IC lo soporta, claro).&lt;br /&gt;En Kubuntu, con un &lt;span style="font-style: italic;"&gt;sudo aptitude install maven2&lt;/span&gt; ya tenemos la herramienta instalada.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;TestNG&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://testng.org/doc/"&gt;TestNG&lt;/a&gt; es un framework de pruebas que pretende cubrir limitaciones de JUnit a la vez que hacerlo más sencillo. Lo que es más imperioso en nuestro caso, es el framework de pruebas hacia el que está orientado Seam, por lo que será el que usemos.&lt;br /&gt;&lt;br /&gt;En próximas entregas, la integración entre ellos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6072106281043096102?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6072106281043096102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6072106281043096102'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/10/organizando-un-entorno-de-desarrollo.html' title='Organizando un entorno de desarrollo libre'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6460011821144091967</id><published>2008-11-01T10:18:00.004Z</published><updated>2008-11-01T10:41:23.423Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Kubuntu 8.10: Todavía no, pero casi...</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt; mí me encanta GNU/Linux. Me resulta una plataforma completa, personalizable, potente y estable, tanto para trabajo, servidor, o casa. Pero claro, yo soy informático y mi perfil no es el mismo que el de mis padres o mis amigos.&lt;br /&gt;Periódicamente, normalemente coincidiendo con nuevas versiones de las distribuciones más populares, vuelvo a hacerme la misma pregunta: "&lt;span style="font-weight: bold;"&gt;¿Está GNU/Linux listo para el escritorio?&lt;/span&gt;"&lt;br /&gt;En &lt;a href="http://juanignaciosl.blogspot.com/2008/06/powered-by-kubuntu.html"&gt;junio instalé Kubuntu&lt;/a&gt; y desde entonces pensé que "casi" estaba. Lo único complicado que he tenido que hacer para que funcionase todo fue seguir unas instrucciones para &lt;a href="http://www.vicente-navarro.com/blog/2008/05/01/instalar-ubuntu-hardy-heron-sobre-un-fakeraid/#more-586"&gt;instalar el FakeRAID en Ubuntu&lt;/a&gt;, pero bueno, un usuario medio tampoco se para en RAIDs.&lt;br /&gt;Hace un par de días actualicé a Intrepid Ibex, la versión 8.10. En estos momentos todo va sobre ruedas, pero desde que comencé la actualización me topé con un par de problemas que no habrían sido admisibles para un usuario medio:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Durante la instalación se pide &lt;span style="font-weight: bold;"&gt;intervención del usuario por conflictos en ficheros de actualización&lt;/span&gt;. Se muestra un diálogo con la salida de diff, y se espera que el usuario sea capaz de decidir correctamente. Vale, my.cnf y apache2.conf no son ficheros que habría tenido un usuario medio, pero sí la configuración de alsa-base.&lt;/li&gt;&lt;li&gt;Al reiniciar, &lt;span style="font-weight: bold;"&gt;no funcionaban las X&lt;/span&gt;. Tras buscar ví que estaba cargando un &lt;span style="font-weight: bold;"&gt;kernel incorrecto&lt;/span&gt;, para el cual los drivers no estaban actualizados. No sé si durante la instalación hice algo mal para que el menu.lst de grub no se hubiese actualizado, pero tuve que editarlo a mano para meter la entrada del nuevo kernel.&lt;/li&gt;&lt;/ul&gt;Yo, personalmente, estoy muy contento con Kubuntu y estos problemas, para mí, me parecen admisibles, pero pienso en la cara de mis padres o amigos si tras actualizar les saliese un pantallazo negro del terminal, y sé que en ese momento GNU/Linux habría muerto para ellos.&lt;br /&gt;En GNU/Linux ya se ha llegado al punto de que cuando todo va bien, un usuario normal no tiene ningún problema (como la &lt;a href="http://vidasenred.blogspot.com/2008/11/ubuntu-vnc-y-mi-madre.html"&gt;madre de converso72&lt;/a&gt;), que no es poco. Navegar por internet, usar la red, abrir ficheros de Office... Todo funciona.&lt;br /&gt;En mi opinión, ya está cubierta el 90% de la funcionalidad. El problema seguramente sea que el 10% restante es bastante más de el 10% de trabajo, y mucho menos vistoso:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hacer el entorno más &lt;span style="font-weight: bold;"&gt;tolerante a fallos&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;y errores humanos&lt;/span&gt;. Las X son básicas. Por ejemplo, símplemente que en caso de error tome el fichero &lt;span style="font-style: italic;"&gt;failsafe&lt;/span&gt; sería un buen avance.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Automatización de las configuraciones&lt;/span&gt;. KDE4 tiene procesos para actualizar los ficheros de usuario de KDE3. Esa es la línea. Todos los programas que utilicen ficheros de configuración deberían hacerlo automáticamente.&lt;/li&gt;&lt;/ul&gt;Un usuario nunca tendría que necesitar tocar un fichero de configuración. El día que eso ocurra, GNU/Linux estará listo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ThiAJt9Eftg/SQwtyN1p0zI/AAAAAAAACjk/HfwJ53k63zo/s1600-h/screenshot081101.png"&gt;&lt;img style="cursor: pointer; width: 400px; " src="http://4.bp.blogspot.com/_ThiAJt9Eftg/SQwtyN1p0zI/AAAAAAAACjk/HfwJ53k63zo/s400/screenshot081101.png" alt="" id="BLOGGER_PHOTO_ID_5263632405220676402" 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/4170768470549625640-6460011821144091967?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6460011821144091967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6460011821144091967'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/11/kubuntu-810-todava-no-pero-casi.html' title='Kubuntu 8.10: Todavía no, pero casi...'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ThiAJt9Eftg/SQwtyN1p0zI/AAAAAAAACjk/HfwJ53k63zo/s72-c/screenshot081101.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-4711473941220627408</id><published>2008-10-18T19:21:00.003+01:00</published><updated>2008-10-18T19:34:36.201+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ágil'/><category scheme='http://www.blogger.com/atom/ns#' term='metodología'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Scrum - Introducción a las metodologías ágiles</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;e preparado una presentación de introducción a las metodologías ágiles en particular y a Scrum en profundidad.&lt;br /&gt;No se basa en la experiencia personal porque, tristemente, todavía no he participado en ningún desarrollo que la emplee (¡pero espero que eso cambie pronto!).&lt;br /&gt;Aprovecho para recomendar muy especialmente una de las referencias: "&lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.crisp.se%2Fhenrik.kniberg%2FScrumAndXpFromTheTrenches.pdf&amp;amp;ei=syn6SMn2CYycQMLdndIC&amp;amp;usg=AFQjCNGQEH9sprimzh8wZAlUHRBlUDLb1g&amp;amp;sig2=npmnT102o-fW13NozNpAxw"&gt;Scrum and XP from the Trenches&lt;/a&gt;", un extenso (~120 páginas) y detallado documento sobre cómo aplican Scrum en una empresa.&lt;br /&gt;Agradeceré enormemente cualquier crítica, corrección o sugerencia sobre el contenido de la presentación :).&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=dg2n4368_15g4cvkxxp" width="410" frameborder="0" height="342"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-4711473941220627408?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4711473941220627408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4711473941220627408'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/10/scrum-introduccin-las-metodologas-giles.html' title='Scrum - Introducción a las metodologías ágiles'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8675023918377664529</id><published>2008-10-14T19:36:00.005+01:00</published><updated>2008-10-14T19:54:11.191+01:00</updated><title type='text'>12 segundos de oscuridad</title><content type='html'>&lt;span class="dropcaps"&gt;T&lt;/span&gt;e encuentras con un problema. Analizas la traza que deja la excepción. Pones puntos de ruptura y navegas por la solicitud. Te metes en las tripas del código abierto que utilizas. Sales de ellas pero dos capas más arriba hay más código abierto. No localizas el problema. Miras la documentación de referencia. Vuelves a darle una vuelta, localizas el problema, y lo solucionas.&lt;br /&gt;&lt;br /&gt;No sólo has resuelto el problema, sino que has aprendido sobre todo lo que utilizas, y si eres algo exigente contigo mismo, cada vez lo harás más rápido.Lo importante no es el momento de iluminación en el que resuelves el error, sino los doce segundos de oscuridad anteriores. El camino es lo importante.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;no es la luz&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;lo que importa en verdad&lt;/div&gt;&lt;div style="text-align: center;"&gt;son los 12 segundos&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;de oscuridad&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;- Jorge Drexler&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8675023918377664529?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8675023918377664529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8675023918377664529'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/10/12-segundos-de-oscuridad.html' title='12 segundos de oscuridad'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3113092675652990850</id><published>2008-10-10T16:57:00.005+01:00</published><updated>2008-10-10T18:26:49.445+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macintosh'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>¿Pueden el iPhone y Android alterar la conquista del escritorio?</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;levamos años hablando sobre la hegemonía de Windows en el "escritorio", sin que ésta haya variado sustancialmente. Aunque la cuota de mercado de cada sistema operativo es un dato muy difícil de calcular, en &lt;a href="http://marketshare.hitslink.com/report.aspx?qprid=11"&gt;hitlinks&lt;/a&gt; podemos ver unas estadísticas para hacernos una idea al menos del orden de magnitud del que estamos hablando, y la tendencia.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ThiAJt9Eftg/SO-QJCzJdcI/AAAAAAAACjc/jl2H1EOd_Rk/s1600-h/cuotas.png"&gt;&lt;img style="cursor: pointer; width: 538px; height: 147px;" src="http://3.bp.blogspot.com/_ThiAJt9Eftg/SO-QJCzJdcI/AAAAAAAACjc/jl2H1EOd_Rk/s400/cuotas.png" alt="" id="BLOGGER_PHOTO_ID_5255577775209280962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En septiembre las diferentes versiones de Windows han acaparado un 89%, Macintosh un 8%, y GNU/Linux no llega al 1% (la nebulosa "otros" se lleva el 2%). En resumidas cuentas, &lt;span style="font-weight: bold;"&gt;dominio absoluto de Microsoft&lt;/span&gt;.&lt;br /&gt;Si observamos la tendencia del último año vemos que Windows ha perdido aproximadamente un 1.6%, del cual 1.4% se va para Macintosh y un 0.3% para Linux (perdonad por los redondeos). La &lt;span style="font-weight: bold;"&gt;tendencia&lt;/span&gt; es &lt;span style="font-weight: bold;"&gt;levemente negativa&lt;/span&gt; para Windows.&lt;br /&gt;Si tomamos más datos disponibles,  podemos ver que la cuota de Windows apenas había oscilado desde octubre de 2006, a noviembre de 2007, con un 90.5x% en ambos, mientras que Macintosh aumentaba un 1.6%.&lt;br /&gt;En mi opinión, esta tímida tendencia de diversificación se debe al &lt;span style="font-weight: bold;"&gt;iPhone&lt;/span&gt;. La integración entre los diferentes productos Apple es uno de los objetivos principales, y &lt;span style="font-weight: bold;"&gt;los usuarios pueden verse animados a cambiar gracias al dispositivo&lt;/span&gt;. Esto, unido a una siempre creciente importancia de la Red va haciendo a los usuarios &lt;span style="font-weight: bold;"&gt;menos dependientes del sistema operativo&lt;/span&gt;.&lt;br /&gt;Siempre hemos tenido Java como &lt;span style="font-weight: bold;"&gt;herramienta multiplataforma&lt;/span&gt;. Ya tenemos (en beta), Air (la de Adobe, con el Twhirl como abanderado), y Mono 2.0 (la implementación libre de .NET) acaba de ser liberado. Está claro que la publicación de Chrome va en ese sentido. Tenemos también Firefox, Opera, Picasa, Google Desktop, The Gimp, OpenOffice...&lt;br /&gt;¿Conseguirá la penetración en mercado del iPhone, Android y Chrome que la gran masa de usuarios se comience a plantear que hay alternativas?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3113092675652990850?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3113092675652990850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3113092675652990850'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/10/pueden-el-iphone-y-android-alterar-la.html' title='¿Pueden el iPhone y Android alterar la conquista del escritorio?'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ThiAJt9Eftg/SO-QJCzJdcI/AAAAAAAACjc/jl2H1EOd_Rk/s72-c/cuotas.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6896411684059650272</id><published>2008-10-02T18:52:00.004+01:00</published><updated>2008-10-02T19:12:56.029+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='antipatrones'/><title type='text'>Antipatrón: pensar en cambios</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt; diario nos enfrentamos con problemas, y con frecuencia caemos una y otra vez en los mismos errores, siguiendo unas conductas que nunca llevan a nada bueno pero que nos obstinamos en repetir. La wikipedia recopila algunos de estos &lt;a href="http://es.wikipedia.org/wiki/Antipatrón_de_diseño#Antipatrones_de_programaci.C3.B3n"&gt;antipatrones&lt;/a&gt;. Me gustaría añadir uno que suelo ver y que también considero negativo.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;En caso de error&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;pensar qué hemos cambiado&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;A veces (con demasiada frecuencia) nos encontramos con que algo "ha dejado de funcionar". En mi opinión, buscar cambios es una tarea inútil:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Parte de que la premisa de que antes estaba bien, lo cual no tiene por qué ser cierto. Podría ser que nuevos datos hayan hecho aparecer un fallo que antes estaba oculto, podría haber cambiado algo en el servidor, en la configuración... &lt;/li&gt;&lt;li&gt;Rara vez se programa solo, así que lo normal es que varias personas pudiesen estar implicados en una misma línea. &lt;/li&gt;&lt;li&gt;Aún suponiendo que antes estaba bien, para comparar hay que localizar una versión correcta y analizar el cambio, y ver por qué se hizo... &lt;/li&gt;&lt;/ul&gt;En mi opinión es mucho mejor &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;centrarse en el error para localizar el problema&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Corolario&lt;/span&gt;: hay que leer las excepciones, y depurar, incluso a través del código de las librerías.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6896411684059650272?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6896411684059650272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6896411684059650272'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/10/antipatrn-pensar-en-cambios.html' title='Antipatrón: pensar en cambios'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-557646259938041879</id><published>2008-09-28T12:41:00.005+01:00</published><updated>2008-09-28T13:44:37.464+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><category scheme='http://www.blogger.com/atom/ns#' term='the mythical man-month'/><title type='text'>Las mismas discusiones durante 33 años</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;stoy leyendo "&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;The Mythical Man-Month&lt;/span&gt;" (TMMM para abreviar), libro de obligada lectura para todo informático. &lt;div&gt;En la estantería he ido acumulando libros cuya vigencia es limitadísima, especialmente todo aquello que se refiera a lenguajes. Por ejemplo, "Beginning JavaServer Pages" fue un muy buen libro para comenzar con J2EE, pero ya caduco, a pesar de provenir de revisar otro que apenas tendría dos o tres años. Sin embargo, TMMM está sorprendentemente vigente.&lt;/div&gt;&lt;div&gt;Es un libro cuya primera edición data de 1975. Contiene un conjunto de ensayos sobre el desarrollo de grandes sistemas de información, que resumen la experiencia de su escritor, Frederick P. Brooks, conocido por participar en el desarrollo del IBM System 360. &lt;/div&gt;&lt;div&gt;Seguramente este no sea la última reflexión aquí que genere este libro, pero ya en los primeros capítulos se puede comprobar que en ingeniería del software llevamos &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;33 años con las mismas discusiones&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El capítulo 2, que da título al libro, comienza diciendo que las &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;técnicas de estimación en proyectos software son pobres&lt;/span&gt;, y que además &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;confunden esfuerzo con progreso&lt;/span&gt; (al tomar como medida hombre y mes). Y que cuando algo va mal, nos empeñamos en meter más gente en el proyecto. No sé vosotros, pero para mí esto es el pan nuestro de cada día.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En ese mismo capítulo se habla de las &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;pruebas&lt;/span&gt;, y de no contar con ellas en la planificación.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;También detalla unas medidas que supuestamente demuestran que meter gente retrasa el proyecto. Esto me parece muy exagerado (concretamente, las precondiciones del cálculo me lo parecen), pero &lt;span class="Apple-style-span" style="font-style: italic;"&gt;el concepto&lt;/span&gt; está ahí.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Las reflexiones sobre la comunicación, del capítulo 6, también son muy interesantes. Seguramente si lo escribiese hoy tendría muchísimas cosas que decir, gracias a la distribución de contenidos en red de la actualidad.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En resumen, un libro sobre ingeniería del software que 33 años después sigue siendo vigente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PD: el capítulo 7 es genial, mostrando la Torre de Babel como el 2º trabajo de ingeniería de la Humanidad =D&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-557646259938041879?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/557646259938041879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/557646259938041879'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/las-mismas-discusiones-durante-33-aos.html' title='Las mismas discusiones durante 33 años'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7351590750726258833</id><published>2008-09-28T11:40:00.006+01:00</published><updated>2008-09-28T23:11:41.902+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='empleo'/><title type='text'>El empleo en la informática</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;a opinión generalizada sobre el empleo en informática, al menos en mi entorno, es que hay trabajo, aunque podría ser mejor y estar mejor pagado. Hoy, en El Mundo, bajo un titular que reza "&lt;a href="http://www.elmundo.es/mundodinero/2008/09/27/economia/1222529088.html"&gt;¿En paro? Conozca dónde es posible encontrar trabajo pese a la crisis económica&lt;/a&gt;", encontramos el siguiente párrafo:&lt;div&gt;&lt;span class="Apple-style-span"   style="  line-height: 18px; font-family:Arial;font-size:13px;"&gt;&lt;strong style="font-family: Arial, Helvetica, sans-serif; "&gt;&lt;/strong&gt;&lt;blockquote&gt;&lt;strong style="font-family: Arial, Helvetica, sans-serif; "&gt;Telecomunicaciones e informática:&lt;/strong&gt; La gestión de software y bases de datos de las compañías necesitan más técnicos de los que las facultades y módulos forman. Los puestos más requeridos son analistas, programadores y jefes de proyecto.&lt;/blockquote&gt;&lt;/span&gt;Que me perdonen los &lt;span class="Apple-style-span" style="font-style: italic;"&gt;telecos&lt;/span&gt; que lleguen aquí, pero ni la gestión de software, ni la de bases de datos, ni los puestos de analistas ni programadores ni jefes de proyectos deberían ser competencia de gente formada en &lt;span class="Apple-style-span" style="font-style: italic;"&gt;telecomunicaciones&lt;/span&gt;. Por supuesto que hay muchos &lt;span class="Apple-style-span" style="font-style: italic;"&gt;telecos&lt;/span&gt; válidos, inteligentes, que se autoforman y que desempeñarían un gran papel en estos cargos, incluso mejor que muchos informáticos, &lt;span class="Apple-style-span"   style="  white-space: pre-wrap; font-family:Arial;font-size:14px;"&gt;&lt;span class="Apple-style-span"   style="  white-space: normal; font-family:Georgia;font-size:16px;"&gt;pero igual que lo habrían hecho si fuesen ingenieros industriales, químicos, o hubiesen estudiado magisterio. Comprendo que los trabajos &lt;span class="Apple-style-span" style="font-style: italic; "&gt;de informático&lt;/span&gt; sean a veces desempeñados por gente que no tiene ninguna titulación de informática (universitaria o de formación profesional), pero me gustaría que desapareciese esa equiparación entre telecomunicaciones e informática &lt;span class="Apple-style-span" style="font-style: italic; "&gt;por defecto&lt;/span&gt;. Los &lt;span class="Apple-style-span" style="font-style: italic; "&gt;telecos&lt;/span&gt; tienen sus virtudes, y serán mejores que otros en muchos aspectos, pero &lt;span class="Apple-style-span" style="font-style: italic; "&gt;no son informáticos&lt;/span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dicho esto, me gustaría hablar de un amigo. Tras años dedicado a Bellas Artes, por vocación, la frustración sumada de la confrontación con el profesorado y con el mercado laboral le hace dejarlo en favor de una titulación de Informática de Gestión. Es el típico &lt;span class="Apple-style-span" style="font-style: italic;"&gt;cacharrero&lt;/span&gt;, cariñosamente hablando: es de esos que le encanta trastear con ordenadores, destriparlos, probar programas nuevos... Ya sabe que la carrera no tiene nada que ver con eso, pero no tiene miedo. Las matemáticas no se le daban mal, y aunque no ha programado nunca no cree que vaya a tener problemas con ello, y quiere el título para trabajar. No sé si habría sido mejor dirigirse a un módulo en vez de a una carrera, pero la decisión está tomada -y le deseo toda la suerte del mundo-.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obviamente su decisión bien tomada por la percepción del primer párrafo. Aunque el mercado laboral informático es mejorable, está infinítamente mejor que los demás. En mi opinión, si una persona quiere destacar de la marabunta de profesionales que hay en este mercado, debe potenciar los siguientes aspectos:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Autoformación&lt;/span&gt;: el contenido de la carrera vale como base, pero no vale para la vida profesional. Si no quieres eternizarte en cargos de desprestigiado programador junior, lee y programa por tu cuenta. Tanto en el trabajo (¡es sorprendentemente raro encontrar gente que se documenta por su cuenta, ya no digamos que lee las referencias oficiales en vez de &lt;span class="Apple-style-span" style="font-style: italic;"&gt;googlear&lt;/span&gt;!)  como en casa (menos telebasura y más leer).&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Especialización&lt;/span&gt;: está bien poder poner veinte tecnologías en un CV, pero si todas están al mismo nivel la impresión será mala. Si te han llamado a una entrevista especialmente por una de ellas y no puedes responder a la mayor parte de las preguntas que te hagan por ella, ni se preocuparán por las otras. Hay que dominar dos o tres (bases de datos, J2EE,Hibernate, clustering...)...&lt;/li&gt;&lt;li&gt;...pero hay que tener &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;versatilidad&lt;/span&gt;: vale, te han contratado para programar J2EE, pero si surge un proyecto para montar un CMS, no te niegues. La aptitud y la actitud para el aprendizaje son fundamentales.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Iniciativa&lt;/span&gt;: propón mejoras, cuida el detalle... No basta con que la aplicación funcione para que tenga éxito. Si ves que dos botones son indistinguibles, propón los cambios. Haz componentes reutilizables cuando veas elementos repetidos aunque el diseño no lo haya especificado. Si los estilos de una página son mejorables, hazlo... Si ves que una página va a ser incómoda para el usuario, dilo. Si ves que código que no has hecho tú está mal, mejóralo, y avisa a quien lo haya hecho para que lo tenga en cuenta. Las jerarquías dan igual, el desarrollo es un trabajo en equipo. Si alguien se enfada porque "un igual" le diga algo, el problema lo tiene él. "Nadie es tan pobre como para no tener nada que enseñar, ni tan rico como para no tener nada que aprender". Eso sí, no &lt;span class="Apple-style-span" style="font-style: italic;"&gt;recrimines&lt;/span&gt;, sé constructivo.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Ojo. Me parece totalmente respetable la gente que no tiene especial vocación y que está en esto sólo porque hay trabajo. Esa gente a veces ni tiene ordenador en casa, y ni se plantea tocarlo fuera del horario laboral para otra cosa que no sea ocio. De verdad, perfecto. Pero esa gente tiene que asumir que su desarrollo profesional va a venir delimitado por lo que consiga de las empresas. Uno no se puede quejar de "lo mal que está esto" si no pone nada de su parte.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7351590750726258833?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7351590750726258833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7351590750726258833'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/el-empleo-en-la-informtica.html' title='El empleo en la informática'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6892953400974458649</id><published>2008-09-22T16:00:00.004+01:00</published><updated>2008-09-22T16:45:42.155+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitectura'/><title type='text'>Si tuviese que organizar una empresa de informática...</title><content type='html'>&lt;span class="dropcaps"&gt;V&lt;/span&gt;amos a jugar al "Si fuera...", con la tranquilidad que da saber que esto es un blog y que no van mis habichuelas en ello :).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Si tuviese que organizar una empresa que desarrollase aplicaciones...&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Utilizaría &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Scrum&lt;/span&gt; como metodología de trabajo. Creo que las metodologías tradicionales (RUP, Metrica...) son demasiado pesadas y recargadas de documentación y burocracia. Ojo, que lo que tengo en mente son aplicaciones de gestión, "convencionales". Si tuviese que desarrollar el software de un satélite o de instrumental médico, otro gallo cantaría. Para cada situación, la mejor herramienta.&lt;/li&gt;&lt;li&gt;Me olvidaría de certificaciones ISO, CMMI y demás a menos que realmente me obligasen, al menos al principio. Tenerlas no garantiza realmente nada. Yo soy el primer interesado en desarrollar software de calidad, y voy a hacer todo lo posible por lograrlo. Si a lo que ya hago puedo ponerle un sello, perfecto. No quiero andar parcheando, como todas las empresas, la semana antes de una revisión.&lt;/li&gt;&lt;li&gt;Si tuviese que fijar una única plataforma de trabajo (es un requisito que se suele establecer en las organizaciones) sería Java, desarrollando con &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Seam&lt;/span&gt;. Hibernate es fantástico, RichFaces me parece la mejor librería JSF para Ajax... y Seam los integra y mejora.&lt;/li&gt;&lt;li&gt;Los desarrolladores tendríamos &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Eclipse&lt;/span&gt;, con &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JBossTools&lt;/span&gt; y otros plugins útiles como JadClipse.&lt;/li&gt;&lt;li&gt;En el repositorio, &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;SVN&lt;/span&gt;, tendríamos los proyectos listos para construir con &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Maven 2&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Usaríamos &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Trac&lt;/span&gt; para gestionar los errores.&lt;/li&gt;&lt;li&gt;Y &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;XWiki&lt;/span&gt; para la documentación a compartir (tutoriales, ayudas...).&lt;/li&gt;&lt;li&gt;Tendríamos un sistema de integración contínua (¿&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hudson&lt;/span&gt;, quizá?) que nos monitorizase los proyectos, ejecutando...&lt;/li&gt;&lt;li&gt;... &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;pruebas&lt;/span&gt; con &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JUnit, TestNG y/o Unitils&lt;/span&gt;, y...&lt;/li&gt;&lt;li&gt;... medidas de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;calidad&lt;/span&gt; del código como &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Eclipse Metrics, PMD&lt;/span&gt; (¡con &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;CPD&lt;/span&gt;!)&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;, Crap4J, Coverage&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;... pero escucharía comentarios y leería sobre herramientas para usar lo mejor posible :).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Algunas de estas decisiones se basan en la experiencia y otras por ahora sólo en expectativas. ¿Qué opináis?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Otra de mis dudas es el servidor de aplicaciones y el SGBD. En función de la escala supongo que habrá que elegir puntos intermedios desde Tomcat+MySQL hasta WebSphere+Oracle...&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6892953400974458649?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6892953400974458649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6892953400974458649'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/si-tuviese-que-organizar-una-empresa-de.html' title='Si tuviese que organizar una empresa de informática...'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1160641820339598909</id><published>2008-09-21T16:05:00.005+01:00</published><updated>2008-09-21T18:03:52.253+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jbpm'/><category scheme='http://www.blogger.com/atom/ns#' term='enhydra shark'/><category scheme='http://www.blogger.com/atom/ns#' term='jsfunit'/><category scheme='http://www.blogger.com/atom/ns#' term='richfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='javarebel'/><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Diseñando una arquitectura (Apéndice): Trabajo futuro</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;n este tiempo hemos ido dejando cosas por el camino y anotando "oportunidades de mejora". Algunas las incorporaremos en cuanto podamos, otras habrá que probarlas, otras quedarán para otros proyectos...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Todas las críticas y sugerencias adicionales serán bienvenidas, como siempre.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Objetivos:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Mejorar la productividad del desarrollo.&lt;/li&gt;&lt;li&gt;Reducir el desarrollo propio del framework al mínimo, maximizando el uso de herramientas open source disponibles.&lt;/li&gt;&lt;li&gt;Solventar o al menos atenuar las limitaciones de la plataforma (J2EE) y de JSF.&lt;/li&gt;&lt;li&gt;Facilitar la integración de librerías.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JSF 1.2 (+ RichFaces 3.2)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lo primero será migrar a JSF 1.2. Este estándar está estrechamente vinculado con el servidor de aplicaciones, y hacerlo exige migrar a SJSAS 9 (o al revés, como prefieras verlo, ya que tampoco se puede usar el 1.1 en el 9). No es un gran avance en sí mismo (se espera bastante de JSF 2, hay multitud de cosas inexplicablemente mejorables todavía en la actualidad), pero llevará consigo pasar a la rama 3.2 de RichFaces, lo cual sí es una gran mejora. Nuevos componentes, mejoras muy importantes en los actuales...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;JavaRebel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tener que reiniciar el servidor constantemente es un infierno. &lt;a href="http://www.zeroturnaround.com/javarebel/"&gt;Esta librería&lt;/a&gt; promete mejorar esto, minimizando la necesidad de reinicios mejorando la sustitución de clases y ficheros de configuración en caliente. Hay que probarlo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Pruebas orientadas a datos&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Probar el código de una aplicación de gestión implica conocer y manipular el estado de la base de datos. Estoy seguro de que ya hay soluciones para facilitar esto (¿TestNG, Unitils...?).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JSFUnit&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Quiero poder probar a nivel de vista, y &lt;a href="http://www.jboss.org/jsfunit/"&gt;JSFUnit&lt;/a&gt; sirve para esto. Por ejemplo, cuando me encuentre con un problema de visualización en una página, quiero poder programar (con un coste en tiempo bajo) una prueba que &lt;span class="Apple-style-span" style="font-style: italic;"&gt;demuestre&lt;/span&gt; que existe dicho problema, y que me sirva para comprobar que la solución efectivamente lo resuelve.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Motor de workflow&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Realizamos una formación en el motor &lt;a href="http://www.enhydra.org/workflow/shark/index.html"&gt;Enhydra Shark&lt;/a&gt;, y fue francamente decepcionante. Sí, se &lt;span class="Apple-style-span" style="font-style: italic;"&gt;podía&lt;/span&gt; hacer lo que dice que hace, pero no ayuda a realizar una aplicación. Al elegir un componte tan fundamental en una arquitectura no me vale con que proporcione &lt;span class="Apple-style-span" style="font-style: italic;"&gt;algo&lt;/span&gt; de valor añadido, debe ser &lt;span class="Apple-style-span" style="font-style: italic;"&gt;realmente&lt;/span&gt; productivo. Vimos que nos iba a dar más trabajo y problemas de lo que iba a aportar, y lo descartamos en favor de desarrollar uno propio. En la actualidad lo que hemos desarrollado nos permite implementar el diagrama de flujo de un modelo a nivel de base de datos. Sin programar una línea de código nuevo podemos hacer que un modelo pase por estados, controlar a nivel de lógica de negocio la seguridad de las acciones, asignar tareas automáticamente, delimitar plazos, realizar forks y joins, declarar la seguridad a nivel de propiedad (símplemente con las propiedades rendered y displayValueOnly en los componentes JSF el sistema calcula qué campos puede ver y/o editar un usuario) y un largo etcétera. La gran ventaja de "nuestro" motor con respecto al resto, aparte de poder hacer (casi) de todo sin programar una sola línea, declarando todo en base de datos, es que tenemos &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;componentes JSF&lt;/span&gt;. Mediante una simple etiqueta se pueden hacer cosas como listar las tareas pendientes, generar una botonera para ejecutar las acciones que el usuario puede hacer, mostrar el historial de la tramitación... Tener todo esto es un auténtico trabajo tangible que permite tener un flujo funcionando en una aplicación en muy poco tiempo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El desarrollo del mismo fue por imposición, pero creo que ha sido beneficioso (suelo decir que del desarrollo propio para el framework esto es lo único realmente útil). Sin embargo, no creo que desarrollarlo desde cero haya sido lo mejor. La decisión se tomó porque ya se había perdido demasiado tiempo con el Enhydra Shark como para plantearnos otras opciones, pero estoy casi seguro de que tiene que haber alternativas mejores. Tengo &lt;a href="http://www.jboss.com/products/jbpm"&gt;jBPM&lt;/a&gt; en el punto de mira. Si cumple mis expectativas, mi intención es, para nuevos horizontes (no pienso reemplazar lo existente en el Framework ya), adoptarlo y ampliarlo, que para algo es open source. Por ejemplo, hacer componentes JSF que reduzcan ese salto entre el interfaz y el modelo, principalmente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" font-weight: bold;font-size:24px;"&gt;Seam&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cuando se decidió la arquitectura del framework, &lt;a href="http://www.jboss.com/products/seam"&gt;Seam&lt;/a&gt; era un proyecto prometedor pero todavía inmaduro, como han demostrado los grandes cambios y mejoras incorporados en la 2. Por ello elegimos Spring, maduro, completo, y no nos hemos arrepentido en absoluto.&lt;/div&gt;&lt;div&gt;Sin embargo, a estas alturas la lista de características de Seam contiene todo lo que usamos de Spring, a la vez que complementa a JSF corrigiendo sus carencias. Lo que es más, está orientado a dar "en un paquete" toda la pila de librerías, desde Hibernate a RichFaces, e integrarlas a todos los niveles. También para nuevos horizontes (estoy muy contento con el uso que damos a Spring) mi objetivo es usarlo intensivamente. &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1160641820339598909?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1160641820339598909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1160641820339598909'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/diseando-una-arquitectura-apndice.html' title='Diseñando una arquitectura (Apéndice): Trabajo futuro'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-4870341475925366336</id><published>2008-09-21T14:58:00.003+01:00</published><updated>2008-09-21T16:05:19.684+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitectura'/><title type='text'>Diseñando una arquitectura (IV/IV): Conclusiones</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt;quí acaba el trayecto en el que he pretendido volcar prácticamente mis últimos dos años de trabajo.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;IV. Conclusiones&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Generales&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El uso de librerías más avanzadas con el fin de aumentar la productividad &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;exige más del programador&lt;/span&gt;. Cualquiera puede picar código a destajo, pero no todo el mundo tiene la misma facilidad para abstraerse y pensar en términos de capas, de objetos... No es sólo una cuestión técnica, por ejemplo, de "saber Hibernate". El uso de estas herramientas revaloriza la capacidad para trazar errores, para hacer código correctamente encapsulado, para aprender nuevas tecnologías... La &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;aptitud&lt;/span&gt; de los programadores es, por tanto, más importante que nunca.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obviamente también lo es la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;actitud&lt;/span&gt;. Entre las quince o veinte personas que se han enfrentado con el "nuevo framework" y el nuevo entorno de desarrollo hemos encontrado actitudes muy diferentes. Por ejemplo, con un nuevo IDE, los hay que en tres días se han aprendido todos los atajos para las acciones frecuentes, y los hay que dos años después siguen usando el ratón para guardar un fichero. Los hay que incluso llegan a trazar el código de las librerías en busca del error (alguno llegó a mirar código nativo de la JVM) y otros que insisten en redesplegar cuando algo no funciona, "por si acaso". Los hay que en el foro o por correo exponen el problema enseñando trazas, código, etc, y los hay que dicen "no me funciona".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La aptitud y la actitud son algo difícilmente controlable. Las medidas más importantes que se pueden tomar son &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;mejorar los procesos de selección de personal&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;formación&lt;/span&gt;, e &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;incentivar&lt;/span&gt;. En otra ocasión me extenderé más con la experiencia ganada en estos aspectos, quiero evitar otra entrada infinita como la anterior.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Entorno de desarrollo&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A lo largo de casi dos años ya nos hemos encontrado varios bugs en &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;MyEclipse&lt;/span&gt;, pero nada grave. Es un buen entorno de trabajo, aunque si no hubiésemos necesitado la integración de &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Matisse&lt;/span&gt; (no sé si ya habrá plugins gratuitos que lo integren, por aquél entonces no) yo me habría ceñido a Eclipse sin más. Fundamental el valor añadido que aportan otros plugins, como el&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;JadClipse&lt;/span&gt; para la ingeniería inversa, o &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;PMD&lt;/span&gt; y &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;FindBugs&lt;/span&gt; para la calidad del código. La integración con JSF, Spring o Hibernate me parece decepcionante. Los asistentes para añadir capacidades de dichas librerías a los proyectos me parecen innecesarios y conflictivos. No está muy claro cómo decir, por ejemplo, que un proyecto ya existente "es JSF" o "es Spring", los asistentes están muy orientados a cuando se parte desde cero.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eso sí, el &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;detector de conflictos en el código CVS es lamentable&lt;/span&gt;. Especialmente cuando trabajas con varias ramas, resolver los conflictos con él es un suplicio. A veces estoy recurriendo al Araxis Merge para solventar las carencias del Eclipse en este sentido.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tener que usar &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;SJSAS 8&lt;/span&gt; como servidor es un infierno. El problema no es los bugs que pueda tener (todas las aplicaciones los tienen), sino el soporte que existe en la comunidad open source sobre él. Las librerías están probadas y soportadas siempre sobre Tomcat y JBoss, los demás servidores sólo marginalmente. A menudo ni existe información (ni en la documentación ni en los foros) sobre otros servidores, y cuando hay suele estar obsoleta o incompleta. Además, el soporte técnico (la principal razón para utilizarlo) se suele lavar las manos cuando te encuentras con un problema, alegando que es un tema de la librería, no del servidor. En breve nos enfrentaremos a migrar a SJSAS 9, que esencialmente es el Glassfish 2, que sí es open source,  lo cual supongo que mitigará el problema.&lt;/div&gt;&lt;div&gt;No dudo que SJSAS sea un buen servidor, con buenas herramientas de administración, clustering y demás. Mientras todo funcione no hay problema. Sin embargo, cuando aparece un error, la sensación de desamparo es tremenda.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 18px; font-weight: bold;"&gt;Generalidades sobre las librerías&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cuando te bajes las librerías, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;bájate también el código fuente y configúralo en Eclipse al configurar las librerías&lt;/span&gt;. Esto te permitirá tener el &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;javadoc&lt;/span&gt; del código y &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;depurar&lt;/span&gt;. No es que vayas a modificar su código, pero cuando te encuentres con una excepción inesperada podrás trazar para localizar el problema. El trabajo de documentación y de tratamiento de excepciones en librerías Java de código abierto suele ser excelente, pero cuando no lo es, disponer de esto es impagable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El trabajo de&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; integración&lt;/span&gt; (incluyendo resolver los problemas que aparecen a posteriori) &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;de las librerías de vista&lt;/span&gt; (MyFaces, Tomahawk, Sandbox, Facelets y RichFaces) &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;en el SJSAS es problemático&lt;/span&gt;. Así como la convivencia de Spring e Hibernate es perfecta, el resto no lo es. Por favor, ¡integración de Facelets en JSF ya!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Algunos dicen que el framework tiene demasiadas librerías, pero yo opino que incluso le falta alguna. En vez de utilizar un &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;motor de workflow&lt;/span&gt; existente (jBPM, Enhydra Shark...) hemos desarrollado uno propio. Si bien creo que lo hecho está muy bien, IMHO ha sido un error. Habría sido mejor tomar uno existente y desarrollar sobre él para mejorar sus carencias.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 18px; font-weight: bold;"&gt;Hibernate&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ya me he expresado varias veces muy en favor de Hibernate, el cual &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;recomiendo encarecidamente&lt;/span&gt;. Aquí me centraré sólo en los puntos negativos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hibernate no es intrínsecamente lento ni devorador de memoria (de hecho, correctamente usado incluso puede optimizar ambos aspectos), pero hay que "atarlo en corto". Es muy fácil no darse cuenta y provocar que la carga de una página genere cientos de consultas. Abstraer el acceso a datos es fantástico, pero si no se pone cuidado es fácil que se vaya de las manos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El polimorfismo y la herencia desde el punto de vista de la programación es elegante y potente, pero genera consultas monstruosas. Úsese con moderación. Nuestro DBA me miró asustado al ver que una consulta ocupaba aproximadamente siete folios (espacio simple, fuente 11 aproximadamente :) ). Sin embargo, hay que admitir que el rendimiento de Oracle en estos casos es espectacular. Bastó con mejorar una vista (era de sólo lectura, así que "materializarla" fue una solución óptima) para que se ejecutase sin problemas de coste. Mi recomendación es exprimir Hibernate al máximo, haciendo el código lo más elegante y correcto posible, y optimizar a nivel de BBDD. Si aún así algo se vuelve lento, siempre se puede optimizar ese punto en concreto.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Algo similar a nuestros problemas con el (nulo) soporte a SJSAS ocurre con el combo Hibernate + Oracle, especialmente en la gestión de datos binarios. Sin embargo, afinando un poco con el driver y utilizando alguna mejora que ofrece Spring al respecto, no hay problema sin resolver.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;JSF&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Como ya hemos dicho, sólo es una base. Facelets es imprescindible (¡estándar ya!). RichFaces es una gran librería para Ajax.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-4870341475925366336?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4870341475925366336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4870341475925366336'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/diseando-una-arquitectura-iviv.html' title='Diseñando una arquitectura (IV/IV): Conclusiones'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7661177523748004157</id><published>2008-09-14T16:04:00.009+01:00</published><updated>2008-09-14T18:23:23.439+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitectura'/><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><category scheme='http://www.blogger.com/atom/ns#' term='pruebas'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Diseñando una arquitectura (III/IV): Implantación</title><content type='html'>&lt;span class="dropcaps"&gt;P&lt;/span&gt;ara explicar esta etapa, la palabra es &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;crisis&lt;/span&gt;. Pero no tanto la acepción extendida en la actualidad, sino el significado etimológico que recoge la Wikipedia&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;blockquote&gt;Coyuntura de cambios en cualquier aspecto de una realidad organizada pero inestable, sujeta a evolución; especialmente, la crisis de una estructura.&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;El éxito o fracaso de este cambio se producirá (no considero que ya se haya acabado este periodo de cambio) si hacemos una correcta gestión de la crisis. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;III. Implantación&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En este apartado expondré cómo afrontamos este cambio, los problemas encontrados y las soluciones aportadas, y también los errores. Las oportunidades de mejora quedarán para el apartado IV, de conclusiones. Me intentaré ceñir a los &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;hechos&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; del cambio&lt;/span&gt;, dejando otras consideraciones para otro momento.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Entorno de desarrollo&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El cambio del entorno de desarrollo consistía en dejar la combinación JDeveloper + OC4J como servidor local y SJSAS 8.1 en entorno de desarrollo compartido y sustituirlo por &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;MyEclipse + SJSAS 8.2 en local&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;Tras muchas pruebas vimos que la integración con el SJSAS tendría que ser mediante &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;dos despliegues&lt;/span&gt;: uno packaged (internamente es generación del war + despliegue) inicialmente y para redespliegues, y uno exploded (internamente es copia de binarios al directorio de despliegue del servidor). Sin uno o sin otro el servidor no se da cuenta de los cambios.&lt;/div&gt;&lt;div&gt;Para hacer la migración preparé un escueto &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;manual de instalación&lt;/span&gt; de ambas herramientas. Un mismo día hicimos que todos los desarrolladores (programadores y analistas) hiciesen el cambio. La verdad es que llevó bastante más de lo esperado. La instalación y configuración de ambos (adecuación al entorno interno y librerías), que por mi experiencia creo que se puede llevar a cabo en menos de media hora (yo lo he hecho, con un ordenador no especialmente rápido), en algunos casos rondó las dos horas, lo cual no me parece aceptable. Sin embargo, no recuerdo que ningún problema se debiese a otra cosa que no seguir las instrucciones. Redactarlas fue principalmente un ejercicio de repaso de lo hecho, que sirviese de guión para seguir todos los mismos pasos. Antes del cambio utilicé a un compañero de conejillo de indias, lo cual me sirvió para corregir los errores de la instalación, así que la versión definitiva usada estaba completa. IMHO ni siquiera debería haber escrito nunca el manual. La práctica totalidad de los desarrolladores somos ingenieros informáticos, un buen porcentaje ingenieros superiores (o en proceso de serlo), e instalar un IDE y un servidor no debería ser algo traumático. Sin embargo, quedó de manifiesto deficiencias en la formación (sin ánimo de ofender a nadie). Se puede salir de la carrera prácticamente sin programar, sin &lt;span class="Apple-style-span" style="font-style: italic;"&gt;cacharrear&lt;/span&gt;, lo cual hace que nuestras aptitudes prácticas estén sin entrenar. A menudo incluso cuesta discernir entre lo que es un problema en el entorno de desarrollo y lo que es un problema en el servidor. Recomendaría exigir un trabajo más conciencudo en el proyecto de fin de carrera, de forma que este sirviese al menos para conocer las herramientas que se va a emplear al salir al mercado laboral, pero como, al menos en la Universidad de Valladolid, a "la competencia" se le regala la matrícula de honor en el proyecto, pues me parecería injusto. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Antes de que surjan los trolls en los comentarios, por supuesto que hay ingenieros en telecomunicaciones realmente buenos, inteligentes, válidos y trabajadores, mucho mejores que muchos informáticos, pero el hecho es que a menos que insultes al tribunal durante la presentación, en esa carrera la nota por defecto del proyecto es matrícula de honor.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Una vez superado estos ligeros problemas iniciales, el día a día con estas herramientas ha tenido un problema: los redespliegues. No es algo exclusivo de estas herramientas, pero &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;tener que reiniciar (o incluso redesplegar) un servidor con gran parte de los cambios es una pérdida de tiempo grandísima&lt;/span&gt;. Pronto detectamos que la gente hacía demasiados redespliegues. A menudo cada vez que algo no funcionaba se hacía un redespliegue o un reinicio, "por si acaso". Cada uno puede llevar uno o dos minutos como mínimo, y si vas sumando al final es mucho tiempo perdido, especialmente porque el "por si acaso" nunca sirve para nada. Para evitarlo, distribuimos los &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;casos en los que&lt;/span&gt;, al menos con esta combinación de MyEclipse + SJSAS 8.2, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;es necesario hacer un reinicio o un redespliegue&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Si se añade, quita o modifica un método o atributo, o la declaración de una clase, el propio MyEclipse avisa de que es necesario reiniciar.&lt;/li&gt;&lt;li&gt;Si se modifican ficheros de JSF, Spring, Hibernate, Log4J, etc, es necesario reiniciar.&lt;/li&gt;&lt;li&gt;Si se modifica el web.xml, es necesario redesplegar.&lt;/li&gt;&lt;li&gt;En el resto de casos hacer otra cosa no servirá de nada. Si hay un problema, reiniciar o redesplegar no servirá de nada, así que ¡no lo hagas!&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Para mitigar este problema se optó por &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;orientar el desarrollo&lt;/span&gt;, hasta la capa de servicios, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;hacia las pruebas&lt;/span&gt;. Desarrollar orientado a pruebas no exige lentos reinicios o redespliegues de servidor, tan sólo relanzarla, que es mucho más rápido (aparte de las otras obvias ventajas).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El único problema grave que tuvo este cambio en sí (los problemas en la instalación fueron más sintomáticos que realmente costosos) fue el propio servidor. Casi nada (ni libreriás open source ni productos comerciales) tiene soporte para SJSAS. Todo se orienta a Tomcat y, si el producto es de JBoss, a su servidor. Comprendo que no es lo mismo para un administrador de un cluster de servidores Sun en producción tener SJSAS que tener Tomcat, pero para el desarrollador es un opción. Y desarrollar en Tomcat y después desplegar en SJSAS no es opción. Hay incompatibilidades, así, como suena. Basta con echar un vistazo a los foros para darse cuenta de ello.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Librerías del framework&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Antes de desgranar los hechos por capas, debemos hablar en general del "lote" (JSF+Spring+Hibernate). Yo no soy ni mucho menos un experto en estas tecnologías, ni disponíamos de nadie con una gran experiencia en ellas, así que mi papel era conseguir dominarlas al máximo para poder solucionar los problemas que apareciesen. Ninguno de los programadores ni analistas tenía experiencia con ninguna de ellas. Por ello en estos dos años de investigación (creo que es como se debe denominar a esta tarea) he metido las manos en harina al máximo.&lt;/div&gt;&lt;div&gt;Para facilitar el cambio tomamos las siguientes &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;medidas&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Inicialmente hicimos unas sesiones relámpago de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;introducción a estas tecnologías&lt;/span&gt;. Al menos deberían servir para responder a las preguntas "¿qué?", "¿para qué?" y "¿dónde me documento?" La pena es que sólo uno de los programadores que las siguió desarrolló con ellas en los siguientes meses (y además nos dejó en poco tiempo), por lo que cayeron en saco roto.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;La contratación de nuevo personal se orientó a gente con experiencia en ellas o, al menos, con experiencia de años en diferentes tecnologías. Eso provocó alguna rotación indeseada, pero puso de manifiesto que &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;es muy difícil conseguir personal realmente formado en tecnologías "avanzadas" de J2EE&lt;/span&gt;. Es difícil que a la llamada de "gente que sepa de Hibernate" aparezca gente, y aún en ese caso durante las entrevistas nos encontramos con muchos casos en los que en el CV aparecía dicha experiencia pero después no se sabía ni explicar qué era una LazyInicializationException.&lt;/li&gt;&lt;li&gt;Creación de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;wiki&lt;/span&gt; interno con documentación, FAQ, y guía de errores.&lt;/li&gt;&lt;li&gt;Todas las dudas se resolverían a través de un &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;foro&lt;/span&gt; en vez de mediante teléfono o correos. De esta forma todo quedaría documentado.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;Sobre la formación sólo puedo decir que no lo hicimos (o no lo pudimos hacer) como se debería. No dedicamos tiempo específico a formarnos, por lo que los problemas los ibamos resolviendo sobre la marcha. Tras esta experiencia me queda claro que &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;todo el equipo debe conocer en cierta profundidad las tecnologías implicadas, especialmente Hibernate&lt;/span&gt;, incluso aspectos internos de funcionamiento. Es deseable que cada proyecto cuente con &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;al menos una persona que realmente lo domine&lt;/span&gt;. Durante un desarrollo aparecen problemas complejos, no sólo errores, que no tienen una respuesta sencilla. Es fundamental contar con la capacidad de afrontarlos con solvencia. &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;No sólo hablamos de problemas técnicos, sino también problemas de concepto&lt;/span&gt;. No podemos aumentar la produtividad sin aumentar la complejidad, aunque sí se puede reducir el coste. Utilizar herramientas avanzadas es la principal razón de aumento de la complejidad, y no se puede suponer símplemente que adoptando nuevas tecnologías se va a mejorar el proceso. Esta adopción requiere una gestión, especialmente en formación, y tiene un coste inicial. Y en este caso no basta con aprender sobre la marcha. Eso no es productivo. Es imprescindible pararase a aprender inicialmente antes de empezar a desarrollar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hibernate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hibernate me sigue pareciendo sencillamente impresionante. Como con cualquier otra tecnología hay un coste de aprendizaje y todavía tiene algunos bugs y problemas, pero sigo opinando que no hay razón para no usarlo. Es una tecnología ya madura y contrastada.&lt;/div&gt;&lt;div&gt;Al emplear Hibernate hay dos problemas a solucionar: la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;formación&lt;/span&gt; del personal y problemas de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;integración&lt;/span&gt; con el SGBD específico. El primer punto está ya cubierto en el apartado anterior. Sobre el segundo, surgen problemas en la &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;combinación de Hibernate y Oracle&lt;/span&gt;. El driver de Oracle, según los desarrolladores de Hibernate, está plagado de bugs. Es especialmente conflictiva la &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;gestión de binarios (blobs, clobs...)&lt;/span&gt;. Recomendaciones al respecto:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Lo primero es fijar el driver de Oracle. Localizar cuál es el que funciona en nuestro entorno (en los foros de Hibernate se habla al respecto) y agarrarnos a él sin soltarlo. Nada de actualizarlo.&lt;/li&gt;&lt;li&gt;Para solucionar los problemas con los blobs, Spring aporta el OracleLobHandler que te hace olvidar los bugs que aparecen al combinar Oracle con Hibernate.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Otras &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;sugerencias&lt;/span&gt; aprendidas:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Usa Hibernate Validator para todas las validaciones de usuario. ¡DRY!&lt;/li&gt;&lt;li&gt;Usa Hibernate Annotations para configurar el mapeo relacional, mucho más cómodo que la configuración XML.&lt;/li&gt;&lt;li&gt;No te intentes adherir a EJB 3.0. Tiene limitaciones (consulta la documentación de Hibernate Annotations) con las que tarde o temprano te vas a encontrar.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Por último, en mi opinión, al contar con una herramienta así merece la pena &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;cambiar la forma de afrontar la creación del modelo de datos&lt;/span&gt;. Tradicionalmente, el analista debe crear el modelo de datos para soportar los datos, el cual será transformado por el diseñador en un modelo físico de datos, un modelo de tablas y relaciones entre ellas que utilizará la aplicación. Sin embargo, esto ni es cómodo ni encaja bien a la hora de trabajar con Hibernate. Aunque los puristas supongo que me desollarán por lo siguiente, creo que &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;hay que olvidar la creación del modelo de datos y pasar diréctamente al modelo de clases&lt;/span&gt;. No hagas diagramas. Haz diréctamente clases, y anótalas con @Entity, Hibernate hará el resto. Si puedes, utiliza claves surrogadas en vez de complejas claves compuestas. Con esto no quiero decir que no haya que tener en cuenta principios semejantes a los que se usan al crear el esquema de datos. Símplemente veo más operativo &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;generar el esquema a partir de las clases en vez de trabajar en hacer el esquema y después verse encorsetado por él a la hora de programar&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" font-weight: bold;font-size:18px;"&gt;Spring&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No recuerdo &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;ni un sólo problema&lt;/span&gt; real con Spring. Así como nuestra "guía de errores y excepciones" tiene infinidad de entradas en el apartado de Hibernate, ya que la transición de hacer SQL a mano a pasar a Hibernate es bastante compleja, la de Spring creo que está vacía. Usamos el módulo de IoC, el de seguridad, la gestión transaccional (programáticamente), y los añadidos que tiene para integración de otras librerías (Hibernate, servicios web...), al menos explícitamente. Ni siquiera la formación supuso un problema, ya que una vez se tiene organizado y configurado, basta con saber añadir e inyectar los beans en los xml para usarlo.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Es cómodo, útil, completo y maduro&lt;/span&gt;. Premia &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;buenas prácticas&lt;/span&gt; y además aporta &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;valor añadido&lt;/span&gt;, como publicación de servicios, inicialización de beans o planificación de tareas (mediante integración con librerías externas). Como queda claro, apuesta por la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;integración&lt;/span&gt; (lo cual queda claro cuando ves sus dependencias).&lt;/div&gt;&lt;div&gt;Lo único que lamento es la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;deficiente integración en el IDE&lt;/span&gt; (autocompletar es mejorable, escasa detección de errores) y que exija reiniciar el servidor al hacer cambios (cosa que tampoco ocurre tan a menudo).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JSF&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este no es el momento para criticar JSF, pero es imprescindible hacer una puntualización: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JSF no es un framework completo, sólo es una base (mejorable) sobre la que usar otras cosas&lt;/span&gt;. Si pretendes usar sólo lo estándar, no estás comprendiendo su finalidad.&lt;/div&gt;&lt;div&gt;Optamos por MyFaces + Tomahawk + Sandbox + RichFaces + Facelets. Hacer funcionar todo esto sobre SJSAS 8.x no es una tarea trivial. &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Sobre la versión 8 del servidor &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;no se puede usar JSF 1.2&lt;/span&gt;, estamos limitados a JSF 1.1.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;El servidor de aplicaciones trae su propia implementación&lt;/span&gt;, y no usa la de la aplicación símplemente con incluirla. En el wiki de MyFaces hay más información al respecto.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hacer &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;componentes&lt;/span&gt; con "trozos de página", algo utilísimo para reutilizar código a nivel de vista, sólo con JSF es una tarea hercúlea. Como mínimo, tres clases más la configuración en el faces-config. Para mitigar esto hay que usar &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Facelets&lt;/span&gt; (imprescindible, creedme).&lt;/li&gt;&lt;li&gt;Facelets exige tener un taglib de las librerías usadas, no basta con el tld que ya tienen. De las librerías open source habituales hay taglibs disponibles, pero tenemos alguna librería propietaria que no lo incluye.&lt;/li&gt;&lt;li&gt;Nula &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;gestión de excepciones&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Los errores a veces son crípticos. Facelets mejora algo esto, pero tampoco demasiado. Además, a veces aparecen problemas rarísimos de identificadores duplicados, solicitudes que se repiten, etc., sobre los que no hay respuesta clara.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Incompatibilidad entre navegadores&lt;/span&gt;. Lo habitual es trabajar en Firefox (por FireBugs y Web Developer Toolbar) y probar después sobre Internet Explorer, y es raro no llevarse sorpresas.&lt;/li&gt;&lt;li&gt;Olvídate de los &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;editores gráficos&lt;/span&gt;. No merecen la pena. Ni para los ficheros de configuración, ni para las páginas, ni para nada. Codifica. Escribe cada línea de tu código, no pierdas el tiempo con vendedores de humo. Deja los editores gráficos para los diseñadores, los desarrolladores debemos manejarnos entre código.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Aún con todo esto, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;RichFaces&lt;/span&gt; me parece una buena razón para usar JSF. Uno de los objetivos del cambio es incorporar Ajax al interfaz, y la forma en la que afronta esta librería este problema es muy buena, la mejor posible en JSF. Sus componentes son buenos, pero ya sólo el &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;a4j:support&lt;/span&gt; justifica su elección. Permite añadir Ajax a cualquier página JSF existente. "It just works". Nos hemos ido encontrando con bugs y problemas, pero el trabajo que se está haciendo en ella es muy bueno, y el soporte en el foro, también. Además, perfectamente documentado (en amplitud y profundidad), no como Dojo y otras tantas. Áltamente recomendable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Pruebas&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Las pruebas de una aplicación web de gestión tienen varios &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;problemas&lt;/span&gt; intrínsecos: el &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;estado de la base de datos&lt;/span&gt;, el &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;perfil del usuario&lt;/span&gt; en sesión, y &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;probar el interfaz&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;¿Cómo podemos probar si una búsqueda filtrada paginar funciona si no sabemos si hay datos? La solución que hemos adoptado en estos casos es combinada. Por un lado, podemos &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;consultar el estado actual de la base de datos&lt;/span&gt;. Por otro, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;modificamos su estado&lt;/span&gt; para hacer la prueba. Por ejemplo, ¿cómo saber si funciona el listado de 'tareas pendientes'? Primero consultamos las tareas pendientes de un usuario. Después hacemos una inserción que genere una tarea pendiente. Después hacemos otra consulta y comprobamos que hay una más de las que había antes. Por último, limpiamos lo insertado. Esto tiene dos problemas (al menos). La prueba es más compleja, aunque realmente no es un problema, porque como haremos una prueba de búsqueda y otra de inserción no tenemos más que programar una tercera que combine ambas, por lo que el coste de programar las pruebas apenas aumenta. Sin embargo, al hacerlo estamos metiendo una gran dependencia entre las pruebas, y eso es incorrecto.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Con el perfil del usuario el problema es similar. A menudo estamos obligados a asegurarnos de que existen usuarios con el perfil deseado, lo cual exige más control sobre el estado de la base de datos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tengo pendiente estudiar soluciones a este problema. Creo que TestNG y/o Unitils incorporan soluciones a esto, pero no he podido probarlo. De todas formas, siempre tendremos que especificar un estado concreto, con lo cual no estamos probando el sistema en cualquier caso, sino sólo en el especificado. Esto nos lleva a la discusión de cuánto probar, en la que no entraré en este momento :).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para probar el interfaz por aquél entonces había alguna alternativa, pero demasiado costosas para mi gusto. BadBoy y Selenium añaden funcionalidad de prueba al navegador, pero preparar las pruebas sigue siendo costoso. Reciéntemente ha aparecido JSFUnit, que todavía no he podido probar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hasta aquí la exposición de los hechos de los últimos años. Ha acabado siendo un conglomerado de problemas, apaños (¿por qué usar el término 'workaround' teniendo alternativas propias?), opiniones y decisiones, pero en el fondo es de lo que se compone la experiencia diaria. Próximamente, las conclusiones, y seguro que otros posts que amplíen problemas aquí enunciados.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Espero con avidez los comentarios y críticas sobre todo esto. Estos dos años están siendo un proceso de aprendizaje del que esta entrada es sólo un paso más.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7661177523748004157?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7661177523748004157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7661177523748004157'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/diseando-una-arquitectura-iiiiv.html' title='Diseñando una arquitectura (III/IV): Implantación'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-886903870554971819</id><published>2008-09-10T00:24:00.004+01:00</published><updated>2008-09-10T01:15:46.977+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax4jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='richfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitectura'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Diseñando una arquitectura (II/IV): Alternativas de solución</title><content type='html'>&lt;div style="text-align: justify;"&gt;Estaba claro que la situación era mejorable. La industria llevaba años generando grandes productos que no se estaban aprovechando. Ahora era el momento de elegir e implantar.&lt;/div&gt;&lt;span class="dropcaps"&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;II. Alternativas de solución&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;He de agradecer que se confió en mí plenamente -espero que no haya habido demasiados arrepentimientos sobre esto-. Se me exigió informes, pruebas de viabilidad, etc., pero la libertad de la que disfruté fue máxima. Se mantuvieron las siguientes restricciones:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;El entorno sería &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;J2EE&lt;/span&gt;. Java es con lo que se trabaja en todo el departamento, y así iba a seguir siendo. Esto favorece la movilidad de personal, facilita la formación, la reutilización de código, etc.&lt;/li&gt;&lt;li&gt;El SGBD sería &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Oracle&lt;/span&gt;. Es lo que se ha venido usando siempre, es de lo que se cuenta con personal cualificado, soporte, etc.&lt;/li&gt;&lt;li&gt;El servidor de aplicaciones sería el &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Sun Java System Application Server 8.1&lt;/span&gt;. Esto viene impuesto por la &lt;span class="Apple-style-span" style="font-style: italic;"&gt;superorganización&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Entorno de desarrollo&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Lo primero fue cambiar el entorno de desarrollo. Se venía usando JDeveloper por inercia, por ser lo utilizado en la &lt;span class="Apple-style-span" style="font-style: italic;"&gt;superorganización&lt;/span&gt;, pero no respondía a ninguna restricción real. La principal razón a la que nos agarramos para el cambio fue el servidor de aplicaciones. El JDeveloper integra OC4J y no había forma de hacerlo funcionar contra el SJSAS 8, que era lo deseable. Además, para cualquiera que haya usado otro IDE el OC4J es antediluviano. Aunque sobre el papel las características sean similares, en el día a día deja mucho que desear.&lt;/div&gt;&lt;div&gt;La política de la empresa es tender hacia el Open Source y a evitar gastos innecesarios, así que se barajó &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Eclipse y NetBeans&lt;/span&gt;. El primero es al desarrollo como Firefox a los navegadores: cuenta con infinidad de plugins útiles. El segundo, sin embargo, tiene un &lt;span class="Apple-style-span" style="font-style: italic;"&gt;killer&lt;/span&gt;, Matisse. Una buena parte del desarrollo se hace en aplicaciones standalone de escritorio, con swing, y al parecer Matisse es infinitamente mejor que otros diseñadores gráficos. Yo ni los había usado ni los iba a usar, y la decisión no me correspondía. Los responsables de ello lo querían a toda costa, pero también deseaban Eclipse, debido a ciertos plugins. Tras descartar usar dos entornos diferentes, se optó por &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;MyEclipse&lt;/span&gt;. Este entorno es Eclipse con ciertas mejoras desarrolladas específicamente para él, e integra Matisse, por lo que era una solución ideal. El coste es muy bajo y las primeras pruebas resultaron satisfactorias, así que fue el elegido. Eso nos permitió trabajar con el servidor adecuado, además de disfrutar de todo lo que se desarrolla para él.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Persistencia&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hibernate&lt;/span&gt; me parece LA razón para desarrollar en Java. Es potente, flexible, completo, eficiente... Desde que lo usé por primera vez no se me ocurre comenzar un desarrollo sin él. Escribir SQL &lt;span class="Apple-style-span" style="font-style: italic;"&gt;por defecto&lt;/span&gt; me parece algo totalmente atrasado e indeseable. Está claro que en ciertas ocasiones es lo mejor y se debe recurrir a ello, pero la potencia de poder guardar y recuperar árboles de información completos sin necesidad de escribir una consulta es inigualable. No sólo por el hecho de escribir las consultas, sino porque el no tener que escribirlas hace que no haya que modificarlas ni mantenerlas nunca. Esto, que parece perogrullo, no lo es. Si has escrito las consultas, un cambio en el modelo es dramático. Hibernate hace que ni siquiera sea necesario pensar en el modelo de datos. Piensa en el modelo de clases, piensa en términos de objetos, que es lo que la aplicación va a manejar en último término.&lt;/div&gt;&lt;div&gt;A día de hoy la aplicación que ha servido de arranque a esta nueva infraestructura gestiona datos de unas 140 tablas de varios esquemas, tanto propios como comunes. Sin Hibernate esto no habría sido posible.&lt;/div&gt;&lt;div&gt;Toplink es una alternativa similar, pero por lo que pude leer, más limitado. Se ciñe más al estándar (o el estándar a él), asumiendo ciertas limitaciones que Hibernate se salta mediante extensiones propias.&lt;/div&gt;&lt;div&gt;Hay otros motores diferentes que también son viables, notablemente iBatis. Sin embargo, la productividad que se obtiene no tiene nada que ver.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unido a Hibernate se adoptaron otros proyectos hermanos: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hibernate Validator&lt;/span&gt; e &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hibernate Annotations&lt;/span&gt;. El primero permite definir validaciones mediante anotaciones en los modelos, y el segundo, incorporar la configuración de persistencia en los propios modelos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Middleware&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Por aquél entonces la elección natural era &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Spring&lt;/span&gt;. Era ya un framework completo, estable, probado... Google sacó su Guice más tarde, y Seam acababa de nacer. Spring nos resolvería la organización de la capa de lógica de negocio, simplificaría las pruebas, servicios web...&lt;/div&gt;&lt;div&gt;El uso de Spring nos llevó además al uso de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Acegi&lt;/span&gt; (ahora llamado &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Spring Security&lt;/span&gt;) como sistema de seguridad. Este, a su vez, a instalar un servidor &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;CAS&lt;/span&gt;. Todo esto nos ha permitido implantar un sistema de &lt;span class="Apple-style-span" style="font-style: italic;"&gt;single sign on&lt;/span&gt; del que se llevaba hablando mucho tiempo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Pruebas&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Con las pruebas tiramos por lo directo: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JUnit 4&lt;/span&gt;. Había oído hablar de otras alternativas, pero hasta la fecha en la organización no se programaban pruebas en absoluto, así que nos contentaríamos con que consiguiésemos acostumbrarnos a usar este sistema con cierta soltura.&lt;/div&gt;&lt;div&gt;Adicionalmente pronto vimos que sería conveniente el uso de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Unitils&lt;/span&gt;. Por aquel entonces Spring no soportaba JUnit 4 correctamente, y esta librería facilitaba la inyección de los beans.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-size: 18px; "&gt;Vista&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Otra de las grandes justificaciones para el cambio fue la introducción de Ajax, como valor añadido para los usuarios. De nada nos serviría hacer mejor "las tripas" de la aplicación si el usuario no veía novedades.&lt;/div&gt;&lt;div&gt;IMHO (como siempre ;) ) si piensas en &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Ajax &lt;/span&gt;en Java tienes que pensar en &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JSF&lt;/span&gt;. Al menos por aquél entonces. En mi opinión, el planteamiento de orientación a componentes de JSF lo hace perfecto para esa tecnología. Para explicar esta opinión, siempre hablo de Struts como división "vertical" y JSF como "horizontal". Lo natural es que una solicitud en Struts vaya a un Action que realice un procesamiento y muestre una página (imagino esta generación del código como un proceso de arriba a abajo).  En JSF, sin embargo, "trozos (horizontales) de página" tienen entidad propia. Tienen comportamiento y orígenes de datos propios. Está claro que con ambos sistemas se puede hacer, y de forma correcta, pero por aquél entonces parecía que lo más adecuado era JSF.&lt;/div&gt;&lt;div&gt;Como implementación del estándar se optó por &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;MyFaces&lt;/span&gt;, debido principalmente a que un componente (que posteriormente se descartó), FCKFaces, dependía de él. Sobre MyFaces usamos también &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Tomahawk&lt;/span&gt; y &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Sandbox&lt;/span&gt;, que incorporan componentes interesantes. Pronto quedó claro que &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Facelets&lt;/span&gt; era una decisión obligada al hacer JSF (aunque nunca he dejado de echar de menos Tiles, que junto al Validator me parecían la verdadera razón para usar Struts). Para hacer pseudocomponentes con "trozos" de páginas es muy útil, y también para organizar las páginas como plantillas (aunque no es ni de lejos tan potente como es Tiles). Todo esto estamos hablando de JSF 1.1, debido a la versión del servidor.&lt;/div&gt;&lt;div&gt;La gran duda vino a la hora de elegir la librería Ajax. Tras dar tumbos entre varias opciones quedó claro que había dos grandes contendientes: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Ajax4JSF (con RichFaces)&lt;/span&gt; e &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;ICEFaces&lt;/span&gt;. ICEFaces tenía un conjunto de componentes mayor, más completo. Por el contrario, Ajax4JSF me parecía más flexible. Ambos tenían una intensa actividad. El ritmo de mejoras de Ajax4JSF parecía mayor, debido principalmente a sus obvias carencias respecto a la competencia (ni tenía un componente de calendario por aquél entonces). Ambos estaban bajo la tutela de JBoss, así que la continuidad parecía garantizada. A la hora de probarlos, éste no me dio ningún problema al combinarlo con otras librerías, mientras que ICEFaces sí. Al ser incompatibles entre sí, opté por el primero, aunque ICEFaces seguramente también habría sido una decisión válida. Para las cosas en las que estas librerías se quedaban cortas las completamos con componentes hechos con Facelets encapsulando código de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Dojo&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Por tanto, íbamos a pasar de JDeveloper con OC4J y servlets a la vieja usanza a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;MyEclipse&lt;/span&gt; sobre &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;SJSAS 8.1&lt;/span&gt; y&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; Oracle&lt;/span&gt;, desarrollando con &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hibernate, Spring, JUnit, JSF y Ajax4JSF/RichFaces&lt;/span&gt;. Está claro que el cambio iba a ser grande. En la siguiente entrega iremos recapitulando sobre los problemas que nos han aparecido al hacerlo, los aciertos y los errores.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-886903870554971819?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/886903870554971819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/886903870554971819'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/diseando-una-arquitectura-iiiv.html' title='Diseñando una arquitectura (II/IV): Alternativas de solución'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8637069532227126520</id><published>2008-09-08T10:15:00.009+01:00</published><updated>2008-09-08T11:41:41.440+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitectura'/><title type='text'>Diseñando una arquitectura (I/IV): Estudio de la Situación Actual</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;ace aproximadamente año y medio me embarqué en lo que &lt;strike&gt;está siendo&lt;/strike&gt; ha sido mi experiencia profesional más compleja, importante e interesante: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;mejorar la forma de desarrollar aplicaciones web de una organización&lt;/span&gt;. Es un buen momento para mirar atrás.&lt;div&gt;Lo haré en cuatro entradas:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;I&lt;/span&gt;: estudio de la &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;situación actual&lt;/span&gt; (actual por aquél entonces, claro).&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;II&lt;/span&gt;: selección de las &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;alternativas de solución&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;III&lt;/span&gt;: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;implantación&lt;/span&gt; de la solución.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;IV&lt;/span&gt;: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;conclusiones&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;0. Antecedentes&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En los últimos años había estado trabajando con &lt;span style="font-weight: bold;"&gt;tecnologías J2EE&lt;/span&gt;, tanto profesionalmente como "en casa", para proyectos propios. Anteriormente había hecho alguna cosa en PHP, y me gustaba mantenerme al día de las &lt;span style="font-weight: bold;"&gt;novedades de la industria&lt;/span&gt; (RoR, Phyton...), aunque no le pudiese dedicar tiempo en profundidad. En general, todo para, en mayor o menor medida, aplicaciones de gestión de datos (quien esté buscando sistemas de tiempo real o simuladores aeroespaciales me temo que tiene que cancelar su suscripción a este sitio).&lt;br /&gt;De esta experiencia formé una serie de &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;axiomas&lt;/span&gt; que suelo tomar como ciertos (aunque al estudiar informática la conclusión que te queda es que la única respuesta que siempre es válida es 'depende'):&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;La &lt;span style="font-weight: bold;"&gt;separación entre capas&lt;/span&gt; es una Cosa Buena:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Debe haber una capa de acceso a datos "tonta", que no tome decisiones y que símplemente sirva para acceder a bases de datos. Debe tener esencialmente 4 métodos (buscar, insertar, actualizar y borrar), salvo añadidos por eficiencia.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;La capa de lógica de negocio, por encima de la de datos y por debajo de la de presentación, es en la que se programa todo lo que aparece en las especificaciones, desde el flujo de la aplicación al control de datos ("quién puede ver/editar qué en cada momento").&lt;/li&gt;&lt;li&gt;Las dependencias van hacia abajo, los datos hacia arriba.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No te repitas&lt;/span&gt; (DRY).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Corolario: no cortapegues (mejor: &lt;span style="font-weight: bold; font-style: italic;"&gt;¡¡NO CORTAPEGUES!!&lt;/span&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Para aplicaciones pequeñas, PHP o RoR o similar, para aplicaciones grandes, J2EE&lt;/span&gt;.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Por favor, no empecemos un flamewar aquí. Ya sé que Flickr, por ejemplo, es PHP y un montón de ejemplos más. Sin embargo, intenta hacer consumir a algo que no sea Java o .Net unos cuantos servicios web de terceros y verás lo "estándar" que son. Sí, con PHP puedes hacer OO y otro buen montón de buenas prácticas, pero si ya es difícil mantener el código bajo control con Java, no quiero ni pensar lo que ocurre con otros. Por no hablar de las herramientas, claro... Fin del tema :). Para discutir sobre esto, otro día :).&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Hacer páginas con etiquetas es bueno (claridad, uso de librerías de componentes...), meter código Java en las JSPs es malo: inmantenibilidad, dificultad para trazar errores...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ajax es bueno&lt;/span&gt;, hecho con Javascript a mano puede no estar mal, pero si tienes una librería que te lo proporcione es mucho mejor.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Esto tiene un corolario: &lt;span style="font-style: italic;"&gt;ajaxificar los datos (posiblemente) es más eficiente, ajaxificar el interfaz es (posiblemente) más productivo&lt;/span&gt;. Escribir Javascript a mano (o con con Dojo, por ejemplo) suele llevar a hacer solicitudes Ajax que devuelvan datos. Esto consume menos recursos. Sin embargo, usar librerías de servidor (Ajax4JSF, ICEFaces...) suele llevar a que lo que se solicita son "trozos del interfaz". Esto no es siempre cierto (GWT, por ejemplo, es una excepción) pero era lo más habitual por aquel entonces.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;I. Estudio de la situación actual&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Corrían &lt;span style="font-weight: bold;"&gt;finales de 2006&lt;/span&gt;. Struts (Action, 1) comenzaba a ser considerado &lt;span style="font-style: italic;"&gt;demodé&lt;/span&gt;, y Ajax era lo que tenías que decir en una entrevista si querías atraer la atención. JSF seguía con su mala salud de hierro, como ahora. Una miríada de frameworks web (Spring Web, Wicket, Web Works, Tapestry...) esperaban que comenzase a morir de verdad para regodearse sus despojos. Microsoft, tras la guerra con Sun, había publicado .NET, y la pregunta entre todos los encorbatados era ¿J2EE o .NET?. Dojo era la librería Javascript por excelencia, con sus estándares de no documentar (y si documentas, hazlo mal, sin actualizar y sin completar). Si querías mantener una conversación geek tenías que saber que lo &lt;span style="font-style: italic;"&gt;cool&lt;/span&gt; era Ruby On Rails, que Google había roto todas las convenciones con GWT.&lt;br /&gt;&lt;br /&gt;Al llegar a la nueva organización me encontré con una situación... poco habitual. Mientras el resto del mundo se empeñaba en optimizar la productividad y mejorar la calidad del desarrollo mediante librerías Java, o diréctamente renegaban del mundo J2EE para salir a otras alternativas, allí se seguía desarrollando como hablaban los manuales de 5 años atrás: &lt;span style="font-weight: bold;"&gt;servlets y JSPs (¡o &lt;span style="font-style: italic;"&gt;sólo&lt;/span&gt; JSPs!)&lt;/span&gt;. Estamos hablando de un entorno con grandísimas restricciones y los responsables de la arquitectura de las aplicaciones estaban en gran medida con las manos atadas. La &lt;span style="font-style: italic;"&gt;superorganización&lt;/span&gt; (la casa matriz, la "nave nodriza", aquellos de quien dependíamos) imponía su ley (muchos, en mi modesta opinión, debidos al &lt;a href="http://www.juanjonavarro.com/masquecodigo/2004/01/07/el-sindrome-nih-not-invented-here"&gt;síndrome NIH&lt;/a&gt;), con sus &lt;span style="font-weight: bold;"&gt;problemas&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Desarrollo con una versión bastante antigua de&lt;span style="font-weight: bold;"&gt;&lt;/span&gt; un IDE:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;El cliente CVS era muy malo y problemático. Eso no era un problema para la &lt;span style="font-style: italic;"&gt;superorganización&lt;/span&gt; porque ellos no usaban ningún repositorio de código para trabajo compartido (así hasta el 2008, increible pero cierto), pero sí para nosotros, y eso nos hacía tener que usar un cliente externo.&lt;/li&gt;&lt;li&gt;Desarrollábamos sobre el OC4J integrado, que no era el de producción.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Servidor propietario, por lo que al no ser libre apenas hay documentación ni soporte sobre él.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Uso de &lt;span style="font-weight: bold;"&gt;framework propio&lt;/span&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Clases que generan código html (había que hacer cosas como new DropDown() en las jsps).&lt;/li&gt;&lt;li&gt;Diseño en una capa (todo en JSPs), llegando al extremo de programar SQL en las JSPs.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Aquí hay que decir que en la organización se hizo un diseño MVC que simulaba la estructura de Struts, de forma que nuestras aplicaciones sí seguían dicho patrón (aunque las de la superorganización no).&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Wrappers para clases existentes (un envoltorio, por ejemplo, para Connection, que impide obtener el objeto propiamente dicho. En resumen, envoltorios limitados de clases existentes.&lt;/li&gt;&lt;li&gt;No disponíamos del código fuente.&lt;/li&gt;&lt;li&gt;Documentación sin actualizar.&lt;/li&gt;&lt;li&gt;Ninguna librería "estándar": ni siquiera Log4J, así que ni hablar de cosas como Hibernate, Struts, Commons-X...&lt;/li&gt;&lt;li&gt;Dependencia (oculta, sin documentar), de variables de sesión.&lt;/li&gt;&lt;li&gt;Las aplicaciones sólo funcionaban en Internet Explorer.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Estas restricciones habían llevado a otras &lt;span style="font-weight: bold;"&gt;malas prácticas adicionales&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Se repetía muchísimo código, por una mezcla de los problemas y restricciones impuestos y descuido propio. Ejemplos:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Las clases de acceso a datos tenían tantos métodos de consulta como páginas, así que la separación entre capas era pobre.&lt;/li&gt;&lt;li&gt;Cortapega entre páginas en vez de inclusión.&lt;/li&gt;&lt;li&gt;Cortapega entre clases en vez de agregación o herencia.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Muchas validaciones de datos de usuario (sólo) en Javascript.&lt;/li&gt;&lt;/ul&gt;Como podéis imaginar, la situación actual chocaba frontalmente con mi visión del desarrollo de aplicaciones web (y de la informática en general). Conviví con todo esto en el desarrollo de una aplicación, en papel de analista. Es cierto que las cosas &lt;span style="font-style: italic;"&gt;iban saliendo&lt;/span&gt; así, pero no creo que esta fuese la mejor forma de hacerlo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Se genera código de mala calidad, inmantenible. Seguramente este problema habría sido mucho mayor de no ser porque la naturaleza de muchas aplicaciones desarrolladas era casi de usar y tirar, con un ciclo de vida muy corto (uno o dos años de vigencia). Sin embargo, por ejemplo, la aplicación con la que comencé ya está sufriendo estos problemas. Comenzó con el objetivo de ser una aplicación pequeña y simple y desarrollada rápidamente, y las mejoras que se le están metiendo están provocando problemas que no tendríamos con otro tipo de desarrollo.&lt;/li&gt;&lt;li&gt;Todo se hace a medida para cada ocasión (lo más sangrante es escribir una SQL para cada situación, un simple cambio de nombre de una columna podía llegar a ser un cambio dramático).&lt;/li&gt;&lt;/ul&gt;Tras esta primera aplicación se me dio la oportunidad de hacer una propuesta de un diseño nuevo, una &lt;span style="font-weight: bold;"&gt;nueva arquitectura&lt;/span&gt; para nuestras aplicaciones partiendo de cero, una nueva forma de trabajar. Este será el contenido de los siguientes posts. Como anticipo del último, puedo decir que &lt;span style="font-weight: bold;"&gt;estoy satisfecho con las decisiones tomadas, pero no del todo con los resultados&lt;/span&gt;, así que hay que recapitular en &lt;span style="font-weight: bold;"&gt;qué cosas hemos hecho mal&lt;/span&gt;. Podéis también ir imaginando el contenido del post siguiente al último ;).&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/4170768470549625640-8637069532227126520?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8637069532227126520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8637069532227126520'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/diseando-una-arquitectura-iiv-estudio.html' title='Diseñando una arquitectura (I/IV): Estudio de la Situación Actual'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-137213748519137022</id><published>2008-09-02T21:47:00.002+01:00</published><updated>2008-09-02T22:08:57.152+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='google chrome'/><title type='text'>Google Chrome: primeras pegas</title><content type='html'>&lt;span class="dropcaps"&gt;M&lt;/span&gt;icropost con las primeras pegas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Obviamente no soluciona el handicap de que Windows esporádicamente se congele y no puedas ni moverte entre ventanas, por mucho que sean procesos independientes.&lt;/li&gt;&lt;li&gt;No es Firefox, así que no tienes las extensiones. De hecho, &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95695&amp;amp;topic=14683"&gt;por ahora no admite extensiones&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;No encuentro que se pueda ver a pantalla completa. Ni F11, ni CTRL/alt/shift+f . La ayuda no devuelve nada por "pantalla completa", ni la &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95743"&gt;lista de atajos&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A priori me gustaba más el uso de motores de búsqueda de Firefox, con CTRL+arriba/abajo. De las &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95655&amp;amp;topic=14676"&gt;opciones existentes&lt;/a&gt; la primera no me convence porque me exige poner el nombre del buscador, y la segunda porque me obliga a personalizar y aprender palabras clave. Habitualmente tengo unos diez motores, no más, y moverme entre ellos con el cursor es suficientemente rápido.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Un último apunte:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Con Shift+Esc se puede ver el administrador de tareas, para gestionar los procesos. En estos momentos GMail me consume 31MB, lo mismo que el incremento que noto en Firefox cuando lo abro.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;PD: mil perdones a los que se han ofendido por el spam en meneame ;)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-137213748519137022?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/137213748519137022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/137213748519137022'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/google-chrome-primeras-pegas.html' title='Google Chrome: primeras pegas'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-2995713954344360791</id><published>2008-09-02T20:33:00.007+01:00</published><updated>2008-09-02T21:26:48.926+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='google chrome'/><title type='text'>Google Chrome: segundas impresiones</title><content type='html'>&lt;span class="dropcaps"&gt;S&lt;/span&gt;egundas impresiones&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1.- La tendencia a quitar el tradicional menú de opciones me descoloca, son muchos años conviviendo con él. La solución que aportan las aplicaciones de Microsoft, que aparezca al pulsar Alt, me sabe a chapuza, y me parece que las ventanas son poco más que skins. Chrome ha optado por botones en un lateral. Más elegante, pero hay que acostumbrarse para no tener que buscarlo. La ganancia en limpieza merece la pena, de todas formas.&lt;/div&gt;&lt;div&gt;2.- El historial es una pestaña, las descargas otra... y todas con buscadores.&lt;/div&gt;&lt;div&gt;3.- Las opciones no dan mucho de sí. Las mínimas e imprescindibles. Menos que Firefox o Internet Explorer, muchísimas menos que Opera.&lt;/div&gt;&lt;div&gt;4.- La sensación es "Safari meets Google": apariencia limpia, eficiente.&lt;/div&gt;&lt;div&gt;5.- Han respetado los atajos de Firefox :).&lt;/div&gt;&lt;div&gt;6.- La omnibox muestra resultados más elaborados que la tradicional sugerencia ordenada alfabéticamente. Supongo que cuanto más se use, más útil será.&lt;/div&gt;&lt;div&gt;7.- nhpatt, un amiguete, me sugiere esta prueba: http://nontroppo.org/timer/progressive_raytracer.html.  Chrome acaba el full render en 19.22 segundos, Firefox en 667 (habría que hacer muchas pasadas para ser estrictos, pero nos permite hacer una idea del orden de magnitud de la mejoría). Por supuesto, el resto de pestañas en Firefox no están operativas, mientras que en Chrome sí. PD: nhpatt me pasa una media, tras 10 pasadas, de unos 14.8 segundos, con poquísima desviación (menos de un segundo). La media de Opera en esas condiciones es de 17 segundos aproximadamente.&lt;/div&gt;&lt;div&gt;8.- Me ha importado la configuración de buscadores personalizados (lo uso muchísimo), hasta el punto de que el omnibox me está usando un traductor para buscar. He tenido que editar la configuración de buscadores. El método del Firefox de alternar entre ellos pulsando ctrl me parecía comodísimo, &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95655&amp;amp;topic=14676"&gt;lo que cuentan en la ayuda no me parece tan claro&lt;/a&gt;. Ya veremos...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PD: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;conclusiones de hoy&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mientras era (probablemente justamente) trolleado en meneame (por autopostear una noticia basada en los primeros cinco minutos con una herramienta) he seguido probándolo y va realmente bien. Ningún problema con ninguna página. Estoy con el video de la presentación, mientras abro de golpe unas veinte pestañas (10-30MB cada una), y todo funciona maravillosamente bien. Esto son sólo unas primeras impresiones, pero no pueden ser mejores (con la salvedad de los motores de búsqueda, estaba muy cómodo con los de Firefox, hay que ver los nuevos más en profundidad).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-2995713954344360791?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2995713954344360791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2995713954344360791'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/google-chrome-segundas-impresiones.html' title='Google Chrome: segundas impresiones'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-566206345419880989</id><published>2008-09-02T20:22:00.001+01:00</published><updated>2008-09-02T20:22:39.305+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='google chrome'/><title type='text'>Primeras impresiones con Google Chrome</title><content type='html'>&lt;span class="dropcaps"&gt;P&lt;/span&gt;rimeras impresiones:&lt;div&gt;&lt;ol&gt;&lt;li&gt;Se ha descargado e instalado sin problemas en un visto y no visto, importando mi configuración de Firefox.&lt;/li&gt;&lt;li&gt;Tengo tres pestañas (la de inicio, la de presentación y esta con blogger), y 4 procesos. En total consumen aproximadamente 95MB. Firefox, con lo mismo, 60MB. En el comic ya advertían que el modelo una pestaña-un proceso tendría más sobrecarga inicial. A mí me vale si no acaba ocupando lo que ocupan el resto (¿he oído Internet Explorer?) una vez he cerrado todas.&lt;/li&gt;&lt;li&gt;El &lt;span class="Apple-style-span" style="font-style: italic;"&gt;look&lt;/span&gt; de las ventanas es  Vista... pero optimizando. Nada de bordes laterales o inferiores, y las pestañas se colocan en la barra del título, que es más pequeña que la estándar en XP. Muy limpio.&lt;/li&gt;&lt;li&gt;La página de marcación rápida contiene tanto enlaces frecuentes como las últimas búsquedas.&lt;/li&gt;&lt;li&gt;El Organizr del Flickr va MUY rápido, y se nota que no provoca que el resto del navegador se arrastre... El Javascript es la clave y la razón de ser de Chrome, está claro...&lt;/li&gt;&lt;li&gt;Moverte entre pestañas no es rápido, es instantáneo.&lt;/li&gt;&lt;li&gt;El Flash funciona desde el primer momento. La página del Marca nunca ha estorbado menos.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Esto para abrir boca, en breve, más...&lt;/div&gt;&lt;/div&gt;&lt;span class="dropcaps"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-566206345419880989?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/566206345419880989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/566206345419880989'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/primeras-impresiones-con-google-chrome.html' title='Primeras impresiones con Google Chrome'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-2185783778559351350</id><published>2008-09-02T18:53:00.005+01:00</published><updated>2008-09-02T19:29:26.962+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='google chrome'/><title type='text'>Google Chrome: el sistema operativo de la web</title><content type='html'>&lt;span class="dropcaps"&gt;T&lt;/span&gt;odos sabemos que un navegador no tiene nada que ver con el concepto tradicional de sistema operativo, pero si las aplicaciones siguen la tendencia de ponerse en la web &lt;span style="font-weight: bold;"&gt;el navegador será la plataforma de ejecución de nuestras aplicaciones&lt;/span&gt;.&lt;br /&gt;Ese es el motivo por el que Google (va a) publica(r) Chrome, y lo dejan entrever en la página 4 del &lt;a href="http://www.google.com/googlebooks/chrome/index.html"&gt;comic promocional&lt;/a&gt;: "we're applying the same kind of process isolation you find in modern operative systems".&lt;br /&gt;El comic enseña otras cosas interesantes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Al compilar el navegador un bot lo prueba contra "millones de páginas". ¿Os imaginais unas &lt;span style="font-weight: bold;"&gt;pruebas &lt;/span&gt;que tengan &lt;span style="font-weight: bold;"&gt;como entrada &lt;/span&gt;posible &lt;strike&gt;la web entera&lt;/strike&gt; &lt;span style="font-weight: bold;"&gt;las n millones de páginas más usadas&lt;/span&gt;?&lt;/li&gt;&lt;li&gt;Han hecho una &lt;span style="font-weight: bold;"&gt;máquina virtual Javascript que es un compilador JIT a código máquina&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;La '&lt;span style="font-weight: bold;"&gt;omnibox&lt;/span&gt;': aplican el conocimiento aprendido de cómo la gente usa el buscador para renovar cómo funciona la barra de urls. Tiene pinta de ser terriblemente simple y terriblemente útil.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modo "sigiloso"&lt;/span&gt; para no dejar traza de lo que se hace.&lt;/li&gt;&lt;li&gt;Colleja al &lt;span style="font-weight: bold;"&gt;modelo de seguridad &lt;/span&gt;de Vista, que permite leer hacia arriba en los niveles de seguridad, a pesar de lo sensible que sea la información. Chrome, sin embargo, no se basará en niveles predeterminados, sino en lo que el usuario solicita explícitamente. &lt;span style="font-style: italic;"&gt;De nuevo se comparan con un SO, no con un navegador&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Aislamiento a los plugins en un proceso aparte&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Listas negras.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Las mejoras desde el punto de vista del desarrollador las van a seguir integrando en Google Gears&lt;/span&gt;, que Chrome incorpora. Así, este puede que vaya a ser el mejor navegador, pero Gears seguirá mejorando todos. Pero claro, si Chrome ofrece un rendimiento que los otros no tienen, o mejoran o Gears se arrastrará en ellos...&lt;/li&gt;&lt;li&gt;En la página 36 dejan claro que &lt;span style="font-weight: bold;"&gt;creen en el Open Source, no en los estándares&lt;/span&gt; (al menos no como "unificadores"). Traducción personal: "los estándares son una forma de ayudar a todos los navegadores a ser mejores. El equipo ha hecho cosas interesantes en velocidad, estabilidad, interfaz de usuario, como la nueva página de pestañas. Algunas se pueden convertir en estándares, otras no. Pero como todo es open source, los desarrolladores de los otros navegadores pueden coger lo que quieran".&lt;/li&gt;&lt;ul&gt;&lt;li&gt;En mi opinión esto es cierto... en parte. Si se "desestandariza" lo que hacen los navegadores (en la práctica eso ocurre), las páginas no se comportan igual. Sin embargo, IMHO es el planteamiento correcto. Los estándares, en la práctica, son lentos y sometidos a burocracia e intereses particulares.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;A ver qué nos depara... Leer el comic me ha dado una gran envidia. ¡Cómo debe ser trabajar en Google ampliando los límites de la web en vez de maltrabajar con sus limitaciones!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-2185783778559351350?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2185783778559351350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2185783778559351350'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/09/google-chrome-el-sistema-operativo-de.html' title='Google Chrome: el sistema operativo de la web'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6060784922397608648</id><published>2008-01-10T16:55:00.000Z</published><updated>2008-01-10T17:02:56.550Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='boeing'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><title type='text'>Idea Peregrina #2: conectar la red de un avión a Internet</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;eo vía &lt;a href="http://barrapunto.com/"&gt;Barrapunto&lt;/a&gt; una &lt;a href="http://www.wired.com/politics/security/news/2008/01/dreamliner_security"&gt;noticia en Wired&lt;/a&gt; que dice que hay una &lt;a href="http://barrapunto.com/articles/08/01/10/1040200.shtml"&gt;potencial vulnerabilidad en los Boeing 787&lt;/a&gt; porque ¡la red que proporciona Internet a los pasajeros está conectada con la de control del avión!&lt;br /&gt;&lt;blockquote&gt;The computer network in the Dreamliner's passenger compartment, designed to give passengers in-flight internet access, is connected to the plane's control, navigation and communication systems, an FAA report reveals.&lt;/blockquote&gt;Por amor de Dios... Nos hacen descalzarnos antes de entrar un avión ¡y luego conectan su red de control a la de los usuarios, que además se conecta a Internet!&lt;br /&gt;Ni firewalls, ni medidas de seguridad, ni nada. Eso es un sinsentido. ¿Para qué? ¿Quién permite algo así?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6060784922397608648?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6060784922397608648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6060784922397608648'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2008/01/idea-peregrina-2-conectar-la-red-de-un.html' title='Idea Peregrina #2: conectar la red de un avión a Internet'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7106947634027849318</id><published>2007-12-20T06:44:00.000Z</published><updated>2007-12-20T07:03:51.918Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='informática'/><category scheme='http://www.blogger.com/atom/ns#' term='uva'/><category scheme='http://www.blogger.com/atom/ns#' term='universidad'/><title type='text'>Fracaso académico en Informática en la Universidad de Valladolid</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;eo hoy en el &lt;a href="http://www.nortecastilla.es/"&gt;Norte de Castilla&lt;/a&gt; que la &lt;a href="http://www.nortecastilla.es/20071220/valladolid/seis-asignaturas-forman-lista-20071220.html"&gt;"lista negra" de fracaso académico en la UVA&lt;/a&gt; está formada por 6 asignaturas, 4 de las cuales de Informática y una de Telecomunicaciones:&lt;br /&gt;&lt;blockquote&gt;(...) las asignaturas que deben ser objeto de especial atención (por sus bajos índices de rendimiento y de éxito prolongados en el tiempo), son apenas media docena, todas ellas de carreras técnicas:&lt;span style="font-weight: bold;"&gt; Economía de la Empresa (de Informática de Gestión del Valladolid)&lt;/span&gt;; Fundamentos Matemáticos de la Ingeniería (de Ingeniería Técnica Agrícola, especialidad Industrias Agrarias), &lt;span style="font-style: italic;"&gt;Matemáticas I (de Ingeniería Técnica de Telecomunicación, especialidad Sistemas de Telecomunicación);&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Matemáticas I (de Informática de Gestión de Valladolid); Matemáticas III (de Informática de Gestión de Segovia) y Matemáticas III (de Informática de Gestión de Valladolid).&lt;/span&gt;&lt;/blockquote&gt;Para los que no estén familiarizados con la nomenclatura de las matemáticas en la UVA, Matemáticas I es de fundamentos (lógica, conjuntos, etc.) y Matemáticas III, Cálculo.&lt;br /&gt;¿A qué se puede deber este sonado fracaso en estas asignaturas? Yo creo que cuando hay fracaso generalizado en algo se puede deber a dos razones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Las personas implicadas son generalizadamente más torpes: esto parece improbable, porque aunque la nota de corte en los últimos años ha bajado, haciéndolo por tanto el nivel de exigencia, esto es algo que está ocurriendo en la mayoría de las titulaciones por falta de solicitudes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Las personas implicadas no trabajan lo suficiente (en relación al grado de exigencia). Esta es la razón más plausible, por una total falta de motivación. Yo he &lt;strike&gt;sufrido&lt;/strike&gt; vivido el tránsito por esas asignaturas y es francamente descorazonador. Casi todos los que pasamos por ellas siempre comentamos lo mismo: ¿para qué &lt;span style="font-style: italic;"&gt;tantas&lt;/span&gt; matemáticas en informática? En los dos primeros cursos tenemos Matemáticas I, II y III, Fundamentos, y Estadística. Cinco asignaturas de tamaño máximo que exigen más esfuerzo que todas las demás asignaturas juntas, convirtiéndose en criba y lastre para muchos durante años.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Las matemáticas son el origen y el corazón de la informática (de la computación, como les gusta llamarlo a algunos), pero ¿realmente es justificable tamaña carga y exigencia en ellas? La Universidad es, principalmente, una preparación para la vida laboral, y no creo que conseguir aparecer en 4+1 posiciones de 6 sobre fracaso académico ayude a nadie.&lt;br /&gt;PD: no quiero alimentar suspicacias ni flames, lo del 4+1 es porque Telecomunicaciones e Informática a menudo son primas hermanas ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7106947634027849318?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7106947634027849318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7106947634027849318'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/12/fracaso-acadmico-en-informtica-de-la.html' title='Fracaso académico en Informática en la Universidad de Valladolid'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-4298554961648471425</id><published>2007-12-16T13:23:00.000Z</published><updated>2007-12-16T13:40:53.909Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='blewspace'/><category scheme='http://www.blogger.com/atom/ns#' term='geolocalización'/><category scheme='http://www.blogger.com/atom/ns#' term='mapa'/><category scheme='http://www.blogger.com/atom/ns#' term='mashup'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><title type='text'>BlewSpace: geolocalización de blogs (¡pon tu blog en el mapa!)</title><content type='html'>&lt;span class="dropcaps"&gt;¿&lt;/span&gt;Es la geolocalización información interesante? ¿Alguna vez has querido &lt;a href="http://www.blewspace.com/"&gt;geolocalizar un blog&lt;/a&gt;? &lt;a href="http://www.blewspace.com/"&gt;BlewSpace&lt;/a&gt; es un nuevo &lt;span style="font-style: italic;"&gt;mashup&lt;/span&gt;&lt;span&gt; de Google Maps que pretende geolocalizar todos los blogs posibles. Quizá más que geolocalización se le podría considerar geo&lt;span style="font-style: italic;"&gt;registro&lt;/span&gt;, pero al final lo que queda es un mapa con blogs, de forma que puedes situar el tuyo. Puedes registrar el tuyo para que la gente lo pueda localizar en un mapa (geolocalizar). También lo puedes categorizar e incluso hacerle ping (de forma que no se pueda registrar el blog de cualquier otro y decir que es basura).&lt;br /&gt;Todavía está en beta (la moda 2.0 ;) ), y hay una interesante lista de peticiones que puedes incrementar.&lt;br /&gt;Desde un punto de vista comercial creo que &lt;a href="http://www.blewspace.com/"&gt;BlewSpace&lt;/a&gt; puede tener un potencial interesante, especialmente para la organización de reuniones de bloggers. Cuando &lt;a href="http://www.blewspace.com/"&gt;BlewSpace&lt;/a&gt; active las consultas geoespaciales permitirá, por ejemplo, listar los blogs de tu ciudad.&lt;br /&gt;La geolocalización hace las comunidades de la Web 2.0 más tangibles. Ya no son sólo grupos de avatares virtuales, sino gente real, de la cual alguna vive junto a tí.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-4298554961648471425?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4298554961648471425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4298554961648471425'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/12/blewspace-geolocalizacin-de-blogs-pon.html' title='BlewSpace: geolocalización de blogs (¡pon tu blog en el mapa!)'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1509142116524339602</id><published>2007-11-25T10:50:00.000Z</published><updated>2007-11-25T11:03:16.263Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Porqué Google son lo que son (los mejores)</title><content type='html'>&lt;span class="dropcaps"&gt;O&lt;/span&gt;tra nueva prueba de que cuando Google hace algo, lo hace lo mejor que se puede hacer: si al meter un nuevo evento en el Google Calendar lo haces tal que así: "7pm Baloncesto at Pisuerga every thursday" te crea un nuevo evento "Baloncesto" a la hora señalada, como lugar te mete "Pisuerga", y lo crea repetitivo semanal. ¿Simple? Sí. Pero dime cuántos años lleva funcionando el outlook y cuántos clicks necesitas para crear un nuevo evento así.&lt;br /&gt;&lt;br /&gt;Para más información sobre esto, consultar &lt;a href="http://www.google.com/support/calendar/bin/answer.py?answer=36604"&gt;su ayuda&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Chapó.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1509142116524339602?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1509142116524339602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1509142116524339602'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/11/porqu-google-son-lo-que-son-los-mejores.html' title='Porqué Google son lo que son (los mejores)'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-2212026555257466491</id><published>2007-11-22T06:54:00.000Z</published><updated>2007-11-22T06:57:26.422Z</updated><title type='text'>"Los puestos inmerecidos se preocupan por aparentar competencia y se rodean de personas mediocres"</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;oy los blogs están sembrados... Ahora uno sobre la &lt;a href="http://www.navegapolis.net/content/view/700/"&gt;incompetencia en los jefes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Las pruebas realizadas en la investigación concluyen que los jefes con poder legítimo se guían por la buena ejecución de la tarea, mientras que los de más dudoso mérito trabajan para mostrar la autoafirmación personal.&lt;br /&gt;Los primeros se rodean de colaboradores competentes, y los segundos de colaboradores de dusosa competencia.&lt;/blockquote&gt;&lt;br /&gt;En cuanto pueda me leeré &lt;a href="http://www.psicothema.com/psicothema.asp?id=3197"&gt;el informe&lt;/a&gt;, porque promete.&lt;br /&gt;Hasta entonces, de nuevo me parafraseo:&lt;br /&gt;&lt;br /&gt;Corolario: "en una empresa con jefes mediocres, sólo los mediocres ascienden, haciendo los procesos cada vez peores y aumentando la frustración de los competentes"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-2212026555257466491?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2212026555257466491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2212026555257466491'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/11/los-puestos-inmerecidos-se-preocupan.html' title='&quot;Los puestos inmerecidos se preocupan por aparentar competencia y se rodean de personas mediocres&quot;'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-9200497516239125736</id><published>2007-11-22T06:33:00.000Z</published><updated>2007-11-22T06:49:25.472Z</updated><title type='text'>"La informática no da calidad de vida a las personas que viven de ella."</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;e dudado hasta el último momento si poner esta anotación en mi &lt;a href="http://juanignaciosl.blogspot.com/"&gt;blog personal&lt;/a&gt; o aquí, pero al final me ha tirado más lo profesional.&lt;br /&gt;&lt;br /&gt;Hoy, en el repaso diario a mi HOME -cada mañana abro de golpe unas 15 páginas de periódicos, noticias, etc- me encuentro en &lt;a href="http://barrapunto.com/"&gt;barrapunto &lt;/a&gt;una &lt;a href="http://equipro.blogspot.com/2007/11/ingenieros-informticos-quienes.html"&gt;reflexión sobre la (ausencia de) calidad de vida en informática&lt;/a&gt; que no por recurrente es menos importante.&lt;br /&gt;&lt;br /&gt;Me parafraseo a mí mismo en un post que he puesto en esa misma página:&lt;br /&gt;"Sobre el post principal, hay una novedad respecto a las reflexiones habituales: hablas de &lt;b&gt;inestabilidad de tecnologías&lt;/b&gt;. Eso es cierto... hasta cierto punto. Primero, porque al final &lt;b&gt;los conceptos son los mismos&lt;/b&gt;."&lt;br /&gt;&lt;br /&gt;Yo no pido que todos los informáticos seamos vocacionales -esto debería ser una profesión, no una vocación-, pero sí que seamos &lt;span style="font-style: italic;"&gt;profesionales&lt;/span&gt;. No tienes que irte a casa a seguir trabajando, ni acercarte a un ordenador si no quieres, pero cuando en el trabajo te enfrentes a un problema, hazlo de forma ordenada, paso a paso, exigiéndote a tí mismo calidad...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-9200497516239125736?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/9200497516239125736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/9200497516239125736'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/11/la-informtica-no-da-calidad-de-vida-las.html' title='&quot;La informática no da calidad de vida a las personas que viven de ella.&quot;'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7533864222760998228</id><published>2007-11-18T23:14:00.000Z</published><updated>2007-11-18T23:20:12.695Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><title type='text'>Frameworks J2EE</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;n informática hay que reciclarse o morir. En parte, ese fue el espíritu de escribir este blog, que en parte me animaría a seguir investigando. &lt;div&gt; &lt;/div&gt; &lt;div&gt;Para los que queráis poneros al día de cómo anda el mercado, acabo de encontrar una &lt;a href="http://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_presentation" target="_blank"&gt;nueva noticia sobre comparativas entre frameworks&lt;/a&gt;. Hace tiempo la &lt;a href="http://static.raibledesigns.com/repository/presentations/ComparingJavaWebFrameworks-ApacheConUS2007.pdf" target="_blank"&gt;anterior comparativa publicada por el mismo autor&lt;/a&gt; me fue muy útil. En ella se mostraba JSF como claro dominador del mercado laboral. &lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;En &lt;a href="http://static.raibledesigns.com/repository/presentations/ComparingJVMWebFrameworks-ApacheConUS2007.pdf" target="_blank"&gt;la nueva&lt;/a&gt; se habla de otros tantos frameworks, con datos sorprendentes sobre Flex (el framework para aplicaciones con Flash), supuestamente incluso algo más solicitado que JSF. &lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;Luego, por otra parte, los más renombrados ahora son Seam (recién publicada la versión 2) y GWT (el framework de Google).&lt;br /&gt;&lt;br /&gt;Si se me permite opinar, Seam tiene una pinta impresionante. Tan bueno como práctico. Para empezar, tiene una inmensa ventaja sobre todo lo demás: es un "todo en uno". La descarga son unas 100MB, y contiene todo lo que necesitas para trabajar con Hibernate (Core, Search, Annotations, Validator y Entity Manager), Seam, JSF, Ajax4JSF, RichFaces, Log4J y TestNG (esos son los que me conozco, alguno más me dejaré). Tiene vocación no sólo de &lt;span style="font-style: italic;"&gt;integrar&lt;/span&gt;, sino de &lt;span style="font-style: italic;"&gt;estar integrado&lt;/span&gt;. Aparte, el incipiente Red Hat Developer Studio lo soportará al 100%, con lo cual tenemos una pila completa (incluyendo el JBoss) para desarrollo, que era la única ventaja real de .NET sobre J2EE.&lt;br /&gt;&lt;br /&gt;Los demás, pasarán, o sus ideas serán adoptadas por los demás (como está pasando con PHP y RoR, por ejemplo).&lt;br /&gt;&lt;br /&gt;IMHO, por supuesto ;)&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/4170768470549625640-7533864222760998228?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7533864222760998228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7533864222760998228'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/11/frameworks-j2ee.html' title='Frameworks J2EE'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3745479260865968581</id><published>2007-10-25T22:31:00.000+01:00</published><updated>2007-10-25T23:20:46.400+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Hoja de ruta para un programador</title><content type='html'>&lt;span class="dropcaps"&gt;C&lt;/span&gt;omo parte de reflexiones recientes estaba pensando en hacer un poco de autocrítica ¿qué debería leer una persona para aprender a programar correctamente? Está claro que para salir al mundo empresarial y poder pedir con lo que salimos de la facultad no tenemos ni para empezar, y no todas las empresas se pueden permitir grandes periodos de formación.&lt;br /&gt;Como esto es un campo muy amplio, en este ejemplo hay una precondición: se parte de cero, y una postcondición: saber programar en un entorno J2EE con Hibernate+Spring+JSF.&lt;br /&gt;Lo primero deberían ser las bases: comprender qué es un algoritmo, programación estructurada y estructuras de datos elementales. Yo hice un curso, y como bibliografía usábamos "&lt;a href="http://www.agapea.com/Fundamentos-de-programacion-3-Ed--n9446i.htm"&gt;Fundamentos de Programación&lt;/a&gt;", de Joyanes, y creo que sería perfectamente válido. Es importante coger las ideas fundamentales antes de atarse a un lenguaje de programación. No se puede empezar a programar si no eres capaz de especificar el algoritmo de &lt;span style="font-style: italic;"&gt;hacer la lista de la compra&lt;/span&gt; o &lt;span style="font-style: italic;"&gt;ir al cine a ver una película&lt;/span&gt;.&lt;br /&gt;Una vez sabemos lo imprescindible, es hora de bajarse la última JDK, Eclipse, y, &lt;a href="http://www.mindview.net/Books/TIJ/"&gt;Thinking in Java&lt;/a&gt; en mano, programar todos los ejemplos. Por lo que sé, es el mejor libro de Java.&lt;br /&gt;Una vez ya se sabe Java (bien, no como la mayoría se conforma), merece la pena ahondar un poco más: &lt;a href="http://java.sun.com/developer/onlineTraining/Programming/JDCBook/"&gt;Advanced Java Programming&lt;/a&gt;.&lt;br /&gt;En este punto ya se debería tener dominado el "Java standalone", "cliente", o como prefieras llamar a lo que no es J2EE.&lt;br /&gt;En este punto ya se debe conocer la herramienta básica, así que conviene leer algo de más alto nivel: &lt;a href="http://books.google.es/books?id=1dx34EMVyi8C&amp;amp;dq=core+j2ee+patterns&amp;amp;pg=PP1&amp;amp;ots=1u3xo8PH6H&amp;amp;sig=XktIKBoV1eMpAtvYn7M28KkgqT8&amp;amp;prev=http://www.google.es/search%3Fq%3DCore%2BJ2EE%2BPatterns%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dorg.mozilla:es-ES:official%26client%3Dfirefox-a&amp;amp;sa=X&amp;amp;oi=print&amp;amp;ct=title&amp;amp;cad=one-book-with-thumbnail"&gt;Core J2EE Patterns&lt;/a&gt;.&lt;br /&gt;Antes de entrar en el mundo J2EE convendría unas nociones básicas de redes (¡me asombro que en el fondo mucha gente no acaba de comprender el modelo cliente-servidor de la web!) y algo de SQL. Para esto no tengo recomendaciones.&lt;br /&gt;Ya es el momento de meterse en harina: a bajarse Hibernate, Spring, MyFaces... Nada de pasar por programación de servlets y JSPs pelonas, no vale para nada. Con leernos las introducciones para comprender qué es un servlet y cómo se genera la vista con JSPs, basta. Para aprender Hibernate el libro de referencia está muy bien, y cuando éste se queda corto, Hibernate in Action. La (¡extensa!) referencia de Spring debería ser suficiente. Y para JSF, el tutorial de &lt;a href="http://www.coreservlets.com/JSF-Tutorial/"&gt;Core Servlets&lt;/a&gt; con el que creo que hemos aprendido todos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aquí están las referencias. Ya sólo queda el trabajo ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3745479260865968581?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3745479260865968581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3745479260865968581'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/10/hoja-de-ruta-para-un-programador.html' title='Hoja de ruta para un programador'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7428714804139383009</id><published>2007-10-25T11:32:00.000+01:00</published><updated>2007-10-25T11:42:43.976+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><category scheme='http://www.blogger.com/atom/ns#' term='trabajo'/><title type='text'>Reflexión inter-desplegues sobre la falta de profesionales</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;ntre despliegue y despliegue del servidor de aplicaciones (el lado negativo de las tecnologías J2EE es el frecuente reiniciar) me vienen a la mente comentarios de una reunión cercana.&lt;br /&gt;&lt;br /&gt;Faltan profesionales, y los que hay están poco preparados. Cuesta horrores, especialmente si no puedes ofrecer un fajo de un espesor considerable, encontrar profesionales con experiencia. Somos pocos, y muchos se conforman con lo que se sabe de la facultad, que está muy alejado del Mundo Real ^tm.&lt;br /&gt;&lt;br /&gt;Sres. empresarios, busquen a los buenos profesionales y págenles bien. Y si alguien es un programador impresionante, no le "ascendáis" a analista obligatoriamente. "Ascendedle" los honorarios y dádles responsabilidades, pero no consideréis la programación una tarea menor.&lt;br /&gt;&lt;br /&gt;Sres. informáticos: leamos, cacharreemos, programemos... ¡mejoremos! Y, después, ¡pidamos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7428714804139383009?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7428714804139383009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7428714804139383009'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/10/reflexin-inter-desplegues-sobre-la.html' title='Reflexión inter-desplegues sobre la falta de profesionales'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5679333325303577374</id><published>2007-09-19T06:53:00.000+01:00</published><updated>2007-09-19T07:03:27.174+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>NetBeans 6.0 Beta 1 + Tutorial</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;oy se ha publicado la &lt;a href="http://www.netbeans.org/community/releases/60/"&gt;primera beta de NetBeans 6.0&lt;/a&gt;, que parece una actualización de la (impresionante) 5.x. Se han corregido algunas cosas y, sobre todo, se integra el desarrollo con Ruby.&lt;br /&gt;&lt;br /&gt;De regalo, aquí está un breve &lt;a href="http://juanignaciosl.googlepages.com/mysqlNetbeans.doc"&gt;tutorial de JPA + MySQL + NetBeans&lt;/a&gt; hecho por Luis Molina.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5679333325303577374?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5679333325303577374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5679333325303577374'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/09/netbeans-60-beta-1-tutorial.html' title='NetBeans 6.0 Beta 1 + Tutorial'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-640587790931179400</id><published>2007-08-14T21:57:00.000+01:00</published><updated>2007-08-14T22:16:08.696+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhds'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat developer studio'/><category scheme='http://www.blogger.com/atom/ns#' term='richfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Red Hat Developer Studio</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;e estado trabajando en un proyecto relativamente pequeño durante algunos meses (más de un año). Como lo comencé en la Época Antigua lo hice con Struts + Hibernate. Desde entonces la comunidad J2EE ha evolucionado mucho, y hay ciertas tecnologías que hacen que mi diseño anticuado parezca más viejo si cabe. Más específicamente, quiero Ajax para mis usuarios.&lt;br /&gt;&lt;br /&gt;Quería migrarlo a una arquitectura &lt;span style="font-weight: bold;"&gt;JSF + &lt;a href="http://labs.jboss.com/jbossrichfaces/"&gt;RichFaces&lt;/a&gt; + &lt;a href="http://www.jboss.com/products/seam"&gt;Seam&lt;/a&gt; + &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;&lt;/span&gt;, pero quería esperar hasta que se publicase &lt;a href="http://www.redhat.com/developers/rhds/index.html"&gt;Red Hat Developer Studio&lt;/a&gt;, ya que soporta todas las tecnologías que quiero usar. Ese día ha llegado, y puedes descargar &lt;a href="http://www.redhat.com/developers/rhds/index.html"&gt;Red Hat Developer Studio &lt;/a&gt;Beta 1. En este post contaré su instalación y mis primeros minutos con él (en tiempo real). Ni es una reseña en profundidad (no puede serlo todavía) ni un estudio de Seam (por lo mismo) ni una guía J2EE para torpes. Espero que alguien lo encuentre interesante.&lt;br /&gt;&lt;br /&gt;FYI, estoy en un portátil Centrino con 2GB y Gentoo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Comienzo&lt;/span&gt;&lt;br /&gt;1.- &lt;span style="font-weight: bold;"&gt;Descarga &lt;a href="ftp://ftp.redhat.com/pub/redhat/rhdevstudio/beta/rhdevstudio-1.0-Beta1/rhdevstudio-linux-gtk-1.0.0.beta1.jar"&gt;Red Hat Developer Studio Beta 1 for Linux&lt;/a&gt;&lt;/span&gt;: ¡~530MB! ¡Es grande!&lt;br /&gt;2.- &lt;span style="font-weight: bold;"&gt;Arranca la instalación&lt;/span&gt;: &lt;span style="font-family:courier new;"&gt;java -jar rhdevstudio-linux-gtk-1.0.0.beta1.jar&lt;/span&gt;.&lt;br /&gt;3.- Sigue las instrucciones. 3 minutos, sin nada a destacar. Crea un bonito icono en el escritorio.&lt;br /&gt;4.- Picar en el bonito icono lanza un casque instantáneo (uno de los de eclipse). No sé exáctamente porqué, pero especificando la ruta java manualmente se soluciona: &lt;span style="font-family:courier new;"&gt;./eclipse -vm /opt/sun-jdk-1.5.0.12/bin/java&lt;/span&gt;.&lt;br /&gt;5.- Comienza con un diálogo de migración (desde JBoss Studio) que a mí no me vale para nada. Supongo que los usuarios de JBoss Studio lo valorarán.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PRIMERAS IMPRESIONES&lt;/span&gt;&lt;br /&gt;Aparenta como lo haría Eclipse tras un lote de plugins. La perspectiva RHDS me da una primera alegría: una paleta RichFaces (todavía sin calendario, habrá que esperar). Un vistazo a "Manage Configuration" muestra que incluye, entre otros, los siguientes plugins:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dali (JPA).&lt;/li&gt;&lt;li&gt;EMF (modelado).&lt;/li&gt;&lt;li&gt;JST (marcado como con problemas, espero que no sea grave).&lt;/li&gt;&lt;li&gt;WST.&lt;/li&gt;&lt;li&gt;Hibernate Tools.&lt;/li&gt;&lt;li&gt;JBoss stuff.&lt;/li&gt;&lt;li&gt;Shale tools.&lt;/li&gt;&lt;li&gt;Spring.&lt;/li&gt;&lt;/ul&gt;Hay también algunas perspectivas nuevas para mí que probablemente serán interesantes: jBPM PDL y JBoss AS. Profundizaré en ellas otro día.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PRIMER PROYECTO&lt;/span&gt;&lt;br /&gt;Mi objetivo es comenzar un proyecto RichFaces + Seam + Hibernate (JPA) desde cero. Teóricamente es el mejor IDE para hacerlo, veamos si lo consigue. Desde la perspectiva RHDS:&lt;br /&gt;1.- File --&gt; New --&gt; Seam Web Project.&lt;br /&gt;2.- Añadir el facet Java Persistence al proyecto.&lt;br /&gt;3.- Crear un database connection profile (el mío es MySQL 5.0).&lt;br /&gt;&lt;br /&gt;Moviéndome un poco se hace lento y vuelve a cascar ("double free or corruption"). Aumentaré la memoria (eclipse.ini) y reiniciaré. Más tarde se hace obvio que lo que falla es el "Red Hat HTML Editor" (editor por defecto para JSPs). Probablemente se deba a un &lt;a href="http://www.redhat.com/developers/rhds/Getting_Started/GettingStartedWithRHDS.html#Troubleshooting"&gt; problema conocido en el FAQ&lt;/a&gt;. Nada urgente.&lt;br /&gt;&lt;br /&gt;El proyecto tiene una interesante librería 'All JBoss Libraries' que contiene 50+ jars que esperemos que me permitan desarrollar sin preocuparme por jars por un rato. Algo similar ocurre con 'Web App Libraries', que incluye no sólo seam sino también otros &lt;span style="font-style: italic;"&gt;must-have&lt;/span&gt; como facelets.&lt;br /&gt;&lt;br /&gt;El proyecto tiene un error (cuadrado rojo). Se puede encontrar en la vista 'Problems': "no persistence.xml" file in project. Está mal, porque está en src/META-INF. ¡Despleguemos! Shift+Alt+X, R lo ejecutará en un servidor. Como no está configurado todavía, me pregunta en cuál. Elijo el JBoss 4.2 incluido y cruzo los dedos. Starting... ¡Casque! :-\ Sigh... Bueno... Algo falla con la base de datos: "Apparently wrong driver class specified for URL: class: com.mysql.jdbc.Driver".&lt;br /&gt;&lt;br /&gt;Se soluciona metiendo el conector mysql en jboss-as/server/default/lib. Primera lección de JBoss aprendida. Tras ello, aparece la página de bienvenida.&lt;br /&gt;&lt;br /&gt;Aparte del problema con el RH HTML Editor, RHDS parece prometedor. &lt;span style="font-style: italic; font-weight: bold;"&gt;¿Por fin el desarrollo en Java se encuentra con la integración de los Visual LoQueSea? &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Esperemos...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-640587790931179400?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/640587790931179400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/640587790931179400'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/08/red-hat-developer-studio.html' title='Red Hat Developer Studio'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-551465197991326340</id><published>2007-08-03T19:45:00.000+01:00</published><updated>2007-08-03T19:55:11.082+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='ingeniería del software'/><category scheme='http://www.blogger.com/atom/ns#' term='trabajo'/><category scheme='http://www.blogger.com/atom/ns#' term='iso'/><title type='text'>¡Ave, Buen Programador!</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;ace unos días estaba en una sala con unos cuantos programadores. Yo, como habitualmente, refunfuñaba sobre algo (ahora no recuerdo el qué), y como casi siempre volvió a salir de mi boca mi intención de mandar las nóminas a paseo y montar empresa. Y, aunque alguno se lo tomó a broma, conté que mi intención era, en cuanto un par de encargos lo permitiesen, coger sólo a los mejores programadores pagándoles el doble, o más, de lo que se paga habitualmente. Porque, como ya he dicho &lt;a href="http://iiso.blogspot.com/2007/07/orgullo-programador.html"&gt;otras&lt;/a&gt; &lt;a href="http://iiso.blogspot.com/2007/06/el-talento-y-el-desarrollo-obviedades.html"&gt;veces&lt;/a&gt;, yo también creo que la diferencia entre los buenos y el resto es espectacular. Acaba de caer en mis manos otro artículo que no tiene precio: &lt;a href="http://haacked.com/archive/2007/06/25/understanding-productivity-differences-between-developers.aspx"&gt;10 programadores por el precio de uno&lt;/a&gt;.&lt;br /&gt;Si consiguiese reunir a cuatro o cinco de estos, pagándoles el doble todavía quedaría margen más que de sobra para hacer mucho dinero, a la vez que das un muy buen sueldo y un trabajo gratificante...&lt;br /&gt;&lt;br /&gt;Soñar es gratis, supongo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-551465197991326340?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/551465197991326340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/551465197991326340'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/08/ave-buen-programador.html' title='¡Ave, Buen Programador!'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-250073037924901660</id><published>2007-07-30T06:40:00.000+01:00</published><updated>2007-07-30T06:44:50.808+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dilbert'/><title type='text'>Fechas</title><content type='html'>&lt;span class="dropcaps"&gt;D&lt;/span&gt;&lt;a href="http://www.dilbert.com"&gt;ilbert&lt;/a&gt;, real como la vida misma, como siempre.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dilbert.com/comics/dilbert/archive/images/dilbert21047500070730.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" src="http://www.dilbert.com/comics/dilbert/archive/images/dilbert21047500070730.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-250073037924901660?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/250073037924901660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/250073037924901660'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/07/fechas.html' title='Fechas'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3112484586754157261</id><published>2007-07-26T08:42:00.000+01:00</published><updated>2007-07-26T08:50:35.876+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>(Escaso) interés de usuarios en Linux</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;n el anterior post sobre &lt;a href="http://iiso.blogspot.com/2007/07/se-est-perdiendo-el-inters-en-linux.html"&gt;interés en Linux&lt;/a&gt; ponía en duda su éxito en los últimos años, en términos de número de usuarios (especialmente por las expectativas creadas).&lt;br /&gt;&lt;br /&gt;Tras &lt;a href="http://preguntas.barrapunto.com/comments.pl?sid=71897&amp;cid=937712"&gt;una breve discusión en Barrapunto&lt;/a&gt; me puse a buscar cifras y, en cierta medida, se confirman mis sospechas. Aquí van algunas:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3schools.com/browsers/browsers_os.asp"&gt;W3Schools&lt;/a&gt;: 2003, 2.6%; 2004: 3.1%; 2005: 3.3%; 2006: 3.3%; 2007: 3.4%. Pese a ser un sitio "técnico" el incremento en 3 años sólo fue un 0.7%, y este año incluso ha descendido.&lt;br /&gt;&lt;a href="http://marketshare.hitslink.com/report.aspx?qprid=2"&gt;MarketShare&lt;/a&gt;: 2004: 0.29%; 0.31%; 2006: 0.38%; 2007: 0.59%. Aquí la tendencia es alcista, pero en magnitudes irrisorias. Recoge los datos de muchas fuentes diferentes, así que parece que la realidad se acercará más a estor porcentajes que a los de W3Schools.&lt;br /&gt;&lt;br /&gt;Mientras, los de Ubuntu se lo toman con filosofía, asignando a Mark Shuttleworth el &lt;span style="font-style: italic;"&gt;bug&lt;/span&gt; de que &lt;a href="https://bugs.launchpad.net/ubuntu/+bug/1"&gt;Microsoft tiene la mayor parte de la cuota del mercado&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Me gustaría ofrecer más datos, pero esto es lo que he encontrado. Creo que &lt;span style="font-weight: bold;"&gt;Linux ha dado un gran salto cualitativo en los últimos 8 años, pero que esto apenas se ha reflejado en el número de usuarios&lt;/span&gt;. Linux ya es completo, cómodo y sencillo, pero los usuarios no necesitan el cambio. Ójala me equivoque, pero si va a conseguir hacerse un hueco en los hogares, no va a ser a corto ni medio plazo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3112484586754157261?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3112484586754157261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3112484586754157261'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/07/escaso-inters-de-usuarios-en-linux.html' title='(Escaso) interés de usuarios en Linux'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8722801432669007895</id><published>2007-07-24T20:25:00.000+01:00</published><updated>2007-07-24T20:57:47.862+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>¿Se está perdiendo el interés en Linux?</title><content type='html'>&lt;span class="dropcaps"&gt;M&lt;/span&gt;e pasé a Linux hace ya alrededor de cuatro o cinco años. La principal razón era aprender, pero descubrí un &lt;span style="font-weight: bold;"&gt;sistema&lt;/span&gt; con el que no sólo no echaba de menos &lt;span style="font-style: italic;"&gt;otros&lt;/span&gt;, sino que era &lt;span style="font-weight: bold;"&gt;más personalizable y much&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;o más estable&lt;/span&gt; (¡y &lt;span style="font-style: italic;"&gt;determinista&lt;/span&gt;! =) ). Comencé suave, con Suse, y al cambiar de cacharro me pasé a Gentoo. Desde entonces he &lt;span style="font-weight: bold;"&gt;aprendido&lt;/span&gt; mucho con él (un francés me decía hace tiempo que "Linux le ayuda a comprender cómo funciona un ordenador"). No he necesitado nunca Windows (salvo para un programa para la Nintendo DS que ya puedo ejecutar con Wine), y con Gentoo seguiré hasta que me compre otro cacharro y seguramente me pase a Kubuntu (cada vez tengo menos tiempo para cacharrear).&lt;br /&gt;&lt;br /&gt;Desde entonces ha llovido mucho, y creo que &lt;span style="font-weight: bold;"&gt;se ha perdido gran parte del interés en Linux&lt;/span&gt;. O, al menos, se ha estabilizado. En la siguiente gráfica de Google Trends se puede observar un alarmante descenso de las búsquedas (Windows en rojo, Linux en azul, Unix en amarillo):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ThiAJt9Eftg/RqZUEpTuxqI/AAAAAAAAABg/kXv6Sv0xKHw/s1600-h/linux-windows-unix.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px; height: 223px; outline-color: invert; outline-style: none; outline-width: medium;" src="http://1.bp.blogspot.com/_ThiAJt9Eftg/RqZUEpTuxqI/AAAAAAAAABg/kXv6Sv0xKHw/s400/linux-windows-unix.png" alt="" id="BLOGGER_PHOTO_ID_5090848867573745314" border="0" /&gt;&lt;/a&gt;Hace poco &lt;a href="http://barrapunto.com/comments.pl?sid=71471&amp;cid=928694"&gt;bromeaba en Barrapunto&lt;/a&gt; sobre que &lt;span style="font-weight: bold;"&gt;ya no hay flames sobre distribuciones&lt;/span&gt; (frecuentes cuando yo empezaba), y&lt;br /&gt;creo que no es más que otro indicador de que las tendencias se han estabilizado, y eso es muy malo para Linux. &lt;span style="font-weight: bold;"&gt;Windows XP es un buen sistema operativo&lt;/span&gt; (o al menos infinítamente mejor de lo que Microsoft nos tenía acostumbrados en los hogares), y eso ha hecho que muchos se hayan conformado con él en vez de pasarse a Linux. Éste, a su vez, &lt;a style="font-weight: bold;" href="http://linux.slashdot.org/linux/07/07/24/1432245.shtml"&gt;ha fallado en el escritorio&lt;/a&gt; (el contenido de la entrevista quizá es dicutible, pero parece obvio que las previsiones que había hace años sobre penetración de Linux en los hogares no se están cumpliendo): la base de usuarios no crece.&lt;br /&gt;&lt;br /&gt;Y, entre las distribuciones, sólo una cosa clara: hay mucho interés en Ubuntu. Gentoo se mantiene constante, y la tendencia del resto es a la baja (Ubuntu en amarillo, Debian en rojo, Suse en azul oscuro, Red Hat en azul claro, y Gentoo en verde):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ThiAJt9Eftg/RqZXv5TuxrI/AAAAAAAAABo/2XJSxxX5_Mw/s1600-h/redhat-debian-ubuntu-gentoo-suse.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px; height: 223px;" src="http://2.bp.blogspot.com/_ThiAJt9Eftg/RqZXv5TuxrI/AAAAAAAAABo/2XJSxxX5_Mw/s400/redhat-debian-ubuntu-gentoo-suse.png" alt="" id="BLOGGER_PHOTO_ID_5090852909137970866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para mí, la causa principal de que "usuarios técnicos" no migren es que &lt;span style="font-weight: bold;"&gt;Windows XP es bueno&lt;/span&gt;, como ya he dicho. Y la de que el resto no lo haga, la posibilidad de &lt;span style="font-weight: bold;"&gt;piratear&lt;/span&gt; Windows XP, la &lt;span style="font-weight: bold;"&gt;preinstalación&lt;/span&gt; de éste (legal o no), y la &lt;span style="font-weight: bold;"&gt;nula propaganda&lt;/span&gt; de alternativas.&lt;br /&gt;&lt;br /&gt;Todavía albergo dos &lt;span style="font-weight: bold;"&gt;esperanzas&lt;/span&gt;: las compañías que, como Dell, dicen que &lt;span style="font-weight: bold;"&gt;preinstalan Linux&lt;/span&gt; (aunque no me acabo de creer que la gente no lo quite según reciba el ordenador), y, sobre todo, &lt;span style="font-weight: bold;"&gt;la apuesta gubernamental por el software libre&lt;/span&gt;. Los niños que ahora usan linux en la escuela en Andalucía o Extremadura, dentro de unos años lo verán como una opción más, en vez de &lt;span style="font-style: italic;"&gt;algo para frikis&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8722801432669007895?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8722801432669007895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8722801432669007895'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/07/se-est-perdiendo-el-inters-en-linux.html' title='¿Se está perdiendo el interés en Linux?'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ThiAJt9Eftg/RqZUEpTuxqI/AAAAAAAAABg/kXv6Sv0xKHw/s72-c/linux-windows-unix.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5036330886248272721</id><published>2007-07-21T17:39:00.000+01:00</published><updated>2007-07-21T17:46:46.059+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idea peregrina'/><title type='text'>WTF</title><content type='html'>&lt;span class="dropcaps"&gt;P&lt;/span&gt;or cierto, quien quiera reirse un poco que se suscriba a &lt;a href="http://worsethanfailure.com/Default.aspx"&gt;Worse Than Failure&lt;/a&gt;, una página en la que se van colgando pifias e &lt;span style="font-style: italic;"&gt;ideas peregrinas™&lt;/span&gt; a diario. Una de mis favoritas es &lt;a href="http://worsethanfailure.com/Articles/Securing-Secure-Security.aspx"&gt;"Securing Secure Security"&lt;/a&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.thedailywtf.com/Images/200707/error%27d/bank_security_popup.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 480px;" src="http://www.thedailywtf.com/Images/200707/error%27d/bank_security_popup.jpg" alt="" 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/4170768470549625640-5036330886248272721?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5036330886248272721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5036330886248272721'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/07/wtf.html' title='WTF'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3850159001353024005</id><published>2007-07-21T17:11:00.000+01:00</published><updated>2007-07-23T17:40:42.353+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idea peregrina'/><title type='text'>[OT] Premio Idea Peregrina™ #1: APPInformática</title><content type='html'>&lt;span style="font-style: italic;" class="dropcaps"&gt;A&lt;/span&gt;&lt;span style="font-style: italic;"&gt;ntecedentes a este post&lt;/span&gt;: cuando ví APP por primera vez, hace años, tenían una página web cómoda y bien implementada, pero desde entonces la han cambiado varias veces, y siempre a peor (&lt;a href="http://juanignaciosl.blogspot.com/2007/07/imho.html"&gt;IMHO&lt;/a&gt;, como todo lo que digo). El [OT] del título es porque este post es bastante &lt;span style="font-style: italic;"&gt;off-topic&lt;/span&gt; a lo que viene siendo habitual, pero soy un bocazas que si no escribe su opinión, revienta.&lt;br /&gt;&lt;br /&gt;Hoy he conseguido por primera vez hacer una &lt;a href="http://flickr.com/photos/juanignaciosl/864107680/"&gt;foto aceptable con HDR&lt;/a&gt;, y dentro de poco me voy de viaje, así que he decidido &lt;span style="font-weight: bold;"&gt;comprar una tarjeta de memoria&lt;/span&gt; de al menos 2GB para poder hacer bastantes fotos en formato RAW. Tras visitar &lt;a href="http://www.ebay.es/"&gt;Ebay&lt;/a&gt; me meto en &lt;a href="http://www.appinformatica.com/"&gt;APP&lt;/a&gt;, que pese a que odio su web cada vez más suele tener buenos precios. Escaneo las categorías superiores y laterales buscando "Memorias" y no encuentro nada. Después me doy cuenta de que alguien ha preferido escribir "Otras memorias". Bueno, discutible, no me voy a quejar por eso...&lt;br /&gt;&lt;br /&gt;Cuando por fin veo "Otras memorias" me lleva a 10 páginas de resultados, así que meto en el buscador de arriba 'cf', doy intro y &lt;span style="font-weight: bold;"&gt;¡la búsqueda es instantánea!&lt;/span&gt; ¿Ajax? Imposible, ha sido ¡demasiado! rápido, y el monitor de red ni se ha inmutado... Sólo puede ser una cosa... &lt;span style="font-weight: bold;"&gt;¡¡¡han metido todos los datos en Javascript!!!&lt;/span&gt; Al abrir el Firebug e ir al DOM ¡¡veo un array de 139 elementos con todas las memorias!!&lt;br /&gt;&lt;br /&gt;¿Qué ocurre si buscas en la página principal? Vuelvo al inicio y veo que el buscador tiene dos opciones, buscar tiendas y buscar artículos. Por defecto está seleccionada la que es prácticamente inútil: buscar tiendas. ¿Por qué? Porque si "tiras del hilo" del código que tiene el radiobutton de buscar artículos ves que cuando lo seleccionas se añaden scripts javascript mediante DOM de scripts &lt;span style="font-weight: bold;"&gt;¡¡¡¡y cargan toda la tienda, 2840 artículos, en el array 'database'!!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No contentos con eso se han limitado a poner en el cuadro de búsqueda "espere por favor", así que si estás hábil puedes buscar 'pentium' y que no encuentre nada... Esta gente ha visto que Internet está plagado de Ajax y una de dos, o lo han visto muy difícil de implementar, o han sido más listos que nadie... &lt;span style="font-style: italic;"&gt;"¿Para qué esperar poco si puede no esperar nada? Enga, si total los ordenadores tienen memoria de sobra..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con esto voy a inaugurar una nueva sección, inspirada en "El empleado de la semana" de los genios de "&lt;a href="http://www.lasexta.com/seloquehicisteis/"&gt;Sé lo que hicísteis...&lt;/a&gt;":&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(153, 102, 51);font-size:180%;" &gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;1er Premio a la Idea Peregrina de la Semana&amp;trade;: www.appinformatica.com, por meter en un array Javascript toda su base de datos y descargarlo cuando el usuario indica que va a buscar artículos.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3850159001353024005?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3850159001353024005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3850159001353024005'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/07/ot-appinformtica-y-su-pgina-web.html' title='[OT] Premio Idea Peregrina&amp;trade; #1: APPInformática'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-4376044995348508138</id><published>2007-07-12T16:46:00.000+01:00</published><updated>2007-07-12T16:59:03.702+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='trabajo'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Orgullo programador</title><content type='html'>&lt;span class="dropcaps"&gt;M&lt;/span&gt;ientras que cruzando el atlántico se interesan en &lt;a href="http://codebetter.com/blogs/raymond.lewallen/archive/2007/07/11/what-i-am-doing-to-become-a-better-developer.aspx"&gt;ser mejores programadores&lt;/a&gt;, en España &lt;a href="http://javierperez.eu/el-programador-espanol-en-el-ano-2007/"&gt;la profesión de programador&lt;/a&gt; es una verguenza, a pesar de la &lt;a href="http://www.libertaddigital.com/opiniones/opinion_38393.html"&gt;escasez&lt;/a&gt; que &lt;a href="http://mnm.uib.es/gallir/posts/2007/07/12/1129/"&gt;ven todos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Apenas hay programadores porque...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;En la carrera cada vez entra menos gente, porque se paga mal y se vive peor.&lt;/li&gt;&lt;li&gt;La gente que está en este mercado intenta salir de ese puesto lo antes posible, ya que es la única forma de asomar las cejas por encima del mileurismo y/o subsubcontratación feroz.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Los jefes se piensan que un programador es como un albañil. Cito a &lt;a href="http://javierperez.eu/"&gt;Javier Pérez&lt;/a&gt;:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Las empresas aún no entienden que un programador no es un obrero, sino un &lt;strong&gt;ingeniero creativo&lt;/strong&gt; que convierte ideas en tecnología. Y sin embargo los muy paletos nos culpan de la baja productividad que dicen adolece este bendito país. Ver para creer, los incompetentes negando competitividad.&lt;/blockquote&gt;Revindiquemos la importancia de la programación en nuestras empresas, nadie lo va a hacer por nosotros. La programación ni es ni será un trabajo mecánico, hagamos lo posible por ser los mejores, y exijamos como tal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-4376044995348508138?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4376044995348508138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4376044995348508138'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/07/orgullo-programador.html' title='Orgullo programador'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-4055284533486217780</id><published>2007-07-03T17:47:00.000+01:00</published><updated>2007-07-03T21:18:53.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax4jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='richfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Primera aplicación con RichFaces</title><content type='html'>&lt;span class="dropcaps"&gt;C&lt;/span&gt;omo parte del afán casi sadomasoquista que creo tenemos algunos informáticos vocacionales (los no vocacionales no sé qué hacen en este mundillo de bajos sueldos, malas condiciones laborales y nulo reconocimiento) voy a hacer una breve introducción a RichFaces, desde la instalación del IDE hasta el punto de tener una aplicación mínima funcionando. El objetivo no es hacer un tutorial, ni un howto, ni una guía paso a paso (si estás leyendo esto eres informático o como mínimo curioso, no creo que necesites que te digan "pulsa siguiente"). Aún así, si siguiéndola has tenido problemas, soy todo orejas.&lt;br /&gt;&lt;br /&gt;1.- Descargamos la última versión de &lt;a href="http://www.netbeans.org/servlets/NewsItemView?newsItemID=1073"&gt;NetBeans 6 M10&lt;/a&gt;.&lt;br /&gt;2.- Descargamos los últimos builds de &lt;a href="http://maven.exadel.com/org/richfaces/richfaces/3.0.2-SNAPSHOT/"&gt;RichFaces&lt;/a&gt; y de &lt;a href="http://maven.exadel.com/org/ajax4jsf/ajax4jsf/1.1.2-SNAPSHOT/"&gt;Ajax4JSF&lt;/a&gt;, incluyendo las fuentes (para el javadoc y depuración). En breve &lt;a href="http://jboss.com/index.html?module=bb&amp;op=viewtopic&amp;amp;t=112221"&gt;se fusionan en un único proyecto&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;**Las últimas versiones, inestables, porque estoy en casa. No hagan esto en el trabajo ;)&lt;br /&gt;&lt;br /&gt;3.- Mientras se descargan las 180MB anteriores echamos un ojo al &lt;a href="http://labs.jboss.com/jbossrichfaces/docs/index.html"&gt;manual de desarrollador de RichFaces&lt;/a&gt; y &lt;a href="http://labs.jboss.com/jbossajax4jsf/docs/devguide/en/html/index.html"&gt;de Ajax4JSF&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;4.- Lanzamos el instalador. Durante mi instalación, aparte de los pasos obvios, he hecho...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configurar que también me instale el Tomcat 6, ya que estamos.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cambiar los passwords por defecto y los puertos para intentar olvidarlos lo más tarde posible.&lt;/li&gt;&lt;/ul&gt;5.- Abrimos netbeans y creamos un nuevo proyecto Web sobre el SJSAS 9 recién instalado. Activamos JavaServer Faces.&lt;br /&gt;6.- Pulsamos F6 (hay que ir aprendiendo los atajos de NetBeans ;) ) para arrancar el servidor, desplegar y abrir un navegador. Debería mostrar en un h1 el texto JavaServer Faces. Prometo que he llegado hasta aquí del tirón :)&lt;br /&gt;&lt;br /&gt;7.- Descomprimimos la descarga de RichFaces, que contiene tanto Ajax4JSF como RichFaces.&lt;br /&gt;8.- Creamos una librería con estos jars y la añadimos al proyecto: propiedades del proyecto --&gt; librerías --&gt; añadir --&gt; gestionar --&gt; nueva librería. Añadimos tanto los jars binarios como las fuentes.&lt;br /&gt;9.- Aplicamos los cambios indicados en la configuración para &lt;a href="http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html_single/index.html#SettingAWebApplication"&gt;una aplicación con RichFaces&lt;/a&gt;: añadimos la configuración al web.xml y el taglib de richfaces.&lt;br /&gt;10.- Reiniciamos el servidor de aplicaciones. Mientras reinicia podemos ir aprovechando para saludar en el &lt;a href="http://jboss.com/?f=261&amp;module=bb&amp;amp;op=viewforum"&gt;foro de RichFaces&lt;/a&gt;. Lo vamos a usar mucho y los desarrolladores del proyecto han demostrado conmigo una paciencia infinita :) Nunca había visto un tiempo de respuesta tan bajo en un proyecto OpenSource.&lt;br /&gt;&lt;br /&gt;** Primer problema de usar versiones inestables de todo. El servidor se ha parado, pero netbeans no se da por enterado. Se ha solucionado al dar F5 para volver a lanzar **&lt;br /&gt;&lt;br /&gt;11.- Primer error (no está mal haber llegado hasta aquí): NoClassDefFound por no haber metido Commons Logging, del que depende. Hay que añadir las siguientes librerías (todas mediante el gestor de librerías del proyecto de NetBeans):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;commons-logging (incluída con NetBeans)&lt;/li&gt;&lt;li&gt;commons-digester (&lt;a href="http://jakarta.apache.org/commons/digester/"&gt;descargar&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;commons-collections (&lt;a href="http://jakarta.apache.org/commons/collections/"&gt;descargar&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;commons-beanutils (&lt;a href="http://jakarta.apache.org/commons/beanutils/"&gt;descargar&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;12.- Reiniciamos el servidor, y ¡voila!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ThiAJt9Eftg/RoqObwdARhI/AAAAAAAAABI/mqWOvyHCgsU/s1600-h/jsf-richfaces.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_ThiAJt9Eftg/RoqObwdARhI/AAAAAAAAABI/mqWOvyHCgsU/s400/jsf-richfaces.png" alt="" id="BLOGGER_PHOTO_ID_5083031736955192850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;No es que sea algo espectacular, pero es un comienzo.&lt;br /&gt;&lt;br /&gt;PD: si a alguien le sobra un monitor de 19", que me avise, que el mío se queda pequeño para todos los paneles de netbeans :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-4055284533486217780?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4055284533486217780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/4055284533486217780'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/07/primera-aplicacin-con-richfaces.html' title='Primera aplicación con RichFaces'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ThiAJt9Eftg/RoqObwdARhI/AAAAAAAAABI/mqWOvyHCgsU/s72-c/jsf-richfaces.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-7227918979526312762</id><published>2007-06-28T16:37:00.000+01:00</published><updated>2007-06-28T16:48:34.940+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Día filosófico: #1 "Soluciona los problemas, no los errores"</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;os últimos días de trabajo han sido tan intensos como improductivos, con esa desagradable sensación de dejarse las neuronas desperdigafas en el camino de casa al ordenador, sin que nada avance. Como no puedo aportar gran cosa práctica (aparte del recién estrenado &lt;a href="http://iiso.blogspot.com/2007/06/google-desktop-para-gnulinux.html"&gt;Google Desktop para Linux&lt;/a&gt;), hoy quiero sacar del tintero alguna reflexión que llevo madurando un tiempo.&lt;br /&gt;&lt;br /&gt;Cuando al programar te encuentras con un fallo, puedes hacer dos cosas: &lt;span style="font-weight: bold;"&gt;solucionar el &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;error&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;, o solucionar el &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;problema&lt;/span&gt;. La primera opción -y que he visto muchísimas veces, y que a veces se me escapa a mí también- lleva a cosas como bloques try .. catch que no hacen más que enmascarar errores, o casts o conversiones de código en la capa incorrecta (por ejemplo, cuando un valor incorrecto generar un error, parchear la línea en la que se produce en vez de la línea en la que se asigna, o el converter si hablamos de JSF). &lt;span style="font-style: italic;"&gt;Perdemos el tiempo en un remedio que sólo soluciona un caso, en vez de arreglar lo que está mal&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Solucionar el problema&lt;/span&gt; implica hacer el esfuerzo de decodificar el mensaje de error y trazar la ejecución hasta localizar el punto del fallo. Implica &lt;span style="font-style: italic;"&gt;conocer&lt;/span&gt; (aunque también es una buena forma de &lt;span style="font-style: italic;"&gt;aprehender&lt;/span&gt;) y algo más de esfuerzo, pero resolverás no sólo el error detectado, sino muchos otros que vendrán después. Esto, que parece muy obvio, no siempre lo es. Hagamos examen de conciencia ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-7227918979526312762?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7227918979526312762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/7227918979526312762'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/da-filosfico-1-soluciona-los-problemas.html' title='Día filosófico: #1 &quot;Soluciona los problemas, no los errores&quot;'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6094999655077862206</id><published>2007-06-28T16:22:00.000+01:00</published><updated>2007-06-28T16:31:19.483+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google desktop'/><title type='text'>Google Desktop para GNU/Linux</title><content type='html'>&lt;span class="dropcaps"&gt;R&lt;/span&gt;ecientemente se ha publicado Google Desktop para GNU/Linux. Hace tiempo que lo uso en el trabajo (impagable cuando llegas a un sitio nuevo y no quieres molestar cada vez que necesitas un documento), y en casa lo echaba de menos.&lt;br /&gt;&lt;br /&gt;Para instalarlo, puedes seguir la &lt;a href="http://desktop.google.com/es/linux/gettingstarted.html"&gt;guía de comienzo&lt;/a&gt;. Si eres un afortunado usuario de Gentoo, puedes usar el &lt;a href="http://bugs.gentoo.org/attachment.cgi?id=123317"&gt;ebuild para Google Desktop para Linux&lt;/a&gt; que ya hay en el &lt;a href="http://bugs.gentoo.org/show_bug.cgi?id=183492"&gt;bugzilla&lt;/a&gt; correspondiente (todavía no está en el árbol de Portage). Si, como yo, nunca has usado un fichero de ebuild para instalar nada, puedes seguir este sencillo &lt;a href="http://gentoo-wiki.com/HOWTO_Installing_3rd_Party_Ebuilds"&gt;HOWTO para ebuilds de terceros&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ya no se dará la paradoja de que me cuesta más encontrar las cosas en mi ordenador que en Internet ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6094999655077862206?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6094999655077862206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6094999655077862206'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/google-desktop-para-gnulinux.html' title='Google Desktop para GNU/Linux'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3922967286181443359</id><published>2007-06-20T19:47:00.000+01:00</published><updated>2007-06-20T20:16:28.551+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Programar sin el ratón (Hay que)</title><content type='html'>&lt;span class="dropcaps"&gt;U&lt;/span&gt;na de mis innumerables manías en esto de la informática es que hay que programar sin tocar el ratón. Hace años, cuando los únicos entornos integrados de desarrollo eran malos y de pago, la gente programaba con vim y emacs, dando lugar a &lt;a href="http://www.io.com/%7Edierdorf/emacsvi.html"&gt;integrismos entre sus usuarios&lt;/a&gt;, &lt;a href="http://www.tiraecol.net/modules/comic/comic.php?content_id=2"&gt;humor ácido sobre sus atajos&lt;/a&gt;,.. Era una época en la que como no te sentases al menos cinco minutos con alguien o con un manual no eras capaz ni de escribir dos líneas. &lt;span style="font-weight: bold;"&gt;Era necesario saber&lt;/span&gt;. Eso sí, en cuanto aprendías, volabas.&lt;br /&gt;&lt;br /&gt;Hoy en día no es así. Cualquiera es capaz de ponerse con el &lt;pon&gt; y crear en un momento un proyecto complejo a base de asistentes. Eso es bueno, porque trabaja por tí. Sin embargo, si no haces el esfuerzo personal de aprender (que ahora es opcional, no como antes), en vez de aprovechar el entorno te quedas en ser un (mal) usuario del mismo. Si nadie te lo exige (y nadie lo va a hacer) y tú no tienes la disciplina necesaria, puedes trabajar con un entorno durante años y ser igual de lento la primera semana que la última.&lt;br /&gt;&lt;br /&gt;Mis sugerencias:&lt;br /&gt;&lt;/pon&gt;&lt;ul&gt;&lt;li&gt;Si haces una acción dos veces, a la tercera, antes de hacerlo, consulta su &lt;span style="font-weight: bold;"&gt;atajo&lt;/span&gt;. Y si no tiene, configúralo tú.&lt;/li&gt;&lt;li&gt;Si desarrollas web, incluye el &lt;span style="font-weight: bold;"&gt;atributo accesskey &lt;/span&gt;en los enlaces, para no necesitar el ratón para navegar por las páginas.&lt;/li&gt;&lt;li&gt;Ponte el ratón en la mano mala, oblígate a aprender los atajos :)&lt;/li&gt;&lt;li&gt;Aprende la sintaxis de &lt;span style="font-weight: bold;"&gt;expresiones regulares&lt;/span&gt; que utilice, para hacer búsquedas de verdad y reemplazos masivos.&lt;/li&gt;&lt;li&gt;Entornos como Eclipse o Netbeans llevan años usándose, y están hechos por y para programadores. Si necesitas algo y no lo encuentras seguro que es porque no lo has encontrado todavía, no porque no lo tenga. Y si no lo tiene, seguro que es porque no lo necesitas.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;PD: Algún día instalaré el &lt;a href="http://vimplugin.sourceforge.net/wiki/pmwiki.php"&gt;vim para Eclipse&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3922967286181443359?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3922967286181443359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3922967286181443359'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/programar-sin-el-ratn.html' title='Programar sin el ratón (Hay que)'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-2371579995025314267</id><published>2007-06-20T19:34:00.001+01:00</published><updated>2007-06-20T19:47:02.298+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>Versiones (reflexiones)</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;n los últimos días...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Me he estado pegando con Acegi y el Sun Application Server. Éste tiene un bug que hace que no funcione Acegi como cliente. Lo curioso es que no lo tiene en ciertas versiones de 8.1, pero sí en otras posteriores.&lt;/li&gt;&lt;li&gt;Migré a GCC 4.2. Tras una semana (más o menos) recompilando mi &lt;span style="font-style: italic;"&gt;sistema&lt;/span&gt; y mi &lt;span style="font-style: italic;"&gt;mundo&lt;/span&gt; sorprendentemente el cambio de compilador no ha sido traumático, pero al recompilar se me actualizaron ciertas librerías, y...&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Ciertas versiones de kdelibs hacen que la tecla de 'arriba' lance ksnapshot :-\&lt;/li&gt;&lt;li&gt;La última versión de los drivers propietarios de ati no funciona en Gentoo con DRI.&lt;/li&gt;&lt;li&gt;Los drivers open source de ati no valen para mi tarjeta (Mobility 9700), todo va lentísimo (pese a supuestamente soportar DRI).&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Algo&lt;/span&gt; hace que ahora para moverme por palabras en vez de cursor+CTRL deba pulsar cursor+ALT (en ciertas aplicaciones).&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Tras bajarme el instalador de JBoss e instalar el JBoss 4.0, leo que Seam 1.3 va sobre JBoss 4.2.&lt;/li&gt;&lt;li&gt;Hacer funcionar MyFaces sobre SJSAS 9.x es poco menos que imposible.&lt;/li&gt;&lt;li&gt;Sun no tiene soporte enterprise para versiones superiores a la 8 del servidor...&lt;/li&gt;&lt;li&gt;Los drivers de Oracle apestan y los de Hibernate sólo ayudan si trabajas con los últimos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;...versiones...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-2371579995025314267?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2371579995025314267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/2371579995025314267'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/versiones-reflexiones.html' title='Versiones (reflexiones)'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3189705717983429102</id><published>2007-06-16T09:41:00.000+01:00</published><updated>2007-06-16T09:55:48.142+01:00</updated><title type='text'>Las promesas de JBoss Seam</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt; pesar de sus intentos de impedirlo, JSF es mi apuesta para la web de los próximos años, gracias a su natural integración con Ajax. Sin embargo, "out of the box" no vale para nada. Pretendo empezar un nuevo proyecto y me disponía a descargarme "el lote" (MyFaces, Tomahawk, Tomahawk Sandbox, Facelets, Ajax4JSF, RichFaces y Dojo) cuando he recordado un artículo sobre los "&lt;a href="http://www.oreillynet.com/onjava/blog/2006/12/2006_java_technology_winners_a.html"&gt;ganadores del 2006&lt;/a&gt;" y su referencia a &lt;a href="http://www.jboss.com/products/seam"&gt;JBoss Seam&lt;/a&gt;, y he pensado en &lt;span style="font-style: italic;"&gt;darle una vuelta&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Novedades principales de JBoss Seam:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Framework para EJB 3.0&lt;/span&gt; pero compatible hacia atrás con J2EE, podría correr sobre un Tomcat. Estas promesas de "funcionamos con lo más último pero también con lo viejo" no me gustan nada, pero bueno...&lt;/li&gt;&lt;li&gt;Integra Ajax vía Ajax4JSF y/o ICEFaces.&lt;/li&gt;&lt;li&gt;Integran el motor de workflow &lt;span style="font-weight: bold;"&gt;jBPM&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;Stay tuned...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3189705717983429102?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3189705717983429102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3189705717983429102'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/las-promesas-de-jboss-seam.html' title='Las promesas de JBoss Seam'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6369269116112913728</id><published>2007-06-12T18:20:00.000+01:00</published><updated>2007-06-15T16:44:36.700+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gestión'/><category scheme='http://www.blogger.com/atom/ns#' term='dune'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project Server 2007</title><content type='html'>&lt;span class="dropcaps"&gt;d&lt;/span&gt;esde hace unos meses vengo usando Microsoft Project Server 2007. Necesitábamos una (buena) herramienta de planificación y seguimiento de proyectos, y Project es LA herramienta. Estamos apostando por el software libre, y no hay cosa que más urticaria me dé que vender mi alma al diablo un poco más, pero, las cosas como son, no hay una opción mejor para un entorno empresarial.&lt;br /&gt;&lt;br /&gt;Y claro, una vez una organización se mete con el Project, requiere el &lt;a href="http://office.microsoft.com/en-us/projectserver/FX100739841033.aspx"&gt;Server&lt;/a&gt;, para tener un repositorio centralizado de recursos (entre otras razones).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Pros:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Es muy &lt;span style="font-weight: bold; font-style: italic;"&gt;completo&lt;/span&gt;: no sólo tiene el project, sino también repositorio de documentos, wiki,  grupos de discusión...&lt;/li&gt;&lt;li&gt;Permite tener todo el trabajo &lt;span style="font-weight: bold; font-style: italic;"&gt;centralizado&lt;/span&gt;, dando una vista transversal de todas las tareas pendientes en todos los proyectos, por ejemplo. Puedes integrar agendas, calendarios, contactos, avisos...&lt;/li&gt;&lt;li&gt;Proporciona un &lt;span style="font-weight: bold; font-style: italic;"&gt;interfaz web&lt;/span&gt; (sólo para IE, por supuesto) para mostrar información y para realizar las tareas más comunes (como indicar el porcentaje de ejecución de una tarea).&lt;/li&gt;&lt;li&gt;Se puede acceder a él mediante &lt;span style="font-weight: bold; font-style: italic;"&gt;servicios web&lt;/span&gt;, lo cual abre un abanico de posibilidades de integración con aplicaciones empresariales.&lt;/li&gt;&lt;li&gt;Se puede buscar a la vez en toda la documentación, wikis, foros, etc. de un proyecto.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Contras:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No dudo que la &lt;span style="font-weight: bold; font-style: italic;"&gt;distribución automática de recursos&lt;/span&gt; pueda llegar a funcionar correctamente, pero la cantidad de información a proporcionar y la &lt;span style="font-style: italic;"&gt;infinidad&lt;/span&gt; de parámetros hace que sea una tarea poco menos que imposible.&lt;/li&gt;&lt;li&gt;Demasiadas opciones de configuración, especialmente en lo referente a permisos.&lt;/li&gt;&lt;li&gt;Documentación lamentable.&lt;/li&gt;&lt;li&gt;Las alertas por correo son bastante burdas, poco más útiles que el spam.&lt;/li&gt;&lt;li&gt;La organización de los menús es... mejorable. Y la distribución en sitios / sitios virtuales / workspaces / proyectos es confusa y más complicada de lo necesario.&lt;/li&gt;&lt;/ul&gt;Me gusta, especialmente si se exprime al máximo (foros, wiki, gestor documental...). Es un producto mejorable todavía, pero casi imprescindible para cualquier empresa de desarrollo de software.&lt;br /&gt;&lt;br /&gt;Eso sí, hasta que Microsoft lo libere, yo seguramente invierta tiempo en el prometedor &lt;a href="http://www.projectdune.org/"&gt;Projecto Dune&lt;/a&gt;: su objetivo es integrar en una aplicación web (Hibernate + Spring + GWT) todo lo necesario para la gestión de proyectos (orientado a Scrum). Ya tiene gestión de versiones, de fallos...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6369269116112913728?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6369269116112913728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6369269116112913728'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/project-server-2007.html' title='Project Server 2007'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5520423798165147438</id><published>2007-06-07T16:20:00.000+01:00</published><updated>2007-06-15T16:43:44.488+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>El talento y el desarrollo (obviedades)</title><content type='html'>&lt;span class="dropcaps"&gt;v&lt;/span&gt;amos a hablar de obviedades sobre el talento y el factor humano:&lt;br /&gt;&lt;br /&gt;Cinco albañiles producen más o menos cuatro o cinco veces más que uno si tienen la materia prima adecuada. Diez personas no impedidas pueden cargar más o menos diez veces más cajas que una persona.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cinco programadores NO acaban un proyecto cinco veces más rápido que uno. Cinco programadores haciendo una jornada laboral un 50% mayor no acaban un proyecto el 50% antes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y, por mucho que cobren lo mismo, &lt;span style="font-weight: bold;"&gt;la diferencia entre programadores puede&lt;/span&gt; no ser grande, sino &lt;span style="font-weight: bold;"&gt;ser absolutamente incomparable&lt;/span&gt;. Algunas citas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;De un artículo que opina (yo también) que se puede &lt;a href="http://www.navegapolis.net/content/view/524/56/"&gt;cerrar el departamento de recursos humanos&lt;/a&gt;:&lt;/li&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;p&gt;Los mejores lo hacen mucho mejor que los mediocres: "En el mundo del diseño informático, los mejores lo hacen entre 50 y 100 veces mejor que el promedio, y la cifra aumenta, conforme se incrementa la complejidad de la tecnología" --Pilar Jericó. La Gestión del Talento. Pearson Educación&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;"La diferencia entre los promedios y los mejores ya no es de 1:2, como en el pasado. Es 1:100 o incluso 1:1000." --Nathan Myhvold (Ex-director de I+D de Microsoft)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.navegapolis.net/content/view/556/56/"&gt;Errores de selección de personal&lt;/a&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;"&lt;em&gt;Los mejores programadores pueden ser 20 veces más productivos que los medios... el 50% de los programadores se consideran a si mismos que están en la categoría de los mejores, pero en realidad sólo está el 1%&lt;/em&gt;" --Lawrence Bernstein en &lt;a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471696919.html"&gt;Trustworthy Systems Throrgh Quantitative Software Engineering&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;Gracias a &lt;a href="http://www.navegapolis.net/"&gt;Navegápolis&lt;/a&gt; por aportar contenido de calidad (este post es poco más que una recopilación de entradas suyas).&lt;br /&gt;&lt;br /&gt;ACTUALIZACIÓN: el mismo día, unas horas después, otra persona hacía una reflexión muy similar sobre &lt;a href="http://yapw.blogspot.com/2007/06/evidencias-en-el-desarrollo-de-software.html"&gt;la importancia del talento de los programadores&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5520423798165147438?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5520423798165147438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5520423798165147438'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/el-talento-y-el-desarrollo-obviedades.html' title='El talento y el desarrollo (obviedades)'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-646208167528473840</id><published>2007-06-07T15:43:00.000+01:00</published><updated>2007-06-07T17:12:13.025+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Elegir un IDE para Java</title><content type='html'>&lt;span class="dropcaps"&gt;S&lt;/span&gt;i quieres ser productivo debes usar las mejores herramientas, y eso incluye los frameworks utilizados en el proyecto, el sistema operativo, el entorno de desarrollo, el servidor de aplicaciones... Periódicamente busco estudios, comparativas, datos... que me lleven, cual ave migratoria, a terrenos más cálidos. Casi anualmente el cuadro de búsqueda de Google se llena con los mismos términos, básicamente permutaciones de "eclipse jdeveloper netbeans myeclipse 200x", casi nunca con resultados aceptables. &lt;span style="font-weight: bold;"&gt;Es muy difícil encontrar datos objetivos para comparar diferentes IDEs&lt;/span&gt;. Esto tiene un motivo bastante lógico: no puedes símplemente lanzar un benchmark o una batería de tests unitarios para probar un IDE. Necesitas usarlo durante meses para probarlo.&lt;br /&gt;&lt;br /&gt;Los principales contendientes en estos momentos son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.myeclipseide.com/"&gt;MyEclipse&lt;/a&gt;:&lt;/li&gt;&lt;li&gt;Exadel Studio: antes propietario, va a ser liberado como &lt;a href="http://labs.jboss.com/rhdevstudio/"&gt;Red Hat Developer Studio&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.netbeans.org/"&gt;Netbeans&lt;/a&gt;:&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oracle.com/technology/products/jdev/index.html"&gt;JDeveloper&lt;/a&gt;:&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt;:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;La (pobre) pesca de esta primavera devuelve los siguientes resultados (¡agradeceré toda aportación posible!):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://entwickler.com/itr/service/psecom,id,370,nodeid,36.html"&gt;Premios 2007 de los lectores de Java Magazin&lt;/a&gt; (en alemán): Eclipse (63%); NetBeans (9%); IntelliJ IDEA (8%).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ninthavenue.com.au/blog/why_netbeans"&gt;Comparativa de alguien que eligió NetBeans&lt;/a&gt; (del 2007, y empezó con vim, así que no puede ser mala persona ;) ).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.devx.com/Java/Article/34009"&gt;Eclipse vd. Netbeans vs. IntelliJ IDEA&lt;/a&gt;: más democrático, elige NetBeans para desarrollo swing e IntelliJ (seguido &lt;span style="font-style: italic;"&gt;muy&lt;/span&gt; de cerca por MyEclipse) para Struts/JSP y JSF.&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.zdnet.com/Burnette/?p=177"&gt;Netbeans 6 vs Eclipse 3.3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.itwriting.com/blog/?p=222"&gt;MUY INTERESANTE&lt;/a&gt;: encuesta anual de &lt;a href="http://www.itwriting.com/blog/?p=222"&gt;BZ sobre IDEs&lt;/a&gt;: Eclipse 70%, NetBeans 23%, JDeveloper 19%, IBM RAD 20% (la pregunta no era exclusiva, suman más de 100 ;) ). Ya que estamos, servidores de aplicaciones: WebSphere 37%, JBoss 32%, BEA WebLogic 24%.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Salvo excepciones, &lt;span style="font-weight: bold;"&gt;lo más usado es Eclipse&lt;/span&gt;. La sensación general es que, de los de pago, el IntelliJ IDEA debe ser muy bueno (no lo he probado). Y, por último, que NetBeans ha dado un gran salto en la versión 5.5, pero parece que todavía no es suficiente.&lt;br /&gt;&lt;br /&gt;Mi &lt;span style="font-weight: bold;"&gt;experiencia personal&lt;/span&gt; se reduce a JDeveloper, Eclipse y algo de NetBeans. A priori la versión &lt;span style="font-style: italic;"&gt;5.5 de NetBeans&lt;/span&gt; me pareció &lt;span style="font-style: italic;"&gt;impresionante&lt;/span&gt;, tanto por facilidad de uso como por prestaciones e integración. &lt;span style="font-style: italic;"&gt;JDeveloper&lt;/span&gt; siempre me ha parecido &lt;span style="font-style: italic;"&gt;lamentable&lt;/span&gt; en mayor o menor medida, y a menudo ni siquiera es nombrado en los artículos (aunque con frecuencia por su licencia). Uso sobre todo &lt;span style="font-style: italic;"&gt;Eclipse&lt;/span&gt;, pero &lt;span style="font-style: italic;"&gt;tuneado&lt;/span&gt; con muchos plugins. Eso se puede mitigar con MyEclipse (de pago), aunque últimamente en la página oficial parece que están haciendo un esfuerzo extra de empaquetado para echar a andar "out of the box" en diferentes entornos. Parece que han visto llegar fuerte a NetBeans. En el trabajo hemos escogido MyEclipse, sobre todo porque integra Matisse, el editor Swing de Netbeans (uno de sus puntos más fuertes), y de esta forma todo el área de informática podía usar la misma herramienta. Yo habría preferido que cada uno eligiese con la que estuviese más cómodo (pienso que lo importante es el servidor de aplicaciones), pero creo que ha sido una buena elección.&lt;br /&gt;&lt;br /&gt;Lo que está claro es que &lt;span style="font-weight: bold;"&gt;las diferencias no son muy grandes&lt;/span&gt;. Cuando Eclipse nació no había buenos entornos de desarrollo libres en Java (Forte/Netbeans estaban muy lejos), pero esto ya no es así. Así como el talento de un programador sí puede aumentar la productividad en varios órdenes de magnitud, un ide no.&lt;br /&gt;&lt;br /&gt;¿Una recomendación? &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Instala Eclipse (todo lo completo que puedas) o Netbeans, aprende todos los atajos, &lt;span style="font-style: italic;"&gt;y desenchufa el ratón para programar&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-646208167528473840?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/646208167528473840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/646208167528473840'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/elegir-un-ide.html' title='Elegir un IDE para Java'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-29430414051481403</id><published>2007-06-05T20:56:00.000+01:00</published><updated>2007-06-05T21:35:17.377+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facelets'/><category scheme='http://www.blogger.com/atom/ns#' term='dry'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Facelets</title><content type='html'>&lt;span class="dropcaps"&gt;S&lt;/span&gt;i has llegado hasta aquí buscando novedades sobre Facelets, puedes ir cerrando, porque tan sólo es una sugerencia rápida: &lt;span style="font-weight: bold;"&gt;si trabajas con JSF&lt;/span&gt;, ya sea comenzando o acabando, &lt;span style="font-weight: bold;"&gt;no dudes en usar &lt;/span&gt;&lt;a style="font-weight: bold;" href="https://facelets.dev.java.net/"&gt;facelets&lt;/a&gt;. La inversión necesaria (en tiempo y esfuerzo) es mínima, y tiene (casi) todo lo bueno que tiene Tiles, pero orientado al mundo JSF. Personalizar los componentes JSF es fundamental (mediante recubrimientos o composiciones), y JSF no hace &lt;span style="font-weight: bold;"&gt;NADA&lt;/span&gt; por ayudarte en ese aspecto. Es curioso que un proyecto tan &lt;span style="font-style: italic;"&gt;parado&lt;/span&gt; (aunque dicen que &lt;a href="http://osdir.com/ml/java.facelets.user/2007-01/msg00115.html"&gt;no está muerto&lt;/a&gt;, la última beta se remonta a diciembre del año pasado, y la última estable a junio) sea tan &lt;span style="font-style: italic;"&gt;imprescindible&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En IBM tienen tutoriales &lt;a href="http://www.ibm.com/developerworks/java/library/j-facelets/index.html"&gt;introductorios&lt;/a&gt; y &lt;a href="http://www.ibm.com/developerworks/java/library/j-facelets2.html"&gt;avanzados&lt;/a&gt;. Si no has intentado programar componentes con JSF esto te parecerá trivial, como a mí ahora, pero créeme que los que hemos intentado ser "ortodoxos" programando componentes "a mano" agradecemos la simplicidad de Facelets (nuevamente, &lt;a href="http://iiso.blogspot.com/2007/06/los-estndares-no-valen-para-nada.html"&gt;los estándares no valen para nada&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-29430414051481403?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/29430414051481403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/29430414051481403'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/facelets.html' title='Facelets'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3582931135342121329</id><published>2007-06-04T21:53:00.000+01:00</published><updated>2007-06-05T21:35:48.995+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='estándares'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>Los estándares no valen para nada</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;os estándares, en informática, son lentos de especificación, tardíos de publicación, ineficaces e insuficientes.&lt;br /&gt;&lt;br /&gt;Unas cuantas muestras:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;WCAG&lt;/span&gt;: estándar de accesibilidad web, la versión 1.0 data del 99 y desde entonces no han sido capaces de ponerse de acuerdo en uno actual y viable.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SQL&lt;/span&gt;: ni siquiera soporta realmente algo tan elemental como jerarquías padre-hijo (lo que Oracle implementa mediante "connect by"). Eso hace que el SQL de Oracle sea incompatible con el de MySQL, que es incompatible con PostgreSQL... Las implementaciones en las BBDD ni siquiera son capaces de ponerse de acuerdo en los limitadores de cadena.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ANSI C&lt;/span&gt;: tres cuartos de lo mismo, en cuanto intentas hacer &lt;span style="font-style: italic;"&gt;algo&lt;/span&gt;, el compilador &lt;span style="font-style: italic;"&gt;estricto&lt;/span&gt; se queja.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JSF&lt;/span&gt;: estándar orientado a sustituir la programación de HTML por otra orientada a componentes, y en su versión 1.0 ni siquiera era capaz de hacer todo lo que éste hacía (¡y además era incompatible con él!). En la 1.2 algo ha mejorado, pero los componentes estándar son irrisorios, requiriendo usar múltiples librerías para tareas habituales (en el último proyecto acumulo ya MyFaces + Tomahawk + Sandbox + Facelets + Ajax4JSF + RichFaces, y suma y sigue).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JCR 1.0&lt;/span&gt;: ¿¡nadie se dio cuenta de que no había un mecanismo para &lt;span style="font-style: italic;"&gt;asignar&lt;/span&gt; permisos!?&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;(x)HTML, CSS, Javascript...&lt;/span&gt;: cada navegador es un mundo aparte. Un buen desarrollador web se ve obligado (además de a acudir a terapia) a aprender &lt;span style="font-style: italic;"&gt;hacks&lt;/span&gt; para afinar el resultado y que funcione al menos en los mayoritarios.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;XML&lt;/span&gt;: destinado a ser un santo grial de la informática, constantemente aparecen incompatibilidades entre los parsers. Es raro que ni siquiera un fichero de configuración algo grande funcione correctamente en varios motores. Iba a ser &lt;span style="font-style: italic;"&gt;adecuado&lt;/span&gt; para procesamiento automático, pero en la práctica es &lt;span style="font-style: italic;"&gt;lento&lt;/span&gt;. También era  &lt;span style="font-style: italic;"&gt;apto &lt;/span&gt;para lectura humana, pero es &lt;span style="font-style: italic;"&gt;engorroso&lt;/span&gt; (quien haya programado Ajax &lt;span style="font-style: italic;"&gt;a capella&lt;/span&gt;, que compare trabajar con JSON y con XML).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Servicios Web&lt;/span&gt;: lo que debía ser una forma sencilla de conectar aplicaciones saltándose cortafuegos, se convierte en una colección de siglas (¿habéis leído introducciones a servicios web mediante Java?) difícil de comprender y de poner en práctica de forma productiva. A menudo, con incompatibilidades entre implementaciones. Y sorprendentemente (la web era ya madura) cuando se especificaron se dejó para más tarde la seguridad...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Los &lt;span style="font-weight: bold;"&gt;únicos que de verdad han funcionado&lt;/span&gt;, los mpeg (mpeg4, video, y mp3, audio), debidos a una &lt;span style="font-weight: bold;"&gt;limitación&lt;/span&gt;: si te sales del estándar, el reproductor casero o portátil deja de funcionar. Igual pasa con ethernet...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Moraleja&lt;/span&gt;: &lt;span style="font-style: italic;"&gt;si pretendes hacer funcionar un estándar, vende implementaciones de sus algoritmos programadas en circuitos. Ellos no entienden de excepciones. &lt;/span&gt;Ójala se hiciese ya un "navegador hardware".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Corolario&lt;/span&gt;: Microsoft triunfa porque impone "estándares". Hibernate triunfa porque abstrae de SQL. Spring triunfa porque no se ciñe a ningún estándar. Struts triunfó porque solucionaba todo lo que J2EE no solucionaba... &lt;span style="font-style: italic;"&gt;Be propietary, my friend...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3582931135342121329?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3582931135342121329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3582931135342121329'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/los-estndares-no-valen-para-nada.html' title='Los estándares no valen para nada'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6125120979468448458</id><published>2007-06-04T21:06:00.000+01:00</published><updated>2007-06-05T21:35:55.872+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Code Search</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;stá claro que Google ha cambiado -que no mejorado- la forma en que programamos. Hace no tanto las mejores herramientas de un programador eran la &lt;span style="FONT-STYLE: italic"&gt;ayuda del MSDN del Visual Studio&lt;/span&gt; (si tu ordenador tenía las gigas necesarias para instalar la referencia completa de las MFC) y las páginas de &lt;span style="FONT-STYLE: italic"&gt;man&lt;/span&gt;. &lt;span style="FONT-WEIGHT: bold"&gt;Si no sabías cómo hacer algo, aprendías con libros. Y cuando algo no funcionaba, tenías que averiguar porqué.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora &lt;span style="FONT-STYLE: italic"&gt;cada vez se programa menos y se googlea más&lt;/span&gt;. Es más, cada vez &lt;span style="FONT-WEIGHT: bold"&gt;se sabe menos y se cortapega más&lt;/span&gt;. A pesar del gran avance que suponen los errores que muestran las excepciones sobre los mostrados cuando algo en C fallaba, &lt;span style="FONT-WEIGHT: bold"&gt;no sabemos interpretar lo que nos dicen&lt;/span&gt;. Tan sólo pegamos en Google la excepción, la librería que estamos usando, y, con suerte, alguna otra cosa. Escaneamos los resultados obtenidos y cortapegamos trozos y trozos hasta que resulta que uno funciona.&lt;br /&gt;&lt;br /&gt;Hace tiempo apareció &lt;a href="http://www.google.com/codesearch?hl=es"&gt;Google Code Search&lt;/a&gt;, una herramienta de búsqueda en código libre, y hace poco ha salido de beta.&lt;br /&gt;Por si no te es suficiente, incluso hay un &lt;a href="http://egcs.javaforge.com/"&gt;plugin para eclipse que integra Google Code Search&lt;/a&gt;. Tú sabrás si quieres instalarlo o no ;)&lt;br /&gt;&lt;br /&gt;Actualización: enlace al plugin corregido&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6125120979468448458?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6125120979468448458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6125120979468448458'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/06/google-code-search.html' title='Google Code Search'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8845099489182303612</id><published>2007-05-31T15:58:00.000+01:00</published><updated>2007-06-05T21:36:16.019+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='offline'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='google gears'/><title type='text'>Google Gears: Unplugged Web 2.0</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;ace unos días escribía sobre &lt;a href="http://iiso.blogspot.com/2007/05/la-web-la-piedra-filosofal-de-la.html"&gt;aplicaciones web offline&lt;/a&gt; sin saber que Google sacaba ya su solución: &lt;a href="http://gears.google.com/"&gt;Google Gears&lt;/a&gt;. Los estándares son buenos, pero ¿quién quiere esperar a un estándar cuando tus ingenieros son los mejores?&lt;br /&gt;&lt;br /&gt;Lo acabo de instalar. Al entrar en &lt;a href="http://www.google.com/reader"&gt;Google Reader&lt;/a&gt;, la primera aplicación que lo soporta, aparece el siguiente mensaje:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ThiAJt9Eftg/Rl7jy4r5gTI/AAAAAAAAAA4/9Mk66uyBAbA/s1600-h/gearsAdvisor.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ThiAJt9Eftg/Rl7jy4r5gTI/AAAAAAAAAA4/9Mk66uyBAbA/s400/gearsAdvisor.png" alt="" id="BLOGGER_PHOTO_ID_5070740693815230770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Marco que lo recuerde y le permito acceso. Al entrar en la aplicación, en el menú de opciones aparece un nuevo icono. El tooltip reza lo siguiente: "Currently online. Click to go offline". Lo pulso, como no puede ser de otra forma, y aparece una barra de progreso con el estado de la descarga de noticias:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ThiAJt9Eftg/Rl7kZor5gUI/AAAAAAAAABA/WEdcw8Rs_us/s1600-h/gearsDownloading.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_ThiAJt9Eftg/Rl7kZor5gUI/AAAAAAAAABA/WEdcw8Rs_us/s400/gearsDownloading.png" alt="" id="BLOGGER_PHOTO_ID_5070741359535161666" border="0" /&gt;&lt;/a&gt;Lo quedo en modo offline y el monitor de red ni se inmuta a partir de entonces: &lt;span style="font-weight: bold;"&gt;puedo leer noticias "desenchufado"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;¿Y si ahora me quedo sin conexión? &lt;span style="font-family:courier new;"&gt;/etc/init.d/net.eth0 stop&lt;/span&gt;... Ok. Puedo seguir viendo noticias, están en mi caché local. En la &lt;a href="http://www.google.com/help/reader/offline.html"&gt;ayuda de Google Reader&lt;/a&gt; indican que debería poder cerrar la ventana y volver, sin conexión, y debería funcionar. Lo pruebo y efectivamente funciona (parece que hay un pequeño problema y el contenido no se carga hasta que pulso algún enlace en la página, pero bueno, es una beta sobre otra ;) ).&lt;br /&gt;&lt;br /&gt;Nada que no pudiese hacer antes con alguno de los miles de lectores RSS que ya hay, pero no es lo mismo. &lt;span style="font-weight: bold;"&gt;Las aplicaciones de sincronización han muerto&lt;/span&gt;. En breve &lt;span style="font-weight: bold;"&gt;todas las aplicaciones serán Web&lt;/span&gt; y nuestros datos estarán en un único sitio, &lt;span style="font-style: italic;"&gt;cacheados&lt;/span&gt; en varios.&lt;br /&gt;&lt;br /&gt;Google lo ha vuelto a hacer, justo a tiempo para competir con &lt;strike&gt;&lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; de Microsoft&lt;/strike&gt; &lt;a href="http://www.programania.net/diseno-de-software/ajax/adobe-apollo/"&gt;Apollo, de Adobe&lt;/a&gt;. &lt;strike&gt;Pero claro, sólo uno funciona en "el otro" sistema operativo y "el otro" navegador ;)&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Corrección: Silverlight no incorpora nada para &lt;a href="http://msdn2.microsoft.com/en-us/library/bb428859.aspx"&gt;trabajo offline&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8845099489182303612?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8845099489182303612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8845099489182303612'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/google-gears-unplugged-web-20.html' title='Google Gears: Unplugged Web 2.0'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ThiAJt9Eftg/Rl7jy4r5gTI/AAAAAAAAAA4/9Mk66uyBAbA/s72-c/gearsAdvisor.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6055809945148902198</id><published>2007-05-29T20:27:00.000+01:00</published><updated>2007-06-05T21:36:10.866+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='myfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Entierra con el hacha las pantallas de edición</title><content type='html'>&lt;span class="dropcaps"&gt;C&lt;/span&gt;uando conocí &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;, me gustó. Pero cuando me convertí en usuario me enamoró por lo terriblemente bien hecho que está el interfaz, muy especialmente un detalle: &lt;span style="font-weight: bold;"&gt;si algo en la pantalla es editable por mí, lo puedo editar directamente&lt;/span&gt;. Por ejemplo, si doy de alta una foto, cuando estoy en su pantalla de detalle, si pulso en el título, el texto se convierte -elegantemente- en un campo de entrada, y puedo editar el valor, que se almacena vía Ajax (como el componente inline de Dojo).&lt;br /&gt;&lt;br /&gt;Esa comodidad viene de romper con un hábito habitual: &lt;span style="font-weight: bold;"&gt;separar las pantallas de ver y de editar&lt;/span&gt;. ¿Para qué? Yo, usuario de la aplicación, no quiero tener que pasar a "modo edición" cada vez que quiera cambiar un dato. Si estoy viendo algo que &lt;span style="font-style: italic;"&gt;puedo&lt;/span&gt; editar, debo &lt;span style="font-style: italic;"&gt;poderlo&lt;/span&gt; editar, sin indicarle a la aplicación "¡oye, que voy a editar!". El componente de edición inline a mí me encanta pero para muchos usuarios puede ser confuso, por lo que, en una aplicación web, este principio se traduce a que &lt;span style="font-weight: bold;"&gt;si un dato no es editable debe aparecer como texto&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;¡no en un campo deshabilitado!&lt;/span&gt;), y&lt;span style="font-weight: bold;"&gt; si es editable, en un campo&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Esto en muchos entornos se traduce en jsps llenas de &lt;span style="font-family:courier new;"&gt;if&lt;/span&gt;s, o, con suerte, de &lt;span style="font-family:courier new;"&gt;c:if&lt;/span&gt;s, lo cual ni es productivo, ni mantenible, ni legible. Sin embargo, si puedes utilizar JSF y Tomahawk, no debes dejar pasar el &lt;span style="font-weight: bold;"&gt;atributo &lt;span style="font-family:courier new;"&gt;displayValueOnly&lt;/span&gt;&lt;/span&gt; de (casi) todos los campos de entrada. Permite, mediante una expresión JSF, decidir si algo se muestra &lt;span style="font-weight: bold;"&gt;como texto o como campo&lt;/span&gt;. Mejor, imposible. Y, para gestionar también el permiso de visibilidad sobre una propiedad, tienes el &lt;span style="font-weight: bold;font-family:courier new;" &gt;rendered&lt;/span&gt;. Con estos dos atributos manejas los tres permisos elementales (visibilidad, lectura y escritura) de la forma mínima.&lt;br /&gt;&lt;br /&gt;Se acabó tener que programar varias pantallas en función de permisos y modos. Con &lt;span style="font-weight: bold;"&gt;una única pantalla&lt;/span&gt; podemos mostrar sólo lo que un usuario pueda ver (¡a nivel de propiedad!) y editar sólo lo que pueda editar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6055809945148902198?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6055809945148902198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6055809945148902198'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/entierra-con-el-hacha-las-pantallas-de.html' title='Entierra con el hacha las pantallas de edición'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8187450803252246534</id><published>2007-05-27T13:48:00.000+01:00</published><updated>2007-06-05T21:15:12.406+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><title type='text'>Java QuickTip #0: comparaciones de igualdad</title><content type='html'>&lt;span class="dropcaps"&gt;C&lt;/span&gt;uando hagas comparaciones de igualdad de objetos, en vez de hacer&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;div style="text-align: center;"&gt;&lt;code&gt;miCadena != null &amp;&amp;amp; miCadena.equals("hola")&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;haz&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;div style="text-align: center;"&gt;&lt;code&gt;"hola".equals(miCadena)&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;Funciona igual y nunca te olvidarás de hacer la comprobación de no nulidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8187450803252246534?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8187450803252246534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8187450803252246534'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/java-quicktip-0-comparaciones-de.html' title='Java QuickTip #0: comparaciones de igualdad'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-6322497589635770364</id><published>2007-05-27T10:37:00.000+01:00</published><updated>2007-05-27T11:28:10.841+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='agil'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Técnicas ágiles</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;as &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;metodologías ágiles&lt;/a&gt; fracasarán, como todas las demás metodologías, porque en informática &lt;a href="http://www.versioncero.com/noticia/500/los-procesos-en-el-software"&gt;lo importante no son los procesos, sino el talento&lt;/a&gt;. Además, porque aprovecharlas probablemente significa olvidarse de CMMIs, ISOs y demás siglas que les gusta a los tipos encorbatados que impiden que las cosas se hagan como se debe.&lt;br /&gt;&lt;br /&gt;Sin embargo, sus técnicas están aquí para quedarse:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Testing&lt;/span&gt;: hacer pruebas es poco costoso y muy beneficioso. Permite desarrollar más ágilmente, sin intervención de pesados servidores de aplicaciones. Detecta errores en cambios (¿cuántas veces las cosas dejan de funcionar y es el usuario el que lo detecta?). En Navegápolis listan &lt;a href="http://www.navegapolis.net/content/view/625/"&gt;herramientas de pruebas&lt;/a&gt;, a las que yo añado las siguientes:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jakarta.apache.org/jmeter/"&gt;JMeter&lt;/a&gt;: pruebas de carga y funcionales.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.badboy.com.au/"&gt;BadBoy&lt;/a&gt;: un Internet Explorer que permite "grabar macros" para después lanzarlas. Permite probar Javascript, y su proxy funciona incluso usando https y certificados de cliente (ya que se ejecuta "por encima del navegador", en vez de "por debajo" como el JMeter).&lt;/li&gt;&lt;li&gt;&lt;a href="http://unitils.sourceforge.net/summary.html"&gt;Unitils&lt;/a&gt;: un recubrimiento de JUnit y otras cuantas que como mínimo te facilita la vida hasta que todos  (JUnit, Spring...) se pongan de acuerdo para funcionar de verdad juntos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Integración Contínua&lt;/span&gt;: mantenme informado de cómo va el código de nuestro proyecto (¿compila al menos? ¿pasa las pruebas? ¿cumple las métricas? ¡avísame al messenger si hay problemas!)&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://maven.apache.org/continuum/"&gt;Continuum&lt;/a&gt; o &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; son las dos herramientas OS más comunes.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Olvidarse de tantos diagramas UML, documentos de viabilidad, planificación, requisitos, análisis, diseño, presentaciones powepoint y demás basura que no sirve para casi nada, y "&lt;a href="http://video.google.com/videoplay?docid=-7230144396191025011"&gt;símplemente hacerlo&lt;/a&gt; (6:00)".&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;PD: el artículo citado antes enlaza a su vez con otro sobre &lt;a href="http://www.navegapolis.net/content/view/319/"&gt;procesos&lt;/a&gt; de obligada lectura, y saca de él una cita que no puedo menos que plagiar también:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Las pautas que en los entornos industriales logran eficiencia, en el software producen mediocridad.&lt;br /&gt;Gestionar empresas del conocimiento con teoría de management industrial genera productos mediocres y técnicos desmotivados.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-6322497589635770364?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6322497589635770364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/6322497589635770364'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/tcnicas-giles.html' title='Técnicas ágiles'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1722879351424487699</id><published>2007-05-26T16:39:00.000+01:00</published><updated>2007-06-05T21:15:56.612+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='offline'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>La Web: la piedra filosofal de la informática</title><content type='html'>&lt;span class="dropcaps"&gt;L&lt;/span&gt;a web pretende convertirse en los próximos años en la plataforma (casi) perfecta. Si hiciésemos una lista de características de una aplicación ideal podríamos indicar, por ejemplo, que no tuviese &lt;span style="font-weight: bold;"&gt;instalación&lt;/span&gt;, que pudiese acceder a ella &lt;span style="font-weight: bold;"&gt;desde cualquier sitio&lt;/span&gt;, que no necesitase &lt;span style="font-weight: bold;"&gt;conexión a Internet&lt;/span&gt; para funcionar, pero que la aprovechase si la tuviese, que se &lt;span style="font-weight: bold;"&gt;actualizase&lt;/span&gt; automáticamente (¡y gratis!), que facilitase el &lt;span style="font-weight: bold;"&gt;trabajo compartido...&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;La teoría es que esto se podría conseguir casi con cualquier lenguaje, pero sólo la Web ha conseguido meterse (hasta el tuétano) en nuestra vida. Así que, lo que a priori es una &lt;span style="font-weight: bold;"&gt;basura&lt;/span&gt; de plataforma (estándares ineficaces, implementaciones deficientes, problemas de seguridad, frameworks complejos, pocas herramientas útiles...) va camino de convertirse en los próximos años en la piedra filosofal. &lt;a href="http://docs.google.com/"&gt;Google Docs&lt;/a&gt; viene anticipando desde hace meses la muerte de los paquetes de ofimática gracias a Ajax, pero la siguiente generación de &lt;span style="font-weight: bold;"&gt;navegadores&lt;/span&gt; se pretende convertir en una &lt;span style="font-weight: bold;"&gt;plataforma de ejecución &lt;/span&gt;mediante &lt;a href="http://www.error500.net/firefox-3-aplicaciones-web-offline"&gt;&lt;span style="font-weight: bold;"&gt;aplicaciones offline&lt;/span&gt;&lt;/a&gt;. La idea es tan "simple" como que los recursos se almacenen en una caché local con &lt;a href="http://www.zonafirefox.net/2007/03/firefox-3-alpha-3-disponible.html"&gt;el rel="offline-resource"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hasta ahora, por ejemplo, teníamos el &lt;strike&gt;Word&lt;/strike&gt; OpenOffice, programado en C++ y compilado a código máquina, ejecutándose con el procesador interpretando este código. Periódicamente &lt;strike&gt;pirateamos&lt;/strike&gt; &lt;a href="http://www.gentoo.org/doc/es/handbook/handbook-x86.xml?part=2&amp;chap=1"&gt;emergemos&lt;/a&gt; la versión nueva, cuando vamos a otro ordenador, lo instalamos también...&lt;br /&gt;En breve tendremos una &lt;a href="http://blogs.zdnet.com/Google/?p=356"&gt;nueva versión de Google Docs&lt;/a&gt;, que se ejecutará sobre el &lt;span style="font-weight: bold;"&gt;intérprete JavaScript&lt;/span&gt; de Firefox, que si estamos conectados a Internet ejecutará la ultimísima versión, y si no, la de la última vez que entramos. Nada de instalaciones, nada de actualizaciones... Sí, es más lento interpretar JavaScript que ejecutar código máquina, pero ¿para qué queremos si no estos fantásticos procesadores de n núcleos que nos venden?&lt;br /&gt;&lt;br /&gt;Por si alguien no le da importancia, tanto Microsoft con &lt;a href="http://www.error500.net/wpfe-flash-microsoft-rich-internet-application"&gt;Apollo&lt;/a&gt; como Adobe con &lt;a href="http://www.error500.net/adobe-flex"&gt;Flex&lt;/a&gt; ya se han posicionado para dominar un mercado difícil de dominar. Incluso &lt;a href="http://dojotoolkit.org/offline"&gt;Dojo&lt;/a&gt; tiene un paquete para aplicaciones &lt;a href="http://www.sitepen.com/blog/2007/01/02/the-dojo-offline-toolkit/"&gt;offline&lt;/a&gt;.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&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/4170768470549625640-1722879351424487699?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1722879351424487699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1722879351424487699'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/la-web-la-piedra-filosofal-de-la.html' title='La Web: la piedra filosofal de la informática'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5521700729990273011</id><published>2007-05-25T16:01:00.000+01:00</published><updated>2007-05-26T19:33:52.283+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pestañas'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax4jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='richfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='tabs'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Pestañas</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;n términos de usabilidad, &lt;a href="http://en.wikipedia.org/wiki/Tab_%28GUI%29"&gt;las pestañas&lt;/a&gt; son seguramente mi componente favorito. Aunque a &lt;a href="http://www.useit.com/alertbox/"&gt;Jacob Nielsen&lt;/a&gt; &lt;a href="http://www.useit.com/alertbox/991114.html"&gt;no le guste el (supuesto) abuso que se hace de ellas&lt;/a&gt;, son un modo fantástico de organizar la información. Por ejemplo, ahora mismo mi pantalla tiene dos grupos de pestañas: las de Firefox, que organizan las páginas de consulta para escribir este artículo, y las que Blogger utiliza para organizar la edición del blog. A Jakob Nielsen posiblemente estas segundas no le gustarían, ya que son de navegación, no para mostrar diferentes vistas de una misma cosa...&lt;br /&gt;&lt;br /&gt;En el libro &lt;a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0789723107"&gt;Don't Make Me Think&lt;/a&gt; les dedican unas siete páginas, que os paso a resumir:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Es una de las pocas &lt;span style="font-weight: bold;"&gt;metáforas que funcionan&lt;/span&gt; plagiadas directamente de &lt;a href="http://en.wikipedia.org/wiki/Real_world"&gt;El Mundo Real™&lt;/a&gt;: de un plumazo muestran la estructura de un elemento, organizan su información y permiten acceder de forma rápida a apartados específicos.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Son obvias, &lt;span style="font-weight: bold;"&gt;fáciles de usar y fáciles de comprender&lt;/span&gt; (en el fondo esto es repetir tres veces lo mismo).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Amazon&lt;/span&gt; fue uno de los primeros sitios en usarlas. En mi opinión, la parte del libro en el que hace un estudio sobre la evolución de las pestañas de Amazon es de obligada lectura para todo diseñador Web. No vayáis ahora a Amazon a ver cómo son, porque prácticamente las han suprimido, ya que se toparon con su principal problema, que es que...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;... &lt;span style="font-weight: bold;"&gt;escalan mal&lt;/span&gt;: más de siete pestañas casi siempre son demasiadas. Tanto por espacio físico como por el modelo mental que el usuario hace de ellas al usarlas.&lt;/li&gt;&lt;/ul&gt;En términos (web) prácticos, mi &lt;span style="font-weight: bold;"&gt;implementación&lt;/span&gt; favorita es la que tiene &lt;a href="http://www.ubuntu-es.org/"&gt;el portal hispano de Ubuntu&lt;/a&gt;, basada en listas de elementos, enlaces y CSS. La técnica queda descrita en este &lt;a href="http://exploding-boy.com/images/cssmenus/menus.html#"&gt;ejemplo de pestañas&lt;/a&gt;. Permiten tener varias líneas de texto, si desaparece el estilo queda html comprensible (buena accesibilidad, por tanto), vistosas (al usar imágenes de fondo, en vez de tablas), etc.&lt;br /&gt;&lt;br /&gt;Sin embargo, al pensar en nuestra ¿querida? generación de páginas en Java y ahora que estoy metido hasta el cuello en JSF y Ajax, me abordaba una duda: &lt;span style="font-weight: bold;"&gt;¿navegación tradicional&lt;/span&gt; (cliente-servidor puro), navegación &lt;span style="font-weight: bold;"&gt;cliente&lt;/span&gt; (sólo Javascript), o &lt;span style="font-weight: bold;"&gt;Ajax&lt;/span&gt;? La primera es lenta para el usuario, pero de fácil implementación. La segunda es la más rápida una vez cargada, pero la más lenta de carga, al generar todas. La tercera, un buen término medio, pero de compleja implementación... hasta que conocí &lt;a href="http://livedemo.exadel.com/richfaces-demo/richfaces/tabPanel.jsf"&gt;las &lt;span style="font-weight: bold;"&gt;pestañas de RichFaces&lt;/span&gt;&lt;/a&gt;. Una vez superas ciertos problemas técnicos, se convierten en un perfecto &lt;span style="font-weight: bold;"&gt;3 en 1&lt;/span&gt;. Con cambiar un parámetro cambias entre los tres modelos anteriores. La única pega, que son tablas :\ En cuanto tenga tiempo espero hacer un componente semejante, basado en Ajax4JSF como RichFaces, que implemente las pestañas elegantes de Ubuntu.&lt;br /&gt;&lt;br /&gt;PD: me gustan tanto que las he metido en el blog (en formato cliente puro). Están arriba, sobre la imagen de cabecera, e iré recopilando en ellas las referencias, estándares y blogs que hacen del mundo del desarrollo de software un mundo un poco más llevadero.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5521700729990273011?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5521700729990273011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5521700729990273011'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/pestaas.html' title='Pestañas'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-1841273550606617906</id><published>2007-05-23T15:30:00.000+01:00</published><updated>2007-06-05T21:16:25.345+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>JSF (Una historia de amor y odio sin final todavía)</title><content type='html'>&lt;span class="dropcaps"&gt;C&lt;/span&gt;onocí a JSF en medio de una relación. Llevaba un par de años con &lt;span style="font-weight: bold;"&gt;Struts&lt;/span&gt;. Al principio me había parecido (Struts) &lt;span style="font-weight: bold;"&gt;engorroso y pesado&lt;/span&gt; (venía de un largo affair con PHP), pero una vez conocí a sus parientes Validator y Tiles, me ganó. &lt;span style="font-weight: bold;"&gt;Me acabó convenciendo&lt;/span&gt; la potencia de utilizar ficheros de configuración para casi todo, y su orientación a las acciones me parecía una &lt;span style="font-weight: bold;"&gt;forma natural de programar en MVC&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En un viaje a la capital me presentaron a JSF, y mi impresión no pudo ser más tibia. Tenía la sensación de estar &lt;span style="font-weight: bold;"&gt;haciendo lo mismo&lt;/span&gt;, pero de otra manera, con ficheros de configuración que no me aportaban nada, y con etiquetas menos potentes que antes. Además, no vino solo, sino que iba acompañado de Spring e IBatis, haciendo que romper el hielo fuese todavía &lt;span style="font-weight: bold;"&gt;más difícil&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;¿Qué me aportaba pensar en componentes en vez de en acciones?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;De repente, un tercero se cruzó en mi camino y lo ví claro: &lt;span style="font-weight: bold;"&gt;Ajax&lt;/span&gt;. Todo cobraba sentido. Un campo de texto nunca más sería una caja vacía hasta que alguien pulsa el botón. Ahora, &lt;span style="font-style: italic;"&gt;un campo de texto despliega sugerencias, se conecta al servidor para validarse de forma asíncrona, activa y desactiva partes de la página...&lt;/span&gt; Y &lt;span style="font-weight: bold;"&gt;si quieres programar esto de forma productiva, JSF es la elección&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Hasta aquí, la bonita historia de amor que se ve. Lo malo es cuando lees entre líneas. &lt;span style="font-weight: bold;"&gt;JSF es un estándar limitadísimo en términos de componentes&lt;/span&gt; (&lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=RethinkingJSF"&gt;y no sólo lo digo yo&lt;/a&gt;). &lt;span style="font-weight: bold;"&gt;Es tan solo un framework sobre el que montar algo más interesante&lt;/span&gt;. Nació en el 2004 como la oferta de Sun ante el despropósito de J2EE al programar aplicaciones web, pero no ha sido hasta masificación de Ajax cuando se ha empezado a invertir en él.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Las implementaciones &lt;/span&gt;(&lt;a href="http://www.myfaces.org/"&gt;MyFaces&lt;/a&gt;, &lt;a href="http://java.sun.com/javaee/javaserverfaces/"&gt;Sun RI&lt;/a&gt;, &lt;a href="https://facelets.dev.java.net/"&gt;Facelets&lt;/a&gt;...), &lt;span style="font-weight: bold;"&gt;frameworks&lt;/span&gt; (&lt;a href="http://labs.jboss.com/jbossajax4jsf/"&gt;Ajax4JSF&lt;/a&gt;, &lt;a href="http://www.icefaces.org/main/home/index.jsp"&gt;ICEFaces&lt;/a&gt;, &lt;a href="http://myfaces.apache.org/tobago/"&gt;Tobago&lt;/a&gt;...) &lt;span style="font-weight: bold;"&gt;y librerías de componentes &lt;/span&gt;(&lt;a href="http://livedemo.exadel.com/richfaces-demo/"&gt;RichFaces&lt;/a&gt;, &lt;a href="http://myfaces.apache.org/tomahawk/"&gt;Tomahawk&lt;/a&gt;, &lt;a href="https://ajax.dev.java.net/"&gt;jMaki&lt;/a&gt;...) &lt;span style="font-weight: bold;"&gt;prometen mucho, pero en la práctica hacerlas funcionar es desesperante&lt;/span&gt;. Mala documentación, incompatibilidades, tener que recurrir a betas, sandboxes, nightshots...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Aún así, creo que ahora mismo la mejor opción para elegir un MVC si quieres Ajax es JSF&lt;/span&gt;. Concretamente, (MyFaces + Tomahawk (imprescindibles)) + (Ajax4JSF + RichFaces (potentes)). Los dos primeros proporcionan un conjunto base razonablemente estable y completo, y los dos segundos, toda la potencia de Ajax (aunque mezclar ciertos componentes con otras librerías es poco menos que imposible).&lt;br /&gt;&lt;br /&gt;Se agradecerán sugerencias...&lt;br /&gt;&lt;br /&gt;P.D.: MyFaces se mueve mucho. En el wiki hay un &lt;a href="http://wiki.apache.org/myfaces/"&gt;buen lote de artículos de JSF, MyFaces e incluso de integración con otras librerías&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Actualización: leo en &lt;a href="http://raibledesigns.com/rd/entry/java_web_framework_tools_how"&gt;un blog&lt;/a&gt; un curioso gráfico del número de librerías Ajax existentes para diferentes tecnologías. La gráfica corrobora mi teoría de que, a pesar del caos de librerías, JSF es la opción para implementar aplicaciones Ajax.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ThiAJt9Eftg/RlSJDzxPAdI/AAAAAAAAAAw/ymbhaFWS0eY/s1600-h/tools-comparison.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ThiAJt9Eftg/RlSJDzxPAdI/AAAAAAAAAAw/ymbhaFWS0eY/s320/tools-comparison.png" alt="" id="BLOGGER_PHOTO_ID_5067826179227976146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Actualización 2: esa gráfica sale de una &lt;span style="font-weight: bold;"&gt;&lt;a href="http://static.raibledesigns.com/repository/presentations/ComparingJavaWebFrameworks.pdf"&gt;interesante comparativa de frameworks J2EE&lt;/a&gt;&lt;/span&gt;, muy actualizada&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-1841273550606617906?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1841273550606617906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/1841273550606617906'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/jsf-una-historia-de-amor-y-odio-sin.html' title='JSF (Una historia de amor y odio sin final todavía)'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ThiAJt9Eftg/RlSJDzxPAdI/AAAAAAAAAAw/ymbhaFWS0eY/s72-c/tools-comparison.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-5893721739778151080</id><published>2007-05-18T19:20:00.000+01:00</published><updated>2007-05-26T19:35:56.146+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wcag'/><category scheme='http://www.blogger.com/atom/ns#' term='wcag 1.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='accesibilidad'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='wcag wg'/><category scheme='http://www.blogger.com/atom/ns#' term='wcag 2.0'/><title type='text'>Nuevo borrador de WCAG 2.0</title><content type='html'>&lt;span class="dropcaps"&gt;E&lt;/span&gt;l &lt;a href="http://www.w3.org/WAI/GL"&gt;Web Content Accessibility Guidelines Working Group (WCAG WG)&lt;/a&gt; es la máxima autoridad de Internet en términos de accesibilidad. Suyo es el único estándar de usabilidad reconocido internacionalmente (y legalmente), el &lt;a href="http://www.w3.org/TR/WCAG10/"&gt;WCAG 1.0&lt;/a&gt;. El problema es que ese estándar es de 1999, y está totalmente desfasado. Está orientado únicamente a accesibilidad &lt;span style="font-weight:bold;"&gt;en contenido web&lt;/span&gt;, pero, &lt;span style="font-style:italic;"&gt;¿qué ocurre con las aplicaciones web?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Las &lt;span style="font-weight:bold;"&gt;aplicaciones web&lt;/span&gt; no son comparables a las páginas a las que fue destinado aquél estándar hace ya 8 años. Las aplicaciones web no son (principalmente) un medio de distribución de contenido, sino que &lt;span style="font-weight:bold;"&gt;son un sustituto de las aplicaciones de escritorio&lt;/span&gt;, no se puede aplicar las mismas reglas. Especialmente ahora que todos nos volcamos en Ajax para hacerlas más usables, rápidas y cómodas.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/WAI/GL/#pwd"&gt;Hoy se ha publicado&lt;/a&gt; un nuevo &lt;a href="http://www.w3.org/TR/2007/WD-WCAG20-20070517/"&gt;borrador del siguiente estándar, WCAG 2.0&lt;/a&gt;, llamado a sustituir al primero y permitir el uso de estas nuevas tecnologías. Sólo queda que tarde o temprano se convierta en estándar estable (lo llevan prometiendo desde el 2005), y al fin se podrá cumplir la ley, proporcionando aplicaciones accesibles, sin tener que renunciar a los últimos avances en desarrollo web.&lt;br /&gt;&lt;br /&gt;Esto hará, además, que se sustituyan las aplicaciones de escritorio (las cuales nunca fueron objeto de legislación sobre accesibilidad) por otras, basadas en tecnologías web, que acercarán la informática a usuarios con discapacidades.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-5893721739778151080?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5893721739778151080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/5893721739778151080'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/nuevo-borrador-de-wcag-20.html' title='Nuevo borrador de WCAG 2.0'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3954408570513772153</id><published>2007-05-17T21:08:00.000+01:00</published><updated>2007-05-26T19:36:06.901+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='agil'/><category scheme='http://www.blogger.com/atom/ns#' term='metodología'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Metodologías ágiles</title><content type='html'>&lt;span class="dropcaps"&gt;A&lt;/span&gt;lgo va mal cuando nadie quiere utilizar metodologías &lt;span style="font-style:italic;"&gt;pesadas&lt;/span&gt; como RUP o METRICA. Algo va muy mal cuando, siguiendo esas tecnologías, se hace lo que buenamente se puede en el tiempo disponible y después los diseños no se utilizan en la construcción, ya sea por incapacidad del autor o del programador (o de ambos).&lt;br /&gt;&lt;br /&gt;Desde hace años existen las &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;metodologías ágiles de desarrollo de software&lt;/a&gt;. Algún profesor de Ingeniería del Software nombraba XP (eXtreme Programming) con la boca pequeña, como aquella cosa que hacen los que no saben nada más que programar. Sin embargo, cuando lees &lt;a href="http://geeks.ms/blogs/rcorral/default.aspx"&gt;ingenieros de Microsoft&lt;/a&gt; que &lt;a href="http://geeks.ms/blogs/rcorral/archive/2007/05/06/exprimiendo-scrum-scrum-y-la-documentaci-243-n.aspx"&gt;a&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/rcorral/archive/2007/05/10/lecturas-imprecincibles-sobre-scrum.aspx"&gt;todas&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/rcorral/archive/2006/11/24/las-reglas-de-scrum-y-iv-el-sprint-review-meeting.aspx"&gt;horas&lt;/a&gt; hablan de &lt;a href="http://en.wikipedia.org/wiki/Scrum_%28management%29"&gt;Scrum&lt;/a&gt;, o incluso &lt;a href="http://chicosencillo.blogspot.com/2007/05/metodologa-scrum.html"&gt;de Cuales&lt;/a&gt;, algo notas que está cambiando.&lt;br /&gt;&lt;br /&gt;Hoy, para echar más leña al fuego, aparece la noticia de que&lt;a href="http://www.navegapolis.net/content/view/618/"&gt; Oracle compra Agile Software Corp.&lt;/a&gt;, una empresa que desarrolla herramientas de soporte para &lt;span style="font-style:italic;"&gt;procesos ágiles&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Cuando el río suena...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3954408570513772153?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3954408570513772153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3954408570513772153'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/metodologas-giles.html' title='Metodologías ágiles'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-8608984763632716625</id><published>2007-05-11T19:02:00.000+01:00</published><updated>2007-05-26T19:36:17.041+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='buenas prácticas'/><category scheme='http://www.blogger.com/atom/ns#' term='dry'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>DRY: Breve guía para mantenerse seco</title><content type='html'>&lt;span class="dropcaps"&gt;H&lt;/span&gt;ace años un profesor de Bachiller nos contaba que &lt;span style="font-weight:bold;"&gt;hay unos pocos principios que explican la gran mayoría de los fenómenos&lt;/span&gt; de la naturaleza. La ósmosis, el principio de conservación de la energía y otros pocos son capaces de modelar una gran parte de lo que vemos.&lt;br /&gt;&lt;br /&gt;Pienso que &lt;span style="font-weight:bold;"&gt;en informática pasa lo mismo&lt;/span&gt;. Pese a los cientos de lenguajes de programación, librerías y plataformas que existen, los fundamentos que hacen de ellos una buena herramienta son muy parecidos. Entre ellos el que más importante me parece es el &lt;span style="font-weight:bold;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;"principio DRY&lt;/a&gt;": Don't Repeat Yourself&lt;/span&gt;. Repetirse supone trabajar más (un buen programador debe &lt;span style="font-style:italic;"&gt;ser vago&lt;/span&gt;), duplicar los errores, reducir la mantenibilidad del código, hacer más costosos los cambios... De ahí la gran frase de "Cada vez que cortapegas, Dios mata un gatito".&lt;br /&gt;&lt;br /&gt;Mi entorno de trabajo desde hace unos años es J2EE, y para &lt;span style="font-style:italic;"&gt;mantenerme seco&lt;/span&gt; utilizo estas herramientas:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;&lt;/span&gt;: minimizar el código de acceso a datos.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.hibernate.org/412.html"&gt;Hibernate Validator&lt;/a&gt;&lt;/span&gt;: aprovechar la especificación de persistencia para comprobar la validez de los datos recogidos en formularios, y mostrar mensajes adecuados. Y si no usas Hibernate, al menos usar &lt;span style="font-weight:bold;"&gt;Commons Validator&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;"Trocear las páginas", ya sea con &lt;span style="font-weight:bold;"&gt;Tiles&lt;/span&gt; (imprescindible si usas &lt;span style="font-style:italic;"&gt;Struts&lt;/span&gt;) o &lt;span style="font-weight:bold;"&gt;componentes&lt;/span&gt; (la mejor forma de reutilización en &lt;span style="font-style:italic;"&gt;JSF&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Uso intensivo de &lt;span style="font-weight:bold;"&gt;CSS&lt;/span&gt; para la presentación. Nada de &lt;span style="font-style:italic;"&gt;aprovechar CSS para mejorar la apariencia&lt;/span&gt;, sino componer las páginas independientemente de la presentación, delegando al 99% en los estilos (el 1% restante es para apaños para el IE).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-8608984763632716625?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8608984763632716625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/8608984763632716625'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/dry-breve-gua-para-mantenerse-seco.html' title='DRY: Breve guía para mantenerse seco'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-4170768470549625640.post-3536645873839998407</id><published>2007-05-06T20:03:00.000+01:00</published><updated>2007-05-18T19:16:20.696+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='iso'/><title type='text'>Ideas + Ingeniería del Software</title><content type='html'>&lt;code&gt;&lt;br /&gt;/**&lt;br /&gt; * Blog sobre desarrollo de software.&lt;br /&gt; *&lt;br /&gt; * @author Juan Ignacio Sánchez Lara&lt;br /&gt; * @version v0.00&lt;br /&gt; * @since 070509&lt;br /&gt; * @see http://juanignaciosl.blogspot.com/&lt;br /&gt; */&lt;br /&gt;public class I2S extends Blog implements DesarrolloDeSoftware, J2EE {&lt;br /&gt;&lt;br /&gt;    //TODO: comentario ocurrente para el primer post de un blog sobre desarrollo.&lt;br /&gt;&lt;br /&gt;    //FIXME: faltan las librerías de chistes graciosos.&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4170768470549625640-3536645873839998407?l=iiso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3536645873839998407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4170768470549625640/posts/default/3536645873839998407'/><link rel='alternate' type='text/html' href='http://iiso.blogspot.com/2007/05/ideas-ingeniera-del-software.html' title='Ideas + Ingeniería del Software'/><author><name>Nacho</name><uri>http://www.blogger.com/profile/14619363914899206503</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_ThiAJt9Eftg/SNktLKE5qRI/AAAAAAAACjE/mFgHhx3mxqk/S220/Encuadre.jpg'/></author></entry></feed>
