<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Tus ceros y mis unos</title>
	<atom:link href="http://mikiorbe.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikiorbe.wordpress.com</link>
	<description>Blog de Miguel Orbegozo. Desarrollo entretenido</description>
	<lastBuildDate>Mon, 09 Jan 2012 16:47:33 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mikiorbe.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Tus ceros y mis unos</title>
		<link>http://mikiorbe.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mikiorbe.wordpress.com/osd.xml" title="Tus ceros y mis unos" />
	<atom:link rel='hub' href='http://mikiorbe.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Adiós 2011, ¡ya está aquí 2012!</title>
		<link>http://mikiorbe.wordpress.com/2012/01/02/adios-2011-ya-esta-aqui-2012/</link>
		<comments>http://mikiorbe.wordpress.com/2012/01/02/adios-2011-ya-esta-aqui-2012/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 08:46:53 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=693</guid>
		<description><![CDATA[Este podría ser el resumen del año 2011 en este blog: Espero este año 2012 poder actualizar algo más. No me pongo objeivos, pero peor que 2011 será difícil. Tagged: General<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=693&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este podría ser el resumen del año 2011 en este blog:</p>
<p><a href="http://mikiorbe.files.wordpress.com/2012/01/desierto.jpg"><img src="http://mikiorbe.files.wordpress.com/2012/01/desierto.jpg?w=455" alt="desierto" title="desierto"   class="aligncenter size-full wp-image-692" /></a></p>
<p>Espero este año 2012 poder actualizar algo más. No me pongo objeivos, pero peor que 2011 será difícil.</p>
<br /> Tagged: <a href='http://mikiorbe.wordpress.com/tag/general/'>General</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/693/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/693/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/693/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/693/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/693/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/693/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/693/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/693/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/693/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/693/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/693/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/693/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/693/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/693/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=693&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2012/01/02/adios-2011-ya-esta-aqui-2012/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2012/01/desierto.jpg" medium="image">
			<media:title type="html">desierto</media:title>
		</media:content>
	</item>
		<item>
		<title>Movimientos sociales en España</title>
		<link>http://mikiorbe.wordpress.com/2011/05/19/movimientos-sociales/</link>
		<comments>http://mikiorbe.wordpress.com/2011/05/19/movimientos-sociales/#comments</comments>
		<pubDate>Thu, 19 May 2011 06:52:39 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=686</guid>
		<description><![CDATA[Tengo cierto temor a que al final los movimientos que estamos viendo estos días en España sean tergiversados por unos o por otros. Por eso publico una imagen que circula por las redes sociales y que a mi modo de ver resumen muy bien el origen de los movimientos. Con el contenido de este manifiesto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=686&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tengo cierto temor a que al final los movimientos que estamos viendo estos días en España sean tergiversados por unos o por otros.</p>
<p>Por eso publico una imagen que circula por las redes sociales y que a mi modo de ver resumen muy bien el origen de los movimientos. Con el contenido de este manifiesto estoy completamente de acuerdo.</p>
<p><a href="http://mikiorbe.files.wordpress.com/2011/05/manifiesto-acampados.jpg"><img src="http://mikiorbe.files.wordpress.com/2011/05/manifiesto-acampados.jpg?w=455&#038;h=619" alt="" title="manifiesto acampados" width="455" height="619" class="aligncenter size-full wp-image-687" /></a></p>
<p>Prometo recuperar próximamente la temática del blog. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<br /> Tagged: <a href='http://mikiorbe.wordpress.com/tag/general/'>General</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/686/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/686/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/686/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=686&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2011/05/19/movimientos-sociales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2011/05/manifiesto-acampados.jpg" medium="image">
			<media:title type="html">manifiesto acampados</media:title>
		</media:content>
	</item>
		<item>
		<title>Segundo cumpleaños</title>
		<link>http://mikiorbe.wordpress.com/2010/05/26/segundo-cumpleanos/</link>
		<comments>http://mikiorbe.wordpress.com/2010/05/26/segundo-cumpleanos/#comments</comments>
		<pubDate>Wed, 26 May 2010 06:56:31 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=666</guid>
		<description><![CDATA[Hoy hace dos años desde que empecé con este blog y al igual que hice en el primer cumpleaños realizaré un resumen de la temporada. Si hace un año estaba bastante satisfecho de la marcha del blog, este segundo año no lo estoy tanto. Mi insatisfacción se refiere sobre todo a lo poco que he [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=666&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hoy hace dos años desde que empecé con este blog y al igual que hice en el <a title="Primer cumpleaños de TCYMU" href="http://mikiorbe.wordpress.com/2009/05/26/%c2%a1%c2%a1cumplimos-un-anito/">primer cumpleaños</a> realizaré un resumen de la temporada.</p>
<p><a href="http://www.flickr.com/photos/frozen-in-time/2263904827/"><img class="aligncenter size-medium wp-image-667" title="cumple" src="http://mikiorbe.files.wordpress.com/2010/05/cumple.jpg?w=300&#038;h=200" alt="" width="300" height="200" /></a></p>
<p>Si hace un año estaba bastante satisfecho de la marcha del blog, este segundo año no lo estoy tanto. Mi insatisfacción se refiere sobre todo a lo poco que he publicado este año. Cambios laborales y personales (mi segundo hijo) me hacen tener menos tiempo que dedicarle a esto. Sigo aprendiendo cosas pero no saco el tiempo para compartirlas con vosotros. Así que como propósito de enmienda o en grande en esa lista TODO tengo el conseguir ese tiempo para publicar al menos una vez al mes (lejos ya de la entrada o dos entradas semanales que me ponía como objetivo en un principio).</p>
<p>En cuanto a datos de acceso, sigo estando bastante contento. El promedio de visitas diarias ha subido y está en el entrono de las 80, con un record de 174 visitas en un día y 40.945 visitas totales. Para mí está bien.</p>
<p>En cuanto a temas, <a title="CakePHP en tus Ceros y Mis Unos" href="http://mikiorbe.wordpress.com/tag/cakephp/">CakePHP</a> sigue caliente (a ver si le dedico alguna entrada en un futuro próximo).</p>
<p>De nuevo daros las gracias a todos los que visitáis Tus Ceros y Mis Unos, ¡permaneced a la escucha!.</p>
<br /> Tagged: <a href='http://mikiorbe.wordpress.com/tag/general/'>General</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/666/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/666/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/666/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/666/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/666/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/666/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/666/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/666/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/666/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/666/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/666/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/666/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/666/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/666/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=666&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2010/05/26/segundo-cumpleanos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/cumple.jpg?w=300" medium="image">
			<media:title type="html">cumple</media:title>
		</media:content>
	</item>
		<item>
		<title>Análisis estático de código en Hudson para proyectos Ant</title>
		<link>http://mikiorbe.wordpress.com/2010/05/13/analisis-estatico-de-codigo-en-hudson-para-proyectos-ant/</link>
		<comments>http://mikiorbe.wordpress.com/2010/05/13/analisis-estatico-de-codigo-en-hudson-para-proyectos-ant/#comments</comments>
		<pubDate>Thu, 13 May 2010 10:25:00 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Entorno Desarrollo]]></category>
		<category><![CDATA[Ant]]></category>
		<category><![CDATA[Hudson]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=631</guid>
		<description><![CDATA[En esta entrada vamos a explicar cómo configurar algunas herramientas de análisis estático de código en Hudson para proyectos que utilicen Ant. Partimos de un servidor Hudson instalado (y con una JDK y Ant configurados) y un proyecto que utilice Ant para su construcción (tendremos su build.xml que compila las fuentes y crea un jar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=631&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En esta entrada vamos a explicar cómo configurar algunas herramientas de análisis estático de código en <a title="Hudson" href="http://hudson-ci.org/">Hudson</a> para proyectos que utilicen <a title="Ant" href="http://ant.apache.org/">Ant</a>.</p>
<p>Partimos de un <a title="Instalando Hudosn sobre Tomcat en Ubuntu" href="http://mikiorbe.wordpress.com/2008/11/10/instalando-hudson-sobre-tomcat-en-ubuntu-804/">servidor Hudson instalado</a> (y con una JDK y Ant configurados) y un proyecto que utilice Ant para su construcción (tendremos su <code>build.xml</code> que compila las fuentes y crea un jar por ejemplo).</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico0.png"><img class="aligncenter size-medium wp-image-646" title="hudsonEstatico0" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico0.png?w=300&#038;h=153" alt="" width="300" height="153" /></a></p>
<p>Por ahora vamos a integrar tres herramientas de análisis estático de código: <a title="PMD" href="http://pmd.sourceforge.net/">PMD</a>, CPD (integrado en PMD) y <a title="FindBugs" href="http://findbugs.sourceforge.net/">FindBugs</a>. Necesitaremos descargar y extraer en un directorio ambas herramientas.</p>
<p>Partimos de un script de Ant como el que sigue:</p>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot;?&gt;

&lt;project name=&quot;TCYMU&quot; default=&quot;compile&quot; basedir=&quot;.&quot;&gt;

	&lt;property name=&quot;src.dir&quot; value=&quot;${basedir}/src&quot;/&gt;
	&lt;property name=&quot;lib&quot;	value=&quot;${basedir}/lib&quot;/&gt;
	&lt;property name=&quot;classes&quot;	value=&quot;${basedir}/classes&quot;/&gt;

	&lt;target name=&quot;clean&quot; description=&quot;Limpia el proyecto&quot;&gt;
		&lt;delete dir=&quot;${classes}&quot;/&gt;
		&lt;delete dir=&quot;${dist}&quot;/&gt;
	&lt;/target&gt;	

	&lt;target name=&quot;init&quot; description=&quot;Crea el directorio de compilacion y destino&quot; depends=&quot;clean&quot;&gt;
		&lt;mkdir dir=&quot;${classes}&quot;/&gt;
		&lt;mkdir dir=&quot;${dist}&quot;/&gt;
		&lt;path id=&quot;compile.class.path&quot;&gt;
			&lt;pathelement path=&quot;${lib}/*.jar&quot;/&gt;
		&lt;/path&gt;
	&lt;/target&gt;	

	&lt;target name=&quot;compile&quot; description=&quot;Compilacion&quot; depends=&quot;init&quot;&gt;
		&lt;javac debug=&quot;on&quot; srcdir=&quot;${src.dir}&quot; destdir=&quot;${classes}&quot; classpathref=&quot;compile.class.path&quot;/&gt;
	&lt;/target&gt;

&lt;/project&gt;
</pre></p>
<p>Crearemos una nueva tarea en Hudson, introduciremos un nombre y seleccionaremos la opción de &#8220;Crear un proyecto de estilo libre&#8221;.</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico1.png"><img class="aligncenter size-medium wp-image-648" title="hudsonEstatico1" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico1.png?w=300&#038;h=88" alt="" width="300" height="88" /></a></p>
<p>Después seleccionaremos una JDK, configuraremos el control de versiones (en mi caso <a title="Subversion" href="http://subversion.tigris.org/">Subversion</a>) y en la sección de &#8220;Ejecutar&#8221; seleccionaremos &#8220;Ejecutar Ant&#8221; e introducimos el nombre de nuestra tarea de Ant para compilar. Con esto ya podríamos lanzar la primera ejecución en Hudson para comprobar que funciona.</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico2.png"><img class="aligncenter size-medium wp-image-649" title="hudsonEstatico2" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico2.png?w=300&#038;h=51" alt="" width="300" height="51" /></a></p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico4.png"><img class="aligncenter size-medium wp-image-650" title="hudsonEstatico4" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico4.png?w=300&#038;h=153" alt="" width="300" height="153" /></a></p>
<p>Para integrar los tres análisis voy a utilizar una misma estrategia basada en variables de entorno que nos permitirá que nuestra configuración Ant sea válida tanto en local como en el servidor Hudson. Para ello en la configuración de Hudson definiremos dos variables de entorno que apunten a los directorios de PMD y FindBugs.</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico3.png"><img class="aligncenter size-medium wp-image-651" title="hudsonEstatico3" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico3.png?w=300&#038;h=63" alt="" width="300" height="63" /></a></p>
<p>Hecho esto modificamos el <code>build.xml</code> para incluir las nuevas tareas:</p>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot;?&gt;

&lt;project name=&quot;TCYMU&quot; default=&quot;compile&quot; basedir=&quot;.&quot;&gt;

	&lt;property environment=&quot;env&quot;/&gt;
	&lt;property name=&quot;src.dir&quot; value=&quot;${basedir}/src&quot;/&gt;
	&lt;property name=&quot;lib&quot;	value=&quot;${basedir}/lib&quot;/&gt;
	&lt;property name=&quot;classes&quot;	value=&quot;${basedir}/classes&quot;/&gt;
	&lt;property name=&quot;reports&quot; value=&quot;${basedir}/reports&quot;/&gt;

	&lt;taskdef name=&quot;pmd&quot; classname=&quot;net.sourceforge.pmd.ant.PMDTask&quot;&gt;
		&lt;classpath&gt;
			&lt;pathelement location=&quot;${env.PMD_HOME}/lib/pmd-4.2.5.jar&quot;/&gt;
		&lt;/classpath&gt;
	&lt;/taskdef&gt;

	&lt;taskdef name=&quot;cpd&quot; classname=&quot;net.sourceforge.pmd.cpd.CPDTask&quot;&gt;
		&lt;classpath&gt;
			&lt;pathelement location=&quot;${env.PMD_HOME}/lib/pmd-4.2.5.jar&quot;/&gt;
		&lt;/classpath&gt;
	&lt;/taskdef&gt;

	&lt;taskdef name=&quot;findbugs&quot; classname=&quot;edu.umd.cs.findbugs.anttask.FindBugsTask&quot;&gt;
		&lt;classpath&gt;
			&lt;pathelement location=&quot;${env.FINDBUGS_HOME}/lib/findbugs-ant.jar&quot;/&gt;
		&lt;/classpath&gt;
	&lt;/taskdef&gt;

	&lt;target name=&quot;clean&quot; description=&quot;Limpia el proyecto&quot;&gt;
		&lt;delete dir=&quot;${classes}&quot;/&gt;
		&lt;delete dir=&quot;${dist}&quot;/&gt;
	&lt;/target&gt;

	&lt;target name=&quot;cleanReports&quot; description=&quot;Elimina el directorio de compilacion y destino&quot;&gt;
		&lt;delete dir=&quot;${reports}&quot;/&gt;
	&lt;/target&gt;

	&lt;target name=&quot;init&quot; description=&quot;Crea el directorio de compilacion y destino&quot; depends=&quot;clean&quot;&gt;
		&lt;mkdir dir=&quot;${classes}&quot;/&gt;
		&lt;mkdir dir=&quot;${dist}&quot;/&gt;
		&lt;path id=&quot;compile.class.path&quot;&gt;
			&lt;pathelement path=&quot;${lib}/*.jar&quot;/&gt;
		&lt;/path&gt;
	&lt;/target&gt;	

	&lt;target name=&quot;compile&quot; description=&quot;Compilacion&quot; depends=&quot;init&quot;&gt;
		&lt;javac debug=&quot;on&quot; srcdir=&quot;${src.dir}&quot; destdir=&quot;${classes}&quot; classpathref=&quot;compile.class.path&quot;/&gt;
	&lt;/target&gt;

	&lt;target name=&quot;pmd&quot;&gt;
		&lt;mkdir dir=&quot;${reports}&quot;/&gt;
		&lt;pmd rulesetfiles=&quot;ruleset.xml&quot;&gt;
			&lt;formatter type=&quot;xml&quot; toFile=&quot;${reports}/pmd.xml&quot;/&gt;
			&lt;fileset dir=&quot;${src.dir}&quot;&gt;
				&lt;include name=&quot;**/*.java&quot;/&gt;
			&lt;/fileset&gt;
		&lt;/pmd&gt;
	&lt;/target&gt;

	&lt;target name=&quot;cpd&quot;&gt;
		&lt;mkdir dir=&quot;${reports}&quot;/&gt;
		&lt;cpd minimumTokenCount=&quot;50&quot; format=&quot;xml&quot; outputFile=&quot;${reports}/cpd.xml&quot;&gt;
			&lt;fileset dir=&quot;${src.dir}&quot;&gt;
				&lt;include name=&quot;**/*.java&quot;/&gt;
			&lt;/fileset&gt;
		&lt;/cpd&gt;
	&lt;/target&gt;

	&lt;target name=&quot;findbugs&quot; depends=&quot;compile&quot;&gt;
		&lt;mkdir dir=&quot;${reports}&quot;/&gt;
		&lt;findbugs home=&quot;${env.FINDBUGS_HOME}&quot;
	              output=&quot;xml&quot;
	              outputFile=&quot;${reports}/findbugs.xml&quot;
	    	      jvmargs=&quot;-Xmx1024m&quot;&gt;
			&lt;sourcePath path=&quot;${src.dir}&quot; /&gt;
			&lt;class location=&quot;${classes}&quot; /&gt;
		&lt;/findbugs&gt;
	&lt;/target&gt;

&lt;/project&gt;
</pre></p>
<p>Las novedades que presenta son bastantes:</p>
<ul>
<li>Configuro la propiedad <code>environment</code> para tener acceso a las variables de entorno.</li>
<li>Configuramos un nuevo directorio que albergará el resultado de los distintos análisis. Es el directorio que he llamado <em>reports</em>.</li>
<li>Defino las tareas Ant que se incluyen con PMD y FindBugs mediante la etiqueta <code>taskdef</code>, y buscando los jars a través de las variables de entorno.</li>
<li>Defino la tarea <code>pmd</code> indicando xml como formato de salida, el directorio que contiene el código fuente y el archivo de salida. PMD puede realizar análisis en base a un buen número de <a title="Reglas PMD" href="http://pmd.sourceforge.net/rules/index.html">reglas</a>. Podemos configurar las reglas que utilizaremos bien mediante etiquetas anidadas en la tarea Ant o mediante un archivo separado de reglas (lo que se indica en la tarea Ant como <code>rulesetfiles</code>). En mi caso he utilizado para probar la configuración que aparece bajo &#8220;Add some rule references to it&#8221; en la sección de <a title="Crear un conjunto de reglas PMD" href="http://pmd.sourceforge.net/howtomakearuleset.html">crear un conjunto de reglas en la web de PMD</a>. En el siguiente enlace podemos encontrar más información sobre la <a title="Configuración Ant para PMD" href="http://pmd.sourceforge.net/ant-task.html">configuración de PMD</a>.</li>
<li>Defino la <code>cpd</code> de forma muy parecida a la de <code>pmd</code>. Se indica xml como formato de salida, el directorio que contiene el código fuente y el archivo de salida. Para CPD no hay archivo de reglas. En el siguiente enlace se puede encontrar más información sobre la <a title="Configuración Ant para CPD" href="http://pmd.sourceforge.net/cpd.html">configuración de CPD</a>.</li>
<li>Defino la tarea Ant para FindBugs. Además de directorio de fuentes y archivo y formato de salida, necesitamos indicarle el directorio de instalación de FindBugs y el directorio donde encontrar las clases compiladas ya que FindBugs las utiliza para su análisis. Por este último motivo declaramos la tarea de <code>findbugs</code> dependiente de la de compilación. Más información en el capítulo de <a title="Configuración Ant para FindBugs" href="http://findbugs.sourceforge.net/manual/anttask.html">tarea Ant de FindBugs</a>.</li>
</ul>
<p>Para la integración necesitaremos instalar algunos plugins para Hudson. Iremos al apartado de plugins dentro de la configuración de Hudson e instalaremos <a title="Static Analysis Utilities" href="http://wiki.hudson-ci.org/display/HUDSON/Static+Code+Analysis+Plug-ins">Static Analysis Utilities</a>, <a title="PMD Plug-in" href="http://wiki.hudson-ci.org/display/HUDSON/PMD+Plugin">PMD Plug-in</a>, <a title="Duplicate Code Scanner Plug-in" href="http://wiki.hudson-ci.org/display/HUDSON/DRY+Plugin">Duplicate Code Scanner Plug-in</a> y <a title="FindBugs Plug-in" href="http://wiki.hudson-ci.org/display/HUDSON/FindBugs+Plugin">FindBugs Plug-in</a>.</p>
<p>Por último modificaremos la configuración de nuestra tarea Hudson. En la sección de &#8220;Acciones para ejecutar después&#8221; activaremos el visualizador de PMD, CPD y FindBugs. En la configuración de ant lanzaremos las tareas <code>cleanReports</code>, <code>pmd</code>, <code>cpd</code> y <code>findbugs</code>.</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico5.png"><img class="aligncenter size-medium wp-image-653" title="hudsonEstatico5" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico5.png?w=300&#038;h=150" alt="" width="300" height="150" /></a></p>
<p>Tras mandar a Hudson que nos ejecute el proyecto obtendremos una salida similar a la siguiente:</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico6.png"><img class="aligncenter size-medium wp-image-654" title="hudsonEstatico6" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico6.png?w=300&#038;h=141" alt="" width="300" height="141" /></a></p>
<p>y podremos ver detalles de nuestro análisis siguiendo los enlaces:</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico7.png"><img class="aligncenter size-medium wp-image-655" title="hudsonEstatico7" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico7.png?w=300&#038;h=115" alt="" width="300" height="115" /></a></p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico8.png"><img class="aligncenter size-medium wp-image-656" title="hudsonEstatico8" src="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico8.png?w=300&#038;h=167" alt="" width="300" height="167" /></a></p>
<p>Hasta aquí esta entrada que seguro no será la última sobre Hudson, seguid atentos.</p>
<br /> Tagged: <a href='http://mikiorbe.wordpress.com/tag/ant/'>Ant</a>, <a href='http://mikiorbe.wordpress.com/tag/hudson/'>Hudson</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/631/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=631&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2010/05/13/analisis-estatico-de-codigo-en-hudson-para-proyectos-ant/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico0.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico0</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico1.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico1</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico2.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico2</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico4.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico4</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico3.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico3</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico5.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico5</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico6.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico6</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico7.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico7</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/05/hudsonestatico8.png?w=300" medium="image">
			<media:title type="html">hudsonEstatico8</media:title>
		</media:content>
	</item>
		<item>
		<title>Url de conexión JDBC a Oracle RAC</title>
		<link>http://mikiorbe.wordpress.com/2010/04/29/url-de-conexion-jdbc-a-oracle-rac/</link>
		<comments>http://mikiorbe.wordpress.com/2010/04/29/url-de-conexion-jdbc-a-oracle-rac/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 09:45:08 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=633</guid>
		<description><![CDATA[Recientemente uno de nuestros entornos ha migrado a Oracle RAC y hemos tenido el problemilla que os detallo a continuación. Parece ser que en Oracle RAC la URL de conexión a la BBDD mediante JDBC no permite una de sus versiones clásicas. Así por ejemplo una conexión del estilo: jdbc:oracle:thin:@&#60;HOST&#62;:1521:&#60;SID&#62; no funciona saltando la siguiente [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=633&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recientemente uno de nuestros entornos ha migrado a <a title="Oracle RAC en Wikipedia ES" href="http://es.wikipedia.org/wiki/Oracle_RAC">Oracle RAC</a> y hemos tenido el problemilla que os detallo a continuación.</p>
<p>Parece ser que en Oracle RAC la URL de conexión a la BBDD mediante JDBC no permite una de sus versiones clásicas. Así por ejemplo una conexión del estilo:</p>
<p><code>jdbc:oracle:thin:@&lt;HOST&gt;:1521:&lt;SID&gt;</code></p>
<p>no funciona saltando la siguiente excepción:</p>
<p><code>java.sql.SQLException: Listener refused the connection with the following error:<br />
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor<br />
The Connection descriptor used by the client was:<br />
...</code></p>
<p>Para solucionarlo podemos utilizar la otra forma corta de url que aparece por ejemplo en este <a title="Listado de formatos de conexión JDBC" href="http://www.herongyang.com/jdbc/Summary-Connection-URL.html">listado de formatos de conexión JDBC</a> (en inglés <img class="alignnone size-full wp-image-9" title="Inglés" src="http://mikiorbe.files.wordpress.com/2008/05/gb.gif?w=455" alt=""   />):</p>
<p><code>jdbc:oracle:thin:@//&lt;HOST&gt;:1521/&lt;SID&gt;</code></p>
<p>También podemos utilizar una URL en formato largo:</p>
<p><code>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=&lt;HOST&gt;(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=&lt;SID&gt;)))</code></p>
<p>Si tenemos varios servidores deberíamos poner una URL en el siguiente formato:</p>
<p><code>jdbc:oracle:thin:@&lt;HOST1&gt;^&lt;HOST2&gt;:1521:&lt;SID&gt;</code></p>
<p><code>jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)<br />
(ADDRESS=(PROTOCOL=TCP)(HOST=&lt;HOST1&gt;) (PORT=1521))<br />
(ADDRESS=(PROTOCOL=TCP)(HOST=&lt;HOST2&gt;) (PORT=1521))<br />
(CONNECT_DATA=(SERVICE_NAME=&lt;SID&gt;)))</code></p>
<p>aunque esto último no lo he podrido probar lo he visto en el <a title="JUG de Padova" href="http://www.jugpadova.it/articles/2007/04/11/jdbc-url-for-oracle-rac">JUG de Padova</a> (en inglés <img title="Inglés" src="http://mikiorbe.files.wordpress.com/2008/05/gb.gif?w=16&#038;h=11" alt="" width="16" height="11" />).</p>
<p>Espero que le pueda servir de ayuda a alguien.</p>
<br /> Tagged: <a href='http://mikiorbe.wordpress.com/tag/jdbc/'>JDBC</a>, <a href='http://mikiorbe.wordpress.com/tag/oracle/'>Oracle</a>, <a href='http://mikiorbe.wordpress.com/tag/trucos/'>Trucos</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/633/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/633/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/633/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/633/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/633/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/633/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/633/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/633/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/633/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/633/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/633/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/633/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/633/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/633/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=633&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2010/04/29/url-de-conexion-jdbc-a-oracle-rac/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2008/05/gb.gif" medium="image">
			<media:title type="html">Inglés</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2008/05/gb.gif" medium="image">
			<media:title type="html">Inglés</media:title>
		</media:content>
	</item>
		<item>
		<title>Redondeando en Java</title>
		<link>http://mikiorbe.wordpress.com/2010/02/27/redondeando-en-java/</link>
		<comments>http://mikiorbe.wordpress.com/2010/02/27/redondeando-en-java/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 22:54:07 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=625</guid>
		<description><![CDATA[Si os habéis encontrado alguna vez con la necesidad de redondear un número en Java, habréis visto que no existe un método directo para hacerlo A veces se hace multiplicando pasando a entero y dividiendo, pero no es una forma fiable. La forma de hacerlo sería mediante el método setScale de la clase java.math.BigDecimal: Tenemos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=625&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Si os habéis encontrado alguna vez con la necesidad de redondear un número en Java, habréis visto que no existe un método directo para hacerlo</p>
<p>A veces se hace multiplicando pasando a entero y dividiendo, pero no es una forma fiable.</p>
<p>La forma de hacerlo sería mediante el método <code>setScale</code> de la clase <code>java.math.BigDecimal</code>:</p>
<p><pre class="brush: java;">

public static double round(double value, int decimalDigits) {
	BigDecimal bd = new BigDecimal(value);
	bd = bd.setScale(decimalDigits, BigDecimal.ROUND_HALF_UP);
	return bd.doubleValue();
}

</pre></p>
<p>Tenemos varias opciones a la hora de redondear que podemos ver en la <a title="Javadoc de BigDecimal" href="http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html">documentación de BigDecimal</a>.</p>
<p>Espero que os ayude.</p>
<br /> Tagged: <a href='http://mikiorbe.wordpress.com/tag/java/'>Java</a>, <a href='http://mikiorbe.wordpress.com/tag/trucos/'>Trucos</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/625/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=625&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2010/02/27/redondeando-en-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>
	</item>
		<item>
		<title>Alerta de contenido no seguro en Internet Explorer</title>
		<link>http://mikiorbe.wordpress.com/2010/01/15/alerta-de-contenido-no-seguro-en-internet-explorer/</link>
		<comments>http://mikiorbe.wordpress.com/2010/01/15/alerta-de-contenido-no-seguro-en-internet-explorer/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 19:06:08 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=617</guid>
		<description><![CDATA[Estábamos desplegando una aplicación en un servidor seguro y al probar con Internet Explorer recibíamos en todas las páginas el siguiente mensaje. Este mensaje indica que en la respuesta a nuestra petición segura https se acceden algunas partes mediante el protocolo no seguro http. Esto es un riesgo de seguridad y por eso nos alerta. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=617&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estábamos desplegando una aplicación en un servidor seguro y al probar con Internet Explorer recibíamos en todas las páginas el siguiente mensaje.</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/01/contenidonoseguro1.png"><img class="aligncenter size-medium wp-image-619" title="contenidoNoSeguro1" src="http://mikiorbe.files.wordpress.com/2010/01/contenidonoseguro1.png?w=300&#038;h=141" alt="" width="300" height="141" /></a></p>
<p>Este mensaje indica que en la respuesta a nuestra petición segura <a title="HTTPS en Wikipedia ES" href="http://es.wikipedia.org/wiki/HTTPS">https</a> se acceden algunas partes mediante el protocolo no seguro http. Esto es un riesgo de seguridad y por eso nos alerta.</p>
<p>Tras varias pruebas intentando localizar el contenido no seguro di con una gran <a title="Handling Mixed (HTTPS/HTTPS) Content" href="http://blogs.msdn.com/ieinternals/archive/2009/06/22/HTTPS-Mixed-Content-in-IE8.aspx">entrada de Eric Lawrence sobre el tema del contenido no seguro</a> (<a href="http://mikiorbe.files.wordpress.com/2008/05/gb.gif"><img class="alignnone size-full wp-image-9" title="Inglés" src="http://mikiorbe.files.wordpress.com/2008/05/gb.gif?w=455" alt=""   /></a> en inglés) que me ayudó a solucionar el problema.</p>
<p>Por un lado desde el punto de vista del navegador podemos hacer que no nos aparezca la ventanita. Evidentemente no es la solución óptima el obligar a que el navegador no nos muestre un aviso de seguridad, pero para un aprieto (una demo por ejemplo) nos puede ayudar. Para ello abrimos las opciones del navegador (&#8220;Herramientas-&gt;Opciones de Internet&#8221;) y vamos a la pestaña de &#8220;Seguridad&#8221;. En la parte de &#8220;Internet&#8221; pulsamos &#8220;Nivel personalizado&#8230;&#8221; y buscamos la opción de &#8220;Mostrar contenido mixto&#8221;. Cambiamos de &#8220;Preguntar&#8221; a &#8220;Habilitar&#8221;.</p>
<p><a href="http://mikiorbe.files.wordpress.com/2010/01/contenidonoseguro2.png"><img class="aligncenter size-medium wp-image-620" title="contenidoNoSeguro2" src="http://mikiorbe.files.wordpress.com/2010/01/contenidonoseguro2.png?w=300&#038;h=58" alt="" width="300" height="58" /></a></p>
<p>Como desarrolladores debemos preocuparnos de que si nuestra aplicación va a ejecutarse bajo https nuestras páginas no llamen a contenido no cifrado. Para descubrir si hacemos peticiones http podemos utilizar el <a title="Web Developer para Firefox" href="https://addons.mozilla.org/es-ES/firefox/addon/60">Web Developer para Firefox</a> o una buena herramienta que también descubrí gracias al post mencionado anteriormente como es <a title="Fiddler" href="http://www.fiddler2.com/fiddler2/">Fiddler</a>.</p>
<p>En nuestro caso y tras ver que no hacíamos ninguna llamada http descubrimos que lo que ocurría es la posibilidad que señala Eric en su sitio. Parece ser que Internet Explorer marca como contenido no seguro una llamada a JavaScript del estilo:</p>
<p>&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; id=&amp;quot;contentloadtag&amp;quot; src=&amp;quot;javascript:void(0)&amp;quot; &amp;gt;&lt;br /&gt;
</p>
<p>Con eliminar el parámetro src se solucionará el problema. Una de las librerías JavaScript que utilizábamos tenía una llamada de ese tipo.</p>
<p>Espero que os sea útil.</p>
<br /> Tagged: ie, Trucos <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/617/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/617/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/617/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/617/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/617/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/617/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/617/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/617/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=617&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2010/01/15/alerta-de-contenido-no-seguro-en-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/01/contenidonoseguro1.png?w=300" medium="image">
			<media:title type="html">contenidoNoSeguro1</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2008/05/gb.gif" medium="image">
			<media:title type="html">Inglés</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2010/01/contenidonoseguro2.png?w=300" medium="image">
			<media:title type="html">contenidoNoSeguro2</media:title>
		</media:content>
	</item>
		<item>
		<title>Error en la comparación de String con la librería de tags de Struts2</title>
		<link>http://mikiorbe.wordpress.com/2009/12/17/error-en-la-comparacion-de-string-con-la-libreria-de-tags-de-struts2/</link>
		<comments>http://mikiorbe.wordpress.com/2009/12/17/error-en-la-comparacion-de-string-con-la-libreria-de-tags-de-struts2/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 09:12:37 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=610</guid>
		<description><![CDATA[Os voy a comentar un pequeño error que nos puede descolocar un poco cuando tratamos de comparar cadenas mediante la librería de etiquetas de Struts2 en nuestras páginas JSP. Si hacemos una comparación con Strings al estilo de: obtendremos el resultado esperado (mostrará el texto si nuestra propiedad vale &#8220;SI&#8221;), pero si la comparación es: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=610&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Os voy a comentar un pequeño error que nos puede descolocar un poco cuando tratamos de comparar cadenas mediante la librería de etiquetas de <a title="Struts2" href="http://struts.apache.org/2.x/">Struts2</a> en nuestras <a title="JSP en Wikipedia ES" href="http://es.wikipedia.org/wiki/JavaServer_Pages">páginas JSP</a>.</p>
<p>Si hacemos una comparación con Strings al estilo de:</p>
<p><pre class="brush: xml;">
&lt;s:if test=&quot;propiedad == 'SI'&quot;&gt;
  &lt;div&gt;Mostrar texto&lt;/div&gt;
&lt;/s:if&gt;
</pre></p>
<p>obtendremos el resultado esperado (mostrará el texto si nuestra propiedad vale &#8220;SI&#8221;), pero si la comparación es:</p>
<p><pre class="brush: xml;">
&lt;s:if test=&quot;propiedad == 'S'&quot;&gt;
 &lt;div&gt;Mostrar texto&lt;/div&gt;
&lt;/s:if&gt;
</pre></p>
<p>veremos que aunque nuestra propiedad valga &#8220;S&#8221; no aparece el texto. Es decir, que cuando hacemos comparaciones de Strings de un sólo carácter nos falla. La responsable es la librería <a title="OGNL en Wikipedia ES" href="http://es.wikipedia.org/wiki/OGNL">OGNL</a> que evalúa las expresiones ya que al encontrar se un sólo carácter lo toma como un tipo Char y no un String.</p>
<p>Para solucionarlo nos basta cambiar las comillas:</p>
<p><pre class="brush: xml;">
&lt;s:if test='propiedad == &quot;S&quot;'&gt;
  &lt;div&gt;Mostrar texto&lt;/div&gt;
&lt;/s:if&gt;
</pre></p>
<p>o bien escapar las comillas dobles:</p>
<p><pre class="brush: xml;">
&lt;s:if test=&quot;propiedad == \&quot;S\&quot;&quot;&gt;
  &lt;div&gt;Mostrar texto&lt;/div&gt;
&lt;/s:if&gt;
</pre></p>
<p>Espero que le pueda servir a alguien.</p>
<br /> Tagged: Java, Struts2, Trucos <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/610/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=610&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2009/12/17/error-en-la-comparacion-de-string-con-la-libreria-de-tags-de-struts2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>
	</item>
		<item>
		<title>Manifiesto &#8220;En defensa de los derechos fundamentales en Internet&#8221;</title>
		<link>http://mikiorbe.wordpress.com/2009/12/04/manifiesto-en-defensa-de-los-derechos-fundamentales-en-internet/</link>
		<comments>http://mikiorbe.wordpress.com/2009/12/04/manifiesto-en-defensa-de-los-derechos-fundamentales-en-internet/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 07:43:15 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=605</guid>
		<description><![CDATA[Lo primero disculparme a los lectores del blog por una entrada nada tecnológica. Y más si son de fuera de España. Aunque un poco tarde (¿todavía no lo ha leído todo el mundo?) yo también me quiero adherir al manifiesto que se ha creado en respuesta a la posible inclusión en la Ley de Economía [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=605&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Lo primero disculparme a los lectores del blog por una entrada nada tecnológica. Y más si son de fuera de España.</p>
<p>Aunque un poco tarde (¿todavía no lo ha leído todo el mundo?) yo también me quiero adherir al manifiesto que se ha creado en respuesta a la posible inclusión en la Ley de Economía Sostenible (parece que lo único importante son los nombres de las leyes, luego el contenido&#8230;) de la posibilidad de cerrar páginas web sin intervención del poder jurídico. Si ya en muchas ocasiones uno duda (¿sólo duda?) de la independencia del poder jurídico mal pinta la cosa si hasta se lo quieren saltar.</p>
<p>Por eso yo me adhiero al siguiente manifiesto:</p>
<div><strong>Manifiesto &#8216;En defensa de los derechos fundamentales en Internet&#8217;</strong></div>
<p>Ante la inclusión en el <a href="http://www.20minutos.es/noticia/579200/0/desconexion/internet/pirateria/" target="_blank">Anteproyecto de Ley de Economía sostenible </a>de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de Internet manifestamos nuestra firme oposición al proyecto, y declaramos que:</p>
<p><strong>1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos,</strong> como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.</p>
<p><strong>2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. </strong>Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.</p>
<p><strong>3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español,</strong> perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.</p>
<p><strong>4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural.</strong> Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.</p>
<p><strong>5.- Los autores,</strong> como todos los trabajadores, <strong>tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades </strong>asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.</p>
<p>6.- Consideramos que <strong>las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales</strong>, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.</p>
<p><strong>7.- Internet debe funcionar de forma libre y sin interferencias políticas</strong> auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.</p>
<p><strong>8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España,</strong> ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.</p>
<p><strong>9.- Proponemos una verdadera reforma del derecho de propiedad intelectual</strong> orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.</p>
<p><strong>10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público</strong> y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.</p>
<br /> Tagged: General <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/605/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=605&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2009/12/04/manifiesto-en-defensa-de-los-derechos-fundamentales-en-internet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>
	</item>
		<item>
		<title>JUnit: Herramienta indispensable para el desarrollo Java</title>
		<link>http://mikiorbe.wordpress.com/2009/10/23/junit-herramienta-indispensable-para-el-desarrollo-java/</link>
		<comments>http://mikiorbe.wordpress.com/2009/10/23/junit-herramienta-indispensable-para-el-desarrollo-java/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 06:51:41 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JUnit]]></category>

		<guid isPermaLink="false">http://mikiorbe.wordpress.com/?p=589</guid>
		<description><![CDATA[Hoy voy a hablar de una herramienta que debería ser de uso común para el desarrollo. Estoy hablando de JUnit, la librería de pruebas unitarias más utilizado en entornos Java. Las pruebas unitarias consisten en desarrollar código para probar una determinada funcionalidad de nuestra aplicación. Vamos a ver un pequeño ejemplo. Supongamos que estamos haciendo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=589&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hoy voy a hablar de una herramienta que debería ser de uso común para el desarrollo. Estoy hablando de <a title="JUnit" href="http://www.junit.org/">JUnit</a>, la librería de pruebas unitarias más utilizado en entornos Java.</p>
<p>Las <a title="Pruebas unitarias en Wikipedia ES" href="http://es.wikipedia.org/wiki/Prueba_unitaria">pruebas unitarias</a> consisten en desarrollar código para probar una determinada funcionalidad de nuestra aplicación.</p>
<p>Vamos a ver un pequeño ejemplo. Supongamos que estamos haciendo una librería matemática que incluye una funcion para calcular el <a title="Factorial en Wikipedia ES" href="http://es.wikipedia.org/wiki/Factorial">factorial</a> de un número. Podría ser una clase parecida a la siguiente:</p>
<p><pre class="brush: java;">
package org.tcymu.util;

public class MathLibrary {
	public static int factorial(int n) throws IllegalArgumentException {
		int response = 1;

		if (n &lt; 0) {
			throw new IllegalArgumentException();
		}

		if (n &gt; 0) {
			response = n * factorial(n - 1);
		}

		return response;
	}
}
</pre></p>
<p>En esta entrada voy a utilizar las facilidades que da <a title="Eclipse" href="http://www.eclipse.org/">Eclipse</a> gracias a su integración con JUnit. Para ello en la vista <em>package</em> sobre la clase que queremos probar hacemos botón dereco -&gt; &#8220;New&#8221; -&gt; &#8220;JUnit Test Case&#8221;.</p>
<p style="text-align:center;"><a href="http://mikiorbe.files.wordpress.com/2009/10/junit_1_320x220.png"><img class="size-full wp-image-592 aligncenter" title="junit_1_320x220" src="http://mikiorbe.files.wordpress.com/2009/10/junit_1_320x220.png?w=455" alt="Nuevo Test JUnit"   /></a></p>
<p>Nos aparece la siguiente ventana en la que seleccionamos &#8220;New JUnit 4 test&#8221; (tened en cuenta que JUnit 4 necesita Java 1.5 o superior).</p>
<p><a href="http://mikiorbe.files.wordpress.com/2009/10/junit_2_320x360.png"><img class="aligncenter size-full wp-image-595" title="junit_2_320x360" src="http://mikiorbe.files.wordpress.com/2009/10/junit_2_320x360.png?w=455" alt="junit_2_320x360"   /></a></p>
<p>Podemos ver que nos propone un nombre para la clase de pruebas, así como un paquete y una carpeta de fuentes (por defecto propone el mismo paquete que las fuentes, aunque podríamos elegir otro). También podemos seleccionar que nos cree los siguientes métodos de apoyo para preparar el entorno de los test o liberar recursos:</p>
<p>- Métodos <code>setUp</code> y <code>tearDown</code>. Los ejecuta antes de llamar a cada método de prueba en esa clase. La secuencia sería <code>setUp</code>, <code>metodo1Test</code>, <code>tearDown</code>, <code>setUp</code>, <code>metodo2Test</code>, <code>tearDown</code>.</p>
<p>- Métodos <code>setUpBeforeClass</code> y <code>tearDownAfterClass</code>. Estos métodos se ejecutan antes y después de todos los métodos de la clase. La secuencia sería <code>setUpBeforeClass</code>, <code>metodo1Test</code>, <code>metodo2Test</code>, <code>tearDownAfterClass</code>.</p>
<p>A continuación nos pide los métodos que queremos probar. En este ejemplo seleccionamos el método que queremos probar (<code>factorial</code>) y ninguno de los métodos de apoyo (en nuestro sencillo ejemplo no necesitamos crear ni liberar nada).</p>
<p><a href="http://mikiorbe.files.wordpress.com/2009/10/junit_3_320x360.png"><img class="aligncenter size-full wp-image-596" title="junit_3_320x360" src="http://mikiorbe.files.wordpress.com/2009/10/junit_3_320x360.png?w=455" alt="junit_3_320x360"   /></a></p>
<p>Tras finalizar y si no tenemos la librería JUnit 4 en el <em>Build Path</em> nos la añade. Y por último crea el esqueleto de la clase de prueba:</p>
<p><pre class="brush: java;">
package org.tcymu.util;

import static org.junit.Assert.*;

import org.junit.Test;

public class MathLibraryTest {

	@Test
	public void testFactorial() {
		fail(&quot;Not yet implemented&quot;);
	}

}
</pre></p>
<p>Hay que destacar que lo que realmente convierte al método en un test que ejecutará JUnit es la <a title="Anotaciones Java en Wikipedia ES" href="http://es.wikipedia.org/wiki/Anotaci%C3%B3n_Java">anotación Java</a> <code>@Test</code>, al igual que lo que marcaría a los métodos de apoyo serían anotaciones como <code>@BeforeClass</code>, <code>@AfterClass</code>, <code>@Before</code> y <code>@After</code>.</p>
<p>Podemos observar que el método <code>testFactorial</code> sólo contiene la línea <code>fail("Not yet implemented");</code> , por lo que si ejecutamos el test (mediante botón derecho sobre la clase de pruebas y &#8220;Run As&#8221; -&gt; &#8220;JUnit Test&#8221; se nos abre la vista de JUnit con el siguiente resultado:</p>
<p><a href="http://mikiorbe.files.wordpress.com/2009/10/junit_4.png"><img class="aligncenter size-full wp-image-597" title="junit_4" src="http://mikiorbe.files.wordpress.com/2009/10/junit_4.png?w=455" alt="junit_4"   /></a></p>
<p>Por tanto es hora de implementar nuestra prueba para pasar la barra al ansiado color verde. Básicamente se hacen comprobaciones de los resultados esperados frente a los recibidos mediante la clase <code>org.junit.Assert</code> (<a title="Documentación Javadoc de JUnit" href="http://junit.org/junit/javadoc/4.5/">documentación Javadoc de JUnit</a>).</p>
<p><pre class="brush: java;">
package org.tcymu.util;

import static org.junit.Assert.*;

import org.junit.Assert;
import org.junit.Test;

public class MathLibraryTest {

	@Test
	public void testFactorial() {
		Assert.assertEquals(1, MathLibrary.factorial(0));
		Assert.assertTrue(1 == MathLibrary.factorial(1));
		Assert.assertEquals(24, MathLibrary.factorial(4));
		Assert.assertEquals(720, MathLibrary.factorial(6));

		boolean excepcionLanzada = false;
		try {
			MathLibrary.factorial(-1);
		} catch (IllegalArgumentException e) {
			excepcionLanzada = true;
		}
		Assert.assertTrue(excepcionLanzada);
	}

}
</pre></p>
<p>Vemos que utilizamos varios métodos para comprobar que se obtiene el resultado esperado. También podemos ver cómo probamos que se lanza la excepción esperada cuando el argumento no es válido (creo haber leído en algún sitio que se iba a mejorar la prueba de excepciones en próximas versiones, pero no consigo localizar la noticia).</p>
<p>Una vez que se ejecutan la prueba con éxito (la barrita verde) sabemos que el método funciona como nosotros esperamos. Ahora tras cualquier cambio en el código volveríamos a ejecutar JUnit para comprobar que no hemos roto nada. Esto nos da una gran seguridad a la hora de meter mano o <a title="Refactorización en Wikipedia ES" href="http://es.wikipedia.org/wiki/Refactorizar">refactorizar</a> métodos complejos.</p>
<p>Por último no quisiera terminar la entrada sin nombrar un par de temas relacionados con las pruebas unitarias.</p>
<p>- Una buena prueba debe ser repetible (se debe de poder lanzar cuantas veces queramos sin afectar a nada). Por ello cada vez más se automatizan las pruebas en los procesos de integración continua de forma que antes de generarse una versión de una aplicación se corren todas las pruebas para dicha aplicación.</p>
<p>- Existe un modelo de desarrollo que promueve que primero se escriban las pruebas y después el código. Es el llamado <a title="Desarrollo guiado por pruebas en Wikipedia ES" href="http://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas">Desarrollo Guiado por Pruebas</a> o Test Driven Development (TDD).</p>
<p>Espero que os haya gustado esta pequeña introducción.</p>
<br /> Tagged: Java, JUnit <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikiorbe.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikiorbe.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikiorbe.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikiorbe.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikiorbe.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikiorbe.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikiorbe.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikiorbe.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikiorbe.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikiorbe.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikiorbe.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikiorbe.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikiorbe.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikiorbe.wordpress.com/589/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikiorbe.wordpress.com&amp;blog=3806599&amp;post=589&amp;subd=mikiorbe&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikiorbe.wordpress.com/2009/10/23/junit-herramienta-indispensable-para-el-desarrollo-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e0aa1c86de99e8f09a34f5849f358bcc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikiorbe</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2009/10/junit_1_320x220.png" medium="image">
			<media:title type="html">junit_1_320x220</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2009/10/junit_2_320x360.png" medium="image">
			<media:title type="html">junit_2_320x360</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2009/10/junit_3_320x360.png" medium="image">
			<media:title type="html">junit_3_320x360</media:title>
		</media:content>

		<media:content url="http://mikiorbe.files.wordpress.com/2009/10/junit_4.png" medium="image">
			<media:title type="html">junit_4</media:title>
		</media:content>
	</item>
	</channel>
</rss>
