<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>José Arrarte - Blog de notas</title> <atom:link href="http://josearrarte.com/blog/feed/" rel="self" type="application/rss+xml" /><link>http://josearrarte.com/blog</link> <description>Un bloc de notas online sobre Java, tecnología, Uruguay, etc...</description> <lastBuildDate>Fri, 23 Mar 2012 22:31:29 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>Selección de texto en bloques o columnas</title><link>http://josearrarte.com/blog/2012/03/14/seleccion-de-texto-en-bloques-o-columnas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=seleccion-de-texto-en-bloques-o-columnas</link> <comments>http://josearrarte.com/blog/2012/03/14/seleccion-de-texto-en-bloques-o-columnas/#comments</comments> <pubDate>Wed, 14 Mar 2012 13:30:32 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Eclipse]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Windows]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=560</guid> <description><![CDATA[Hay varios programas que nos permiten alternar entre el tradicional modo de selección por líneas y el modo de selección por bloques o columnas. Intentaré ir completando este post con los programas que me parezcan relevante destacar, y la forma que utilizarlo. Eclipse Desde la versión 3.5 de Eclipse (Galileo) y en la 3.6 (Helios), [...]
No hay posts relacionados.]]></description> <content:encoded><![CDATA[<p>Hay varios programas que nos permiten alternar entre el tradicional modo de selección por líneas y el modo de selección por bloques o columnas.</p><p>Intentaré ir completando este post con los programas que me parezcan relevante destacar, y la forma que utilizarlo.</p><h2>Eclipse</h2><p>Desde la versión 3.5 de Eclipse (Galileo) y en la 3.6 (Helios), 3.7 (Indigo) y posteriores contamos con la posibilidad de cambiar el modo de selección, de líneas a bloques.</p><p>Para activarlo, podemos utilizar el botón de modo de selección, o utilizar la combinación de teclas <code>Alt + Shift + A</code> Eclipse.</p><div
id="attachment_583" class="wp-caption alignnone" style="width: 693px"><a
href="http://josearrarte.com/blog/wp-content/uploads/2012/02/Eclipse_seleccionBloque.png"><img
class="size-full wp-image-583" title="Eclipse - selección por bloques" src="http://josearrarte.com/blog/wp-content/uploads/2012/02/Eclipse_seleccionBloque.png" alt="Eclipse - selección por bloques" width="683" height="536" /></a><p
class="wp-caption-text">Eclipse - selección por bloques</p></div><p>Me resultó curioso que el tipo de letra utilizado cambia cuando habilitamos este modo de selección, pasando a Courier New a pesar que el tipo de letra que estaba utlizando era <a
href="http://es.wikipedia.org/wiki/Tipo_de_letra_monoespaciado" target="_blank">monoespaciado</a>. En Linux no pasó.</p><h2>Notepad++</h2><p><a
href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a> es un editor de texto simple y poderoso. Podemos seleccionar bloques en lugar de líneas apretando la tecla <code>Shift</code> junto al botón izquierdo del mouse. Si estamos utilizando el teclado, apretando juntas las teclas <code>Alt + Shift</code> y las teclas de cursor.</p><div
id="attachment_581" class="wp-caption alignnone" style="width: 543px"><a
href="http://josearrarte.com/blog/wp-content/uploads/2012/02/Notepad++_seleccionBloque.png"><img
class="size-full wp-image-581" title="Notepad++ - selección por bloques" src="http://josearrarte.com/blog/wp-content/uploads/2012/02/Notepad++_seleccionBloque.png" alt="Notepad++ - selección por bloques" width="533" height="426" /></a><p
class="wp-caption-text">Notepad++ - selección por bloques</p></div><h2>Otros</h2><p>Si algún lector sabe de algún editor que valga la pena agregar algún otro editor, ¡que agregue un comentario! <img
src='http://josearrarte.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>No hay posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2012/03/14/seleccion-de-texto-en-bloques-o-columnas/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>SSH sin contraseñas (y seguro)</title><link>http://josearrarte.com/blog/2012/03/07/ssh-sin-contrasenas-y-seguro/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ssh-sin-contrasenas-y-seguro</link> <comments>http://josearrarte.com/blog/2012/03/07/ssh-sin-contrasenas-y-seguro/#comments</comments> <pubDate>Wed, 07 Mar 2012 11:46:08 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[Windows]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=563</guid> <description><![CDATA[Es posible establecer conexiones SSH a servidores Linux sin necesidad de ingresar una contraseña cada vez. Para esto debemos: Crear nuestro par de claves pública y privada Copiar nuestra clave pública en el servidor SSH Utilizar la clave privada al establecer la conexión SSH Dependiendo si estamos utilizando Windows o Linux, tendremos varias formas de [...]
Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2010/03/05/ejecutar-aplicaciones-graficas-de-x11-linux-y-unix-en-windows/' rel='bookmark' title='Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows'>Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Es posible establecer conexiones SSH a servidores Linux sin necesidad de ingresar una contraseña cada vez. Para esto debemos:</p><ul><li>Crear nuestro par de claves pública y privada</li><li>Copiar nuestra clave pública en el servidor SSH</li><li>Utilizar la clave privada al establecer la conexión SSH</li></ul><p>Dependiendo si estamos utilizando Windows o Linux, tendremos varias formas de llevar a cabo estos pasos.</p><h1>Creación de las llaves</h1><p>Para comenzar a utilizar claves pública/privadas desde nuestro cliente SSH, debemos generarlas antes.</p><p>Yo las creé utilizando el algoritmo <a
href="http://es.wikipedia.org/wiki/RSA" target="_blank">RSA</a> en lugar de <a
href="http://es.wikipedia.org/wiki/DSA" target="_blank">DSA</a>, principalmente por el tamaño de la clave, a pesar que DSA es el estándar del gobierno federal de los Estados Unidos. Pero de todas formas, ambos son ampliamente aceptados y por lo que leí, no hay demasiadas ventajas entre uno o el otro. En <a
href="http://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys" target="_blank">este link</a> hay un poco de información interesante y actual.</p><h2>En Linux</h2><p>En Linux las generamos utilizando el comando <code>ssh-keygen</code>. Utilizaremos la mayoría de las opciones por defecto, pero se puede consultar las páginas man del comando por más información.</p><p>Para generar el par de claves RSA utilizamos el comando:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
ssh-keygen -t rsa
</pre><p>Nos pide ingresar algunas opciones, que podemos dejar todo por defecto (notar que para conectarse sin ingresar claves, no se debe ingresar passphrase).<br
/> La ejecución va a tener una salida similar a la siguiente:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
[~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX root@CentosVM
The key's randomart image is:
+--[ RSA 2048]----+
|  o....  .       |
|   o..+=Eo.      |
|     .*B=o.      |
|     ****        |
|      ...        |
|       o o       |
|        .        |
|                 |
|                 |
+-----------------+
[~]#
</pre><p>Esto genera 2 archivos en nuestro directorio home: <code>~/.ssh/id_rsa</code> y <code>~/.ssh/id_rsa.pub</code>. El primero contiene la clave privada, que debemos mantener segura y no compartir. El segundo archivo contiene la clave pública, que compartiremos con los servidores SSH a los que querramos conectarnos.</p><h2>En Windows</h2><p>Para crear el par de claves en Windows se puede utilizar puttygen (se puede descargar aquí: <a
href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" title="puttygen">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a>).<br
/> Basta con iniciar el programa, seleccionar "<code>SSH-2 RSA</code>", 2048 bits de largo de clave y clickear <em>Generate</em>. Nos va a pedir mover el puntero del mouse para generar suficiente aleatoriedad en la generación de las claves.</p><p><a
href="http://josearrarte.com/blog/wp-content/uploads/2012/02/puttygen-1.png"><img
src="http://josearrarte.com/blog/wp-content/uploads/2012/02/puttygen-1.png" alt="" title="puttygen - Generación de claves" width="483" height="467" class="alignnone size-full wp-image-601" /></a><br
/> <br
/> Luego de eso podemos guardar las claves, teniendo en cuenta las mismas precauciones que si la generamos en un Linux: la clave privada no se comparte con nadie, la clave pública si.</p><p><a
href="http://josearrarte.com/blog/wp-content/uploads/2012/02/puttygen-2.png"><img
src="http://josearrarte.com/blog/wp-content/uploads/2012/02/puttygen-2.png" alt="" title="puttygen - Clave generada" width="483" height="467" class="alignnone size-full wp-image-602" /></a><br
/></p><h1>Copiar llaves al servidor SSH</h1><p>Luego de generar las claves debemos compartir nuestra clave pública con el servidor SSH al que queremos conectarnos.</p><h2>En Linux</h2><pre class="brush: plain; gutter: false; title: ; notranslate">
[~]# ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@servidor
</pre><p>Nos preguntará la contraseña de <code>usuario</code> en <code>servidor</code>, para luego agregar nuestra clave pública al final del archivo <code>.ssh/authorized_keys</code> del directorio home de <code>usuario</code> en <code>servidor</code>.</p><h2>En Windows</h2><p>Parece que no hay un equivalente a ssh-copy-id en Windows (<a
href="http://serverfault.com/questions/224810/is-there-an-equivalent-to-ssh-copy-id-for-windows">link a ServerFault</a>), por lo que hacemos este proceso a mano.</p><p>Con PuTTY o cualquier programa similar debemos agregar el contenido de nuestra llave pública en el archivo <code>.ssh/authorized_keys</code> del servidor SSH. Debemos copiar nuestra llave pública (sin incluir los comentarios de <code>"---- BEGIN SSH2 PUBLIC KEY ----"</code> y <code>"---- END SSH2 PUBLIC KEY ----"</code>) a una nueva línea con el siguiente formato:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
ssh-rsa llave_pública [comentario]
</pre><p>El [comentario] es opcional, y sirve simplemente para identificar nuestra clave en el archivo, dado que se muy posible que existan otras claves públicas listadas.</p><p>Si no existe el directorio o el archivo se pueden crear, asegurándonos que queden con permisos de lectura y escritura sólo para el dueño (<code>chmod 600 .ssh/authorized_keys</code>).</p><h1>Conexión utilizando clave pública/privada</h1><h2>En Linux</h2><p>Luego de la instalación de la clave, si utilizamos los nombres de las claves por defecto la conexión desde Linux al servidor SSH es tan simple como ejecutar:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
[~]# ssh -i ~/.ssh/id_rsa usuario@servidor
</pre><h2>En Windows</h2><p>La forma de utilizar nuestro nuevo par de claves generado dependerá del programa que vayamos a utilizar. En PuTTY lo configuramos de la siguiente forma:</p><p><a
href="http://josearrarte.com/blog/wp-content/uploads/2012/02/putty-clave_privada.png"><img
src="http://josearrarte.com/blog/wp-content/uploads/2012/02/putty-clave_privada.png" alt="" title="putty-clave_privada" width="456" height="438" class="size-full wp-image-607" /></a></p><p>Navegamos hasta la sección "<code>Auth</code>" del árbol de opciones e ingresamos la ruta del archivo de nuestra clave privada en "<code>Private key file for authentication</code>"</p><h1>Más información</h1><ul><li><a
href="http://linux.about.com/library/cmd/blcmdl1_ssh-keygen.htm" target="_blank">Man page de ssh-keygen</a></li><li><a
href="http://linux.about.com/od/commands/l/blcmdl1_ssh.htm" target="_blank">Man page de ssh</a></li><li><a
href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank">Página de PuTTY</a></li><li><a
href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica" target="_blank">Criptografía asimétrica en Wikipedia</a></li></ul><p>Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2010/03/05/ejecutar-aplicaciones-graficas-de-x11-linux-y-unix-en-windows/' rel='bookmark' title='Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows'>Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2012/03/07/ssh-sin-contrasenas-y-seguro/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Error de Oracle ORA-12705 (Cannot access NLS data files or invalid environment specified)</title><link>http://josearrarte.com/blog/2010/10/02/error-de-oracle-ora-12705-cannot-access-nls-data-files-or-invalid-environment-specified/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=error-de-oracle-ora-12705-cannot-access-nls-data-files-or-invalid-environment-specified</link> <comments>http://josearrarte.com/blog/2010/10/02/error-de-oracle-ora-12705-cannot-access-nls-data-files-or-invalid-environment-specified/#comments</comments> <pubDate>Sun, 03 Oct 2010 00:09:14 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[base de datos]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Windows]]></category> <category><![CDATA[DB]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=246</guid> <description><![CDATA[Hay veces que al conectarnos a una base Oracle, nos retorna un error ORA-12705 con el mensaje "ORA-12705:Cannot access NLS data files or invalid environment specified", o en un ambiente en español "ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido". Un stack trace típico [...]
No hay posts relacionados.]]></description> <content:encoded><![CDATA[<p>Hay veces que al conectarnos a una base Oracle, nos retorna un error ORA-12705 con el mensaje "ORA-12705:Cannot access NLS data files or invalid environment specified", o en un ambiente en español "ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido".</p><p>Un stack trace típico de este error en una aplicación Java es algo parecido a esto:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
	at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785)
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:362)
	at oracle.jdbc.driver.PhysicalConnection.&lt;init&gt;(PhysicalConnection.java:414)
	at oracle.jdbc.driver.T4CConnection.&lt;init&gt;(T4CConnection.java:165)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:185)
	at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:65)
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840)
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
	... 7 more
