<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">

<channel>
<title>Narciso Cerezo: Software</title>
<link>http://narcisocerezo.zoomblog.com/</link>
<description>Blog personal de Narciso Cerezo.
Relexiones sobre tecnolog&#237;a y el dif&#237;cil cami</description>
<dc:language>es</dc:language>
<dc:date>2008-01-23T20:36:00+01:00</dc:date>
<lastBuildDate>Sat, 05 Jul 2008 10:33:06 GMT</lastBuildDate>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
<image>
<title>ZoomBlog</title>
<url>http://narcisocerezo.zoomblog.com/photo.jpg</url><link>http://www.zoomblog.com/</link>
</image>

<item>
 <title>Estamos en la home de SourceForge</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2008/01/23/estamos-en-la-home-de-Sourceforge.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2008/01/23/estamos-en-la-home-de-Sourceforge.html</guid>
 <description>
 <![CDATA[
Genial! El equipo de SourceForge ha elegido la noticia de la publicaci&#243;n de OpenBaseMovil 3.0 como destacada para aparecer en la portada de <a target="_blank" href="http://sourceforge.net/">SourceForge</a>.<br />Es algo ef&#237;mero, pero genial.<br />Por supuesto, hay <a target="_blank" href="http://www.openbasemovil.org/2008/01/23/thanks-weve-made-it-to-the-sourceforge-home/">pantallazo para la posteridad</a>.<br /><br /><br />
 ]]>
</description>
 <dc:date>2008-01-23T20:36:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>OpenBaseMovil 3.0 reflexiones sobre open source</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2008/01/23/openbasemovil-30-reflexiones-sobre-ope.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2008/01/23/openbasemovil-30-reflexiones-sobre-ope.html</guid>
 <description>
 <![CDATA[
Hoy hemos liberado la versi&#243;n 3.0 (estable) de <a target="_blank" href="http://www.openbasemovil.org/">OpenBaseMovil</a>.<br />Como ya dije, OpenBaseMovil es el resultado de abrir el 90&#37; del c&#243;digo de nuestro proyecto BaseMovil para crear aplicaciones m&#243;viles de calidad empresarial con Java Micro Edition (J2ME).<br />Con esta versi&#243;n hemos publicado una gu&#237;a de comienzo r&#225;pido, una plantilla de aplicaci&#243;n y una aplicaci&#243;n de ejemplo (que se puede descargar al m&#243;vil desde la p&#225;gina de OpenBaseMovil).<br />La aplicaci&#243;n de ejemplo es sencilla, no muy original, pero si &#250;til y cumple muy bien la misi&#243;n de mostrar c&#243;mo de sencillo y r&#225;pido es crear una aplicaci&#243;n con OpenBaseMovil.<br />Como muestra compararemos PasswordKeeper (nuestra aplicaci&#243;n de ejemplo) con KeePass for J2ME, que hace b&#225;sicamente lo mismo:<br />  
<table width="100&#37;" cellspacing="0" cellpadding="4" border="1">  
<tbody>  
<tr>  
<td>&nbsp;</td>  
<td>PasswordKeeper&nbsp;</td>  
<td>KeePass for J2ME&nbsp;</td></tr>  
<tr>  
<td>&nbsp;n&#250;mero de ficheros<br /></td>  
<td>&nbsp;20 (5)<br /></td>  
<td>71&nbsp;</td></tr>  
<tr>  
<td>&nbsp;tama&#241;o en Kb<br /></td>  
<td>&nbsp;94</td>  
<td>237</td></tr>  
<tr>  
<td>&nbsp;n&#250;mero de l&#237;neas de c&#243;digo<br /></td>  
<td>&nbsp;2326 (500)<br /></td>  
<td>6835</td></tr></tbody></table><br />De los ficheros de PasswordKeeper s&#243;lo 5 son de c&#243;digo, y el 80&#37; de las l&#237;neas corresponden a la plantilla de aplicaci&#243;n, as&#237; que realmente se queda en unas 500 l&#237;neas frente a 6835.<br /><br />En cuanto a las reflexiones sobre el Open Source he de decir que no podemos estar m&#225;s contentos, debimos hacerlo mucho antes.<br />El proyecto est&#225; subiendo cada vez m&#225;s en descargas y en ranking, las visitas a la web del proyecto van cada vez tambi&#233;n m&#225;s arriba, as&#237; como todos los factores importantes (p&#225;ginas vistas, media de p&#225;ginas vistas por visita, abandonos, tiempo en el sitio, etc).<br />Hay ciertos datos curiosos sobre las visitas y la participaci&#243;n de la gente en comentarios de la p&#225;gina.<br />Tenemos visitas de 88 paises diferentes (algunos que ni sab&#237;a que exist&#237;an), y si atendemos al n&#250;mero de visitantes el ranking es el siguiente:<br />1. India<br />2. Spain<br />3. Germany<br />4. China<br />5. Indonesia<br />6. United States<br />7. Russia<br />8. United Kingdom<br />9. Vietnam<br />10. Italy<br />Alemania ha subido ultimamente, antes China estaba por encima.<br />Est&#225; claro que la India y China son los dos mercados m&#225;s grandes del mundo por habitantes, y tambi&#233;n ocurre que son paises relativamente pobres en los que el acceso a un ordenador es m&#225;s complicado que el acceso a un tel&#233;fono, como ocurre en muchos pa&#237;ses de &#193;frica.<br />Llama la atenci&#243;n Indonesia y Vietnam, sobre este &#250;ltimo pa&#237;s he de decir que hace poco en una reuni&#243;n me contaba Jose Luis Marina que hab&#237;an estado all&#237; en un evento de open source y que hay un nivel impresionante.<br />No obstante, no s&#243;lo de visitas vive la web, hay que tener en cuenta otros factores importantes, como el tiempo que pasan en la web.<br />En este caso el ranking queda de otra manera muy diferente:<br />1. Switzerland<br />2. Germany<br />3. Hong Kong<br />4. Portugal<br />5. Guatemala<br />6. Palestinian Territory<br />7. Kuwait<br />8. Chile<br />9. Latvia<br />10. Peru<br />Aunque restringinedo al "top ten" de visitas quedar&#237;a:<br />1. Germany (21)<br />2. China (5)<br />3. Vietnam (4)<br />4. Spain (3)<br />5. United States (3)<br />6. Italy (3)<br />7. Russia (2)<br />8. India (1)<br />9. United Kingdom (1)<br />10. Indonesia (&lt;1)<br />La diferencia entre Alemania y el resto es apabullante.<br />Esto la verdad es que tiene su reflejo en la participaci&#243;n en la web, son mayoritariamente alemanes y chinos quienes nos preguntan y nos felicitan.<br /><br />Veremos como evolucionan ahora las visitas una vez que la plataforma est&#225; completa para su uso y con todas las herramientas posibles.<br />Iremos a&#241;adiendo secciones (FAQ, por ejemplo) a medida que nos vayan llegando las consultas.<br /><br />Un dato interesante tambi&#233;n es que a ra&#237;z de publicar OpenBaseMovil (antes de tener la versi&#243;n 3.0 RC1) nos han surgido muchos contactos interesantes, de compa&#241;&#237;as grandes incluso, aunque en general de fuera de nuestras fronteras.<br />Aunque es cierto que tambi&#233;n van subiendo las visitas a nuestra p&#225;gina principal gracias al proyecto OpenBaseMovil.<br /><br />Ahora nos queda por ver como evoluciona tanto como "herramienta de marketing" como proyecto y posible generador de ingresos.<br /><br />&#191;Qu&#233; opinas? &#191;Te llama la atenci&#243;n alguno de los datos?<br /><br /><br />
 ]]>
