<?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>Le Funes</title>
	<atom:link href="http://lefunes.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lefunes.wordpress.com</link>
	<description>Repositorio de Información</description>
	<lastBuildDate>Sun, 29 Jan 2012 14:17:39 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='lefunes.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/dddc9fda16f75ae86f7e9c3c87701e26?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Le Funes</title>
		<link>http://lefunes.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://lefunes.wordpress.com/osd.xml" title="Le Funes" />
	<atom:link rel='hub' href='http://lefunes.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader</title>
		<link>http://lefunes.wordpress.com/2010/04/17/cannot-find-daemon-loader-orgapachecommonsdaemonsupportdaemonloader/</link>
		<comments>http://lefunes.wordpress.com/2010/04/17/cannot-find-daemon-loader-orgapachecommonsdaemonsupportdaemonloader/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 14:38:07 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JSVC]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[commons]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=447</guid>
		<description><![CDATA[El problema se presenta cuando queremos iniciar una aplicación que utiliza Commons Daemon junto a JSVC (una solución bastante práctica para ejecutar aplicaciones desarrolladas en Java como servicios de Linux) Si intentamos iniciar el servicio sin éxito y revisando el log de errores encontramos el siguiente mensaje: Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader Service exit with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=447&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>El problema se presenta cuando queremos iniciar una aplicación que utiliza <a href="http://commons.apache.org/daemon/jsvc.html">Commons Daemon junto a JSVC</a> (una solución bastante práctica para ejecutar aplicaciones desarrolladas en Java como servicios de Linux) Si intentamos iniciar el servicio sin éxito y revisando el log de errores encontramos el siguiente mensaje:</p>
<blockquote><p><span style="color:#008000;"><strong>Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader<br />
Service exit with a return value of 1</strong></span></p></blockquote>
<p>El principal problema es que JSVC no puede &#8220;ver&#8221; el jar de Commons Daemon (por ejemplo commons-daemon.jar). El motivo de esto puede ser alguna de las siguientes:</p>
<ul>
<li>El usuario con el que estamos ejecutando el servicio no tiene permisos de lectura sobre la librería</li>
<li>El classpath enviado a JSVC es incorrecto</li>
</ul>
<p>Si el problema es de permisos con un simple <a href="http://es.wikipedia.org/wiki/Chmod">chmod</a> lo solucionaremos. Sino es este el caso hay que revisar el comando que se está ejecutando (prestar atención al parámetro <strong>cp</strong> pasado a jsvc). Por ejemplo:</p>
<blockquote><p><span style="color:#008000;">jsvc -home $JAVA_HOME -errfile $ARCH_ERROR -pidfile $ARCH_PID -procname $NOMBRE_SERVICIO </span><strong><span style="color:#008000;">-cp $CLASSPATH</span></strong><span style="color:#008000;"> $DAEMON_CLASS</span></p></blockquote>
<h3>Más Info</h3>
<ul>
<li><a href="http://commons.apache.org/daemon/jsvc.html">http://commons.apache.org/daemon/jsvc.html</a></li>
<li><a href="http://mail-archives.apache.org/mod_mbox//tomcat-users/200609.mbox/%3C20060923102535.20678.qmail@web52906.mail.yahoo.com%3E">http://mail-archives.apache.org/mod_mbox//tomcat-users/200609.mbox/&lt;20060923102535.20678.qmail@web52906.mail.yahoo.com&gt;</a></li>
<li><a href="http://mail-archives.apache.org/mod_mbox/commons-user/200612.mbox/%3C37185F81-4FF4-42B8-B80E-1DCD97792ADA@mac.com%3E">http://mail-archives.apache.org/mod_mbox/commons-user/200612.mbox/&lt;37185F81-4FF4-42B8-B80E-1DCD97792ADA@mac.com&gt;</a></li>
</ul>
<br />Filed under: <a href='http://lefunes.wordpress.com/category/java/'>Java</a>, <a href='http://lefunes.wordpress.com/category/java/jsvc/'>JSVC</a> Tagged: <a href='http://lefunes.wordpress.com/tag/apache/'>apache</a>, <a href='http://lefunes.wordpress.com/tag/commons/'>commons</a>, <a href='http://lefunes.wordpress.com/tag/daemon/'>daemon</a>, <a href='http://lefunes.wordpress.com/tag/java/'>Java</a>, <a href='http://lefunes.wordpress.com/tag/jsvc/'>JSVC</a>, <a href='http://lefunes.wordpress.com/tag/linux/'>linux</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/447/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/447/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/447/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/447/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/447/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/447/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/447/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/447/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=447&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2010/04/17/cannot-find-daemon-loader-orgapachecommonsdaemonsupportdaemonloader/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Llenar un array en javascript con los datos de un array en PHP</title>
		<link>http://lefunes.wordpress.com/2010/01/03/llenar-un-array-en-javascript-con-los-datos-de-un-array-en-php/</link>
		<comments>http://lefunes.wordpress.com/2010/01/03/llenar-un-array-en-javascript-con-los-datos-de-un-array-en-php/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 19:23:34 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[array]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=434</guid>
		<description><![CDATA[Se puede pasar los valores de un array obtenido mediante PHP (por ejemplo desde una base de datos) a un array en javascript de la siguiente manera: generando un código similar a este: Si nuestro array de PHP tiene una secuencia de indices diferente a la por defecto (de 0 a n-1) deberemos hacer algunas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=434&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Se puede pasar los valores de un array obtenido mediante PHP (por ejemplo desde una base de datos) a un array en javascript de la siguiente manera:</p>
<p><pre class="brush: php; highlight: [10]; html-script: true;">
&lt;?php
//...
       $array_php = array(23, 24, 33, 55, 77);
//...
?&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
       var array_js = new Array();
       &lt;?php
              for($i = 0; $i&lt;count($array_php); $i++){
                     echo 'array_js['. $i .'] = '. $array_php($i) .';\n';
              }
       ?&gt;
&lt;/script&gt;
</pre></p>
<p>generando un código similar a este:</p>
<p><pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot;&gt;
       var array_js = new Array();
       array_js[0] = 23;
       array_js[1] = 24;
       array_js[2] = 33;
       array_js[3] = 55;
       array_js[4] = 7;
&lt;/script&gt;
</pre></p>
<p>Si nuestro array de PHP tiene una secuencia de indices diferente a la por defecto (de 0 a n-1) deberemos hacer algunas modificaciones:</p>
<p><pre class="brush: php; highlight: [10]; html-script: true;">
&lt;?php
//...
       $array_php = array(5=&gt;23, 24, 13=&gt;33, 74=&gt;55, 77);
//...
?&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
       var array_js = new Array();
       &lt;?php
              foreach($array_php as $indice=&gt;$valor){
                     echo &quot;array_js[$indice] = $valor;\n&quot;;
              }
       ?&gt;
&lt;/script&gt;
</pre></p>
<p>resultando:</p>
<p><pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot;&gt;
       var array_js = new Array();
       array_js[5] = 23;
       array_js[6] = 24;
       array_js[13] = 33;
       array_js[74] = 55;
       array_js[75] = 7;
&lt;/script&gt;
</pre></p>
<p>Espero sirva.<br />
Saludos.</p>
<h3>Mas Info</h3>
<ul>
<li><a href="http://www.tutorialized.com/view/tutorial/Assign-PHP-Array-to-Javascript-Array/37830">Assign PHP Array to Javascript Array</a></li>
</ul>
<br />Posted in javascript, PHP, Web Dev Tagged: array, javascript, PHP <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/434/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=434&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2010/01/03/llenar-un-array-en-javascript-con-los-datos-de-un-array-en-php/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>The sfLoader::loadHelpers() method is deprecated. Please use the same method from sfApplicationConfiguration.</title>
		<link>http://lefunes.wordpress.com/2009/12/01/the-sfloaderloadhelpers-method-is-deprecated-please-use-the-same-method-from-sfapplicationconfiguration/</link>
		<comments>http://lefunes.wordpress.com/2009/12/01/the-sfloaderloadhelpers-method-is-deprecated-please-use-the-same-method-from-sfapplicationconfiguration/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 20:20:03 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=425</guid>
		<description><![CDATA[El método para cargar Helpers desde un Action sfLoader::loadHelpers() a sido deprecateado (existe esa palabra?). En reemplazo se debe utilizar el método loadHelpers de la clase sfApplicationConfiguration, como vimos en el anterior post. Para resolver el problema tenemos que cambiar las llamadas, por ejemplo si tenemos: a la siguiente forma: Espero les sirva. Saludos Posted [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=425&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>El método para cargar Helpers desde un Action <strong>sfLoader::loadHelpers()</strong> a sido deprecateado (existe esa palabra?).  En reemplazo se debe utilizar el método <strong>loadHelpers</strong> de la clase <strong>sfApplicationConfiguration</strong>, <a href="http://lefunes.wordpress.com/2009/12/01/cargando-un-helper-en-symfony-desde-el-action/">como vimos en el anterior post</a>.</p>
<div id="attachment_430" class="wp-caption aligncenter" style="width: 510px"><a href="http://lefunes.files.wordpress.com/2009/12/sfloader.png"><img src="http://lefunes.files.wordpress.com/2009/12/sfloader.png?w=500&#038;h=125" alt="" title="sfLoader" width="500" height="125" class="size-full wp-image-430" /></a><p class="wp-caption-text">Logs en la barra de depuración</p></div>
<p>Para resolver el problema tenemos que cambiar las llamadas, por ejemplo si tenemos:</p>
<p><pre class="brush: php;">
class detalleAction extends sfAction
{
	public function execute($request)
	{
		sfLoader::loadHelpers('NombreHelper');
		
		//...
	}
}
</pre></p>
<p>a la siguiente forma:</p>
<p><pre class="brush: php;">
class detalleAction extends sfAction
{
	public function execute($request)
	{
		sfContext::getInstance()-&gt;getConfiguration()
				-&gt;loadHelpers('NombreHelper');
		
		//...
	}
}
</pre></p>
<p>Espero les sirva.<br />
Saludos</p>
<br />Posted in PHP, Symfony, Web Dev Tagged: helper, PHP, symfony <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/425/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=425&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/12/01/the-sfloaderloadhelpers-method-is-deprecated-please-use-the-same-method-from-sfapplicationconfiguration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/12/sfloader.png" medium="image">
			<media:title type="html">sfLoader</media:title>
		</media:content>
	</item>
		<item>
		<title>Cargando un Helper en Symfony desde el Action</title>
		<link>http://lefunes.wordpress.com/2009/12/01/cargando-un-helper-en-symfony-desde-el-action/</link>
		<comments>http://lefunes.wordpress.com/2009/12/01/cargando-un-helper-en-symfony-desde-el-action/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 20:10:42 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=419</guid>
		<description><![CDATA[Para poder invocar métodos de un Helper desde el Action necesitamos en primera instancia cargarlo, lo cual podemos realizar utilizando el método loadHelpers de la clase sfApplicationConfiguration. Por ejemplo: Más Info sfApplicationConfiguration Class loadhelpers Method Posted in PHP, Symfony, Web Dev Tagged: helper, PHP, symfony<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=419&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para poder invocar métodos de un Helper desde el Action necesitamos en primera instancia cargarlo, lo cual podemos realizar utilizando el método <strong>loadHelpers</strong> de la clase <strong>sfApplicationConfiguration</strong>. Por ejemplo:</p>
<p><pre class="brush: php;">
class detalleAction extends sfAction
{
	public function execute($request)
	{
		sfContext::getInstance()-&gt;getConfiguration()
				-&gt;loadHelpers('NombreHelper');
		
		//...
	}
}
</pre></p>
<h3>Más Info</h3>
<ul>
<li><a href="http://www.symfony-project.org/api/1_2/sfApplicationConfiguration">sfApplicationConfiguration Class</a>
</li>
<li><a href="http://www.symfony-project.org/api/1_2/sfApplicationConfiguration#method_loadhelpers">loadhelpers Method</a>
</li>
</ul>
<br />Posted in PHP, Symfony, Web Dev Tagged: helper, PHP, symfony <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/419/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=419&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/12/01/cargando-un-helper-en-symfony-desde-el-action/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>ORA-12560: TNS:error del adaptador de protocolo</title>
		<link>http://lefunes.wordpress.com/2009/11/25/ora-12560-tnserror-del-adaptador-de-protocolo/</link>
		<comments>http://lefunes.wordpress.com/2009/11/25/ora-12560-tnserror-del-adaptador-de-protocolo/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 12:12:40 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[ORACLE]]></category>
		<category><![CDATA[xe]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=411</guid>
		<description><![CDATA[Intentamos conectarnos mediante SQL*Plus a una instancia local de Oracle y obtenemos el siguiente error al logearnos: ORA-12560: TNS:error del adaptador de protocolo o ORA-12560: TNS:protocol adapter error Generalmente esto ocurre cuando el cliente no sabe como se llama la instancia que corre en nuestro equipo. Para solucionar este problema tenemos que asignar a la [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=411&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Intentamos conectarnos mediante SQL*Plus a una instancia local de Oracle y obtenemos el siguiente error al logearnos:</p>
<blockquote><p>ORA-12560: TNS:error del adaptador de protocolo</p></blockquote>
<p>o</p>
<blockquote><p>ORA-12560: TNS:protocol adapter error</p></blockquote>
<p>Generalmente esto ocurre cuando el cliente no sabe como se llama la instancia que corre en nuestro equipo. Para solucionar este problema tenemos que asignar a la variable de entorno <strong>ORACLE_SID</strong> el nombre de nuestro servicio.<span id="more-411"></span></p>
<p>Por ejemplo en Windows abrimos el diálogo de las variables de entorno del sistema (click derecho en &#8220;Mi PC&#8221;, click en propiedades, pestaña &#8220;Opciones Avanzadas&#8221;, botón &#8220;Variables de Entorno&#8221;), hacemos click en el botón &#8220;Nueva&#8221; de las variables de entorno del usuario y colocamos en nombre &#8220;ORACLE_SID&#8221; y en valor el nombre de nuestra instancia (&#8220;XE&#8221; en mi caso), y finalmente &#8220;Aceptar&#8221;, &#8220;Aceptar&#8221;, &#8230;. Luego iniciamos nuevamente el cliente</p>
<p style="text-align:center;">
<div id="attachment_412" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-412" title="ora12560" src="http://lefunes.files.wordpress.com/2009/11/ora12560.png?w=300&#038;h=269" alt="" width="300" height="269" /><p class="wp-caption-text">Agregando la variable de entorno</p></div>
<p>&nbsp;</p>
<h4>Más info</h4>
<p><a title="http://www.cryer.co.uk/brian/oracle/ORA12560.htm" href="http://www.cryer.co.uk/brian/oracle/ORA12560.htm">http://www.cryer.co.uk/brian/oracle/ORA12560.htm</a></p>
<br />Posted in ORACLE Tagged: ORACLE, xe <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/411/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=411&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/11/25/ora-12560-tnserror-del-adaptador-de-protocolo/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/11/ora12560.png?w=300" medium="image">
			<media:title type="html">ora12560</media:title>
		</media:content>
	</item>
		<item>
		<title>Nuxeo Document Management: Cambiar puerto 8080</title>
		<link>http://lefunes.wordpress.com/2009/08/28/nuxeo-document-management-cambiar-puerto-8080-2/</link>
		<comments>http://lefunes.wordpress.com/2009/08/28/nuxeo-document-management-cambiar-puerto-8080-2/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 22:09:02 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[dm]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[nuxeo]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2009/08/28/nuxeo-document-management-cambiar-puerto-8080-2/</guid>
		<description><![CDATA[Si queremos cambiar el puerto por defecto donde se levanta Nuxeo, lo que hacemos es modificar la configuración de JBoss, en el archivo: NUXEO_PATH/server/default/deploy/jboss-web.deployer/server.xml La linea donde se define el conector al servicio (donde address=&#8221;${jboss.bind.address}&#8221;) modificamos el valor de port y reiniciamos el servicio. Mas Info: [JBoss 4] How to change port 8080 in JBoss? [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=406&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Si queremos cambiar el puerto por defecto donde se levanta <a href="http://www.nuxeo.org/xwiki/bin/view/Main/">Nuxeo</a>, lo que hacemos es modificar la configuración de JBoss, en el archivo:</p>
<blockquote><p>NUXEO_PATH/server/default/deploy/jboss-web.deployer/server.xml</p></blockquote>
<p>La linea donde se define el conector al servicio (donde address=&#8221;${jboss.bind.address}&#8221;) modificamos el valor de <strong>port</strong> y reiniciamos el servicio.</p>
<div id="attachment_404" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-404" title="puerto_jboss" src="http://lefunes.files.wordpress.com/2009/08/puerto_jboss.png?w=500&#038;h=164" alt="Lugar donde hay que indicar el puerto" width="500" height="164" /><p class="wp-caption-text">Lugar donde hay que indicar el puerto</p></div>
<p><strong>Mas Info:</strong> <a href="http://lkamal.blogspot.com/2006/09/jboss-4-how-to-change-port-8080-in.html">[JBoss 4] How to change port 8080 in JBoss?</a></p>
<p>Saludos</p>
<br />Posted in Java Tagged: dm, jboss, nuxeo <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/406/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=406&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/08/28/nuxeo-document-management-cambiar-puerto-8080-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/08/puerto_jboss.png" medium="image">
			<media:title type="html">puerto_jboss</media:title>
		</media:content>
	</item>
		<item>
		<title>Parámetros de BBox (Bounding boxes)</title>
		<link>http://lefunes.wordpress.com/2009/06/05/parametros-de-bbox-bounding-boxes/</link>
		<comments>http://lefunes.wordpress.com/2009/06/05/parametros-de-bbox-bounding-boxes/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 16:52:13 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[GIS]]></category>
		<category><![CDATA[bbox]]></category>
		<category><![CDATA[wms]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=395</guid>
		<description><![CDATA[Dentro de una consulta WMS tenemos el BBox que es una lista de cuatro números que indican la porción de mapa a la cual estamos nos estamos refiriendo con la consulta. El orden en que los parámetros son pasados al servidor WMS dependen del CRS que se este utilizando, siendo los más comunes: CRS:84 El [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=395&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dentro de una consulta <a href="http://es.wikipedia.org/wiki/Web_Map_Service">WMS</a> tenemos el <strong>BBox </strong>que es una lista de cuatro números que indican la porción de mapa a la cual estamos nos estamos refiriendo con la consulta.</p>
<p><img class="aligncenter size-full wp-image-396" title="BBOX" src="http://lefunes.files.wordpress.com/2009/06/bbox.png?w=500" alt="BBOX"   /></p>
<p>El orden en que los parámetros son pasados al servidor <strong>WMS </strong>dependen del <strong>CRS </strong>que se este utilizando, siendo los más comunes:</p>
<p><strong>CRS:84</strong></p>
<p style="text-align:left;">El BBOX se organiza de la siguiente forma  <strong>Xmin , Ymin , Xmax , Ymax</strong></p>
<p style="text-align:left;">Por lo que si queremos referirnos a toda la Tierra tenemos que pedir:</p>
<p style="text-align:center;"><em> BBOX=-180,-90,180,90</em></p>
<p><strong>EPSG:4326</strong></p>
<p style="text-align:left;">El BBOX se organiza de la siguiente forma  <strong>Ymin , Xmin , Ymax , Xmax</strong></p>
<p style="text-align:left;">Por lo que si queremos referirnos a toda la Tierra tenemos que pedir:</p>
<p style="text-align:center;"><em> BBOX=-90,-180,90,180</em></p>
<p>Saludos</p>
<br />Posted in GIS Tagged: bbox, GIS, wms <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/395/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/395/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/395/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=395&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/06/05/parametros-de-bbox-bounding-boxes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/06/bbox.png" medium="image">
			<media:title type="html">BBOX</media:title>
		</media:content>
	</item>
		<item>
		<title>Agregando en NetBeans la Javadoc de librerias opcionales del JDK</title>
		<link>http://lefunes.wordpress.com/2009/05/27/agregando-en-netbeans-la-javadoc-de-librerias-opcionales-del-jdk/</link>
		<comments>http://lefunes.wordpress.com/2009/05/27/agregando-en-netbeans-la-javadoc-de-librerias-opcionales-del-jdk/#comments</comments>
		<pubDate>Wed, 27 May 2009 10:35:15 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[comm api]]></category>
		<category><![CDATA[commapi]]></category>
		<category><![CDATA[jai]]></category>
		<category><![CDATA[javadoc]]></category>
		<category><![CDATA[jdk]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=389</guid>
		<description><![CDATA[Cuando agregamos librerías opcionales del JDK al mismo, por ejemplo Comm API o JAI, notaremos que sus clases se encontrarán disponibles automáticamente para utilizar dentro del IDE, pero no conseguiremos poder ver su Javadoc. Para poder indicarle a NB donde se encuentra la Javadoc a cargar tenemos que ir al menú Tools-&#62;Java Platforms: Luego, dentro [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=389&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cuando agregamos librerías opcionales del JDK al mismo, por ejemplo Comm API o JAI, notaremos que sus clases se encontrarán disponibles automáticamente para utilizar dentro del IDE, pero no conseguiremos poder ver su Javadoc.<br />
<span id="more-389"></span></p>
<p>Para poder indicarle a NB donde se encuentra la Javadoc a cargar tenemos que ir al menú <strong>Tools-&gt;Java Platforms</strong>:</p>
<div id="attachment_390" class="wp-caption aligncenter" style="width: 316px"><img src="http://lefunes.files.wordpress.com/2009/05/jdnb_01.png?w=500" alt="Tools-&gt;Java Platforms" title="Tools-&gt;Java Platforms"   class="size-full wp-image-390" /><p class="wp-caption-text">Tools-&gt;Java Platforms</p></div>
<p>Luego, dentro del diálogo &#8220;Java Platform Manager&#8221; elegimos la versión de JDK que utilizamos (si tubieramos varios configurados), vamos a la pestaña &#8220;Javadoc&#8221; y agregamos la ruta al archivo por medio del selector de archivos que aparece al hacer click en &#8220;Add ZIP/Folder&#8230;&#8221;</p>
<div id="attachment_391" class="wp-caption aligncenter" style="width: 510px"><img src="http://lefunes.files.wordpress.com/2009/05/jdnb_02.png?w=500&#038;h=396" alt="Diálogo Java Platform Manager" title="Diálogo Java Platform Manager" width="500" height="396" class="size-full wp-image-391" /><p class="wp-caption-text">Diálogo Java Platform Manager</p></div>
<p>Cerramos el dialogo haciendo click en &#8220;Close&#8221;</p>
<p>Finalmente probamos que se puede visualizar la Javadoc correctamente</p>
<div id="attachment_392" class="wp-caption aligncenter" style="width: 510px"><img src="http://lefunes.files.wordpress.com/2009/05/jdnb_03.png?w=500&#038;h=182" alt="Comprobando Javadoc" title="Comprobando Javadoc" width="500" height="182" class="size-full wp-image-392" /><p class="wp-caption-text">Comprobando Javadoc</p></div>
<p>Saludos</p>
<br />Posted in Java, NetBeans Tagged: comm api, commapi, jai, Java, javadoc, jdk, NetBeans <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/389/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=389&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/05/27/agregando-en-netbeans-la-javadoc-de-librerias-opcionales-del-jdk/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/05/jdnb_01.png" medium="image">
			<media:title type="html">Tools-&#62;Java Platforms</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/05/jdnb_02.png" medium="image">
			<media:title type="html">Diálogo Java Platform Manager</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/05/jdnb_03.png" medium="image">
			<media:title type="html">Comprobando Javadoc</media:title>
		</media:content>
	</item>
		<item>
		<title>La clase java.lang.Math (I)</title>
		<link>http://lefunes.wordpress.com/2009/03/14/la-clase-javalangmath-i/</link>
		<comments>http://lefunes.wordpress.com/2009/03/14/la-clase-javalangmath-i/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 12:09:45 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[lang]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=375</guid>
		<description><![CDATA[La clase java.lang.Math es una clase utilitaria cuyos métodos (todos estáticos) nos permiten realizar algunos cálculos matemáticos comunes. Antiguamente Math implementaba cada uno de sus métodos, pero hoy en día hace uso de la clase java.lang.StrictMath para llevar adelante sus tareas, llegando al punto que prácticamente es lo mismo llamar a un método de Math [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=375&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La clase <strong>java.lang.Math</strong> es una clase utilitaria cuyos métodos (todos estáticos) nos permiten realizar algunos cálculos matemáticos comunes.<br />
<span id="more-375"></span><br />
Antiguamente Math implementaba cada uno de sus métodos, pero hoy en día hace uso de la clase <strong>java.lang.StrictMath</strong> para llevar adelante sus tareas, llegando al punto que prácticamente es lo mismo llamar a un método de Math como uno de StrictMath.</p>
<p>StrictMath utiliza librerías nativas (escritas en C) para realizar sus cálculos, asegurando entre otras cosas una mejor performance con números flotantes y repetibilidad de los resultados (si se llama un método con los mismos parámetros obtenemos exactamente el mismo resultado,  bit a bit). Concretamente hace uso de <a href="ftp://ftp.netlib.org/fdlibm.tar">la librería fdlibm (Freely Distributable Math Library) version 5.3</a> que es parte del proyecto netlib.</p>
<p><img src="http://lefunes.files.wordpress.com/2009/03/math.png?w=500&#038;h=60" alt="math" title="math" width="500" height="60" class="aligncenter size-full wp-image-376" /></p>
<h3>Constantes Matemáticas</h3>
<p>Math tiene una referencia a las dos constantes más utilizadas en matemática con una precisión de 15 decimales (suficiente para la mayoría de los mortales). Si ejecutamos:</p>
<p><pre class="brush: java;">
System.out.println(&quot;e = &quot; + Math.E);
System.out.println(&quot;pi = &quot; + Math.PI);
</pre></p>
<p>veremos:</p>
<blockquote><p><span style="color:#999999;">e = 2.718281828459045<br />
pi = 3.141592653589793</span></p></blockquote>
<h3>Conversiones Grados a Radianes, y viseversa</h3>
<p>Tenemos dos métodos que realizan la tarea por nosotros:</p>
<p><pre class="brush: java;">
double angGrados = 45; //grados

double angRadianes = Math.toRadians(angGrados);
System.out.println(&quot;Deg a Rad: &quot; + angGrados + &quot;º = &quot; + angRadianes + &quot; rad&quot;);

angGrados = Math.toDegrees(angRadianes);
System.out.println(&quot;Rad a Deg: &quot; + angRadianes + &quot; rad = &quot; + angGrados + &quot;º&quot;);
</pre></p>
<p>obteniendo al ejecutar:</p>
<blockquote><p><span style="color:#999999;">Deg a Rad: 45.0º = 0.7853981633974483 rad<br />
Rad a Deg: 0.7853981633974483 rad = 45.0º</span></p></blockquote>
<h3> Funciones Trigonométricas</h3>
<p>Las funciones trigonométricas aceptan y devuelven los ángulos en radianes por lo que siempre hay que convertir desde/hacia grados. </p>
<p>Por ejemplo si ejecutamos:</p>
<p><pre class="brush: java;">
double valor = 0;

double angulo = 45; //grados
double anguloRadianes = Math.toRadians(angulo);

valor = Math.cos(anguloRadianes);
System.out.println(&quot;Coseno de &quot; + angulo + &quot;º = &quot; + valor);

valor = Math.sin(anguloRadianes);
System.out.println(&quot;Seno de &quot; + angulo + &quot;º = &quot; + valor);

valor = Math.tan(anguloRadianes);
System.out.println(&quot;Tangente de &quot; + angulo + &quot;º = &quot; + valor);

valor = 0.707;

anguloRadianes = Math.acos(valor);
angulo = Math.toDegrees(anguloRadianes);
System.out.println(&quot;Arco Coseno de &quot; + valor + &quot; = &quot; + angulo + &quot;º&quot;);

anguloRadianes = Math.asin(valor);
angulo = Math.toDegrees(anguloRadianes);
System.out.println(&quot;Arco Seno de &quot; + valor + &quot; = &quot; + angulo + &quot;º&quot;);

anguloRadianes = Math.atan(valor);
angulo = Math.toDegrees(anguloRadianes);
System.out.println(&quot;Arco Tangente de &quot; + valor + &quot; = &quot; + angulo + &quot;º&quot;);
</pre></p>
<p>tendremos un resultado similar al siguiente:</p>
<blockquote><p><span style="color:#999999;">Coseno de 45.0º = 0.7071067811865476<br />
Seno de 45.0º = 0.7071067811865475<br />
Tangente de 45.0º = 0.9999999999999999<br />
Arco Coseno de 0.707 = 45.008651662838º<br />
Arco Seno de 0.707 = 44.991348337162016º<br />
Arco Tangente de 0.707 = 35.2603107365587º</span></p></blockquote>
<h3>Funciones Hiperbólicas</h3>
<p>Las funciones hiperbólicas están disponibles a partir de la versión 1.5 Aún no existe implementaciones para las funciones inversas (acosh, asinh y atanh)</p>
<p>Del siguiente ejemplo:</p>
<p><pre class="brush: java;">
double valor = 0;
double x = 1.0;

valor = Math.cosh(x);
System.out.println(&quot;Coseno Hiperbolico de &quot; + x + &quot; = &quot; + valor);

valor = Math.sinh(x);
System.out.println(&quot;Seno Hiperbolico de &quot; + x + &quot; = &quot; + valor);

valor = Math.tanh(x);
System.out.println(&quot;Tangente Hiperbolica de &quot; + x + &quot; = &quot; + valor);
</pre></p>
<p>obtenemos:</p>
<blockquote><p><span style="color:#999999;">Coseno Hiperbolico de 1.0 = 1.543080634815244<br />
Seno Hiperbolico de 1.0 = 1.1752011936438014<br />
Tangente Hiperbolica de 1.0 = 0.7615941559557649</span></p></blockquote>
<h3>Paso de coordenadas rectangulares a polares</h3>
<p>Para resolver la conversión de un sistema a otro, se pueden utilizar las formulas:</p>
<p><img src="http://lefunes.files.wordpress.com/2009/03/polares.png?w=500" alt="polares" title="polares"   class="aligncenter size-full wp-image-377" /></p>
<p>pero hay que hacer varios cálculos intermedios, por lo que la función atan2 y hypot (disponible desde la versión 1.5) realizan el mismo proceso pero de una forma más óptima:</p>
<p><pre class="brush: java;">
double x = 4.0;
double y = 3.0;

double r = Math.hypot(x, y);
double aRad = Math.atan2(y, x);
double a = Math.toDegrees(aRad);

System.out.println(&quot;Para x = &quot; + x + &quot;   y = &quot; + y);
System.out.println(&quot;r = &quot; + r);
System.out.println(&quot;a = &quot; + a + &quot;º&quot;);
</pre></p>
<p>obteniendo:</p>
<blockquote><p><span style="color:#999999;">Para x = 4.0   y = 3.0<br />
r = 5.0<br />
a = 36.86989764584402º</span></p></blockquote>
<h3>Más Info</h3>
<ul>
<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Math.html">java.lang.Math</a></li>
<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/StrictMath.html">java.lang.StrictMath</a></li>
</ul>
<p>En el siguiente post veremos el resto de las funciones que la clase Math nos brinda.</p>
<p>Hasta entonces</p>
<br />Posted in Java Tagged: Java, lang, math <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/375/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=375&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/03/14/la-clase-javalangmath-i/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/03/math.png" medium="image">
			<media:title type="html">math</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/03/polares.png" medium="image">
			<media:title type="html">polares</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalación del Java Comm API en Windows</title>
		<link>http://lefunes.wordpress.com/2009/02/27/instalacion-del-java-comm-api-en-windows/</link>
		<comments>http://lefunes.wordpress.com/2009/02/27/instalacion-del-java-comm-api-en-windows/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 09:27:43 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[comm api]]></category>
		<category><![CDATA[commapi]]></category>
		<category><![CDATA[paralelo]]></category>
		<category><![CDATA[puerto]]></category>
		<category><![CDATA[serie]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=365</guid>
		<description><![CDATA[La versión del Comm API (Java(tm) Communications API) para Windows está formada por tres archivos: win32com.dll comm.jar javax.comm.properties   Si queremos ejecutar alguna aplicación que haga uso del puerto serie o el paralelo debemos realizar la instalación en el JRE (cuyo path es parecido a &#8220;C:\Archivos de programa\Java\jre6\&#8221; o &#8220;C:\Archivos de programa\Java\jre1.6.0_03&#8243;), para ello tenemos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=365&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La versión del Comm API (<em><a href="http://java.sun.com/products/javacomm/index.jsp">Java(tm) Communications API</a></em>) para Windows está formada por tres archivos:</p>
<ul>
<li>win32com.dll</li>
<li>comm.jar</li>
<li>javax.comm.properties</li>
</ul>
<p> <span id="more-365"></span><br />
Si queremos ejecutar alguna aplicación que haga uso del puerto serie o el paralelo debemos realizar la instalación en el <strong>JRE</strong> (cuyo path es parecido a &#8220;C:\Archivos de programa\Java\jre6\&#8221; o &#8220;C:\Archivos de programa\Java\jre1.6.0_03&#8243;), para ello tenemos que colocar los archivos en:</p>
<ul>
<li>win32com.dll
<ul>
<li>PATH_JRE<strong>\bin\</strong></li>
</ul>
</li>
<li>comm.jar
<ul>
<li>PATH_JRE<strong>\lib\ext\</strong></li>
</ul>
</li>
<li>javax.comm.properties
<ul>
<li>PATH_JRE<strong>\lib\</strong></li>
</ul>
</li>
</ul>
<p>Si queremos desarrollar alguna aplicación que haga uso del puerto serie o el paralelo debemos realizar la instalación en el <strong>JDK</strong> (cuyo path  parecido a &#8220;C:\Archivos de programa\Java\jdk1.6.0_12&#8243;), para ello tenemos que colocar los archivos en:</p>
<ul>
<li>win32com.dll
<ul>
<li>PATH_JDK<strong>\bin\</strong></li>
<li>PATH_JDK<strong>\jre\bin\</strong></li>
<li><strong>C:\WINDOWS\system32\</strong></li>
</ul>
</li>
<li>comm.jar
<ul>
<li>PATH_JDK<strong>\lib\</strong></li>
<li>PATH_JDK<strong>\jre\lib\ext\</strong></li>
</ul>
</li>
<li>javax.comm.properties
<ul>
<li>PATH_JDK<strong>\lib\</strong></li>
<li>PATH_JDK<strong>\jre\lib\</strong></li>
</ul>
</li>
</ul>
<br />Posted in Java Tagged: comm api, commapi, Java, paralelo, puerto, serie <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/365/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=365&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/02/27/instalacion-del-java-comm-api-en-windows/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Cargando imágenes desde Java</title>
		<link>http://lefunes.wordpress.com/2009/01/29/cargando-imagenes-desde-java/</link>
		<comments>http://lefunes.wordpress.com/2009/01/29/cargando-imagenes-desde-java/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 17:20:29 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[ImageIcon]]></category>
		<category><![CDATA[imagen]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=343</guid>
		<description><![CDATA[En este pequeño post veremos como cargar imagenes en Java, tanto si se encuentran dentro del mismo Jar de la aplicación, como si la imagen se encuentra fuera del misma. En ambos casos vamos a utilizar la clase ImageIcon para recuperar la imagen. Luego de obtener la imagen, esta clase nos permitirá utilizarla tanto para [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=343&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En este pequeño post veremos como cargar imagenes en Java, tanto si se encuentran dentro del mismo Jar de la aplicación, como si la imagen se encuentra fuera del misma.</p>
<p><span id="more-343"></span><br />
En ambos casos vamos a utilizar la clase <a href="http://java.sun.com/javase/6/docs/api/javax/swing/ImageIcon.html">ImageIcon</a> para recuperar la imagen. Luego de obtener la imagen, esta clase nos permitirá utilizarla tanto para íconos, fondo de contenedores, etc.</p>
<h3>Imágen externa al Jar</h3>
<p>Este es el caso que se produce cuando la imagen se encuentra en alguna carpeta del sistema operativo:</p>
<p><img src="http://lefunes.files.wordpress.com/2009/01/cargar_img_01.png?w=500" alt="cargar_img_01" title="cargar_img_01"   class="aligncenter size-full wp-image-351" /></p>
<p>Para cargarla podemos indicarle a ImageIcon tanto el path relativo (desde donde se ejecuta el Jar) como el path absoluto de la imagen.</p>
<p>Se realiza de la siguiente forma (ver que se utiliza <b>getImage()</b>):<br />
<pre class="brush: java;">
Image imagenExterna = new ImageIcon(&quot;tierra.jpg&quot;).getImage();
</pre></p>
<h3>Imágen interna al Jar</h3>
<p>Este caso ocurre cuando la imagen se encuentra dentro del Jar de la aplicación:</p>
<p><img src="http://lefunes.files.wordpress.com/2009/01/cargar_img_02.png?w=500" alt="cargar_img_02" title="cargar_img_02"   class="aligncenter size-full wp-image-353" /></p>
<p>Para cargarla podemos indicarle a ImageIcon el recurso que se quiere utilizar. Para instanciar el recurso debemos indicar el path relativo (desde la clase que quiere cargar la imagen) como el path absoluto de la imagen dentro del Jar (un path absoluto en el jar comienza con /, como por ejemplo &#8220;/ar/lefunes/recurso/imagen.png&#8221;).</p>
<p>Se realiza de la siguiente forma:<br />
<pre class="brush: java;">
Image imagenInterna = new ImageIcon(
   getClass().getResource(&quot;satelite.jpg&quot;)
).getImage();
</pre></p>
<h3>Ejemplo</h3>
<p>Un ejemplo de como se pueden utilizar estos conceptos junto con <a href="http://lefunes.wordpress.com/2008/11/22/incluyendo-una-imagen-de-fondo-en-un-jpanel/">la clase JPanelConFondo que vimos en un post anterior</a>.</p>
<p>Código:<br />
<pre class="brush: java;">
package ar.lefunes.cargarimagenes;

import java.awt.Image;
import javax.swing.ImageIcon;

public class CargaImagenes extends javax.swing.JFrame {
    private JPanelConFondo jPanelConFondo1 = new JPanelConFondo();
    private JPanelConFondo jPanelConFondo2 = new JPanelConFondo();   

    public CargaImagenes() {
        //...
        cargarImagenes();
    }

    private void cargarImagenes() {
        Image imagenInterna = new ImageIcon(
           getClass().getResource(&quot;satelite.jpg&quot;)).getImage();
        jPanelConFondo1.setImagen(imagenInterna);

        Image imagenExterna = 
            new ImageIcon(&quot;tierra.jpg&quot;).getImage();
        jPanelConFondo2.setImagen(imagenExterna);
    }

    //...             
}
</pre></p>
<p>Al ejecutar el código obtendremos la siguiente pantalla:</p>
<p><img src="http://lefunes.files.wordpress.com/2009/01/cargar_img_03.png?w=500" alt="cargar_img_03" title="cargar_img_03"   class="aligncenter size-full wp-image-352" /></p>
<p>tener en cunta que la imagen externa (&#8220;tierra.jpg&#8221; en este ejemplo) tienen que estar en la misma carpeta del jar, ó en la carpeta raiz del proyecto cuando ejecutamos el proyecto desde NetBeans.</p>
<h3>Ejemplo Descargable</h3>
<p>Puedes descargar el ejemplo completo desde <a href="http://lefunes.googlecode.com/files/CargarImagenes.zip">http://lefunes.googlecode.com/files/CargarImagenes.zip</a> (aprox. 54 KB)</p>
<p>Espero les sirva<br />
Saludos</p>
<br />Posted in Java, Swing Tagged: image, ImageIcon, imagen, Java, Swing <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/343/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=343&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/01/29/cargando-imagenes-desde-java/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/cargar_img_01.png" medium="image">
			<media:title type="html">cargar_img_01</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/cargar_img_02.png" medium="image">
			<media:title type="html">cargar_img_02</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/cargar_img_03.png" medium="image">
			<media:title type="html">cargar_img_03</media:title>
		</media:content>
	</item>
		<item>
		<title>Convirtiendo enteros a cadenas (y visceversa) en Java</title>
		<link>http://lefunes.wordpress.com/2009/01/27/convirtiendo-enteros-a-cadenas-y-visceversa-en-java/</link>
		<comments>http://lefunes.wordpress.com/2009/01/27/convirtiendo-enteros-a-cadenas-y-visceversa-en-java/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 09:19:01 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cadena]]></category>
		<category><![CDATA[int]]></category>
		<category><![CDATA[Integer]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=336</guid>
		<description><![CDATA[De int a String Para realizar la conversión de números enteros a cadena podemos utilizar el método estático toString de la clase Integer,de la siguiente forma: De String a int Para realizar la conversión de una cadena a un podemos utilizar el método estático parseInt de la clase Integer,de la siguiente forma: Se puede llegar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=336&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>De int a String</h3>
<p>Para realizar la conversión de números enteros a cadena podemos utilizar el método estático <strong>toString</strong> de la clase <strong>Integer</strong>,de la siguiente forma:</p>
<p><pre class="brush: java;">
int i = 12;
String s = Integer.toString(i);
</pre></p>
<h3>De String a int</h3>
<p>Para realizar la conversión de una cadena a un podemos utilizar el método estático <strong>parseInt</strong> de la clase <strong>Integer</strong>,de la siguiente forma:</p>
<p><pre class="brush: java;">
String s = &quot;38&quot;;
int i = Integer.parseInt(s);
</pre></p>
<p>Se puede llegar a producir una excepción del tipo <strong>NumberFormatException</strong> si la cadena pasada contiene basura (espacios en blanco, caracteres, simbolos de puntuación, etc), caso en el cual deberá limpiarse antes de convertirse:</p>
<p><pre class="brush: java;">
try {
   String s = &quot;38.0&quot;;
   int i = Integer.parseInt(s);
} catch (NumberFormatException nfe) {
   System.err.println(&quot;Error de conversion de &quot; + b + &quot;: &quot; + nfe.getMessage());
}
</pre></p>
<p>En este caso imprimirá por la consola:</p>
<p style="padding-left:30px;"><span style="color:#800000;"><strong>Error de conversion: For input string: &#8220;38.0&#8243;</strong></span></p>
<p>Espero les sirva<br />
Saludos</p>
<br />Posted in Java Tagged: cadena, int, Integer, Java, String <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/336/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=336&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/01/27/convirtiendo-enteros-a-cadenas-y-visceversa-en-java/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Generando el SerialVersionUID de una clase desde NetBeans</title>
		<link>http://lefunes.wordpress.com/2009/01/05/generando-el-serialversionuid-de-una-clase-desde-netbeans/</link>
		<comments>http://lefunes.wordpress.com/2009/01/05/generando-el-serialversionuid-de-una-clase-desde-netbeans/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 00:10:20 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Serializable]]></category>
		<category><![CDATA[serialVersionUID]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=289</guid>
		<description><![CDATA[Anteriormente vimos como generar el serialVersionUID de una clase mediante el comando serialver. Ahora veremos como generar el mismo valor desde NetBeans IDE haciendo uso del plugin serialVersionUID generator for netbeans 6.5. Instalación Ver actualización al final del post Para instalarlo tenemos que seguir unos simples pasos: Descargar el plugin según la versión del IDE [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=289&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://lefunes.wordpress.com/2008/12/29/generar-el-serialversionuid-de-una-clase/">Anteriormente vimos</a> como generar el <strong>serialVersionUID</strong> de una clase mediante el comando <strong>serialver</strong>. Ahora veremos como generar el mismo valor desde NetBeans IDE haciendo uso del plugin <strong>serialVersionUID generator for netbeans 6.5</strong>.<br />
<span id="more-289"></span></p>
<h3>Instalación</h3>
<p><span style="color:#999999;">Ver actualización al final del post</span></p>
<p>Para instalarlo tenemos que seguir unos simples pasos:</p>
<ol>
<li>Descargar el plugin según la versión del IDE que utilizemos:
<ul>
<li>para Netbeans 6.1: <a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=6887">http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=6887</a><br />
(10Kb aprox)</li>
<li>para Netbeans 6.5: <a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=13974">http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=13974</a><br />
(30,5Kb aprox)</li>
</ul>
</li>
<p><img class="aligncenter size-medium wp-image-290" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_01.png?w=300&#038;h=242" alt="nbsvuid_01" width="300" height="242" /></p>
<li>Nos vamos al dialogo de Plugins de NetBeans, mediante el menú &#8220;Tools-&gt;Plugins&#8221;</li>
<li>Vamos a la pestaña &#8220;Downloaded&#8221;</li>
<p><img class="aligncenter size-full wp-image-291" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_02.png?w=300" alt="" /></p>
<li>Hacemos click en &#8220;Add Plugins&#8230;&#8221; y seleccionamos el archivo descargado</li>
<p><img class="aligncenter size-medium wp-image-292" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_03.png?w=300" alt="" /></p>
<li>Hacemos click en &#8220;Install&#8221;</li>
<p><img class="aligncenter size-medium wp-image-293" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_04.png?w=300" alt="" /></p>
<li>Seguimos el wizard de instalación</li>
<p><img class="aligncenter size-medium wp-image-294" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_05.png?w=300" alt="" /></p>
<li>Si nos indica que el plugin no está firmado, ignoramos el aviso haciendo click en &#8220;Continue&#8221;</li>
<p><img class="aligncenter size-medium wp-image-295" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_06.png?w=300" alt="" /></p>
<li>El plugin está instalado. Podemos comprobar esto en la pestaña &#8220;Installed&#8221;</li>
<p><img class="aligncenter size-medium wp-image-296" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_06b.png?w=300" alt="" /></ol>
<h3>Utilización</h3>
<p>Para utilizar el plugin creamos una clase que implemente java.io.Serializable, si la instalación ha funcionado bien nos aparecerá una advertencia en la barra lateral:</p>
<p><img class="aligncenter size-full wp-image-297" title="nbsvuid_07" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_07.png?w=500" alt="nbsvuid_07"   /></p>
<p>La primera opción que nos muestra, nos permite colocar el valor por defecto para el serialVersionUID:</p>
<p><img class="aligncenter size-full wp-image-298" title="nbsvuid_08" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_08.png?w=500" alt="nbsvuid_08"   /></p>
<p><img class="aligncenter size-full wp-image-299" title="nbsvuid_09" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_09.png?w=500" alt="nbsvuid_09"   /></p>
<p>La segunda opción nos permite agregar el serialVersionUID que genera serialver para la clase:</p>
<p><img class="aligncenter size-full wp-image-300" title="nbsvuid_10" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_10.png?w=500" alt="nbsvuid_10"   /></p>
<p><img class="aligncenter size-full wp-image-301" title="nbsvuid_11" src="http://lefunes.files.wordpress.com/2009/01/nbsvuid_11.png?w=500" alt="nbsvuid_11"   /></p>
<p>Saludos</p>
<h3>Más Info</h3>
<ul>
<li><a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=6887">Página del plugin para NetBeans 6.1</a></li>
<li><a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=13974">Página del plugin para NetBeans 6.5</a></li>
<li><a href="http://hlavki.blogspot.com">Mišo Hlaváč: Desarrollador del plugin</a></li>
</ul>
<h3>Actualización al 15 de Marzo de 2009</h3>
<p>Ya es posible instalar el plugin desde <strong>Tools-&gt;Plugins</strong> en NetBeans 6.5:</p>
<div id="attachment_385" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-385" title="serialuid_nb65" src="http://lefunes.files.wordpress.com/2009/01/serialuid_nb65.png?w=500&#038;h=254" alt="Cargando el plugin desde el dialogo de Plugins de NetBeans 6.5" width="500" height="254" /><p class="wp-caption-text">Cargando el plugin desde el dialogo de Plugins de NetBeans 6.5</p></div>
<h3>Actualización al 29 de Enero de 2010</h3>
<p>El proyecto ahora está alojado en <a href="http://kenai.com">Kenai</a>, desde donde se pueden bajar todas las versiones:</p>
<p><a href="http://kenai.com/projects/nb-svuid-generator/downloads/directory/nbms">http://kenai.com/projects/nb-svuid-generator/downloads/directory/nbms</a></p>
<br />Posted in Java, NetBeans Tagged: Java, NetBeans, Serializable, serialVersionUID <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/289/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=289&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2009/01/05/generando-el-serialversionuid-de-una-clase-desde-netbeans/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_01.png?w=300" medium="image">
			<media:title type="html">nbsvuid_01</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_02.png?w=300" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_03.png?w=300" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_04.png?w=300" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_05.png?w=300" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_06.png?w=300" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_06b.png?w=300" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_07.png" medium="image">
			<media:title type="html">nbsvuid_07</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_08.png" medium="image">
			<media:title type="html">nbsvuid_08</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_09.png" medium="image">
			<media:title type="html">nbsvuid_09</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_10.png" medium="image">
			<media:title type="html">nbsvuid_10</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/nbsvuid_11.png" medium="image">
			<media:title type="html">nbsvuid_11</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2009/01/serialuid_nb65.png" medium="image">
			<media:title type="html">serialuid_nb65</media:title>
		</media:content>
	</item>
		<item>
		<title>Generar el serialVersionUID de una clase</title>
		<link>http://lefunes.wordpress.com/2008/12/29/generar-el-serialversionuid-de-una-clase/</link>
		<comments>http://lefunes.wordpress.com/2008/12/29/generar-el-serialversionuid-de-una-clase/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 15:35:16 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jdk]]></category>
		<category><![CDATA[Serializable]]></category>
		<category><![CDATA[serialver]]></category>
		<category><![CDATA[serialVersionUID]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=283</guid>
		<description><![CDATA[Para obtener el serialVersionUID de una clase que implemente Serializable se puede utilizar el comando serialver incorporado en el JDK. Para generar el serialVersionUID necesitamos tener la versión compilada de la clase, es decir, contar con el .class o con un .jar que lo contenga. La sintaxis básica del comando es la siguiente: serialver [-classpath [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=283&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para obtener el <strong>serialVersionUID </strong>de una clase que implemente <strong>Serializable </strong>se puede utilizar el comando <strong>serialver </strong>incorporado en el JDK.</p>
<p>Para generar el serialVersionUID necesitamos tener la versión compilada de la clase, es decir, contar con el .class o con un .jar que lo contenga.</p>
<p>La sintaxis básica del comando es la siguiente:</p>
<blockquote>
<p style="text-align:center;"><strong>serialver [-classpath </strong><strong><span style="color:#339966;">classpath</span>] </strong><strong><span style="color:#339966;">nombre_clase</span></strong></p>
</blockquote>
<p>Tanto en Linux como en Windows la sintaxis es la misma.</p>
<p>Algunos ejemplos de uso en Linux:</p>
<p><pre class="brush: cpp;">
lefunes@px:/algun/dir/$ serialver -classpath ./el_jar.jar ar.lefunes.paquete.LaClase
ar.lefunes.paquete.LaClase:    static final long serialVersionUID = 7531218309096113276L;

lefunes@px:/algun/dir/$ serialver ar.lefunes.paquete.LaClase.class
ar.lefunes.paquete.LaClase:    static final long serialVersionUID = 7531218309096113276L;
</pre></p>
<p>de modo similar, en Windows (el directorio bin del JDK debe estar incluido en el classpath para llamar de forma directa serialver.exe):</p>
<p><pre class="brush: cpp;">
C:Algundir&gt;serialver.exe -classpath el_jar.jar ar.lefunes.paquete.LaClase
ar.lefunes.paquete.LaClase:    static final long serialVersionUID = 7531218309096113276L;

C:Algundir&gt;serialver.exe ar.lefunes.paquete.LaClase.class
ar.lefunes.paquete.LaClase:    static final long serialVersionUID = 7531218309096113276L;
</pre></p>
<br />Posted in Java Tagged: Java, jdk, Serializable, serialver, serialVersionUID <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/283/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=283&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/12/29/generar-el-serialversionuid-de-una-clase/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Aplicación MDI (JDesktopPanel) con imagen de fondo</title>
		<link>http://lefunes.wordpress.com/2008/11/24/aplicacion-mdi-jdesktoppanel-co/</link>
		<comments>http://lefunes.wordpress.com/2008/11/24/aplicacion-mdi-jdesktoppanel-co/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 22:50:38 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[jdesktoppanel]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=265</guid>
		<description><![CDATA[Para conseguir colocar una imagen de fondo en una aplicación MDI (que utiliza JDesktopPane) realizamos un proceso similar al que realizamos para hacer lo mismo con un JPanel, es decir, sobrescribir el método paint, dibujando la imagen del tamaño del desktop panel, y luego sobre esta imagen el resto de las ventanas internas (JInternalFrame) Código: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=265&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para conseguir colocar una imagen de fondo en una aplicación MDI (que utiliza <strong>JDesktopPane</strong>) realizamos un proceso similar <a href="http://lefunes.wordpress.com/2008/11/22/incluyendo-una-imagen-de-fondo-en-un-jpanel/">al que realizamos para hacer lo mismo con un JPanel</a>, es decir, sobrescribir el método <strong>paint</strong>, dibujando la imagen del tamaño del desktop panel, y luego sobre esta imagen el resto de las ventanas internas (JInternalFrame)<br />
<span id="more-265"></span></p>
<p>Código:<br />
<pre class="brush: java;">
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
//...

public class DesktopConFondo extends JDesktopPane {

    private Image imagen;

	//...

    @Override
    public void paint(Graphics g) {
		g.drawImage(imagen, 0, 0, getWidth(), getHeight(),
                         this);

		setOpaque(false);
        super.paint(g);
    }

	//...
}
</pre></p>
<p>Como podemos ver en el método paint hemos especificado tres lineas:</p>
<ul>
<li><strong>g.drawImage</strong>: dibujamos la imagen (guardada en el atributo &#8220;imagen&#8221;) en toda la extension del panel</li>
</ul>
<ul>
<li> <strong>setOpaque(false)</strong>: le indicamos al panel que no dibuje su fondo por defecto (sino este taparía la imagen)</li>
</ul>
<ul>
<li> <strong>super.paint(g</strong>): le indicamos al panel que continúe dibujando el resto de los componentes</li>
</ul>
<div id="attachment_267" class="wp-caption aligncenter" style="width: 412px"><img src="http://lefunes.files.wordpress.com/2008/11/jdp01.png?w=500" alt="JDesktopPanel con imagen de fondo" title="JDesktopPanel con imagen de fondo"   class="size-full wp-image-267" /><p class="wp-caption-text">JDesktopPanel con imagen de fondo</p></div>
<h3>Redimensionado</h3>
<p>Una cosa importante a la hora de dibujar la imagen es que lo hacemos desde el pixel <strong>[0,0]</strong> hasta el pixel <strong>[getWidth(), getHeight()]</strong>, esto indica que cubrirá toda la extensión del panel en ese momento, permitiéndonos que la imagen acompañe una redimension del panel.</p>
<div id="attachment_269" class="wp-caption aligncenter" style="width: 554px"><img src="http://lefunes.files.wordpress.com/2008/11/jdp02.png?w=500" alt="Redimensionando MDI" title="Redimensionando MDI"   class="size-full wp-image-269" /><p class="wp-caption-text">Redimensionando MDI</p></div>
<h3>Algunas Variaciones</h3>
<p>Una variación puede ser que el panel dibuje la imagen solo si está asignada a la variable &#8220;imagen&#8221;, en caso contrario (<strong>imagen == null</strong>) se dibujara el fondo por defecto:</p>
<p><pre class="brush: java;">
	//...

    @Override
    public void paint(Graphics g) {
        if (imagen != null) {
            g.drawImage(imagen, 0, 0, getWidth(), getHeight(),
                     this);

            setOpaque(false);
        } else {
            setOpaque(true);
        }

        super.paint(g);
    }

	//...
</pre></p>
<p>La carga de la imagen la podemos realizar en el constructor:</p>
<p><pre class="brush: java;">
	//...

    public DesktopConFondo(Image imagenInicial) {
        if (imagenInicial != null) {
            imagen = imagenInicial;
        }
    }

	//...
</pre></p>
<p>o que la misma pueda ir variando:</p>
<p><pre class="brush: java;">
	//...

    public void setImagen(Image nuevaImagen) {
        imagen = nuevaImagen;

        repaint();
    }

	//...
</pre></p>
<div id="attachment_270" class="wp-caption aligncenter" style="width: 414px"><img src="http://lefunes.files.wordpress.com/2008/11/jdp03.png?w=500" alt="Cambiando la imagen dinámicamente" title="Cambiando la imagen dinámicamente"   class="size-full wp-image-270" /><p class="wp-caption-text">Cambiando la imagen dinámicamente</p></div>
<p>De este método podemos observar dos cosas:</p>
<ul>
<li><strong>repaint()</strong>: Lo llamamos explícitamente para que cuando cambiemos la imagen esta se muestre inmediatamente.</li>
</ul>
<ul>
<li> Si el parámetro nuevaImagen es null, veremos el fondo por defecto.</li>
</ul>
<div id="attachment_271" class="wp-caption aligncenter" style="width: 415px"><img src="http://lefunes.files.wordpress.com/2008/11/jdp04.png?w=500" alt="Fondo por defecto (imagen == null)" title="Fondo por defecto (imagen == null)"   class="size-full wp-image-271" /><p class="wp-caption-text">Fondo por defecto (imagen == null)</p></div>
<h3>Código</h3>
<p>Este es el código del panel completo:</p>
<p><pre class="brush: java;">
package ar.lefunes.mdiconimagen;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;

public class DesktopConFondo extends JDesktopPane {

    private Image imagen;

    public DesktopConFondo() {
    }

    public DesktopConFondo(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(
                         getClass().getResource(nombreImagen)
                         ).getImage();
        }
    }

    public DesktopConFondo(Image imagenInicial) {
        if (imagenInicial != null) {
            imagen = imagenInicial;
        }
    }

    public void setImagen(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(
                         getClass().getResource(nombreImagen)
                         ).getImage();
        } else {

            imagen = null;
        }

        repaint();
    }

    public void setImagen(Image nuevaImagen) {
        imagen = nuevaImagen;

        repaint();
    }

    @Override
    public void paint(Graphics g) {
        if (imagen != null) {
            g.drawImage(imagen, 0, 0, getWidth(), getHeight(),
                     this);
            setOpaque(false);
        } else{
            setOpaque(true);
        }

        super.paint(g);
    }
}
</pre></p>
<h3>Ejemplo Descargable</h3>
<p>Puedes descargar el ejemplo completo desde (aprox. 38,3 KB): <a href="http://lefunes.googlecode.com/files/MDI_%20imagen_fondo.zip">http://lefunes.googlecode.com/files/MDI_imagen_fondo.zip</a></p>
<br />Posted in Java, Swing Tagged: image, imagen, Java, jdesktoppanel, Swing <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/265/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=265&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/11/24/aplicacion-mdi-jdesktoppanel-co/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jdp01.png" medium="image">
			<media:title type="html">JDesktopPanel con imagen de fondo</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jdp02.png" medium="image">
			<media:title type="html">Redimensionando MDI</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jdp03.png" medium="image">
			<media:title type="html">Cambiando la imagen dinámicamente</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jdp04.png" medium="image">
			<media:title type="html">Fondo por defecto (imagen == null)</media:title>
		</media:content>
	</item>
		<item>
		<title>Incluyendo una imagen de fondo en un JPanel</title>
		<link>http://lefunes.wordpress.com/2008/11/22/incluyendo-una-imagen-de-fondo-en-un-jpanel/</link>
		<comments>http://lefunes.wordpress.com/2008/11/22/incluyendo-una-imagen-de-fondo-en-un-jpanel/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 14:55:36 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[jpanel]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=245</guid>
		<description><![CDATA[Para que un JPanel tenga una imagen de fondo básicamente lo que hacemos es sobrescribir el método paint, dibujando la imagen del tamaño del panel, y luego sobre esta imagen el resto de los componentes. Código: Como podemos ver en el método paint hemos especificado tres lineas: g.drawImage: dibujamos la imagen (guardada en el atributo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=245&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para que un <strong>JPanel</strong> tenga una imagen de fondo básicamente lo que hacemos es sobrescribir el método <strong>paint</strong>, dibujando la imagen del tamaño del panel, y luego sobre esta imagen el resto de los componentes.</p>
<p><span id="more-245"></span><br />
Código:<br />
<pre class="brush: java;">
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
//...

public class JPanelConFondo extends JPanel {

    private Image imagen;

	//...

    @Override
    public void paint(Graphics g) {
		g.drawImage(imagen, 0, 0, getWidth(), getHeight(),
                        this);

		setOpaque(false);
        super.paint(g);
    }

	//...
}
</pre></p>
<p>Como podemos ver en el método paint hemos especificado tres lineas:</p>
<ul>
<li><strong>g.drawImage</strong>: dibujamos la imagen (guardada en el atributo &#8220;imagen&#8221;) en toda la extension del panel</li>
</ul>
<ul>
<li> <strong>setOpaque(false)</strong>: le indicamos al panel que no dibuje su fondo por defecto (sino este taparía la imagen)</li>
</ul>
<ul>
<li> <strong>super.paint(g</strong>): le indicamos al panel que continúe dibujando el resto de los componentes</li>
</ul>
<div id="attachment_249" class="wp-caption aligncenter" style="width: 392px"><img class="size-full wp-image-249" title="Mostrando Fondo" src="http://lefunes.files.wordpress.com/2008/11/01.png?w=500" alt="JPanel con una imagen de fondo"   /><p class="wp-caption-text">JPanel con una imagen de fondo</p></div>
<h3>Redimensionado</h3>
<p>Una cosa importante a la hora de dibujar la imagen es que lo hacemos desde el pixel <strong>[0,0]</strong> hasta el pixel <strong>[getWidth(), getHeight()]</strong>, esto indica que cubrirá toda la extensión del panel en ese momento, permitiéndonos que la imagen acompañe una redimension del panel.</p>
<div id="attachment_250" class="wp-caption aligncenter" style="width: 345px"><img class="size-full wp-image-250" title="JPanel redimensionado" src="http://lefunes.files.wordpress.com/2008/11/02.png?w=500" alt="Efecto del redimencionado del panel en la imagen"   /><p class="wp-caption-text">Efecto del redimencionado del panel en la imagen</p></div>
<h3>Algunas Variaciones</h3>
<p>Una variación puede ser que el panel dibuje la imagen solo si está asignada a la variable &#8220;imagen&#8221;, en caso contrario (<strong>imagen == null</strong>) se dibujara el fondo por defecto:</p>
<p><pre class="brush: java;">
	//...

    @Override
    public void paint(Graphics g) {
        if (imagen != null) {
            g.drawImage(imagen, 0, 0, getWidth(), getHeight(), 
                             this);

            setOpaque(false);
        } else {
            setOpaque(true);
        }

        super.paint(g);
    }

	//...
</pre></p>
<p>La carga de la imagen la podemos realizar en el constructor:</p>
<p><pre class="brush: java;">
	//...

    public JPanelConFondo(Image imagenInicial) {
        if (imagenInicial != null) {
            imagen = imagenInicial;
        }
    }

	//...
</pre></p>
<p>o que la misma pueda ir variando:</p>
<p><pre class="brush: java;">
	//...

    public void setImagen(Image nuevaImagen) {
        imagen = nuevaImagen;

        repaint();
    }

	//...
</pre></p>
<p>De este método podemos observar dos cosas:</p>
<ul>
<li><strong>repaint()</strong>: Lo llamamos explícitamente para que cuando cambiemos la imagen esta se muestre inmediatamente.</li>
</ul>
<ul>
<li> Si el parámetro nuevaImagen es null, veremos el fondo por defecto.</li>
</ul>
<div id="attachment_251" class="wp-caption aligncenter" style="width: 365px"><img class="size-full wp-image-251" title="JPanel sin imagen de fondo" src="http://lefunes.files.wordpress.com/2008/11/03.png?w=500" alt="El panel no tiene imagen de fondo (imagen == null)"   /><p class="wp-caption-text">El panel no tiene imagen de fondo (imagen == null)</p></div>
<h3>Código</h3>
<p>Este es el código del panel completo:</p>
<p><pre class="brush: java;">
package ar.lefunes.jpanelconfondo;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class JPanelConFondo extends JPanel {

    private Image imagen;

    public JPanelConFondo() {
    }

    public JPanelConFondo(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(
                           getClass().getResource(nombreImagen)
                           ).getImage();
        }
    }

    public JPanelConFondo(Image imagenInicial) {
        if (imagenInicial != null) {
            imagen = imagenInicial;
        }
    }

    public void setImagen(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(
                   getClass().getResource(nombreImagen)
                   ).getImage();
        } else {
            imagen = null;
        }

        repaint();
    }

    public void setImagen(Image nuevaImagen) {
        imagen = nuevaImagen;

        repaint();
    }

    @Override
    public void paint(Graphics g) {
        if (imagen != null) {
            g.drawImage(imagen, 0, 0, getWidth(), getHeight(),
                              this);

            setOpaque(false);
        } else {
            setOpaque(true);
        }

        super.paint(g);
    }
}
</pre></p>
<h3>Ejemplo Descargable</h3>
<p>Puedes descargar el ejemplo completo desde (aprox. 37,5 KB): <a href="http://lefunes.googlecode.com/files/JPanel_imagen_fondo.zip">http://lefunes.googlecode.com/files/JPanel_imagen_fondo.zip</a></p>
<br />Posted in Java, Swing Tagged: imagen, Java, jpanel, Swing <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/245/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=245&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/11/22/incluyendo-una-imagen-de-fondo-en-un-jpanel/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/01.png" medium="image">
			<media:title type="html">Mostrando Fondo</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/02.png" medium="image">
			<media:title type="html">JPanel redimensionado</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/03.png" medium="image">
			<media:title type="html">JPanel sin imagen de fondo</media:title>
		</media:content>
	</item>
		<item>
		<title>Ocultar la barra de título de un JFrame</title>
		<link>http://lefunes.wordpress.com/2008/11/22/ocultar-la-barra-de-titulo-de-un-jframe/</link>
		<comments>http://lefunes.wordpress.com/2008/11/22/ocultar-la-barra-de-titulo-de-un-jframe/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 14:33:54 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[barratitulo]]></category>
		<category><![CDATA[JFrame]]></category>
		<category><![CDATA[undecorated]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=212</guid>
		<description><![CDATA[Para ocultar la barra de título a un JFrame simplemente le asignamos al JFrame true al método setUndecorated: jFrame.setUndecorated(true); Por ejemplo: Obtendremos un JFrame sin la barra de título: Más Info Removing the Title Bar of a Frame Posted in Java, Swing Tagged: barratitulo, Java, JFrame, Swing, undecorated<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=212&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para ocultar la barra de título a un JFrame simplemente le asignamos al JFrame true al método setUndecorated:</p>
<blockquote><p><strong><span style="color:#339966;">jFrame.setUndecorated(true);</span></strong></p></blockquote>
<p>Por ejemplo:</p>
<p><pre class="brush: java;">
package ar.lefunes;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Inicio {

    public static void main(String[] args) {
        JFrame sinBarraTitulo = new JFrame();
        sinBarraTitulo.setUndecorated(true);
        sinBarraTitulo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        sinBarraTitulo.add(new JLabel(&quot;Frame sin Barra de Titulo&quot;));
        sinBarraTitulo.setSize(250, 250);

        sinBarraTitulo.setLocationRelativeTo(null);
        sinBarraTitulo.setVisible(true);
    }
}
</pre></p>
<p>Obtendremos un JFrame sin la barra de título:</p>
<div id="attachment_215" class="wp-caption aligncenter" style="width: 554px"><a href="http://lefunes.files.wordpress.com/2008/09/frame-sin-barra.png"><img class="size-full wp-image-215" title="frame-sin-barra" src="http://lefunes.files.wordpress.com/2008/09/frame-sin-barra.png?w=500" alt="Ejecutando el ejemplo desde el IDE"   /></a><p class="wp-caption-text">Ejecutando el ejemplo desde el IDE</p></div>
<h3>Más Info</h3>
<ul>
<li><a href="http://www.roseindia.net/java/example/java/swing/RemoveTitleFrame.shtml">Removing the Title Bar of a Frame</a></li>
</ul>
<br />Posted in Java, Swing Tagged: barratitulo, Java, JFrame, Swing, undecorated <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=212&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/11/22/ocultar-la-barra-de-titulo-de-un-jframe/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/frame-sin-barra.png" medium="image">
			<media:title type="html">frame-sin-barra</media:title>
		</media:content>
	</item>
		<item>
		<title>Ubicación de LocalStorage del AppFramework (jsr 296)</title>
		<link>http://lefunes.wordpress.com/2008/11/14/ubicacion-de-localstorage-del-appframework-jsr-296/</link>
		<comments>http://lefunes.wordpress.com/2008/11/14/ubicacion-de-localstorage-del-appframework-jsr-296/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 18:25:23 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[appframework]]></category>
		<category><![CDATA[jsr296]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=230</guid>
		<description><![CDATA[La ubicación del LocalStorage del AppFramework dependerá del Sistema Operativo en el cual estemos corriendo nuestra aplicación. Por ejemplo, si hacemos: El archivo (en este ejemplo &#8220;archivo.xml&#8221;) se almacenará en los siguientes sitios: Windows XP: C:\Documents and Settings\&#60;NombreUsuario&#62;\&#60;AppData&#62;\&#60;VendorID&#62;\&#60;AppID&#62;\archivo.xml OS X: /&#60;Usuarios&#62;/&#60;NombreUsuario&#62;/Library/Application Support/&#60;AppID&#62;/archivo.xml Unix: /home/&#60;NombreUsuario&#62;/.&#60;AppID&#62;/archivo.xml De ahí podemos deducir otro buen motivo para definir bien tanto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=230&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La ubicación del <strong>LocalStorage </strong>del AppFramework dependerá del Sistema Operativo en el cual estemos corriendo nuestra aplicación.</p>
<p>Por ejemplo, si hacemos:</p>
<p><pre class="brush: java;">
LocalStorage storage =
      Application.getInstance(UnaClase.class).getContext().getLocalStorage();
storage.save(objeto, &quot;archivo.xml&quot;);
</pre></p>
<p>El archivo (en este ejemplo &#8220;archivo.xml&#8221;) se almacenará en los siguientes sitios:</p>
<p><strong>Windows XP</strong>:</p>
<blockquote><p><span style="color:#008080;">C:\Documents and Settings\&lt;NombreUsuario&gt;\&lt;AppData&gt;\<strong>&lt;VendorID&gt;</strong>\<strong>&lt;AppID&gt;</strong>\archivo.xml</span></p></blockquote>
<p><strong>OS X</strong>:</p>
<blockquote><p><span style="color:#008080;">/&lt;Usuarios&gt;/&lt;NombreUsuario&gt;/Library/Application Support/<strong>&lt;AppID&gt;</strong>/archivo.xml</span></p></blockquote>
<p><strong>Unix</strong>:</p>
<blockquote><p><span style="color:#008080;">/home/&lt;NombreUsuario&gt;/.<strong>&lt;AppID&gt;</strong>/archivo.xml</span></p></blockquote>
<p>De ahí podemos deducir otro buen motivo para definir bien tanto <strong>AppID </strong>como <strong>VendorID</strong> en nuestra aplicación.</p>
<br />Posted in Java, Swing Tagged: appframework, Java, jsr296, Swing <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=230&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/11/14/ubicacion-de-localstorage-del-appframework-jsr-296/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Agregando tareas al script de ANT en un proyecto de NetBeans</title>
		<link>http://lefunes.wordpress.com/2008/11/06/agregando-tareas-al-script-de-ant-en-un-proyecto-de-netbeans/</link>
		<comments>http://lefunes.wordpress.com/2008/11/06/agregando-tareas-al-script-de-ant-en-un-proyecto-de-netbeans/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 17:59:46 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[ant]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=220</guid>
		<description><![CDATA[Si queremos agregar tareas adicionales al script de ANT que NetBeans genera para un proyecto ,por ejemplo para actualizar archivos, generar ejecutables, etc. , primero que nada deberemos entender donde NetBeans organiza las tareas de compilación, empaquetamiento, generación de javadoc, etc. NetBeans genera dos archivos de ANT: nbproject/build-impl.xml build.xml Podremos verlos desde la pestaña de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=220&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Si queremos agregar tareas adicionales al script de ANT que NetBeans genera para un proyecto ,por ejemplo para actualizar archivos, generar ejecutables, etc.  , primero que nada deberemos entender donde NetBeans organiza las tareas de compilación, empaquetamiento, generación de javadoc, etc.</p>
<p>NetBeans genera dos archivos de ANT:</p>
<ul>
<li>nbproject/build-impl.xml</li>
<li>build.xml</li>
</ul>
<p>Podremos verlos desde la pestaña de Archivos del IDE:</p>
<p><img src="http://lefunes.files.wordpress.com/2008/11/ant01.png?w=500" alt="ubicacion de scripts ant" title="ubicacion de scripts ant"   class="aligncenter size-full wp-image-222" /></p>
<p>En el primero de ellos (build-impl) es donde realmente se implementan todas las tareas y es donde se encuentran definidos los puntos de enganche donde nosotros podremos incorporar tareas. NO es recomendable editar este archivo.</p>
<p>El archivo build.xml es el que se invoca cada vez que hacemos build, clean &amp; build, run, etc. Él simplemente importa todas las tareas definidas en el archivo build-impl:</p>
<p><img src="http://lefunes.files.wordpress.com/2008/11/ant02.png?w=500" alt="build.xml" title="build.xml"   class="aligncenter size-full wp-image-223" /></p>
<p>Aquí es donde podremos (y debemos) sobrescribir las tareas provistas para tal fin. Los puntos de enganche definidos son los siguientes:</p>
<ul>
<li>antes de la inicialización de las propiedades del proyecto (-pre-init)</li>
<li>después de la inicialización de las propiedades del proyecto (-post-init)</li>
<li>antes de la compilación mediante javac (-pre-compile)</li>
<li>después de la compilación mediante javac (-post-compile)</li>
<li>antes de la compilación de un archivo solo mediante javac (-pre-compile-single)</li>
<li>después de la compilación de un archivo solo mediante javac (-post-compile-single)</li>
<li>antes de la compilación de los test de JUnit mediante javac (-pre-compile-test)</li>
<li>después de la compilación de los test de JUnit mediante javac (-post-compile-test)</li>
<li>antes de la compilación de un archivo de test de JUnit solo mediante javac (-pre-compile-test-single)</li>
<li>después de la compilación de un archivo de test de JUnit solo mediante javac (-post-compile-test-single)</li>
<li>antes de construir el Jar (-pre-jar)</li>
<li>después de construir el jar (-post-jar)</li>
<li>después de limpiar los archivos generados anteriormente  (-post-clean)</li>
</ul>
<p>Entonces lo que hacemos es simplemente escribir la(s) tarea(s) elegida(s):</p>
<p><pre class="brush: xml;">
&lt;target name=&quot;-pre-jar&quot;&gt;
       &lt; !—aquí incluimos el codigo --&gt;
 &lt;/target&gt;
</pre></p>
<p>Por ejemplo, modificaremos el archivo build.xml para mostrar algunos mensajes personalizados:</p>
<p><pre class="brush: xml;">
&lt; ?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;project name=&quot;testANT&quot; default=&quot;default&quot; basedir=&quot;.&quot;&gt;
    &lt;description&gt;Builds, tests, and runs the project testANT.&lt;/description&gt;
    &lt;import file=&quot;nbproject/build-impl.xml&quot;/&gt;

    &lt;target name=&quot;-pre-compile&quot;&gt;
        &lt;echo&gt;Compilando....&lt;/echo&gt;
    &lt;/target&gt;

    &lt;target name=&quot;-post-compile&quot;&gt;
        &lt;echo&gt;Fin de la compilacion&lt;/echo&gt;
    &lt;/target&gt;

    &lt;target name=&quot;-pre-jar&quot;&gt;
        &lt;echo&gt;Armando el JAR...&lt;/echo&gt;
    &lt;/target&gt;

    &lt;target name=&quot;-post-jar&quot;&gt;
        &lt;echo&gt;JAR construido&lt;/echo&gt;
    &lt;/target&gt;

    &lt;target name=&quot;-post-clean&quot;&gt;
        &lt;echo&gt;Limpieza de archivos generados anteriormente&lt;/echo&gt;
    &lt;/target&gt;
&lt;/project&gt;
</pre></p>
<p>Ahora si realizamos “Clean and Build” obtendremos en la ventana de Output algo como esto:</p>
<p><a href="http://lefunes.files.wordpress.com/2008/11/ant03.png"><img src="http://lefunes.files.wordpress.com/2008/11/ant03.png?w=500" alt="salida del script modificado al hacer &quot;clean and build&quot;" title="salida del script modificado al hacer &quot;clean and build&quot;"   class="aligncenter size-full wp-image-224" /></a></p>
<p>Adicionalmente podemos sobrescribir cualquiera de las tareas principales de buil-impl. Por ejemplo si queremos mantener una copia del último jar generado antes de borrarlo podríamos modificar la tarea:</p>
<p><pre class="brush: xml;">
&lt;target depends=&quot;init&quot; name=&quot;-do-clean&quot;&gt;
        &lt;delete dir=&quot;${build.dir}&quot;/&gt;
        &lt;delete dir=&quot;${dist.dir}&quot;/&gt;
&lt;/target&gt;
</pre></p>
<p>Sobrescribiéndola de la siguiente forma en el archivo build.xml:</p>
<p><pre class="brush: xml;">
&lt;target depends=&quot;init&quot; name=&quot;-do-clean&quot;&gt;
        &lt;delete dir=&quot;${build.dir}&quot;/&gt;

        &lt;!-- evita errores si dist.dir no existe --&gt;
        &lt;mkdir dir=&quot;${dist.dir}&quot; /&gt;
        &lt;copy todir=&quot;backup&quot;&gt;
            &lt;fileset dir=&quot;${dist.dir}&quot; /&gt;
        &lt;/copy&gt;
        &lt;echo&gt;Guardada copia de dist&lt;/echo&gt;
     
        &lt;delete dir=&quot;${dist.dir}&quot;/&gt;
&lt;/target&gt;
</pre></p>
<p>Manteniendo una copia aún después de realizar un “clean”:</p>
<p><img src="http://lefunes.files.wordpress.com/2008/11/ant04.png?w=500" alt="copia del dist realizada" title="copia del dist realizada"   class="aligncenter size-full wp-image-225" /></p>
<p>De esta forma podemos no solo agregar funcionalidades en los puntos predefinidos (anteriormente listados) sino que podemos llegar a sobrescribir por completo las tareas de ANT.</p>
<p>Se puede descargar el proyecto de ejemplo (aprox. 9.3kB) de: <a href="http://lefunes.googlecode.com/files/modificar_ANT_netbeans.zip">http://lefunes.googlecode.com/files/modificar_ANT_netbeans.zip</a>. En él se incluye el proyecto en NetBeans 6.5 creado para este post.</p>
<p>Espero les sirva<br />
Saludos</p>
<br />Posted in ant, Java, NetBeans Tagged: ant, Java, NetBeans <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/220/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=220&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/11/06/agregando-tareas-al-script-de-ant-en-un-proyecto-de-netbeans/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/ant01.png" medium="image">
			<media:title type="html">ubicacion de scripts ant</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/ant02.png" medium="image">
			<media:title type="html">build.xml</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/ant03.png" medium="image">
			<media:title type="html">salida del script modificado al hacer &#34;clean and build&#34;</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/ant04.png" medium="image">
			<media:title type="html">copia del dist realizada</media:title>
		</media:content>
	</item>
		<item>
		<title>Creando un sistema con plugins en Java</title>
		<link>http://lefunes.wordpress.com/2008/09/03/creando-un-sistema-con-plugins-en-java/</link>
		<comments>http://lefunes.wordpress.com/2008/09/03/creando-un-sistema-con-plugins-en-java/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 22:29:03 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[ServiceLoader]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=182</guid>
		<description><![CDATA[En este post veremos como crear un sistema que extiende su funcionalidad por medio de plugins. Para ello haremos uso de la clase java.util.ServiceLoader incluida en Java 6.0 Basicamente para que nuestro sistema admita plugins debemos realizar una serie de pasos básicos: Definir la forma en que los plugins serán agregados a nuestra aplicación Crear [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=182&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En este post veremos como crear un sistema que extiende su funcionalidad por medio de plugins. Para ello haremos uso de la clase <strong>java.util.ServiceLoader</strong> incluida en Java 6.0</p>
<p>Basicamente para que nuestro sistema admita plugins debemos realizar una serie de pasos básicos:</p>
<ol>
<li> Definir la forma en que los plugins serán agregados a nuestra aplicación</li>
<li> Crear una interface que los plugins deberán implementar</li>
<li> Crear una forma de encontrar y cargar los plugins en tiempo de ejecución</li>
<li> Crear los plugins</li>
<li> Probar que todo funcione según lo previsto</li>
</ol>
<p>Veremos con un pequeño ejemplo para entender como llevar a cabo cada uno de estos pasos, donde los plugins de nuestra aplicación simplemente devolveran un mensaje (un String) que la aplicación principal mostrará por pantalla.<br />
<span id="more-182"></span></p>
<h3>0- Creando el proyecto de ejemplo</h3>
<p>Crearemos el proyecto principal de ejemplo de nuestra aplicación. Por ahora solo crearemos un proyecto con la calse que contiene el método main.</p>
<p><pre class="brush: java;">
package ar.lefunes;

public class Main {
    public static void main(String[] args) {
    }
}
</pre></p>
<div id="attachment_187" class="wp-caption aligncenter" style="width: 163px"><a href="http://lefunes.files.wordpress.com/2008/09/000_proy_ini.png"><img class="size-full wp-image-187" src="http://lefunes.files.wordpress.com/2008/09/000_proy_ini.png?w=500" alt="Proyecto Principal"   /></a><p class="wp-caption-text">Proyecto Principal</p></div>
<h3>1- Definir la forma en que los plugins serán agregados a nuestra aplicación</h3>
<p>En este paso debemos dejar en claro como queremos que funcione nuestra aplicacion a la hora de cargar y utilizar los plugins. Aqui no programaremos nada, pero es importante identificar exactamente lo que queremos conseguir.</p>
<p>En el caso de nuestro ejemplo, lo que haremos es crear un directorio &#8220;plugins&#8221; en el directorio local de nuestra aplicación donde agregaremos los plugins (sus .jar), por lo tanto el sistema debe ser capaz de encontrarlos, cargarlos y utilizarlos desde esa ubicación.</p>
<h3>2- Crear una interface que los plugins deberán implementar</h3>
<p>Definimos una interface que todo plugins que quiera ser incorporado al sistema deberá implementar.</p>
<p>Crearemos un proyecto independiente del principal que contendrá unicamente la interface. Este será incluido tanto en los proyectos de cada plugin como asi también en el proyecto principal.</p>
<p><pre class="brush: java;">
package ar.lefunes.plugins;

public interface IPluginMensaje {
    String getMensaje();
}
</pre></p>
<div id="attachment_189" class="wp-caption aligncenter" style="width: 212px"><a href="http://lefunes.files.wordpress.com/2008/09/001_interface.png"><img class="size-full wp-image-189" src="http://lefunes.files.wordpress.com/2008/09/001_interface.png?w=500" alt="Proyecto de la Interface"   /></a><p class="wp-caption-text">Proyecto de la Interface</p></div>
<p>Incluimos a este proyecto dentro del proyecto principal:</p>
<div id="attachment_190" class="wp-caption aligncenter" style="width: 415px"><a href="http://lefunes.files.wordpress.com/2008/09/002_incluir_int.png"><img class="size-full wp-image-190" src="http://lefunes.files.wordpress.com/2008/09/002_incluir_int.png?w=500" alt="Incluyendo el proy. de la interface en el proy. principal"   /></a><p class="wp-caption-text">Incluyendo el proy. de la interface en el proy. principal</p></div>
<h3>3- Crear una forma de encontrar y cargar los plugins en tiempo de ejecución</h3>
<p>Para cargar los plugins utilizaremos java.util.ServiceLoader, la cual busca en el classpath todas las implementaciones declaradas de una interface determinada.</p>
<p>Por lo tanto, para que un plugin exponga una implementación de la interface (en nuestro ejemplo IPluginMensaje) se deben cumplir dos condiciones:</p>
<ul>
<li> El .jar del plugin debe estar incluido en el classpath para que ServiceLoader lo revise.</li>
<li> El plugin debe indicarle a ServiceLoader que dentro de él existe una implementación de la interface y donde puede encontrarla.</li>
</ul>
<p>Para cumplir la primera consideración deberemos buscar todos los .jars que se encuentre dentro del directorio &#8220;plugins&#8221;, incorporandolos luego al classpath mediante la <a href="http://lefunes.wordpress.com/2008/08/12/modificando-el-classpath-dinamicamente-en-tiempo-de-ejecucion/">clase ModificadorClassPath que vimos en un post anterior</a>.</p>
<p>Para que se cumpla la segunda condición ServiceLoader tiene que encontrar un archivo dentro del plugin en la dirección &#8220;META-INF/services/&#8221; con el nombre calificado de la interface (ar.lefunes.plugins.IPluginMensaje). Dentro del archivo se lista (linea por linea) el nombre calificado de cada una de las clases dentro del plugin que implementan la interface. En el proximo punto veremos como crear este archivo.</p>
<p>Agregamos entonces la clase <a href="http://lefunes.wordpress.com/2008/08/12/modificando-el-classpath-dinamicamente-en-tiempo-de-ejecucion/">ar.lefunes.classpath.ModificadorClassPath</a> a nuestro proyecto principal, y creaamos una clase nueva llamada CargadorPlugins:</p>
<div id="attachment_191" class="wp-caption aligncenter" style="width: 244px"><a href="http://lefunes.files.wordpress.com/2008/09/003_carg_plugs.png"><img class="size-full wp-image-191" src="http://lefunes.files.wordpress.com/2008/09/003_carg_plugs.png?w=500" alt="Clase Cargadora de Plugins"   /></a><p class="wp-caption-text">Clase Cargadora de Plugins</p></div>
<p>Código comentado de la clase CargadorPlugins:</p>
<p><pre class="brush: java;">
package ar.lefunes.plugins;

import ar.lefunes.classpath.ModificadorClassPath;
import java.io.File;
import java.io.FilenameFilter;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.ServiceLoader;
import java.util.Vector;

public class CargadorPlugins {

    private static final String EXTENSION_JAR = &quot;.jar&quot;;
    private static final String DIRECTORIO_PLUGINS = &quot;plugins/&quot;;

    /**
     * carga los plugins encontrados al classpath
     * @return true si se cargaron los plugins,
     *         false en caso de existir algun error
     */
    public static boolean cargarPlugins() {
        boolean cargados = true;
        try {
            //obtiene el listado de archivos .jar dentro del directorio
            File[] jars = buscarPlugins();

            if (jars.length &gt; 0) {
                ModificadorClassPath cp = new ModificadorClassPath();

                //a cada jar lo incluye al classpath
                for (File jar : jars) {
                    try {
                        cp.addArchivo(jar);
                    } catch (MalformedURLException ex) {
                        System.err.println(&quot;URL incorrecta: &quot; +
                                ex.getMessage());
                    }
                }
            }
        } catch (Exception ex) {
            cargados = false;
            System.err.println(ex.getMessage());
        }
        return cargados;
    }

    /**
     * Busca todos los jars de en el directorio de plugins
     * @return jars del directorio de plugins
     */
    private static File[] buscarPlugins() {
        //crea lista vacia de archivos
        Vector&lt; File &gt; vUrls = new Vector&lt; File &gt;();

        //si existe el directorio &quot;plugins&quot; continua
        File directorioPlugins = new File(DIRECTORIO_PLUGINS);
        if (directorioPlugins.exists() &amp;&amp; directorioPlugins.isDirectory()) {

            //obtiene todos los archivos con la extension .jar
            File[] jars = directorioPlugins.listFiles(new FilenameFilter() {

                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith(EXTENSION_JAR);
                }
            });

            //los agrega a la lista de archivos
            for (File jar : jars) {
                vUrls.add(jar);
            }
        }

        //retorna todos los archivos encontrados
        return vUrls.toArray(new File[0]);
    }

    /**
     * Obtiene todos los plugins IPluginMensaje encontrados en el classpath
     * @return lista de plugins encontrados e instanciados
     */
    public static IPluginMensaje[] getPlugins() {

        //cargamos todas las implementaciones de IPluginMensaje
        //encontradas en el classpath
        ServiceLoader&lt; IPluginMensaje &gt; sl =
                ServiceLoader.load(IPluginMensaje.class);
        sl.reload();

        //crea una lista vacia de plugins IPluginMensaje
        Vector&lt; IPluginMensaje &gt; vAv = new Vector&lt; IPluginMensaje &gt;();

        //cada plugin encontrado es agregado a la lista
        for (Iterator&lt; IPluginMensaje  &gt; it = sl.iterator(); it.hasNext();) {
            try {
                IPluginMensaje pl = it.next();
                vAv.add(pl);
            } catch (Exception ex) {
                System.err.println(&quot;Excepcion al obtener plugin: &quot; +
                        ex.getMessage());
            }
        }

        //retorna los plugins encontrados y cargados
        return vAv.toArray(new IPluginMensaje[0]);
    }
}
</pre></p>
<p>En este punto ya podemos incorporar la funcionalidad al método main del proyecto:</p>
<p>package ar.lefunes;</p>
<p><pre class="brush: java;">
package ar.lefunes;

import ar.lefunes.plugins.CargadorPlugins;
import ar.lefunes.plugins.IPluginMensaje;

public class Main {

    public static void main(String[] args) {
        System.out.println(&quot;-------------------------------&quot;);

        //se cargan los jars del directorio &quot;plugins&quot; al classpath
        boolean cargados = CargadorPlugins.cargarPlugins();

        if (cargados) {
            try {
                //obtiene una instancia de cada plugin IPluginMensaje encontrado
                IPluginMensaje[] avisadores = CargadorPlugins.getPlugins();

                if (avisadores.length &gt; 0) {
                    for (IPluginMensaje a : avisadores) {
                        //por cada plugin muestra la clase y el mensaje que devuelve
                        System.out.println(&quot;Plugin: \t&quot; + a.getClass().getCanonicalName());
                        System.out.println(&quot;Mensaje:\t&quot; + a.getMensaje());
                        System.out.println();
                    }
                } else {
                    System.out.println(&quot;No se Encontraron Plugins&quot;);
                }
            } catch (Exception ex) {
                System.err.println(&quot;Excepcion: &quot; + ex.getMessage());
                ex.printStackTrace();
            }
        } else {
            System.out.println(&quot;Plugins No Cargados&quot;);
        }

        System.out.println(&quot;-------------------------------&quot;);
    }
}
</pre></p>
<p>Si en este punto ejecutamos la aplicación obtendremos:</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
No se Encontraron Plugins<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p></blockquote>
<p>debido a que aún no hemos instalado ningun plugin en la misma.</p>
<h3>4- Crear los plugins</h3>
<p>Creamos un proyecto nuevo para nuestro primer plugin para la aplicación y agregamos la dependencia hacie el proyecto de la interface.</p>
<div id="attachment_192" class="wp-caption aligncenter" style="width: 295px"><a href="http://lefunes.files.wordpress.com/2008/09/004_primer_plugin.png"><img class="size-full wp-image-192" src="http://lefunes.files.wordpress.com/2008/09/004_primer_plugin.png?w=500" alt="Proyecto del Primer Plugin"   /></a><p class="wp-caption-text">Proyecto del Primer Plugin</p></div>
<p>Creamos la clase PluginNumeroUno que va ha ser la implementacion de la interface:</p>
<p><pre class="brush: java;">
package ar.lefunes.plugins.impl;

import ar.lefunes.plugins.IPluginMensaje;

public class PluginNumeroUno implements IPluginMensaje {
    public String getMensaje() {
        return &quot;Este es el plugin numero uno !!!&quot;;
    }
}
</pre></p>
<p>De esta manera, a pesar a que funcionalmente hemos finalizado con el plugin, este no será cargado en la aplicación debido a que le falta el descriptor para la clase ServiceLoader. Para ello creamos un archivo con el nombre de la interface dentro del directorio &#8220;META-INF.services&#8221;</p>
<div id="attachment_193" class="wp-caption aligncenter" style="width: 304px"><a href="http://lefunes.files.wordpress.com/2008/09/005_services.png"><img class="size-full wp-image-193" src="http://lefunes.files.wordpress.com/2008/09/005_services.png?w=500" alt="Agregando Descriptor de Servicio"   /></a><p class="wp-caption-text">Agregando Descriptor de Servicio</p></div>
<p>Donde adentro del mismo colocaremos una sola linea indicando el nombre calificado de la clase que implementa la interface:</p>
<div id="attachment_195" class="wp-caption aligncenter" style="width: 414px"><a href="http://lefunes.files.wordpress.com/2008/09/006_arch_serv.png"><img class="size-full wp-image-195" src="http://lefunes.files.wordpress.com/2008/09/006_arch_serv.png?w=500" alt="Definición del Descriptor de Servicio"   /></a><p class="wp-caption-text">Definición del Descriptor de Servicio</p></div>
<h3>5- Probar que todo funcione según lo previsto</h3>
<p>Para probar compilamos los tres proyectos y armamos la siguiente estructura de archivos:</p>
<div id="attachment_196" class="wp-caption aligncenter" style="width: 196px"><a href="http://lefunes.files.wordpress.com/2008/09/007_estr_arch.png"><img class="size-full wp-image-196" src="http://lefunes.files.wordpress.com/2008/09/007_estr_arch.png?w=500" alt="Estructura del Archivos del Ejemplo"   /></a><p class="wp-caption-text">Estructura del Archivos del Ejemplo</p></div>
<p>Al ejecutar, el programa mostrará por la consola:</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plugin:         ar.lefunes.plugins.impl.PluginNumeroUno<br />
Mensaje:        Este es el plugin numero uno !!!</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p></blockquote>
<p>con lo que podemos observar que cargo correctamente el plugin.</p>
<h3>Más de un plugin por JAR</h3>
<p>El paso de creación es similar al explicado para un solo plugin: Agregamos la dependencia al proyecto de la interface y creamos las clases que la  implementan:</p>
<div id="attachment_197" class="wp-caption aligncenter" style="width: 303px"><a href="http://lefunes.files.wordpress.com/2008/09/008_varios_plugins.png"><img class="size-full wp-image-197" src="http://lefunes.files.wordpress.com/2008/09/008_varios_plugins.png?w=500" alt="Proyecto con Dos Plugins"   /></a><p class="wp-caption-text">Proyecto con Dos Plugins</p></div>
<p>La diferencia radica solamente que dentro del descriptor para ServiceLoader indicaremos las clases, una por linea:</p>
<div id="attachment_198" class="wp-caption aligncenter" style="width: 411px"><a href="http://lefunes.files.wordpress.com/2008/09/009_descriptor_vp.png"><img class="size-full wp-image-198" src="http://lefunes.files.wordpress.com/2008/09/009_descriptor_vp.png?w=500" alt="Descriptor de los Dos Plugins"   /></a><p class="wp-caption-text">Descriptor de los Dos Plugins</p></div>
<p>Con lo que obtendremos al incorporar el Jar a la carpeta &#8220;plugins&#8221; del proyecto principal y ejecutando este último:</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plugin:         ar.lefunes.plugins.impl.PluginNumeroUno<br />
Mensaje:        Este es el plugin numero uno !!!</p>
<p>Plugin:         ar.lefunes.plugins.multiple.PluginDos<br />
Mensaje:        Plugin Nº 2</p>
<p>Plugin:         ar.lefunes.plugins.multiple.PluginTres<br />
Mensaje:        Plugin Nº 3</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p></blockquote>
<h3>Plugin por defecto</h3>
<p>Devido a que el propio proyecto principal se encuentra dentro del classpath (y por esto ServiceLoader lo revisará) podemos brindar un plugin que se cargará aún cuando no exista ningun jar en el directorio &#8220;plugins&#8221;.</p>
<p>Para ello creamos la clase que implementa el servicio y la indicamos con un descriptor dentro del proyecto:</p>
<div id="attachment_199" class="wp-caption aligncenter" style="width: 279px"><a href="http://lefunes.files.wordpress.com/2008/09/010_plugin_df.png"><img class="size-full wp-image-199" src="http://lefunes.files.wordpress.com/2008/09/010_plugin_df.png?w=500" alt="Agregando Plugin por Defecto"   /></a><p class="wp-caption-text">Agregando Plugin por Defecto</p></div>
<div id="attachment_200" class="wp-caption aligncenter" style="width: 413px"><a href="http://lefunes.files.wordpress.com/2008/09/011_plugin_df.png"><img class="size-full wp-image-200" src="http://lefunes.files.wordpress.com/2008/09/011_plugin_df.png?w=500" alt="Descriptor del Plugin por Defecto"   /></a><p class="wp-caption-text">Descriptor del Plugin por Defecto</p></div>
<p>Donde obtendremos en la salida al ejecutar sin ningún plugin en el directorio &#8220;plugins&#8221;:</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plugin:         ar.lefunes.plugins.defecto.PluginDefecto<br />
Mensaje:        PLUGIN POR DEFECTO</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p></blockquote>
<h3>Recursos</h3>
<p>Se puede descargar el proyecto de ejemplo (aprox. 71kB) de: <a href="http://lefunes.googlecode.com/files/app_plugins.zip">http://lefunes.googlecode.com/files/app_plugins.zip</a>. En él se incluyen tanto los jars para ejecutar el ejemplo directamente como los proyectos en NetBeans 6.5 creados para este post.</p>
<p>Espero les sirva.<br />
Hasta la proxima.</p>
<h3>Más Info</h3>
<ul>
<li><a href="http://java.sun.com/javase/6/docs/api/java/util/ServiceLoader.html">Javadoc ServiceLoader </a></li>
<li><a href="http://www.talios.com/using_serviceloaders_a_build_a_modular_applications.htm">Using the ServiceLoader API to build a modular applications </a></li>
<li><a href="http://simonmartinelli.blogspot.com/2008/04/java-se-6-serviceloader.html">Java SE 6 ServiceLoader </a></li>
<li><a href="http://lefunes.wordpress.com/2008/08/12/modificando-el-classpath-dinamicamente-en-tiempo-de-ejecucion/">Modificando el classpath dinamicamente en tiempo de ejecución</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/182/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/182/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=182&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/09/03/creando-un-sistema-con-plugins-en-java/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/000_proy_ini.png" medium="image">
			<media:title type="html">Proyecto Principal</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/001_interface.png" medium="image">
			<media:title type="html">Proyecto de la Interface</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/002_incluir_int.png" medium="image">
			<media:title type="html">Incluyendo el proy. de la interface en el proy. principal</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/003_carg_plugs.png" medium="image">
			<media:title type="html">Clase Cargadora de Plugins</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/004_primer_plugin.png" medium="image">
			<media:title type="html">Proyecto del Primer Plugin</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/005_services.png" medium="image">
			<media:title type="html">Agregando Descriptor de Servicio</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/006_arch_serv.png" medium="image">
			<media:title type="html">Definición del Descriptor de Servicio</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/007_estr_arch.png" medium="image">
			<media:title type="html">Estructura del Archivos del Ejemplo</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/008_varios_plugins.png" medium="image">
			<media:title type="html">Proyecto con Dos Plugins</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/009_descriptor_vp.png" medium="image">
			<media:title type="html">Descriptor de los Dos Plugins</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/010_plugin_df.png" medium="image">
			<media:title type="html">Agregando Plugin por Defecto</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/09/011_plugin_df.png" medium="image">
			<media:title type="html">Descriptor del Plugin por Defecto</media:title>
		</media:content>
	</item>
		<item>
		<title>Modificando el classpath dinamicamente en tiempo de ejecución</title>
		<link>http://lefunes.wordpress.com/2008/08/12/modificando-el-classpath-dinamicamente-en-tiempo-de-ejecucion/</link>
		<comments>http://lefunes.wordpress.com/2008/08/12/modificando-el-classpath-dinamicamente-en-tiempo-de-ejecucion/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 13:18:04 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[classloader]]></category>
		<category><![CDATA[classpath]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=175</guid>
		<description><![CDATA[Cada vez que se necesita usar una clase determinada durante la ejecución de un programa la JVM llama a su cargador de clases para que este la busque y la deje disponible (la cargue en memoria). El cargador de clases que la maquina virtual utiliza por defecto es una instancia de una subclase de URLClassLoader [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=175&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cada vez que se necesita usar una clase determinada durante la ejecución de un programa la JVM llama a su cargador de clases para que este la busque y la deje disponible (la cargue en memoria).</p>
<p>El cargador de clases que la maquina virtual utiliza por defecto es una instancia de una subclase de URLClassLoader (y por ende subclase de ClassLoader también). El funcionamiento básico del URLClassLoader es buscar las clases dentro del listado de URLs que posee registrado. A este listado de URLs es lo que conocemos como classpath.</p>
<p>Dentro del classpath podemos encontrarnos con los siguientes tipos de URLs:</p>
<ul>
<li> URL hacia un directorio (ruta terminada en &#8216;/&#8217;): En este caso se incluyen en el classpath todos los archivos .class que se encuentren dentro del directorio</li>
<li> URL a un JAR (ruta terminada con &#8220;.jar&#8221;): En este caso se incluyen al classpath todos los archivos .class que se encuentren dentro del archivo</li>
<li> URL a un JAR (ruta no termina en &#8216;/&#8217; o &#8220;.jar&#8221;): Se presume que es un jar por lo que antes de procesarla se le concatena &#8220;.jar&#8221;. Después se trata igual que el caso anterior.</li>
</ul>
<p>Por defecto encontramos en el classpath al ejecutar una aplicación solo el JAR o directorio que contiene la clase con el método Main. Para ver esto podemos ejecutar el siguiente código:</p>
<p><pre class="brush: java;">
	System.out.println(&quot;ClassPath:&quot;);
	for (URL url : ((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs()) {
		System.out.println(&quot;\t&quot; + url.getFile());
	}
</pre></p>
<p>Lo que hacemos en este ejemplo es tomar el cargador de clases del sistema, castearlo a URLClassLoader, obtener el listado de URLs, y a cada URL la mostramos por la consola.</p>
<p>Agregar nuevas rutas estáticas al classpath es simple, Existen dos formas:</p>
<ul>
<li> agregar la opción -cp seguido de las librerías que deseamos incluir (separadas por &#8220;;&#8221;) al ejecutar el comando java:</li>
</ul>
<p style="text-align:center;">java <strong>-cp unJar.jar;otroJar.jar;unDirectorio/</strong> claseInicial</p>
<ul>
<li> otra forma es si vamos a ejecutar un JAR es incluir el nombre de las librerías en el manifiesto del archivo bajo la propiedad &#8220;Class-Path&#8221;, separando cada clase por espacio:</li>
</ul>
<p style="text-align:center;"><strong>Class-Path: unJar.jar otroJar.jar unDirectorio/</strong></p>
<p>Pero si lo que queremos es agregar nuevas rutas en tiempo de ejecución (porque solo durante la ejecución del programa podemos determinar que archivos necesitamos cargar) deberemos apelar al cargador de clases, que gracias a la interfase URLClassLoader posee un método addURL. El problema básico que nos encontramos ahora es que es un método declarado como protegido, por lo cual para poder utilizarlo deberemos apelar a reflexión. Por ejemplo:</p>
<p><pre class="brush: java;">
	URL url = (new File(&quot;algunJar.jar&quot;)).toURI().toURL();

	Method metodo = URLClassLoader.class.getDeclaredMethod(
		&quot;addURL&quot;, new Class[]{URL.class});
	metodo.setAccessible(true);
	metodo.invoke((URLClassLoader) ClassLoader.getSystemClassLoader()
		, new Object[]{url});
</pre></p>
<p>Donde básicamente para agregar la ruta al archivo &#8220;algunJar.jar&#8221; debemos obtener el método addURL con un parámetro del tipo URL y guardando una referencia en la variable &#8220;metodo&#8221;, lo habilitamos para poder invocarlo, y finalmente lo invocamos en el cargador de clases del sistema usando como parámetro la URL proveniente del archivo a agregar (URL que guardamos en la variable &#8220;url&#8221; en la primera linea)</p>
<p>Podemos preparar una clase que nos permita agregar facilmente ya sean URLs, archivos (File) o con solo el nombre del archivo:</p>
<p><pre class="brush: java;">
	package ar.lefunes.classpath;

	import java.io.File;
	import java.lang.reflect.Method;
	import java.net.MalformedURLException;
	import java.net.URL;
	import java.net.URLClassLoader;

	public class ModificadorClassPath {

	    private static final String METODO_ADD_URL = &quot;addURL&quot;;
	    private static final Class[] PARAMETRO_METODO = new Class[]{URL.class};
	    private final URLClassLoader loader;
	    private final Method metodoAdd;

	    public ModificadorClassPath() throws NoSuchMethodException {
	        loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
	        metodoAdd = URLClassLoader.class.getDeclaredMethod(
                                           METODO_ADD_URL, PARAMETRO_METODO);
	        metodoAdd.setAccessible(true);
	    }

	    public URL[] getURLs() {
	        return loader.getURLs();
	    }

	    public void addURL(URL url) {
	        if (url != null) {
	            try {
	                metodoAdd.invoke(loader, new Object[]{url});
	            } catch (Exception ex) {
	                System.err.println(&quot;Excepcion al guardar URL: &quot; + 
                                                               ex.getLocalizedMessage());
	            }
	        }
	    }

	    public void addURLs(URL[] urls) {
	        if (urls != null) {
	            for (URL url : urls) {
	                addURL(url);
	            }
	        }
	    }

	    public void addArchivo(File archivo) throws MalformedURLException {
	        if (archivo != null) {
	            addURL(archivo.toURI().toURL());
	        }
	    }

	    public void addArchivo(String nombreArchivo) throws MalformedURLException {
	        addArchivo(new File(nombreArchivo));
	    }
	}
</pre></p>
<p>Además con el método getURLs obtendremos el classpath actual de la aplicación.</p>
<p>Un ejemplo de uso sería:</p>
<p><pre class="brush: java;">
	ModificadorClassPath mc = new ModificadorClassPath();

	mc.addArchivo(&quot;algunJar.jar&quot;);

	File unArchivo = new File(&quot;otroJar.jar&quot;);
	mc.addArchivo(unArchivo);

	String dir = &quot;elPath&quot; + File.separator + &quot;unDirectorio&quot; + File.separator;
	File unDirectorio = new File(dir);
	mc.addArchivo(unDirectorio);

	System.out.println(&quot;ClassPath:&quot;);
	for (URL url : mc.getURLs()) {
		System.out.println(&quot;\t&quot; + url.getFile());
	}
</pre></p>
<p>Hasta la próxima<br />
Saludos</p>
<h3>Más Info</h3>
<ul>
<li> <a href="http://java.sun.com/javase/6/docs/api/java/net/URLClassLoader.html">Javadoc URLClassLoader</a></li>
<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html">Javadoc ClassLoader</a></li>
<li> <a href="http://www.chuidiang.com/java/classpath/classpath.php">Funcionamiento de CLASSPATH, package y jar &lt;&lt; chuidiang</a></li>
<li> <a href="http://jimlife.wordpress.com/2007/12/19/java-adding-new-classpath-at-runtime/">Java &#8211; Adding new Classpath at Runtime &lt;&lt; Jim&#8217;s Life</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/175/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/175/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=175&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/08/12/modificando-el-classpath-dinamicamente-en-tiempo-de-ejecucion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Inclusión condicional de bloques de código en Java mediante constantes</title>
		<link>http://lefunes.wordpress.com/2008/07/31/inclusion-condicional-de-bloques-de-codigo-en-java-mediante-constantes/</link>
		<comments>http://lefunes.wordpress.com/2008/07/31/inclusion-condicional-de-bloques-de-codigo-en-java-mediante-constantes/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 12:02:48 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[constantes]]></category>
		<category><![CDATA[optimizacion]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=168</guid>
		<description><![CDATA[Java a diferencia de otros lenguajes(como C, C++, &#8230;) no poseé directivas de preprocesador que permiten incluir/excluir bloques de sentencias a partir de cierta condición. Lo que podemos realizar es simular un comportamiento parecido conociendo las optimizaciones llevadas a cabo por el compilador al procesar nuestro codigo fuente. Como hemos visto anteriormente, cada vez que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=168&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Java a diferencia de otros lenguajes(como C, C++, &#8230;) no poseé directivas de preprocesador que permiten incluir/excluir bloques de sentencias a partir de cierta condición.</p>
<p>Lo que podemos realizar es simular un comportamiento parecido conociendo las optimizaciones llevadas a cabo por el compilador al procesar nuestro codigo fuente.<span id="more-168"></span></p>
<p>Como <a href="http://lefunes.wordpress.com/2008/05/08/concatenacion-de-cadenas-en-java-optimizaciones-realizadas-por-el-compilador/">hemos visto anteriormente</a>, cada vez que el compilador tenga la posibilidad de inferir que algo va a ser invariante a lo largo de la ejecución del programa, realizara una optimización que no afecten los resultados del mismo. Por ejemplo si encuentra:</p>
<p><pre class="brush: java;">
String estadoInicial = &quot;Estado Inicial: &quot; + 25;
int tiempoEspera = 15 * 60 * 1000; //15 minutos en milisegundos
</pre></p>
<p>al realizar la compilación quedará:</p>
<p><pre class="brush: java;">
String estadoInicial = &quot;Estado Inicial: 25&quot;;
int tiempoEspera = 900000;
</pre></p>
<p>De esta misma forma si puede resolver la condición de un if, puede decidir si la condición es true que bloque se debe ejecutar siempre:</p>
<p><pre class="brush: java;">
System.out.println(&quot;Antes&quot;);
if(true){
	System.out.println(&quot;Ejecutando...&quot;);
}
System.out.println(&quot;Despues&quot;);
</pre></p>
<p>compilando:</p>
<p><pre class="brush: java;">
System.out.println(&quot;Antes&quot;);
System.out.println(&quot;Ejecutando...&quot;);
System.out.println(&quot;Despues&quot;);
</pre></p>
<p>Lo interesante se produce en el caso contrario, si encuentra un false en la condición, el bloque no es incluido en los .class generados:</p>
<p><pre class="brush: java;">
System.out.println(&quot;Antes&quot;);
if(false){
	System.out.println(&quot;Ejecutando...&quot;);
}
System.out.println(&quot;Despues&quot;);
</pre></p>
<p>dejarando:</p>
<p><pre class="brush: java;">
System.out.println(&quot;Antes&quot;);
System.out.println(&quot;Despues&quot;);
</pre></p>
<p>Para que puede servirnos esto?</p>
<p>Entre otras cosas para realizar debug de la aplicación permitiendo que, según como se encuentre una costante, se incluyan ciertas sentencias o no.</p>
<p>Veamos un ejemplo donde se utilizan dos tipos de constantes, una booleana y otra entera:</p>
<p><pre class="brush: java;">
class A{
	public static final boolean EN_DEBUG = false;
	public static final int UN_NIVEL = 25;
	//...
	public void unMetodo(){
		//...
		if(UN_NIVEL &lt; 100) hacerAlgo1();
		if(UN_NIVEL &gt; 75) hacerAlgo2();
		//...
	}
}

class B{
	public void unMetodo(){
		//...
		int res = otroMetodo1();
		if(A.EN_DEBUG){
			System.out.println(&quot;El resultado de otroMetodo1 es: &quot; + res);
		}
		otroMetodo2(res);
		//...
	}
}
</pre></p>
<p>Al actuar el compilador nos quedará:</p>
<p><pre class="brush: java;">
class A{
	public static final boolean EN_DEBUG = false;
	public static final int UN_NIVEL = 25;
	//...
	public void unMetodo(){
		//...
		hacerAlgo1();
		//...
	}
}

class B{
	public void unMetodo(){
		//...
		int res = otroMetodo1();
		otroMetodo2(res);
		//...
	}
}
</pre></p>
<p>permitiendonos ejecutar determinado código, que cuando la aplicación se encuentre en produccion no lo ejecutará pero tampoco tendrá problemas de rendimiento, ya que ese codigo directamente no es incluido en la solución final.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/168/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/168/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=168&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/07/31/inclusion-condicional-de-bloques-de-codigo-en-java-mediante-constantes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Code-Folding en NetBeans</title>
		<link>http://lefunes.wordpress.com/2008/07/01/code-folding-en-netbeans/</link>
		<comments>http://lefunes.wordpress.com/2008/07/01/code-folding-en-netbeans/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 19:16:24 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[code folding]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[region]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=154</guid>
		<description><![CDATA[Si buscamos que NetBeans oculte nuestro código al igual que realiza con el código autogenerado debemos agregar solamente dos comentarios, que incluyen un tag de apertura y uno de cierre (al estilo XML) al inicio y fin respectivamente de la porción de código a ocultar: comentario inicio: //&#60;editor-fold defaultstate=&#8221;collapsed&#8221; desc=&#8221;Alguna Descripción&#8221;&#62; comentario fin: //&#60;/editor-fold&#62; en [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=154&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://lefunes.files.wordpress.com/2008/07/code_folding.png"><img class="aligncenter size-full wp-image-155" src="http://lefunes.files.wordpress.com/2008/07/code_folding.png?w=500" alt="Code-Folding en NetBeans"   /></a></p>
<p>Si buscamos que NetBeans oculte nuestro código al igual que realiza con el código autogenerado debemos agregar solamente dos comentarios, que incluyen un tag de apertura y uno de cierre (al estilo XML) al inicio y fin respectivamente de la porción de código a ocultar:</p>
<p><strong>comentario inicio:</strong> <span style="color:#008000;"><strong><span>//&lt;editor-fold defaultstate=&#8221;collapsed&#8221; desc=&#8221;Alguna Descripción&#8221;&gt;</span></strong></span></p>
<p><strong>comentario fin:</strong> <span style="color:#008000;"><strong><span>//&lt;/editor</span></strong><strong><span>-fold</span></strong><strong><span>&gt;</span></strong></span></p>
<p>en donde incluimos:</p>
<ul>
<li><strong><span style="color:#99cc00;">desc </span></strong>= Descripción que se mostrará al ocultar el texto</li>
<li><strong><span style="color:#99cc00;">defaultstate </span></strong>= si es igual a &#8220;collpsed&#8221;, cuando NetBeans abra el archivo esta sección se encontrará cerrada por defecto</li>
</ul>
<p>por ejemplo si tenemos el siguiente código al que queremos realizarle code folding:</p>
<p><pre class="brush: java;">
public static void main(final String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            Test011_ConfExterno t = new Test011_ConfExterno();
            t.setLocationRelativeTo(null);
            t.setVisible(true);
        }
    });
}
</pre></p>
<p>Simplemente agregamos los comentarios y listo:</p>
<p><pre class="brush: xml;">
// &lt;editorfold defaultstate=&quot;collapsed&quot; desc=&quot;Metodo Main&quot;&gt;
public static void main(final String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            Test011_ConfExterno t = new Test011_ConfExterno();
            t.setLocationRelativeTo(null);
            t.setVisible(true);
        }
    });
}
// &lt;/editorfold&gt;
</pre></p>
<p><a href="http://lefunes.files.wordpress.com/2008/07/code_folding2.png"><img class="aligncenter size-full wp-image-156" src="http://lefunes.files.wordpress.com/2008/07/code_folding2.png?w=500" alt="Code-Folding en NetBeans"   /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/154/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/154/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=154&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/07/01/code-folding-en-netbeans/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/07/code_folding.png" medium="image">
			<media:title type="html">Code-Folding en NetBeans</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/07/code_folding2.png" medium="image">
			<media:title type="html">Code-Folding en NetBeans</media:title>
		</media:content>
	</item>
		<item>
		<title>Conociendo a NetBeans Platform: Introducción</title>
		<link>http://lefunes.wordpress.com/2008/06/24/conociendo-a-netbeans-platform-introduccion/</link>
		<comments>http://lefunes.wordpress.com/2008/06/24/conociendo-a-netbeans-platform-introduccion/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 12:49:47 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Mendoza JUG]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[NetBeans Platform]]></category>
		<category><![CDATA[netbeans 6.1]]></category>
		<category><![CDATA[platform]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=151</guid>
		<description><![CDATA[En este articulo (el primero que escribo para el Mendoza JUG) vemos una pequeña introducción al desarrollo de aplicaciones y plugins sobre NetBeans Platform. En él se ven las ventajas de utilizar NetBeans Platform conociendo la filosofía en la que se basa, algunos proyectos ya desarrollados y muestra como crear plugins mediante el desarrollo de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=151&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En este articulo (el primero que escribo para el <a href="http://mendozajug.com.ar">Mendoza JUG</a>) vemos una pequeña introducción al desarrollo de aplicaciones y plugins sobre NetBeans Platform. En él se ven las ventajas de utilizar NetBeans Platform conociendo la filosofía en la que se basa, algunos proyectos ya desarrollados y muestra como crear plugins mediante el desarrollo de un pequeño ejemplo paso a paso.</p>
<p><a href="http://mendozajug.com.ar/portal/index.php?option=com_content&amp;task=view&amp;id=64&amp;Itemid=2">http://mendozajug.com.ar/portal/index.php?option=com_content&amp;task=view&amp;id=64&amp;Itemid=2</a></p>
<p>Desde ya muy agradecido a los owners del Mendoza JUG: Sebastian Arbona,  Andres Ceccoli y Javier Quiroga, y felicitaciones por la labor que están realizando para la comunidad de estos lados del mundo.</p>
<p><strong>Actualizado:</strong><br />
He dejado una copia del articulo en tutorial en el NetBeans Community Documentation (NCD): <a href="http://wiki.netbeans.org/ConociendoNetbeansPlatformIntroduccion">http://wiki.netbeans.org/ConociendoNetbeansPlatformIntroduccion</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/151/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/151/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/151/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=151&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/06/24/conociendo-a-netbeans-platform-introduccion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Rotando una imagen a través de java.awt.geom.AffineTransform</title>
		<link>http://lefunes.wordpress.com/2008/05/30/rotando-una-imagen-a-traves-de-javaawtgeomaffinetransform/</link>
		<comments>http://lefunes.wordpress.com/2008/05/30/rotando-una-imagen-a-traves-de-javaawtgeomaffinetransform/#comments</comments>
		<pubDate>Fri, 30 May 2008 14:03:56 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[AffineTransform]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[jdialog]]></category>
		<category><![CDATA[JFrame]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=147</guid>
		<description><![CDATA[Mediante AffineTransform se puede rotar una imagen dibujada sobre un Graphics. Esto se debe a que en realidad AffineTransform agrega una transformada al objeto Graphipcs. Para rotar se pasa a una instancia de AffineTransform a través de rotate(), pasándole el ángulo en radianes y el centro de rotación. Luego esta instancia se asigna al objeto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=147&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Mediante AffineTransform se puede rotar una imagen dibujada sobre un Graphics.<br />
Esto se debe a que en realidad AffineTransform agrega una transformada al objeto Graphipcs.</p>
<p>Para rotar se pasa a una instancia de AffineTransform a través de rotate(), pasándole el ángulo en radianes y el centro de rotación. Luego esta instancia se asigna al objeto Graphics (debemos asignársela a Graphics2D en realidad)</p>
<p><pre class="brush: java;">
AffineTransform at = new AffineTransform();
at.rotate(r, 100, 100); //se asigna el angulo y centro de rotacion
((Graphics2D) g).setTransform(at);
</pre></p>
<h3>Ejemplo</h3>
<p>Por ejemplo creamos un panel que muestra un cuadrado girado una determinada cantidad de grados llamada JPanelImagenGiratoria.java:</p>
<p><pre class="brush: java;">
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

public class JPanelImagenGiratoria extends javax.swing.JPanel {

    private int grados = 0;

    public int getGrados() {
        return grados;
    }

    public void setGrados(int grados) {
        this.grados = grados;
        repaint();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g); //se borra el contenido anterior

        double r = Math.toRadians(grados); //se convierte a radianes lo grados

        AffineTransform at = new AffineTransform();
        at.rotate(r, 100, 100); //se asigna el angulo y centro de rotacion
        ((Graphics2D) g).setTransform(at);

        //se dibuja
        g.setColor(Color.BLUE);
        g.drawRect(50, 50, 100, 100);

    }
}
</pre></p>
<p>y un frame para realizar la prueba del panel llamada PruebaPanel.java. Prestar atención al observador de cambios del JSlider agregado mediante addChangeListener():</p>
<p><pre class="brush: java;">
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JSlider;

public class PruebaPanel{

    public static void main(String[] args) {
        final JFrame jf = new JFrame(&quot;Prueba Imagen Giratoria&quot;);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(200, 250);

        final JPanelImagenGiratoria ig = new JPanelImagenGiratoria();

        final JSlider js = new JSlider(0, 360);
        js.addChangeListener(new javax.swing.event.ChangeListener() {

            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                ig.setGrados(js.getValue());
            }
        });
        js.setValue(0);

        jf.setLayout(new BorderLayout());
        jf.add(ig, BorderLayout.CENTER);
        jf.add(js, BorderLayout.SOUTH);

        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }
}
</pre></p>
<p>Imágenes:</p>
<p><img src="http://lefunes.files.wordpress.com/2008/05/affinetransform_a.png?w=500" alt=""   class="aligncenter size-full wp-image-148" /></p>
<p><img src="http://lefunes.files.wordpress.com/2008/05/affinetransform_c.png?w=500" alt=""   class="aligncenter size-full  wp-image-358" /></p>
<h3>Más Info</h3>
<ul>
<li><a href="http://java.sun.com/javase/6/docs/api/java/awt/geom/AffineTransform.html">Javadoc java.awt.geom.AffineTransform<br />
</a></li>
<li><a href="http://chuidiang.blogspot.com/2006/02/un-botn-girado.html">http://chuidiang.blogspot.com/2006/02/un-botn-girado.html</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/147/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/147/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=147&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/05/30/rotando-una-imagen-a-traves-de-javaawtgeomaffinetransform/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/affinetransform_a.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/affinetransform_c.png" medium="image" />
	</item>
		<item>
		<title>Cambiando el LookAndFeel de NetBeans</title>
		<link>http://lefunes.wordpress.com/2008/05/22/cambiando-el-lookandfeel-de-netbeans/</link>
		<comments>http://lefunes.wordpress.com/2008/05/22/cambiando-el-lookandfeel-de-netbeans/#comments</comments>
		<pubDate>Thu, 22 May 2008 18:50:54 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[l&f]]></category>
		<category><![CDATA[laf]]></category>
		<category><![CDATA[lookandfeel]]></category>
		<category><![CDATA[NimROD]]></category>
		<category><![CDATA[NimRODLookAndFeel]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=145</guid>
		<description><![CDATA[Para cambiar el L&#38;Fde NetBeans debemos editar el archivo de configuración de NB que se encuentra en: {PATH INSTALACION NB}/etc/netbeans.conf y agregamos a las opciones de inicio del IDE, al final del valor del parametro netbeans_default_options la clase: netbeans_default_options=" . . . --laf javax.swing.plaf.metal.MetalLookAndFeel" y si tenemos que agregar un L&#38;F desde un jar, por [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=145&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para cambiar el L&amp;Fde NetBeans debemos editar el archivo de configuración de NB que se encuentra en:</p>
<p style="text-align:center;"><span style="color:#993300;"><code>{PATH INSTALACION NB}/etc/netbeans.conf</code></span></p>
<p>y agregamos a las opciones de inicio del IDE, al final del valor del parametro  <strong>netbeans_default_options</strong> la clase:</p>
<p style="text-align:center;"><code><span style="color:#993300;">netbeans_default_options</span>=<span style="color:#008080;">" . . . --laf javax.swing.plaf.metal.MetalLookAndFeel"</span></code></p>
<p>y si tenemos que agregar un L&amp;F desde un jar, por ejemplo de la librería NimROD, lo siguiente:</p>
<p style="text-align:center;"><code><span style="color:#993300;">netbeans_default_options</span>=<span style="color:#008080;">" . . . --cp:p bin\nimrodlf-1.0c.jar --laf com.nilo.plaf.nimrod.NimRODLookAndFeel"</span></code></p>
<p>Acá les dejo un screenshot de NetBeans 6.1 usando NimROD como L&amp;F:</p>
<p style="text-align:center;"><img class="size-full wp-image-146" src="http://lefunes.files.wordpress.com/2008/05/laf.png?w=500" alt="Cambiando el LookAndFeel de NetBeans"   /></p>
<h3>Más Info</h3>
<ul>
<li><a href="http://personales.ya.com/nimrod/screenshots.html">NimRod LookAndFeel</a></li>
</ul>
<ul>
<li><a href="http://www.java-tips.org/other-api-tips/netbeans/can-i-run-netbeans-with-a-custom-look-and-feel.html"> Can I run NetBeans with a custom look and feel?</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/145/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/145/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=145&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/05/22/cambiando-el-lookandfeel-de-netbeans/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/laf.png" medium="image">
			<media:title type="html">Cambiando el LookAndFeel de NetBeans</media:title>
		</media:content>
	</item>
		<item>
		<title>Interpretando Big/Little Endian desde Java</title>
		<link>http://lefunes.wordpress.com/2008/05/21/interpretando-biglittle-endian-desde-java/</link>
		<comments>http://lefunes.wordpress.com/2008/05/21/interpretando-biglittle-endian-desde-java/#comments</comments>
		<pubDate>Wed, 21 May 2008 12:53:22 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[big-endian]]></category>
		<category><![CDATA[bigendian]]></category>
		<category><![CDATA[endianness]]></category>
		<category><![CDATA[little-endian]]></category>
		<category><![CDATA[littleendian]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=133</guid>
		<description><![CDATA[En el post anterior vimos las diferencias entre Big y Little Endian. En este veremos como interpretar desde Java un array de bytes (que puede provenir de un archivo, una comunicación de red, etc.) como una sucesión de datos, ya sea bytes, enteros, flotantes, etc. Para ello realizaremos las conversiones teniendo en cuenta el endianess [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=133&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://lefunes.wordpress.com/2008/05/13/endianess-big-endian-y-little-endian/">post anterior</a> vimos las diferencias entre Big y Little Endian.</p>
<p>En este veremos como interpretar desde Java un array de bytes (que puede provenir de un archivo, una comunicación de red, etc.) como una sucesión de datos, ya sea bytes, enteros, flotantes, etc. Para ello realizaremos las conversiones teniendo en cuenta el endianess con el cual vienen organizados los datos.</p>
<p><span id="more-133"></span></p>
<h3>Como leer byte por byte un número</h3>
<p>Primero que nada veremos como podemos leer cada byte de un dato. Deberemos tener en cuenta las posiciones en bits de cada byte:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-134" src="http://lefunes.files.wordpress.com/2008/05/00_orden.png?w=500" alt=""   /></p>
<p>Entonces si queremos leer por ejemplo el byte 2 de un entero debemos movernos al bit 16 y tomar el byte que necesitamos desde ese punto<br />
Una forma de realizar esto en Java sería desplazando a la derecha el valor que queremos leer tantos bits como sea necesario de forma que quede ubicado en el byte inicial, luego eliminar todo lo que este fuera del primer byte con una mascara, y finalmente convertirlo a byte.<br />
Gráficamente hacemos esto:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-135" src="http://lefunes.files.wordpress.com/2008/05/01_ejemplo.png?w=500" alt=""   /></p>
<p>En resumen:</p>
<p><pre class="brush: java;">
byte d = (byte)((a &gt;&gt; 16) &amp; 0xFF) ;
</pre></p>
<p>En el caso inverso, que queramos por ejemplo almacenar un byte en el byte 1 de un entero debemos movernos al bit 8 y a partir de ahí almacenar nuestro byte.<br />
En Java lo que hacemos es convertir el byte al tipo del objetivo (en el ejemplo es un entero), aplicar una mascara de byte para eliminar la basura generada y finalmente desplazarlo a la izquierda los bits necesarios.<br />
Gráficamente hacemos esto:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-136" src="http://lefunes.files.wordpress.com/2008/05/02_ejemplo.png?w=500" alt=""   /></p>
<p>En resumen:</p>
<p><pre class="brush: java;">
int d = (a &amp; 0xFF) &lt; &lt; 8;
</pre></p>
<p>Si deseamos combinar dos números usamos el operador OR por bits (|) entre ambos, de la forma:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-137" src="http://lefunes.files.wordpress.com/2008/05/03_ejemplo.png?w=500" alt=""   /></p>
<h3>Convirtiendo short</h3>
<p>Un short ocupa 2 bytes en Java por lo que tendremos que tener en cuenta el endianess del dato al momento de convertir desde/hacia un array de bytes.</p>
<h4>Short a byte[]</h4>
<p>Para obtener cada uno de los bytes realizamos:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-138" src="http://lefunes.files.wordpress.com/2008/05/04_obtener_bytes_short.png?w=500" alt=""   /></p>
<p>Para crear un array de bytes en big-endian, debemos almacenarlos en el orden en que los obtuvimos:</p>
<p><pre class="brush: java;">
byte[] sbe = new byte[]{ b1 ,  b0 };
</pre></p>
<p>y para crear un array de bytes en little-endian, debemos almacenarlos en el orden inverso en que los obtuvimos:</p>
<p><pre class="brush: java;">
byte[] sbe = new byte[]{ b0 ,  b1 };
</pre></p>
<p>En resumen, todos los conceptos en un solo método:</p>
<p><pre class="brush: java;">
public byte[] shortToByteArray(short valor, boolean bigEndian){
     byte[] resultado;
     byte b1 = (byte)(( valor &gt;&gt; 8 ) &amp; 0xFF) ;
     byte b0 = (byte)( valor  &amp; 0xFF) ;
     if(bigEndian){
          resultado = new byte[]{ b1 ,  b0 };
     } else{
          resultado = new byte[]{ b0 ,  b1 };
     }
     return resultado;
}
</pre></p>
<h4>Byte[] a short</h4>
<p>Si queremos obtener un short desde un array de bytes que viene ordenado en big-endian, debemos:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-139" src="http://lefunes.files.wordpress.com/2008/05/05_short_desde_bytes.png?w=500" alt=""   /></p>
<p>Y en caso de que el array de bytes este ordenado como little-endian:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-140" src="http://lefunes.files.wordpress.com/2008/05/06_short_desde_bytes_l.png?w=500" alt=""   /></p>
<p>En resumen, todos los conceptos en un solo método:</p>
<p><pre class="brush: java;">
public short byteArrayToShort(byte[] valor, boolean bigEndian){
     if(valor. length &lt; 2){
          throw new ArrayIndexOutOfBoundsException(valor. length);
     }
     short a, b ;
     if(bigEndian){
          a = (short)((valor[0] &amp; 0xFF) &lt;&lt; 8 );
          b =  (short) (valor[1] &amp; 0xFF);
     } else{
          a = (short)((valor[1] &amp; 0xFF) &lt;&lt; 8 );
          b =  (short) (valor[0] &amp; 0xFF) ;
     }
     return  (short)(a | b);
}
</pre></p>
<h3>Convirtiendo int</p>
<h4></h4>
<p>Un int ocupa 4 bytes en Java por lo que tendremos que tener en cuenta el endianess del dato al momento de convertir desde/hacia un array de bytes.</p>
<h4>Int a byte[]</h4>
<p>Para obtener cada uno de los bytes realizamos:</p>
<p style="text-align:center;"><img src="http://lefunes.files.wordpress.com/2008/05/07_obtener_bytes_int.png?w=500" alt=""   class="aligncenter size-full wp-image-141" /></p>
<p>Para crear un array de bytes en big-endian, debemos almacenarlos en el orden en que los obtuvimos:</p>
<p><pre class="brush: java;">
byte[] sbe = new byte[]{ b3 , b2 , b1 ,  b0 };
</pre></p>
<p>y para crear un array de bytes en little-endian, debemos almacenarlos en el orden inverso en que los obtuvimos:</p>
<p><pre class="brush: java;">
byte[] sbe = new byte[]{ b0 ,  b1 , b2 , b3 };
</pre></p>
<p>En resumen, todos los conceptos en un solo método:</p>
<p><pre class="brush: java;">
public byte[] intToByteArray(int valor, boolean bigEndian){
     byte[] resultado; 
     byte b3 = (byte)(( valor &gt;&gt; 24) &amp; 0xFF) ;
     byte b2 = (byte)(( valor &gt;&gt; 16) &amp; 0xFF) ;
     byte b1 = (byte)(( valor &gt;&gt; 8 ) &amp; 0xFF) ;
     byte b0 = (byte)( valor  &amp; 0xFF) ;
     if(bigEndian){
          resultado = new byte[]{ b3 , b2 , b1 , b0 };
     } else{
          resultado = new byte[]{ b0 ,  b1 , b2 , b3 };
     }
     return resultado;
}
</pre></p>
<h4>Byte[] a int</h4>
<p>Siguiendo el mismo concepto que cuando deseamos obtener un short, hacemos:</p>
<p><pre class="brush: java;">
public int byteArrayToInt(byte[] valor, boolean bigEndian){
     if(valor. length &lt; 4){
          throw new ArrayIndexOutOfBoundsException(valor. length);
     }
     int a, b, c, d;
     if(bigEndian){
          a = (valor[0] &amp; 0xFF) &lt;&lt; 24; 
          b = (valor[1] &amp; 0xFF) &lt;&lt; 16; 
          c = (valor[2] &amp; 0xFF) &lt;&lt; 8; 
          d =  valor[3] &amp; 0xFF;
     } else{
          a = (valor[3] &amp; 0xFF) &lt;&lt; 24; 
          b = (valor[2] &amp; 0xFF) &lt;&lt; 16; 
          c = (valor[1] &amp; 0xFF) &lt;&lt; 8; 
          d =  valor[0] &amp; 0xFF;
     } 
     return  a | b | c | d;
}
</pre></p>
<h3>Convirtiendo Long</p>
<h4></h4>
<p>Un long ocupa 8 bytes en Java por lo que como en los casos anteriores, tendremos que tener en cuenta el endianess del dato al momento de convertir desde/hacia un array de bytes.</p>
<h4>Long a byte[]</h4>
<p>Para obtener cada uno de los bytes realizamos:</p>
<p style="text-align:center;"><img src="http://lefunes.files.wordpress.com/2008/05/08_obtener_bytes_long.png?w=500" alt=""   class="aligncenter size-full wp-image-142" /></p>
<p>Para crear un array de bytes en big-endian, debemos almacenarlos en el orden en que los obtuvimos:</p>
<p><pre class="brush: java;">
byte[] sbe = new byte[]{ b7 , b6 , b5 , b4 , b3 , b2 , b1 ,  b0 };
</pre></p>
<p>y para crear un array de bytes en little-endian, debemos almacenarlos en el orden inverso en que los obtuvimos:</p>
<p><pre class="brush: java;">
byte[] sbe = new byte[]{ b0 ,  b1 , b2 , b3 , b4 , b5 , b6 , b7 };
</pre></p>
<p>En resumen, todos los conceptos en un solo método:</p>
<p><pre class="brush: java;">
public byte[] longToByteArray(long valor, boolean bigEndian){
     byte[] resultado; 
     byte b7 = (byte)(( valor &gt;&gt; 56) &amp; 0xFF) ;
     byte b6 = (byte)(( valor &gt;&gt; 48 ) &amp; 0xFF) ;
     byte b5 = (byte)(( valor &gt;&gt; 40) &amp; 0xFF) ; 
     byte b4 = (byte)(( valor &gt;&gt; 32) &amp; 0xFF) ;
     byte b3 = (byte)(( valor &gt;&gt; 24) &amp; 0xFF) ;
     byte b2 = (byte)(( valor &gt;&gt; 16) &amp; 0xFF) ;
     byte b1 = (byte)(( valor &gt;&gt; 8 ) &amp; 0xFF) ;
     byte b0 = (byte)( valor  &amp; 0xFF) ;
     if(bigEndian){
          resultado = new byte[]{ b7 , b6 , b5 , b4 , b3 , b2 , b1 , b0 };
     } else{
          resultado = new byte[]{ b0 ,  b1 , b2 , b3 , b4 , b5 , b6 , b7 };
     }
     return resultado;
}
</pre></p>
<h4>Byte[] a long</h4>
<p>Siguiendo los mismos conceptos anteriores, hacemos:</p>
<p><pre class="brush: java;">
public long byteArrayToLong(byte[] valor, boolean bigEndian){
     if(valor. length &lt; 8 ){
          throw new ArrayIndexOutOfBoundsException(valor. length);
     }
     long a, b, c, d, e, f, g, h;
     if(bigEndian){
          a = (long)(valor[0] &amp; 0xFF) &lt;&lt; 56;
          b = (long)(valor[1] &amp; 0xFF) &lt;&lt; 48;
          c = (long)(valor[2] &amp; 0xFF) &lt;&lt; 40;
          d = (long)(valor[3] &amp; 0xFF) &lt;&lt; 32;
          e = (long)(valor[4] &amp; 0xFF) &lt;&lt; 24;
          f = (long)(valor[5] &amp; 0xFF) &lt;&lt; 16;
          g = (long)(valor[6] &amp; 0xFF) &lt;&lt; 8;
          h = (long)(valor[7] &amp; 0xFF);
     } else {
          a = (long)(valor[7] &amp; 0xFF) &lt;&lt; 56;
          b = (long)(valor[6] &amp; 0xFF) &lt;&lt; 48;
          c = (long)(valor[5] &amp; 0xFF) &lt;&lt; 40;
          d = (long)(valor[4] &amp; 0xFF) &lt;&lt; 32;
          e = (long)(valor[3] &amp; 0xFF) &lt;&lt; 24;
          f = (long)(valor[2] &amp; 0xFF) &lt;&lt; 16;
          g = (long)(valor[1] &amp; 0xFF) &lt;&lt; 8;
          h = (long)(valor[0] &amp; 0xFF);
     } 
     return  a | b | c | d | e | f | g | h;
} 
</pre></p>
<h3>Convirtiendo Float</p>
<h4></h4>
<p>Un long ocupa 4 bytes en Java, al igual que el int, por lo que los mecanismos de conversión desde/hacia un array de bytes son también los mismos, cambiando solamente que antes debemos generar/obtener el entero equivalente a nuestro float (a nivel de bits).<br />
Para facilitarnos las cosas la clase Float posee métodos que realizan este trabajo por nosotros.</p>
<h4>Long a byte[] </h4>
<p>Lo que hacemos primero es obtener el int equivalente y luego realizamos el mismo procedimiento que antes:</p>
<p><pre class="brush: java;">
public byte[] floatToByteArray(float valor, boolean bigEndian){ 
     int enteroEquivalente = Float .floatToIntBits(valor);
     return intToByteArray(enteroEquivalente, bigEndian);
}
</pre></p>
<h4>Byte[] a float</h4>
<p>Nuevamente lo que hacemos es conseguir el int equivalente desde los bytes, y de ahí convertimos al float buscado:</p>
<p><pre class="brush: java;">
public float byteArrayToFloat(byte[] valor, boolean bigEndian){
      int enteroEquivalente = byteArrayToInt (valor, bigEndian);
     return Float.intBitsToFloat(enteroEquivalente);
} 
</pre></p>
<h3>Convirtiendo Double</p>
<h4></h4>
<p>Un double ocupa 8 bytes en Java, al igual que el long, repitiendo el paso anterior, asi como lo que los mecanismos de conversión desde/hacia un array de bytes son también los mismos, cambiando solamente que antes debemos generar/obtener el long equivalente a nuestro double (a nivel de bits).<br />
Para facilitarnos las cosas la clase Double posee métodos que realizan este trabajo por nosotros.</p>
<h4>Double a byte[]</h4>
<p>Lo que hacemos primero es obtener el long equivalente y luego realizamos el mismo procedimiento que antes:</p>
<p><pre class="brush: java;">
public byte[] doubleToByteArray(double valor, boolean bigEndian){ 
     long longEquivalente = Double.doubleToLongBits(valor);
     return longToByteArray(longEquivalente, bigEndian);
}
</pre></p>
<h4>Byte[] a double</h4>
<p>Nuevamente lo que hacemos es conseguir un long equivalente desde los bytes, y de ahí convertimos al double buscado:</p>
<p><pre class="brush: java;">
public double byteArrayToDouble(byte[] valor, boolean bigEndian){
      long longEquivalente = byteArrayToLong (valor, bigEndian);
     return Double.longBitsToDouble(longEquivalente);
 }
</pre></p>
</h3>
<h3>Una clase de ejemplo</p>
<h4></h4>
<p>Para realizar una mejora podríamos definir una enumeración que indique el orden de los bytes:</p>
<p><pre class="brush: java;">
public enum OrdenEndian {
    BIG_ENDIAN,
    LITTLE_ENDIAN
}
</pre></p>
<p>y generar una clase que contenga todos los métodos vistos anteriormente:</p>
<p><pre class="brush: java;">
public class Endianness {
    private static final int MASCARA_BYTE = 0xFF;

    /**
     * Convierte short a un byte array respetando el orden asignado
     * 
     * @param valor valor a convertir
     * @param endianness orden a utilizar en la conversion
     * @return array de bytes equivalentes a valor
     */
    public static byte[] shortToByteArray(short valor, OrdenEndian endianness) {
        byte[] resultado;
        byte b1 = (byte) ((valor &gt;&gt; 8 ) &amp; MASCARA_BYTE);
        byte b0 = (byte) (valor &amp; MASCARA_BYTE);
        if (endianness == OrdenEndian.BIG_ENDIAN) {
            resultado = new byte[]{b1, b0};
        } else {
            resultado = new byte[]{b0, b1};
        }
        return resultado;
    }

    /**
     * Convierte un array de bytes a un short respetando el orden asignado
     * 
     * @param valor array de bytes a convertir
     * @param endianness orden a utilizar en la conversion
     * @return valor equivalente despues de la conversion
     */
    public static short byteArrayToShort(byte[] valor, OrdenEndian endianness) {
        if (valor.length &lt; 2) {
            throw new ArrayIndexOutOfBoundsException(valor.length);
        }
        short a, b;
        if (endianness == OrdenEndian.BIG_ENDIAN) {
            a = (short) ((valor[0] &amp; MASCARA_BYTE) &lt;&lt; 8 );
            b = (short) (valor[1] &amp; MASCARA_BYTE);
        } else {
            a = (short) ((valor[1] &amp; MASCARA_BYTE) &lt;&lt; 8 );
            b = (short) (valor[0] &amp; MASCARA_BYTE);
        }
        return (short) (a | b);
    }

    /**
     * Convierte int a un byte array respetando el orden asignado
     * 
     * @param valor valor a convertir
     * @param endianness orden a utilizar en la conversion
     * @return array de bytes equivalentes a valor
     */
    public static byte[] intToByteArray(int valor, OrdenEndian endianness) {
        byte[] resultado;
        byte b3 = (byte) ((valor &gt;&gt; 24) &amp; MASCARA_BYTE);
        byte b2 = (byte) ((valor &gt;&gt; 16) &amp; MASCARA_BYTE);
        byte b1 = (byte) ((valor &gt;&gt; 8 ) &amp; MASCARA_BYTE);
        byte b0 = (byte) (valor &amp; MASCARA_BYTE);
        if (endianness == OrdenEndian.BIG_ENDIAN) {
            resultado = new byte[]{b3, b2, b1, b0};
        } else {
            resultado = new byte[]{b0, b1, b2, b3};
        }
        return resultado;
    }

    /**
     * Convierte un array de bytes a un int respetando el orden asignado
     * 
     * @param valor array de bytes a convertir
     * @param endianness orden a utilizar en la conversion
     * @return valor equivalente despues de la conversion
     */
    public static int byteArrayToInt(byte[] valor, OrdenEndian endianness) {
        if (valor.length &lt; 4) {
            throw new ArrayIndexOutOfBoundsException(valor.length);
        }
        int a, b, c, d;
        if (endianness == OrdenEndian.BIG_ENDIAN) {
            a = (valor[0] &amp; MASCARA_BYTE) &lt;&lt; 24;
            b = (valor[1] &amp; MASCARA_BYTE) &lt;&lt; 16;
            c = (valor[2] &amp; MASCARA_BYTE) &lt;&lt; 8;
            d = valor[3] &amp; MASCARA_BYTE;
        } else {
            a = (valor[3] &amp; MASCARA_BYTE) &lt;&lt; 24;
            b = (valor[2] &amp; MASCARA_BYTE) &lt;&lt; 16;
            c = (valor[1] &amp; MASCARA_BYTE) &lt;&lt; 8;
            d = valor[0] &amp; MASCARA_BYTE;
        }
        return a | b | c | d;
    }

    /**
     * Convierte long a un byte array respetando el orden asignado
     * 
     * @param valor valor a convertir
     * @param endianness orden a utilizar en la conversion
     * @return array de bytes equivalentes a valor
     */
    public static byte[] longToByteArray(long valor, OrdenEndian endianness) {
        byte[] resultado;
        byte b7 = (byte) ((valor &gt;&gt; 56) &amp; MASCARA_BYTE);
        byte b6 = (byte) ((valor &gt;&gt; 48 ) &amp; MASCARA_BYTE);
        byte b5 = (byte) ((valor &gt;&gt; 40) &amp; MASCARA_BYTE);
        byte b4 = (byte) ((valor &gt;&gt; 32) &amp; MASCARA_BYTE);
        byte b3 = (byte) ((valor &gt;&gt; 24) &amp; MASCARA_BYTE);
        byte b2 = (byte) ((valor &gt;&gt; 16) &amp; MASCARA_BYTE);
        byte b1 = (byte) ((valor &gt;&gt; 8 ) &amp; MASCARA_BYTE);
        byte b0 = (byte) (valor &amp; MASCARA_BYTE);
        if (endianness == OrdenEndian.BIG_ENDIAN) {
            resultado = new byte[]{b7, b6, b5, b4, b3, b2, b1, b0};
        } else {
            resultado = new byte[]{b0, b1, b2, b3, b4, b5, b6, b7};
        }
        return resultado;
    }

    /**
     * Convierte un array de bytes a un long respetando el orden asignado
     * 
     * @param valor array de bytes a convertir
     * @param endianness orden a utilizar en la conversion
     * @return valor equivalente despues de la conversion
     */
    public static long byteArrayToLong(byte[] valor, OrdenEndian endianness) {
        if (valor.length &lt; 8 ){
            throw new ArrayIndexOutOfBoundsException(valor.length);
        }
        long a, b, c, d, e, f, g, h;
        if (endianness == OrdenEndian.BIG_ENDIAN) {
            a = (long) (valor[0] &amp; MASCARA_BYTE) &lt;&lt; 56;
            b = (long) (valor[1] &amp; MASCARA_BYTE) &lt;&lt; 48;
            c = (long) (valor[2] &amp; MASCARA_BYTE) &lt;&lt; 40;
            d = (long) (valor[3] &amp; MASCARA_BYTE) &lt;&lt; 32;
            e = (long) (valor[4] &amp; MASCARA_BYTE) &lt;&lt; 24;
            f = (long) (valor[5] &amp; MASCARA_BYTE) &lt;&lt; 16;
            g = (long) (valor[6] &amp; MASCARA_BYTE) &lt;&lt; 8;
            h = (long) (valor[7] &amp; MASCARA_BYTE);
        } else {
            a = (long) (valor[7] &amp; MASCARA_BYTE) &lt;&lt; 56;
            b = (long) (valor[6] &amp; MASCARA_BYTE) &lt;&lt; 48;
            c = (long) (valor[5] &amp; MASCARA_BYTE) &lt;&lt; 40;
            d = (long) (valor[4] &amp; MASCARA_BYTE) &lt;&lt; 32;
            e = (long) (valor[3] &amp; MASCARA_BYTE) &lt;&lt; 24;
            f = (long) (valor[2] &amp; MASCARA_BYTE) &lt;&lt; 16;
            g = (long) (valor[1] &amp; MASCARA_BYTE) &lt;&lt; 8;
            h = (long) (valor[0] &amp; MASCARA_BYTE);
        }
        return a | b | c | d | e | f | g | h;
    }

    /**
     * Convierte float a un byte array respetando el orden asignado
     * 
     * @param valor valor a convertir
     * @param endianness orden a utilizar en la conversion
     * @return array de bytes equivalentes a valor
     */
    public static byte[] floatToByteArray(float valor, OrdenEndian endianness) {
        int enteroEquivalente = Float.floatToIntBits(valor);
        return intToByteArray(enteroEquivalente, endianness);
    }

    /**
     * Convierte un array de bytes a un float respetando el orden asignado
     * 
     * @param valor array de bytes a convertir
     * @param endianness orden a utilizar en la conversion
     * @return valor equivalente despues de la conversion
     */
    public static float byteArrayToFloat(byte[] valor, OrdenEndian endianness) {
        int enteroEquivalente = byteArrayToInt(valor, endianness);
        return Float.intBitsToFloat(enteroEquivalente);
    }

    /**
     * Convierte double a un byte array respetando el orden asignado
     * 
     * @param valor valor a convertir
     * @param endianness orden a utilizar en la conversion
     * @return array de bytes equivalentes a valor
     */
    public static byte[] doubleToByteArray(double valor, OrdenEndian endianness) {
        long longEquivalente = Double.doubleToLongBits(valor);
        return longToByteArray(longEquivalente, endianness);
    }

    /**
     * Convierte un array de bytes a un double respetando el orden asignado
     * 
     * @param valor array de bytes a convertir
     * @param endianness orden a utilizar en la conversion
     * @return valor equivalente despues de la conversion
     */
    public double byteArrayToDouble(byte[] valor, OrdenEndian endianness) {
        long longEquivalente = byteArrayToLong(valor, endianness);
        return Double.longBitsToDouble(longEquivalente);
    }
}
</pre></p>
<h3>Utilizando la clase de ejemplo</p>
<h4></h4>
<p>Por ejemplo si necesitamos leer/escribir desde una fuente de datos una clase, por ejemplo:</p>
<p><pre class="brush: java;">
public class ClaseEjemplo {
    private int a;
    private short b;
    private short c;

    public ClaseEjemplo() {
    }
    public ClaseEjemplo(int A, short B, short C) {
        this.a = A;
        this.b = B;
        this.c = C;
    }

    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    }

    public short getB() {
        return b;
    }
    public void setB(short b) {
        this.b = b;
    }

    public short getC() {
        return c;
    }
    public void setC(short c) {
        this.c = c;
    }

    @Override
    public String toString() {
        return &quot;ClaseEjemplo: &quot; + a + &quot; ; &quot; + b + &quot; ; &quot; + c;
    }
}
</pre></p>
<p>y supongamos que poseemos la siguiente condición de formato del array de datos:</p>
<p style="text-align:center;"><img src="http://lefunes.files.wordpress.com/2008/05/09_ejemplo.png?w=500" alt=""   class="aligncenter size-full wp-image-143" /></p>
<p>Podríamos escribir un parser valiéndonos de la clase de utilitaria que definimos recién:</p>
<p><pre class="brush: java;">
public class ParserClaseEjemplo {

    public static ClaseEjemplo toClaseEjemplo(byte[] valor) {
        ClaseEjemplo ce = new ClaseEjemplo();

        byte[] ba = Arrays.copyOfRange(valor, 0, 4);
        int a = Endianness.byteArrayToInt(ba, OrdenEndian.BIG_ENDIAN);
        ce.setA(a);

        byte[] bb = Arrays.copyOfRange(valor, 4, 6);
        short b = Endianness.byteArrayToShort(bb, OrdenEndian.LITTLE_ENDIAN);
        ce.setB(b);

        byte[] bc = Arrays.copyOfRange(valor, 6, 8 );
        short c = Endianness.byteArrayToShort(bc, OrdenEndian.BIG_ENDIAN);
        ce.setC(c);

        return ce;
    }

    public static byte[] toByteArray(ClaseEjemplo valor) {
        byte[] ba = new byte[8];

        byte[] a = Endianness.intToByteArray(valor.getA(), OrdenEndian.BIG_ENDIAN);
        byte[] b = Endianness.shortToByteArray(valor.getB(), OrdenEndian.LITTLE_ENDIAN);
        byte[] c = Endianness.shortToByteArray(valor.getC(), OrdenEndian.BIG_ENDIAN);

        int ini = 0;
        ini = copiarBytes(ba, a, ini);
        ini = copiarBytes(ba, b, ini);
        ini = copiarBytes(ba, c, ini);
        
        return ba;
    }
    
    private static int copiarBytes(final byte[] destino, final byte[] origen, final int inicio) {
        for (int i = 0; i &amp;lt; origen.length; i++) {
            destino[i + inicio] = origen[i];
        }
        return origen.length + inicio;
    }
}
</pre></p>
<p>Podemos probar que funciona ejecutando:</p>
<p><pre class="brush: java;">
public class Prueba {
    public static void main(String[] args) {
        byte a = (byte) 0x00;
        byte b = (byte) 0x00;
        byte c = (byte) 0x00;
        byte d = (byte) 0x01;
        byte e = (byte) 0x02;
        byte f = (byte) 0x00;
        byte g = (byte) 0x00;
        byte h = (byte) 0x03;
        byte[] bb = new byte[]{a, b, c, d, e, f, g, h};

        ClaseEjemplo ce = ParserClaseEjemplo.toClaseEjemplo(bb);
        System.out.println(ce.toString());
        
        byte[] cc = ParserClaseEjemplo.toByteArray(ce);
        System.out.println(Arrays.toString(cc));
    }
}
</pre></p>
<p>En un próximo post veremos como realizar lo mismo utilizando esta vez la clase ByteBuffer.<br />
Hasta la próxima.</p>
</h3>
<h3>Más Info</h3>
<p><a href="http://lefunes.wordpress.com/2008/05/13/endianess-big-endian-y-little-endian/">Endianess: Big-Endian y Little-Endian</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/133/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/133/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/133/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/133/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/133/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=133&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/05/21/interpretando-biglittle-endian-desde-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/00_orden.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/01_ejemplo.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/02_ejemplo.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/03_ejemplo.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/04_obtener_bytes_short.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/05_short_desde_bytes.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/06_short_desde_bytes_l.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/07_obtener_bytes_int.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/08_obtener_bytes_long.png" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/05/09_ejemplo.png" medium="image" />
	</item>
		<item>
		<title>Incluyendo una imagen de fondo en un JFrame</title>
		<link>http://lefunes.wordpress.com/2008/05/14/incluyendo-una-imagen-de-fondo-a-un-jframe/</link>
		<comments>http://lefunes.wordpress.com/2008/05/14/incluyendo-una-imagen-de-fondo-a-un-jframe/#comments</comments>
		<pubDate>Wed, 14 May 2008 20:59:02 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[JFrame]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=129</guid>
		<description><![CDATA[Para agregar una imagen de fondo a nuestro JFrame lo que hacemos es reemplazar el contenedor de componentes por defecto por uno propio. El contenedor que utilizaremos será el JPanel con una imagen de fondo que vimos, y el gestionará la imagen de fondo (jpg, png, gif, etc.) que queramos utilizar, quedándonos el código muy [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=129&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para agregar una imagen de fondo a nuestro JFrame lo que hacemos es reemplazar el contenedor de componentes por defecto por uno propio. </p>
<p>El contenedor que utilizaremos será el <a href="http://lefunes.wordpress.com/2008/11/22/incluyendo-una-imagen-de-fondo-en-un-jpanel/">JPanel con una imagen de fondo</a> que vimos, y el gestionará la imagen de fondo (jpg, png, gif, etc.) que queramos utilizar, quedándonos el código muy simple:</p>
<p><pre class="brush: java;">
package ar.lefunes.jframeconfondo;

import java.awt.Image;
import javax.swing.JFrame;

public class JFrameConFondo extends JFrame {

    private final JPanelConFondo contenedor = new JPanelConFondo();

    public JFrameConFondo() {
        setContentPane(contenedor);
    }

    public void setImagen(String nombreImagen) {
        contenedor.setImagen(nombreImagen);
    }

    public void setImagen(Image nuevaImagen) {
        contenedor.setImagen(nuevaImagen);
    }
}
</pre></p>
<div id="attachment_258" class="wp-caption aligncenter" style="width: 347px"><img src="http://lefunes.files.wordpress.com/2008/11/jff_01.png?w=500" alt="JFrame con una imagen de fondo" title="JFrame con una imagen de fondo"   class="size-full wp-image-258" /><p class="wp-caption-text">JFrame con una imagen de fondo</p></div>
<p>La imagen se redimensionará junto con el JFrame:</p>
<div id="attachment_259" class="wp-caption aligncenter" style="width: 554px"><img src="http://lefunes.files.wordpress.com/2008/11/jff_02.png?w=500" alt="JFrame redimensionado" title="JFrame redimensionado"   class="size-full wp-image-259" /><p class="wp-caption-text">JFrame redimensionado</p></div>
<p>La imagen de fondo puede ir cambiando cuando deseemos mediante los métodos <strong>setImagen()</strong></p>
<div id="attachment_260" class="wp-caption aligncenter" style="width: 391px"><img src="http://lefunes.files.wordpress.com/2008/11/jff_03.png?w=500" alt="Cambiando la imagen de fondo" title="Cambiando la imagen de fondo"   class="size-full wp-image-260" /><p class="wp-caption-text">Cambiando la imagen de fondo</p></div>
<p>En caso de que no cargemos ninguna imagen (o cargemos un null como imagen), el panel contenedor mostrará su fondo por defecto:</p>
<div id="attachment_261" class="wp-caption aligncenter" style="width: 392px"><img src="http://lefunes.files.wordpress.com/2008/11/jff_04.png?w=500" alt="JFrame con fondo por defecto" title="JFrame con fondo por defecto"   class="size-full wp-image-261" /><p class="wp-caption-text">JFrame con fondo por defecto</p></div>
<p>Se puede descargar el ejemplo de este post de la siguiente dirección (aprox. 38.7 KB): <a href="http://lefunes.googlecode.com/files/JFrame_con_imagen_fondo.zip">http://lefunes.googlecode.com/files/JFrame_con_imagen_fondo.zip</a></p>
<p>Espero les sirva.<br />
Saludos</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/129/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/129/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=129&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/05/14/incluyendo-una-imagen-de-fondo-a-un-jframe/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jff_01.png" medium="image">
			<media:title type="html">JFrame con una imagen de fondo</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jff_02.png" medium="image">
			<media:title type="html">JFrame redimensionado</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jff_03.png" medium="image">
			<media:title type="html">Cambiando la imagen de fondo</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/11/jff_04.png" medium="image">
			<media:title type="html">JFrame con fondo por defecto</media:title>
		</media:content>
	</item>
		<item>
		<title>Endianess: Big-Endian y Little-Endian</title>
		<link>http://lefunes.wordpress.com/2008/05/13/endianess-big-endian-y-little-endian/</link>
		<comments>http://lefunes.wordpress.com/2008/05/13/endianess-big-endian-y-little-endian/#comments</comments>
		<pubDate>Tue, 13 May 2008 11:43:12 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Informatica General]]></category>
		<category><![CDATA[big-endian]]></category>
		<category><![CDATA[bigendian]]></category>
		<category><![CDATA[endian]]></category>
		<category><![CDATA[endiannes]]></category>
		<category><![CDATA[little-endian]]></category>
		<category><![CDATA[littleendian]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=123</guid>
		<description><![CDATA[Al momento de escribir o leer un dato en un archivo desde nuestra aplicación nos encontramos con un problema: en que orden debemos almacenar los mismos?<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=123&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Al momento de escribir o leer un dato en un archivo desde nuestra aplicación nos encontramos con un problema: en que orden debemos almacenar los mismos?<span id="more-123"></span></p>
<p>El problema se hace más evidente al almacenar elementos de más de un byte, como números enteros, flotantes, etc.  Por ejemplo, si queremos almacenar el valor hexadecimal 0x1A2B3C4D  podemos rápidamente diferenciar dos órdenes:</p>
<ul>
<li>Del byte más al menos significativo (0x1A, 0x2C, 0x3C, 0x4D)</li>
<li>Del byte menos al más significativo (0x4D, 0x3C, 0x2C, 0x1A)</li>
</ul>
<p>A los formatos en que se almacenarán los datos se los conoce como <strong>Endianess</strong>. Siendo el formato del primer ejemplo (de + a &#8211; significativo) conocido como <strong>Big-Endian</strong>, mientras que al formato del segundo ejemplo (de &#8211; a + significativo) se lo conoce como <strong>Little-Endian</strong>.</p>
<p>Veamos más en detalle cada uno de estos:</p>
<h3>Big-Endian</h3>
<p>Este formato fue promovido entre otros por Motorola, y quiere decir “Del más grande al final”.</p>
<p>En el se comienza almacenando del byte más al menos significativo, exactamente igual que como solemos representar los números (por lo menos por estos lados del mundo), siendo el primer byte el que tiene más peso en la secuencia.</p>
<h4>Ejemplo 1: Array de datos de 1 Byte cada uno</h4>
<p>Si deseamos almacenar:<br />
0&#215;47, 0xEF, 0&#215;15, 0x2A, 0&#215;89, 0&#215;37, 0&#215;84, 0&#215;33</p>
<p>Obtendríamos:</p>
<p><a href="http://lefunes.files.wordpress.com/2008/05/030_endianess_001.png"><img class="aligncenter size-full wp-image-125" src="http://lefunes.files.wordpress.com/2008/05/030_endianess_001.png?w=500" alt="Array de datos de 1 Byte cada uno"   /></a></p>
<h4>Ejemplo 2: Array de datos de 2 Bytes cada uno</h4>
<p>Si deseamos almacenar:<br />
0x47EF, 0x152A, 0&#215;8937, 0&#215;8433</p>
<p>Obtendríamos:</p>
<p><a href="http://lefunes.files.wordpress.com/2008/05/030_endianess_002.png"><img class="aligncenter size-full wp-image-126" src="http://lefunes.files.wordpress.com/2008/05/030_endianess_002.png?w=500" alt="Array de datos de 2 Bytes cada uno"   /></a></p>
<h4>Ejemplo 3: Array de datos de 4 Bytes cada uno</h4>
<p>Si deseamos almacenar:<br />
0x47EF152A, 0&#215;89378433</p>
<p>Obtendríamos:</p>
<p><a href="http://lefunes.files.wordpress.com/2008/05/030_endianess_003.png"><img class="aligncenter size-full wp-image-127" src="http://lefunes.files.wordpress.com/2008/05/030_endianess_003.png?w=500" alt="Array de datos de 4 Bytes cada uno"   /></a></p>
<h3>Little-Endian</h3>
<p>Este formato fue promovido entre otros por Intel, y quiere decir “Desde el pequeño al final”.</p>
<p>En el se comienza almacenando del byte menos al más significativo, siendo el ultimo byte el que tiene más peso en la secuencia.</p>
<h4>Ejemplo 4: Array de datos de 1 Byte cada uno</h4>
<p>Si deseamos almacenar:<br />
0&#215;47, 0xEF, 0&#215;15, 0x2A, 0&#215;89, 0&#215;37, 0&#215;84, 0&#215;33</p>
<p>Obtendríamos:</p>
<p><a href="http://lefunes.files.wordpress.com/2008/05/030_endianess_001.png"><img class="aligncenter size-full wp-image-125" src="http://lefunes.files.wordpress.com/2008/05/030_endianess_001.png?w=500" alt="Array de datos de 1 Byte cada uno"   /></a></p>
<p>Como podemos observar no se nota la diferencia con el big-endian en este caso.</p>
<h4>Ejemplo 5: Array de datos de 2 Bytes cada uno</h4>
<p>Si deseamos almacenar:<br />
0x47EF, 0x152A, 0&#215;8937, 0&#215;8433</p>
<p>Obtendríamos:</p>
<p><a href="http://lefunes.files.wordpress.com/2008/05/030_endianess_004.png"><img class="aligncenter size-full wp-image-128" src="http://lefunes.files.wordpress.com/2008/05/030_endianess_004.png?w=500" alt="Array de datos de 2 Bytes cada uno"   /></a></p>
<p>Aquí se puede apreciar como se invierte el orden de los bytes, en comparación con el mismo dato en big-endian, en cada uno de los datos de 2 bytes.</p>
<h4>Ejemplo 6: Array de datos de 4 Bytes cada uno</h4>
<p>Si deseamos almacenar:<br />
0x47EF152A, 0&#215;89378433</p>
<p>Obtendríamos:</p>
<p><a href="http://lefunes.files.wordpress.com/2008/05/030_endianess_005.png"><img class="aligncenter size-full wp-image-124" src="http://lefunes.files.wordpress.com/2008/05/030_endianess_005.png?w=500" alt="Array de datos de 4 Bytes cada uno"   /></a></p>
<p>Aquí se puede apreciar como se invierte el orden de los bytes, en comparación con el mismo dato en big-endian, en cada uno de los datos de 4 bytes.</p>
<p>Hasta la proxima.</p>
<h3>Más Info</h3>
<ul>
<li><a title="Endianess" href="http://lefunes.wordpress.com/2008/05/21/interpretando-biglittle-endian-desde-java/">Interpretando Big/Little Endian desde Java</a></li>
<li><a title="Endianess" href="http://en.wikipedia.org/wiki/Endianness">Endianess (wikipedia)<br />
</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/123/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/123/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/123/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=123&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/05/13/endianess-big-endian-y-little-endian/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/030_endianess_001.png" medium="image">
			<media:title type="html">Array de datos de 1 Byte cada uno</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/030_endianess_002.png" medium="image">
			<media:title type="html">Array de datos de 2 Bytes cada uno</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/030_endianess_003.png" medium="image">
			<media:title type="html">Array de datos de 4 Bytes cada uno</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/030_endianess_001.png" medium="image">
			<media:title type="html">Array de datos de 1 Byte cada uno</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/030_endianess_004.png" medium="image">
			<media:title type="html">Array de datos de 2 Bytes cada uno</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/030_endianess_005.png" medium="image">
			<media:title type="html">Array de datos de 4 Bytes cada uno</media:title>
		</media:content>
	</item>
		<item>
		<title>Concatenación de cadenas en Java: Optimizaciones realizadas por el compilador</title>
		<link>http://lefunes.wordpress.com/2008/05/08/concatenacion-de-cadenas-en-java-optimizaciones-realizadas-por-el-compilador/</link>
		<comments>http://lefunes.wordpress.com/2008/05/08/concatenacion-de-cadenas-en-java-optimizaciones-realizadas-por-el-compilador/#comments</comments>
		<pubDate>Thu, 08 May 2008 12:38:23 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[concat]]></category>
		<category><![CDATA[concatenacion]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=121</guid>
		<description><![CDATA[La máquina virtual de Java no conoce al operador de concatenación (+) a la hora de ejecutar nuestro código.
Por este motivo el compilador se encarga de traducir los lugares donde este operador aparece por el código necesario que permite cumplir con el mismo propósito y de forma óptima.

Veremos cuales son las traducciones realizadas por el compilador y como podemos aprovecharlas a nuestro favor.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=121&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La máquina virtual de Java no conoce al <strong>operador de concatenación (+)</strong> a la hora de ejecutar nuestro código.<br />
Por este motivo el compilador se encarga de traducir los lugares donde este operador aparece por el código necesario que permite cumplir con el mismo propósito y de forma óptima.</p>
<p>Veremos cuales son las traducciones realizadas por el compilador y como podemos aprovecharlas a nuestro favor.</p>
<p><span id="more-121"></span></p>
<h3>Definiciones</h3>
<p>Antes de empezar vamos a definir algunos términos, que aunque no sean definidos de una forma muy formal, permitirán una mejor comprensión del texto:</p>
<ul>
<li> <strong>Cadena</strong>: Una instancia de la clase String. El objeto puede estar asignado a una variable, una constante o no (cadenas anónimas)</li>
</ul>
<ul>
<li><strong>Cadenas Anónimas</strong>: Cadenas no asociadas a ningún objeto que se crean y utilizan en la sentencia que se declaran, y luego son descartadas. Por ejemplo en:</li>
</ul>
<p><pre class="brush: java;">
System.out.println(&quot;Hola Mundo&quot;);
</pre></p>
<p>la cadena “Hola Mundo” se crea y utiliza en el System.out.println y luego se descarta.</p>
<h3>Caso 1: Concatenación de cadenas anónimas</h3>
<p>Aunque muchas veces parezca incorrecta o ineficiente la realización de concatenación de dos cadenas anónimas en vez de solo utilizar una, resulta ser lo mismo luego de pasar por el compilador, ya que si tenemos por ejemplo:</p>
<p><pre class="brush: java;">
//...
String a = &quot;Hola &quot; + &quot;Mundo&quot;;
//...
</pre></p>
<p>Se convertirá en:</p>
<p><pre class="brush: java;">
//...
String a = &quot;Hola Mundo&quot;;
//...
</pre></p>
<p>Viendo la maquina virtual lo mismo que si hubiéramos asignado “Hola Mundo” de primera intención.</p>
<p>Cuál puede ser el beneficio entonces de separar una cadena anónima en dos o más pedazos?</p>
<p>El beneficio que encontramos no es al momento de correr nuestro programa, sino al momento de mantenerlo, ya que en varias ocasiones permitirá una mejor lectura del mismo:</p>
<p><pre class="brush: java;">
String fragmento = &quot;Por lo tanto, los que no son totalmente conscientes de&quot;
+ &quot; la desventaja de servirse de las armas no pueden ser totalmente conscientes&quot;
+ &quot; de las ventajas de utilizarlas&quot;;
</pre></p>
<h3>Caso 2: Concatenación de constantes</h3>
<p>Si tenemos definidas constantes y las concatenamos con alguna cadena anónima o entre si, primero que nada el compilador realizará el intercambio de las constantes por la cadena que representan y luego las trata como el caso anterior. Por ejemplo:</p>
<p><pre class="brush: java;">
//...
public static final String CONSTANTE_A = &quot;AAA&quot;;
private static final String CONSTANTE_B = &quot;BBB&quot;;
public final String CONSTANTE_C = &quot;CCC&quot;;
private final String CONSTANTE_D = &quot;DDD&quot;;
//...
String a = &quot;Mostrar &quot; + CONSTANTE_A;
String b = &quot;Mostrar &quot; + CONSTANTE_B;
String c = &quot;Mostrar &quot; + CONSTANTE_C;
String d = &quot;Mostrar &quot; + CONSTANTE_D;
//...
</pre></p>
<p>Después de compilar tendremos:</p>
<p><pre class="brush: java;">
//...
String a = &quot;Mostrar AAA&quot;;
String b = &quot;Mostrar BBB&quot;;
String c = &quot;Mostrar CCC&quot;;
String d = &quot;Mostrar DDD&quot;;
//...
</pre></p>
<p>Por lo que podemos ver que no importa el modificador de acceso o si es estática o no, mientras el valor de la constante este disponible a la hora de compilar, será reemplazado en la concatenación.</p>
<p>En este caso podemos ver que la ventaja que trae aparejado el uso de constantes, que es permitirnos hacer mas legible nuestro código no va en contraposición a la de la tener una buena eficiencia en la ejecución, ya que no se perderá tiempo realizando concatenaciones porque fueron realizadas al momento de la compilación.</p>
<h3>Caso 3: Concatenación de variables finales</h3>
<p>Al igual que en el caso anterior si tenemos definida un variable declarada dentro de un método como final y esta la concatenamos, el compilador la reemplazara la referencia por el valor que representa la variable final.</p>
<p>Por ejemplo:</p>
<p><pre class="brush: java;">
//...
final String a = &quot; AAA&quot;;
String b = &quot;Mostrar &quot; + a;
//...
</pre></p>
<p>Después de compilar obtendremos:</p>
<p><pre class="brush: java;">
//...
final String a = &quot; AAA&quot;;
String b = &quot;Mostrar AAA&quot;;
//...
</pre></p>
<p>Otra vez tenemos las mismas ventajas del punto anterior.</p>
<h3>Caso 4: Concatenación de variables</h3>
<p>La concatenación de variables es distinta de los casos anteriores debido a que en ningún caso el compilador puede suponer el valor almacenado en las mismas. Como no sabe con que valores se contará, lo que se realiza a la hora de compilar es armar un StringBuilder e irle agregando las cadenas que queremos visualizar.</p>
<p>Esta vez la sentencia quedará preparada y la concatenación real se realizara durante el momento de ejecución.</p>
<p>Por ejemplo:</p>
<p><pre class="brush: java;">
//...
String v = &quot;Mundo&quot;;
//...
String resultado = &quot;Hola &quot; + v;
//...
</pre></p>
<p>Como se puede observar, no se puede asegurar de ninguna manera que el valor de “v” va a seguir siendo “Mundo” al momento de concatenar, por lo que el compilador genera:</p>
<p><pre class="brush: java;">
//...
String resultado = (new StringBuilder()).append(&quot;Hola &quot;).append(v).toString();
//...
</pre></p>
<p>Básicamente al ejecutarse realizará lo siguiente:</p>
<p>-  creará una instancia de StringBuilder<br />
-  le agregará la cadena “Hola “<br />
-  le agregará el valor de la variable “v”<br />
-  obtendrá la cadena resultante<br />
-  asignará la cadena resultante a la variable “resultado”</p>
<p>Nuevamente lo que ganamos es expresión a la hora de analizar nuestro código. Veamos un ejemplo ilustrativo de esto, es más difícil entender a simple vista esto:</p>
<p><pre class="brush: java;">
//...
String res = &quot;Cantidad de tomates: &quot;.concat(Integer.toString(cantidad));
//...
</pre></p>
<p>A esto:</p>
<p><pre class="brush: java;">
//...
String res = &quot;Cantidad de tomates: &quot; + cantidad;
//...
</pre></p>
<h3>Caso 5: Caso especial de concatenación de variables</h3>
<p>Existe un caso especial a la hora de realizar optimizaciones que el compilador no es capaz de darse cuenta, cuando a una variable debemos concatenarle cadenas en varias sentencias, por ejemplo un caso muy simple:</p>
<p><pre class="brush: java;">
//...
String e = &quot;Hola&quot;;
for (int i = 0; i &lt; 100; i++) {
     e += &quot; mundo&quot;;
}
//...
</pre></p>
<p>En este caso el código generado será el siguiente:</p>
<p><pre class="brush: java;">
//...
String e = &quot;Hola&quot;;
for (int i = 0; i &lt; 100; i++){
     e = (new StringBuilder()).append(e).append(&quot; mundo&quot;).toString();
}
//...
</pre></p>
<p>Por lo tanto cada nueva iteración del bucle lleva aparejado la creación de un StringBuilder para agregarles las cadenas y asignárselo a la variable “e”</p>
<p>Lo que se puede realizar es crear un StringBuilder e irlo asignando en cada iteración, de la forma:</p>
<p><pre class="brush: java;">
//...
StringBuilder sb = new StringBuilder(&quot;Hola&quot;);
for (int i = 0; i &lt; 100; i++) {
     sb.append(&quot; mundo&quot;);
}
String e = sb.toString();
//...
</pre></p>
<p>Entonces la ejecución se resume a:</p>
<p>- creará una instancia de StringBuilder con el texto inicial (“Hola”)<br />
- le agregará la cadena “ mundo“ una vez por cada bucle<br />
- obtendrá la cadena resultante<br />
- asignará la cadena resultante a la variable “e”</p>
<p>Como pudimos ver en un post anterior la principal ventaja es la gran cantidad de tiempo ganado durante la ejecución.</p>
<h3>Conclusión</p>
<h2></h2>
<p>Como pudimos ver a lo largo de estos casos es que es importante saber como el compilador hace las cosas para de esa forma poder preocuparnos más en el diseño/mantenimiento de nuestras aplicaciones a estar optimizando código que optimizara el compilador y que visualmente es difícil de comprender.</p>
<p><strong> Si es eficiente y bello, no se puede pedir más.</strong></p>
<h3>Nota Final</h3>
<p>Todo el análisis realizado sobre el funcionamiento del compilador a partir del código generado por el mismo, fue realizado utilizando Jad para descompilar los .class</p>
<p><a title="Integrar Jad a NetBeans mediante NBJAD" href="http://lefunes.wordpress.com/2008/05/06/integrar-jad-a-netbeans-mediante-nbjad/">En el post anterior hablamos como integrar Jad a NetBeans mediante NBJAD.</a></p>
<p>Es muy bueno el ejercicio de generar clases y analizar que optimizaciones realizo el compilador, ayudándonos esto a tener una base más amplia  donde apoyarnos a la hora de desarrollar.</p>
<p>Espero les sirva.<br />
Saludos.</p>
<h3>Más Info</h3>
<ul>
<li><a title="Permanent Link to Optimización al concatenar Strings en Java" rel="bookmark" href="../2008/03/13/optimizacion-al-concatenar-string-en-java/">Optimización al concatenar Strings en Java</a></li>
</ul>
<ul>
<li><a title="Permanent Link to Integrar Jad a NetBeans mediante NBJAD" rel="bookmark" href="../2008/05/06/integrar-jad-a-netbeans-mediante-nbjad/">Integrar Jad a NetBeans mediante NBJAD</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/121/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/121/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/121/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=121&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/05/08/concatenacion-de-cadenas-en-java-optimizaciones-realizadas-por-el-compilador/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Integrar Jad a NetBeans mediante NBJAD</title>
		<link>http://lefunes.wordpress.com/2008/05/06/integrar-jad-a-netbeans-mediante-nbjad/</link>
		<comments>http://lefunes.wordpress.com/2008/05/06/integrar-jad-a-netbeans-mediante-nbjad/#comments</comments>
		<pubDate>Tue, 06 May 2008 20:32:33 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[decompilador]]></category>
		<category><![CDATA[jad]]></category>
		<category><![CDATA[nbjad]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=114</guid>
		<description><![CDATA[Si deseamos integrar el decompilador Jad dentro de NetBeans podremos hacerlo mediante el plugin NBJAD.

En este post veremos como realizar esta integración<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=114&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:left;">Si deseamos integrar el decompilador <a title="Jad Hompage" href="http://www.kpdus.com/jad.html" target="_blank">Jad</a> dentro de <a title="NetBeans" href="http://www.netbeans.org">NetBeans</a> podremos hacerlo mediante el plugin NBJAD.</p>
<p style="text-align:left;">En este post veremos como realizar esta integración:<span id="more-114"></span></p>
<h3 style="text-align:left;">Bajar e Instalar Jad</h3>
<p style="text-align:left;">1- Descargamos Jad de la página oficial: <a title="Descargar Jad" href="http://www.kpdus.com/jad.html#download">http://www.kpdus.com/jad.html#download</a></p>
<p style="text-align:left;">2- Descomprimimos el archivo descargado en un directorio cualquiera, por ejemplo: <strong>D:\jad\</strong></p>
<h3 style="text-align:left;">Bajar e Instalar NBJAD</h3>
<p style="text-align:left;">1- Descargamos el plugin para NetBeans de aca: <a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=1177">http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=1177</a> (es un archivo .nbm)<a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=1177"><br />
</a></p>
<p style="text-align:left;">2- Lo instalamos en NetBeans:</p>
<ul style="text-align:left;">
<li>Entramos a <strong>Tools-&gt;Plugins</strong></li>
</ul>
<ul style="text-align:left;">
<li> En la pestaña <strong>Downloaded</strong>, hacemos click en el botón <strong>Add Plugins&#8230;</strong></li>
</ul>
<ul style="text-align:left;">
<li>Elegimos el plugin aceptamos y elegimos <strong>Install</strong> para instalar</li>
</ul>
<p style="text-align:left;"><a href="http://lefunes.files.wordpress.com/2008/05/nbjad_install.png"><img class="size-full wp-image-115 aligncenter" src="http://lefunes.files.wordpress.com/2008/05/nbjad_install.png?w=500" alt="Instalando NBJAD en NetBeans"   /></a></p>
<ul style="text-align:left;">
<li> Aparecerá un aviso de que ha fallado la validación del plugin, esta es solo una advertencia, pero el módulo ya ha sido instalado. Elegimos <strong>Continue</strong> y terminará la instalación.</li>
</ul>
<p style="text-align:left;"><a href="http://lefunes.files.wordpress.com/2008/05/nbjad_no_signed.png"><img class="aligncenter size-full wp-image-116" src="http://lefunes.files.wordpress.com/2008/05/nbjad_no_signed.png?w=500" alt="Falla la comprobación del módulo"   /></a></p>
<h3 style="text-align:left;">Configurar NBJAD</h3>
<p style="text-align:left;">Para configurar el modulo, lo que debemos realizar es acceder a <strong>Tools-&gt;Options</strong>, y una vez adentro elegir <strong>Decompile</strong></p>
<p style="text-align:left;"><a href="http://lefunes.files.wordpress.com/2008/05/nbjad_config.png"><img class="aligncenter size-full wp-image-117" src="http://lefunes.files.wordpress.com/2008/05/nbjad_config.png?w=500" alt="Configurando NBJAD"   /></a></p>
<p style="text-align:left;">Colocamos el path donde instalamos a Jad y las opciones que queramos utilizar al decompilar. Bajo la configuracion de las opciones se ve el listado de las mismas, esto nos ayudará en la configuración.</p>
<p style="text-align:left;">Una vez terminado aceptamos los cambios haciendo click en <strong>OK</strong></p>
<h3 style="text-align:left;">Utilizando NBJAD</h3>
<p style="text-align:left;">Para utilizar el módulo elegimos un archivo .class en <strong>Files</strong> que queramos descompilar.</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/05/nbjad_use_01.png"><img class="size-full wp-image-118 aligncenter" src="http://lefunes.files.wordpress.com/2008/05/nbjad_use_01.png?w=500" alt="Elegimos el archivo a descompilar"   /></a></p>
<p style="text-align:left;">Elegimos en el menú <strong>View-&gt;Decompile</strong>, y listo. aparecerá el código fuente generado por Jad.</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/05/nbjad_use_02.png"><img class="size-full wp-image-119 aligncenter" src="http://lefunes.files.wordpress.com/2008/05/nbjad_use_02.png?w=500" alt="Decompile !!!!"   /></a></p>
<p style="text-align:left;">Como última nota puedo decir que todos los archivos que vamos decompilando, NBJAD los va almacenando en <strong>${directorio de usuario}/.nbjad</strong></p>
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">Hasta la próxima.</p>
<h3 style="text-align:left;">Más Info</h3>
<ul style="text-align:left;">
<li><a title="Sandip Chitale's blog (scblog)" href="http://blogs.sun.com/scblog/entry/nbjad_simple_integration_with_jad" target="_blank">NBJAD (simple integration with Jad decompiler) module uploaded</a></li>
</ul>
<ul style="text-align:left;">
<li><a title="Jad Hompage" href="http://www.kpdus.com/jad.html" target="_blank">Jad</a></li>
</ul>
<p style="text-align:left;">
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/114/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/114/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/114/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=114&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/05/06/integrar-jad-a-netbeans-mediante-nbjad/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/nbjad_install.png" medium="image">
			<media:title type="html">Instalando NBJAD en NetBeans</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/nbjad_no_signed.png" medium="image">
			<media:title type="html">Falla la comprobación del módulo</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/nbjad_config.png" medium="image">
			<media:title type="html">Configurando NBJAD</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/nbjad_use_01.png" medium="image">
			<media:title type="html">Elegimos el archivo a descompilar</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/nbjad_use_02.png" medium="image">
			<media:title type="html">Decompile !!!!</media:title>
		</media:content>
	</item>
		<item>
		<title>Soporte para Librerías Compartidas en NetBeans 6.1</title>
		<link>http://lefunes.wordpress.com/2008/04/11/soporte-para-librerias-compartidas-en-netbeans-61/</link>
		<comments>http://lefunes.wordpress.com/2008/04/11/soporte-para-librerias-compartidas-en-netbeans-61/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 13:48:53 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NB 6.1]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[NB 6.1 Beta]]></category>
		<category><![CDATA[NetBEans 6.1 Beta]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=96</guid>
		<description><![CDATA[Cuantas veces nos encontramos al compartir un proyecto con problemas de librerías no referenciadas? Ó, cuantas veces nos piden/tenemos que pedir las dependencias de un proyecto que fue compartido, finalmente pasando jars, javadoc, sources, explicaciones de cómo se tiene que llamar las librerías, etc.? Muchas veces el problema no es notorio si nosotros somos lo que lo compartimos, pero si al momento de recibir un proyecto y encontrar que algo falta para poder compilar el mismo.

Por suerte, desde NB 6.1 Beta podemos ver una luz en el horizonte: Sharable Libraries.

Veremos un repaso a los problemas comunes que nos encontramos hoy en día y como resolverlos con esta nueva característica incorporada en esta versión del IDE.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=96&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:10pt;font-family:Arial;">Cuantas veces nos encontramos al compartir un proyecto con problemas de librerías no referenciadas? Ó, cuantas veces nos piden/tenemos que pedir las dependencias de un proyecto que fue compartido, finalmente pasando jars, javadoc, sources, explicaciones de cómo se tiene que llamar las librerías, etc.? Muchas veces el problema no es notorio si nosotros somos lo que lo compartimos, pero si al momento de recibir un proyecto y encontrar que algo falta para poder compilar el mismo.<br />
</span></p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/02_resolve_reference_problem.gif"><img class="aligncenter size-full wp-image-109" src="http://lefunes.files.wordpress.com/2008/04/02_resolve_reference_problem.gif?w=500" alt=""   /></a><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;">Por suerte, desde NB 6.1 Beta podemos ver una luz en el horizonte: </span><strong>Sharable Libraries<span style="font-size:10pt;font-family:Arial;">.</span></strong></p>
<p><span style="font-size:10pt;font-family:Arial;">Veremos un repaso a los problemas comunes que nos encontramos hoy en día y como resolverlos con esta nueva característica incorporada en esta versión del IDE.</span></p>
<p><span id="more-96"></span></p>
<h3>Conceptos Básicos</h3>
<p><span style="font-size:10pt;font-family:Arial;">Antes de ver un ejemplo, nos adentrarnos en el tema repasaremos algunos conceptos.<br />
</span></p>
<h4>Tipos de librerías</h4>
<p><span style="font-size:10pt;font-family:Arial;">Existen tres tipos de librerías que se pueden insertar dentro de un proyecto de NetBeans:<br />
</span></p>
<p style="margin-left:36pt;text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara2.gif"><img class="aligncenter size-full wp-image-86" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara2.gif?w=500" alt=""   /></a></p>
<ul>
<li><strong>Jar/Folder:</strong><span style="font-size:10pt;font-family:Arial;"> Aquí directamente se indica un .jar que se quiere agregar al proyecto.<br />
</span></li>
<li><strong>Project:</strong><span style="font-size:10pt;font-family:Arial;"> Este tipo hace referencia a otro proyecto de NetBeans.<br />
</span></li>
<li>
<div><strong>Library</strong><span style="font-size:10pt;font-family:Arial;">: Las librerías son conjuntos de .jar relacionados bajo un mismo nombre, facilitando su referenciación en un proyecto. Pueden incluir no solo los binarios, sino además Javadoc y Sources que nos ayudarán al momento de programar.<br />
</span></div>
<p style="margin-left:36pt;"><span style="font-size:10pt;font-family:Arial;">Este tipo de librerías a su vez pueden ser de dos tipos: definidas por NB (definidas a la hora de instalar el IDE) o definidas por el usuario. Su configuración es guardado por en un archivo de definiciones de librerías.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Por ejemplo, la librería JAX-WS 2.1 encapsula los siguientes jars:<br />
</span></li>
</ul>
<p><a href="http://lefunes.files.wordpress.com/2008/04/04_ejemplo_libs.gif"><img class="aligncenter size-full wp-image-99" src="http://lefunes.files.wordpress.com/2008/04/04_ejemplo_libs.gif?w=544" alt="" width="717" height="372" /></a></p>
<h4>Archivos de definición de librerías</h4>
<p><span style="font-size:10pt;font-family:Arial;">Es un archivo de propiedades (.properties) o XML en el cual se guarda la definición de las librerías, por ejemplo:<br />
</span></p>
<blockquote><p><span style="color:#339966;">libs.junit.classpath=${base}/junit/junit-3.8.2.jar </span></p></blockquote>
<blockquote><p><span style="color:#339966;">libs.junit.javadoc=${base}/junit/junit-3.8.2-api.zip </span></p></blockquote>
<blockquote><p><span style="color:#339966;">libs.junit_4.classpath=${base}/junit_4/junit-4.1.jar </span></p></blockquote>
<blockquote><p><span style="color:#339966;">libs.MyLibrary_01.classpath=${base}/AbsoluteLayout.jar</span></p></blockquote>
<p><span style="font-size:10pt;font-family:Arial;">Hasta NB 6.0 solo existía un archivo de definición de librerías a nivel global del IDE, que hoy es conocido como </span><em>Catalogo de Librerías</em><span style="font-size:10pt;font-family:Arial;">.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">A partir de NB 6.1 Beta se pueden crear y editar archivos de definición de librerías personalizados, creando repositorios para uno o más proyectos en particular. Esto permite poder compartir no solo el proyecto, sino además este junto con a definición de las librerías y las librerías propiamente dichas que utiliza.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Para editar un archivos de definición (ya sea el global o los personalizados) se debe acceder al Library Manager (desde el menú Tools-&gt;Libraries). Una vez que elegimos la localización del archivo de definiciones, podremos ver, definir una nueva, borrar ó modificar la definición de una librería:<br />
</span></p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara4.gif"><img class="aligncenter size-full wp-image-87" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara4.gif?w=544" alt="" width="578" height="422" /></a></p>
<h4>Catálogo de Librerías</h4>
<p><span style="font-size:10pt;font-family:Arial;">Como vimos anteriormente, el catalogo de librerías (ó Global Libraries) es el repositorio de librerías a nivel global del IDE. En él vienen definidas las librerías por defecto creadas al momento de realizar la instalación de NB y es el que utilizan todos los proyectos por defecto, salvo que indique un archivo de definición de librerías en particular.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Se puede acceder a él mediante el Library Manager eligiendo como localidad de la librería a &#8220;Global Libraries&#8221;:<br />
</span></p>
<p style="text-align:center;"><img alt="" /><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara5.gif"><img class="aligncenter size-full wp-image-88" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara5.gif?w=544" alt="" width="588" height="449" /></a></p>
<p><span style="font-size:10pt;font-family:Arial;">En este caso no se ha agregado ninguna definición de librería nueva, pudiendo observar el listado de librerías definidas por defecto al instalar NB 6.1 Beta.<br />
</span></p>
<h4>Estructura de archivos de un proyecto</h4>
<p><span style="font-size:10pt;font-family:Arial;">Al crear un nuevo proyecto en NB (ya sea desde cero o a partir de código existente), por defecto este generará una estructura de archivos que permiten la mejor organización, por ejemplo:<br />
</span></p>
<p style="margin-left:36pt;">
<p style="text-align:center;margin-left:36pt;"><img alt="" /><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara6.gif"><img class="aligncenter size-full wp-image-89" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara6.gif?w=500" alt=""   /></a></p>
<p><span style="font-size:10pt;font-family:Arial;">Donde:<br />
</span></p>
<ul>
<li><strong>src:</strong><span style="font-size:10pt;font-family:Arial;"> aquí se encuentra el código fuente de nuestra aplicación (.java)<br />
</span></li>
<li><strong>test:</strong><span style="font-size:10pt;font-family:Arial;"> aquí está el código fuente de las pruebas (.java)<br />
</span></li>
<li><strong>build:</strong><span style="font-size:10pt;font-family:Arial;"> aquí contiene los archivos generados por el compilador (.class)<br />
</span></li>
<li><strong>dist:</strong><span style="font-size:10pt;font-family:Arial;"> aquí se encuentran los archivos listos para distribuir (.jar y librerías)<br />
</span></li>
<li>
<div><strong>nbproject</strong><span style="font-size:10pt;font-family:Arial;">: aquí NB guarda las configuraciones del proyecto<br />
</span></div>
<ul>
<li><strong>prívate</strong><span style="font-size:10pt;font-family:Arial;">: configuraciones propias del usuario<br />
</span></li>
</ul>
</li>
</ul>
<p><span style="font-size:10pt;font-family:Arial;">De los archivos que vemos en la figura, toma vital importancia el archivo </span><strong>build.xml</strong><span style="font-size:10pt;font-family:Arial;">, debido a que este es el script de Ant que configura todos los aspectos relacionados a la compilación del proyecto, indicando los pasos de construcción y empaquetado, ubicación de las librerías de dependencias, etc.<br />
</span></p>
<h3>Compartiendo un proyecto</h3>
<p><span style="font-size:10pt;font-family:Arial;">Básicamente existen dos tipos de destinatarios que pueden recibir un proyecto nuestro: otro usuario de NB o uno que no lo sea. Este último deberá valerse del script de Ant para poder realizar la compilación (<strong>build.xml</strong>).<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Como podemos suponer, al compartir un proyecto, no es necesario compartir los directorios </span><strong>build</strong><span style="font-size:10pt;font-family:Arial;"> y </span><strong>dist</strong><span style="font-size:10pt;font-family:Arial;">, ya que estos pueden ser generados a partir del código fuente (almacenado en </span><strong>src</strong><span style="font-size:10pt;font-family:Arial;">). Adicionalmente si el destinatario tiene NB no hará falta tampoco compartir el directorio con configuraciones del usuario (</span><strong>nbproject/private</strong><span style="font-size:10pt;font-family:Arial;">) ya que este se configurará al momento de abrir el proyecto.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Un caso extremo (e ideal a la hora de compartir) es un proyecto que no dependa de ninguna librería. No importa el tipo de destinatario del proyecto este no tendría que tener ninguna complicación a la hora de compilar y ejecutar la aplicación, ya que posee todo el código necesario y todas las librerías (es decir, ninguna).<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Este no es el común de los casos, aunque sea para realizar test, para visualización, etc. siempre tendremos al menos un librería, y justamente los problemas comienzan cuando tenemos al menos una librería en el proyecto a compartir.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Los problemas más comunes que podemos tener a la hora de utilizar cada tipo de librería son los siguientes:<br />
</span></p>
<h4>Librerías provistas por NB</h4>
<p><span style="font-size:10pt;font-family:Arial;">Este tipo de librerías comúnmente no posee ningún problema entre usuarios del IDE debido a que estas librerías ya vienen definidas al instalar el mismo (salvo que la librería usada haya sido borrada del Catalogo Global). El problema que se lo encontrarán los usuarios que quieran compilar el proyecto directamente desde Ant, sin utilizar el IDE, ya que no podrán resolver las referencias a las librerías.<br />
</span></p>
<h4>Librerías definidas por el usuario</h4>
<p><span style="font-size:10pt;font-family:Arial;">Aquí la situación es la misma que la anterior para el usuario de Ant, ya que no posee la definición de las librerías.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Para otro usuario de NB que no posee las librerías definidas el IDE le indicará el problema, indicándole el nombre que debe poseer la librería que debe crear, pero no sabrá que jars incluye. En este punto es donde deberá contactarse con la persona que compartió el archivo para completar la definición de las librerías.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Un problema potencial adicional es si el usuario de NB posee definidas librerías con el nombre de las requeridas pero el contenido es totalmente diferente (jars que incluye), debiendo modificar la definición de la librería para solucionar el problema, pero seguramente trasladando los problemas al proyecto para el cual había creado la misma.<br />
</span></p>
<h4>Jars</h4>
<p><span style="font-size:10pt;font-family:Arial;">Los jars se agregan a un proyecto con paths relativos al proyecto, por lo que ambos tipos de usuario tendrán problemas si el jar en cuestión no se encuentra en la localización correcta.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Generalmente la forma de solucionar este problema hasta NB 6 era colocarlo dentro de la estructura del proyecto (en un directorio llamado </span><strong>lib</strong><span style="font-size:10pt;font-family:Arial;"> por ejemplo), para que al compartir el proyecto el jar vaya dentro del mismo.<br />
</span></p>
<h4>Otro proyecto de NB</h4>
<p><span style="font-size:10pt;font-family:Arial;">Cuando un proyecto depende de otro ocurrirá la misma situación anterior, se utiliza el path relativo para referenciarlo, por lo que la localización del mismo será muy importante a la hora de compilar.<br />
</span></p>
<p><span style="font-size:10pt;font-family:Arial;">Otra vez, la forma de compartir los proyectos que dependen uno del otro debe hacerse de tal forma que el receptor luego no tenga problemas para reubicar los mismos en la forma adecuada. Tanto en NB 6.1 Beta como en las versiones anteriores este problema debe resolverse de esta forma, ya que la librería de la cual se depende es un proyecto en si mismo, no pudiéndose mover/copiar a una ubicación arbitrariamente.<br />
</span></p>
<h3>Solución a los Problemas con NetBeans 6.1 Beta</h3>
<p>NB 6.1 Beta resuelve los tres primeros casos vistos anteriormente creando un repositorio con todas las librerías (junto a su definición) y jars de los cual depende el proyecto.</p>
<p>El repositorio creado deberá ser compartido junto al proyecto.</p>
<p>El proyecto guarda un path relativo al repositorio, por lo que se debe elegir bien la posición donde se colocara (lo mismo que pasa al compartir un proyecto de NB que depende de otro).</p>
<p>Por ejemplo:</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara7.gif"><img class="aligncenter size-full wp-image-90" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara7.gif?w=500" alt=""   /></a></p>
<p style="text-align:center;"><img alt="" /></p>
<p>Para este ejemplo, tenemos en el directorio &#8220;ProyectoNB&#8221; el proyecto que vamos a compartir, mientras que en el directorio &#8220;libreries&#8221; el repositorio.</p>
<p>Dentro del directorio &#8220;Proyecto NB&#8221; tenemos la estructura de directorio de nuestro proyecto, y dentro de &#8220;libreries&#8221; tenemos la definición de las librerías (<strong>nblibreries.properties</strong>) junto con las librerías y jars requeridos por el proyecto.</p>
<p>Al momento de compartir lo que haríamos seria enviar el directorio &#8220;a_compartir&#8221; completo al destinatario.</p>
<p>Veremos un par de ejemplos para ver las pantallas que se ven implicadas en el proceso. También veremos que es muy fácil transformar un proyecto existente a compartido.</p>
<h3>Ejemplo 1: Crear un proyecto nuevo preparado para ser compartido</h3>
<p>En este ejemplo veremos como empezar de cero un nuevo proyecto compartido.</p>
<p>Creamos un nuevo proyecto:</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara8.gif"><img class="aligncenter size-full wp-image-91" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara8.gif?w=544" alt="" width="567" height="394" /></a></p>
<p style="text-align:center;"><img alt="" /></p>
<p>Al llegar a este dialogo nos encontramos con dos nuevos agregados en NB 6.1 Beta:</p>
<ul>
<li>A: Si chequeamos indicaremos explícitamente que el proyecto es un proyecto para compartir.</li>
<li>B: Al chequear A se habilita el textbox para indicar la ubicación que tendrá el repositorio de librerías. Mediante el botón &#8220;Browse…&#8221; nos facilita la búsqueda del lugar donde se encuentra un repositorio de librerías creado anteriormente.</li>
</ul>
<p>Una vez aceptado este dialogo (haciendo click en Finish) se tendrá el proyecto listo para compartir.</p>
<h3>Ejemplo 2: Pasar de un proyecto no compartido a hacerlo</h3>
<p>En este ejemplo veremos como si tenemos un proyecto no compartido (nuevos o de versiones de NB previas a NB 6.1 Beta).</p>
<p>Al crear el nuevo proyecto no compartido:</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara9.gif"><img class="aligncenter size-full wp-image-92" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara9.gif?w=544" alt="" width="571" height="396" /></a></p>
<p style="text-align:center;"><img alt="" /></p>
<p>C: Creamos el proyecto como no compartido (sin chequear la casilla)</p>
<p>Abrimos dentro del proyecto sus propiedades y revisamos las propiedades de las librerías:</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara10.gif"><img class="aligncenter size-full wp-image-93" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara10.gif?w=544" alt="" width="589" height="366" /></a></p>
<p style="text-align:center;"><img alt="" /></p>
<p>Hacemos click en el botón se nos abrirá un dialogo de configuración del archivo de definición de librerías.</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara11.gif"><img class="aligncenter size-full wp-image-94" src="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara11.gif?w=544" alt="" width="599" height="352" /></a></p>
<p style="text-align:center;"><img alt="" /></p>
<p>y luego de haber aceptado solo queda decir que acción se va a realizar con las librerías a las cuales el proyecto estaba apuntando.</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/04/012_make_comp2.png"><img class="aligncenter size-full wp-image-111" src="http://lefunes.files.wordpress.com/2008/04/012_make_comp2.png?w=544" alt="" width="714" height="550" /></a></p>
<p style="text-align:center;"><img alt="" /></p>
<p>NB nos preguntara que hacer, generalmente conviene &#8220;Use Existing Library in New Location&#8221;, ya que todas las librerías  necesarias por el proyecto serán copiadas en el directorio de librerías, dejando el proyecto listo para ser compartido.</p>
<p>Saludos.</p>
<p>Hasta la próxima.</p>
<h3>Más Info</h3>
<ul>
<li><a title="Pagina Principal" href="http://www.netbeans.org/">NetBeans.org</a></li>
<li><a href="http://www.netbeans.org/community/releases/61/">Notas de Version NB 6.1 RC1</a></li>
<li><a href="http://download.netbeans.org/netbeans/6.1/rc/">Descargar NB 6.1 RC1<br />
</a></li>
<li><a href="http://es.wikipedia.org/wiki/Apache_Ant">Apache Ant (Wikipedia)<br />
</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/96/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/96/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=96&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/04/11/soporte-para-librerias-compartidas-en-netbeans-61/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/04/02_resolve_reference_problem.gif" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara2.gif" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/04_ejemplo_libs.gif?w=544" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara4.gif?w=544" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara5.gif?w=544" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara6.gif" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara7.gif" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara8.gif?w=544" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara9.gif?w=544" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara10.gif?w=544" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/041108-1342-soportepara11.gif?w=544" medium="image" />

		<media:content url="http://lefunes.files.wordpress.com/2008/04/012_make_comp2.png?w=544" medium="image" />
	</item>
		<item>
		<title>Optimización al concatenar Strings en Java</title>
		<link>http://lefunes.wordpress.com/2008/03/13/optimizacion-al-concatenar-string-en-java/</link>
		<comments>http://lefunes.wordpress.com/2008/03/13/optimizacion-al-concatenar-string-en-java/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 16:32:38 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[bufferstring]]></category>
		<category><![CDATA[concat]]></category>
		<category><![CDATA[concatenacion]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[stringbuffer]]></category>
		<category><![CDATA[stringbuilder]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=78</guid>
		<description><![CDATA[Al momento de concatenar cadenas, Java ofrece varios métodos de realizar el proceso, pero el rendimiento obtenido entre cada una de estas formas puede ser totalmente diferente. Veremos cuales son las formas más optimas de realizar esto según cada circunstancia. Existen 3 maneras de realizar este proceso: Concatenando mediante el operador + Concatenando mediante la [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=78&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Al momento de concatenar cadenas, Java ofrece varios métodos de realizar el proceso, pero el rendimiento obtenido entre cada una de estas formas puede ser totalmente diferente.</p>
<p>Veremos cuales son las formas más optimas de realizar esto según cada circunstancia.</p>
<p><span id="more-78"></span></p>
<p>Existen 3 maneras de realizar este proceso:</p>
<ol>
<li>Concatenando mediante el operador +</li>
<li>Concatenando mediante la funcion concat() de la clase String</li>
<li>Utilizando la clase StringBuffer</li>
</ol>
<p>Para realizar la comparación de rendimientos de cada método utilizaremos un algoritmo simple donde se utiliza cada una de las técnicas, y para el análisis nos valdremos del análisis del Profiler de NetBeans.</p>
<p><pre class="brush: java;">
package testcadena;
public class Main {
     private static final int cantidadPrueba = 10000;

     public static void main(String[] args) {
         concatenacionBString();
         concatenacionConcat();
         concatenacionSuma();
     }

     private static void concatenacionSuma() {
         String resultado = &quot;inicio&quot;;
         for (int i = 0; i &lt; cantidadPrueba; i++) {
             resultado += &quot; hola&quot;;
         }
     }

     private static void concatenacionConcat() {
         String resultado = &quot;inicio&quot;;
         for (int i = 0; i &lt; cantidadPrueba; i++) {
             resultado.concat(&quot; hola&quot;);
         }
     }

     private static void concatenacionBString() {
         StringBuffer resultado = new StringBuffer(&quot;inicio&quot;);
         for (int i = 0; i &lt; cantidadPrueba; i++) {
             resultado.append(&quot; hola&quot;);
         }
     }
}</pre></p>
<p>Mediante la constante cantidadPrueba iremos variando la cantidad de concatenaciones que se realizaran.</p>
<h3>Concatenando 1000 cadenas</p>
<h2></h2>
<p>Realizando la prueba con cantidadPrueba=1000 vemos que el Profiler nos indica:<img src="http://lefunes.files.wordpress.com/2008/03/prof1000.gif?w=500" alt="prof1000.gif" /></p>
<p>Podemos apreciar que el método que utiliza StringBuffer es el más rápido, seguido por el que utiliza concat y por último (más de 100 veces más lento que los anteriores) el método utilizando el operador &#8220;+&#8221;.</p>
<h3>Concatenando 100 cadenas</h3>
<p>Bajamos la cantidad de concatenaciones hechas para verificar que pasa:</p>
<p><img src="http://lefunes.files.wordpress.com/2008/03/prof100.gif?w=500" alt="prof100.gif" /></p>
<p>Ahora el más rápido es concat seguido de cerca por StringBuffer, pero el operador de concatenación sigue siendo el más lento (aunque ahora la diferencia ya no es tan grande como en la prueba anterior)</p>
<h3>Concatenando 10 cadenas</h3>
<p>Seguimos bajando la cantidad de concatenaciones:</p>
<p><img src="http://lefunes.files.wordpress.com/2008/03/prof10.gif?w=500" alt="prof10.gif" /></p>
<p>Ahora se mantiene y acentúa la tendencia de la anterior prueba, siendo concat el más rápido.</p>
<h3>Concatenando 1 cadena</h3>
<p>Realizamos la prueba menor, concatenandole a la cadena inicial solo una cadena.</p>
<p><img src="http://lefunes.files.wordpress.com/2008/03/prof1.gif?w=500" alt="prof1.gif" /></p>
<p>Como era de esperar sigue siendo más rápido la solución con concat, pero ahora es más rápido la suma antes que el uso de StringBuffer (esto es debido al costo propio de crear el Buffer para la cantidad de concatenaciones realizadas)</p>
<h3>Conclusión</h3>
<p>De este pequeño análisis podemos obtener las siguientes conclusiones:</p>
<ul>
<li>Nunca es optimo realizar una concatenación de clases mediante el operador de concatenación (+)</li>
<li>Para un pequeño número de concatenaciones es mejor utilizar el método concat() de la clase String</li>
<li>Para gran cantidad de concatenaciones sobre una cadena, lo mejor es utilizar un StringBuffer</li>
</ul>
<h3><strong>StringBuilder vs. StringBuffer</strong></h3>
<h4><span style="color:#99cc00;">Agregado el 18 de Marzo de 2008:</span></h4>
<p>Un cuarto método de concatenar String es usando la clase StringBuilder.</p>
<p>StringBuilder tiene una funcionalidad similar a la de StringBuffer, pero la principal diferencia radica en que StringBuilder no está preparada para acceso concurrente tal como lo hace StringBuffer.</p>
<p>Esto puede parecer una desventaja, si usamos múltiples hilos insertando sobre la misma secuencia de caracteres deberemos utilizar obligadamente StringBuffer. Sin embargo encontraremos que en la mayoría de los casos solo un hilo accede a la secuencia de caracteres, siendo todos los mecanismos de sincronización utilizados por StringBuffer completamente inútiles, siendo en estos casos StringBuilder la solución ideal.</p>
<p>Como vimos en los ejemplos anteriores, el StringBuffer es utilizado y consumido por un mismo hilo (el hilo que ejecuta el método), por lo cual esta es una situación ideal para reemplazar StringBuffer por StringBuilder</p>
<p>Creamos un nuevo método:</p>
<p><pre class="brush: java;">
...
    private static void concatenacionBBuilder() {
        StringBuilder resultado = new StringBuilder(&quot;inicio&quot;);
        for (int i = 0; i &lt; cantidadPrueba; i++) {
            resultado.append(&quot; hola&quot;);
        }
    }
...</pre></p>
<p>y comparamos este método con el que utilizaba StringBuffer, obteniendo:<br />
<img src="http://lefunes.files.wordpress.com/2008/03/prof1000b.gif?w=500" alt="prof1000b.gif" /><br />
pudiendo de esta forma comprobar que se ha obtenido una pequeña optimizacion, que era nuestro objetivo.<strong></strong></p>
<h3><strong>Ganando más performance</strong></h3>
<h4><span style="color:#99cc00;">Agregado el 07 de Mayo de 2008:</span></h4>
<p>Si sabemos (o sospechamos por lo menos) cuanto crecerá nuestro StringBuilder ó  StringBuffer podemos indicarselo al construirlos.</p>
<p>El problema es que cada vez que hacemos un append() debe crecer antes de copiar la cadena.</p>
<p>Creamos un método nuevo para probar esto:</p>
<p><pre class="brush: java;">
...
    private static void concatenacionBBuilder2() {
        StringBuilder resultado = new StringBuilder(6*cantidadPrueba);

        resultado.append(&quot;inicio&quot;);
        for (int i = 0; i &lt; cantidadPrueba; i++) {
            resultado.append(&quot; hola&quot;);
        }
    }
...</pre></p>
<p>y estos son los resultados:</p>
<p><img class="alignleft size-full wp-image-120" src="http://lefunes.files.wordpress.com/2008/05/concat_inicializado.png?w=500" alt="Concatenando con StringBuilder"   /></p>
<p>Por lo que si tenemos alguna forma de predecir cuanto crecerá, esto es importante tenerlo en cuenta.</p>
<h3>Más Info</h3>
<ul>
<li><a href="http://lefunes.wordpress.com/2008/05/08/concatenacion-de-cadenas-en-java-optimizaciones-realizadas-por-el-compilador/">Concatenación de cadenas en Java: Optimizaciones realizadas por el compilador</a></li>
<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html">Javadoc StringBuilder</a></li>
<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html">Javadoc StringBuffer</a></li>
<li> <a href="http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#40226">Optimization of String Concatenation</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/78/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/78/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=78&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/03/13/optimizacion-al-concatenar-string-en-java/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/03/prof1000.gif" medium="image">
			<media:title type="html">prof1000.gif</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/03/prof100.gif" medium="image">
			<media:title type="html">prof100.gif</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/03/prof10.gif" medium="image">
			<media:title type="html">prof10.gif</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/03/prof1.gif" medium="image">
			<media:title type="html">prof1.gif</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/03/prof1000b.gif" medium="image">
			<media:title type="html">prof1000b.gif</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/05/concat_inicializado.png" medium="image">
			<media:title type="html">Concatenando con StringBuilder</media:title>
		</media:content>
	</item>
		<item>
		<title>Convertir byte[] en UTF8 a un String en Java</title>
		<link>http://lefunes.wordpress.com/2008/03/08/convertir-byte-en-utf8-a-un-string-en-java-2/</link>
		<comments>http://lefunes.wordpress.com/2008/03/08/convertir-byte-en-utf8-a-un-string-en-java-2/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 02:19:35 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[byte]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=75</guid>
		<description><![CDATA[Para convertir una cadena de bytes codificados en UTF8 a un String usamos el siguiente constructor de String: De forma que si le pasamos, por ejemplo, un array de bytes: 6a 61 76 61 2f 6c 61 6e 67 2f 43 6c 61 73 73 obtendremos java/lang/Class Hasta la próxima<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=75&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para convertir una cadena de bytes codificados en UTF8 a un String usamos el siguiente constructor de String:</p>
<p><pre class="brush: java;">
new String(by, “UTF8&quot;);</pre><br />
De forma que si le pasamos, por ejemplo, un array de bytes:</p>
<p><code>6a 61 76 61 2f 6c 61 6e 67 2f 43 6c 61 73 73</code></p>
<p>obtendremos</p>
<p><code>java/lang/Class</code></p>
<p>Hasta la próxima</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/75/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/75/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=75&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/03/08/convertir-byte-en-utf8-a-un-string-en-java-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Parseando XML en Java mediante SAX</title>
		<link>http://lefunes.wordpress.com/2008/03/01/parseando-xml-en-java-mediante-sax/</link>
		<comments>http://lefunes.wordpress.com/2008/03/01/parseando-xml-en-java-mediante-sax/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 12:53:00 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[SAX]]></category>
		<category><![CDATA[XMLReader]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=71</guid>
		<description><![CDATA[SAX es un API totalmente escrita en Java e incluida dentro del JRE que nos permite crear nuestro propio parser de XML. Veremos como construir un parser genérico de XML y como lo podemos adaptar a nuestras necesidades. Entre las clases más importantes a tener en cuenta tenemos: Interface org.xml.sax.XMLReader: Está interfaz que debe implementar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=71&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>SAX es un API totalmente escrita en Java e incluida dentro del JRE que nos permite crear nuestro propio parser de XML.</p>
<p>Veremos como construir un parser genérico de XML y como lo podemos adaptar a nuestras necesidades.</p>
<p><span id="more-71"></span>Entre las clases más importantes a tener en cuenta tenemos:</p>
<p><b>Interface org.xml.sax.XMLReader:</b><br />
Está interfaz que debe implementar un lector de XML.<br />
Cada vez que el <b>XMLReader</b> encuentra el principio del archivo, el final, un elemento, un caracter especial, un espacio, etc. notifica esto al <b>ContentHandler</b> asociado.<br />
Cada vez que encuentra un error se lo notifica al <b>ErrorHandler</b> asociado.</p>
<p><b>Interface org.xml.sax.ContentHandler:</b><br />
La clase que la implementa obtiene la capacidad de recibir todas las notificaciones de contenido de un XMLReader.<br />
La forma de asociar este a un XMLReader es mediante el método <b>setContentHandler</b>.</p>
<p><b>Interface org.xml.sax.ErrorHandler:</b><br />
La clase que la implementa obtiene la capacidad de recibir todas las notificaciones de error producidas por un XMLReader<br />
La forma de asociar este a un XMLReader es mediante el método <b>setErrorHandler</b>.<br />
En caso de que no exista ningun ErrorHandler asociado al XMLReader, este ultimo no reportara ningun error, salvo las excepciones <b>SAXParseException</b>.</p>
<p><b>Clase org.xml.sax.helpers.DefaultHandler</b>:<br />
Clase que implementa tanto a ContentHandler como a ErrorHandler (además de  DTDHandler y EntityResolver que no veremos por ahora), proveiendo implementaciones por defectos para todos sus métodos.</p>
<p>Esta clase es de la que extenderemos para poder crear nuestro propio parser de XML.</p>
<p><b>Clase org.xml.sax.helpers.XMLReaderFactory</b>:<br />
Clase que provee métodos estáticos para la creación de XMLReaders.<br />
Utilizaremos el método estático <b>XMLReaderFactory.createXMLReader()</b> que nos devuelve el XMLReader un por defecto para nuestro sistema.</p>
<p><b>Creando el Lector</b><br />
Para ello haremos de la siguiente forma:</p>
<p><pre class="brush: java;">
class LectorXML extends DefaultHandler {

    private final XMLReader xr;

    public LectorXML() throws SAXException {
        xr = XMLReaderFactory.createXMLReader();
        xr.setContentHandler(this);
        xr.setErrorHandler(this);
    }
}</pre><br />
Hasta aquí hemos creado un clase <b>LectorXML</b> que hereda de <b>DefaultHandler</b>, donde en el constructor creamos el <b>XMLReader</b> mediante <b>XMLReaderFactory</b>.<br />
Al <b>XMLReader</b> le asociamos el <b>ContentHandler</b> y <b>ErrorHandler</b>, que es el propio LectorXML. Agregamos un método para leer archivos XML:<br />
<pre class="brush: java;">
class LectorXML extends DefaultHandler {

    private final XMLReader xr;

    public LectorXML() throws SAXException {
        xr = XMLReaderFactory.createXMLReader();
        xr.setContentHandler(this);
        xr.setErrorHandler(this);
    }

    public void leer(final String archivoXML)
             throws FileNotFoundException, IOException,
                       SAXException {
        FileReader fr = new FileReader(archivoXML);
        xr.parse(new InputSource(fr));
    }
}</pre><br />
En este punto estamos preparados para probar nuestro Lector:<br />
<pre class="brush: java;">
public class PruebaSAX {
    public static void main(String[] args)
              throws FileNotFoundException, IOException,
                        SAXException {
        LectorXML lector = new LectorXML();
        lector.leer(&quot;test.xml&quot;);
    }
}</pre><br />
Si ejecutamos veremos que se produce nada (salvo que la ruta al XML sea incorrecta). Esto es porque los métodos de <b>DefaultHandler</b> tienen implementaciones vacías de los métodos.Sobrescribimos entonces algunos de los métodos para ver la salida:<br />
<pre class="brush: java;">
class LectorXML extends DefaultHandler {

    private final XMLReader xr;

    public LectorXML() throws SAXException {
        xr = XMLReaderFactory.createXMLReader();
        xr.setContentHandler(this);
        xr.setErrorHandler(this);
    }

    public void leer(final String archivoXML)
             throws FileNotFoundException, IOException,
                       SAXException {
        FileReader fr = new FileReader(archivoXML);
        xr.parse(new InputSource(fr));
    }

    @Override
    public void startDocument() {
        System.out.println(&quot;Comienzo del Documento XML&quot;);
    }

    @Override
    public void endDocument() {
        System.out.println(&quot;Final del Documento XML&quot;);
    }

    @Override
    public void startElement(String uri, String name,
              String qName, Attributes atts) {
        System.out.println(&quot;tElemento: &quot; + name);

        for (int i = 0; i &lt; atts.getLength(); i++) {
         System.out.println(&quot;ttAtributo: &quot; +
          atts.getLocalName(i) + &quot; = &quot;+ atts.getValue(i));
        }
    }

    @Override
    public void endElement(String uri, String name,
                                 String qName) {
        System.out.println(&quot;tFin Elemento: &quot; + name);
    }
}</pre><br />
Si ejecutamos ahora veremos como nos muestra el comienzo y fin del documento, así como todos los elementos y sus atributos de nuestro documento.</p>
<p>De la misma forma podemos sobrescribir los métodos para ver los caracteres especiales que aparecen en el XML (espacios, saltos de lineas, etc), mostrar errores y excepciones generadas a la hora de realizar la lectura y parseo, etc.</p>
<p>Espero que les sirva.<br />
Hasta la Próxima.</p>
<p><b>Más Info</p>
<ul>
<li><b></b><b></b><b></b><b></b><b></b><b></b><b><a href="http://www.saxproject.org/" target="_blank">Página oficial de SAX</a></b></li>
<li><b></b><b></b><b></b><b></b><b></b><b></b><b><a href="http://java.sun.com/javase/6/docs/api/org/xml/sax/XMLReader.html">Javadoc XMLReader</a></b></li>
<li><b></b><b></b><b></b><b></b><b></b><b></b><b><a href="http://java.sun.com/javase/6/docs/api/org/xml/sax/helpers/DefaultHandler.html" target="_blank">Javadoc DefaultHandler</a></b></li>
<li><b></b><b></b><b></b><b></b><b></b><b></b><b><a href="http://java.sun.com/javase/6/docs/api/org/xml/sax/ContentHandler.html" target="_blank">Javadoc ContentHandler</a></b></li>
<li><b></b><b></b><b></b><b></b><b></b><b></b><b><a href="http://java.sun.com/javase/6/docs/api/org/xml/sax/ErrorHandler.html" target="_blank">Javadoc ErrorHandler</a></b></li>
<li><b></b><b></b><b></b><b></b><b></b><b></b><b><a href="http://java.sun.com/javase/6/docs/api/org/xml/sax/helpers/XMLReaderFactory.html" target="_blank">Javadoc XMLReaderFactory</a></b></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/71/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/71/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=71&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/03/01/parseando-xml-en-java-mediante-sax/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Utilizando Doble Buffer en JFrame mediante BufferStrategy</title>
		<link>http://lefunes.wordpress.com/2008/02/27/utilizando-doble-buffer-en-jframe-mediante-bufferstrategy/</link>
		<comments>http://lefunes.wordpress.com/2008/02/27/utilizando-doble-buffer-en-jframe-mediante-bufferstrategy/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 19:29:46 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JFrame]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[doble buffer]]></category>
		<category><![CDATA[double buffering]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=69</guid>
		<description><![CDATA[Muchas veces queremos dibujar (gráficos, mapas, imagenes, etc) sobre un JFrame (generalmente reimplementando paint(Graphics g)) y si estos son dinámicos podemos llegar a notar que el Frame parpadeá. Ante esta situación notamos que necesitamos utilizar una técnica de Doble Buffering de forma de evitar estos inconvenientes, y poder realizar y obtener los mismo resultados que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=69&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Muchas veces queremos dibujar (gráficos, mapas, imagenes, etc) sobre un JFrame (generalmente reimplementando<br />
<code>paint(Graphics g)</code>) y si estos son dinámicos podemos llegar a notar que el Frame parpadeá.</p>
<p>Ante esta situación notamos que necesitamos utilizar una técnica de <b>Doble Buffering</b> de forma de evitar estos inconvenientes, y poder realizar y obtener los mismo resultados que con un JPanel (que ya tiene implementado y activado el doble buffer por defecto).</p>
<p>Para ello utilizamos la clase <code>java.awt.image.BufferStrategy</code>.<span id="more-69"></span></p>
<p>Por ejemplo si tenemos implementado algo como:</p>
<p><pre class="brush: java;">
...
import java.awt.Graphics2D;
...

public class SinDBufferJFrame extends javax.swing.JFrame
    ...

    public SinDBufferJFrame () {
        ...
    }

    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = null;

        try {
            g2 = g.create();

            paint(g2);
        } finally {
            g2.dispose();
        }
    }

    public void paint(Graphics2D g2) {
        ...
        //Acá dibujamos lo que queremos mostrar
        ...
    }

    ...
}</pre><br />
podemos modificar rápidamente nuestro JFrame para utilizar Doble Buffer de la siguiente forma:<br />
<pre class="brush: java;">
...
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
...

public class DBufferJFrame extends javax.swing.JFrame

    ...
    private final BufferStrategy bf;
    ...

    public DBufferJFrame () {
        ...

        createBufferStrategy(2);        //creamos dos buffers
        bf = this.getBufferStrategy();  //obtenemos la estrategia del JFrame
    }

    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = null;

        try {
            //obtenemos uno de los buffers para dibujar
            g2 = (Graphics2D) bf.getDrawGraphics();

            paint(g2);
        } finally {
            g2.dispose();
        }

        //pintamos el buffer en pantalla
        bf.show();
    }

    public void paint(Graphics2D g2) {
        ...
        //Acá dibujamos lo que queremos mostrar
        ...
    }

    ...
}</pre><br />
Espero les sirva.<br />
Saludos.<b></b></p>
<p><b>Más Info</b></p>
<ul>
<li><a href="http://gpwiki.org/index.php/Java:Tutorials:Double_Buffering" title="Double Buffering">Tutorials:Double Buffering</a></li>
<li><a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferStrategy.html" title="Double Buffering">BufferStrategy Javadoc (Java 6)</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/69/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/69/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=69&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/02/27/utilizando-doble-buffer-en-jframe-mediante-bufferstrategy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>unreachable statement</title>
		<link>http://lefunes.wordpress.com/2008/02/22/unreachable-statement/</link>
		<comments>http://lefunes.wordpress.com/2008/02/22/unreachable-statement/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 14:51:20 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=66</guid>
		<description><![CDATA[Este error se produce porque parte de nuestro código nunca se va a ejecutar, es inalcanzable (unreachable) Generalmente sucede por colocar alguna sentencia despues de un &#60;code&#62;return&#60;/code&#62; Por ejemplo: La forma de solucionarlo es o borrando todo el código inalcanzable o reubicándolo  de forma correcta: Saludos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=66&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este error se produce porque parte de nuestro código nunca se va a ejecutar, es <b>inalcanzable (unreachable)</b></p>
<p>Generalmente sucede por colocar alguna sentencia despues de un &lt;code&gt;return&lt;/code&gt;</p>
<p>Por ejemplo:</p>
<p><pre class="brush: java;">
   public boolean verificar(){
      if(...){
         ...
         return false;
      } else{
         ...
         return true;

         System.Out.printf(&quot;Esta linea es inalcanzable&quot;);
      }
   }</pre>La forma de solucionarlo es o borrando todo el código inalcanzable o reubicándolo  de forma correcta:</p>
<p><pre class="brush: java;">
   public boolean verificar(){
      if(...){
         ...
         return false;
      } else{
         ...

         System.Out.printf(&quot;Ahora si es alcanzable&quot;);

         return true;
      }
   }</pre>   Saludos</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/66/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/66/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=66&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/02/22/unreachable-statement/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Iniciar maximizado o minimizado un JFrame</title>
		<link>http://lefunes.wordpress.com/2008/02/18/iniciar-maximizado-o-minimizado-un-jframe/</link>
		<comments>http://lefunes.wordpress.com/2008/02/18/iniciar-maximizado-o-minimizado-un-jframe/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 02:37:48 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JFrame]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[maximizar]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=64</guid>
		<description><![CDATA[Para iniciar maximizado un JFrame lo que realizamos es setearle mediante setExtendedState() el estado en que queremos que aparezca al realizarle un setVisible(true). Para ello utilizamos la constante JFrame.MAXIMIZED_BOTH de la siguiente forma: además podemos indicarle otras opciones: JFrame.NORMAL: Inicializa el JFrame en estado Normal JFrame.ICONIFIED: Inicializa el JFrame en estado Minimizado. JFrame.MAXIMIZED_HORIZ: Inicializa el [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=64&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para iniciar maximizado un JFrame lo que realizamos es setearle mediante <code>setExtendedState()</code> el estado en que queremos que aparezca al realizarle un <code>setVisible(true)</code>.</p>
<p><span id="more-64"></span></p>
<p>Para ello utilizamos la constante <code>JFrame.MAXIMIZED_BOTH</code> de la siguiente forma:</p>
<p><pre class="brush: java;">
import javax.swing.JFrame;

public class MaximizarJFrame{
    public static void main(String[] args) {
        final JFrame frame = new JFrame(&quot;Prueba JFrame&quot;);

        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

       frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}</pre><br />
además podemos indicarle otras opciones:</p>
<ul>
<li><font color="#993300">JFrame.NORMAL</font>: Inicializa el JFrame en estado Normal</li>
<li><font color="#993300">JFrame.ICONIFIED</font>: Inicializa el JFrame en estado Minimizado.</li>
<li><font color="#993300">JFrame.MAXIMIZED_HORIZ</font>:  Inicializa el JFrame en estado Maximizado Horizontalmente</li>
<li><font color="#993300">JFrame.MAXIMIZED_VERT</font>:  Inicializa el JFrame en estado Maximizado Verticalmente</li>
<li><font color="#993300">JFrame.MAXIMIZED_BOTH</font>:  Inicializa el JFrame en estado Maximizado en ambos sentidos</li>
</ul>
<p>Hasta la proxima.</p>
<p><b>Más Info:</b></p>
<ul>
<li><a href="http://www.forosdelweb.com/f45/como-maximizar-jframe-125719/">http://www.forosdelweb.com/f45/como-maximizar-jframe-125719/</a></li>
<li><a href="http://www.devdaily.com/blog/post/java/maximize-frame-jframe-in-java/">http://www.devdaily.com/blog/post/java/maximize-frame-jframe-in-java/</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/64/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/64/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/64/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=64&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/02/18/iniciar-maximizado-o-minimizado-un-jframe/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Cambiando el agente de usuario en una conexión Http/Https desde Java</title>
		<link>http://lefunes.wordpress.com/2008/02/16/cambiando-el-agente-de-usuario-en-una-conexion-httphttps-desde-java/</link>
		<comments>http://lefunes.wordpress.com/2008/02/16/cambiando-el-agente-de-usuario-en-una-conexion-httphttps-desde-java/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 23:22:46 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[user agent]]></category>
		<category><![CDATA[useragent]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=63</guid>
		<description><![CDATA[El agente de usuario (User-Agent) permite que un cliente se pueda identificar con el servidor al cual se está conectando. Esta identificación se produce al realizar el pedido Http/Https al servidor mediante la propiedad User-agent. Si realizamos una conexión de la forma: nuestro programa se identificará ante el servidor, por ejemplo en mi caso, con [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=63&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>El <b>agente de usuario</b> (User-Agent)  permite que un cliente se pueda identificar  con el servidor al cual se está conectando.</p>
<p>Esta identificación se produce al realizar el pedido Http/Https al servidor mediante la propiedad <b>User-agent</b>.<span id="more-63"></span></p>
<p>Si realizamos una conexión de la forma:</p>
<p><pre class="brush: java;">
URL url = new URL(&quot;http://lefunes.wordpress.com&quot;);
URLConnection con = url.openConnection();</pre><br />
nuestro programa se identificará ante el servidor, por ejemplo en mi caso, con la siguiente identidad:</p>
<p align="center"><font color="#993300"> User-Agent: Java/1.6.0_03</font></p>
<p>está dependerá de la versión de Java que estemos utilizando, pero en términos generales sigue la forma:</p>
<p align="center"><font color="#993300">Java/&lt;Versión del JRE que estemos utilizando&gt;</font></p>
<p>Si lo que buscamos es cambiar esta identidad e incluir una propia lo que  dbemos es cambiar las propiedades a la hora de que nuestra aplicación envié las peticiones al servidor. Esto lo prodremos realizar mediante el método setRequestProperty de la clase URLConnection.</p>
<p>Por ejemplo:</p>
<p><pre class="brush: java;">
URL url = new URL(&quot;http://lefunes.wordpress.com&quot;);
URLConnection con = url.openConnection();

con.setRequestProperty(&quot;User-Agent&quot;, &quot;App de Prueba&quot;);</pre><br />
de esta forma el servidor nos reconocerá como &#8220;App de Prueba&#8221;.Esto es util porque hay servidores que descartan pedidos de agentes de usuario genéricos como &#8220;Java/1.6.0_03&#8243; o &#8220;lwp-per&#8221;.</p>
<p>Hasta la próxima.<b></b></p>
<p><b>Más Info</b></p>
<ul>
<li><a href="http://www.user-agents.org/" title="Lista de User-Agents"> http://www.user-agents.org/</a></li>
</ul>
<ul>
<li><a href="http://es.wikipedia.org/wiki/Agente_de_usuario"> http://es.wikipedia.org/wiki/Agente_de_usuario</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/63/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/63/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=63&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/02/16/cambiando-el-agente-de-usuario-en-una-conexion-httphttps-desde-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Accediendo a un sitio HTTP/HTTPS desde Java</title>
		<link>http://lefunes.wordpress.com/2008/02/14/accediendo-a-un-sitio-httphttps-desde-java/</link>
		<comments>http://lefunes.wordpress.com/2008/02/14/accediendo-a-un-sitio-httphttps-desde-java/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 22:32:32 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=61</guid>
		<description><![CDATA[En este post veremos como realizar conexiones tanto a sitios HTTP como a sitios HTTPS desde Java. Para ello utilizaremos las clases URLConnection y Authenticator (para el caso especial de HTTPS) Clase URLConnection URLConnection es una clase abstracta que implementan todas aquellas clases que quieren mantener un vinculo entre una aplicación y una URL determinada. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=61&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En este post veremos como realizar conexiones tanto a sitios HTTP como a sitios HTTPS desde Java. Para ello utilizaremos las clases <code>URLConnection</code> y <code>Authenticator</code> (para el caso especial de HTTPS)</p>
<p><span id="more-61"></span><br />
<b>Clase URLConnection</b></p>
<p><code>URLConnection</code> es una clase abstracta que implementan todas aquellas clases que quieren mantener un vinculo entre una aplicación y una URL<code> </code>determinada.</p>
<p>Si invocamos al método <code>openConnection</code> de <code>URL</code>, nos devolverá la implementación de <code>URLConnection</code> más apropiada a utilizar.</p>
<p>Por ejemplo si realizamos:<br />
<pre class="brush: java;">
URL url = new URL(&quot;http://lefunes.wordpress.com&quot;);
URLConnection con = url.openConnection();</pre><br />
dentro de <code>con</code> tendremos un objeto <code>HttpURLConnection</code>, mientras que si la URL hubiese sido HTTPS tendríamos despues del <code>openConnection</code> un objeto <code>HttpsURLConnection</code>.</p>
<p><b>Accediendo a un sitio HTTP</b></p>
<p>Abrimos un <code>URLConnection</code> a partir de la URL especificada, como por ejemplo:<br />
<b></b><br />
<b></b><br />
<pre class="brush: java;">import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Main {
   public static void main(String[] args)
     throws MalformedURLException, IOException {
      URL url = new URL(&quot;http://lefunes.wordpress.com&quot;);
      URLConnection con = url.openConnection();

      BufferedReader in = new BufferedReader(
         new InputStreamReader(con.getInputStream()));

      String linea;
      while ((linea = in.readLine()) != null) {
         System.out.println(linea);
      }
   }
}</pre></p>
<p><b>Accediendo a un sitio HTTPS</b></p>
<p>Al igual que en el caso anterior especifiquemos una URL, pero ahora una cuyo protocolo sea HTTPS, por lo que tendremos:<br />
<pre class="brush: java;">
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Main {
   public static void main(String[] args)
    throws MalformedURLException, IOException {
      URL url = new URL(&quot;https://algun_servidor...&quot;);
      URLConnection con = url.openConnection();

      BufferedReader in = new BufferedReader(
         new InputStreamReader(con.getInputStream()));

      String linea;
      while ((linea = in.readLine()) != null) {
         System.out.println(linea);
      }
   }
}</pre><br />
Si ejecutamos este código tendremos la siguiente excepción:</p>
<blockquote>
<h6><font color="#993300">Exception in thread &#8220;main&#8221; java.io.IOException:  Server returned HTTP response code: 401 for URL: https://algun_servidor&#8230;<br />
at sun.net.www.protocol.http.HttpURLConnection.getInputStream (HttpURLConnection.java:1241)<br />
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:234)<br />
at ejemplo.Main.main(Main.java:57)<br />
Java Result: 1</font></h6>
</blockquote>
<p>esta excepción se produce porque nos falta realizar la autenticación para ingresar al sitio.</p>
<p>Para conseguir autenticarnos utilizaremos la clase <code>java.net.Authenticator</code>, sobrescribiendo el método <code>getPasswordAuthentication()</code>. Este método debe devolver  un objeto del tipo <code>java.net.PasswordAuthentication</code> seteado tanto con el usuario y clave.</p>
<p>Para realizar esto lo hacemos de la siguiente forma:<br />
<pre class="brush: java;">
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.net.URLConnection;

public class Main {
   public static void main(String[] args)
    throws MalformedURLException, IOException {

      URL url = new URL(&quot;https://algun_servidor...&quot;);
      URLConnection con = url.openConnection();

      Authenticator au = new Authenticator() {
         @Override
         protected PasswordAuthentication
            getPasswordAuthentication() {
            return new PasswordAuthentication
               (&quot;usuario&quot;, &quot;clave&quot;.toCharArray());
         }
      };
      Authenticator.setDefault(au);

      BufferedReader in = new BufferedReader(
         new InputStreamReader(con.getInputStream()));

      String linea;
      while ((linea = in.readLine()) != null) {
         System.out.println(linea);
      }
   }
}</pre><br />
y listo, ahí podremos acceder.Hasta la próxima.</p>
<p><b>Más Info:</b></p>
<ul>
<li> <a href="http://java.sun.com/javase/6/docs/api/java/net/URLConnection.html" title="JAvadoc de URLConnection" target="_blank">Javadoc URLConnection</a></li>
<li><a href="http://blog.taragana.com/index.php/archive/java-tip-basic-authentication-with-httpurlconnection/es/" title="http://blog.taragana.com" target="_blank">blog.taragana.com</a></li>
<li><a href="http://www.javaworld.com/javaworld/javatips/jw-javatip96.html" title="Use HTTPS in your Java client code">Tip 96: Use HTTPS in your Java client code</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/61/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/61/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=61&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/02/14/accediendo-a-un-sitio-httphttps-desde-java/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Centrar un JFrame/JDialog en pantalla</title>
		<link>http://lefunes.wordpress.com/2008/02/11/centrar-un-jframejdialog-en-pantalla/</link>
		<comments>http://lefunes.wordpress.com/2008/02/11/centrar-un-jframejdialog-en-pantalla/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 00:25:01 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JFrame]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[jdialog]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=56</guid>
		<description><![CDATA[Al crear un nuevo JFrame ó JDialog en Swing, al hacerlos visibles estos aparecerán arriba a la izquierda de nuestra pantalla. Por ejemplo si realizamos: al ejecutarlo, veremos como resultado así: Si ahora especificamos por medio del método setLocationRelativeTo a null, la ventana se posicionará en el medio de la pantalla. Por lo que si [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=56&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Al crear un nuevo JFrame ó JDialog en Swing, al hacerlos visibles estos aparecerán arriba a la izquierda de nuestra pantalla. Por ejemplo si realizamos:</p>
<p><pre class="brush: java;">
import javax.swing.JFrame;

public class Prueba{
   public static void main(String[] args){

      JFrame frame = new JFrame(&quot;Prueba JFrame&quot;);
      frame.setSize(500, 500);
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}</pre><br />
al ejecutarlo, veremos como resultado así:<a href="http://lefunes.files.wordpress.com/2008/02/pantalla_borde.gif" title="Enlace directo a archivo"></a></p>
<div style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/02/pantalla_borde.gif" title="Enlace directo a archivo"><img src="http://lefunes.files.wordpress.com/2008/02/pantalla_borde.thumbnail.gif?w=295&#038;h=223" alt="JFrame en posicion de apertura por defecto" height="223" width="295" /></a></div>
<p><span id="more-56"></span>Si ahora especificamos por medio del método <font color="#008000"><b>setLocationRelativeTo</b></font> a null, la  ventana se posicionará en el medio de la pantalla. Por lo que si agregamos la siguiente linea:</p>
<p><pre class="brush: java;">
import javax.swing.JFrame;

public class Prueba{
   public static void main(String[] args){

      JFrame frame = new JFrame(&quot;Prueba JFrame&quot;);
      frame.setSize(500, 500);
      frame.setLocationRelativeTo(null);
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}</pre><br />
tendremos un resultado similar a este:<a href="http://lefunes.files.wordpress.com/2008/02/pantalla_centro.gif" title="Enlace directo a archivo"></a></p>
<div style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/02/pantalla_centro.gif" title="Enlace directo a archivo"><img src="http://lefunes.files.wordpress.com/2008/02/pantalla_centro.thumbnail.gif?w=295&#038;h=223" alt="JFrame abierta en el centro de la pantalla" height="223" width="295" /></a></div>
<p><b>Centrar JDialog en JFrame</b></p>
<p>Si lo que deseamos es centrar un JDialog en el JFrame &#8220;padre&#8221;, lo que hacemos es usar el mismo método, pero esta vez especificando que la posicioón de apertura del JDialog será con respecta al JFrame:</p>
<p><pre class="brush: java;">
import javax.swing.JFrame;

public class Prueba{
   public static void main(String[] args){

      JFrame frame = new JFrame(&quot;Prueba JFrame&quot;);
      frame.setSize(500, 500);
      frame.setLocationRelativeTo(null);

      final JButton boton = new JButton(&quot;Abrir Dialogo&quot;);
      boton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            JDialog dialogo = new JDialog(frame);
            dialogo.setSize(100, 100);
            dialogo.setLocationRelativeTo(frame);
            dialogo.setVisible(true);
         }
      });

      frame.add(boton);
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}</pre><br />
los que no da como resultado al hacer click:<a href="http://lefunes.files.wordpress.com/2008/02/pantalla_dialogo_centro.gif" title="Enlace directo a archivo"></a></p>
<div style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2008/02/pantalla_dialogo_centro.gif" title="Enlace directo a archivo"><img src="http://lefunes.files.wordpress.com/2008/02/pantalla_dialogo_centro.thumbnail.gif?w=295&#038;h=223" alt="JDialog centrado en JFrame" height="223" width="295" /></a></div>
<p>Espero les sea de utilidad.</p>
<p>Hasta la próxima.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/56/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/56/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=56&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/02/11/centrar-un-jframejdialog-en-pantalla/feed/</wfw:commentRss>
		<slash:comments>43</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/02/pantalla_borde.thumbnail.gif" medium="image">
			<media:title type="html">JFrame en posicion de apertura por defecto</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/02/pantalla_centro.thumbnail.gif" medium="image">
			<media:title type="html">JFrame abierta en el centro de la pantalla</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/02/pantalla_dialogo_centro.thumbnail.gif" medium="image">
			<media:title type="html">JDialog centrado en JFrame</media:title>
		</media:content>
	</item>
		<item>
		<title>Error 1904: Module &#8230;dll failed to register. HRESULT -2147023898</title>
		<link>http://lefunes.wordpress.com/2008/01/31/error-1904-module-dll-failed-to-register-hresult-2147023898/</link>
		<comments>http://lefunes.wordpress.com/2008/01/31/error-1904-module-dll-failed-to-register-hresult-2147023898/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 14:30:51 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[ESRI]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[arccatalog]]></category>
		<category><![CDATA[arcgis]]></category>
		<category><![CDATA[arcmap]]></category>
		<category><![CDATA[instalacion]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=54</guid>
		<description><![CDATA[Problema: Al instalar ArcGIS 9.0 en Windows XP SP2 corriendo sobre una maquina con AMD64, nos aparece el siguiente error: Error 1904: Module xxxxx.dll failed to register. HRESULT -2147023898 donde xxxxx son algunas DLLs, entre ellas xmlsupportui, 3dsymbolsui, AoInitializer, etc. Motivo del problema: El problema se produce porque WinXP SP2 activa el DEP (Data Execution [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=54&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b><font color="#000080">Problema:</font></b></p>
<p>Al instalar ArcGIS 9.0 en Windows XP SP2 corriendo sobre una maquina con AMD64, nos aparece el siguiente error:</p>
<blockquote><p><font color="#339966">Error 1904: Module xxxxx.dll failed to register. HRESULT -2147023898</font></p></blockquote>
<p>donde xxxxx son algunas DLLs, entre ellas xmlsupportui, 3dsymbolsui, AoInitializer, etc.</p>
<p><span id="more-54"></span><br />
<font color="#000080"><b>Motivo del problema:</b> </font></p>
<p>El problema se produce porque WinXP SP2 activa el <font color="#ff6600">DEP (Data Execution Prevention) </font>en procesadores como el Athlon 64 de AMD (al igual que en Intel Celeron-D o Xeon) para evitar la ejecución de código malicioso en ciertas regiones de memoria.</p>
<p>Entre las cosas bloqueadas se encuentra el <font color="#ff6600">Regsvr32</font>, no pudiendo registrar las DLLs necesarias.</p>
<p><b><font color="#000080">Solución:</font></b></p>
<p>Lo que se debe hacer es deshabilitar el DEP, instalar ArcGIS 9.0 y volver a habilitar el DEP.</p>
<ul>
<li>Para inhabilitar el DEP hay que:
<ul>
<li>Abrir las &#8220;Propiedades del Sistema&#8221; (haciendo click derecho en MI PC y ahi en propiedades ó Inicio -&gt; Configuración -&gt; Panel de Control -&gt; Sistema)</li>
</ul>
<ul>
<li>Abrir la pestaña &#8220;Opciones Avanzadas&#8221;, y en la sección &#8220;Inicio y Recuperación&#8221; hacer click en &#8220;Configuración&#8221;</li>
</ul>
<ul>
<li>En la sección &#8220;Inicio del Sistema&#8221; hacer click en &#8220;Editar&#8221;</li>
</ul>
<ul>
<li>En el archivo que se nos abre modificar <font color="#ff9900">&#8220;/NoExecute=OptIn&#8221;</font> por <font color="#ff9900">&#8220;/NoExecute=AlwaysOff&#8221;</font></li>
</ul>
<ul>
<li>Guardar las modificaciones del archivo y reiniciar</li>
</ul>
</li>
</ul>
<ul>
<li>Instalar ArcGIS 9.0</li>
</ul>
<ul>
<li>Habilitar el DEP nuevamente (realizar los mismo pasos de recien, pero cambiar <font color="#ff9900">&#8220;/NoExecute=AlwaysOff&#8221;</font> por <font color="#ff9900">&#8220;/NoExecute=OptIn&#8221;</font>)</li>
</ul>
<p><b><font color="#000080">Más Info:</font></b></p>
<ul>
<li><a href="http://support.esri.com/index.cfm?fa=knowledgebase.techArticles.articleShow&amp;d=28647"> Problem:  Issues with Windows XP SP2 and ArcGIS 9.0 products</a></li>
<li><a href="http://support.esri.com/index.cfm?fa=knowledgebase.techArticles.articleShow&amp;d=%2028065">Error:  Error 1904: failed to register C:\Program Files\ArcGIS\Bin\xmlsupportui.dll or 3dsymbolsui.dll</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/54/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/54/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=54&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/01/31/error-1904-module-dll-failed-to-register-hresult-2147023898/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Failed to set permissions on the installed files</title>
		<link>http://lefunes.wordpress.com/2008/01/30/failed-to-set-permissions-on-the-installed-files/</link>
		<comments>http://lefunes.wordpress.com/2008/01/30/failed-to-set-permissions-on-the-installed-files/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 19:51:53 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[instalacion]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/?p=55</guid>
		<description><![CDATA[Instalando PostgreSQL 8.2 en un Win XP SP2 tube el siguiente problema, donde al momento de casi finalizar la instalacion me salía un dialogo con el siguiente mensaje: &#8220;Failed to set permissions on the installed files Please see the log file in C:\Archivos de programa\PostgreSQL\8.2\tmp\pgperm.log&#8221; Despues de aceptar realizaba un rollback de la instalación y [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=55&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Instalando PostgreSQL 8.2 en un Win XP SP2 tube el siguiente problema, donde al momento de casi finalizar la instalacion me salía un dialogo con el siguiente mensaje:</p>
<blockquote><p><font color="#339966"> &#8220;Failed to set permissions on the installed files Please see the log file in C:\Archivos de programa\PostgreSQL\8.2\tmp\pgperm.log&#8221;</font></p></blockquote>
<p>Despues de aceptar realizaba un rollback de la instalación y volvía todo a cero.<br />
<span id="more-55"></span><br />
Despues de revisar un par de <a href="http://www.postgresql.org/docs/faqs.FAQ_windows.html#3.1" title="PostgreSQL FAQ">FAQs</a> y revisar todo, seguía con el mismo problema. Hasta que me di cuenta que la carpeta &#8220;C:\Archivos de programa\PostgreSQL\8.2&#8243; quedaba con permisos de solo lectura.</p>
<p>Finalmente mientras se realizaba la instalación le quite los permisos de solo lectura a la carpeta y listo, la instalación finalizo correctamente.</p>
<p>Espero les sirva.</p>
<p>Hasta la proxima.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/55/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/55/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=55&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/01/30/failed-to-set-permissions-on-the-installed-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>ArcMap/ArcCatalog 9 no inician</title>
		<link>http://lefunes.wordpress.com/2008/01/16/arcmaparccatalog-9-no-inician/</link>
		<comments>http://lefunes.wordpress.com/2008/01/16/arcmaparccatalog-9-no-inician/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 13:31:21 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[ESRI]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[arccatalog]]></category>
		<category><![CDATA[arcgis]]></category>
		<category><![CDATA[arcmap]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2008/01/16/arcmaparccatalog-9-no-inician/</guid>
		<description><![CDATA[Hace unos días no puedo inicar ArcMap ni ArcView Investigando un poco encontre entre los articulos técnicos de ESRI este articulo . Basicamente, lo que dice es que existe una incompatibilidad con IExplorer 7. Como solución se debe realizar lo siguiente: Con ArcGIS 9.0, desintalar IExplorer 7 ya que al haberse acabado el soporte para [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=51&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace unos días no puedo inicar ArcMap ni ArcView<span id="more-51"></span></p>
<div style="text-align:center;"><img src="http://lefunes.files.wordpress.com/2008/01/am.gif?w=500" alt="ArcCatalogCrash" /></div>
<p>Investigando un poco encontre entre los articulos técnicos de ESRI <a href="http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.articleShow&amp;d=32661">este articulo </a>. Basicamente, lo que dice es que existe una incompatibilidad con <b>IExplorer 7</b>.</p>
<p>Como solución se debe realizar lo siguiente:</p>
<ul>
<li> Con <b>ArcGIS 9.0</b>, desintalar IExplorer 7 ya que al haberse acabado el soporte para esta versión, ESRI ya no saca más parches ni Services Packs.</li>
<li>Con <b>ArcGIS 9.1</b>, instalar el parche publicado por ESRI. <a href="http://support.esri.com/index.cfm?fa=downloads.patchesServicePacks.viewPatch&amp;PID=43&amp;MetaID=1150">Desde Aca</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/51/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/51/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=51&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/01/16/arcmaparccatalog-9-no-inician/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2008/01/am.gif" medium="image">
			<media:title type="html">ArcCatalogCrash</media:title>
		</media:content>
	</item>
		<item>
		<title>[fallthrough] posible fall-through into case</title>
		<link>http://lefunes.wordpress.com/2008/01/11/fallthrough-posible-fall-through-into-case/</link>
		<comments>http://lefunes.wordpress.com/2008/01/11/fallthrough-posible-fall-through-into-case/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 17:19:58 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2008/01/11/fallthrough-posible-fall-through-into-case/</guid>
		<description><![CDATA[Este error se produce cuando no existe un break (o alguna condicion de salida, como un return) dentro de un switch. switch(a){ case 1: &#8230;. break; case 2: &#8230;. &#60;&#8211; case sin break case 3: &#8230;. break; &#8230;. } Existen dos soluciones: 1) Si realmente buscamos esa funcionalidad, es decir, el case sin el break, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=50&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este error se produce cuando no existe un <b>break</b> (o alguna condicion de salida, como un <b>return</b>) dentro de un <b>switch.</b><br />
<span id="more-50"></span></p>
<blockquote>
<blockquote>
<blockquote><p>switch(a){</p>
<blockquote><p>case 1: &#8230;.</p>
<blockquote><p>break;</p></blockquote>
<p>case 2: &#8230;.          <font color="#ff0000"> &lt;&#8211; <b>case </b>sin break</font></p>
<p>case 3: &#8230;.</p>
<blockquote><p>break;</p></blockquote>
<p>&#8230;.</p></blockquote>
<p>}</p></blockquote>
</blockquote>
</blockquote>
<p>Existen dos soluciones:</p>
<blockquote><p> <b>1)</b></p>
<p>Si realmente buscamos esa funcionalidad, es decir, el <b>case </b>sin el <b>break</b>, y deseamos no recibir más la advertencia, podemos colocar una anotacion del tipo:</p></blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote><p><b>@SuppressWarnings(&#8220;fallthrough&#8221;)</b></p></blockquote>
</blockquote>
</blockquote>
</blockquote>
<blockquote><p>en el metodo. El problema es que no nos va a seguir notificando si existe otro case con el mismo problema, ya que explicitamente hemos indicado que no queremos recibir este tipo de warning.</p></blockquote>
<blockquote><p><b>2)</b></p></blockquote>
<blockquote><p> Si no es la funcionalidad buscada, simplemente agregar el <b>break </b>al final de <b>case</b></p></blockquote>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/50/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/50/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=50&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/01/11/fallthrough-posible-fall-through-into-case/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>there is no attribute &#8220;target&#8221;</title>
		<link>http://lefunes.wordpress.com/2008/01/08/there-is-no-attribute-target/</link>
		<comments>http://lefunes.wordpress.com/2008/01/08/there-is-no-attribute-target/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 23:33:46 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2008/01/08/there-is-no-attribute-target/</guid>
		<description><![CDATA[Hace unos días migrando una página vieja y formateándola me encontré que los links de la misma estaban de la forma: &#60;a href="hacia algun lugar" target='_blank'&#62;link&#60;/a&#62; por lo que al pasarla por el validador de la w3 tenía el siguiente error: there is no attribute &#8220;target&#8221; ya que este no es un atributo válido en [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=49&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace unos días migrando una página vieja y formateándola me encontré que los links de la misma estaban de la forma:</p>
<blockquote><p> <code> &lt;a href="hacia algun lugar" <b><font color="#800000">target='_blank'</font></b>&gt;link&lt;/a&gt;</code></p></blockquote>
<p>por lo que al pasarla por el <a href="http://validator.w3.org" title="validador de la w3">validador de la w3</a> tenía el siguiente error:</p>
<blockquote><p><font color="#993300">there is no attribute &#8220;target&#8221; </font></p></blockquote>
<p>ya que este no es un atributo válido en el XHTML estricto.</p>
<p>Buscando un poco, encontré que la forma más sencilla de arreglar este error es modificando el link de la siguiente forma:</p>
<blockquote><p> <code> &lt;a href="hacia algun lugar" <font color="#008000"><b>onclick="target='_blank';"</b></font>&gt;link&lt;/a&gt;</code></p></blockquote>
<p>permitiendo mantener la funcionalidad y quedando válida según la w3</p>
<p><b>Aquí encontré  la solucion:</b></p>
<p><a href="http://www.webdeveloper.com/forum/showthread.php?s=&amp;threadid=24359">http://www.webdeveloper.com/forum/showthread.php?s=&amp;threadid=24359</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/49/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/49/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=49&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2008/01/08/there-is-no-attribute-target/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Caracteres Especiales en Javascript</title>
		<link>http://lefunes.wordpress.com/2007/11/14/caracteres-especiales-en-javascript/</link>
		<comments>http://lefunes.wordpress.com/2007/11/14/caracteres-especiales-en-javascript/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 03:22:16 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[caracter]]></category>
		<category><![CDATA[caracteres]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2007/11/14/caracteres-especiales-en-javascript/</guid>
		<description><![CDATA[Listado de algunos caracteres especiales del español y su código correspondiente: Carácter HTML Unicode Á &#38;Aacute; \u00C1 á &#38;aacute; \u00E1 É &#38;Eacute; \u00C9 é &#38;eacute; \u00E9 Í &#38;Iacute; \u00CD í &#38;iacute; \u00ED Ó &#38;Oacute; \u00D3 ó &#38;oacute; \u00F3 Ú &#38;Uacute; \u00DA ú &#38;uacute; \u00FA Ü &#38;Uuml; \u00DC ü &#38;uuml; \u00FC Ṅ &#38;Ntilde; \u00D1 ñ &#38;ntilde; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=45&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Listado de algunos caracteres especiales del español y su código correspondiente:<br />
<span id="more-45"></span></p>
<table align="center" width="318">
<tr>
<td align="center"><font color="#993300"><b>Carácter</b></font></td>
<td align="center"><font color="#993300"><b>HTML</b></font></td>
<td align="center"><font color="#993300"><b>Unicode</b></font></td>
</tr>
<tr>
<td align="center">Á</td>
<td align="center"><i>&amp;</i>Aacute;</td>
<td align="center">\u00C1</td>
</tr>
<tr>
<td align="center">á</td>
<td align="center"><i>&amp;</i>aacute;</td>
<td align="center">\u00E1</td>
</tr>
<tr>
<td align="center">É</td>
<td align="center"><i>&amp;</i>Eacute;</td>
<td align="center">\u00C9</td>
</tr>
<tr>
<td align="center">é</td>
<td align="center"><i>&amp;</i>eacute;</td>
<td align="center">\u00E9</td>
</tr>
<tr>
<td align="center">Í</td>
<td align="center"><i>&amp;</i>Iacute;</td>
<td align="center">\u00CD</td>
</tr>
<tr>
<td align="center">í</td>
<td align="center"><i>&amp;</i>iacute;</td>
<td align="center">\u00ED</td>
</tr>
<tr>
<td align="center">Ó</td>
<td align="center"><i>&amp;</i>Oacute;</td>
<td align="center">\u00D3</td>
</tr>
<tr>
<td align="center">ó</td>
<td align="center"><i>&amp;</i>oacute;</td>
<td align="center">\u00F3</td>
</tr>
<tr>
<td align="center">Ú</td>
<td align="center"><i>&amp;</i>Uacute;</td>
<td align="center">\u00DA</td>
</tr>
<tr>
<td align="center">ú</td>
<td align="center"><i>&amp;</i>uacute;</td>
<td align="center">\u00FA</td>
</tr>
<tr>
<td align="center">Ü</td>
<td align="center"><i>&amp;</i>Uuml;</td>
<td align="center">\u00DC</td>
</tr>
<tr>
<td align="center">ü</td>
<td align="center"><i>&amp;</i>uuml;</td>
<td align="center">\u00FC</td>
</tr>
<tr>
<td align="center">Ṅ</td>
<td align="center"><i>&amp;</i>Ntilde;</td>
<td align="center">\u00D1</td>
</tr>
<tr>
<td align="center">ñ</td>
<td align="center"><i>&amp;</i>ntilde;</td>
<td align="center">\u00F1</td>
</tr>
</table>
<p>Otros caracteres especiales muy usados son los siguientes:</p>
<table align="center" width="318">
<tr>
<td align="center"><font color="#993300"><b>Carácter</b></font></td>
<td align="center"><font color="#993300"><b>HTML</b></font></td>
<td align="center"><font color="#993300"><b>Unicode</b></font></td>
</tr>
<tr>
<td align="center">&amp;</td>
<td align="center"><i>&amp;</i>amp;</td>
<td align="center">\u0022</td>
</tr>
<tr>
<td align="center">&lt;</td>
<td align="center"><i>&amp;</i>lt;</td>
<td align="center">\u003C</td>
</tr>
<tr>
<td align="center">&gt;</td>
<td align="center"><i>&amp;</i>gt;</td>
<td align="center">\u003E</td>
</tr>
<tr>
<td align="center">í</td>
<td align="center">&amp;itilde;</td>
<td align="center">\u00ED</td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><i>&amp;</i>nbsp;</td>
<td align="center">\u00A0</td>
</tr>
<tr>
<td align="center">&#8220;</td>
<td align="center"><i>&amp;</i>quot;</td>
<td align="center">\u0022</td>
</tr>
<tr>
<td align="center">&#8216;</td>
<td align="center"><i>&amp;</i>apos;</td>
<td align="center">\u0027</td>
</tr>
<tr>
<td align="center">©</td>
<td align="center"><i>&amp;</i>copy;</td>
<td align="center">\u00A9</td>
</tr>
<tr>
<td align="center">®</td>
<td align="center"><i>&amp;</i>reg;</td>
<td align="center">\u00AE</td>
</tr>
<tr>
<td align="center">€</td>
<td align="center"><i>&amp;</i>euro;</td>
<td align="center">\u20AC</td>
</tr>
<tr>
<td align="center">&deg;</td>
<td align="center"><i>&amp;</i>deg;</td>
<td align="center">\u00B0</td>
</tr>
<tr>
<td align="center">&sup2;</td>
<td align="center"><i>&amp;</i>sup2;</td>
<td align="center">\u00B2</td>
</tr>
<tr>
<td align="center">&sup3;</td>
<td align="center"><i>&amp;</i>sup3;</td>
<td align="center">\u00B3</td>
</tr>
<tr>
<td align="center">&micro;</td>
<td align="center"><i>&amp;</i>micro;</td>
<td align="center">\u00B5</td>
</tr>
<tr>
<td align="center">¼</td>
<td align="center"><i>&amp;</i>frac14;</td>
<td align="center">\u00BC</td>
</tr>
<tr>
<td align="center">½</td>
<td align="center"><i>&amp;</i>frac12;</td>
<td align="center">\u00BD</td>
</tr>
<tr>
<td align="center">¾</td>
<td align="center"><i>&amp;</i>frac34;</td>
<td align="center">\u00BE</td>
</tr>
<tr>
<td align="center">&pi;</td>
<td align="center"><i>&amp;</i>pi;</td>
<td align="center">\u03C0</td>
</tr>
</table>
<p><b>Enlaces</b></p>
<ul>
<li><a href="http://lefunes.wordpress.com/2007/05/23/acentos-con-javascript/" title="http://lefunes.wordpress.com/2007/05/23/acentos-con-javascript/">Como utilizar caracteres unicode en javascript<br />
</a></li>
<li><a href="http://www.ascii.cl/es/codigos-html.htm" title="http://www.ascii.cl/es/codigos-html.htm">C&oacute;digos HTML &#8211; Caracteres y s&iacute;mbolos</a></li>
<li><a href="http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references" title="http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references">List of XML and HTML character entity references</a></li>
<li><a href="http://e-tidsskrift.dk/dev/tegntabel.html#specialtegn" title="http://e-tidsskrift.dk/dev/tegntabel.html#specialtegn">Specialtegn i HTML, XML og JavaScript</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/45/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/45/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=45&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2007/11/14/caracteres-especiales-en-javascript/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalando gwt4nb</title>
		<link>http://lefunes.wordpress.com/2007/11/13/instalando-gwt4nb/</link>
		<comments>http://lefunes.wordpress.com/2007/11/13/instalando-gwt4nb/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 03:32:59 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[gwt4nb]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2007/11/13/instalando-gwt4nb/</guid>
		<description><![CDATA[gwt4nb es un plugin para NetBeans, que nos permite desarrollar proyectos GWT dentro del IDE.Para instalarlo debemos: Descargamos el módulo de la pagina oficial (descarga) . Dentro de NB nos dirigimos a Tools-&#62;Plugins En el dialogo abrimos la pestaña Downloaded Hacemos click en Add Plugin&#8230; y seleccionamos el archivo descargado Hacemos click en Install Una [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=44&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b>gwt4nb </b>es un plugin para <b>NetBeans</b>, que nos permite desarrollar proyectos <b>GWT </b>dentro del IDE.Para instalarlo debemos:<br />
<span id="more-44"></span></p>
<ul>
<li>Descargamos el módulo de la pagina oficial (<a href="https://gwt4nb.dev.java.net/servlets/ProjectDocumentList?folderID=7081&amp;expandFolder=7081&amp;folderID=0" title="descarga">descarga</a>) .</li>
<li>Dentro de NB nos dirigimos a <b>Tools-&gt;Plugins</b></li>
<li>En el dialogo abrimos la pestaña<b> Downloaded</b></li>
<li>Hacemos click en <b>Add Plugin&#8230;</b> y seleccionamos el archivo descargado</li>
<li>Hacemos click en <b>Install</b></li>
</ul>
<p>Una vez instalado podemos verificar que todo ha salido bien, debemos crear un nuevo proyecto web (Web Application), y luego de elegir un nombre, ubicación, servidor del proyecto, en el tercer paso, el wizard nos pedirá elegir el framework a utilizar, entre los cuales deberá aparecer <b>Google Web Toolkit</b></p>
<p>Seleccionado la ubicación donde se ubica la carpeta de instalación de GWT y el nombre del modulo principal, damos por finalizado el wizard.</p>
<p>Una vez credo el proyecto lo corremos (Run Main Project ó F6) y deberá mostrar el proyecto de prueba en nuestro navegador.</p>
<p>Otra forma de verificar el proyecto es correrlo en <b>hosted mode</b> , haciendo click en <b>Run-&gt;GWT Hosted Mode</b></p>
<p><b>Enlaces </b></p>
<ul>
<li>Pagina Principal gwt4nb (Ingles): <a href="https://gwt4nb.dev.java.net/" title="https://gwt4nb.dev.java.net/">https://gwt4nb.dev.java.net/</a></li>
<li>Quick Start (Ingles) : <a href="https://gwt4nb.dev.java.net/manual/quickstart.html" title="https://gwt4nb.dev.java.net/manual/quickstart.html">https://gwt4nb.dev.java.net/manual/quickstart.html</a></li>
<li>Página Principal GWT:  <a href="http://code.google.com/webtoolkit/" title="http://code.google.com/webtoolkit/">http://code.google.com/webtoolkit/</a></li>
<li>Blog oficial GWT: <a href="http://googlewebtoolkit.blogspot.com/" title="http://googlewebtoolkit.blogspot.com/">http://googlewebtoolkit.blogspot.com/</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/44/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/44/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=44&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2007/11/13/instalando-gwt4nb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>
	</item>
		<item>
		<title>The class must be compiled and must be on the classpath of the project to which this form belongs</title>
		<link>http://lefunes.wordpress.com/2007/11/08/the-class-must-be-compiled-and-must-be-on-the-classpath-of-the-project-to-which-this-form-belongs/</link>
		<comments>http://lefunes.wordpress.com/2007/11/08/the-class-must-be-compiled-and-must-be-on-the-classpath-of-the-project-to-which-this-form-belongs/#comments</comments>
		<pubDate>Thu, 08 Nov 2007 19:52:26 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2007/11/08/the-class-must-be-compiled-and-must-be-on-the-classpath-of-the-project-to-which-this-form-belongs/</guid>
		<description><![CDATA[Problema Queremos insertar un Beans desde la paleta a un formulario y NetBeans nos responde: The class must be compiled and must be on the classpath of the project to which this form belongs Este error nos indica que el Beans del proyecto que queremos insertar tiene dependencias no resueltas en nuestro proyecto. Solución Tenemos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=40&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b>Problema</b></p>
<p>Queremos insertar un Beans desde la paleta a un formulario y NetBeans nos responde:</p>
<blockquote>
<p align="center"><font color="#666699">The class must be compiled and must be on the classpath of the project to which this form belongs</font></p>
</blockquote>
<p><span id="more-40"></span><br />
Este error nos indica que el Beans del proyecto que queremos insertar tiene dependencias no resueltas en nuestro proyecto.</p>
<p><b>Solución</b></p>
<p>Tenemos que fijarnos que cuando intentamos insertar, por ejemplo, un Bean de un proyecto A que tiene dependencias a un proyecto B, en nuestro proyecto debemos tener referencias tanto al proyecto A como a B.</p>
<p>Para ver las dependencias de un proyecto en NetBeans, hacemos click sobre en el directorio &#8220;Libreries&#8221; dentro del árbol del proyecto.</p>
<p style="text-align:center;"><a href="http://lefunes.files.wordpress.com/2007/11/lib1.jpg" title="The class must be compiled and must be on the classpath of the project to which this form belongs"><img src="http://lefunes.files.wordpress.com/2007/11/lib1.jpg?w=500" alt="The class must be compiled and must be on the classpath of the project to which this form belongs" /></a></p>
<p>Si deseamos agregar una nueva librería hacemos click derecho sobre &#8220;Libreries&#8221; y elegimos de que tipo es la librería a utilizar.</p>
<p align="center"><a href="http://lefunes.files.wordpress.com/2007/11/lib2.jpg" title="The class must be compiled and must be on the classpath of the project to which this form belongs"><img src="http://lefunes.files.wordpress.com/2007/11/lib2.jpg?w=500" alt="The class must be compiled and must be on the classpath of the project to which this form belongs" /></a></p>
<p align="left"> Para ver en mas detalles podemos ir a &#8220;Properties&#8221; y editar o eliminar dependencias, elegir la plataforma a utilizar, etc.</p>
<p align="center"><a href="http://lefunes.files.wordpress.com/2007/11/lib3.jpg" title="The class must be compiled and must be on the classpath of the project to which this form belongs"><img src="http://lefunes.files.wordpress.com/2007/11/lib3.jpg?w=461&#038;h=326" alt="The class must be compiled and must be on the classpath of the project to which this form belongs" height="326" width="461" /></a></p>
<p align="center">&nbsp;</p>
<p align="left">Cordiales saludos, espero que les sirva</p>
<p align="center">&nbsp;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/40/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/40/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=40&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2007/11/08/the-class-must-be-compiled-and-must-be-on-the-classpath-of-the-project-to-which-this-form-belongs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2007/11/lib1.jpg" medium="image">
			<media:title type="html">The class must be compiled and must be on the classpath of the project to which this form belongs</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2007/11/lib2.jpg" medium="image">
			<media:title type="html">The class must be compiled and must be on the classpath of the project to which this form belongs</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2007/11/lib3.jpg" medium="image">
			<media:title type="html">The class must be compiled and must be on the classpath of the project to which this form belongs</media:title>
		</media:content>
	</item>
		<item>
		<title>Estructura de Ficheros Virtual &#8211; Filesystems API</title>
		<link>http://lefunes.wordpress.com/2007/09/06/estructura-de-ficheros-virtual-filesystems-api/</link>
		<comments>http://lefunes.wordpress.com/2007/09/06/estructura-de-ficheros-virtual-filesystems-api/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 00:30:13 +0000</pubDate>
		<dc:creator>Le Funes</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[NetBeans Platform]]></category>
		<category><![CDATA[platform]]></category>

		<guid isPermaLink="false">http://lefunes.wordpress.com/2007/09/06/estructura-de-ficheros-virtual-filesystems-api/</guid>
		<description><![CDATA[NetBeans Platform utiliza internamente un sistema de ficheros virtual. Mediante el Filesystems API permite acceder y recorrer este. El Filesystem esta compuesto por FileObjects. Posee un directorio principal o raíz (root), que es un FileObject que puede tener anidado otros FileObjects (ya sean ficheros o mas directorios). Cada archivo para el Filesystem es considerado un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=38&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>NetBeans Platform utiliza internamente un sistema de ficheros virtual. Mediante el <b>Filesystems API</b> permite acceder y recorrer este.</p>
<p>El Filesystem esta compuesto por <b>FileObjects</b>. Posee un directorio principal o raíz (root), que es un FileObject que puede tener anidado otros FileObjects  (ya sean ficheros o mas directorios).<br />
<span id="more-38"></span><br />
Cada archivo para el Filesystem es considerado un stream de bytes con un tipo MIME asociado.</p>
<div style="text-align:center;"><img src="http://lefunes.files.wordpress.com/2007/09/007.png?w=500" alt="filesystem" /></div>
<p>Prácticamente se comporta de igual manera que un sistema de ficheros real, permitiendo:</p>
<ul>
<li>Buscar archivos y carpetas</li>
<li>Crear, borrar y renombrar archivos y carpetas</li>
<li>Leer y escribir archivos</li>
</ul>
<p>Pero como gran ventaja adicional nos permite ser notificados cuando un archivo o carpeta son modificados.</p>
<p><span style="text-decoration:underline;"><b>Tipos de Filesystems<br />
</b></span></p>
<p style="margin-left:36pt;">Existen diversas implementaciones de la clase abstracta <b>FileSystem</b> (y mas específicamente de sus subclases abstractas <b>AbstractFileSystem</b> y <b>MultiFileSystem</b>) como en el caso de <b>JarFileSystem</b>, <b>LocalFileSystem</b> o <b>XMLFileSystem</b></p>
<p><span style="text-decoration:underline;"><b>Más Info:<br />
</b></span></p>
<ul>
<li><a href="http://bits.netbeans.org/dev/javadoc/org-openide-filesystems/overview-summary.html">File System API</a></li>
<li><a href="http://bits.netbeans.org/dev/javadoc/index.html">Overview (File System API)</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/lefunes.wordpress.com/38/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/lefunes.wordpress.com/38/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lefunes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lefunes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lefunes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lefunes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lefunes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lefunes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lefunes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lefunes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lefunes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lefunes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lefunes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lefunes.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lefunes.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lefunes.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lefunes.wordpress.com&amp;blog=1418318&amp;post=38&amp;subd=lefunes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lefunes.wordpress.com/2007/09/06/estructura-de-ficheros-virtual-filesystems-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/adc07dc593847e79a062f8696e959982?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Le Funes</media:title>
		</media:content>

		<media:content url="http://lefunes.files.wordpress.com/2007/09/007.png" medium="image">
			<media:title type="html">filesystem</media:title>
		</media:content>
	</item>
	</channel>
</rss>