</pre><p>O algo parecido a esto, en español:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido
); nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create
 PoolableConnectionFactory (ORA-00604: se ha producido un error a nivel 1 de SQL  recursivo
ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido
)
</pre><p>En mi caso, el problema se da cuando tengo el sistema operativo -y el conjunto de caracteres- configurado para Uruguay. Para solucionarlo en las aplicaciones Java, podemos agregar opciones para configurar el <em>locale</em> que queremos que la JVM utilice, de forma que no tome el del sistema operativo. Esto se hace agregando las siguientes opciones al ejecutar el comando java:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
-Duser.region=us -Duser.language=en
</pre><p>Con <em>user.region</em> configurada para 'us' y <em>user.language</em> para 'en' no falla, eso es seguro. La configuración para México (-Duser.region=mx -Duser.language=es) o España (-Duser.region=es -Duser.language=es) también funciona bien.</p><p>Otra opción es setear la variable de entorno NLS_LANG con un valor de tres partes: <em><language>_<territory>.<character
set></em>. Ejemplos de NLS_LANG pueden ser "AMERICAN_AMERICA.WE8ISO8859P1" o "AMERICAN_AMERICA.UTF8". Podemos ver todos los valores válidos para el lenguaje, territorio y conjunto de caracteres en la vista llamada V$NLS_VALID_VALUES, mediante la consulta</p><pre class="brush: sql; gutter: false; title: ; notranslate">
SELECT parameter, value FROM V$NLS_VALID_VALUES
</pre><p>Una tercer opción, válida en Windows es cambiar la configuración regional y de idioma para algún país que Oracle soporte (Estados Unidos, España, México, etc.). Hay que tener en cuenta sin embargo que esta configuración nos puede afectar otros programas, especialmente en la configuración de moneda, formato de fecha o de separación de miles.</p><p>Los siguientes links tienen buena información al respecto, aunque no muy orientadas a resolver el problema para lenguajes o sets de caractedes "raros" para Oracle:<br
/> <a
href="http://ora-12705.ora-code.com/">http://ora-12705.ora-code.com/</a><br
/> <a
href="http://www.dba-oracle.com/t_nls_lang.htm">http://www.dba-oracle.com/t_nls_lang.htm</a><br
/> <a
href="http://www.dba-oracle.com/t_ora_12705_error.htm">http://www.dba-oracle.com/t_ora_12705_error.htm</a><br
/> <a
href="http://oraclespin.wordpress.com/2008/05/01/setting-nls_lang-for-oracle/">http://oraclespin.wordpress.com/2008/05/01/setting-nls_lang-for-oracle/</a></p><p>No hay posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/10/02/error-de-oracle-ora-12705-cannot-access-nls-data-files-or-invalid-environment-specified/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Editar archivos de Office 2007 en versiones anteriores de Office</title><link>http://josearrarte.com/blog/2010/08/08/editar-archivos-de-office-2007-en-versiones-anteriores-de-office/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=editar-archivos-de-office-2007-en-versiones-anteriores-de-office</link> <comments>http://josearrarte.com/blog/2010/08/08/editar-archivos-de-office-2007-en-versiones-anteriores-de-office/#comments</comments> <pubDate>Sun, 08 Aug 2010 22:34:06 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Windows]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=420</guid> <description><![CDATA[Según Microsoft, Al instalar el paquete de compatibilidad junto con Office 2000, Office XP u Office 2003, podrá abrir, editar y guardar archivos con los nuevos formatos de Word 2007, Excel 2007 y PowerPoint 2007. El paquete de compatibilidad puede utilizarse junto con Microsoft Office Word Viewer 2003, Excel Viewer 2003 y PowerPoint Viewer 2003 [...]
Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/06/28/pantalla-widescreen-1610-en-powerpoint/' rel='bookmark' title='Pantalla widescreen (16:10) en Powerpoint'>Pantalla widescreen (16:10) en Powerpoint</a></li><li><a
href='http://josearrarte.com/blog/2009/08/30/64gb-de-ram-en-un-sistema-operativo-de-32-bits/' rel='bookmark' title='64GB de RAM en un sistema operativo de 32 bits'>64GB de RAM en un sistema operativo de 32 bits</a></li><li><a
href='http://josearrarte.com/blog/2010/07/26/descargar-archivos-de-sitios-de-file-sharing-por-consola-en-linux/' rel='bookmark' title='Descargar archivos de sitios de file-sharing por consola en Linux'>Descargar archivos de sitios de file-sharing por consola en Linux</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Según <a
href="http://support.microsoft.com/kb/924074" target="_blank">Microsoft</a>,</p><blockquote><p>Al instalar el paquete de compatibilidad junto con Office 2000, Office  XP u Office 2003, podrá abrir, editar y guardar archivos con los nuevos  formatos de Word 2007, Excel 2007 y PowerPoint 2007. El paquete de  compatibilidad puede utilizarse junto con Microsoft Office Word Viewer  2003, Excel Viewer 2003 y PowerPoint Viewer 2003 para ver los archivos  guardados con estos formatos.</p></blockquote><p>El paquete de compatibilidad pesa 37.2 MB y se puede descargar <a
href="http://www.microsoft.com/downloads/details.aspx?FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466&amp;displayLang=es" target="_blank">en ésta página</a>. Es un instalador llamado FileFormatConverters.exe, y el proceso de instalación es bien simple.</p><p>Luego de instalado tendremos la posibilidad de abrir archivos de Office 2007 (.docx, .pptx, .xlsx, etc.), editarlos y guardarlos como si fueran versiones antiguas. Para crear archivos de Office 2007 tendremos la opción de guardarlos con el formato deseado en la lista de formatos de "<em>Guardar como tipo</em>":</p><p><a
href="http://josearrarte.com/blog/wp-content/uploads/2010/09/docx.png"><img
class="aligncenter size-full wp-image-489" title="Guardar como .docx" src="http://josearrarte.com/blog/wp-content/uploads/2010/09/docx.png" alt="" width="648" height="471" /></a></p><p>Referencias:</p><ul><li><a
href="http://support.microsoft.com/kb/924074">Cómo abrir y guardar archivos de Word 2007, Excel 2007 y PowerPoint 2007 en versiones anteriores de programas de Office (Soporte Microsoft)</a></li><li><a
href="http://www.microsoft.com/downloads/details.aspx?FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466&amp;displayLang=es">Página de descarga del paquete de compatibilidad</a></li><li><a
href="http://office.microsoft.com/es-es/word-help/abrir-un-documento-de-word-2007-en-una-version-anterior-de-word-HA010044473.aspx">Abrir un documento de Word 2007 en una versión anterior de Word (Soporte de Office)</a></li></ul><p>Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/06/28/pantalla-widescreen-1610-en-powerpoint/' rel='bookmark' title='Pantalla widescreen (16:10) en Powerpoint'>Pantalla widescreen (16:10) en Powerpoint</a></li><li><a
href='http://josearrarte.com/blog/2009/08/30/64gb-de-ram-en-un-sistema-operativo-de-32-bits/' rel='bookmark' title='64GB de RAM en un sistema operativo de 32 bits'>64GB de RAM en un sistema operativo de 32 bits</a></li><li><a
href='http://josearrarte.com/blog/2010/07/26/descargar-archivos-de-sitios-de-file-sharing-por-consola-en-linux/' rel='bookmark' title='Descargar archivos de sitios de file-sharing por consola en Linux'>Descargar archivos de sitios de file-sharing por consola en Linux</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/08/08/editar-archivos-de-office-2007-en-versiones-anteriores-de-office/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Array de bytes y la clase java.nio.ByteBuffer</title><link>http://josearrarte.com/blog/2010/07/29/array-de-bytes-y-la-clase-java-nio-bytebuffer/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=array-de-bytes-y-la-clase-java-nio-bytebuffer</link> <comments>http://josearrarte.com/blog/2010/07/29/array-de-bytes-y-la-clase-java-nio-bytebuffer/#comments</comments> <pubDate>Fri, 30 Jul 2010 00:00:58 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Java]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=439</guid> <description><![CDATA[Un buffer es una secuencia finita de elementos -en este caso, tipos primitivos-. La clase abstracta java.nio.Buffer y sus respectivas subclases concretas (java.nio.ByteBuffer, java.nio.IntBuffer, java.nio.FloatBuffer, etc.) sirven como contenedores para datos de tipos primitivos. Estos buffers forman parte de la API NIO junto a las classes Channel, Selector, entre otras. Estas clases, en particular java.nio.ByteBuffer, [...]
Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/08/27/seleccionar-y-matar-un-proceso-java-determinado/' rel='bookmark' title='Seleccionar y matar un proceso java determinado'>Seleccionar y matar un proceso java determinado</a></li><li><a
href='http://josearrarte.com/blog/2009/07/22/crear-nuevo-proyecto-java-con-maven/' rel='bookmark' title='Crear un nuevo proyecto Java con Maven'>Crear un nuevo proyecto Java con Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/11/20/unmappable-character-for-encoding-utf-8-al-compilar-proyectos-java-con-maven/' rel='bookmark' title='&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven'>&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Un buffer es una secuencia finita de elementos -en este caso, tipos primitivos-. La clase abstracta <a
href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/nio/Buffer.html" target="_blank">java.nio.Buffer</a> y sus respectivas subclases concretas (<a
href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/nio/ByteBuffer.html" target="_blank">java.nio.ByteBuffer</a>, <a
href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/nio/IntBuffer.html" target="_blank">java.nio.IntBuffer</a>, <a
href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/nio/FloatBuffer.html" target="_blank">java.nio.FloatBuffer</a>, etc.) sirven como contenedores para datos de tipos primitivos. Estos buffers forman parte de la <a
href="http://en.wikipedia.org/wiki/New_I/O">API NIO</a> junto a las classes <code>Channel</code>, <code>Selector</code>, entre otras.</p><p>Estas clases, en particular <code>java.nio.ByteBuffer</code>, son de especial utilidad en aplicaciones en las cuales tenemos que generar array de bytes y que no justifica usar frameworks demasiado refinados para dicha tarea.</p><p>Un <code>java.nio.Buffer</code> tiene algunas propiedades escenciales:</p><ul><li><strong>Capacidad</strong>: la cantidad de elementos máxima del buffer. Siempre tiene un valor positivo, y no cambia durante la vida del objeto. Debe ser conocido al momento de inicializar el buffer.</li><li><strong>Límite</strong>: según la documentación de <code>java.nio.Buffer</code>, el límite es "el índice del primer elemento que no debería ser leído ni escrito". Es un valor entre la posición y  la capacidad del buffer. La idea es utilizarlo como marcador para que, luego de terminada la escritura hacia el buffer, sepamos hasta donde lo podemos leer para obtener el array generado.</li><li><strong>Posición</strong>: la posición actual dentro del bufffer. Es el índice del próximo elemento a leer o escribir.</li></ul><h1>Funcionalidades básicas</h1><p>Todas estas funcionalidades están muy detalladas en los javadocs de las clases, pero es interesante repasar las más útiles:</p><ul><li><strong>Operaciones de escritura</strong>: la API provee las distintas variantes de operaciones <code>put</code>, permitiendo agregar bytes y tipos más grandes como ser <code>int</code>, <code>long</code>, <code>float</code>, arrays de bytes o incluso el contenido de otro ByteBuffer. Para los tipos de datos que ocupen más de un byte, se considerará la codificación (<a
href="http://en.wikipedia.org/wiki/Endianness">endianness</a>) seteado utilizando el método <code>order()</code>. Tenemos métodos <code>put</code> para agregar bytes en posiciones relativas (en la posición actual) o absolutas (en una posición determinada)</li><li><strong>Operaciones de lectura</strong>: al igual que con las operaciones <code>put</code>, las operaciones <code>get</code> permiten recuperar datos del buffer. Tenemos operaciones para recuperar diferentes tipos de datos (siempre teniendo en cuenta la codificación -<a
href="http://en.wikipedia.org/wiki/Endianness">endianness</a>- cuando los tipos de datos son multi-byte), para recuperarlos desde la posición actual o desde una posición determinada. También podemos cargar un array de bytes con una sección del buffer.</li><li><strong><code>clear()</code></strong>: prepara el buffer para una nueva secuencia de operaciones de escritura, seteando el límite con igual valor que la capacidad, y la posición actual en cero.</li><li><strong><code>flip()</code></strong>: prepara el buffer para una secuencia de lecturas, seteando el límite igual a la posición actual, y la posición a cero. Más allá de la capacidad máxima del buffer, permite hacer operaciones sobre la porción que utilizamos anteriormente.</li><li><strong><code>rewind()</code></strong>: prepara el buffer para una relectura de la información que contiene, seteando la posición en cero sin cambiar el valor del límite.</li><li><strong><code>mark()</code> / <code>reset()</code></strong>: <code>mark()</code> setea la marca del buffer en la posición actual. al invocar <code>reset()</code>, cambiamos de posición en el buffer a la última invocación de <code>mark()</code>.</li><li><strong><code>slice()</code></strong>: crea un nuevo <code>ByteBuffer</code> a partir de la posición actual y hasta el fin del array. Los buffers comparten el array subyacente, por lo que un cambio en los datos se verá reflejado en ambos.<li><strong><code>array()</code></strong>: retorna el buffer en forma de array.</li><li><strong>Chaining (encadenamiento) de invocaciones</strong>: los métodos que no deben retornar valores al invocarlos, retornan una referencia a sí mismo, de manera de poder encadenar invocaciones al buffer. El encadenamiento no aporta nuevas funcionalidades, simplemente mejora la usabilidad.</li></ul><h1>Ejemplo de uso</h1><p>Imaginemos que necesitamos generar un array de bytes para enviar a un sistema externo, que contiene la siguiente información:</p><table><tr><th>Campo</th><th>Tipo de dato</th><th>Largo</th><th>Formato</th></tr><tr><td>Largo del mensaje</td><td>short</td><td>2 bytes</td><td>Little Endian</td></tr><tr><td>Id</td><td>long</td><td>8 bytes</td><td>Big Endian</td></tr><tr><td>Largo del nombre</td><td>short</td><td>2 bytes</td><td>Little Endian</td></tr><tr><td>Nombre</td><td>String</td><td>Máximo 30 caracteres</td><td>-</td></tr><tr><td>Edad</td><td>byte</td><td>1 byte</td><td>-</td></tr><tr><td>Salario</td><td>int</td><td>4 bytes</td><td>Big Endian</td></tr></table><p>Debemos codificar el largo total del mensaje y el largo del nombre como <em>little-endian</em> (es decir, el byte menos significativo va en la primer posición, y el byte más significativo va en la última) en lugar de <em>big-endian</em> -a veces también llamado <em>network order</em>, por ser la codificación definida en el protocolo IP-.</p><p>Aprovecharemos las funcionalidades de la clase ByteBuffer para resolver este problema. En particular, ByteBuffer nos permite setear la representación de los enteros de varios bytes en el array, utilizando el método <a
href="http://download-llnw.oracle.com/javase/6/docs/api/java/nio/ByteBuffer.html#order%28java.nio.ByteOrder%29">order(ByteOrder bo)</a>. Una solución que resuelve la generación del array podría ser la siguiente:</p><pre class="brush: java; title: ; notranslate">
package com.josearrarte.demo;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class ByteBufferDemo {

	private static final int SIZEOF_BYTE = 1;
	private static final int SIZEOF_SHORT = 2;
	private static final int SIZEOF_INT = 4;
	private static final int SIZEOF_LONG = 8;

	public static void main(String[] args) {

		byte[] byteArray = buildByteArray(12345678L, &quot;Pedro Picapiedra&quot;, (byte)46, 25000);

		String hexString = getHexString(byteArray);
		System.out.println(hexString);
	}

	private static byte[] buildByteArray(long id, String name, byte age, int salary) {

		int capacity = 2 * SIZEOF_SHORT +	// largos
			SIZEOF_LONG + 					// id
			name.length() + 				// nombre
			SIZEOF_BYTE + 					// edad
			SIZEOF_INT;						// salario

		ByteBuffer buffer = ByteBuffer.allocate(capacity);

		// largo de datos
		buffer.order(ByteOrder.LITTLE_ENDIAN);
		buffer.putShort((short)capacity);

		// id
		buffer.order(ByteOrder.BIG_ENDIAN);
		buffer.putLong(id);

		// largo del campo nombre
		buffer.order(ByteOrder.LITTLE_ENDIAN).putShort((short)name.length());

		// nombre
		buffer.order(ByteOrder.BIG_ENDIAN).put(name.getBytes());

		// edad
		buffer.put(age).putInt(salary);

		return buffer.array();

	}

	private static String getHexString(byte[] array) {
		final char[] chars = { '0', '1', '2', '3', '4',
				'5', '6', '7', '8', '9',
				'A', 'B', 'C', 'D', 'E', 'F' };

		StringBuilder strBuilder = new StringBuilder();

		for (int i = 0; i &lt; array.length; i++) {
			byte b = array[i];

			byte lowNibble = (byte) (b &amp; 0x0F);
			byte highNibble = (byte) ((b &amp; 0xF0) &gt;&gt;&gt; 4);

			strBuilder.append(chars[highNibble]);
			strBuilder.append(chars[lowNibble]);
			strBuilder.append(' ');
		}

		return strBuilder.toString();
	}
}
</pre><p>La salida del programa es:</p><pre class="brush: plain; title: ; notranslate">
21 00 00 00 00 00 00 BC 61 4E 10 00 50 65 64 72 6F 20 50 69 63 61 70 69 65 64 72 61 2E 00 00 61 A8
</pre><p>Podemos desglosar la salida para cada dato:</p><ul><li> Largo de datos: <code>21 00</code> (33)</li><li> Id: <code>00 00 00 00 00 BC 61 4E</code> (12345678)</li><li> Largo del campo de nombre: <code>10 00</code> (16)</li><li> Nombre: <code>50 65 64 72 6F 20 50 69 63 61 70 69 65 64 72 61</code> ("Pedro Picapiedra")</li><li> Edad: <code>2E</code> (46)</li><li> Salario: <code>00 00 61 A8</code> (25000)</li></ul><p>Notemos la facilidad ByteBuffer que nos da a la hora de tener que intercambiar los formatos de enteros y de mezclar distintos tipos primitivos en un mismo array. No tuvimos necesidad de ir calculando las posiciones dentro del array, ni calcular la representación de enteros en formato little-endian o big-endian.</p><h1>Referencias</h1><p><a
href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/nio/ByteBuffer.html" target="_blank">API de java.nio.ByteBuffer</a><br
/> <a
href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/nio/Buffer.html" target="_blank">API de java.nio.Buffer</a><br
/> <a
href="http://en.wikipedia.org/wiki/Endianness" target="_blank">http://en.wikipedia.org/wiki/Endianness</a><br
/> <a
href="http://en.wikipedia.org/wiki/New_I/O" target="_blank">http://en.wikipedia.org/wiki/New_I/O</a></p><p>Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/08/27/seleccionar-y-matar-un-proceso-java-determinado/' rel='bookmark' title='Seleccionar y matar un proceso java determinado'>Seleccionar y matar un proceso java determinado</a></li><li><a
href='http://josearrarte.com/blog/2009/07/22/crear-nuevo-proyecto-java-con-maven/' rel='bookmark' title='Crear un nuevo proyecto Java con Maven'>Crear un nuevo proyecto Java con Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/11/20/unmappable-character-for-encoding-utf-8-al-compilar-proyectos-java-con-maven/' rel='bookmark' title='&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven'>&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/07/29/array-de-bytes-y-la-clase-java-nio-bytebuffer/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Descargar archivos de sitios de file-sharing por consola en Linux</title><link>http://josearrarte.com/blog/2010/07/26/descargar-archivos-de-sitios-de-file-sharing-por-consola-en-linux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=descargar-archivos-de-sitios-de-file-sharing-por-consola-en-linux</link> <comments>http://josearrarte.com/blog/2010/07/26/descargar-archivos-de-sitios-de-file-sharing-por-consola-en-linux/#comments</comments> <pubDate>Tue, 27 Jul 2010 00:00:43 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Linux]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=446</guid> <description><![CDATA[Quienes hemos utilizado el excepcional JDownloader sabemos la facilidad que nos proporciona a la hora de descargar una lista de archivos que son secciones de un archivo comprimido. Tengo una PC bastante antigüa (Pentium III con 256MB de RAM) que utilizo como servidor de descargas con MLDonkey sobre Gentoo Linux, pero me hacía falta encontrar [...]
Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/07/29/copiar-archivos-utilizando-scp-en-linux/' rel='bookmark' title='Copiar archivos utilizando SCP en Linux'>Copiar archivos utilizando SCP en Linux</a></li><li><a
href='http://josearrarte.com/blog/2009/09/23/copiar-archivo-y-particiones-utilizando-dd-linuxunix/' rel='bookmark' title='Copiar archivo y particiones utilizando dd (Linux/UNIX)'>Copiar archivo y particiones utilizando dd (Linux/UNIX)</a></li><li><a
href='http://josearrarte.com/blog/2009/07/30/monitoreo-en-linux-nmon/' rel='bookmark' title='Monitoreo en Linux: nmon'>Monitoreo en Linux: nmon</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Quienes hemos utilizado el excepcional <a
href="http://jdownloader.org/">JDownloader</a> sabemos la facilidad que nos proporciona a la hora de descargar una lista de archivos que son secciones de un archivo comprimido. Tengo una PC bastante antigüa (Pentium III con 256MB de RAM) que utilizo como servidor de descargas con <a
href="http://mldonkey.sourceforge.net/">MLDonkey</a> sobre <a
href="http://www.gentoo.org/">Gentoo Linux</a>, pero me hacía falta encontrar un sustituto para el JDownloader que no necesitara un ambiente gráfico para correr.</p><p><a
href="http://code.google.com/p/plowshare/">PlowShare</a> es un conjunto de scripts para el sistema operativo Linux con el fin de permitir administrar las descargas y subidas en sitios de <em>file-sharing</em>, del estilo de <a
href="http://rapidshare.com/">RapidShare</a>, <a
href="http://www.megaupload.com/">MegaUpload</a>, <a
href="http://hotfile.com/">HotFile</a>, etc. Automatiza el reconocimiento de caracteres -CAPTCHA- y los tiempos de espera para comenzar la descarga. Además, es una aplicación de consola con requerimientos de recursos excepcionalmente bajos.</p><p>Los scripts son plowdown.sh, plowup.sh, plowdel.sh y plowlist.sh. Seguramente el más utilizado por el común de la gente sea plowdown, y éstas son sus opciones:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
server ~ # plowdown
Usage: plowdown [OPTIONS] [MODULE_OPTIONS] URL|FILE [URL|FILE ...]

  Download files from file sharing servers.

  Available modules: rapidshare megaupload 2shared badongo mediafire 4shared zshare depositfiles storage_to uploaded_to uploading netload_in usershare sendspace x7_to hotfile divshare dl_free_fr humyo filefactory data_hu