</description>
 <dc:date>2008-01-23T13:08:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>OpenSource</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2008/01/08/opensource.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2008/01/08/opensource.html</guid>
 <description>
 <![CDATA[
Como hace tiempo que no escribo, seguro que hay muchos que a&#250;n no saben que hemos liberado parte de nuestra plataforma con el nombre <a target="_blank" href="http://www.openbasemovil.org/">OpenBaseMovil</a>.<br />El proyecto est&#225; alojado en SourceForge, y bastante bien posicionado ya tanto en SourceForge como en buscadores, sin haber hecho realmente un esfuerzo en este sentido.<br />Y a pesar de ello, est&#225; siendo una de las acciones m&#225;s rentables que hemos hecho. L&#225;stima no haberlo hecho antes.<br />Por lo pronto, y aunque todo lo estamos publicando en ingl&#233;s, nada m&#225;s ponerlo en marcha la gente de <a target="_blank" href="http://www.xatakamovil.com/2007/11/22-desarrollo-rapido-en-j2me-con-openbasemovil">Xataka Movil se hizo eco</a>, lo cual nos trajo bastantes visitas nacionales, incluso alg&#250;n que otro lead.<br />Una vez que pongamos todo el c&#243;digo descargable, con sus manuales completos, ejemplos de aplicaciones, etc, espero que a&#250;n tire mucho m&#225;s, pero no nos podemos quejar.<br />He de decir que nos ha dado mucha visibilidad, sobre todo internacional.<br />Hay cosas muy curiosas que se ven con las estad&#237;sticas de la web, aunque la que me llama m&#225;s la atenci&#243;n es c&#243;mo las visitas han ido cambiando su procedencia geogr&#225;fica y siguen evolucionando. Espa&#241;a ahora no es el primer lugar, sino que lo s&#243;n India y China, y tambi&#233;n en gran medida Rusia, Estados Unidos y Alemania.<br />Algo importante sobre la plataforma es lo que viene detra&#347;, en cuanto tengamos todo publicado: OpenMidsets.<br />Ya he hablado de ello antes aunque brevemente, pero se trata de una aplicaci&#243;n que ser&#225; portada a todos los sistemas m&#243;viles posibles y que abstraer&#225; al desarrollador de aplicaciones. Se podr&#237;a decir que es parecido a Nokia Widgets, pero en realidad es mucho m&#225;s potente y ambicioso. Por lo pronto, pretentedemos portarlo de J2ME a BlackBerry y Android, y tambi&#233;n a versiones espec&#237;ficas para Symbian y WindowsMobile, aunque todo eso llevar&#225; m&#225;s tiempo.<br />En la web de OpenBaseMovil hay una presentaci&#243;n que dimos en OpenMovilForum, en la que hablamos m&#225;s de todo esto para el que tenga inter&#233;s.<br />Lo que si he de decir es que hemos recibido feedback muy interesante de desarrolladores de lugares muy diferentes, incluso de grandes compa&#241;&#237;as, interesados en nuestro software y a los que les ha parecido muy buena la estrategia que hemos pensado para este movimiento Open Source.<br />Esto, como los premios, de momento no da ingresos directos, es lo que tiene el c&#243;digo abierto. Sin embargo, al contrario que los premios, si que nos est&#225; trayendo de forma indirecta ingresos y publicidad gratuita.<br />&#191;D&#243;nde terminar&#225;? No lo se, francamente, pero hay muchas cosas que me han sorprendido gratamente en esta actuaci&#243;n. Igual de aqu&#237; a poco tiempo puedo dar algunos datos m&#225;s.<br />Lo que si que ser&#237;a interesante es empezar a tener gente que quiera hacer OpenMidsets en cuanto tengamos la primera beta. A mi se me han ocurrido unas cuantas aplicaciones interesantes que hacer a modo de ejemplo con OpenMidsets, pero seguro que a todos los que est&#225;is ah&#237; se os ocurren muchas m&#225;s.<br />Si alguien se anima a colaborar, no tiene m&#225;s que decirlo.<br /><br />
 ]]>
