<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mi espacio &#187; Herramientas</title>
	<atom:link href="http://www.manuelrecena.com/blog/archives/category/herramientas/feed" rel="self" type="application/rss+xml" />
	<link>http://www.manuelrecena.com/blog</link>
	<description>Donde escribo sobre cosas que forman parte de mi vida profesional</description>
	<lastBuildDate>Sun, 05 Feb 2012 21:20:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>J2EE Modules Dependencies ha desaparecido</title>
		<link>http://www.manuelrecena.com/blog/archives/1153</link>
		<comments>http://www.manuelrecena.com/blog/archives/1153#comments</comments>
		<pubDate>Sat, 06 Aug 2011 09:59:14 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[wtp]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=1153</guid>
		<description><![CDATA[Uso Eclipse, WTP (Web Tools Project) y Maven desde hace mucho años. Cada vez que he tenido que configurar un nuevo entorno, y han pasado meses desde la última vez, me encuentro con pequeñas sorpresas. Por otro lado es normal, en los proyectos se toman decisiones que afectan a quienes usamos el software. Además en [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.manuelrecena.com/resources/deployment-assembly.png"><img class="alignright size-medium wp-image-1155" style="margin: 0 0 10px 20px;" title="Captura de pantalla de la opción deployment-assembly" src="http://www.manuelrecena.com/blog/../resources/deployment-assembly-300x211.png" alt="" width="300" height="211" /></a>Uso Eclipse, WTP (Web Tools Project) y Maven desde hace mucho años. Cada vez que he tenido que configurar un nuevo entorno, y han pasado meses desde la última vez, me encuentro con <a title="Referencia a un post de este blog" href="http://www.manuelrecena.com/blog/archives/526" target="_blank">pequeñas sorpresas</a>. Por otro lado es normal, en los proyectos se toman decisiones que afectan a quienes usamos el software. Además en este caso todas las piezas son open source y es una maravilla que podamos disfrutar de estas herramientas sin un coste directo.</p>
<p>Desde hace unos días estoy montando mi entorno de desarrollo en un nuevo MacBook Pro que he adquirido. Instalé Eclipse Helios, Apache Maven 2.2.1 (sí, aun tenemos proyectos no migrados) y algunos plugins para Eclipse como <a title="Sitio web del plugin" href="http://eclipse-tools.sourceforge.net/projecttransfer/" target="_blank">MultiProject</a>, Checkstyle, <a title="Sitio web del plugin" href="http://andrei.gmxhome.de/anyedit" target="_blank">AnyEdit</a>, etc.</p>
<p>Cual fue mi sorpresa que tras realizar el checkout de mivecindad, ejecutar <em>mvn install eclipse:eclipse [...]</em> e intentar ejecutar el proyecto (Facet: Dynamic Web Module, Java) había muchas dependencias que WTP no podía resolver. Esto se solucionaba anteriormente indicándole a proyecto principal (webapp) que los otros proyectos (service, model, resources, etc) eran módulos (J2EE Modules) de éste. Para ello encontrábamos una opción en las preferencias del proyecto llamada <strong>J2EE Modules Dependencies</strong>.</p>
<p>Pues bien, esta opción ha desaparecido. Ahora podemos hacer lo mismo dentro de la opción <strong>Deployment Assembly</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/1153/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Tomcat para entornos de producción (II)</title>
		<link>http://www.manuelrecena.com/blog/archives/1054</link>
		<comments>http://www.manuelrecena.com/blog/archives/1054#comments</comments>
		<pubDate>Wed, 20 Apr 2011 12:32:38 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[syadmin]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=1054</guid>
		<description><![CDATA[Si ayer hablábamos de cómo configurar Apache Tomcat con Apache Tomcat Native, hoy vamos a ver cómo lanzar el servidor como un servicio del sistema operativo. Esto implica dejar a un lado los scripts startup.sh, catalana.sh y shutdown.sh que se encuentran en $TOMCAT_HOME/bin. Para esto necesitaremos Commons Daemon Native que podemos encontrar en los binarios [...]]]></description>
			<content:encoded><![CDATA[<p>Si ayer hablábamos de cómo configurar Apache Tomcat con Apache Tomcat Native, hoy vamos a ver cómo lanzar el servidor como un servicio del sistema operativo. Esto implica dejar a un lado los scripts startup.sh, catalana.sh y shutdown.sh que se encuentran en $TOMCAT_HOME/bin. Para esto necesitaremos Commons Daemon Native que podemos encontrar en los binarios de Apache Tomcat. La versión que necesitamos se encuentra en $TOMCAT_HOME/bin/commons-daemon-native.tar.gz y corresponde con la 1.0.5. La instalación es muy sencilla:</p>
<ol>
<li>Descomprimir commons-daemon-native.tar.gz</li>
<li>Entrar en el directorio unix que encontraremos</li>
<li>Ejecutamos:
<pre>./configure --with-java=/usr/local/java
make</pre>
</li>
<li>Encontraremos que se ha generado un binario llamado <strong>jsvc</strong></li>
<li>Copiamos este ejecutable a $TOMCAT_HOME/bin</li>
<li>Creamos el usuario y grupo <strong>tomcat</strong> que necesitaremos para la configuración. El UID tendremos que elegirlo según nuestro S.O.:
<pre>useradd -b /opt/tomcat -u 105 -s /bin/false tomcat</pre>
</li>
<li>Ahora conviene que revisemos el propietario de los directorios y archivos que tenemos en $TOMCAT_HOME, principalmente conf, log, webapp, temp y work. Si algo no está bien, lo veremos claramente en los logs.</li>
</ol>
<p>La parte interesante corresponde con la configuración. Lo mejor para explicarlo es hacerlo sobre el archivo que usamos en Clinker Virtual Appliance. A continuación el contenido del script tomcat6.sh que colocaremos en /etc/init.d:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
</pre></td><td class="code"><pre class="gettext" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
. /lib/lsb/init-functions
&nbsp;
JAVA_HOME=/usr/local/java
&nbsp;
CATALINA_HOME=/opt/tomcat
DAEMON_HOME=/opt/tomcat/bin
TOMCAT_USER=tomcat
TMP_DIR=/opt/tomcat/temp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=/opt/tomcat
CATALINA_OPTS=<span style="color: #ff0000;">&quot;-Djava.library.path=/usr/local/lib/tomcat-native -Xms256m -Xmx512m -XX:MaxPermSize=256m&quot;</span>
&nbsp;
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
&nbsp;
case <span style="color: #ff0000;">&quot;$1&quot;</span> in
  start<span style="color: #000099;">&#41;</span>
    log_daemon_msg <span style="color: #ff0000;">&quot;Starting Apache Tomcat launched with commons-daemon (jsvc)&quot;</span> <span style="color: #ff0000;">&quot;jsvc&quot;</span>
    log_end_msg <span style="color: #000099;">0</span>
    $DAEMON_HOME/jsvc \
    -jvm server \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait <span style="color: #000099;">10</span> \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile <span style="color: #ff0000;">'&amp;1'</span> \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    -showversion \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;
&nbsp;
  stop<span style="color: #000099;">&#41;</span>
    log_daemon_msg <span style="color: #ff0000;">&quot;Stopping Apache Tomcat&quot;</span> <span style="color: #ff0000;">&quot;jsvc&quot;</span>
    log_end_msg <span style="color: #000099;">0</span>
    $DAEMON_HOME/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;
&nbsp;
  *<span style="color: #000099;">&#41;</span>
    echo <span style="color: #ff0000;">&quot;Usage tomcat6 start/stop&quot;</span>
    exit <span style="color: #000099;">1</span>;;
esac</pre></td></tr></table></div>

<p>Como podéis comprobar, este script es el candidato perfecto para localizar variables de entorno y cualquier otra cosa que necesitemos inicializar antes de lanzar Apache Tomcat. Por lo tanto, la variable LD_LIBRARY_PATH que necesitamos en la <a title="Referencia a la entrada que precede a esta" href="http://www.manuelrecena.com/blog/archives/1033" target="_blank">entrada anterior</a>, podemos definirla aquí. Los parámetros de configuración relacionados con la memoria se controlan desde la variable local CATALINA_OPTS. Observaremos que únicamente se crea un archivo de log en $TOMCAT_HOME/logs, para recuperar los otros archivos tendremos que proporcionar la configuración de logging. En el arranque de Apache Tomcat debemos encontrar algo similar a esto:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">java version &quot;1.6.0_24&quot;
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
commons daemon version &quot;1.0.5&quot;
commons daemon process (id: 3882, parent: 3881)
20-abr-2011 13:02:14 org.apache.catalina.core.AprLifecycleListener init
INFO: Cargada la biblioteca nativa APR de Apache Tomcat 1.1.20
20-abr-2011 13:02:14 org.apache.catalina.core.AprLifecycleListener init
INFO: Capacidades APR: IPv6 [true], enviar fichero [true], aceptar filtros [false], aleatorio [true].
20-abr-2011 13:02:14 org.apache.coyote.http11.Http11AprProtocol init
INFO: Inicializando Coyote HTTP/1.1 en puerto http-8080
20-abr-2011 13:02:14 org.apache.coyote.ajp.AjpAprProtocol init
INFO: Inicializando Coyote AJP/1.3 en ajp-8009
20-abr-2011 13:02:14 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 889 ms
20-abr-2011 13:02:14 org.apache.catalina.core.StandardService start
INFO: Arrancando servicio Catalina
20-abr-2011 13:02:14 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
20-abr-2011 13:02:14 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Desplieque del descriptor de configuración host-manager.xml
20-abr-2011 13:02:14 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Desplieque del descriptor de configuración manager.xml
20-abr-2011 13:02:15 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio docs de la aplicación web
20-abr-2011 13:02:15 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio ROOT de la aplicación web
20-abr-2011 13:02:15 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio examples de la aplicación web
20-abr-2011 13:02:15 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
20-abr-2011 13:02:15 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
20-abr-2011 13:02:15 org.apache.coyote.http11.Http11AprProtocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-8080
20-abr-2011 13:02:15 org.apache.coyote.ajp.AjpAprProtocol start
INFO: Arrancando Coyote AJP/1.3 en ajp-8009
20-abr-2011 13:02:15 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1084 ms</pre></div></div>

<p>Para cualquier consulta, no dudéis en dejar un mensaje e intentaré atender como mejor sepa y pueda.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/1054/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Apache Tomcat para entornos de producción (I)</title>
		<link>http://www.manuelrecena.com/blog/archives/1033</link>
		<comments>http://www.manuelrecena.com/blog/archives/1033#comments</comments>
		<pubDate>Tue, 19 Apr 2011 12:31:36 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Escalabilidad y rendimiento]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=1033</guid>
		<description><![CDATA[Desde hace ya muchos años, Apache Tomcat forma parte de mi caja de herramientas. Supongo esto también le sucederá a otros muchos profesionales. Bien es cierto, que cada vez más comparte espacio con soluciones como Jetty o Glassfish, sin embargo, yo le tengo un respeto prácticamente infinito. Son muchos los entornos de producción a los [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace ya muchos años, Apache Tomcat forma parte de mi caja de herramientas. Supongo esto también le sucederá a otros muchos profesionales. Bien es cierto, que cada vez más comparte espacio con soluciones como Jetty o Glassfish, sin embargo, yo le tengo un respeto prácticamente infinito. Son muchos los entornos de producción a los que he tenido acceso y en los que Apache Tomcat era la opción para actuar como contenedor JSP/Servlet. Que no os extrañe si os digo que en la mayoría la instalación consistía en:</p>
<ol>
<li>Descargar el tar.gz</li>
<li>Descomprimirlo</li>
<li>Y lanzar $TOMCAT_HOME/bin/startup.sh</li>
</ol>
<p>Me gustaría compartir con vosotros cómo configuramos nosotros (<a title="Cuenta de klicap en twitter" href="http://twitter.com/klicap" target="_blank">@klicap</a>) Apache Tomcat con el objetivo de conocer vuestras impresiones y dejar unas notas para que no se olviden. Esta es la configuración que estamos usando en <a title="Información sobre Clinker" href="http://blog.klicap.es/archives/837" target="_blank">Clinker Virtual Appliance</a>. En las siguientes instrucciones se presupone que estamos usando un S.O. Linux y que la JVM está correctamente configurada.</p>
<ol>
<li>Descargar los <a title="Sitio web oficial para descargar Apache Tomcat" href="http://tomcat.apache.org/download-60.cgi" target="_blank">binarios</a> del sitio web oficial.</li>
<li>Descomprimir el tar.gz en /opt</li>
<li>Crear un enlace simbólico /opt/tomcat &gt; /opt/apache-tomcat-6.0.32</li>
<li>En $TOMCAT_HOME/bin encontraremos tomcat-native.tar.gz que corresponde con Apache Tomcat Native, una librería que mejora el rendimiento porque delega en <a title="Información sobre APR" href="http://tomcat.apache.org/tomcat-6.0-doc/apr.html" target="_blank">APR</a> ciertas funcionalidades que están implementadas de forma nativa.</li>
<li>Descomprimimos tomcat-native.tar.gz</li>
<li>Configuramos el proyecto y compilamos:
<pre>./configure \
--libdir=/usr/local/lib/tomcat-native-1.1.20 \
--with-java-home=/usr/local/java \
--with-apr=/usr/bin/apr-1-config</pre>
<pre>make &#038;&#038; make install</pre>
</li>
<li>Creamos un enlace simbólico /usr/local/lib/tomcat-native &gt; /usr/local/lib/tomcat-native-1.1.20</li>
<li>Configuramos la variable de entorno (p.e. en /etc/profile):
<pre>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/tomcat-native</pre>
</li>
</ol>
<p>Cuando lancemos Apache Tomcat encontraremos en los logs el siguiente mensaje:</p>
<blockquote><p>19-abr-2011 13:09:45 org.apache.catalina.core.AprLifecycleListener init<br />
INFO: Cargada la biblioteca nativa APR de Apache Tomcat 1.1.20<br />
19-abr-2011 13:09:45 org.apache.catalina.core.AprLifecycleListener init<br />
INFO: Capacidades APR: IPv6 [true], enviar fichero [true], aceptar filtros [false], aleatorio [true].</p></blockquote>
<p>En una instalación por defecto hubiéramos encontrado un mensaje similar a este:</p>
<blockquote><p>org.apache.catalina.core.AprLifecycleListener init<br />
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path</p></blockquote>
<p>En la siguiente entrada veremos cómo configurar commons-daemon con Apache Tomcat.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/1033/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Conoces cómo están trabajando tus aplicaciones?</title>
		<link>http://www.manuelrecena.com/blog/archives/1008</link>
		<comments>http://www.manuelrecena.com/blog/archives/1008#comments</comments>
		<pubDate>Sat, 12 Feb 2011 18:58:44 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[newrelic]]></category>
		<category><![CDATA[RPM]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=1008</guid>
		<description><![CDATA[En estos últimos años he tenido la oportunidad de intervenir (no se pueden llamar proyectos) en situaciones donde nos encontrábamos con aplicaciones que llevaban semanas puestas en producción y que daban muchos problemas a los departamentos de sistemas, infraestructuras u operaciones, como queráis llamarlos. Los problemas se manifestaban dónde menos te lo esperabas, sin embargo, [...]]]></description>
			<content:encoded><![CDATA[<p>En estos últimos años he tenido la oportunidad de intervenir (no se pueden llamar proyectos) en situaciones donde nos encontrábamos con aplicaciones que llevaban semanas puestas en producción y que daban muchos problemas a los departamentos de sistemas, infraestructuras u operaciones, como queráis llamarlos. Los problemas se manifestaban dónde menos te lo esperabas, sin embargo, el efecto que provocaban era evidente, la aplicación no cumplía el objetivo para el que había sido concebida. Algunas se degradaban con el paso de tiempo, otras no soportaban la carga puntual de la mañana y otras tenían tiempos de respuesta tan altos que era como si la aplicación no existiese. Me estoy refiriendo a aplicaciones web.</p>
<p>En este tipo de escenarios hay gente que piensa que vas a llegar, vas a tocar dos o tres parámetros de configuración y todo arreglado. No digo que haya casos en los que algo así pueda solucionar el problema temporalmente, pero ten por seguro que lo único que has conseguido es barrer la basura y esconderla debajo de la alfombra.</p>
<p>Si la tensión del ambiente aun te permite respirar lo primero es monitorizar. Es básico instalar sondas que arrojen datos que por un lado te permitan justificar que ciertos cambios aportan mejoras y por otro lado, te digan donde están los problemas:</p>
<ol>
<li>Consumo de CPU prolongado en el tiempo o simplemente puntual bajo ciertas circunstancias</li>
<li>La RAM está al 100% y tu amiga swap está a punto de entrar en juego</li>
<li>Le has preguntado a tu gestor de base de datos qué le están haciendo?</li>
<li>Las integraciones (facebook, SSO corporativo, flickr) qué tal van?</li>
</ol>
<p>El problema es que esto requiere que te dejen instalar y configurar ciertas herramientas en entornos de producción. Y ahí, con la iglesia hemos topado. Salvo que la tensión sea muy alta, rara vez te dejarán. Obviamente si las cosas de hicieran convenientemente, no haría falta llegar a estas situaciones, pero la realidad y el día a día son bien distintos.</p>
<p>Hacía ya tiempo que la conocía, pero no he tenido oportunidad de probarla hasta hace muy poco con una aplicación en producción y con picos de usuarios muy interesantes. Lo que más me gusta es que es una aplicación con un modelo <a title="Referencia a la wikipedia" href="http://es.wikipedia.org/wiki/Software_como_servicio" target="_blank">SaaS</a> en el que te instalas un agente que envía información a un servidor y simplemente tienes que acceder a la aplicación y comenzar a ver datos.</p>
<p>Pude probarlo en uno de los front-ends que formaban parte de la infraestructura. Los datos que muestra son realmente interesantes para analizar qué está pasando en tu aplicación y cómo de mal lo está pasando el servidor. La interfaz gráfica de la aplicación es agradable y fácil de usar para la complejidad y cantidad de información que gestiona. Su precio realmente asequible para el valor que proporciona. Está disponible para los stacks Java, PHP, Ruby y .NET. Os recomiendo que la probéis, te dejan usar la modalidad Gold completamente gratis durante una semana.</p>
<p><a href="http://newrelic.com"><img class="alignnone size-full wp-image-1011" title="newrelic-logo" src="http://www.manuelrecena.com/blog/../resources/newrelic-logo.png" alt="" width="190" height="40" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/1008/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ExtJS en nuestra caja de herramientas</title>
		<link>http://www.manuelrecena.com/blog/archives/982</link>
		<comments>http://www.manuelrecena.com/blog/archives/982#comments</comments>
		<pubDate>Wed, 22 Dec 2010 00:40:52 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[sencha]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=982</guid>
		<description><![CDATA[Conocí este excelente framework en el año 2008. Desde entonces no ha faltado en mi caja de herramientas. Son más de 5 proyectos en los que he participado y se ha optado por ExtJS. Según últimas noticias en febrero 2011 publicarán la versión 4. Ahora, junto a otros productos como Ext GWT, Ext Designer o [...]]]></description>
			<content:encoded><![CDATA[<p>Conocí este excelente framework en el año <a title="Referencia a una entrada de este blog" href="http://www.manuelrecena.com/blog/archives/369" target="_blank">2008</a>. Desde entonces no ha faltado en mi caja de herramientas. Son más de 5 proyectos en los que he participado y se ha optado por ExtJS. Según últimas noticias en febrero 2011 publicarán la versión 4. Ahora, junto a otros productos como Ext GWT, Ext Designer o Sencha Touch, forman <a title="Sitio web de la empresa Sencha Inc." href="http://www.sencha.com" target="_blank">Sencha Inc</a>. Se ha ganado mi confianza por:</p>
<ol>
<li>Me gusta su modelo dual de <a title="Información sobre la licencia de ExtJS" href="http://www.sencha.com/products/license.php" target="_blank">licencia</a>. <em>Si sacas dinero con tu producto compra al menos una licencia</em></li>
<li>La <a title="Documentación del API" href="http://dev.sencha.com/deploy/dev/docs/" target="_blank">documentación del API</a> es buena y accesible. Desde mi punto de vista, un fallo que comenten es dejar de publicar versiones anteriores de la API</li>
<li>Ofrece un conjunto muy amplio de elementos gráficos: form, grid, menu, window, panel, etc.</li>
<li>Layout Managers potentes</li>
<li>Se pueden conseguir interfaces gráficas muy dinámicas e interactivas</li>
<li>Excelente compatibilidad con los principales navegadores. Eso no quita que también haya que usar hacks.</li>
<li>Es la pieza que encaja perfectamente en nuestro puzle:
<ol>
<li>Server-side: Hibernate + Spring + Resteasy = Restful API (JSON)</li>
<li>Client-side: ExtJS (Model + View + Events).</li>
</ol>
</li>
<li>En aplicaciones con una interfaz gráfica compleja el rendimiento se puede ver resentido sino seguimos buenas prácticas y nos encontramos con versiones algo antiguas.</li>
<li>Relacionado con el punto anterior está <a title="Información sobre YUI Compressor" href="http://developer.yahoo.com/yui/compressor/" target="_blank">YUI Compressor</a>, <a title="Información sobre JSLint" href="http://jslint.com">JSLint</a> y si usas Apache Maven, <a title="Información sobre el plugin de maven" href="http://alchim.sourceforge.net/yuicompressor-maven-plugin/" target="_blank">yuicompressor-maven-plugin</a></li>
<li>Distribuyen ExtJS con un conjunto muy amplio de plugins. Estos plugins, terminan formando parte del API. Creo que esto se produce cuando el plugin madura y tiene suficiente aceptación.</li>
<li>Hay una gran comunidad: foros, tutoriales, libros y gente muy activa como <a title="Sitio web de Jozef Sakalos" href="http://extjs.eu" target="_blank">Jozef Sakalos</a> (aka Saki)</li>
<li>En caso de necesitarlo, hay una empresa detrás ofreciendo soporte profesional. Empresa que recientemente recibió una gran inversión económica.</li>
<li>A parte de la experiencia adquirida en esos proyectos, hay importantes referencias de ExtJS: <a title="Sitio web de MapFish" href="http://mapfish.org" target="_blank">MapFish</a>, <a title="Sitio web del producto Nexus (empresa Sonatype)" href="http://nexus.sonatype.org" target="_blank">Nexus</a> (Sonatype), <a title="PHP Docbook Online Editor" href="https://edit.php.net" target="_blank">PHP Docbook Online Editor</a>, y otros no públicos que he tenido la oportunidad de ver.</li>
</ol>
<p>Quizás revise esta lista pronto. Podéis ver algunas capturas de pantalla de dos proyectos en los que estamos (<a title="Cuenta de klicap en twitter" href="http://twitter.com/klicap" target="_blank">@klicap</a>) trabajando y estamos ExtJS, <a title="Opina 2 en integración continua" href="http://demo.klicap.es/opina-2.x" target="_blank">Opina</a> y <a title="Capturas de pantalla de mivecindad.com" href="http://www.flickr.com/photos/klicap/sets/72157624327797976/" target="_blank">mivecindad</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/982/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Encuesta sobre ecosistemas software (resultados)</title>
		<link>http://www.manuelrecena.com/blog/archives/931</link>
		<comments>http://www.manuelrecena.com/blog/archives/931#comments</comments>
		<pubDate>Sun, 01 Aug 2010 10:41:49 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[ecosistemas-software]]></category>
		<category><![CDATA[encuesta]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=931</guid>
		<description><![CDATA[En primer lugar pedir disculpas por haber tardado tres meses en publicar los resultados. La primera intención fue publicar unos datos más elaborados, pero mi principal motivación profesional ahora tiene absorbido todo mi tiempo. He preparado un archivo comprimido (ZIP) que contiene: La presentación con los resultados en formato ODP y PDF Las gráficas que [...]]]></description>
			<content:encoded><![CDATA[<p>En primer lugar pedir disculpas por haber tardado <a title="Referencia a una entrada de este blog" href="http://www.manuelrecena.com/blog/archives/917" target="_self">tres meses</a> en publicar los resultados. La primera intención fue publicar unos datos más elaborados, pero <a title="Sitio web de klicap - ingeniería del puzle" href="http://www.klicap.es" target="_blank">mi principal motivación profesional</a> ahora tiene absorbido todo mi tiempo. He preparado un archivo comprimido (ZIP) que contiene:</p>
<ol>
<li>La presentación con los resultados en formato ODP y PDF</li>
<li>Las gráficas que Opina genera</li>
<li>Los resultados que Opina genera en formato XLS</li>
</ol>
<p><a href="http://www.manuelrecena.com/docs/encuesta-ecosistemas-software.zip"><img class="alignnone size-full wp-image-932" title="Encuesta sobre Ecosistemas Software" src="http://www.manuelrecena.com/blog/../resources/1280655044_application-zip.png" alt="" width="72" height="72" /></a></p>
<p>Para cualquier cosa que queráis comentar, se creó <a title="Hilo relacionado" href="http://groups.google.com/group/ecosistemas-software/browse_thread/thread/0c925a063b97ce6d" target="_blank">un hilo</a> en la <a title="Grupo de trabajo Ecosistemas Software" href="http://groups.google.com/group/ecosistemas-software" target="_blank">lista de grupo ecosistema-software</a>.</p>
<div id="__ss_4881479" style="width: 525px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Encuesta sobre Ecosistemas Software" href="http://www.slideshare.net/recena/encuesta-ecosistemassoftware">Encuesta sobre Ecosistemas Software</a></strong><object id="__sse4881479" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="525" height="430" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=encuesta-ecosistemas-software-100801034827-phpapp01&amp;stripped_title=encuesta-ecosistemassoftware" /><param name="name" value="__sse4881479" /><param name="allowfullscreen" value="true" /><embed id="__sse4881479" type="application/x-shockwave-flash" width="525" height="430" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=encuesta-ecosistemas-software-100801034827-phpapp01&amp;stripped_title=encuesta-ecosistemassoftware" name="__sse4881479" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/recena">Manuel Jesús Recena Soto</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/931/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Novedades en Trac-0.12</title>
		<link>http://www.manuelrecena.com/blog/archives/926</link>
		<comments>http://www.manuelrecena.com/blog/archives/926#comments</comments>
		<pubDate>Mon, 07 Jun 2010 21:30:36 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=926</guid>
		<description><![CDATA[Hace unos días publicaron Trac-0.12RC1 y es grato comprobar que han incluido mejoras que la comunidad venía demandando desde hace tiempo. Las más destacadas son: Integración de babel. Otra estupenda librería en python que facilita la internacionalización de aplicaciones. Con ella resultará sencillo adaptar Trac a múltiples lenguas, tipos de moneda, formato de fechas, etc&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días publicaron <a title="Descarga la última release" href="http://trac.edgewall.org/wiki/TracDownload#LatestReleaseCandidate" target="_blank">Trac-0.12RC1</a> y es grato comprobar que han incluido mejoras que la comunidad venía demandando desde hace tiempo. Las más destacadas son:</p>
<ol>
<li>Integración de <a title="Sitio web del proyecto babel" href="http://babel.edgewall.org">babel</a>. Otra estupenda librería en python que facilita la internacionalización de aplicaciones. Con ella resultará sencillo adaptar Trac a múltiples lenguas, tipos de moneda, formato de fechas, etc&#8230;</li>
<li>Soporte de múltiples repositorios. Aunque sea una mejora muy solicitada, siempre hubo formas se suplir su carencia con svn:externals</li>
<li>Mejoras en la edición de páginas wiki, más cerca de <a title="Referencia a la wikipedia" href="http://es.wikipedia.org/wiki/WYSIWYG" target="_blank">WYSIWYG</a></li>
<li>Por fin se pueden editar los comentarios asociados a un ticket!</li>
<li>Mejoras de usabilidad en el navegador de repositorios. Ahora recuerda los directorios expandidos.</li>
</ol>
<p>Esto es una prueba de que el proyecto sigue realmente activo pese a lo que algunos piensan. Desde <a title="Cuenta de twitter" href="http://twitter.com/klicap" target="_blank">@klicap</a> pensamos que el diseño de su API es realmente bueno. Probaremos <a title="Sitio web del plugin" href="http://clinker.klicap.es/projects/alfrescointegration" target="_blank">CMIS Trac Plugin</a> con esta nueva versión.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/926/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Encuesta sobre ecosistemas software</title>
		<link>http://www.manuelrecena.com/blog/archives/917</link>
		<comments>http://www.manuelrecena.com/blog/archives/917#comments</comments>
		<pubDate>Wed, 14 Apr 2010 09:27:36 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[ecosistemas-software]]></category>
		<category><![CDATA[encuesta]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=917</guid>
		<description><![CDATA[Ayer se publicaba en la lista de correo del grupo Ecosistema Software un mensaje en el que se publicitaba una encuesta sobre las características de los ecosistemas software que departamentos, grupos o empresas implantan para acometer sus desarrollos software. Desde aquí os invito a participar y agradecer de antemano vuestra participación.]]></description>
			<content:encoded><![CDATA[<p>Ayer se publicaba en la <a title="Referencia a un hilo de la lista de correo" href="http://groups.google.com/group/ecosistemas-software/browse_thread/thread/c925a063b97ce6d" target="_blank">lista de correo</a> del grupo Ecosistema Software un mensaje en el que se publicitaba una encuesta sobre las características de los ecosistemas software que departamentos, grupos o empresas implantan para acometer sus desarrollos software.</p>
<p>Desde aquí os invito a participar y agradecer de antemano vuestra participación.</p>
<p><a href="http://demo.klicap.es/opina/c/44"><img class="alignnone size-full wp-image-918" title="Encuesta sobre Ecosistema Software" src="http://www.manuelrecena.com/blog/../resources/1271236767_survey.png" alt="" width="64" height="64" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/917/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tercera desconferencia en ecosistemas software</title>
		<link>http://www.manuelrecena.com/blog/archives/715</link>
		<comments>http://www.manuelrecena.com/blog/archives/715#comments</comments>
		<pubDate>Thu, 09 Jul 2009 19:55:09 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Conocimiento libre]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Ingeniería del software]]></category>
		<category><![CDATA[desconferencia]]></category>
		<category><![CDATA[ecosistemas-software]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=715</guid>
		<description><![CDATA[Han pasado ya varios meses desde que se celebrase la segunda desconferencia. Pero lo importante es que durante estos días se ha estado organizando la tercera desconferencia. ¿Cuándo? Miércoles, 22 de Julio de 2009 a las 19:00 ¿Dónde? [wp_geo_map] BitRock S.L. C/ Salado 11 &#8211; Local 15 41010 Sevilla Spain En esta ocasión, mi compañero [...]]]></description>
			<content:encoded><![CDATA[<p>Han pasado ya varios meses desde que se celebrase la <a title="Referencia a una entrada de este blog" href="http://www.manuelrecena.com/blog/archives/391" target="_blank">segunda desconferencia</a>. Pero lo importante es que durante estos días <a title="Referencia a un hilo de la lista de correo Ecosistemas Software" href="http://groups.google.com/group/ecosistemas-software/browse_thread/thread/5696e1d643485c4d" target="_blank">se ha estado organizando</a> la tercera desconferencia.</p>
<h3>¿Cuándo?</h3>
<p>Miércoles, 22 de Julio de 2009 a las 19:00</p>
<h3>¿Dónde?</h3>
<p>[wp_geo_map]</p>
<p>BitRock S.L.<br />
C/ Salado 11 &#8211; Local 15<br />
41010 Sevilla<br />
Spain</p>
<p>En esta ocasión, mi compañero y amigo <a title="Blog de Antonio Manuel Muñiz" href="http://amunizmartin.wordpress.com" target="_blank">Antonio Manuel Muñiz</a> y yo, nos hemos ofrecido a preparar un pequeño taller sobre:</p>
<ul>
<li> Instalación y configuración de Apache Archiva</li>
<li> Integración de mis proyectos maven con Apache Archiva</li>
<li> Instalación y configuración de SONAR</li>
<li> Integración de mis proyectos maven con SONAR</li>
<li> Instalación y configuración de Apache Continuum</li>
<li> Integración de mis proyectos maven con Apache Continuum</li>
</ul>
<p>Evidentemente, es una propuesta, luego saldrán muchos otros temas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/715/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven &#8211; Más que una herramienta de construcción</title>
		<link>http://www.manuelrecena.com/blog/archives/711</link>
		<comments>http://www.manuelrecena.com/blog/archives/711#comments</comments>
		<pubDate>Fri, 26 Jun 2009 22:10:00 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[seminario]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=711</guid>
		<description><![CDATA[Este es el nombre del seminario que he impartido recientemente. Un seminario de introducción en el que he hecho especial hincapié en aquellos detalles que hacen que los que se enfrantan por primera vez desistan con los primeros intentos. Las transparencias están publicadas en el sitio web oficial de Maven, en el apartado recursos externos.]]></description>
			<content:encoded><![CDATA[<p>Este es el nombre del seminario que he impartido recientemente. Un seminario de introducción en el que he hecho especial hincapié en aquellos detalles que hacen que los que se enfrantan por primera vez desistan con los primeros intentos.</p>
<p>Las <a title="Transparencias en formato PDF (32 Mb)" href="http://www.manuelrecena.com/docs/maven_090625.pdf" target="_blank">transparencias</a> están publicadas en el sitio web oficial de Maven, en el apartado <a title="Referencia a recursos de Maven" href="http://maven.apache.org/articles.html" target="_blank">recursos externos</a>.</p>
<p><img class="alignnone size-full wp-image-712" title="Maven: más que una herramienta de construcción" src="http://www.manuelrecena.com/blog/../resources/maven_090625.png" alt="Maven: más que una herramienta de construcción" width="400" height="280" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/711/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