Global options:

  -h, --help: Show help info
  --version: Return plowdown version
  -v LEVEL, --verbose=LEVEL: Set output verbose level: 0=none, 1=err, 2=notice (default), 3=dbg
  -q, --quiet: Alias for -v0
  -c, --check-link: Check if a link exists and return
  -m, --mark-downloaded: Mark downloaded links in (regular) FILE arguments
  -x, --no-overwrite: Do not overwrite existing files
  --get-module: Get module(s) for URL(s)
  -o DIRECTORY, --output-directory=DIRECTORY: Directory where files will be saved
  --temp-directory=DIRECTORY: Directory where files are temporarily downloaded
  -r SPEED, --limit-rate=SPEED: Limit speed to bytes/sec (suffixes: k=Kb, m=Mb, g=Gb)
  -i IFACE, --interface=IFACE: Force IFACE interface
  -t SECS, --timeout=SECS: Timeout after SECS seconds of waits
  --max-retries=N: Set maximum retries for loops
  --run-download=COMMAND: run down command (interpolations: %filename, %cookies, %url)

Options for module &lt;rapidshare&gt;:

  -a USER:PASSWORD, --auth=USER:PASSWORD: Use Premium-Zone account

Options for module &lt;megaupload&gt;:

  -a USER:PASSWORD, --auth=USER:PASSWORD: Free-membership or Premium account
  -p PASSWORD, --link-password=PASSWORD: Used in password-protected files