</description>
 <dc:date>2008-01-08T15:19:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>Recursos limitados</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2005/09/27/recursos-limitados.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2005/09/27/recursos-limitados.html</guid>
 <description>
 <![CDATA[
Hace unos d&#237;as, mi amigo Sergio de <a target="_blank" href="http://www.knowgate.es/">Knowgate</a> me envi&#243; un enlace hacia una especie de <a target="_blank" href="http://www2.b3ta.com/heyhey16k/">caricatura en flash para nost&#225;lgicos</a>. Como bien dec&#237;a el, casi se me caen las l&#225;grimas al recordar aquellos m&#237;ticos "Manic Minner", "Underworld", "Enduro Racer" y otros muchos juegos realmente impresionantes que funcionaban en un peque&#241;o Sinclair Spectrum con 16Kb de RAM y 3,77MHz, parece mentira.<br />Creo que somos unos cuantos los que aprendimos en aquella &#233;poca, primero con basic, luego con ensamblador del Zilog Z-80.<br />Lo cierto es que ahora ando muy liado con un nuevo proyecto muy interesante basado en J2ME, la plataforma de Java para dispositivos m&#243;viles, realmente muy limitados con respecto a los ordenadores a los que estamos acostumbrados. No obstante, siguen siendo mucho m&#225;s que aquellos spectrum, ya que es habitual contar con 512Kb de RAM y la velocidad de proceso suele ser m&#225;s que esos 3,77MHz.<br />En cierto modo, es como volver a aquella &#233;poca, porque hay que hacer las cosas poniendo un &#233;nfasis especial en el ahorro de memoria y de ciclos de CPU, algo que aprend&#237; muy bien con el Z-80. El truco de hacer XOR A,A en vez de LD A,0 le gust&#243; mucho a mi profesora de Fundamentos del Material Inform&#225;tico :-p.<br />Adem&#225;s, hay que hacer cantidad de cosas desde cero porque el sistema no da para m&#225;s. Por ejemplo, para almacenar datos se tienen unas "cosas" que se llaman RecordStore y que son una especie de tabla de base de datos muy rudimentaria. Lo &#250;nico que te da es poder crear registros con un autonum&#233;rico que gestiona el sistema y cuyos datos son un bloque de bytes, en crudo, tu te las apa&#241;as para guardar y leer la informaci&#243;n. Sobre esto, he realizado un sistema de base de datos m&#225;s o menos complejo. Tiene &#237;ndices que permiten buscar la informaci&#243;n muy r&#225;pidamente, campos como en una tabla normal de un sistema SQL, se puede filtrar, ordenar, etc. Pero lo mejor de todo es que lleva incorporado un sistema de sincronizaci&#243;n contra un servidor central, de forma que es capaz de detectar los cambios en el servidor y bajarlos al dispositivo y al contrario, enviar los cambios producidos en el dispositivo hacia el servidor.<br /><br />Bueno, a ver si saco un ratito y escribo un poco sobre un tema que sali&#243; hace una o dos semanas en el blog de Enrique Dans sobre temas de recursos humanos, en concreto sobre el horario de trabajo y las recompensas. Es un tema que me enciende debido a las experiencias pasadas.<br /><br />Hasta entonces.<br />
 ]]>
