<?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>just 4 cool ! &#187; linux</title>
	<atom:link href="http://just4cool.wordpress.com/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://just4cool.wordpress.com</link>
	<description>Cine, música, software ...</description>
	<lastBuildDate>Thu, 03 Dec 2009 00:44:01 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='just4cool.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3d4d0e462933cebfe55b6105ea6c28c3?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>just 4 cool ! &#187; linux</title>
		<link>http://just4cool.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://just4cool.wordpress.com/osd.xml" title="just 4 cool !" />
		<item>
		<title>Eclipse va muy lento</title>
		<link>http://just4cool.wordpress.com/2009/02/21/eclipse-va-muy-lento/</link>
		<comments>http://just4cool.wordpress.com/2009/02/21/eclipse-va-muy-lento/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 12:27:56 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=246</guid>
		<description><![CDATA[
Una de los mejores entornos de programación para Java, por no decir el mejor, es Eclipse. Está disponible para todas las plataformas habidas y por haber aunque se da el caso de que al bajarlo para Ubuntu por medio del sistema de paquetes su ejecución suele ser demasiado lenta. Esto ocurre a causa de que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=246&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="aligncenter size-full wp-image-248" title="eclipse_icon" src="http://just4cool.files.wordpress.com/2009/02/eclipse_icon.png?w=107&#038;h=112" alt="eclipse_icon" width="107" height="112" /></p>
<p style="text-align:justify;">Una de los mejores entornos de programación para Java, por no decir el mejor, es <strong><a href="http://www.eclipse.org">Eclipse</a></strong>. Está disponible para todas las plataformas habidas y por haber aunque se da el caso de que al bajarlo para <strong>Ubuntu</strong> por medio del sistema de paquetes su ejecución suele ser <strong>demasiado lenta</strong>. Esto ocurre a causa de que Eclipse está desarrollado en Java y por defecto se va a utilizar para su ejecución la implementación libre de la máquina virtual de Java conocida como <strong>GIJ</strong> (GNU Interpreter for Java).</p>
<p style="text-align:justify;">He tenido la oportunidad de estudiar a fondo esta herramienta y comprobé que es muchísimo <strong>más lenta</strong> que su equivalente privativo por lo que si priorizamos la velocidad de ejecución recomiendo utilizar en nuestro sistema la versión de <strong>Sun</strong>. Eso hará que Eclipse se ejecute con mayor <strong>agilidad</strong>.</p>
<p><span id="more-246"></span></p>
<p style="text-align:justify;">Lo primero que tenemos que hacer es instalar el <strong>Java Development Kit</strong> de Sun por medio del sistema de paquetes que incorpora Ubuntu. Escribiremos para ello:</p>
<pre> $ sudo apt-get install sun-java6-jdk</pre>
<p style="text-align:justify;">Una vez hecho esto vamos a <strong>seleccionar</strong> la ejecución de la máquina virtual de Sun cuando ejecutemos por consola &#8220;java&#8221; lo que haremos por medio del comando:</p>
<pre> $ sudo update-alternatives --config java
Hay 4 alternativas que proveen `java'.

  Selección     Alternativa
-----------------------------------------------
          1    /usr/bin/gij-4.2
          2    /usr/bin/gij-4.3
*+        3    /usr/lib/jvm/java-gcj/jre/bin/java
          4    /usr/lib/jvm/java-6-sun/jre/bin/java

Pulse  para mantener el valor por omisión [*] o pulse un número de selección:</pre>
<p style="text-align:justify;">Tendremos que pulsar, en este caso, 4. A continuación haremos que Eclipse seleccione para <strong>su ejecución</strong> la máquina virtual de Java de Sun. Para ello tenemos que editar el fichero <code>/etc/eclipse/java_home</code> y poner en primera línea la <strong>ruta</strong> a la JVM que vamos a utilizar, es decir, <code>/usr/lib/jvm/java-6-sun</code>. Ahora podremos ejecutar:</p>
<pre> $ eclipse
searching for compatible vm...
  testing /usr/lib/jvm/java-6-sun...found</pre>
<p style="text-align:justify;">Ya hemos conseguido que Eclipse vaya más <strong>rápido</strong>. Por último, si nos interesa <strong>compilar</strong> utilizando el Kit de Sun podemos entrar en Window&gt;Preferences dentro de Eclipse y movernos hasta Java&gt;Instaled JREs.  Una vez ahí pulsaremos Search para añadir el JDK de Sun buscando desde el directorio <code>/usr/lib</code>. Una vez añadidos todos, seleccionaremos el que más nos convenga.</p>
<p style="text-align:justify;">Para comunicar cualquier error o matiz en este tip, deja un comentario.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/246/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=246&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2009/02/21/eclipse-va-muy-lento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2009/02/eclipse_icon.png" medium="image">
			<media:title type="html">eclipse_icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Conociendo el FSTAB y sus opciones</title>
		<link>http://just4cool.wordpress.com/2009/02/19/conociendo-el-fstab-y-sus-opciones/</link>
		<comments>http://just4cool.wordpress.com/2009/02/19/conociendo-el-fstab-y-sus-opciones/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 15:06:21 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=240</guid>
		<description><![CDATA[
Una de las dudas más comunes que abordan a los usuarios nuevos en el mundo de GNU/Linux trata sobre el montaje automático de las particiones y de sus permisos. Las órdenes de montaje y sus opciones se encuentran alojadas en el fichero /etc/fstab.
Normalmente, al instalar distribuciones como Ubuntu, en el fstab se generan las líneas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=240&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="aligncenter" src="http://just4cool.files.wordpress.com/2008/12/drive-harddisk.png?w=127&amp;h=127&#038;h=127" alt="" width="127" height="127" /></p>
<p style="text-align:justify;">Una de las dudas más comunes que abordan a los usuarios nuevos en el mundo de GNU/Linux trata sobre el montaje automático de las <strong>particiones</strong> y de sus <strong>permisos</strong>. Las órdenes de montaje y sus opciones se encuentran alojadas en el fichero <code>/etc/fstab</code>.</p>
<p style="text-align:justify;">Normalmente, al instalar distribuciones como <strong>Ubuntu</strong>, en el <code>fstab</code> se generan las líneas de montaje de nuestras particiones automáticamente pero de un modo <strong>genérico</strong>. Muchos habrán visto que si lo dejamos tal cual, los nombres de los archivos de la partición al hacer un <code>ls</code> aparece en color <strong>verde</strong>. Esto ocurre cuando los ficheros tienen permisos de ejecución. Sin más vamos a entrar en materia.</p>
<p style="text-align:justify;"><span id="more-240"></span></p>
<p style="text-align:justify;">En primer lugar tenemos que <strong>identificar</strong> el dispositivo en el que se aloja la partición. Cuando el disco es SATA, el primer dispositivo se nombra como <code>sda</code>, el segundo será <code>sdb</code>, y así sucesivamente. Las particiones correspondientes al primer disco se nombrarán como <code>sda1</code>, <code>sda2</code>, etc. En caso de tener un disco <strong>IDE</strong> la nomenclatura será <code>hda</code>, <code>hdb</code>, y sus particiones <code>hda1</code>, <code>hda2</code> &#8230; etc. Los descriptores de todos los dispositivos y sus correspondientes particiones están en el directorio <code>/dev</code>. Para identificar cuáles son las particiones que queremos montar podemos utilizar la herramienta <code>fdisk</code>, a la que pasaremos como argumento el disco que queremos examinar. Si queremos ver las <strong>particiones</strong> del disco <code>sda</code> haremos:</p>
<pre style="text-align:justify;">fdisk /dev/sda</pre>
<p style="text-align:justify;">Con <code>fdisk</code> podemos manejar las particiones de modo<strong> flexible y seguro</strong>. Mediante la introducción de <code>p</code> veremos un <strong>listado</strong> de las particiones que tenemos. En mi caso he obtenido:</p>
<pre style="text-align:justify;">Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *           1        1848    14844028+  83  Linux
/dev/sda2            1849        1941      747022+  82  Linux swap / Solaris
/dev/sda3            1942        5766    30724312+   7  HPFS/NTFS
/dev/sda4   *        5767        7296    12289725    7  HPFS/NTFS</pre>
<p style="text-align:justify;">Una vez identificada la partición que queremos montar podemos empezar a <strong>definir</strong> el <code>fstab</code>. La estructura de este archivo usa una <strong>sintaxis</strong> especial. Cada línea está formada por seis campos, separados por espacios en blanco (espacio, tabuladores o una combinación). Cada campo tiene su propio <strong>significado</strong>:</p>
<ul style="text-align:justify;">
<li>El <strong>primer</strong> campo muestra la partición descrita (la ruta al fichero de dispositivo)</li>
<li>El <strong>segundo</strong> campo muestra el punto de montaje donde la partición debe montarse</li>
<li>El <strong>tercer</strong> campo muestra el sistema de ficheros usado por la partición</li>
<li>El <strong>cuarto</strong> campo muestra las opciones de montaje usadas por mount cuando trata de montar la partición. Como cada sistema de ficheros tiene sus propias opciones de montaje, le animamos a leer la página man de mount (man mount) para un listado completo. Cuando existen múltiples opciones se separan por comas.</li>
<li>El <strong>quinto</strong> campo es usado por dump para determinar si la partición necesita ser volcada o no. En general puede dejar esto como 0 (cero).</li>
<li>El <strong>sexto</strong> campo es usado por fsck para determinar el orden en que los sistemas de ficheros deben ser comprobados si el sistema no se apagó correctamente. La partición raíz debe tener un 1 mientras que el resto puede tener 2 (o 0 en el caso en que la comprobación del sistema de ficheros no sea necesaria).</li>
</ul>
<p style="text-align:justify;">Si queremos montar mi partición de <strong>datos</strong>, cuya ruta al descriptor es <code>/dev/sda3</code>, el primer campo será esta misma <strong>ruta</strong>. El segundo será el <strong>directorio</strong> en el que queremos montar la partición, el cual debe existir. En mi caso lo haré en <code>/media/DATOS</code>. Como ya hemos visto mediante <code>fdisk</code>, el <strong>sistema de ficheros</strong> de esta partición es <code>ntfs</code> por lo tanto esta va a ser la opción a especificar en el tercer campo. En el cuarto campo irán las opciones de montaje. El quinto y sexto campo lo dejaremos a 0. En este caso voy a explicar los que yo he utilizado y que considero más <strong>importantes</strong>; por supuesto, hay muchas otras opciones para las que os remito a las <code>manpages</code>. Veamos cuales son estas <strong>opciones</strong>:</p>
<ul style="text-align:justify;">
<li><code>auto</code>: Si especificamos esta opción, la partición se montará <strong>automáticamente</strong> al iniciar el sistema. La opción contraria es <code>noauto</code>. Lo más interesante es, sin duda, el montaje automático.</li>
<li><code>exec</code>: Esta opción la pondremos si tenemos interés en que podamos <strong>ejecutar</strong> binarios sobre la partición. Si por ejemplo vamos a programar y ejecutar sobre la partición será necesario especificarla. La opción contraria es <code>noexec</code>.</li>
<li><code>rw</code>: Al montar la partición, si especificamos esta opción estaremos <strong>permitiendo</strong> la lectura y escritura. Los permisos también deberán estar en concordancia con esta opción. Si queremos que la partición sea de sólo lectura la opción adecuada es <code>ro</code> (Read Only).</li>
<li><code>uid</code>: Digamos que está opción indicará a qué usuario/os <strong>pertenecen</strong> los <strong>ficheros</strong> de la partición que vamos a montar. Estos usuarios deberán ser indicados a través de su identificación. Podemos revisar qué número corresponde a cada usuario examinando el fichero <code>/etc/passwd</code>. En mi caso, el valor del <code>uid</code> para mi usuario es 1000.</li>
<li><code>gid</code>: Similar a la opción anterior pero referente al <strong>grupo</strong> de usuarios. Podemos ver el <code>gid</code> del grupo al que pertenecemos en el fichero <code>/etc/groups</code>. En mi caso es el mismo que el de usuario, 1000.</li>
<li><code>fmask</code>: Se trata del <strong>umask</strong> para los ficheros de la partición a montar. Así podremos especificar los <strong>permisos</strong> que tendrán estos ficheros. Dado que la partición de datos pertenece a mi usuario, voy a darle los mismos permisos que tendrán los ficheros de mi <code>home</code> por defecto que son lectura y escritura para el propietario (especificado en <code>uid</code>), lectura para usuarios del mismo grupo (especificado en <code>gid</code>) al que pertenece el fichero y  lectura para el resto de usuarios. Estos permisos son rw-r&#8211;r&#8211;, en binario serán 644 y dado que lo que utilizamos con <code>fmask</code> es un <strong>umask</strong> 777-644=133. <strong>El valor será 133</strong>.</li>
<li><code>dmask</code>: Es igual que la opción anterior pero en este caso se refiere a los <strong>directorios</strong>. Para que podamos abrir un directorio es necesario que éste tenga permisos de <strong>ejecución</strong> por lo que los permisos serán los mismos que para ficheros pero añadiendo permisos de ejecución para propietario, grupo propietario y el resto de usuarios. Por tanto los permisos serán rwxr-xr-x que en binario es 755. En <strong>umask</strong> sería 777-755=022.<strong> El valor será 022</strong>.</li>
<li><code>utf8</code>: Lo pondremos si la codificación de los nombres es <code>utf8</code>, si estamos utilizando otra codificación utilizaremos la opción que le corresponda.</li>
</ul>
<p style="text-align:justify;">Después de ver cada una de las opciones la línea será la siguiente:</p>
<pre style="text-align:justify;">/dev/sda3       /media/DATOS    ntfs    auto,exec,rw,uid=1000,gid=1000,dmask=022,fmask=133,utf8 0       0</pre>
<p style="text-align:justify;">Ahora tendremos que comprobar que <strong>funciona</strong>. Para ello utilizaremos la orden <code>mount</code> a la que tendremos que pasar el argumento <code>-a</code> para ejecutar el montaje de lo que se encuentra en el <code>fstab</code>. Eso sí, antes tenemos que desmontar la partición si ya la tenemos activa. Para ello escribiremos:</p>
<pre style="text-align:justify;"> $ sudo umount -a</pre>
<p style="text-align:justify;">Se intentarán desmontar <strong>todas</strong> las particiones del <code>fstab</code> lo que, obviamente, no es posible. En caso de que no podamos desmontar nuestra partición de datos es porque algún proceso la está <strong>utilizando</strong> y se nos mostrará un error que indicará que el dispositivo que queremos desmontar está siendo <strong>usado</strong>. Podemos comprobar qué proceso es el que lo está haciendo con la instrucción <code>fuse</code> y el descriptor de la partición del siguiente modo:</p>
<pre style="text-align:justify;"> $ sudo fuse -m /dev/sda3</pre>
<p style="text-align:justify;">Esta instrucción nos sacará por pantalla el <strong>PID</strong> de los procesos que están ocupando la partición. Suponiendo que el proceso con PID 7418 está utilizando la partición podemos proceder a <strong>matarlo</strong>, desmontar y volver a montar con:</p>
<pre style="text-align:justify;"> $ sudo kill -9 7418
 $ sudo umount -a
 $ sudo mount -a</pre>
<p style="text-align:justify;">Ahora podemos irnos a la partición <strong>montada</strong> y comprobar si los permisos están correctos por medio de un <code>ls</code>. Seguido el proceso tendremos los archivos montados en nuestra partición con los mismos permisos que los del HOME de manera que se integrarán perfectamente.</p>
<p style="text-align:justify;">Si detectas algún <strong>error</strong> en este tutorial, hay algo mal explicado o te ha sido <strong>útil</strong> deja tu <strong>comentario</strong> !</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/240/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=240&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2009/02/19/conociendo-el-fstab-y-sus-opciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/12/drive-harddisk.png?w=127&#38;h=127" medium="image" />
	</item>
		<item>
		<title>Plugin Currentsong en Emesene con Amarok 2</title>
		<link>http://just4cool.wordpress.com/2008/12/26/plugin-currentsong-en-emesene-con-amarok-2/</link>
		<comments>http://just4cool.wordpress.com/2008/12/26/plugin-currentsong-en-emesene-con-amarok-2/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 23:25:15 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[amarok]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=205</guid>
		<description><![CDATA[
Hoy voy a dejar un post de los que provocan un aluvión de entradas al Blog, entradas que seguramente serán puntuales pero no importa porque esto me ha sido útil y en un futuro me puede servir de nuevo, por eso lo voy a escribir. Somos muchos los que hemos migrado a &#8216;Amarok 2&#8242; tras [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=205&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="aligncenter size-full wp-image-206" title="logo4" src="http://just4cool.files.wordpress.com/2008/12/logo4.png?w=100&#038;h=85" alt="logo4" width="100" height="85" /></p>
<p style="text-align:justify;">Hoy voy a dejar un post de los que provocan un <strong>aluvión</strong> de entradas al Blog, entradas que seguramente serán puntuales pero no importa porque esto me ha sido útil y en un futuro me puede servir de nuevo, por eso lo voy a escribir. Somos muchos los que hemos migrado a <strong><a href="http://amarok.kde.org/en/releases/2.0">&#8216;Amarok 2&#8242;</a></strong> tras su liberación oficial hace un par de semanas. El cliente de mensajería que utilizo en mi desktop es <strong><a href="http://www.emesene.org/">&#8216;Emesene&#8217;</a></strong>, una aplicación escrita en <a href="http://www.python.org/">Python</a> que imita en cierto modo a <a href="http://get.live.com/messenger/overview">Windows Messenger</a> y que tiene una gran cantidad de plugins para su personalización.</p>
<p style="text-align:justify;">El problema ha surgido con el <strong>plugin CurrentSong</strong> con el cual se puede poner como mensaje secundario del nickname el nombre de la canción que estamos escuchando. Si lo teníamos funcionando anteriormente con Amarok 1.4, el log del plugin no nos dará ningún error, simplemente expondrá que no se está escuchando <strong>ninguna</strong> canción.</p>
<p style="text-align:justify;"><span id="more-205"></span></p>
<p style="text-align:justify;">Buscando en Google la verdad es que la solución ha sido fácilmente hallada. Resulta que la comunicación entre la versión anterior de &#8216;Amarok&#8217; y &#8216;Emesene&#8217; se realizaba a través de <code>python-dcop</code> pero aquí ha variado ligeramente por lo que es necesaria una <strong>modificación</strong> del plugin.</p>
<p style="text-align:justify;">En el <a href="http://www.emesene.org/trac/"><strong>Trac</strong></a> de &#8216;Emesene&#8217; es donde se encuentra un <strong>script</strong> para dar solución a este problema y que es el <a href="http://www.emesene.org/trac/raw-attachment/ticket/1955/pluginamarok2">siguiente</a>. Si la versión del cliente de mensajería que utilizamos es la 1.0, disponible en los repositorios de Ubuntu, la instalación se habrá realizado en <code>/usr/share</code> por lo que podemos pasar a <strong>ejecutar</strong> el script que realizará las modificaciones necesarias. Es necesario tener <strong>conexión a Internet</strong> ya que se descargarán ciertos archivos de código nuevos.</p>
<pre style="text-align:justify;"> $ sudo sh pluginamarok2</pre>
<p style="text-align:justify;">En caso de que utilicemos la versión <strong>SVN</strong> y tengamos el cliente en otro directorio habrá que modificar las <strong>rutas</strong> de los archivos reflejados en el script por lo que lo editamos y cambiamos <code>/usr/share/</code> por nuestra ruta, en mi caso fue <code>/etc/</code>. Después podemos ejecutar el script <strong>igual</strong> que en la línea anterior.</p>
<p style="text-align:justify;">Tan sencillo como eso. Ahora podemos abrir &#8216;Amarok&#8217;, &#8216;Emesene&#8217; y activar el plugin en este último seleccionando como programa &#8216;Amarok2&#8242; y listo. Si encuentras algún error o tienes alguna sugerencia deja tu comentario.</p>
<p style="text-align:justify;">¡A disfrutar!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/205/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=205&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/12/26/plugin-currentsong-en-emesene-con-amarok-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/12/logo4.png" medium="image">
			<media:title type="html">logo4</media:title>
		</media:content>
	</item>
		<item>
		<title>Archivo demasiado grande para FAT32</title>
		<link>http://just4cool.wordpress.com/2008/12/15/archivo-demasiado-grande-para-fat32/</link>
		<comments>http://just4cool.wordpress.com/2008/12/15/archivo-demasiado-grande-para-fat32/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 12:34:57 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sistemas operativos]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=173</guid>
		<description><![CDATA[Es posible que se de la situación de que tengas que pasar un archivo muy grande, como por ejemplo de unos 8Gb de una partición a otra o incluso de una máquina a otra. Hace no demasiado tiempo era impensable tener archivos de tanto tamaño pero hoy en día no es algo raro por lo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=173&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="aligncenter size-full wp-image-174" title="drive-harddisk" src="http://just4cool.files.wordpress.com/2008/12/drive-harddisk.png?w=127&#038;h=127" alt="drive-harddisk" width="127" height="127" />Es posible que se de la situación de que tengas que pasar un archivo muy <strong>grande</strong>, como por ejemplo de unos 8Gb de una partición a otra o incluso de una máquina a otra. Hace no demasiado tiempo era impensable tener archivos de tanto tamaño pero hoy en día no es algo raro por lo que los sistemas más antiguos puede tener ciertas <strong>dificultades</strong> para su manejo.</p>
<p style="text-align:justify;"><span id="more-173"></span></p>
<p style="text-align:justify;">Para empezar yo hace ya bastante tiempo que utilizo <a href="http://es.wikipedia.org/wiki/Windows">Windows</a> y <a href="http://es.wikipedia.org/wiki/Linux">GNU/Linux</a> <strong>conjuntamente</strong> en la misma máquina. Tenía la necesidad de <strong>compartir</strong> los archivos entre los dos sistemas operativos por lo que recurrí a un formato de partición que se podía leer correctamente en los dos. Por aquél entonces no había soporte completo para <a href="http://es.wikipedia.org/wiki/NTFS">NTFS</a> en GNU/Linux por lo que, obviamente, me estoy refiriendo a <strong><a href="http://es.wikipedia.org/wiki/FAT">FAT32</a></strong>.</p>
<p style="text-align:justify;">Lo que yo no sabía, ni me había preocupado de saber hasta ayer, son las <strong>limitaciones</strong> de este sistema de ficheros. Ayer intentaba pasar un archivo de 8.6 Gb  de mi partición Linux Ext3 a la FAT32 y cuando iba por los 4GB me lanzaba un error alegando que el archivo era <strong>demasiado grande</strong>. Al principio pensé que podía ser por Nautilus, por el propio sistema operativo o incluso por Samba, ya que además me había ocurrido al copiar de una máquina a otra. Resulta que el error se da porque <strong>FAT32 no es capaz</strong> de manejar archivos de más de 4Gb de tamaño.</p>
<p style="text-align:justify;">La solución es simplemente no utilizar este formato de partición. Hoy, gracias al avance del software libre, podemos utilizar las particiones <strong>NTFS</strong> sin ningún problema en GNU/Linux ya que el soporte va normalmente compilado como un módulo del kernel y su desarrollo es más que aceptable. Pienso que esta es la opción más recomendable para poder compartir archivos entre GNU/Linux y Windows ya que no hay una limitación en el tamaño de los archivos a manejar. Además si utilizamos los dos sistemas operativos podemos utilizar <strong>Partition Magic</strong> desde Windows para convertir la partición de FAT32 a NTFS sin tener que formatearla y, por tanto, <strong>sin perder archivos</strong>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/173/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=173&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/12/15/archivo-demasiado-grande-para-fat32/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/12/drive-harddisk.png" medium="image">
			<media:title type="html">drive-harddisk</media:title>
		</media:content>
	</item>
		<item>
		<title>Amarok 2 ya está disponible</title>
		<link>http://just4cool.wordpress.com/2008/12/13/amarok-2-ya-esta-disponible/</link>
		<comments>http://just4cool.wordpress.com/2008/12/13/amarok-2-ya-esta-disponible/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 18:04:24 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[amarok]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=142</guid>
		<description><![CDATA[
Entre los que utilizamos GNU/Linux, ya sea con Gnome, KDE o cualquier otro gestor de escritorio, siempre se suele tener un reproductor que mantenga una librería con toda nuestra música. Si además eres un apasionado de la música, todavía más. El más famoso, que más prestaciones ofrece y estéticamente más bonito es, sin ninguna duda, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=142&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="aligncenter size-full wp-image-144" title="am2" src="http://www.kdeblog.com/wp-content/uploads/2008/04/am2.png" alt="am2" width="100" height="100" /></p>
<p style="text-align:justify;">Entre los que utilizamos <strong><a href="http://es.wikipedia.org/wiki/Linux">GNU/Linux</a></strong>, ya sea con <a href="http://es.wikipedia.org/wiki/GNOME">Gnome</a>, <a href="http://es.wikipedia.org/wiki/KDE">KDE</a> o cualquier otro gestor de escritorio, siempre se suele tener un reproductor que mantenga una librería con toda nuestra música. Si además eres un apasionado de la música, todavía más. El más famoso, que más prestaciones ofrece y estéticamente más bonito es, sin ninguna duda, <strong><a href="http://en.wikipedia.org/wiki/Amarok_(software)">Amarok</a></strong>.</p>
<p style="text-align:justify;">Hay gente que por utilizar escritorios distintos de KDE se <strong>niega</strong> a utilizar Amarok por el tiempo de carga de la aplicación, ya que es necesario cargar las librerías necesarias de este entorno para que funcione. Yo pienso que ese tiempo vale la pena porque se trata de una aplicación extraordinaria y ahora ha mejorado con la liberación de <strong>Amarok 2</strong> que, además, es <strong><a href="http://es.wikipedia.org/wiki/Multiplataforma">multiplataforma</a></strong>.</p>
<p style="text-align:justify;"><span id="more-142"></span></p>
<p style="text-align:justify;">Sí, has leído bien, ahora Amarok también está disponible en <a href="http://es.wikipedia.org/wiki/Windows">Windows</a> y <a href="http://es.wikipedia.org/wiki/Mac_OS">Mac OS</a> además de GNU/Linux aunque al ser la primera versión para los dos primeros sistemas operativos, es una <strong>beta</strong>. Amarok 2 ha sido completamente reescrito desde cero utilizando <strong><a href="http://es.wikipedia.org/wiki/Qt_(biblioteca)">QT</a>4</strong> lo que le otorga un aspecto aún <strong>más atractivo</strong> que el anterior. La interfaz ha mejorado notablemente no solo en lo visual sino que además ahora es más sencilla la visualización de las letras, información del artista, estadísticas del tema que está sonando, etc, por medio de applets que podemos ir añadiendo según nuestro gusto en diferentes espacios que se muestran en la zona central.</p>
<p style="text-align:justify;">Algunas de las características secundarias de la versión antigua <strong>no se han implementado</strong> todavía, como por ejemplo los efectos de visualización. A pesar de esto, se han aportado <strong>nuevas</strong> características, entre ellas está la integración con numerosos servicios online como <a href="http://www.jamendo.com/es/">Jamendo</a>, <a href="http://librivox.org/">Libribox</a>, <a href="http://www.magnatune.com/">Magnatune</a>, etc. Además se mantiene la sintonización de una interminable lista de estaciones de radio por medio de <a href="http://www.shoutcast.com/">Shoutcast</a>.</p>
<p style="text-align:justify;">Se han implementado también las listas de reproducción <strong>dinámicas</strong> de modo que según lo que escuchemos más habitualmente y una cierta aleatoriedad es posible crear un tracklist que habitualmente nos será agradable. La visualización de nuestra biblioteca también ha sido mejorada y ahora se muestra el artwork en miniatura (que se puede buscar automáticamente en <a href="http://www.amazon.com/">Amazon</a>) de cada álbum junto al nombre del mismo. Por supuesto todo esto sólo son palabras y lo mejor es <strong>probarlo</strong>.</p>
<p style="text-align:justify;">Para la instalación en <a href="http://es.wikipedia.org/wiki/Ubuntu_(distribuci%C3%B3n_Linux)">Ubuntu</a> se debe hacer lo típico. Si estamos utilizando <strong>Intrepid Ibex</strong> tenemos que poner un nuevo repositorio a las fuentes de APT editando el <code>/etc/apt/sources.list</code> y añadiendo:</p>
<pre style="text-align:justify;"> deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu intrepid main</pre>
<p style="text-align:justify;">Si utilizamos otra versión de Ubuntu como por ejemplo <strong>Hardy</strong> utilizaremos el mismo repositorio cambiando <code>intrepid por hardy</code>. El nombre del paquete es amarok-kde4 por lo que para instalarlo escribiremos el siguiente comando en una consola:</p>
<pre style="text-align:justify;"> $ sudo apt-get install amarok-kde4</pre>
<p style="text-align:justify;">Comentar que la instalación en Intrepid elimina la versión anterior en caso de existir y porta la configuración de los directorios de la librería. En el caso de Hardy no nos borra la versión anterior y hay que configurarlo desde cero. Para la instalación en cualquier otro sistema operativo entrad <a href="http://amarok.kde.org/wiki/Download">aquí</a>.</p>
<p style="text-align:justify;">Realmente, la pregunta del millón es ¿va bien? y la respuesta es <strong>si pero</strong>. Podemos estar tranquilos, Amarok no va a borrarnos los archivos por un fallo al indexar ni nada parecido si bien es cierto que, como se anuncia en la <a href="http://amarok.kde.org/">web oficial</a>, esto es sólo un comienzo y no un final. Existen algunos <strong>fallos</strong> por pulir todavía. Un ejemplo, que no tengo claro si es un fallo, es que un álbum en cuyo directorio tenga una lista de reproducción m3u no se agrega a la librería. Otro es que cuando queremos parar Amarok (no hay que confundir con pausarlo), el reproductor se detiene e inmediatamente después reanuda como si hubiéramos pulsado play. Para detenerlo completamente habría que darle a pausa y después al botón de stop; es una tontería, pero jode. Algo que si es más importante es que al probarlo en Hardy no se podía arrancar porque al intentar construir la lista de reproducción se lanzaba un <strong>error</strong> que no me he molestado en buscar porque iba a actualizar a Intrepid.</p>
<p style="text-align:justify;">En definitiva, la nueva versión de Amarok ha <strong>mejorado</strong> lo presente. Al haber sido completamente reescrito tiene algunos fallos que se pueden mejorar pero la interfaz ahora es mucho más atractiva, con un acabado elegante y más fácil de utilizar. Os dejo una captura de mi Amarok 2; en mi caso he puesto en el centro la información del tema actual y la letra.</p>
<p style="text-align:justify;"><img class="aligncenter size-full wp-image-145" title="pantallazo-radiohead-bodysnatchers-amarok-2" src="http://just4cool.files.wordpress.com/2008/12/pantallazo-radiohead-bodysnatchers-amarok-2.png?w=349&#038;h=215" alt="pantallazo-radiohead-bodysnatchers-amarok-2" width="349" height="215" /></p>
<p style="text-align:justify;">
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/142/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=142&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/12/13/amarok-2-ya-esta-disponible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://www.kdeblog.com/wp-content/uploads/2008/04/am2.png" medium="image">
			<media:title type="html">am2</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/12/pantallazo-radiohead-bodysnatchers-amarok-2.png" medium="image">
			<media:title type="html">pantallazo-radiohead-bodysnatchers-amarok-2</media:title>
		</media:content>
	</item>
		<item>
		<title>Makefiles &amp; GNU GCJ</title>
		<link>http://just4cool.wordpress.com/2008/12/06/makefiles-gnu-gcj/</link>
		<comments>http://just4cool.wordpress.com/2008/12/06/makefiles-gnu-gcj/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 16:25:58 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=123</guid>
		<description><![CDATA[
Como ya conté en anteriores posts, en mi proyecto de fin de carrera tenía que compilar una librería de clases Java bastante extensa con GNU GCJ. Es bastante sencillo compilar una clase simple, incluso compilar varias de ellas a mano, pero en el caso de una colección importante, el compilar y enlazar es una tarea [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=123&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="aligncenter" src="http://just4cool.files.wordpress.com/2008/11/java.png?w=138&amp;h=138&#038;h=138" alt="" width="138" height="138" /></p>
<p style="text-align:justify;">Como ya conté en <strong>anteriores posts</strong>, en mi proyecto de fin de carrera tenía que compilar una librería de clases Java bastante extensa con <strong>GNU GCJ</strong>. Es bastante sencillo compilar una clase simple, incluso compilar varias de ellas a mano, pero en el caso de una colección importante, el compilar y enlazar es una tarea muy larga y aburrida.</p>
<p style="text-align:justify;">En su momento estuve buscando cómo podía <strong>automatizar</strong> esta tarea de compilación por medio de herramientas diseñadas para esta labor. Lo primero que se me ocurrió fue crear un paquete de instalación por medio de las <strong>GNU Autotools</strong> pero al mirar en la documentación pude comprobar que no había soporte para GCJ por lo que elegí una de las herramientas que se incorporan en este paquete: <strong>GNU Make</strong>.</p>
<p style="text-align:justify;"><span id="more-123"></span></p>
<p style="text-align:justify;">Además de la utilización de las Autotools y Make también pensé en utilizar <strong>Apache Ant</strong> que tiene bastantes características positivas como por ejemplo que no depende de las órdenes del Shell en el que se ejecute el Antfile por lo que la portabilidad está garantizada. A pesar de ésto, y de que Make sí depende del Shell, me decanté por esta última opción al estar más <strong>extendido</strong> y generalizado en el mundo de GNU/Linux su uso.</p>
<p style="text-align:justify;">La primera gran pregunta que me aborda es ¿cómo puedo escribir el Makefile para compilar toda la librería sin alterar la estructura de paquetes que <strong>originalmente</strong> tiene en el modelo tradicional de Java?. Podríamos escribir línea por línea la compilación de cada una de las clases con su ruta y al final enlazarlo todo en una línea enorme. Así se puede hacer pero lo mejor sería encontrar la manera de <strong>automatizar</strong> la lectura de todas las clases para no tener que escribir la ruta a cada una de ellas.</p>
<p style="text-align:justify;">Lo que vamos a hacer es mantener dentro de Makefile varias cadenas que contengan la ruta a todos los ficheros de <strong>código</strong> fuente que queremos compilar y la ruta a todos los <strong>objetos</strong> que se originarán después de la compilación de las fuentes, que además serán enlazados. Para este fin utilizaremos la opción <strong>wildcard</strong> mediante la cual se puede utilizar un comodín tal como lo haríamos con un <code>ls</code> en Bash de manera que se nos devolverá el nombre de todos los ficheros que concuerden con la expresión regular. En primer lugar se obtienen los ficheros de código fuente y luego a partir de ellos cambiaremos <code>.java</code> por <code>.o</code> para tener los objetos.</p>
<p style="text-align:justify;">Después de esto escribiremos las acciones del Makefile del modo lo más genérico posible. Definiremos una acción a partir del nombre de los objetos para compilarlos uno a uno mediante una <strong>expresión regular</strong>. Una vez tengamos todos los objetos simplemente habrá que realizar el enlace señalando cuál es las clase principal del programa. A continuación os dejo un pequeño <strong>ejemplo</strong> <strong>orientativo</strong> donde, en el directorio en el que se encuentra el Makefile ,se han incluido las fuentes en un subdirectorio llamado <code>src</code> y los objetos serán compilados a otro subdirectorio llamado <code>bin</code>:</p>
<pre class="brush: cpp;">

##############################################
#  Makefile para compilación con GCJ
#  Creador por ELMOesDIOS para
#  http://just4cool.wordpress.com
##############################################

## Destino de los objetos y del ejecutable
DEST_DIR = bin

## Nombre del Ejecutable y la librería dinámica
BINARY_NAME := MiPrograma

## Cargamos las fuentes de todas las clases a compilar
JAVA_SOURCES := $(wildcard src/paqueteA/*.java)
JAVA_SOURCES += $(wildcard src/paqueteA/paqueteAA/*.java)
JAVA_SOURCES += $(wildcard src/paqueteA/paqueteAB/*.java)
JAVA_SOURCES += $(wildcard src/paqueteA/paqueteAB/paqueteABC/*.java)

## A partir de la cadena de fuentes obtenemos la de objetos
JAVA_OBJECTS := $(JAVA_SOURCES:src/%.java=$(DEST_DIR)/%.o)

## Macros para la compilación
GCJ := $(GCC_PATH)/usr/bin/$(GCC_TARGET)gcj
GCJ_FLAGS := -O2 -g --classpath=src

## Instrucción general para obtener el ejecutable
all: $(DEST_DIR)/$(BINARY_NAME)

## Compilar las fuentes de nuestro programa
$(JAVA_OBJECTS): $(DEST_DIR)/%.o: src/%.java
	$(GCJ) $(GCJ_FLAGS) -c $&lt; -o $@

## El ejecutable final se obtiene en el enlace
$(DEST_DIR)/$(BINARY_NAME): $(JAVA_OBJECTS)
	$(GCJ) --main=paqueteA.paqueteAB.clasePrincipal $^ -o $(DEST_DIR)/$(BINARY_NAME)

## Habrá que crear los directorios donde se almacenarán los objetos una vez compilados
prepare:
        mkdir bin/paqueteA; mkdir bin/paqueteA/paqueteAA; mkdir bin/paqueteA/paqueteAB; mkdir bin/paqueteA/paqueteAB/paqueteAC;
</pre>
<p style="text-align:justify;">En el ejemplo, antes escribir <code>make</code>, habría que generar la <strong>estructura</strong> de directorios para los objetos tal y como se describe en el ejemplo. Además podemos agregar nuevas opciones de instalación y limpieza para que la instalación de nuestro programa Java compilado con GCJ sea estándar del modo:</p>
<pre> $ make prepare
 $ make
 $ sudo make install</pre>
<p style="text-align:justify;">Para orientaros en lo que respecta a los símbolos utilizados para construir las expresiones regulares, podéis echar un vistazo al <strong>manual</strong> de GNU Make. Esto es para un caso pequeño en el que no se utilizan librerías externas. En caso de que se utilicen bastaría con añadir una nueva macro para almacenar sus fuentes; recordemos que en la Introducción a GNU GCJ ya se explicó que las colecciones de clases <code>.class</code> en <code>.jar</code> se pueden compilar. Luego se obtendría una macro para los objetos y se compilarían igual que en el ejemplo. Además habría que <strong>modificar</strong> el enlace.</p>
<p style="text-align:justify;">Me gustaría indicar también que de esta manera obtendremos únicamente un ejecutable que contiene todo el programa. Es más adecuado compilar utilizando <strong>librerías dinámicas</strong>. El proceso se puede deducir a partir de este mismo ejemplo, aunque si tenéis algún tipo de problema o alguna duda, dejad un <strong>comentario</strong>. Espero que si os ha sido útil también lo hagáis. Proximamente dejaré más posts acerca de GNU GCJ, su rendimiento y otras características.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/123/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=123&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/12/06/makefiles-gnu-gcj/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/11/java.png?w=138&#38;h=138&#38;h=138" medium="image" />
	</item>
		<item>
		<title>El Classpath de GCJ</title>
		<link>http://just4cool.wordpress.com/2008/12/03/el-classpath-de-gcj/</link>
		<comments>http://just4cool.wordpress.com/2008/12/03/el-classpath-de-gcj/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 23:01:07 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=83</guid>
		<description><![CDATA[
En esta entrada voy a ir completando lo comentado en la introducción a GCJ. Ya expliqué entonces como podemos compilar una clase sencilla, sin dependencias de otras, de manera que obtendremos un ejecutable de la misma manera que si utilizásemos otros lenguajes como C/C++.
La dependencia entre clases en Java se satisface a través del classpath, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=83&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="aligncenter" src="http://just4cool.files.wordpress.com/2008/11/java.png?w=138&amp;h=138&#038;h=138" alt="" width="138" height="138" /></p>
<p style="text-align:justify;">En esta entrada voy a ir completando lo comentado en la <strong><a href="http://just4cool.wordpress.com/2008/11/30/introduccion-a-gnu-gcj/">introducción a GCJ</a></strong>. Ya expliqué entonces como podemos compilar una clase sencilla, sin dependencias de otras, de manera que obtendremos un ejecutable de la misma manera que si utilizásemos otros lenguajes como C/C++.</p>
<p style="text-align:justify;">La dependencia entre clases en Java se satisface a través del <strong><a href="http://en.wikipedia.org/wiki/Classpath_(Java)">classpath</a></strong>, una variable de entorno (aunque hay otras formas de especificarlo) en la que se enumeran los directorios en los que se encuentran clases o paquetes utilizados. La comprobación se realiza, en el caso de Java, además de al compilar a <a href="http://en.wikipedia.org/wiki/Bytecode">bytecodes</a>, en tiempo de ejecución de manera que si nos falta una clase, se nos lanzará una excepción del tipo <code>classnotfound</code>; con GCJ esto no es así.</p>
<p><span id="more-83"></span></p>
<p style="text-align:justify;">En el caso de GCJ, la comprobación de las dependencias se hace únicamente durante la <strong>compilación</strong> de las clases mediante una implementación propia del classpath muy similar a la original del Java. Podemos indicarlo de varias maneras:</p>
<ul style="text-align:justify;">
<li>-I<em>dir</em> : Es la opción es la recomendada por los desarrolladores de GCJ, ya que es la que va a permitir diferenciar el classpath para las aplicaciones construidas a partir de este compilador de las que se construyan a partir de otros que también lo implementan.</li>
<li>&#8211;classpath=<em>path</em>: Mediante esta opción se establece el path del modo tradicional, separando los directorios por medio del símbolo &#8216;:&#8217;. Esta opción no sobrescribe el path por defecto para encontrar la librería de clases estándar que implementa GCJ.</li>
<li>&#8211;bootclasspath=<em>path</em>: Sustituye al path generado por defecto en el que se encuentran las clases estándar que componen el API de Java para GCJ.</li>
<li>CLASSPATH: Se trata de una variable de entorno a definir antes de la llamada al compilador y que mantiene una lista de directorios de la manera estándar.</li>
</ul>
<p style="text-align:justify;">Existe una <strong>prioridad</strong> entre cada una de estas posibles implementaciones.  De esta manera, es posible tener una implementación de una determinada clase agregada a la variable de entorno classpath, sin embargo, podremos compilar una aplicación que la utilice especificando una nueva implementación mediante el argumento <code>-I</code>. El orden de prioridades es el siguiente:</p>
<ol style="text-align:justify;">
<li>En primer lugar irán los directorios especificados por medio del argumento <code>-I</code>.</li>
<li>Se añaden los directorios especificados con la opción <code>--classpath</code> en caso de que haya sido definida.</li>
<li>A continuación irán los directorios especificados en la variable de entorno CLASSPATH.</li>
<li>Se añaden los directorios que están en la ubicación desde la que se llama a GCJ, es decir, el directorio &#8216;.&#8217;</li>
<li>Si se ha especificado un valor para la opción <code>--bootclasspath</code> se anexa su valor, en caso contrario se agrega la ubicación por defecto de <code>libgcj.jar</code>.</li>
<li>Si se especificó durante la compilación e instalación de GCJ, la opción <code>--extdirs</code>, se agregan al classpath los directorios que allí aparezcan.</li>
</ol>
<p style="text-align:justify;">Las clases que vayan definidas en los directorios incluidos en el classpath podrán ser <strong>código fuente o clases</strong> <strong>compiladas a bytecodes</strong> de Java. Vamos a ver un ejemplo sencillo de dos clases dependientes. En primer lugar, tenemos una clase <code>Suma.java</code> con un método que se encarga de sumar dos enteros pasados como parámetros:</p>
<pre class="brush: java;">
// Suma.jav -&gt; contiene un método para sumar dos enteros y devuelve el resultado
package ejemplo.blog;

public class Suma {
    public static int sumar (int a, int b) {
        int c = a+b;
        return c;
    }
}
</pre>
<p style="text-align:justify;">A continuación tenemos otra clase que recibe dos cadenas como argumentos para hacerles un cast a enteros y sumarlos llamando al método de la clase Suma anterior.</p>
<pre class="brush: java;">
// MiClase.java -&gt; Suma dos números pasados como argumento
import ejemplo.blog.*;

class MiClase {
    public static void main(String args[]) {
        // Los dos números pasados como argumento los convertimos a enteros
        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[1]);

        // Sumamos los dos números con la llamada al método Sumar.suma()
        int x = Suma.sumar(a, b);

        // Mostramos el resultado por pantalla
        System.out.println(x);
    }
}
</pre>
<p style="text-align:justify;">La primera clase está ubicada en <code>/home/elmo/miclase</code> y la segunda se encuentra en <code>/home/elmo/ejemplo/blog</code>. Para el caso de la compilación tradicional en Java hemos de indicar la ubicación de las clases dependientes a través de la variable de entorno $CLASSPATH de modo que haremos:</p>
<pre>
$ cd /home/elmo/ejemplo/blog
$ javac Suma.java
$ cd /home/elmo/miclase
$ export CLASSPATH="/home/elmo/"
$ javac MiClase.java
</pre>
<p style="text-align:justify;">Llegados a este punto, tenemos las clases <strong>compiladas</strong> <strong>a bytecodes</strong>. Hay que notar que, dado que en <code>MiClase.java</code> estamos importando las clases del paquete <code>ejemplo.blog</code>, la ruta indicada en el classpath será la que corresponde a la ubicación <strong>del paquete</strong> y no de la clase, es decir <code>/home/elmo</code>. Para ejecutar en Java tendríamos que indicar también en la variable de entorno dónde están todas las clases que vamos a utilizar por lo que haríamos:</p>
<pre>
$ export CLASSPATH=$CLASSPATH":/home/elmo/miclase"
$ java MiClase 5 7
12
</pre>
<p style="text-align:justify;">Una vez visto cómo se hace en Java, vamos a ver como podemos compilar este ejemplo <strong>con GCJ</strong>. Vamos a indicar el classpath con el argumento <code>-I</code> que es la opción que recomiendan los desarrolladores. Por supuesto, la utilización en forma de paquetes es exactamente la misma por lo que las rutas de indicarán de la misma manera que tradicionalmente en Java.</p>
<pre>
$ export CLASSPATH=""
$ cd /home/elmo/ejemplo/blog
$ gcj -c Suma.java -o Suma.o
$ cd /home/elmo/miclase
$ gcj -c -I/home/elmo MiClase.java -o MiClase.o
$ cd /home/elmo
$ gcj --main=MiClase /home/elmo/miclase/MiClase.o /home/elmo/ejemplo/blog/Suma.o -o MiClase.out
$ ./MiClase 5 7
12
</pre>
<p style="text-align:justify;">La primera línea la ejecutamos para borrar el classpath actual, luego compilamos a <strong>objeto</strong> el código fuente de la cada una de las clases. En el caso de <code>MiClase.java</code> indicamos la ruta del paquete que utiliza, <code>ejemplo.blog</code>, mediante el argumento <code>-I/home/elmo</code>. Por último hacemos el <strong>enlace</strong> indicando cual de las clases es la que contiene el método <code>main</code> de nuestro programa, en este caso <code>MiClase</code>. Es <strong>importante</strong> decir también que si hubiéramos hecho que <code>MiClase.java</code> fuera parte del paquete <code>miclase</code>, al indicar el <code>main</code> se haría por medio de <code>--main=miclase.MiClase</code>. En el caso de java tradicional la ejecución habría sido con <code>java miclase.MiClase 5 7</code> y en el CLASSPATH en lugar de poner <code>/home/elmo/miclase</code> habría bastado con <code>/home/elmo</code>.</p>
<p style="text-align:justify;">Espero que todo esto haya sido útil a quién lo lea y que si surge alguna duda o alguna corrección, dejéis un <strong>comentario</strong>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=83&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/12/03/el-classpath-de-gcj/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/11/java.png?w=138&#38;h=138" medium="image" />
	</item>
		<item>
		<title>Introducción a GNU GCJ</title>
		<link>http://just4cool.wordpress.com/2008/11/30/introduccion-a-gnu-gcj/</link>
		<comments>http://just4cool.wordpress.com/2008/11/30/introduccion-a-gnu-gcj/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 19:57:02 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=58</guid>
		<description><![CDATA[
Si algo he aprendido en el desarrollo de mi proyecto de fin de carrera es a utilizar GNU GCJ, cuáles son sus características, qué puede aportar a Java y cómo se utiliza. Cuando empecé a investigar busqué tutoriales sobre cómo compilar con este software y me encontré con apenas un par de ellos medianamente decentes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=58&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><a href="http://just4cool.files.wordpress.com/2008/11/java.png"><img class="aligncenter size-full wp-image-59" title="java" src="http://just4cool.files.wordpress.com/2008/11/java.png?w=138&#038;h=138" alt="java" width="138" height="138" /></a></p>
<p style="text-align:justify;">Si algo he aprendido en el desarrollo de mi proyecto de fin de carrera es a utilizar <a href="http://gcc.gnu.org/java/">GNU GCJ</a>, cuáles son sus características, qué puede aportar a <a href="http://www.java.com/es/download/">Java</a> y cómo se utiliza. Cuando empecé a investigar busqué tutoriales sobre cómo compilar con este software y me encontré con apenas un par de ellos medianamente decentes pero insuficientes para mi propósito, que era compilar una librería de clases bastante grande.</p>
<p style="text-align:justify;">Casi todo lo que he aprendido lo he hecho mirando tutoriales en inglés, leyendo la documentación y puede que aparentemente no sea gran cosa pero no fue sencillo. En esta entrada quiero dejar una introducción al uso básico de GCJ y en un futuro ir completando el manual con algunos posts más.</p>
<p><span id="more-58"></span></p>
<p><strong>1 &#8211; ¿Por qué GCJ?</strong></p>
<p style="text-align:justify;">En primer lugar debemos preguntarnos <strong>qué es</strong> GNU GCJ. Este software se desarrolló como alternativa al compilador de Java desarrollado por <a href="http://es.sun.com/">Sun Microsystems</a>. La idea principal era la de no caer en la trampa de Java promulgada por <a href="http://es.wikipedia.org/wiki/Richard_Stallman">Richard Stallman</a> en muchos de sus discursos que consiste en que el API de Java fue liberado pero no podemos utilizar Java libremente porque el <a href="http://es.wikipedia.org/wiki/Java_Runtime_Environment">Java Runtime Enviroment</a> (JRE) no posee las tres libertades básicas.</p>
<p style="text-align:justify;">La problemática de Java es que, según numerosos estudios, es un lenguaje más <strong>lento</strong> que otros como C/<a href="http://es.wikipedia.org/wiki/C%2B%2B">C++</a> lo que se atribuye principalmente al uso de una máquina virtual para ejecutar código. En Java no compilamos a código nativo sino que compilamos a lo que se conoce como bytecodes, la unidad interpretada por la máquina virtual. Ésta, además de intervenir como inconveniente en el rendimiento, otorga la principal ventaja del lenguaje e idea principal de su desarrollo, la <strong>portabilidad</strong>.</p>
<p style="text-align:justify;">Con GCJ rompemos, en cierto modo, la idea con la que se concibió el lenguaje ya que cuando compilamos lo hacemos a <strong>código objeto nativo</strong> en lugar de a bytecodes lo que permite una ejecución directa de las aplicaciones. Aún así, disponemos también de una herramienta libre conocida como <a href="http://en.wikipedia.org/wiki/GNU_Interpreter_for_Java">GIJ</a> (GNU Interpreter for Java) que es otra implementación de la máquina virtual aunque su rendimiento es verdaderamente malo.</p>
<p style="text-align:justify;">Además de estas características, GCJ incorpora una interfaz conocida como <strong><a href="http://gcc.gnu.org/onlinedocs/gcj/About-CNI.html">CNI</a></strong> (Compiled Native Interface) que permite mezclar código escrito en C/C++ con código Java mediante pequeñas modificaciones en la sintaxis del lenguaje de modo que, si lo utilizamos para implementar partes críticas de código, conseguiremos programas mucho más rápidos.</p>
<p style="text-align:justify;">En resumen, con GCJ podemos construir aplicaciones Java <strong>nativas</strong> que, por tanto, no van a necesitar un software adicional para su ejecución. Además, el aspecto más importante es que nuestras aplicaciones serán completamente libres ya que el software ha sido desarrollado bajo licencia GNU <strong><a href="http://es.wikipedia.org/wiki/GNU_General_Public_License">GPL</a></strong>.</p>
<p><strong>2 &#8211; Un ejemplo sencillo</strong></p>
<p style="text-align:justify;">GCJ viene incorporado en la familia de compiladores <strong>GCC</strong> que se puede obtener de la página web oficial. Dado que es un software imprescindible en UNIX, está disponible en los repositorios de cualquier distribución de GNU/Linux. El funcionamiento es similar al resto de compiladores, debemos dar un fichero de entrada y se nos proporcionará uno de salida. El software posee su propia implementación del <a href="http://es.wikipedia.org/wiki/API">API</a> de Java incluida en una librería llamada <code>libgcj</code> que se instala junto con el compilador.</p>
<p style="text-align:justify;">Como ficheros de entrada se permite código fuente <code>.java</code>, clases compiladas a bytecodes <code>.class</code> y colecciones de clases <code>.jar</code> o <code>.zip</code>.</p>
<p style="text-align:justify;">La salida puede ser bien código objeto sin enlazar o un ejecutable ya enlazado. Como primer ejemplo vamos a compilar el clásico hola mundo de Java. Por el momento, el fichero se ubicará en nuestro HOME; la compilación y ejecución también se hará desde nuestro HOME. El código es el siguiente:</p>
<pre class="brush: java;">
// Fichero HolaMundo.java
public class HolaMundo {
        public static void main(String[] args) {
           System.out.println(&quot;¡Hola, mundo!&quot;);
        }
 }
</pre>
<p style="text-align:justify;">Como podemos ver, es el código más simple del mundo, no se utiliza ninguna clase externa, solamente el método <code>System.out.println</code> que es un estándar del API de Java implementado en <code>libgcj</code>. Para compilar y ejecutar la clase tradicionalmente en Java haríamos lo siguiente (previa instalación del JDK de Sun):</p>
<pre> $ javac HolaMundo.java
 $ java HolaMundo
¡Hola, mundo!</pre>
<p style="text-align:justify;">Cada clase que componga una librería Java puede implementar un método <code>main</code> propio. Cuando ejecutamos código con la máquina virtual siempre lo hacemos de una clase en concreto pero cuando lo que tenemos es un ejecutable tiene que haber un método <code>main</code> forzosamente y siempre el mismo. Por este motivo es <strong>necesario</strong> indicar a GCJ qué clase es la que contiene el método principal durante el enlace. Así, la compilación, enlace y ejecución respectivamente sería:</p>
<pre> $ gcj -c HolaMundo.java
 $ gcj --main=HolaMundo HolaMundo.o -c Hola
 $ ./Hola
¡Hola, mundo!</pre>
<p style="text-align:justify;">Hasta ahora hemos aprendido cómo se compila una clase simple. Esto es lo más sencillo y se puede encontrar sin mucha dificultad en Internet. El problema surge cuando lo que tenemos es una colección de clases con dependencias cruzadas, cuando esta colección está estructurada en paquetes, cuando queremos automatizar la compilación porque son muchas clases las que queremos compilar, etc.</p>
<p style="text-align:justify;"><strong>3 &#8211; Próximos posts</strong></p>
<p style="text-align:justify;">Más adelante explicaré cómo es la implementación del CLASSPATH, qué opciones de compilación tenemos disponibles, qué características se comparten con el compilador de C, cómo podemos automatizar la compilación por medio de un Makefile, cómo funcionan las dependencias, etc.</p>
<p><a href="http://just4cool.wordpress.com/2008/12/03/el-classpath-de-gcj/"><strong>Continuación:</strong> El classpath de GCJ.</a></p>
<p>Espero comentarios si os interesa el tema, un saludo.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=58&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/11/30/introduccion-a-gnu-gcj/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/11/java.png" medium="image">
			<media:title type="html">java</media:title>
		</media:content>
	</item>
		<item>
		<title>Acerca de Gentoo Linux</title>
		<link>http://just4cool.wordpress.com/2008/11/28/acerca-de-gentoo-linux/</link>
		<comments>http://just4cool.wordpress.com/2008/11/28/acerca-de-gentoo-linux/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 16:43:45 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Reflexión]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sistemas operativos]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=53</guid>
		<description><![CDATA[
Hace cuestión de una semana decidí aventurarme más en el mundo de GNU/Linux y probar la que dicen que es la distribución más difícil de instalar dado que todo está construido a gusto del consumidor: Gentoo Linux. El mayor atractivo está en que todo lo que instalamos en el sistema se compila especificando una serie [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=53&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><a href="http://just4cool.files.wordpress.com/2008/11/573px-gentoo_linux_logo_mattesvg.png"><img class="aligncenter size-full wp-image-54" title="573px-gentoo_linux_logo_mattesvg" src="http://just4cool.files.wordpress.com/2008/11/573px-gentoo_linux_logo_mattesvg.png?w=107&#038;h=112" alt="573px-gentoo_linux_logo_mattesvg" width="107" height="112" /></a></p>
<p style="text-align:justify;">Hace cuestión de una semana decidí aventurarme más en el mundo de GNU/Linux y probar la que dicen que es la distribución más difícil de instalar dado que todo está construido a gusto del consumidor: <strong><a href="http://www.gentoo.org/">Gentoo Linux</a></strong>. El mayor atractivo está en que todo lo que instalamos en el sistema se compila especificando una serie de parámetros llamados <strong>USE</strong>, utilizados por <a href="http://es.wikipedia.org/wiki/Portage">Portage</a> (el gestor de paquetes) ,que nosotros definimos según nuestras necesidades. Por medio de ese sistema, podemos indicar a las aplicaciones que vamos a compilar e instalar qué componentes son los que queremos y cuáles no.</p>
<p style="text-align:justify;">Además de poder personalizar la instalación de aplicaciones, el <strong>núcleo</strong> también se configura e instala a nuestro gusto y es en todo esto en lo que está la dificultad. Además instalaremos inicialmente un <strong>sistema base</strong>, es decir, sin <a href="http://en.wikipedia.org/wiki/X_Window_System">X</a>, gestor de escritorio ni utilidades de modo que sólo tendremos instalado lo que nos sea necesario. Todo esto resulta muy interesante pero como todo en esta vida, tiene <strong>inconvenientes</strong>.</p>
<p><span id="more-53"></span></p>
<p style="text-align:justify;">La mayor pega que le pongo a Gentoo Linux, y por la que no voy a tenerla de momento en el portátil, es que al tener que compilarse todo, si no disponemos de un procesador potente, el proceso de instalación de las aplicaciones más pesadas es extraordinariamente largo. Sin ir más lejos, esta mañana he instalado el visor de documentos <a href="http://kpdf.kde.org/">kpdf</a> con las <a href="http://es.wikipedia.org/wiki/Qt_(biblioteca)">QT4</a> y sólo las librerías han estado aproximadamente dos horas compilando. No quiero imaginar lo que tardarán las aplicaciones más pesadas como <a href="http://es.openoffice.org/">Open Office</a> o <a href="http://amarok.kde.org/">Amarok</a> &#8230; la pregunta es si vale la pena recompilar cuando actualicemos o incluso si algo nos falla y hay que cambiar parámetros.</p>
<p style="text-align:justify;">Otro inconveniente que ha aparecido ahora para los nuevos usuarios, como lo sería yo, es que el wiki de documentación de Gentoo <a href="http://es.gentoo-wiki.com/wiki/Portada">se ha perdido</a>. Al parecer hubo una serie de problemas en el servidor y ahora están pidiendo las backups pero no hay respuesta. Esto no es seguro, me lo ha comentado un compañero. Si ahora me surge algún problema que no esté resuelto en la documentación oficial tocará recorrer la Web buscando soluciones.</p>
<p style="text-align:justify;">Aparte de esto, lo he tenido instalado un par de días con <a href="http://www.enlightenment.org/">Enligthenment</a> y va espectacularmente rápido pero la comodidad es importante también, y el día que tenga un procesador de última generación con cuatro núcleos para compilar Open Office en 40 minutos, me pondré de nuevo Gentoo; mientras tanto&#8230; <a href="http://www.ubuntu.com/">Ubuntu</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=53&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/11/28/acerca-de-gentoo-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/11/573px-gentoo_linux_logo_mattesvg.png" medium="image">
			<media:title type="html">573px-gentoo_linux_logo_mattesvg</media:title>
		</media:content>
	</item>
		<item>
		<title>GNU/Linux no es la solución absoluta</title>
		<link>http://just4cool.wordpress.com/2008/11/26/gnulinux-no-es-la-solucion-absoluta/</link>
		<comments>http://just4cool.wordpress.com/2008/11/26/gnulinux-no-es-la-solucion-absoluta/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 22:29:48 +0000</pubDate>
		<dc:creator>elmoesdios</dc:creator>
				<category><![CDATA[Reflexión]]></category>
		<category><![CDATA[libertad]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[opinión]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://just4cool.wordpress.com/?p=36</guid>
		<description><![CDATA[Con la propagación de usuarios que ha tenido Ubuntu, sobre todo en este 2008, ha surgido muchísima gente que defiende a capa y espada a esta distribución, o GNU/Linux en general, pretendiendo imponerlo de la forma más absoluta a todos sus familiares, amigos y conocidos. En muchos casos, estos usuarios son gente que trabajaba habitualmente [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=36&subd=just4cool&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><a href="http://just4cool.files.wordpress.com/2008/11/todosjuntos.png"><img class="aligncenter size-full wp-image-39" title="todosjuntos" src="http://just4cool.files.wordpress.com/2008/11/todosjuntos.png?w=295&#038;h=142" alt="todosjuntos" width="295" height="142" /></a>Con la propagación de usuarios que ha tenido <a href="http://es.wikipedia.org/wiki/Ubuntu">Ubuntu</a>, sobre todo en este 2008, ha surgido muchísima gente que defiende a capa y espada a esta distribución, o <strong><a href="http://es.wikipedia.org/wiki/Linux">GNU/Linux</a></strong> en general, pretendiendo <strong>imponerlo</strong> de la forma más absoluta a todos sus familiares, amigos y conocidos. En muchos casos, estos usuarios son gente que trabajaba habitualmente con <a href="http://es.wikipedia.org/wiki/Windows_XP">Windows XP</a> hasta hace no mucho y que, al ver en <a href="http://es.wikipedia.org/wiki/Youtube">Youtube</a> muchos vídeos de los efectos que se puede dar al escritorio con <a href="http://es.wikipedia.org/wiki/Compiz_Fusion">Compiz Fusion</a>, les picó la curiosidad y decidieron aventurarse a probar un nuevo sistema operativo.</p>
<p style="text-align:justify;">Personalmente veo como la mayor ventaja de utilizar sistemas operativos tales como Ubuntu la <strong>libertad</strong> de poder <a href="http://www.ubuntu.com/getubuntu/download">descargar</a> la imagen del CD desde Internet, instalarlo en mi PC y posteriormente descargar multitud de programas en la mayoría de los casos de una calidad muy aceptable sin tener que preocuparme de buscar licencias o cracks.</p>
<p style="text-align:justify;"><span id="more-36"></span></p>
<p style="text-align:justify;">Mi opinión personal sobre <strong>Windows XP</strong>, basándome en mi experiencia con el SP2, es que no es un mal sistema operativo. Tiene el gran inconveniente de que la mayoría de los programadores utilizan GNU/Linux y muchos se dedican a desarrollar <a href="http://es.wikipedia.org/wiki/C%C3%B3digo_maligno">software malicioso</a> que atenta contra los agujeros del sistema operativo de <a href="http://es.wikipedia.org/wiki/Microsoft">Microsoft</a>. En consecuencia, los usuarios poco experimentados que se pongan a investigar de dónde bajar un disco que se pone a al venta dentro de un mes, pueden acabar perjudicados por malware. Otro problema viene de que es un <strong><a href="http://es.wikipedia.org/wiki/Software_no_libre">software privativo</a></strong> y no podemos examinar el código (nosotros o los demás). Por eso, cuenta la leyenda que en muchas ocasiones se realiza una recolección de información sobre los archivos personales, cuentas de usuario, etc, que se envían a Microsoft sin que el usuario se entere de nada. Esta posibilidad existe y no es muy ética, pero tampoco es ético instalar Windows sin adquirir una licencia.</p>
<p style="text-align:justify;">Una alternativa es utilizar <strong><a href="http://es.wikipedia.org/wiki/Mac_OS">Mac OS</a></strong>. Mi experiencia con éste se reduce a que mi novia, de la que estoy muy enamorado, tiene un <a href="http://es.wikipedia.org/wiki/IMac">iMac</a> por lo que he utilizado este SO, lo he trasteado y la verdad es que <strong>lo prefiero</strong> antes que Windows XP. Raramente nos vamos a encontrar con software malicioso aunque sigue teniendo la gran desventaja de que es software privativo lo que quiere decir que es posible que, al no conocer el código, el sistema operativo emprenda acciones que no son conocidas por el usuario y que no tienen un fin.. digamos beneficioso. Otro aspecto negativo es que si lo queremos por lo legal y que vaya bien, lo idóneo es comprar un Mac, que no son excesivamente baratos en comparación con otros ordenadores. A pesar de esto, es un sistema operativo muy estable, fiable, intuitivo y bonito.</p>
<p style="text-align:justify;">Finalmente tenemos los sistemas basados en <strong>GNU/Linux</strong>. He utilizado varias distribuciones como <a href="http://es.wikipedia.org/wiki/Mandriva_Linux">Mandrake</a>, <a href="http://es.wikipedia.org/wiki/Debian">Debian</a>, Ubuntu y <a href="http://es.wikipedia.org/wiki/Gentoo_Linux">Gentoo</a> y mi opinión es que se trata de una opción excelente, pero sobre todo si estás <strong>familiarizado</strong> con la informática. Hay algunas distribuciones que son realmente sencillas de instalar en muchos casos como el de Ubuntu, sin embargo, hay otras que requieren un cierto aprendizaje como Gentoo. Una vez que tenemos todo instalado la cosa suele ir genial, pero muchas veces nos encontramos con <strong>problemas</strong> que hay que solucionar recurriendo a <a href="http://www.google.es/">Google</a> con la esperanza de que a alguien le haya ocurrido lo mismo. A mi no me importa cuando ocurre esto, es más, me gusta porque aprendo cosas nuevas, pero no todo el mundo es igual. Lo más importante es la libertad, poder ver el código de prácticamente cualquier programa y que la mayoría de las aplicaciones son de calidad.</p>
<p style="text-align:justify;">En mi PC de sobremesa utilizo Ubuntu porque la considero una distribución estable, de gran calidad y en continuo desarrollo. Esto no quiere decir que imponga a mis amigos su utilización. Puedo recomendar su uso pero nunca imponerlo ya que hay muchos usuarios que quieren el ordenador sólo para que funcione, leer el correo, ver el periódico en Internet, descargar todo tipo de cosas de las redes P2P; si están acostumbrados a Windows y no tienen ganas de aprender, lo mejor es que se queden como están. Cierto que esto <strong>comprometerá su libertad</strong>, pero si a ellos no les importa poner números de serie falsos en el software ni que Microsoft sepa qué disco se bajaron ayer, a mi tampoco.</p>
<p style="text-align:justify;">Creo que casi todos los que estamos en GNU/Linux hemos utilizado alguna vez Windows y la expresión &#8220;si para lo que quiero yo el ordenador me sobra con Windows&#8230;&#8221; es <strong>perfectamente válida</strong>. Por supuesto, antes que Windows preferiría utilizar Mac&#8230; pero ni tengo un <a href="http://es.wikipedia.org/wiki/MacBook_Pro">MacBook Pro</a>, ni tengo un iMac, así que el día que decida comprar uno posiblemente me quede con su sistema operativo&#8230; aunque sin dar la espalda a GNU/Linux.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/just4cool.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/just4cool.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/just4cool.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/just4cool.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/just4cool.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/just4cool.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/just4cool.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/just4cool.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/just4cool.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/just4cool.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=just4cool.wordpress.com&blog=4759922&post=36&subd=just4cool&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://just4cool.wordpress.com/2008/11/26/gnulinux-no-es-la-solucion-absoluta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b5d4d3bbfd469f36bcae8f8c7210d755?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">elmo</media:title>
		</media:content>

		<media:content url="http://just4cool.files.wordpress.com/2008/11/todosjuntos.png" medium="image">
			<media:title type="html">todosjuntos</media:title>
		</media:content>
	</item>
	</channel>
</rss>