Options for module &lt;x7_to&gt;:

  -b USER:PASSWORD, --auth-free=USER:PASSWORD: Use Free account
</pre><p>Al script lo podemos invocar con la URL de un archivo a descargar, una lista de URLs de archivos a descargar o inclusive con la ruta a un archivo de texto que contiene la lista de links (uno por línea). En los últimos dos casos el script descargará los archivos en orden, siendo posible configurar que marque con el símbolo '#' al principio de la línea del archivo cada archivo descargado correctamente (ver <em>--mark-downloaded</em> más abajo).</p><p>Algunas de las opciones importantes son:</p><ul><li><em>-o (--output-directory</em>): determina el directorio de salida. Es el lugar en donde se ubicarán el o los archvos descargados.</li><li><em>-r (--limit-rate</em>): configura la velocidad de transferencia máxima, por ejemplo, -r=50kb, --limit-rate=1m.</li><li><em>-c (--check-link</em>): no descarga el o los archivos, sólo verifica que los links sean válidos.</li><li><em>-m (--mark-downloaded</em>): cuando se desea descargar todos los links listados en un archivo de texto, marca los archivos descargados correctamente con un '#' al principio de la línea.</li></ul><p>Veamos un ejemplo de invocación para descargar un archivo desde MegaUpload:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
server ~ # plowdown -v 2 -o /tmp http://www.megaupload.com/?d=977IJRE0
Install aview or libcaca to display captcha image
Waiting 47 seconds... 37.. 27.. 17.. 7.. 0
File URL: http://www937.megaupload.com/files/927a093e5f4d388420ef7ecfcecd73c0/Weeds 5x01 - Seba357.rar
Filename: Weeds 5x01 - Seba357.rar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 51  233M   51  120M    0     0   209k      0  0:18:57  0:09:47  0:09:10  212k
</pre><p>En <a
href="http://code.google.com/p/plowshare/wiki/Readme">http://code.google.com/p/plowshare/wiki/Readme</a> tenemos otros ejemplos de uso para descargar, subir, borrar y comprobar links en sitios de <em>file-sharing</em>.</p><p> El proyecto PlowShare está hosteado en Google Code. La página del proyecto es <a
href="http://code.google.com/p/plowshare/">http://code.google.com/p/plowshare/</a>.</p><p>Gentoo Linux tiene el paquete disponible en portage bajo el nombre net-misc/plowshare. Archlinux y (e incluso Mac OSX) también tiene paquete de instalación, para el resto de los sabores de Linux tenemos la posibilidad de instalarlo desde el código fuente.</p><p>Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/07/29/copiar-archivos-utilizando-scp-en-linux/' rel='bookmark' title='Copiar archivos utilizando SCP en Linux'>Copiar archivos utilizando SCP en Linux</a></li><li><a
href='http://josearrarte.com/blog/2009/09/23/copiar-archivo-y-particiones-utilizando-dd-linuxunix/' rel='bookmark' title='Copiar archivo y particiones utilizando dd (Linux/UNIX)'>Copiar archivo y particiones utilizando dd (Linux/UNIX)</a></li><li><a
href='http://josearrarte.com/blog/2009/07/30/monitoreo-en-linux-nmon/' rel='bookmark' title='Monitoreo en Linux: nmon'>Monitoreo en Linux: nmon</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/07/26/descargar-archivos-de-sitios-de-file-sharing-por-consola-en-linux/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Orgullo Celeste</title><link>http://josearrarte.com/blog/2010/07/10/orgullo-celeste/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=orgullo-celeste</link> <comments>http://josearrarte.com/blog/2010/07/10/orgullo-celeste/#comments</comments> <pubDate>Sun, 11 Jul 2010 01:28:46 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[Uruguay]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=426</guid> <description><![CDATA[Hoy Uruguay cerró su gran actuación en el mundial de fútbol en Sudáfrica, con un cuarto puesto luego de perder contra la selección alemana. Sin ánimo de subirme al tren exitista luego de la gran actuación de la Celeste, deseo hacer público este sentimiento de orgullo por la entrega, por la pasión demostrada, por la [...]
No hay posts relacionados.]]></description> <content:encoded><![CDATA[<div
id="attachment_427" class="wp-caption aligncenter" style="width: 570px"><a
href="http://josearrarte.com/blog/wp-content/uploads/2010/07/celeste.jpg"><img
class="size-full wp-image-427" title="celeste" src="http://josearrarte.com/blog/wp-content/uploads/2010/07/celeste.jpg" alt="" width="560" height="354" /></a><p
class="wp-caption-text">Fuente: sitio de FIFA</p></div><p>Hoy Uruguay cerró su gran actuación en el mundial de fútbol en Sudáfrica, con un cuarto puesto luego de perder contra la selección alemana.</p><p>Sin ánimo de subirme al tren exitista luego de la gran actuación de la Celeste, deseo hacer público este sentimiento de orgullo por la entrega, por la pasión demostrada, por la unión del grupo, por la humildad y la nobleza de las declaraciones ante la prensa, tanto luego de ganar como luego de perder. También tengo un sentimiendo de que este logro no fue por suerte o de regalo; el sentimiento de que luego de ver al plantel luchar hasta el último minuto -literalmente-, un lugar mejor era también bien merecido.</p><p>Sin dudas el temple y las ganas esta selección es un ejemplo a seguir, ese sentimiendo de que ya no es regla que el más chico no puede llegar a cosas grandes, de que por ser uruguayos no podemos estar entre los mejores del mundo y destacarnos en algo. Es responsabilidad de nosotros dejarnos contagiarnos por esta actitud, y tomar este mundial como ejemplo para animarnos a llegar a más.</p><p>Salud Celeste, ojalá que todas estas alegrías sean sólo el comienzo de una nueva etapa de nuestra historia en el fútbol mundial.</p><p>No hay posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/07/10/orgullo-celeste/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>UnxUtils: ejecutar comandos Linux/UNIX en Windows</title><link>http://josearrarte.com/blog/2010/05/13/unxutils-ejecutar-comandos-linuxunix-en-windows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=unxutils-ejecutar-comandos-linuxunix-en-windows</link> <comments>http://josearrarte.com/blog/2010/05/13/unxutils-ejecutar-comandos-linuxunix-en-windows/#comments</comments> <pubDate>Thu, 13 May 2010 21:50:48 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[UNIX]]></category> <category><![CDATA[Windows]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=285</guid> <description><![CDATA[UnxUtils es un port para Windows de varias utilidades GNU. Para la gente que está acostumbrada a utilizar sistemas UNIX o Linux, estas utilidades se extrañan bastante en sistemas Windows, especialmente cuando tenemos que crear scripts. Incluye ls, grep, diff, wget, md5sum, tail, head, less, sed, entre otras. Podemos ver la lista entera de comandos [...]
Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2010/03/05/ejecutar-aplicaciones-graficas-de-x11-linux-y-unix-en-windows/' rel='bookmark' title='Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows'>Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows</a></li><li><a
href='http://josearrarte.com/blog/2009/07/29/copiar-archivos-utilizando-scp-en-linux/' rel='bookmark' title='Copiar archivos utilizando SCP en Linux'>Copiar archivos utilizando SCP en Linux</a></li><li><a
href='http://josearrarte.com/blog/2009/09/23/copiar-archivo-y-particiones-utilizando-dd-linuxunix/' rel='bookmark' title='Copiar archivo y particiones utilizando dd (Linux/UNIX)'>Copiar archivo y particiones utilizando dd (Linux/UNIX)</a></li></ol>]]></description> <content:encoded><![CDATA[<p><a
href="http://sourceforge.net/projects/unxutils/">UnxUtils</a> es un <a
href="http://en.wikipedia.org/wiki/Porting">port</a> para Windows de varias utilidades GNU. Para la gente que está acostumbrada a utilizar sistemas UNIX o Linux, estas utilidades se extrañan bastante en sistemas Windows, especialmente cuando tenemos que crear <em>scripts</em>. Incluye <code>ls</code>, <code>grep</code>, <code>diff</code>, <code>wget</code>, <code>md5sum</code>, <code>tail</code>, <code>head</code>, <code>less</code>, <code>sed</code>, entre otras. Podemos ver la lista entera de comandos en la siguiente imagen:</p><p><a
href="http://josearrarte.com/blog/wp-content/uploads/2010/05/unxutils.png"><img
src="http://josearrarte.com/blog/wp-content/uploads/2010/05/unxutils.png" alt="" title="UnxUtils" width="576" height="598" class="aligncenter size-full wp-image-407" /></a></p><p>Para instalarlo, debemos bajar la herramienta desde <a
href="http://sourceforge.net/projects/unxutils/">la página del proyecto en SourceForge.net</a>. Descomprimimos el archivo en el directorio que más nos guste (yo lo tengo en <code>C:UnxUtils</code>) y agregamos el directorio <code>[dir]usrlocalwbin</code> a la variable de entorno <em>path</em>, donde <code>[dir]</code> es el directorio elegido para descomprimir el archivo (en mi caso, agregué <code>C:UnxUtilsusrlocalwbin</code>)</p><p>Otra forma, no tan rápida o directa de contar con este tipo de utilidades bajo Windows, pero más completa es instalar <a
href="http://www.cygwin.com/">Cygwin</a>. Para ello debemos bajar el instalador desde su página, y luego seguir las <a
href="http://www.cygwin.com/cygwin-ug-net/cygwin-ug-net.html">instrucciones de su guía para el usuario</a>.</p><p>Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2010/03/05/ejecutar-aplicaciones-graficas-de-x11-linux-y-unix-en-windows/' rel='bookmark' title='Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows'>Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows</a></li><li><a
href='http://josearrarte.com/blog/2009/07/29/copiar-archivos-utilizando-scp-en-linux/' rel='bookmark' title='Copiar archivos utilizando SCP en Linux'>Copiar archivos utilizando SCP en Linux</a></li><li><a
href='http://josearrarte.com/blog/2009/09/23/copiar-archivo-y-particiones-utilizando-dd-linuxunix/' rel='bookmark' title='Copiar archivo y particiones utilizando dd (Linux/UNIX)'>Copiar archivo y particiones utilizando dd (Linux/UNIX)</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/05/13/unxutils-ejecutar-comandos-linuxunix-en-windows/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Cambiar la JVM utilizada por Eclipse</title><link>http://josearrarte.com/blog/2010/05/13/cambiar-la-jvm-utilizada-por-eclipse/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cambiar-la-jvm-utilizada-por-eclipse</link> <comments>http://josearrarte.com/blog/2010/05/13/cambiar-la-jvm-utilizada-por-eclipse/#comments</comments> <pubDate>Thu, 13 May 2010 21:48:52 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Eclipse]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[Maven]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=397</guid> <description><![CDATA[En algunos casos es necesario iniciar el IDE Eclipse utilizando una JDK en lugar de la JRE por defecto. Un caso es, por ejemplo, para poder utilizar todas las funcionalidades del plugin m2eclipse. Veremos cómo cambiar la configuración para usar otra máquina virtual. Para ello, debemos editar el archivo eclipse.ini que está en el directorio [...]
Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2010/04/17/m2eclipse-un-plugin-de-eclipse-para-proyectos-de-maven/' rel='bookmark' title='m2eclipse: un plugin de Eclipse para proyectos de Maven'>m2eclipse: un plugin de Eclipse para proyectos de Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/07/26/problemas-en-eclipse-de-proyectos-maven-con-dependencias-a-aspectj/' rel='bookmark' title='Problemas en Eclipse de proyectos Maven con dependencias a AspectJ'>Problemas en Eclipse de proyectos Maven con dependencias a AspectJ</a></li><li><a
href='http://josearrarte.com/blog/2009/11/07/evitar-la-ejecucion-de-tests-o-ignorar-resultados-al-utilizar-maven/' rel='bookmark' title='Evitar la ejecución de tests o ignorar resultados al utilizar Maven'>Evitar la ejecución de tests o ignorar resultados al utilizar Maven</a></li></ol>]]></description> <content:encoded><![CDATA[<p>En algunos casos es necesario iniciar el IDE <a
href="http://www.eclipse.org/" target="_blank">Eclipse</a> utilizando una JDK en lugar de la JRE por defecto. Un caso es, por ejemplo, para poder utilizar todas las funcionalidades del plugin <a
href="http://josearrarte.com/blog/2010/04/17/m2eclipse-un-plugin-de-eclipse-para-proyectos-de-maven/" target="_blank">m2eclipse</a>. Veremos cómo cambiar la configuración para usar otra máquina virtual.</p><p>Para ello, debemos editar el archivo <code>eclipse.ini</code> que está en el directorio de instalación de Eclipse (bah, en el directorio en donde lo descomprimimos), y agregar el parámetro <code>-vm</code> indicando el ejecutable de la JDK que usará el IDE. Hay algunas cosas a tener en cuenta:</p><ol><li>El parámetro <code>-vm</code> debe ir solo en una línea, con su valor en la línea siguiente.</li><li>El valor del parámetro <code>-vm</code> es la ruta hasta el ejecutable (por ejemplo <code>javaw.exe</code>), no es la ruta del directorio que lo contiene.</li><li>Es importante la ubicación del parámetro <code>-vm</code>. Debe estar ubicado antes del parámetro <code>-vmargs</code>. Todos los parámetros luego de <code>-vmargs</code> serán pasados directamente a la JVM</li></ol><p>Yo tengo una JDK en Windows instalada en el directorio <code>D:Javajdk1.6.0_17</code>, y éste es mi <code>eclipse.ini</code>:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vm
D:/Java/jdk1.6.0_17/bin/javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
</pre><p>Como último punto a destacar, quisiera comentar que toda esta configuración se puede verificar en About Eclipse, en el menú de Help.</p><p><a
href="http://wiki.eclipse.org/Eclipse.ini" target="_blank">http://wiki.eclipse.org/Eclipse.ini</a><br
/> <a
href="http://tech.karolzielinski.com/m2eclipse-eclipse-is-running-in-a-jre-but-a-jdk-is-required"  target="_blank">http://tech.karolzielinski.com/m2eclipse-eclipse-is-running-in-a-jre-but-a-jdk-is-required</a></p><p>Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2010/04/17/m2eclipse-un-plugin-de-eclipse-para-proyectos-de-maven/' rel='bookmark' title='m2eclipse: un plugin de Eclipse para proyectos de Maven'>m2eclipse: un plugin de Eclipse para proyectos de Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/07/26/problemas-en-eclipse-de-proyectos-maven-con-dependencias-a-aspectj/' rel='bookmark' title='Problemas en Eclipse de proyectos Maven con dependencias a AspectJ'>Problemas en Eclipse de proyectos Maven con dependencias a AspectJ</a></li><li><a
href='http://josearrarte.com/blog/2009/11/07/evitar-la-ejecucion-de-tests-o-ignorar-resultados-al-utilizar-maven/' rel='bookmark' title='Evitar la ejecución de tests o ignorar resultados al utilizar Maven'>Evitar la ejecución de tests o ignorar resultados al utilizar Maven</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/05/13/cambiar-la-jvm-utilizada-por-eclipse/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Generación del manifest de un JAR utilizando Maven</title><link>http://josearrarte.com/blog/2010/04/30/generacion-del-manifest-de-un-jar-utilizando-maven/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=generacion-del-manifest-de-un-jar-utilizando-maven</link> <comments>http://josearrarte.com/blog/2010/04/30/generacion-del-manifest-de-un-jar-utilizando-maven/#comments</comments> <pubDate>Fri, 30 Apr 2010 20:43:50 +0000</pubDate> <dc:creator>José Arrarte</dc:creator> <category><![CDATA[Java]]></category> <category><![CDATA[Maven]]></category><guid
isPermaLink="false">http://josearrarte.com/blog/?p=250</guid> <description><![CDATA[Al empaquetar un artefacto Java, puede interesarnos agregar información al manifest generado. El manifest es un archivo que se crea dentro de nuestro JAR (en la ruta META-INF/MANIFEST.MF) con información bastante diversa acerca del JAR, en forma de "propiedad: valor". Esta información puede ser acerca de la versión de código empaquetada, del classpath, de la [...]
Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/07/22/crear-nuevo-proyecto-java-con-maven/' rel='bookmark' title='Crear un nuevo proyecto Java con Maven'>Crear un nuevo proyecto Java con Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/11/20/unmappable-character-for-encoding-utf-8-al-compilar-proyectos-java-con-maven/' rel='bookmark' title='&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven'>&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/11/07/evitar-la-ejecucion-de-tests-o-ignorar-resultados-al-utilizar-maven/' rel='bookmark' title='Evitar la ejecución de tests o ignorar resultados al utilizar Maven'>Evitar la ejecución de tests o ignorar resultados al utilizar Maven</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Al empaquetar un artefacto Java, puede interesarnos agregar información al <a
href="http://java.sun.com/docs/books/tutorial/deployment/jar/manifestindex.html">manifest</a> generado. El <em>manifest</em> es un archivo que se crea dentro de nuestro JAR (en la ruta META-INF/MANIFEST.MF) con información bastante diversa acerca del JAR, en forma de <code>"propiedad: valor"</code>. Esta información puede ser acerca de la versión de código empaquetada, del <em>classpath</em>, de la clase que se ejecutará al correr <code>java -jar [archivo.jar]</code> o inclusive propiedades personalizadas que tienen significado para el usuario de ese JAR.</p><p>Utilizando <a
href="http://maven.apache.org/">Maven</a> podemos generar automáticamente el archivo MANIFEST.MF. Para ello, debemos editar el archivo pom.xml agregando la configuración del <em>manifest</em> al <em>plugin</em> que se encarga de empaquetar nuestro proyecto (<code>maven-jar-plugin</code>). Veamos un ejemplo:</p><pre class="brush: xml; gutter: false; title: ; notranslate">
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
	&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
	&lt;groupId&gt;com.josearrarte&lt;/groupId&gt;
	&lt;artifactId&gt;tests&lt;/artifactId&gt;
	&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
	&lt;url&gt;http://www.josearrarte.com/blog&lt;/url&gt;

	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;commons-dbcp&lt;/groupId&gt;
			&lt;artifactId&gt;commons-dbcp&lt;/artifactId&gt;
			&lt;version&gt;1.4&lt;/version&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;

	&lt;build&gt;
		&lt;plugins&gt;
			&lt;plugin&gt;
				&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
				&lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
				&lt;configuration&gt;
					&lt;source&gt;1.6&lt;/source&gt;
					&lt;target&gt;1.6&lt;/target&gt;
				&lt;/configuration&gt;
			&lt;/plugin&gt;
			&lt;plugin&gt;
				&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
				&lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;
				&lt;executions&gt;
					&lt;execution&gt;
						&lt;phase&gt;package&lt;/phase&gt;
						&lt;goals&gt;
							&lt;goal&gt;jar&lt;/goal&gt;
						&lt;/goals&gt;
					&lt;/execution&gt;
				&lt;/executions&gt;
				&lt;configuration&gt;
					&lt;archive&gt;
						&lt;manifest&gt;
							&lt;classpathPrefix&gt;lib&lt;/classpathPrefix&gt;
							&lt;addClasspath&gt;true&lt;/addClasspath&gt;
							&lt;mainClass&gt;com.josearrarte.demo.MainClass&lt;/mainClass&gt;
						&lt;/manifest&gt;
						&lt;manifestEntries&gt;
			              &lt;sample_entry&gt;sample_value&lt;/sample_entry&gt;
			              &lt;url&gt;${project.url}&lt;/url&gt;
			            &lt;/manifestEntries&gt;
					&lt;/archive&gt;
				&lt;/configuration&gt;
			&lt;/plugin&gt;
		&lt;/plugins&gt;
	&lt;/build&gt;
&lt;/project&gt;
</pre><p>Lo más importante del ejemplo está en la parte de configuración del <code>maven-jar-plugin</code>. Ahí tenemos tres elementos configurados:</p><ul><li><code>mainClass</code>: Se utiliza para determinar qué clase contiene el método <code>main</code> del JAR cuando ejecutamos la JVM con el parámetro <code>-jar [archivo.jar]</code></li><li><code>addClasspath</code>: los valores posibles son <code>true</code> o <code>false</code>. Si el valor es <code>true</code> se agregará una entrada <code>Class-Path</code> al manifest, con la lista de JARs de los cuales depende nuestro artefacto (algunos <a
href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope">scopes</a> no serán considerados, por ejemplo <em>test</em>)</li><li><code>classpathPrefix</code>: este elemento de configuración es útil cuando queremos referenciar los JARs de los que depende nuestro artefacto y están en un directorio diferente. Se pueden utilizar <em>paths</em> relativos</li></ul><p>Los elementos dentro de <code><manifestEntries></code> sirven para agregar propiedades adicionales al <em>manifest</em>. Se pueden utilizar variables del estilo de <code>${project.build.finalName}</code> que serán sustituidas sus valores reales. No conozco todas las variables existentes, pero <a
href="http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide">aquí</a> hay una lista que parece bastante completa.</p><p>El archivo META-INF/MANIFEST.MF resultante de empaquetar el proyecto será muy similar al siguiente:</p><pre class="brush: plain; gutter: false; title: ; notranslate">
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: jarrarte
Build-Jdk: 1.6.0_19
Main-Class: com.josearrarte.demo.MainClass
sample_entry: sample_value
url: http://www.josearrarte.com/blog
Class-Path: lib/commons-dbcp-1.4.jar lib/commons-pool-1.5.4.jar
</pre><p>En el pom.xml del proyecto de ejemplo tenemos una dependencia a commons-dbcp, que a su vez depende de commons-pool. Esto se ve reflejado al construir el valor <em>classpath</em> en el <em>manifest</em>, que contiene las dos dependencias.</p><h3>Referencias</h3><p><a
href="http://tutorialexception.blogspot.com/2009/03/configurar-el-manifest-con-maven-para.html">http://tutorialexception.blogspot.com/2009/03/configurar-el-manifest-con-maven-para.html</a><br
/> <a
href="http://maven.apache.org/">http://maven.apache.org/</a><br
/> <a
href="http://maven.apache.org/shared/maven-archiver/examples/classpath.html">http://maven.apache.org/shared/maven-archiver/examples/classpath.html</a><br
/> <a
href="http://maven.apache.org/guides/mini/guide-manifest.html">http://maven.apache.org/guides/mini/guide-manifest.html</a><br
/> <a
href="http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide">http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide</a><br
/> <a
href="http://java.sun.com/docs/books/tutorial/deployment/jar/modman.html">http://java.sun.com/docs/books/tutorial/deployment/jar/modman.html</a></p><p>Posts relacionados:<ol><li><a
href='http://josearrarte.com/blog/2009/07/22/crear-nuevo-proyecto-java-con-maven/' rel='bookmark' title='Crear un nuevo proyecto Java con Maven'>Crear un nuevo proyecto Java con Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/11/20/unmappable-character-for-encoding-utf-8-al-compilar-proyectos-java-con-maven/' rel='bookmark' title='&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven'>&#8220;Unmappable character for encoding UTF-8&#8243; al compilar proyectos Java con Maven</a></li><li><a
href='http://josearrarte.com/blog/2009/11/07/evitar-la-ejecucion-de-tests-o-ignorar-resultados-al-utilizar-maven/' rel='bookmark' title='Evitar la ejecución de tests o ignorar resultados al utilizar Maven'>Evitar la ejecución de tests o ignorar resultados al utilizar Maven</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://josearrarte.com/blog/2010/04/30/generacion-del-manifest-de-un-jar-utilizando-maven/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: josearrarte.com @ 2012-05-19 22:05:28 -->