</description>
 <dc:date>2005-09-27T10:15:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>Fedora Core 4, SELinux vs. Java, Apache, Jboss</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2005/08/12/fedora-Core-4-Selinux-vs-Java-Apache-J.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2005/08/12/fedora-Core-4-Selinux-vs-Java-Apache-J.html</guid>
 <description>
 <![CDATA[
<div style="clear:both;"></div>Recientemente he actualizado mi equipo, de <a href="http://fedora.redhat.com/">Fedora</a> Core 3 a Fedora Core 4. Ciertamente el salto ha sido mayor que en ediciones anteriores. El look and feel est&#225; m&#225;s conseguido; detecta, monta y crea enlaces temporales en el escritorio para cualquier dispositivo removible (CD/DVD, USB disk, etc); tiene algo muy util pero que requiere una muy buena tarjeta gr&#225;fica: transparencia para ventanas en segundo plano. Esto &#250;ltimo est&#225; muy bien porque elimina esa sensaci&#243;n de escritorio lleno. Tambi&#233;n tiene soporte para bluetooth integrado y otras cuantas cosas m&#225;s que hacen ver como se acerca m&#225;s a Window$.<br />Pero no todo iban a ser alegr&#237;as, de hecho me ha tra&#237;do loco con ciertas cosas, casi todas de la mano de SELinux. La verdad es que me fij&#233; que en versiones anteriores ya estaba SELinux, pero por defecto ven&#237;a desactivado y nunca le prest&#233; mucha atenci&#243;n. Ahora en cambio, SELinux viene activado por defecto, lo cual implica una serie de restricciones importantes de seguridad para el sistema de ficheros y las comunicaciones. Que no es que est&#233;n mal, porque de hecho es buena la seguridad, pero hasta que no aprenda mejor como usarlo lo he desactivado.<br />As&#237; que por si a alguno le pasan cosas como estas, ah&#237; va la lista de "incidentes":<br /><ol>   <li>Si traes una copia de seguridad de ficheros (hecha con tar, por ejemplo) desde un equipo con SELinux desactivado (como mi instalaci&#243;n con Fedora Core 3), al desempaquetarlo no tiene los descriptores de SELinux correctos, por lo que hay que reaplicarselos o bien hacer el "truco" (copiar a otro directorio, borrar y mover desde el directorio copiado, ya que al copiar son ficheros nuevos y se les dan los atributos correctos). Cosas que pueden ocurrir si no lo haces es que en el caso de que los ficheros sean los de una web, como era mi caso, <a href="http://httpd.apache.org">Apache</a> te dir&#225; todo el rato que 403 Forbidden, por m&#225;s que los permisos y grupos parezcan correctos.</li>   <li>Si tienes un <a href="http://jakarta.apache.org/tomcat">Tomcat</a>/<a href="http://www.jboss.com">JBoss</a> y quieres conectarlo con <a href="http://httpd.apache.org">Apache</a> usando mod_jk o mod_jk2, el mod_jk se quejar&#225; hagas lo que hagas diciendo que <div class="MyCode">[jk_ajp_common.c (1477)]: Error connecting to tomcat. Tomcat is probably not started or is listening on the wrong port. worker=ajp13 failed errno = 13</div>Para esto lo &#250;nico que me ha funcionado es desactivar SELinux o ponerlo en modo permisivo, al menos de momento.</li><li>Aunque lo cierto es que no uso mucho el Window$, lo tengo instalado para esas pocas ocasiones, total hay que aprovechar la licencia que ven&#237;a con el port&#225;til. As&#237; que tengo el disco con una partici&#243;n NTFS para Window$, una FAT32 para compartir datos entre ambos sistemas, y luego las particiones Linux. Pues bien, para ahorrar espacio, en lugar de tener una partici&#243;n para swap en linux y el dichoso fichero de intercambio de Window$, lo que hago es poner el fichero de intercambio de en la partici&#243;n FAT32 y desde linux usarlo como swap, as&#237; s&#243;lo pierdo 2Gb de disco en vez de 4Gb (tengo 1Gb de RAM). Con Fedora 3 no hab&#237;a problema alguno, pero con este me salta todo el rato con "permission denied" al hacer el swapon.</li>  </ol>Bueno, la verdad es que tuve otro incidente m&#225;s, este mucho m&#225;s suerrealista y dif&#237;cil de encontrar, gracias a Internet al final pude solucionarlo. Es una conjunci&#243;n curiosa que ocurre con Fedora Core 4 y JDK 1.4. Fedora 4 usa IPv6 junto a IPv4, y resulta que JDK 1.4 por defecto usa IPv6 si est&#225; disponible, lo cual resulta en una imposibilidad casi total de conseguir conectar desde java a cualquier servicio de red. Para solucionarlo, pues si puedes usar JDK 1.5 mejor, pero si no, tienes que ejecutar el comando java pasando una constante que hace que use IPv4: <code>-Djava.net.preferIPv4Stack=true</code>.<br />Bueno, espero que si alguien topa con estos problemas esto le sirva de ayuda. Cuando aprenda a usar SELinux ya contar&#233; la soluci&#243;n &#191;o se anima alguien a iluminarnos?<br />Como &#250;ltima pincelada, os dir&#233; como deshabilitar SELinux: para hacerlo temporalmente podemos usar el comando <code>setenforce permissive</code>, siempre como usuario root; para hacerlo permanentemente debemos editar el fichero <code>/etc/selinux/config</code> y donde pone <code>SELINUX=enforce</code> ponemos <code>SELINUX=permissive</code>.<br />Gracias a <a href="http://www.technorati.com">Technorati</a> he encontrado <a href="http://sourceforge.net/projects/seedit">algo que puede servir</a>, habr&#225; que probarlo un poco m&#225;s adelante.<br /><br><br />Technorati: <a href="http://www.technorati.com/tag/Fedora">Fedora</a>, <a href="http://www.technorati.com/tag/SELinux">SELinux</a>, <a href="http://www.technorati.com/tag/Java">Java</a>, <a href="http://www.technorati.com/tag/JDK">JDK</a>, <a href="http://www.technorati.com/tag/JBoss">JBoss</a>, <a href="http://www.technorati.com/tag/Tomcat">Tomcat</a>, <a href="http://www.technorati.com/tag/mod_jk">mod_jk</a><div style="clear:both; padding-bottom: 0.25em;"></div>
 ]]>
