<?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>Diario de Programación</title>
	<atom:link href="http://blog.chuidiang.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chuidiang.com</link>
	<description>Programación e informática en general</description>
	<lastBuildDate>Thu, 11 Mar 2010 14:42:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Subiendo &#8220;extraños&#8221; al repositorio de maven</title>
		<link>http://blog.chuidiang.com/2010/03/11/subiendo-extranos-al-repositorio-de-maven/</link>
		<comments>http://blog.chuidiang.com/2010/03/11/subiendo-extranos-al-repositorio-de-maven/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 14:42:27 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[dependency]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[packaging]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=730</guid>
		<description><![CDATA[&#160;Cuando usamos maven entre varios desarrolladores en proyectos m&#225;s o menos grandes, es normal que montemos un repositorio de jars, estilo nexus o archiva. Cuando ejecutamos el comando mvn deploy, maven sube nuestro jar reci&#233;n compilado a este repositorio y lo hace accesible para los dem&#225;s desarrolladores.
Sin embargo, es posible subir a este tipo de [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;Cuando usamos <a href="http://maven.apache.org/index.html">maven</a> entre varios desarrolladores en proyectos m&aacute;s o menos grandes, es normal que montemos un repositorio de jars, estilo <a href="http://nexus.sonatype.org/">nexus</a> o <a href="http://archiva.apache.org/">archiva</a>. Cuando ejecutamos el comando <em>mvn deploy</em>, maven sube nuestro jar reci&eacute;n compilado a este repositorio y lo hace accesible para los dem&aacute;s desarrolladores.</p>
<p>Sin embargo, es posible subir a este tipo de repositorios ficheros que no sean .jar, podemos subir cualquier tipo de fichero. El comando <em>mvn deploy:deploy-file</em> con los par&aacute;metros adecuados, nos permite subir un fichero cualquiera.</p>
<p>&iquest;Para qu&eacute; queremos subir ficheros que no sean .jar?. Sup&oacute;n que como parte de nuestro proyecto java usamos <a href="http://java.sun.com/docs/books/jni/">JNI</a> con una librer&iacute;a .dll cuyos fuentes en C/C++ tambi&eacute;n desarrollamos nosotros. No parece una buena forma de compartir la .dll reci&eacute;n generada meti&eacute;ndola en nuestro <a href="http://es.wikipedia.org/wiki/Control_de_versiones">sistema de control de versiones</a>. Aunque podr&iacute;amos hacerlo as&iacute;, es m&aacute;s elegante usar el sistema de control de versiones para ficheros fuente o de texto que generemos a mano y no usarlo para los &quot;artefactos&quot; que construye nuestro proyecto, como ejecutables, librer&iacute;as, etc. La soluci&oacute;n entonces consiste en subir esa .dll reci&eacute;n generada al repositorio de jars, aunque no sea un jar. El comando puede parecerse a esto (no pongo todos los par&aacute;metros, que ser&iacute;a muy largo)</p>
<blockquote>
<p>mvn deploy:deploy-file -DgroupId=&#8230; -DartifactId=libreria -Dversion=1.0 <strong>-Dpackaging=dll</strong> -Dfile=libreria.dll -Durl=&#8230;.</p>
</blockquote>
<p>Y esto subir&iacute;a la .dll al repositorio de jars. La parte interesante de este asunto est&aacute; en el <em>-Dpackaging=dll</em>. Esto hace que maven ponga al fichero la extensi&oacute;n .dll para subirlo y lo subir&aacute; con el nombre <em>libreria-1.0.dll</em>, independientemente del nombre que tenga la .dll antes de subirla.</p>
<p>Y ahora viene otra parte interesante. En nuestro proyecto java podemos poner, en el pom.xml, la dependencia en runtime de esa librer&iacute;a que acabamos de subir</p>
<blockquote>
<p>&lt;dependency&gt;<br />
&nbsp;&nbsp; &lt;groupId&gt;&#8230;&lt;/groupId&gt;<br />
&nbsp;&nbsp; &lt;artifactId&gt;libreria&lt;/artifactId&gt;<br />
&nbsp;&nbsp; &lt;version&gt;1.0&lt;/version&gt;<br />
&nbsp;&nbsp; &lt;type&gt;dll&lt;/type&gt;<br />
&nbsp;&nbsp; &lt;scope&gt;runtime&lt;/scope&gt;<br />
&lt;/dependency&gt;</p>
</blockquote>
<p>Aqu&iacute;, nuevamente, la gracia est&aacute; en poner <em>&lt;type&gt;dll&lt;/type&gt;</em>, ya que esto hace saber a maven y al repositorio de jars que en realidad estamos buscando un fichero .dll, que hab&iacute;amos subido previamente con <em>-Dpackaging=dll</em></p>
<p>Por supuesto, la ejecuci&oacute;n del comando&nbsp;<em>mvn deploy:deploy-file</em> podemos a&ntilde;adirla al proceso de compilado de nuestros fuentes C/C++ y podemos poner version 1.0-SNAPSHOT, de forma que se suban versiones de desarrollo nuevas cada vez que se compile y que el resto de desarrolladores puedan disponer de ellas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/03/11/subiendo-extranos-al-repositorio-de-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Buzz tiene contenido no seguro?</title>
		<link>http://blog.chuidiang.com/2010/03/06/%c2%bfbuzz-tiene-contenido-no-seguro/</link>
		<comments>http://blog.chuidiang.com/2010/03/06/%c2%bfbuzz-tiene-contenido-no-seguro/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 22:24:40 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[anécdotas]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[gmail]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=728</guid>
		<description><![CDATA[&#160;He empezado a usar Google Chrome y tambi&#233;n Google Buzz desde Google mail (Gmail para los amigos), y me he encontrado una sorpresa curiosa: Google Chrome dice que Google Buzz tiene contenido no seguro. &#161;&#161; Google se descubre a s&#237; mismo !!.

]]></description>
			<content:encoded><![CDATA[<p>&nbsp;He empezado a usar Google Chrome y tambi&eacute;n Google Buzz desde Google mail (Gmail para los amigos), y me he encontrado una sorpresa curiosa: Google Chrome dice que Google Buzz tiene contenido no seguro. &iexcl;&iexcl; Google se descubre a s&iacute; mismo !!.</p>
<p><a href="http://blog.chuidiang.com/wp-content/uploads/chrome-gmail(1).png"><img alt="contenido no seguro en buzz" width="0" height="0" src="http://blog.chuidiang.com/wp-content/uploads/chrome-gmail.png" /><img alt="contenido no seguro en buzz" width="500" height="164" src="http://blog.chuidiang.com/wp-content/uploads/chrome-gmail(1).png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/03/06/%c2%bfbuzz-tiene-contenido-no-seguro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>He leído &#8220;Kanban y Scrum &#8211; Obteniendo lo mejor de ambos&#8221;</title>
		<link>http://blog.chuidiang.com/2010/03/05/he-leido-kanban-y-scrum-obteniendo-lo-mejor-de-ambos/</link>
		<comments>http://blog.chuidiang.com/2010/03/05/he-leido-kanban-y-scrum-obteniendo-lo-mejor-de-ambos/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 18:03:29 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[artículos]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=725</guid>
		<description><![CDATA[He le&#237;do &#34;Kanban y Scrum &#8211; Obteniendo lo mejor de ambos&#34; que te puedes descargar en el post del enlace, hacia el final, en cristiano.
En una primera parte, comparan scrum con kanban en plan te&#243;rico. No explican scrum con detalle ni kanban, es algo que se da por supuesto, simplemente se centran en comparar qu&#233; [...]]]></description>
			<content:encoded><![CDATA[<p>He le&iacute;do &quot;<a href="http://www.proyectalis.com/2010/01/28/scrum-vs-kanban-en-castellano/">Kanban y Scrum &#8211; Obteniendo lo mejor de ambos</a>&quot; que te puedes descargar en el post del enlace, hacia el final, en cristiano.</p>
<p>En una primera parte, comparan scrum con kanban en plan te&oacute;rico. No explican scrum con detalle ni kanban, es algo que se da por supuesto, simplemente se centran en comparar qu&eacute; cosas hace uno y qu&eacute; cosas hace el otro.</p>
<p>En la segunda parte se cuenta una historia real en la que intentan implantar Scrum o Kanban en un departamento de una empresa real. Van explicando los problemas de ese departamento, analizando posibles soluciones, implant&aacute;ndolas y viendo las mejoras que se producen en el proceso. Para su caso concreto se deciden por Kanban y lo van adaptando hasta que se hace c&oacute;modo. El tablero Kanban se convierte en una herramienta importante para ver si hay problemas y si se solucionan.</p>
<p>La parte te&oacute;rica de comparaci&oacute;n es m&aacute;s o menos lo ya sabido y como comparaci&oacute;n te&oacute;rica est&aacute; bien, hay algunos detalles que no ten&iacute;a claros y se han quedado aclarados, sobre todo en la parte Kanban que quiz&aacute;s conozco menos o est&aacute; menos documentada que Scrum.</p>
<p>La parte de implantaci&oacute;n pr&aacute;ctica no me ha gustado demasiado el c&oacute;mo est&aacute; escrita. Trata de explicar los problemas del departamento, las posibles soluciones, la implantaci&oacute;n de la mismas y los resultados obtenidos, pero lo hace en muy pocas hojas y demasiado por encima para mi gusto. Al final de la lectura me ha quedado la impresi&oacute;n de &#8230; &quot;&iquest;ya est&aacute;?&quot; y de &quot;kanban es maravilloso, f&iacute;jate como el departamento del que todo el mundo se quejaba en cuatro meses ha ganado el premio al m&aacute;s productivo&quot;. &nbsp;Parece propaganda.</p>
<p>Sin embargo, si leemos entre l&iacute;neas (o, al menos, no nos quedamos en los detalles), s&iacute; sacamos la conclusi&oacute;n de lo que es Kanban en el fondo. Y en el fondo kanban es detectar los problemas, encararlos y solucionarlos. El tablero kanban ayuda a detectar si hay o no problemas, viendo si las pegatinas se apilan en alguna columna o van fluyendo de principio a fin sin aglomeraciones. Y el tablero kanban ayuda a ver si la soluci&oacute;n que hemos puesto al problema es efectiva o no, viendo si las pegatinas se desatascan o no. Lo realmente importante de toda esta filosof&iacute;a es &quot;ten claro tu objetivo, detecta los problemas para conseguirlo, afr&oacute;ntalos y solucionalos&quot;. En el libro, el uso del tablero kanban no es m&aacute;s que la herramienta, lo importante es que detectaron porqu&eacute; no funcionaba bien el departamento, consiguieron mejorar su forma de trabajo, involucrar a la gerencia para que ayudara a solucionar problemas y mejoraron sus resultados. Todo un reto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/03/05/he-leido-kanban-y-scrum-obteniendo-lo-mejor-de-ambos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rangos de dependencias con maven</title>
		<link>http://blog.chuidiang.com/2010/03/04/rangos-de-dependencias-con-maven/</link>
		<comments>http://blog.chuidiang.com/2010/03/04/rangos-de-dependencias-con-maven/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 19:33:59 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[maven]]></category>
		<category><![CDATA[dependencias]]></category>
		<category><![CDATA[versiones]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=722</guid>
		<description><![CDATA[&#160;En maven todos estamos acostumbrados a poner las dependencias y en concreto, a poner la versi&#243;n concreta que queremos de la dependencia. Por ejemplo, si nuestro proyecto depende de log4j, solemos poner algo como esto

&#60;dependency&#62;
&#160;&#160; &#60;groupId&#62;log4j&#60;/groupId&#62;
&#160;&#160; &#60;artifactId&#62;log4j&#60;/artifactId&#62;
&#160;&#160; &#60;version&#62;1.2.13&#60;/version&#62;
&#60;/dependency&#62;

es decir, ponemos la versi&#243;n concreta que deseamos de log4j, en esta caso, la 1.2.13
Pues bien, es menos [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;En <a href="http://maven.apache.org/">maven</a> todos estamos acostumbrados a poner las dependencias y en concreto, a poner la versi&oacute;n concreta que queremos de la dependencia. Por ejemplo, si nuestro proyecto depende de <a href="http://logging.apache.org/log4j/">log4j</a>, solemos poner algo como esto</p>
<blockquote>
<p>&lt;dependency&gt;<br />
&nbsp;&nbsp; &lt;groupId&gt;log4j&lt;/groupId&gt;<br />
&nbsp;&nbsp; &lt;artifactId&gt;log4j&lt;/artifactId&gt;<br />
&nbsp;&nbsp; &lt;version&gt;1.2.13&lt;/version&gt;<br />
&lt;/dependency&gt;</p>
</blockquote>
<p>es decir, ponemos la versi&oacute;n concreta que deseamos de log4j, en esta caso, la 1.2.13</p>
<p>Pues bien, es menos conocido, quiz&aacute;s porque la documentaci&oacute;n de maven es algo escasa, pero <a href="http://docs.codehaus.org/display/MAVEN/Dependency+Mediation+and+Conflict+Resolution">podemos indicar a maven un rango de dependencias</a>, de forma que maven traer&aacute; la m&aacute;s moderna disponible. Para ello se utiliza la notaci&oacute;n matem&aacute;tica para rangos de valores, donde se abre par&eacute;ntesis o corchete, se pone el n&uacute;mero de versi&oacute;n inicial, coma, el n&uacute;mero de versi&oacute;n final y se cierra par&eacute;ntesis o corchete. Un corchete indica que la versi&oacute;n inicial o final es v&aacute;lida, mientras que un par&eacute;ntesis indica que no es v&aacute;lida. Dejar en blanco uno de los n&uacute;meros de versi&oacute;n indica que no hay l&iacute;mite por ese lado. As&iacute;, por ejemplo</p>
<blockquote>
<p>[1.2, 1.5) &nbsp; &nbsp; Cualquier versi&oacute;n entre la 1.2 y la 1.5, incluyendo la 1.2 (corchete al principio), pero excluyendo la 1.5 (par&eacute;ntesis al final)</p>
<p>[1.3, ) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Versi&oacute;n 1.3 o superior, incluyendo la 1.3</p>
<p>[1.0, 2.0) &nbsp; &nbsp; Cualquier versi&oacute;n 1.x.x, pero inferior a la 2.0</p>
</blockquote>
<p>En realidad maven admite hasta tres n&uacute;meros en la versi&oacute;n m&aacute;s un &quot;cualificador&quot;. El cualificador es un nombre cualquiera que se pone detr&aacute;s del n&uacute;mero de versi&oacute;n separado por un gui&oacute;n. Por ejemplo, imagina que en nuestro proyecto entregamos una versi&oacute;n al cliente FEDERICO y creamos una versi&oacute;n congelada para ese cliente. Su n&uacute;mero de versi&oacute;n podr&iacute;a ser 1.2.3-FEDERICO. O m&aacute;s com&uacute;n, si es una &quot;Release Candidate&quot;, le ponemos 1.2.3-rc, o si es una beta, pues 1.2.3-beta.</p>
<p>No lo he probado, pero imagino que esto permite poner cosas como</p>
<blockquote>
<p>[1.2, )-FEDERICO</p>
</blockquote>
<p>de forma que maven traer&aacute; cualquier versi&oacute;n 1.2 o superior que tenga el cualificador FEDERICO, es decir, que sea del cliente FEDERICO.</p>
<p>Considero esto realmente interesante, porque en un proyecto grande en el que hay muchos jar desarrollados por la gente de nuestro equipo y en los que cada jar tiene sus responsables, cada responsable puede subir su n&uacute;mero de versi&oacute;n cuando lo considere adecuado y los dem&aacute;s traer&aacute;n autom&aacute;ticamente o no esa versi&oacute;n seg&uacute;n lo que pongan en las dependencias. Si yo no quiero traerme los cambios que haga Juan en su jar, s&iacute;mplemente pongo que quiero la versi&oacute;n 1.4. Pero si me interesa traerme siempre su versi&oacute;n m&aacute;s moderna, entonces pongo [1.0, ).</p>
<p>Aunque supongo que es bastante conocido, aprovecho para poner aqu&iacute; cual es el significado de esos tres n&uacute;meros de versi&oacute;n. Si la versi&oacute;n es a.b.c, los n&uacute;meros se incrementan normalmente siguiendo los siguientes criterios:</p>
<ul>
<li>a se suele incrementar cuando el cambio es tan importante que hace la nueva versi&oacute;n incompatible con las anteriores. Si guardas datos con una versi&oacute;n 2.0 de un programa, posiblemente no puedas leer esos datos con la versi&oacute;n 1.0 del mismo programa (normalmente al rev&eacute;s si suele ser posible).</li>
<li>b se suele cambiar cuando no hay p&eacute;rdida de compatibilidad, pero s&iacute; se han a&ntilde;adido nuevas funcionalidades. Por ejemplo, las versiones 1.3 y 1.4 pueden usar los mismos datos guardados indistintamente, pero la 1.4 permite imprimirlos mientras que la 1.3 no.</li>
<li>c se suele cambiar cuando se han arreglado errores respecto a la anterior. Por ejemplo, la 1.2.3 puede caerse cuando el usuario pulsa el bot&oacute;n A, luego minimiza la ventana y le da a la tecla de tabulador. La 1.2.4 ya no tiene ese error.</li>
</ul>
<p>Por supuesto, esto es una convenci&oacute;n m&aacute;s o menos aceptada, pero desde luego no es obligatoria.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/03/04/rangos-de-dependencias-con-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javadoc con UML</title>
		<link>http://blog.chuidiang.com/2010/03/03/javadoc-con-uml/</link>
		<comments>http://blog.chuidiang.com/2010/03/03/javadoc-con-uml/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 18:42:07 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[javadoc]]></category>
		<category><![CDATA[umlgraph]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=718</guid>
		<description><![CDATA[Hurgando por ah&#237; me he encontrado con UMLGraph, una herramienta que genera gr&#225;ficos UML a partir de unos textos que los describen. Lo bueno es que, al menos para el diagrama de clases, el texto que describe el diagrama UML es exactamente igual que un fuente java. Dicho de otra forma, si ponemos en el [...]]]></description>
			<content:encoded><![CDATA[<p>Hurgando por ah&iacute; me he encontrado con <a href="http://www.umlgraph.org/">UMLGraph</a>, una herramienta que genera gr&aacute;ficos <a href="http://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado">UML</a> a partir de unos textos que los describen. Lo bueno es que, al menos para el diagrama de clases, el texto que describe el diagrama UML es exactamente igual que un fuente java. Dicho de otra forma, si ponemos en el fichero &quot;<em>class UnaClase extends UnPadre {}</em>&quot;, obtendremos un diagrama con una cajita UnaClase que hereda (flechita con tri&aacute;ngulo) de una cajita UnPadre. Puedes ver el ejemplo <a href="http://www.umlgraph.org/doc/cd-intro.html">aqu&iacute;</a>. Esto lo hace ideal para generar los gr&aacute;ficos UML de clases a partir de c&oacute;digo fuente ya hecho.</p>
<p>Otro punto interesante es que viene con la posibilidad de invocar javadoc usando UMLGraph, de forma que en nuestro javadoc se generar&iacute;a diagramas de clases incrustados. UMLGraph viene con un <a href="http://java.sun.com/javase/6/docs/technotes/guides/javadoc/doclet/overview.html">doclet</a> que se puede usar desde el comando javadoc de java y de esta forma, javadoc generar&aacute; la documentaci&oacute;n de la forma habitual, pero incluyendo un gr&aacute;fico de UML. En la descripci&oacute;n de un package, pondr&aacute; todas las clase incluidas en ese package y las relaciones entre ellas. En la descripci&oacute;n de una clase pondr&aacute; un dibujo de dicha clase con las relaciones (herencias, dependencias, etc) con otras clases del paquete o de otros paquetes. En la figura puedes ver un ejemplo de javadoc generado con el doclet de UMLGraph.</p>
<p><a href="http://blog.chuidiang.com/wp-content/uploads/javadoc-uml.png"><img alt="javadoc con grafico UML" width="500" height="390" src="http://blog.chuidiang.com/wp-content/uploads/javadoc-uml.png" /></a></p>
<p>Un detalle a tener en cuenta es que para que UMLGraph pueda generar los ficheros gr&aacute;ficos es necesario tener instalado previamente&nbsp;<a href="http://www.graphviz.org/">GraphViz</a>.</p>
<p>En el diagrama de clases podr&iacute;an configurarse muchas cosas, poner notas asociadas a las clases, poner otro tipo de cajas que no sean de clases, m&eacute;todos que deben o no mostrarse, etc. La pega de ello es que ir&iacute;a configurado en c&oacute;digo a base de <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html">anotaciones</a>, por lo que el c&oacute;digo quedar&iacute;a algo &quot;guarreado&quot; para luego ver el dibujo bonito.</p>
<p>Tambi&eacute;n pueden hacerse <a href="http://www.umlgraph.org/doc/seq-intro.html">diagramas de secuencia</a>, pero desgraciadamente la sintaxis del fichero de texto que lo describe ya no es java, as&iacute; que no deja de ser una forma alternativa de hacer el diagrama. Puede ser interesante, por ejemplo, si guardamos los diagramas de secuencia en un sistema de control de versiones (como <a href="http://subversion.tigris.org/">subversion</a>). Siempre ocupa menos y es m&aacute;s interesante para ver diferencias con versiones anteriores un fichero de texto que no un gr&aacute;fico o un proyecto entero de alguna herramienta compleja de generaci&oacute;n de gr&aacute;ficos UML (<a href="http://www.borland.com/us/products/together/index.html">Together</a>, <a href="http://www-01.ibm.com/software/rational/uml/">Rational</a>,&#8230;).</p>
<p>Y otra cosa que a m&iacute; siempre me viene bien, es que UMLGraph est&aacute; subido al <a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/gr/spinellis/UmlGraph/4.6/">repositorio ibiblio de maven</a> y tiene plugin para el mismo. De esta forma, <a href="http://maven.apache.org/pom.html">configurando el fichero pom.xml de nuestro proyecto maven</a> (en concreto, configurando el plugin de javadoc para que use el doclet de UMLGraph), podemos generar el javadoc con gr&aacute;ficos UML directamente desde maven. La configuraci&oacute;n ser&iacute;a algo parecido a esto</p>
<blockquote>
<p>&lt;reporting&gt; <br />
&nbsp;&nbsp; &lt;plugins&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp;&lt;plugin&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &lt;configuration&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;source&gt;1.5&lt;/source&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;aggregate&gt;true&lt;/aggregate&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;doclet&gt;gr.spinellis.umlgraph.doclet.UmlGraphDoc&lt;/doclet&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;docletArtifact&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;groupId&gt;gr.spinellis&lt;/groupId&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;artifactId&gt;UmlGraph&lt;/artifactId&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;version&gt;4.6&lt;/version&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/docletArtifact&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;additionalparam&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-inferrel -inferdep -quiet -hide java.* <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-collpackages java.util.* -qualify <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-postfixpackage -nodefontsize 9 <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -nodefontpackagesize 7 <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/additionalparam&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/configuration&gt; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &lt;/plugin&gt; <br />
&nbsp;&nbsp; &nbsp;&lt;/plugins&gt; <br />
&lt;/reporting&gt;</p>
</blockquote>
<p>Con esto, un simple <em>mvn javadoc:javadoc</em> nos generar&iacute;a la documentaci&oacute;n javadoc de nuestro proyecto maven, gr&aacute;ficos UML incluidos.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/03/03/javadoc-con-uml/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OutOfMemoryError con test de maven</title>
		<link>http://blog.chuidiang.com/2010/02/24/outofmemoryerror-con-test-de-maven/</link>
		<comments>http://blog.chuidiang.com/2010/02/24/outofmemoryerror-con-test-de-maven/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 07:54:35 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[maven]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[outofmemoryerror]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=716</guid>
		<description><![CDATA[&#160;
El otro d&#237;a me salto un OutOfMemoryError al ejecutarse un test autom&#225;tico desde maven. Te&#243;ricamente, para evitar problemas de memoria con maven basta con poner la variable de entorno MAVEN_OPTS con los par&#225;metros que le queremos pasar a la m&#225;quina virtual de java, en concreto, los de aumento de memoria

set MAVEN_OPTS=-Xmx512m

De hecho, tengo esa variable [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>El otro d&iacute;a me salto un <a href="http://java.sun.com/javase/6/docs/api/java/lang/OutOfMemoryError.html">OutOfMemoryError</a> al ejecutarse un test autom&aacute;tico desde <a href="http://maven.apache.org/">maven</a>. Te&oacute;ricamente, para evitar problemas de memoria con maven basta con poner la variable de entorno MAVEN_OPTS con los <a href="http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html">par&aacute;metros que le queremos pasar a la m&aacute;quina virtual de java</a>, en concreto, los de aumento de memoria</p>
<blockquote>
<p>set MAVEN_OPTS=-Xmx512m</p>
</blockquote>
<p>De hecho, tengo esa variable puesta por defecto en el entorno y estaba correctamente inicializada. Pero el OutOfMemoryException persiste. As&iacute; que a buscar en google.</p>
<p>Al final encuentro que maven arranca una m&aacute;quina virtual java separada para ejecutar los test y que el par&aacute;metro MAVEN_OPTS s&oacute;lo afecta a la m&aacute;quina virtual en la que corre maven y no a la m&aacute;quina virtual en la que se ejecutan los test. El plugin de maven que se encarga de ejecutar los test autom&aacute;ticos se llama <a href="http://maven.apache.org/plugins/maven-surefire-plugin/">maven-surefire-plugin</a> y tiene <a href="http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html">su propia configuraci&oacute;n</a>. La variable argLine permite indicar, entre otras cosas, la cantidad de memoria que queremos que se asigne a la m&aacute;quina virtual java en la que se ejecutan los test. Para ello, debemos ejecutar as&iacute;</p>
<blockquote>
<p>mvn -DargLine=-Xmx512m test</p>
</blockquote>
<p>o bien, configurarlo en el mismo pom.xml del proyecto</p>
<blockquote>
<p>&lt;project&gt;<br />
&lt;build&gt;<br />
&lt;plugins&gt;<br />
&nbsp;&nbsp; &#8230;<br />
&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp; &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &nbsp;&nbsp; &lt;configuration&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;argLine&gt;-Xmx512m&lt;/argLine&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp; &lt;/configuration&gt;<br />
&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/02/24/outofmemoryerror-con-test-de-maven/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Más sobre los test automáticos</title>
		<link>http://blog.chuidiang.com/2010/02/22/mas-sobre-los-test-automaticos/</link>
		<comments>http://blog.chuidiang.com/2010/02/22/mas-sobre-los-test-automaticos/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 19:25:11 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[abbott]]></category>
		<category><![CDATA[costello]]></category>
		<category><![CDATA[fest swing]]></category>
		<category><![CDATA[gui]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=714</guid>
		<description><![CDATA[&#160;
Coment&#233; ayer que estaba jugando con fest-swing y otras herramientas para test autom&#225;ticos de pruebas de las interfaces gr&#225;ficas de usuario. Pues bien, hoy he seguido un poco y he conseguido resolver la mayor parte de los problemas que se me presentaron. Eran, por supuesto, culpa m&#237;a, de no conocer la herramienta y de la [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Coment&eacute; ayer que <a href="http://blog.chuidiang.com/2010/02/20/test-automaticos-de-interfaces-graficas-de-usuario/">estaba jugando con fest-swing</a> y otras herramientas para test autom&aacute;ticos de pruebas de las interfaces gr&aacute;ficas de usuario. Pues bien, hoy he seguido un poco y he conseguido resolver la mayor parte de los problemas que se me presentaron. Eran, por supuesto, culpa m&iacute;a, de no conocer la herramienta y de la mala costumbre de jugar el ensayo y error en vez de leerse la documentaci&oacute;n.</p>
<p>Por un lado, en vez de <a href="http://code.google.com/p/fest/downloads/list">bajarme fest-swing de la p&aacute;gina de fest-swing</a>, us&eacute; <a href="http://docs.codehaus.org/display/FEST/Maven+Repository">el repositorio maven</a> que hay para ello, dejando que fuera maven el que se bajara el jar de fest-swing y todas sus dependencias. Entiendo que esto no tiene mucho que ver (m&aacute;s bien nada) con los problemas que se me presentaron.</p>
<p>El segundo punto, y este s&iacute; es importante, es que si hacemos el ejemplo tonto de test que viene con fest-swing no hay ning&uacute;n problema, sale bien a la primera. Pero si ejecutamos una bater&iacute;a de test con fest-swing, es muy importante reiniciar los recursos que usa fest-swing. Esto se traduce que en el m&eacute;todo tearDown() (que JUnit ejecuta despu&eacute;s de cada test), debemos hacer la llamada correspondiente</p>
<blockquote>
<p>private FrameFixture window; // Clase de Fest-Swing con la ventana principal.<br />
&#8230;<br />
public void tearDown() {<br />
&nbsp;&nbsp; window.cleanUp();&nbsp; // reiniciar recursos<br />
}</p>
</blockquote>
<p>Y esto ha solucionado gran parte de los problemas que ten&iacute;a. Ahora las ventanas de test s&iacute; salen cuando se ejecutan desde maven y no hacen tantas cosas raras cuando se ejecutan desde eclipse.</p>
<p>Otro tema importante es que aunque Fest-Swing se encarga de acceder a los componentes en el <a href="http://en.wikipedia.org/wiki/Event_dispatching_thread">hilo de tratamiento de eventos</a> de swing, es posible que el orden de estos eventos no sea el que esperamos. Si nuestro test manda visualizar una ventana, he encontrado &uacute;til esperar a que dicha ventana est&eacute; realmente visible antes de proseguir con el test. Esto se puede conseguir con la llamada a window.requireVisible() de fest-swing. Esta llamada hace fallar el test si la ventana no est&aacute; visible, pero espera un tiempo prudencial antes de cantar el fallo. De esta forma, la llamada se queda bloqueada hasta que la ventana realmente est&aacute; visible, o hasta que pasa un tiempo excesivo de espera (configurable, por supuesto).</p>
<p>Lo que no he conseguido es que desde eclipse los test se ejecuten dando resultados siempre. S&iacute; es cierto que con todo esto parece que falla menos, pero siguen sali&eacute;ndome barras grises o negras (en vez de verdes o rojas) de vez en cuando.</p>
<p>Una vez conseguido que todo funcione m&aacute;s o menos correctamente, lo he metido en Subversion y he esperado a que el sistema de integraci&oacute;n continua (Hudson) compilara y ejecutara los test. A pesar de las advertencias en la documentaci&oacute;n de fest-swing de que puede haber problemas con la integraci&oacute;n continua, todo ha ido sobre ruedas y sin problemas.</p>
<p>Otra caracter&iacute;stica que me ha parecido interesante de fest-swing, aunque no la he probado, es que si un test falla, fest-swing puede capturar y almacenar la pantalla en el momento que se produce el fallo. De esta forma, viendo la foto de nuestra interfaz gr&aacute;fica de usuario con el fallo, podemos ver si realmente hay algo incorrecto o el fallo se ha producido por otra circunstancia. Por ejemplo, que la ventana de que &quot;windows se ha actualizado&quot; haya salido justo encima de nuestra interfaz justo cuando la estamos testeando.</p>
<p>As&iacute; que de momento fest-swing queda incorporado en mi trabajo como herramienta para hacer test de interfaces gr&aacute;ficas de usuario. S&oacute;lo me falta ir convenciendo a mis &quot;compis&quot; para que tambi&eacute;n la usen.</p>
<p>Coment&eacute; tambi&eacute;n en el post anterior que quer&iacute;a probar <a href="http://abbot.sourceforge.net/doc/overview.shtml">Abbott</a>. Bien, despu&eacute;s del &eacute;xito con fest-swing, no lo he hecho. Pero leyendo la documentaci&oacute;n de Abbott, he visto una caracter&iacute;stica tambi&eacute;n interesante. Abbott, &iquest;c&oacute;mo no?, viene con <a href="http://abbot.sourceforge.net/doc/user-guide.shtml">Costello</a>, una aplicaci&oacute;n que permite ejecutar nuestra interfaz de usuario de forma normal (a trav&eacute;s de su m&eacute;todo main()) y actuar manualmente sobre ella. Costello se encargar&aacute; de capturar toda nuestra interacci&oacute;n con ella (a modo de grabaci&oacute;n), de forma que luego Costello puede reproducirla una y otra vez sobre nuestra aplicaci&oacute;n, testeando que los resultados son los mismos. Es una forma interesante de hacer los test, sin necesidad de programar demasiado. A pesar de que usaremos fest-swing, probar&eacute; Abbott y Costello en alg&uacute;n momento, para ver si se puede testear el sistema completo en el entorno de pruebas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/02/22/mas-sobre-los-test-automaticos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Test automáticos de interfaces gráficas de usuario</title>
		<link>http://blog.chuidiang.com/2010/02/20/test-automaticos-de-interfaces-graficas-de-usuario/</link>
		<comments>http://blog.chuidiang.com/2010/02/20/test-automaticos-de-interfaces-graficas-de-usuario/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 11:51:58 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[abbott]]></category>
		<category><![CDATA[fest]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[uispec4j]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=712</guid>
		<description><![CDATA[&#160;
Por fin, despu&#233;s de una larga temporada adaptando una y otra vez el mismo software ya hecho a distintos proyectos, ha llegado el momento de empezar a hacer algo nuevo. Vamos a pasar a java unas viejas interfaces gr&#225;ficas de usuario que ten&#237;amos en C++. Por supuesto y con mis ganas de aplicar (y aprender) [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Por fin, despu&eacute;s de una larga temporada adaptando una y otra vez el mismo software ya hecho a distintos proyectos, ha llegado el momento de empezar a hacer algo nuevo. Vamos a pasar a java unas viejas interfaces gr&aacute;ficas de usuario que ten&iacute;amos en C++. Por supuesto y con mis ganas de aplicar (y aprender) las buenas costumbres de programaci&oacute;n, voy a intentar hacer la parte que me toca siguiendo <a href="http://www.chuidiang.com/java/herramientas/test-automaticos/tdd-test-driven-development.php">TDD</a>. Pero, <a href="http://es.wikiquote.org/wiki/Don_Quijote_de_la_Mancha">amigo Sancho, con la iglesia hemos topado</a>. Una de las cosas que tradicionalmente se reconoce que son dif&iacute;ciles de probar autom&aacute;ticamente son, precisamente, las interfaces gr&aacute;ficas de usuario.</p>
<p>En una aplicaci&oacute;n java SWING, los test b&aacute;sicamente consisten en coger la ventana e ir buscando en los componentes que contienen, recursivamente, hasta que se encuentra el que se busca. Una vez encontrado, actuamos sobre &eacute;l, haciendo click, metiendo un texto, leyendo su contenido o lo que sea que necesitemos hacer para realizar el test autom&aacute;ticamente. Tambi&eacute;n la clase <a href="http://java.sun.com/javase/6/docs/api/java/awt/Robot.html">java.awt.Robot</a> nos permite simular eventos de rat&oacute;n y teclado sobre los componentes. Pero ni buscar componentes por las ventanas, ni usar la clase Robot es precisamente una tarea c&oacute;moda. Por fortuna, hay librer&iacute;as que nos ayudan a hacer estas tareas y en definitiva, a realizar los test autom&aacute;ticos. As&iacute; que a probar esas librer&iacute;as toca.</p>
<p>La primera que he probado ha sido <a href="http://easytesting.org/swing/wiki/pmwiki.php">FEST-Swing</a>, quiz&aacute;s la m&aacute;s conocida para aplicaciones de escritorio con java. La librer&iacute;a est&aacute; muy bien y contiene caracter&iacute;sticas muy interesantes. Las que m&aacute;s me han llamado la atenci&oacute;n:</p>
<ul>
<li>Seg&uacute;n recomendaci&oacute;n de java, todos los accesos a ventanas deben hacerse en el hilo de refresco de ventanas y tratamiento de eventos que nos proporciona java (<a href="http://en.wikipedia.org/wiki/Event_dispatching_thread">EDT Event dispatch Thread</a>). Pues bien, una simple configuraci&oacute;n de FEST en el test hace que salte si accedemos a los componentes SWING fuera de ese hilo.</li>
<li>Precisamente ese hilo es un poco rollo. Nuestro test no se ejecuta en ese thread EDT y si el c&oacute;digo que testeamos mete algo en un componente SWING usando el thread EDT (como se recomienda), nuestro test debe esperar a que el thread EDT termine antes de verificar el contenido del componente. Pues bien, FEST nos hace esto totalmente transparente. Cuando con FEST accedemos a un componente para ver su contenido, FEST espera que terminen los hilos EDT.</li>
<li>Aunque al principio parece raro, es realmente sencillo de usar. Podemos buscar en general cualquier componente con un m&eacute;todo simple, indicando qu&eacute; tipo de componente buscamos (JTextFiel, JLabel, etc), por su nombre (si hemos tenido la precauci&oacute;n de pon&eacute;rselo con setName()) o haci&eacute;ndonos un filtro a medida (un <a href="http://easytesting.org/swing/apidocs/org/fest/swing/core/GenericTypeMatcher.html">Matcher</a>)</li>
</ul>
<p>Pero no es oro todo lo que reluce. Me he encontrado con dos problemas que me van a dificultar seriamente su uso, m&aacute;s un peque&ntilde;o problemilla.</p>
<ul>
<li>El peque&ntilde;o problemilla es que si ejecuto un test desde eclipse, a veces parece que no se ejecuta el test. Cuando ejecutamos un test en eclipse, al final sale una barra verde o roja, indicando si el test pasa o no. Pues resulta que, de forma aleatoria, el test termina y dicha barrita queda en negro o en gris, como si eclipse no detectara que el test ha terminado. Bueno, no es grave, puesto que no voy a ejecutar habitualmente los test con eclipse y lo peor que puede pasar es que tenga que darle dos o tres veces hasta obtener la barra verde o roja.</li>
<li>Un problema m&aacute;s serio lo he tenido con <a href="http://www.chuidiang.com/java/herramientas/maven.php">maven</a>. Cuando ejecuto el test en eclipse, FEST visualiza las ventanas bajo test, se hace el test y pasa el test o falla (o se queda en gris/negro). Ejecutando el mismo test desde maven, ni siquiera sale la ventana y el test falla sistem&aacute;ticamente. Investigar&eacute; en este tema, pero si no consigo solucionarlo, descartar&eacute; el uso de FEST en el entorno que trabajo.</li>
<li>Y un segundo posible problema es la integraci&oacute;n continua. <a href="http://abbot.sourceforge.net/doc/overview.shtml">Hudson</a> se encarga de compilar y pasar los test de nuestros proyectos todas las noches. FEST requiere que la ventana se visualice y por tanto, requiere que Hudson corra en un terminal abierto en sesi&oacute;n, sin salvapantallas ni nada que impida la correcta visualizaci&oacute;n de la ventana. En la documentaci&oacute;n de FEST indican <a href="http://docs.codehaus.org/display/FEST/Continuous+Integration">varias formas para solucionar problemas con la integraci&oacute;n continua</a>. Me pondr&eacute; con ellas si consigo pasar el punto anterior, lo de ejecutar los test con maven, ya que si hudson ejecuta maven y maven no muestra las ventanas, me da igual que haya o no pantalla disponible.</li>
</ul>
<p>Despu&eacute;s de esto, fui a buscar otra herramienta y me top&eacute; con <a href="http://www.uispec4j.org/">uispec4j</a>. Mucho m&aacute;s simple que FEST de uso (aunque menos potente) y puede cumplir para test no excesivamente ambiciosos. A diferencia de FEST, no requiere que las ventanas se hagan visibles. Esto seguramente d&eacute; menos problemas a la hora de integraci&oacute;n continua, pero posiblemente haga que los test sean menos reales. Tampoco controla el acceso a los componentes a trav&eacute;s del thread EDT, por lo que las esperas por dicho thread debemos codificarlas en nuestro test. As&iacute; que nada, me puse a probarla y &iquest;c&oacute;mo no?, me encontr&eacute; con un par de problemillas.</p>
<ul>
<li>Al igual que FEST, al ejecutar los test con eclipse, a veces la barra no queda ni verde ni roja, sino gris claro o negro. Esto ya hace pensar que no es problema ni de FEST ni de uispect4j, sino quiz&aacute;s un test mal hecho por mi parte o a alg&uacute;n problema con mi eclipse. Tengo que probar en casa.</li>
<li>Al ejecutar los test, me salta una fea excepci&oacute;n. <a href="http://fluency.knownspace.org/confluence/display/fdoc/Running+the+Functional+Tests">Buscando en google</a>, veo que hay un problema cuando juntas wndows xp, java 6 y uispec4j. &iexcl;&iexcl; qu&eacute; casualidad !! &iexcl;&iexcl; justo mi configuraci&oacute;n !!. </li>
</ul>
<p>En fin, sigo pele&aacute;ndome a ver si consigo que alguna de estas herramientas me funcione correctamente. Tambi&eacute;n me gustar&iacute;a echar un ojo a <a href="http://abbot.sourceforge.net/doc/overview.shtml">abbott</a>, herramienta similar aunque quiz&aacute;s menos conocida.</p>
<p>Por cierto, quiero dejar claro que no estoy diciendo que FEST o uispec4j est&eacute;n mal o no funcionen correctamente. Simplemente estoy contando lo que me ha pasado trabajando dos o tres d&iacute;as con ellas mientras hac&iacute;a el c&oacute;digo real de mi aplicaci&oacute;n. Pueden ser fallos de las librer&iacute;as, de mi configuraci&oacute;n concreta, de mi c&oacute;digo que haga cosas raras o de que estoy pagando la novatada haciendo mis primeros test de este tipo con este tipo de herramientas.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/02/20/test-automaticos-de-interfaces-graficas-de-usuario/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gestores de documentos</title>
		<link>http://blog.chuidiang.com/2010/02/12/gestores-de-documentos/</link>
		<comments>http://blog.chuidiang.com/2010/02/12/gestores-de-documentos/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 16:34:48 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[alfresco]]></category>
		<category><![CDATA[gestores documentales]]></category>
		<category><![CDATA[nuxeo]]></category>
		<category><![CDATA[openkm]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=710</guid>
		<description><![CDATA[&#160;
Cuando en un proyecto entre varias personas empieza a haber montones de documentos word, excel, pdf y dem&#225;s con cosas de dise&#241;o, requisitos, notas de cliente, actas de reuniones, etc, suele ser un l&#237;o organizarlos, compartirlos, encontrar justamente el que queremos, mantener distintas versiones de ellos, etc. 
Para ayudarnos en este tema tenemos los gestores [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Cuando en un proyecto entre varias personas empieza a haber montones de documentos word, excel, pdf y dem&aacute;s con cosas de dise&ntilde;o, requisitos, notas de cliente, actas de reuniones, etc, suele ser un l&iacute;o organizarlos, compartirlos, encontrar justamente el que queremos, mantener distintas versiones de ellos, etc. </p>
<p>Para ayudarnos en este tema tenemos los gestores de documentos (creo que su nombre oficial es <a href="http://es.wikipedia.org/wiki/Software_de_gesti%C3%B3n_documental">gestores documentales</a>). Normalmente con una interfaz web podemos subir nuestros documentos, tenerlos organizados, mantener distintas versiones y buscar en ellos. Al ser con interfaz web, el acceso es f&aacute;cil para todos los miembros del proyecto.</p>
<p>Rebuscando con google, el primero que me encontr&eacute; gratuito es <a href="http://www.alfresco.com/es/">alfresco</a>. pero no me ha hecho ninguna gracia. Me bajo el ejecutable windows, lo instalo, me pide cosas normalitas como si quiero instalaci&oacute;n t&iacute;pica o personalizada, una password de administrador &#8230; y me acaba sacando esta ventana</p>
<input width="506" type="image" height="390" src="http://blog.chuidiang.com/wp-content/uploads/alfresco.png" alt="pantalla instalaci&oacute;n alfresco" />
<p>Bueno, eso da la impresi&oacute;n de no estar muy cuidado. Le d&iacute; a &quot;Cancelar&quot; con lo que se abort&oacute; la instalaci&oacute;n, volv&iacute; a instalar y obtuve la misma pantalla. Esta vez decid&iacute; dejarlo en marcha e irme a tomar un caf&eacute;. Efectivamente, a pesar de la pantalla, se instal&oacute;. Arranco el servidor, intento acceder desde el navegador &#8230; y s&oacute;lo tengo errores. No s&eacute; si hay que configurar algo o no, pero desde luego, no parece que esta herramienta sea demasiado robusta, ni cuidada.</p>
<p>As&iacute; que me pongo a buscar otra y doy con <a href="http://www.openkm.com/">openKM</a>. Esta s&iacute;, me la bajo, la instalo, se instala sola, la arranco y funciona. Me da alg&uacute;n error al abrir la p&aacute;gina web por primera vez, pero se recupera bien y parece que funciona bien. A jugar con ella. Es la primera vez que manejo una herramienta de estas, pero voy a poner aqu&iacute; las cosillas que he probado y lo que me ha llamado la atenci&oacute;n.</p>
<p>En la interfaz web organizas una estructura de directorios y subes documentos de todo tipo. Una cosa que me ha llamado la atenci&oacute;n es que una vez subido el documento, si queremos cambiarlo de directorio, basta con arrastrarlo con el rat&oacute;n. </p>
<p>A cada documento puedes ponerle unas etiquetas (tags) para luego buscarlos f&aacute;cilmente y a&ntilde;adirle notas. Puedes subir versiones nuevas de los mismos documentos y el guarda (y muestra todo el hist&oacute;rico). Es m&aacute;s, una vez subido y para los formatos m&aacute;s est&aacute;ndar (.doc, .pdf, .xls, .txt, .html, etc, etc) revisa el contenido y lo almacena para posteriores b&uacute;squedas. M&aacute;s adelante podemos buscar documentos que contengan &quot;estas palabras&quot;. La b&uacute;squeda, adem&aacute;s de palabras, permite filtrar por fecha de documentos, por el usuario que lo ha subido, por las etiquetas, etc, etc.</p>
<p>Otra caracter&iacute;stica que me ha parecido muy interesante es que podemos importar de golpe un directorio al que tenga acceso el servidor. De esta forma, si antes de instalar la herramienta ten&iacute;amos un directorio con dos mil documentos, no es necesario subirlos uno a uno. Basta indicarle a la herramienta cual es ese directorio, esperar un tiempo que puede ser grande, y ya tenemos todo importado e indexado. Ya podemos empezar a buscar. Obviamente, los documentos importados as&iacute; no tienen etiquetas ni notas, que tendremos que poner a mano si queremos hacerlo.</p>
<p>Otra gratuita de este estilo es <a href="http://www.nuxeo.com/en">Nuxeo</a>, que probar&eacute; el lunes posiblemente. De todas formas, aunque a m&iacute; no me afecta directamente el problema, si veo que una herramienta de este estilo puede ayudar mucho a los jefes de proyecto. As&iacute; que por hacerles un poco &quot;la pelota&quot;, pondr&eacute; una marcha y se la ense&ntilde;ar&eacute; funcionando, con uno de sus gigantescos directorios de documentos importantes de proyecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/02/12/gestores-de-documentos/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Quitar linux</title>
		<link>http://blog.chuidiang.com/2010/02/11/quitar-linux/</link>
		<comments>http://blog.chuidiang.com/2010/02/11/quitar-linux/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 13:54:06 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mbr]]></category>
		<category><![CDATA[mbrfix]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=708</guid>
		<description><![CDATA[&#160;
Una vez instalado linux, quiz&#225;s nos d&#233; por quitarlo, pero hay un peque&#241;o problema. Cuando se instala linux, este pone un gestor de arranque (LILO o GRUB) en el sector de arranque del disco duro (MBR). Este gestor de arranque busca su configuraci&#243;n en la partici&#243;n en la que tenemos linux. Si &#250;nicamente formateamos esa [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Una vez instalado linux, quiz&aacute;s nos d&eacute; por quitarlo, pero hay un peque&ntilde;o problema. Cuando se instala linux, este pone un gestor de arranque (LILO o GRUB) en el sector de arranque del disco duro (MBR). Este gestor de arranque busca su configuraci&oacute;n en la partici&oacute;n en la que tenemos linux. Si &uacute;nicamente formateamos esa partici&oacute;n de linux, nuestro ordenador no arrancar&aacute; m&aacute;s. El gestor de arranque va a buscar su fichero de configuraci&oacute;n a la partici&oacute;n de linux y como esta ya no existe, no funciona.</p>
<p>Por ello, una de las primeras cosas que tenemos que hacer antes de quitar linux es restaurar el sector de arranque original. Hay varias opciones, seg&uacute;n nuestra versi&oacute;n de windows y si tenemos o no a mano el CD de instalaci&oacute;n de windows.</p>
<p>Los Windows antiguos vienen con el comando <a href="http://support.microsoft.com/kb/255867/es">fdisk</a>, por lo que algo tan sencillo como</p>
<blockquote>
<p>C:\&gt; fdisk /mbr</p>
</blockquote>
<p>deber&iacute;a restaurar nuestro sector de arranque. Pero los windows m&aacute;s modernos (de XP en adelante), no vienen con ese comando. Por ello, tenemos que arrancar desde el CD de instalaci&oacute;n en modo de &quot;restaurar sistema&quot; y <a href="http://www.principiantes.info/winxp/recuperar_sector_arranque.php">ejecutar una serie de extra&ntilde;os comandos</a>.</p>
<p>Tenemos sin embargo una soluci&oacute;n sencilla. Basta con bajarse algo como <a href="http://www.sysint.no/products/Download/tabid/536/language/en-US/Default.aspx">MBRFix</a>, un peque&ntilde;o ejecutable, y con un comando como</p>
<blockquote>
<p>C:\&gt; MbrFix /drive 0 /fixmbr</p>
</blockquote>
<p>nos restaura el sector de arranque. Tiene opciones para restaurar el MBR en windows vista o windows 7, adem&aacute;s de m&aacute;s posibles utilidades, como obtener informaci&oacute;n de los discos, manejo de particiones, etc.</p>
<p>Una vez restaurado y comprobado que nuestro sistema ya arranca sin pasar por el gestor de arranque LILO o GRUB, ya podemos formatear nuestras particiones de linux.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2010/02/11/quitar-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