</description>
 <dc:date>2005-08-12T09:34:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>Contenedores Ligeros y Arquitecturas de Plugins: Inyecci&#243;n de Dependencias y Localizadores de Serv</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2004/06/26/contenedores-Ligeros-y-Arquitecturas-d.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2004/06/26/contenedores-Ligeros-y-Arquitecturas-d.html</guid>
 <description>
 <![CDATA[
Durante muchos a&#241;os he ido de un proyecto con tecnolog&#237;as Microsoft a otro en entornos Java/Unix, jugando en ambos campos casi simult&#225;neamente. De hecho, la compa&#241;&#237;a en la que pas&#233; la mayor parte de esos a&#241;os (Digital / Compaq) me certific&#243; nada mas empezar como MCSE + Internet, as&#237; que estaba algo m&#225;s atraido por el entorno Microsoft.<br />Sin embargo, debo admitir que entonces Java y J2EE presentaban una aproximaci&#243;n m&#225;s atractiva hacia las soluciones orientadas a objetos, tanto desde el desarrollo como desde la arquitectura. Durante los &#250;ltimos tres a&#241;os he estado muy centrado en este enotrono Java y J2EE, adquiriendo un buen nivel de conocimientos, pero dejando atr&#225;s las soluciones .NET que surgieron justo al principio de este periodo.<br />En estos &#250;ltimos meses he estado <em>jugando</em> con .NET, b&#225;sicamente aprendiendo C# que creo que es el mejor de los lenguajes en .NET para desarrollo orientado a objetos. C# tiene toda la facilidad que antes s&#243;lo ten&#237;a VB, pero con una verdadera orientaci&#243;n a objetos <em>nativa</em>.<br />Creo que desde hace alg&#250;n tiempo C# se est&#225; llevando a bastantes desarrolladores Java a su propia arena, y muchos de ellos tratan de llevar a .NET las soluciones que se han desarrollado en Java durante todos estos a&#241;os. Esto ocurre con muchas soluciones Open Source, como Ant (NAnt) o JUnit (NUnit), por nombrar un par de ellas.<br />Creo adem&#225;s que este fen&#243;meno est&#225; llevando muchas buenas cosas a la comunidad .NET, y es genial.<br />Pero no hemos de olvidar que Microsoft dise&#241;&#243; .NET con el conocimiento de las cosas que no estaban bien o faltaban en Java y J2EE, y que adem&#225;s lo hizo con el potencial de una gran cantidad de cabezas pensantes e innovadoras. Esto significa que muchas de las cosas resultas por terceros en Java y J2EE lo est&#225;n de forma nativa en .NET.<br />Un buen ejemplo: Actualmente hay mucho esfuerzo y discusi&#243;n entorno al patr&#243;n de Inyecci&#243;n de Dependencias o Inversi&#243;n de Control y los contenedores ligeros. Sabemos que hay frameworks como Spring en Java, que ahora se est&#225;n portando a .NET y C#, cuando resulta que .NET ya prove&#233; una soluci&#243;n para todo esto.<br />Lo mejor del hecho de que esto est&#233; implementado en el propio coraz&#243;n de .NET es que es algo sobre lo que puedes construir, sabiendo que es algo soportado y que todo el mundo puede usar desde el principio sin tener que descargar e instalar nada.<br />Daniel Cazzulino explica en su blog c&#243;mo funciona todo esto en .NET, y discute por qu&#233; hay ciertas desventajas apuntadas por Fowler que quedan solucionadas por el hecho de ser una parte integral de .NET.<br /><br /><a href="http://weblogs.asp.net/cazzu/archive/2004/05/10/129140.aspx">Lightweight Containers and Plugin Architectures: Dependency Injection and Dynamic Service Locators in .NET</a>
 ]]>
</description>
 <dc:date>2004-06-26T00:45:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>Herramientas de modelado de Microsoft</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2004/05/29/herramientas-de-modelado-de-Microsoft.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2004/05/29/herramientas-de-modelado-de-Microsoft.html</guid>
 <description>
 <![CDATA[
<div style="clear:both;"></div>La verdad es que estoy muy contento por el hecho de que herramientas como estas vayan a llegar a nuestra comunidad.<br />Creo que es un buen acercamiento hacia el dise&#241;o, hacia la mejora de los procesos de RAD y la calidad del software, y adem&#225;s, alineado con las metodolog&#237;as &#225;giles.<br />Por favor, t&#243;mate un rato y lee <a href="http://www.theserverside.net/news/thread.tss?thread_id=26222">este post</a> en TheServerSide.NET, y no te olvides de leer los enlaces que pone Dion, merece la pena leerlos.<div style="clear:both; padding-bottom: 0.25em;"></div>
 ]]>
</description>
 <dc:date>2004-05-29T01:37:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>JetBrains ReSharper</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2004/05/27/jetbrains-Resharper.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2004/05/27/jetbrains-Resharper.html</guid>
 <description>
 <![CDATA[
<div style="clear:both;"></div>Hay muchos editores y entornos de desarrollo en el mercado. He tenido la oportunidad de probar muchos durante estos a&#241;os, pero hay uno que me conquist&#243; inmediatamente. Se trata de IntelliJ Idea, del cual puedes bajar una versi&#243;n de evaluaci&#243;n o mejor a&#250;n, participar en el programa EAP (Early Access, Acceso Temprano) y probar la versi&#243;n en la que trabajan actualmente.<br />Probablemente hay otros entornos con mejores capacidades para el dise&#241;o de interfaces gr&#225;ficas swing, pero no hay ninguno con las capacidades de edici&#243;n avanzadas de Idea, ni con su integraci&#243;n con las nuevas tendencias en el desarrollo, tales como el refactoring, ant, JUnit, AspectJ, y muchas otras.<br />Pero ahora, los chicos de JetBrains nos van a sorprender con otra maravilla, se trata de ReSharper, un plugin para Visual Studio .NET 2003 que aporta una parte de las capacidades de Idea al entorno de Microsoft. De momento, las capacidades son reducidas y est&#225; en beta, pero puedes probarlo participando en el EAP.<br /><br /><a href="http://www.jetbrains.net/resharper">JetBrains ReSharper</a><div style="clear:both; padding-bottom: 0.25em;"></div>
 ]]>
</description>
 <dc:date>2004-05-27T13:20:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>Nomenclatura y estilo (II)</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2004/05/26/nomenclatura-y-estilo-Ii.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2004/05/26/nomenclatura-y-estilo-Ii.html</guid>
 <description>
 <![CDATA[
<div style="clear:both;"></div>Bueno, vamos con la diversi&#243;n.<br /><br />Antes de comenzar he de decir que <strong>debes</strong> tener una gu&#237;a de estilo para tu empresa o proyecto, y que esa ser&#225; <em>tu gu&#237;a</em>. Hay muchas cosas acerca de las gu&#237;as de estilo que se pueden considerar subjetivas, y variar&#225;n dependiendo del lector.<br /><br />Pongo un enlace a una gu&#237;a bastante completa de Philips para C#, que es muy espec&#237;fica de C# pero que tiene muchas cosas aplicables a cualquier lenguaje orientado a objetos. Tengo que decir que no estoy de acuerdo con todos los puntos de esta gu&#237;a, y que echo de menos algunas explicaciones en ella, aunque es algo razonable teniendo en cuenta de que se trata de una gu&#237;a impuesta a un grupo de desarrollo, y no una discusi&#243;n como la que hacemos aqu&#237;.<br />Creo que este documento mezcla conceptos de nomenclatura, formato de c&#243;digo y estilo de c&#243;digo, que son diferentes para m&#237;. Ya he hablado de nomenclatura, y volver&#233; a hacerlo m&#225;s adelante. El formato de c&#243;digo hace referencia a la apariencia del c&#243;digo, y c&#243;mo hacer para que sea m&#225;s legible, y adem&#225;s es menos espec&#237;fico del lenguaje. El estilo de c&#243;digo por el contrario, se refiere a t&#233;cnicas de codificaci&#243;n y c&#243;mo escribir mejor c&#243;digo. Las tres cosas son esenciales, y en casos concretos como la gu&#237;a Philips puede tener sentido mezclarlas, pero yo prefiero mantenerlas apartadas (juntas pero no revueltas).<br /><br />Voy a comenzar hablando sobre el Formato de C&#243;digo, exponiendo primero las cosas objetivas y explicando su raz&#243;n. Luego seguir&#233; con las subjetivas, relacionadas fundamentalmente con espacios y longitudes. Por &#250;ltimo hablar&#233; sobre el Estilo de C&#243;digo, dividi&#233;ndolo de igual manera.<br /><br />Debes recordar que este es mi blog y, por tanto, escribo aqu&#237; mis propios pensamientos y preferencias, que pueden ser diferentes de los tuyos. Generalmente estoy a cargo de definir todo este tipo de pol&#237;ticas en el trabajo, y de obligar su cumplimiento. Si, obligar; cuando trabajas para una compa&#241;&#237;a <strong>debes</strong> seguir sus gu&#237;as de trabajo, aunque sean diferentes de las tuyas. Cuando est&#233;s desarrollando en casa, o dejes la compa&#241;&#237;a, podr&#225;s usar tus propias reglas.<br /><br />Comencemos.<br /><br /><strong>Declaraci&#243;n de variables</strong><br />Estoy de acuerdo con la gu&#237;a en que las variables deben ser declaradas all&#237; donde se usen, en lugar de ponerlas todas juntas al comienzo del m&#233;todo. Esta es una de las capacidades a&#241;adidas en C++ respecto a C, y una buena. Si declaras una variable junto al bloque en que se usa est&#225;s facilitando el refactoring del c&#243;digo, porque puedes tomar todo el bloque y llevarlo a otro m&#233;todo, por ejemplo; y si resulta que quieres borrar el bloque no corres peligro de dejarte olvidada la variable. Adem&#225;s, al poner la variable junto al bloque en que se usa mejoras la comprensi&#243;n sobre su cometido.<br /><br /><strong>Bloques de control</strong><br />De nuevo estoy de acuerdo. Toda sentencia de control (if, while, etc.) <strong>debe</strong> estar seguida de un bloque de control, aunque est&#233; vac&#237;o. A pesar de que C++, C# y java te permiten no utilizar llaves para bloques simples (de una l&#237;nea) es algo muy propenso a errores: si despu&#233;s a&#241;ades una l&#237;nea al bloque, es f&#225;cil que olvides poner las llaves, con lo cual el programa compilar&#225; pero no funcionar&#225; correctamente. Este tipo de errores suelen ser muy dif&#237;ciles de encontrar.<br /><br /><strong>Usa espacios, no tabuladores</strong><br />Muchos dir&#225;n que esto es algo subjetivo, pero yo digo que no lo es. La raz&#243;n es simple: los espacios son la &#250;nica forma de garantizar que la intentaci&#243;n permanece consistente independientemente del sistema. Usualmente, diferentes sistemas muestran los tabuladores de forma distinta, y no s&#243;lo aplica a pasar de Windows a Unix, por ejemplo, sino entre diferentes programas en un mismo sistema operativo. La parte subjetiva es cuantos espacios utilizar para la indentaci&#243;n. Yo uso cuatro, pero <em>es</em> subjetivo.<br /><br /><strong>Indentaci&#243;n</strong><br />Debes usar un estilo de indentaci&#243;n bueno y consistente. Eso es objetivo. El resto del asunto es subjetivo, y creo que har&#233; un post al respecto con mis propias preferencias. La indentaci&#243;n est&#225; muy relacionada con la m&#225;xima longitud de l&#237;nea, cosa de la que hablar&#233; en el siguiente post.<br /><br />Y esto es lo poco que puedo considerar objetivo acerca del Formato de C&#243;digo.<br /><br /><a href="http://www.tiobe.com/standards/gemrcsharpcs.pdf">Philps' C# Coding Guidelines</a><div style="clear:both; padding-bottom: 0.25em;"></div>
 ]]>
</description>
 <dc:date>2004-05-26T10:27:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>Nomenclatura y estilo (I)</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2004/05/25/nomenclatura-y-estilo-I.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2004/05/25/nomenclatura-y-estilo-I.html</guid>
 <description>
 <![CDATA[
<div style="clear:both;"></div>Por fortuna ya son muchos los que utilizan nomenclaturas y estilos de programaci&#243;n bien definidos. A&#250;n as&#237;, durante mi trayectoria profesional, he tenido el dudoso privilegio de toparme con muchos m&#225;s que no lo hacen.<br />He de decir que esto no ocurre s&#243;lo en ambientes que pudi&#233;ramos llamar de <em>bajo perfil tecnol&#243;gico</em>,  sino en empresas de consultor&#237;a de primer nivel. Desde mi punto de vista, debido a la contrataci&#243;n indiscriminada de la &#233;poca .com.<br />Este es uno de los factores imprescindibles para conseguir c&#243;digo de calidad, primer paso de una cadena en la que aparece el <a href="http://www.refactoring.com/">refactoring</a> de <a href="http://www.junit.org">Kent Beck</a> y <a href="http://www.martinfowler.com">Martin Fowler</a>, y su importancia es mayor cuanto mayor es el proyecto y el equipo.<br />Durante los incontables a&#241;os que llevo programando, mi estilo y nomenclatura han ido variando, adapt&#225;ndose a los entornos y lenguajes, y mejorando con la experiencia adquirida, y tengo claro que seguir&#225;n cambiando como algo vivo.<br />Hoy hablar&#233; s&#243;lo de nomenclatura, pr&#243;ximamente seguiremos con el estilo (mucho m&#225;s interesante), y me centrar&#233; en los entornos m&#225;s extendidos hoy en d&#237;a: Java y .NET.<br /><br /><strong>Nombres de clase</strong><br />En este &#225;mbito caen tanto las clases como los interfaces.<br />Durante bastante tiempo utilic&#233; prefijos para nombrar clases e interfaces, anteponiendo una C o una I, respectivamente. En .NET se utiliza de hecho esta convenci&#243;n para con los interfaces, mientras que en Java no se hace distinci&#243;n. Personalmente creo que la I no aporta nada y por eso he dejado de utilizarla. No aporta nada porque los interfaces son nuestra cara al exterior (buena pr&#225;ctica: <a href="http://www.javaworld.com/javaworld/jw-08-1999/jw-08-interfaces.html">codificar hacia interfaces</a>), y al usuario de nuestros interfaces poco le importa si aquello que usa es un interfaz o una clase, su uso no var&#237;a, por tanto la I creo que a&#241;ade datos innecesarios y con ello empeora el estilo. No obstante, en .NET puede ser recomendable utilizarla para mantener la coherencia con el entorno.<br />En general, los nombres de clase o interfaz deben constar de una o m&#225;s palabras representativas, completamente escritas salvo que sean abreviaturas ampliamente extendidas, capitalizadas en su primera letra y sin guiones bajos u otros artefactos entre ellas. Ejemplo: <span class="Code">DataObject</span>.<br />Como extensi&#243;n, creo que es buena pr&#225;ctica a&#241;adir al nombre de clase el patr&#243;n de software que representa en caso de representar alguno. Ejemplo: <span class="Code">DataObjectFactory</span>.<br /><br /><strong>Nombres de m&#233;todos y propiedades p&#250;blicas</strong><br />Mi consejo en este sentido es utilizar las normas expuestas en las diferentes gu&#237;as de estilo de los entornos. <br />Por ejemplo, en Java el nombre est&#225; compuesto de la misma forma que hemos explicado para los nombres de clase, pero con la primera palabra completamente en min&#250;sculas. Ejemplo: <span class="Code">provideSomeInfo()</span>.<br />En .NET la nomenclatura es id&#233;ntica a la del nombre de clase, siguiendo el ejemplo: <span class="Code">ProvideSomeInfo()</span>.<br /><br /><strong>Nombres de variables y propiedades privadas o protegidas</strong><br />La nomenclatura propuesta en Java o .NET es similar, e igual a la propuesta para los m&#233;todos y propiedades p&#250;blicos. <br />Durante mucho tiempo he empleado mi propia variaci&#243;n de la notaci&#243;n h&#250;ngara propuesta por Charles Simonyi, fruto de mi herencia de C/C++, pero ciertamente en los lenguajes m&#225;s puramente orientados a objetos como Java o C# tiene menos sentido y es un tema sobre el que se podr&#237;a <a href="http://ootips.org/hungarian-notation.html">debatir</a><br /><br /><strong>Algunas normas b&#225;sicas</strong><br />Es imprescindible que los nombres sean siempre representativos, y expliquen bien el cometido de un m&#233;todo o variable, no os importe tener que escribir m&#225;s porque el incremento en la calidad y legibilidad del c&#243;digo os pagar&#225; cuando teng&#225;is que revisarlo.<br />&#218;nicamente puede saltarse la excepci&#243;n de utilizar nombres gen&#233;ricos, de una letra, en el caso de contadores enteros usados en bucles, restringiendo estos a los tradicionales en matem&#225;ticas: i, j, k, m, n. Y adem&#225;s en este orden suponiendo bucles anidados. Esto &#250;ltimo es importante para mantener la coherencia y prevenir errores en zonas muy anidadas (que no deber&#237;an ocurrir, pero eso pertenece al estilo).<br /><div style="clear:both; padding-bottom: 0.25em;"></div>
 ]]>
</description>
 <dc:date>2004-05-25T11:37:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

<item>
 <title>Closing the Gap, part 2</title>
<link>http://narcisocerezo.zoomblog.com/archivo/2004/05/24/closing-the-Gap-part-2.html</link>
 <guid isPermaLink="true">http://narcisocerezo.zoomblog.com/archivo/2004/05/24/closing-the-Gap-part-2.html</guid>
 <description>
 <![CDATA[
<div style="clear:both;"></div>En la segunda parte de este interesante art&#237;culo, <a href="http://www.ericsink.com">Eric Sink</a> nos da unos consejos de inapreciable valor si queremos dedicarnos al desarrollo de software como "peque&#241;os ISV". Para los que no lo sepan, ISV viene del ingl&#233;s "Independent Software Vendor" o "Proveedor de Sofware Independiente".<br />Eric nos ense&#241;a c&#243;mo saber si nuestro producto tiene inter&#233;s, y como hacerlo llegar al consumidor utilizando los recursos a nuestro alcance, como los blog, donde podemos comunicarnos con nuestros posibles usuarios y conocer sus intereses o inquietudes. La estrategia se basa en dejar que el cliente sea el que lleva el control, el que decide qu&#233; compra y cuando lo hace. Sinceramente creo que es un art&#237;culo que no debes dejar de leer.<br /><br /><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsoftware/html/software05072004.asp">Closing the Gap, Part 2</a><div style="clear:both; padding-bottom: 0.25em;"></div>
 ]]>
</description>
 <dc:date>2004-05-24T17:07:00+01:00</dc:date>
 <dc:creator>Narciso Cerezo</dc:creator>
</item>

</channel>
</rss>

