<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8166635</id><updated>2012-02-17T01:27:35.067-03:00</updated><category term='doc2pdf'/><category term='linux'/><category term='debug'/><category term='xml'/><category term='blog delicious blogger'/><category term='curriculum'/><category term='ant'/><category term='cv'/><category term='java'/><category term='europa'/><category term='programming'/><category term='tutorial'/><category term='html2pdf'/><category term='synchronized'/><category term='format'/><category term='thread'/><category term='pdf'/><category term='exceptions'/><category term='dell'/><category term='openoffce'/><category term='resume'/><category term='programación'/><category term='odf2pdf'/><category term='callisto'/><category term='tips'/><category term='html'/><category term='eclipse'/><category term='code'/><category term='ubuntu'/><category term='noticia'/><category term='excepciones'/><category term='humor'/><title type='text'>epere4's</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8166635.post-7322206005680970869</id><published>2008-04-27T19:42:00.001-03:00</published><updated>2008-04-27T19:43:29.661-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resume'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='curriculum'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='cv'/><title type='text'>Escribí tu currículum vitae en XML</title><content type='html'>&lt;span style="font-weight:bold;"&gt;La problemática&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A lo mejor a alguno de ustedes le pasa como a mi, que odio escribir un CV en &lt;a href="http://www.microsoft.com/word/"&gt;Word&lt;/a&gt;/&lt;a href="http://www.openoffice.org/product/writer.html"&gt;Writer&lt;/a&gt; o cualquier otro procesador de textos que ande por ahí.&lt;br /&gt;&lt;br /&gt;Así que la primera vez que tuve que escribir un CV, lo hice en HTML puro y estático. Esto mezclaba contenido con presentación, pero era bien simple y quedaba tal cual yo quería. El problema con los procesadores de texto es que uno nunca termina de saber exactamente qué es lo que pone internamente para darle el formato y a veces es difícil lograr el formato deseado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;XML al rescate &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cuando trabajaba en &lt;a href="http://www.zauber.com.ar/"&gt;Zauber&lt;/a&gt; me mostraron el &lt;a href="http://xmlresume.sourceforge.net/"&gt;xmlresume&lt;/a&gt;, que permitía escribir el CV en un archivo xml y luego procesarlo para presentarlo en formato HTML o PDF según se requiriera.&lt;br /&gt;&lt;br /&gt;Como xmlresume parece no tener más soporte desde hace tiempo, decidí cambiarme a otro y es así como actualmente utilizo &lt;a href=http://hr-xsl.sourceforge.net/&gt;hr-xsl&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Cual de los dos utilizar es realmente una cuestión de gustos, porque hr-xsl tampoco parece estar muy activo hoy en día, pero bueno, ya me amoldé a este último y les quiero compartir la forma en que yo lo utilizo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Cómo uso hr-xsl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tengo todo el programa para generar el CV en un repositorio de Subversion propio con la siguiente jerarquía de carpetas (y algunos comentarios):&lt;br /&gt;&lt;pre&gt;.&lt;br /&gt;|-- bin                         // aca está el soft de hr-xsl&lt;br /&gt;|   |-- HRXML&lt;br /&gt;|   |   `-- HRXML200704&lt;br /&gt;|   |       `-- HR-XML-2_5&lt;br /&gt;|   `-- hr-xsl&lt;br /&gt;|       `-- hr-xsl-0.11&lt;br /&gt;|-- releases&lt;br /&gt;|   |-- 1.0.0-pre-xml           // esto era en HTML&lt;br /&gt;|   |   |-- 2005-03-31&lt;br /&gt;|   |   |-- 2005-12-21&lt;br /&gt;|   |   |-- 2007-03-20&lt;br /&gt;|   |   `-- 2007-04-03&lt;br /&gt;|   |-- 2.0.0-xmlresume-zauber  // esto era xmlresume&lt;br /&gt;|   |   `-- 2007-05-07&lt;br /&gt;|   `-- 3.0.0-hr-xsl            // este es el actual, hr-xsl&lt;br /&gt;|       |-- 2007-09-04&lt;br /&gt;|       |-- 2008-01-14&lt;br /&gt;|       `-- 2008-04-16&lt;br /&gt;`-- trunk&lt;br /&gt;    |-- .project                // proyecto de eclipse (lo edito con eclipse)&lt;br /&gt;    |-- generator-en            // scripts de ant para construir el CV en ingles&lt;br /&gt;    |   |-- build.xml&lt;br /&gt;    |   `-- parameters.xsl&lt;br /&gt;    |-- generator-es            // scripts de ant para construir el CV en español&lt;br /&gt;    |   |-- build.xml&lt;br /&gt;    |   `-- parameters.xsl&lt;br /&gt;    `-- src&lt;br /&gt;        |-- currVitae.htm    // html con frames que encuadra la presentacion&lt;br /&gt;        |-- epereda-en.html  // autogenerado html en inglés&lt;br /&gt;        |-- epereda-en.pdf   // autogenerado pdf en inglés&lt;br /&gt;        |-- epereda-en.txt   // autogenerado texto en inglés&lt;br /&gt;        |-- epereda-en.xml   // codigo fuente del cv en inglés&lt;br /&gt;        |-- epereda-es.html  // autogenerado html en español&lt;br /&gt;        |-- epereda-es.pdf   // autogenerado pdf en español&lt;br /&gt;        |-- epereda-es.txt   // autogenerado texto en español&lt;br /&gt;        |-- epereda-es.xml   // codigo fuente del cv en español&lt;br /&gt;        |-- style.css        // hoja de estilos para el html&lt;br /&gt;        `-- top.html         // frame superior con links a las diferentes versiones&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La idea es que edito lo que está en la carpeta &lt;code&gt;trunk/src&lt;/code&gt; usando &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; (obviamente se puede editar con lo que quieran, pero yo estoy acostumbrado a usar Eclipse). Luego corro los scripts de ant localizados en &lt;code&gt;trunk/generator-en&lt;/code&gt; y &lt;code&gt;trunk/generator-es&lt;/code&gt; y cuando estoy contento con el resultado de los archivos generados hago una copia a la carpeta de &lt;code&gt;releases/3.0.0-hr-xs&lt;/code&gt; con la fecha actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Requerimentos de hr-xsl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los requerimentos de hr-xsl están detallados &lt;a href="http://hr-xsl.sourceforge.net/doc/ch02s02.html"&gt;en la documentación del sitio oficial&lt;/a&gt;, pero se resumen en lo siguiente:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Java&lt;/a&gt; 5.0 o superior&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ant.apache.org/bindownload.cgi"&gt;Ant&lt;/a&gt; 1.6 o superior&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://lynx.browser.org/"&gt;Lynx&lt;/a&gt;: sólo si se quiere generar archivo .txt&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Decargar fuentes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pueden descargar mi código fuente &lt;a href="http://epere4.com.ar/cv/cv.sources.tar.gz"&gt;desde acá&lt;/a&gt;. Es posible que sea lento porque la conexión de internet de ese server no es muy buena.&lt;br /&gt;&lt;br /&gt;La idea de brindarles el código fuente es que a lo mejor les es útil basarse en él para hacer su propio CV.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Resultado final&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El producto terminado puede verse acá: &lt;a href="http://epere4.com.ar/cv/"&gt;epere4.com.ar/cv&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-7322206005680970869?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/7322206005680970869/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=7322206005680970869' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/7322206005680970869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/7322206005680970869'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2008/04/escrib-tu-currculum-vitae-en-xml.html' title='Escribí tu currículum vitae en XML'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-2771598950843133540</id><published>2008-04-20T05:00:00.009-03:00</published><updated>2009-07-13T16:44:52.435-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='synchronized'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>¿Cómo funciona synchronized en Java?</title><content type='html'>Mucha gente que usa Java no tiene claro cómo funciona realmente la palabra clave &lt;code&gt;synchronized&lt;/code&gt;. Voy a intentar explicarlo acá porque es realmente muy fácil si se tienen en cuenta algunas cosas.&lt;br /&gt;&lt;br /&gt;En primer lugar, usar &lt;code&gt;synchronized&lt;/code&gt; en un método de &lt;b&gt;instancia&lt;/b&gt; es lo mismo que poner un bloque de &lt;code&gt;synchronized(this){}&lt;/code&gt; que contenga todo el código del método. Es decir,&lt;br /&gt;&lt;pre&gt;public synchronized void metodo() {&lt;br /&gt;   // codigo del metodo aca&lt;br /&gt;}&lt;/pre&gt;es lo mismo que&lt;br /&gt;&lt;pre&gt;public void metodo() {&lt;br /&gt;   synchronized(this) {&lt;br /&gt;      // codigo del metodo aca&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;Si el método es de &lt;b&gt;clase&lt;/b&gt; entonces es lo mismo pero el bloque de &lt;code&gt;synchronized&lt;/code&gt; se aplica a la clase. Ejemplo, si el método está en la clase &lt;code&gt;MiClase&lt;/code&gt; entonces esto&lt;br /&gt;&lt;pre&gt;public static synchronized void metodo() {&lt;br /&gt;   // codigo del metodo aca&lt;br /&gt;}&lt;/pre&gt;es lo mismo que &lt;pre&gt;public static void metodo() {&lt;br /&gt;   synchronized(MiClase.class) {&lt;br /&gt;      // codigo del metodo aca&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Habiendo dicho esto, &lt;span style="font-weight:bold;"&gt;el problema se reduce a entender cómo funciona el &lt;code&gt;synchronized&lt;/code&gt; de un bloque&lt;/span&gt; porque, como vimos, el &lt;code&gt;synchronized&lt;/code&gt; en métodos de instancia o de clase son simplemente casos especiales de esto.&lt;br /&gt;&lt;br /&gt;El bloque &lt;code&gt;synchronized&lt;/code&gt; lleva entre paréntesis la referencia a &lt;span style="font-weight:bold;"&gt;un objeto&lt;/span&gt;. Cada vez que un thread intenta acceder a un bloque sincronizado le pregunta a &lt;span style="font-weight:bold;"&gt;ese&lt;/span&gt; objeto si no hay algún otro thread que ya tenga el &lt;span style="font-style:italic;"&gt;lock&lt;/span&gt; para &lt;span style="font-weight:bold;"&gt;ese&lt;/span&gt; objecto. En otras palabras, le pregunta si no hay otro thread ejecutando algun bloque sincronizado con &lt;span style="font-weight:bold;"&gt;ese&lt;/span&gt; objeto (y recalco que es &lt;span style="font-weight:bold;"&gt;ese&lt;/span&gt; objeto porque en eso radica la clave para entender el funcionamiento)&lt;br /&gt;Si el lock está tomado por otro thread, entonces el thread actual es suspendido y puesto en espera hasta que el lock se libere. Si el lock está libre, entonces el thread actual toma el lock del objeto y entra a ejecutar el bloque. Al tomar el lock, cuando venga el proximo thread a intentar ejecutar un bloque sincronizado con &lt;span style="font-weight:bold;"&gt;ese&lt;/span&gt; objeto, será puesto en espera.&lt;br /&gt;¿Cuándo se libera el lock? Se libera cuando el thread que lo tiene tomado sale del bloque por cualquier razón: termina la ejecución del bloque normalmente, ejecuta un return o lanza una excepción.&lt;br /&gt;&lt;br /&gt;Es importante notar una vez más que el &lt;span style="font-weight:bold;"&gt;lock es sobre un objeto en particular&lt;/span&gt;. Si hay dos bloques &lt;code&gt;synchronized&lt;/code&gt; que hacen referencia a distintos objetos (por más que ambos utilicen el mismo nombre de variable), la ejecución de estos bloques &lt;span style="font-weight:bold;"&gt;no&lt;/span&gt; será mutuamente excluyente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusiones: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;De todo esto se puede concluir que un método &lt;code&gt;synchronized&lt;/code&gt; de instancia puede ser ejecutado al mismo tiempo que uno de clase. &lt;br /&gt;Además, dos threads pueden ejecutar el mismo método de instancia al mismo tiempo aunque este sea &lt;code&gt;synchronized&lt;/code&gt; si la invocación se hace a dos objetos diferentes.&lt;br /&gt;Por último, todos los métodos &lt;code&gt;synchronized&lt;/code&gt; de instancia son mutuamente excluyentes entre sí. Es decir que, dado un objeto compartido por más de un thread, sólo uno de ellos puede acceder en un determinado momento a uno de esos métodos de instancia. Los otros threads deberán esperar aunque hayan querido acceder a otro de los métodos (porque todos están synchronizados con el mismo &lt;code&gt;this&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;Puede encontrarse mucho más info del tema en &lt;a href="http://java.sun.com/docs/books/tutorial/essential/concurrency/sync.html"&gt;este tutorial de sun&lt;/a&gt; (en inglés).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-2771598950843133540?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/2771598950843133540/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=2771598950843133540' title='34 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/2771598950843133540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/2771598950843133540'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2008/04/cmo-funciona-synchronized-en-java.html' title='¿Cómo funciona synchronized en Java?'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-4656601533917473175</id><published>2007-12-04T00:57:00.000-03:00</published><updated>2007-12-04T01:07:56.430-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Eclipse Quick Access (aka Ctrl + 3)</title><content type='html'>Ya que les estuve comentando algo de &lt;a href="http://www.eclipse.org/europa/"&gt;Eclipse Europa&lt;/a&gt; en el &lt;a href="http://epere4.blogspot.com/2007/09/save-actions-en-eclipse-europa.html"&gt;post anterior&lt;/a&gt;, les paso otro tip. Este me lo pasó mi amigo &lt;a href="http://objetosreflexionesyalgomas.blogspot.com/"&gt;Claudio&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Se trata de &lt;span style="font-weight: bold;"&gt;la madre de todos los atajos&lt;/span&gt;. Si te gusta usar atajos de teclado, entonces probá Ctrl + 3 en Eclipse Europa.&lt;br /&gt;&lt;br /&gt;Con eso se abre la ventana del Quick Access. Permite acceder a cualquier Vista, Perspectiva, Comando, Editor, etc con sólo tipear su nombre (o parte de él, porque, por supuesto, al igual que el buscador de clases Ctrl+Shif+T, soporta caracteres comodines, escribir sólo las iniciales de lo que se busca, etc, etc).&lt;br /&gt;&lt;br /&gt;Básicamente, se puede acceder a casi todo con el Ctrl+3!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-4656601533917473175?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/4656601533917473175/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=4656601533917473175' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/4656601533917473175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/4656601533917473175'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/12/eclipse-quick-access-aka-ctrl-3.html' title='Eclipse Quick Access (aka Ctrl + 3)'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-6075574722694284410</id><published>2007-09-26T16:19:00.000-03:00</published><updated>2007-12-04T00:56:21.324-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Save Actions en Eclipse Europa</title><content type='html'>A esta altura, esta característica de Eclipse Europa no es nada nueva, pero vale la pena comentarla.&lt;br /&gt;&lt;br /&gt;A partir de la versión &lt;a href="http://www.eclipse.org/europa"&gt;Europa de Eclipse&lt;/a&gt; existe la posibilidad de definir ciertas acciones a ejecutar automáticamente cada vez que se grabe un archivo.&lt;br /&gt;&lt;br /&gt;Yo en general sólo uso las que están marcadas en la figura, que te autoformatean el código (como hacer Ctrl+Shif+F, digamos) y te organizan los import (análogo a Ctrl+Shif+O).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mC39iQhy-Lk/R1TLuBfTkxI/AAAAAAAAGlc/zb_Rf-kc0G0/s1600-R/eclipseSaveActions01.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_mC39iQhy-Lk/R1TLuBfTkxI/AAAAAAAAGlc/jCGX2rksvYI/s320/eclipseSaveActions01.PNG" alt="" id="BLOGGER_PHOTO_ID_5139957066270741266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pero hay un montón de cosas que se pueden configurar como Additional Actions. En la figura de abajo se ven algunas, pero esta es la lista simplificada (para más detalles mirá directamente en Eclipse que está todo muy claro):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Que automáticamente ponga o no bloques en los if/else/for/while.&lt;/li&gt;&lt;li&gt;Automáticamente convertir los for en foreachs (cuando se pueda, claro).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rodear las condiciones (o no) con paréntesis.&lt;/li&gt;&lt;li&gt;Hacer que automáticamente se agregue la palabrita final a los métodos, variables privadas y/o variables locales.&lt;/li&gt;&lt;li&gt;Usar o no el this para acceder a métodos y variables de instancia.&lt;/li&gt;&lt;li&gt;Forzar que automáticamente se use el nombre de la clase cuando se utilicen métodos o campos estáticos.&lt;/li&gt;&lt;li&gt;Remover automáticamente miembros privados que no sean usados (ojo con este porque te hace desaparecer las cosas si las dejaste de usar temporalmente).&lt;/li&gt;&lt;li&gt;Remover casteos innecesarios&lt;/li&gt;&lt;li&gt;Agregar automáticamente las anotaciones @Deprecated y @Override.&lt;/li&gt;&lt;li&gt;Remover espacios en blanco al final de las líneas.&lt;/li&gt;&lt;li&gt;Ordenar los métodos (de acuerdo a cómo se configure en Members Sort Order)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mC39iQhy-Lk/R1TL9hfTkyI/AAAAAAAAGlk/BjQrH5BOB_g/s1600-R/eclipseSaveActions02.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_mC39iQhy-Lk/R1TL9hfTkyI/AAAAAAAAGlk/smm3IX_-Er8/s320/eclipseSaveActions02.PNG" alt="" id="BLOGGER_PHOTO_ID_5139957332558713634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eso es todo, ojalá les sirva!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-6075574722694284410?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/6075574722694284410/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=6075574722694284410' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/6075574722694284410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/6075574722694284410'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/09/save-actions-en-eclipse-europa.html' title='Save Actions en Eclipse Europa'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mC39iQhy-Lk/R1TLuBfTkxI/AAAAAAAAGlc/jCGX2rksvYI/s72-c/eclipseSaveActions01.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-7996450913708203979</id><published>2007-07-06T01:21:00.000-03:00</published><updated>2007-07-06T01:41:35.004-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='excepciones'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><category scheme='http://www.blogger.com/atom/ns#' term='exceptions'/><title type='text'>¿Por qué la gente hace e.printStackTrace() en vez de relanzar como RuntimeException?</title><content type='html'>¿No les pasó de ver código similar a este?&lt;br /&gt;&lt;pre&gt;try {&lt;br /&gt;    InputStream input = new FileInputStream("myFile.txt");&lt;br /&gt;} catch (FileNotFoundException e) {&lt;br /&gt;    // TODO Auto-generated catch block&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Seguro que sí. Desde verlo en ejemplos en libros de texto (porque "total, es un ejemplo, se entiende que no es lo correcto") hasta en códigos de programas reales. ¡Pero si hasta eclipse autogenera ese try-catch!&lt;br /&gt;&lt;br /&gt;Es una porquería. No sirve para nada y oculta bugs. La razón más común por la que se lo hace creo que es porque no se quiere &lt;span style="font-style: italic;"&gt;manejar&lt;/span&gt; la excepción. Esto puede ser porque ese error &lt;span style="font-style: italic;"&gt;nunca ocurre&lt;/span&gt;,   porque no quiero que mi método tenga que tener un throws, o por desconocimiento, no se.&lt;br /&gt;&lt;br /&gt;La forma correcta es esta:&lt;br /&gt;&lt;pre&gt;try {&lt;br /&gt;    InputStream input = new FileInputStream("myFile.txt");&lt;br /&gt;} catch (FileNotFoundException e) {&lt;br /&gt;    e.printStackTrace(); // esto es opcional, obviamente&lt;br /&gt;    throw new RuntimeException(e);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;De esta manera, al relanzar la excepción como RuntimeException nuestro método no tiene que declarar throws FileNotFoundException (para este ejemplo, claro está) y si el error ocurre lo vamos a ver enseguida porque nuestra aplicación va a fallar con un hermoso stack trace.&lt;br /&gt;&lt;br /&gt;Podemos hacer que eclipse nos ayude con esto, modificando el code template. Vamos a Windows-&gt;Preferences-&gt;Java-&gt;Code Style-&gt;Code Templates y buscamos el que se llama Catch Block Body.&lt;br /&gt;&lt;br /&gt;El valor por default es:&lt;br /&gt;&lt;pre&gt;// ${todo} Auto-generated catch block&lt;br /&gt;${exception_var}.printStackTrace();&lt;br /&gt;&lt;/pre&gt;Yo sugiero cambiarlo a:&lt;br /&gt;&lt;pre&gt;${exception_var}.printStackTrace();&lt;br /&gt;throw new RuntimeException(${exception_var});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ah, de paso les comento, con respecto a &lt;a href="http://epere4.blogspot.com/2007/06/se-viene-el-nuevo-eclipse-europa.html"&gt;lo que comenté hace un tiempo&lt;/a&gt;, que ya salió el &lt;a href="http://www.eclipse.org/europa/"&gt;Eclipse Europa&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-7996450913708203979?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/7996450913708203979/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=7996450913708203979' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/7996450913708203979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/7996450913708203979'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/07/por-qu-la-gente-hace-eprintstacktrace.html' title='¿Por qué la gente hace e.printStackTrace() en vez de relanzar como RuntimeException?'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-5487204042557249918</id><published>2007-06-19T21:50:00.000-03:00</published><updated>2007-06-19T22:14:19.557-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog delicious blogger'/><title type='text'>El blog para escribir y del.icio.us para poner links</title><content type='html'>Este post va dedicado a los bloggeros que aparecen en &lt;a href="http://codear.com.ar/"&gt;codear&lt;/a&gt;, pero es extensible a todos los bloggers en general.&lt;br /&gt;&lt;br /&gt;No está bueno leer post que sólo tiran un link sin ninguna explicación. Para eso está &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;. Ahí uno puede tener feed de la persona que quiera (los míos, por ejemplo, &lt;a href="http://del.icio.us/epere4"&gt;están acá&lt;/a&gt;) y ver qué links le gusta guardar.&lt;br /&gt;&lt;br /&gt;No se cómo es la estrategia de lectura de feeds de la gente, pero en mi caso particular tengo muchos y no leo en profundidad todos. Los leo por encima y si alguno me interesa, profundizo. Si un post sólo tiene un link ni lo leo porque acceder al link ya retrasa todo (y sin ninguna certeza de que el tema vaya a interesarme).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-5487204042557249918?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/5487204042557249918/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=5487204042557249918' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/5487204042557249918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/5487204042557249918'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/06/el-blog-para-escribir-y-delicious-para.html' title='El blog para escribir y del.icio.us para poner links'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-3982596759834672867</id><published>2007-06-13T10:20:00.000-03:00</published><updated>2007-06-13T10:25:38.741-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='europa'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='callisto'/><title type='text'>Se viene el nuevo Eclipse Europa</title><content type='html'>&lt;a href="http://www.eclipse.org/europa/"&gt;&lt;img src="http://www.eclipse.org/europa/images/europa.jpg" alt="The Next Total Eclipse" title="Europa" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Así como el año pasado salió el Eclipse Callisto, este año sale el Eclipse Europa. Como dice en el &lt;a href="http://www.eclipse.org/europa/"&gt;sitio web&lt;/a&gt;, Europa es la salida en simultáneo de 21 proyectos con el objetivo de eliminar las posibilidades de incompatibilidades entre ellos.&lt;br /&gt;&lt;br /&gt;Faltan 16 días...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-3982596759834672867?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.eclipse.org/europa/' title='Se viene el nuevo Eclipse Europa'/><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/3982596759834672867/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=3982596759834672867' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/3982596759834672867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/3982596759834672867'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/06/se-viene-el-nuevo-eclipse-europa.html' title='Se viene el nuevo Eclipse Europa'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-4661996519083162968</id><published>2007-05-26T18:52:00.000-03:00</published><updated>2007-05-27T15:24:18.528-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='odf2pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='html2pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffce'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='doc2pdf'/><title type='text'>HTML a PDF y otras transformaciónes con Open Office como Server</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:130%;"&gt;El problema&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hace unos días me vi forzado a buscar una manera de convertir documentos HTML a PDF por un requerimento en el laburo. Los prerrequisitos eran: tiene que ser algo que se pueda hacer desde Java y que no haya que pagar ninguna licencia.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Primera aproximación&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Comencé mi búsqueda en Google con cosas como &lt;a href="http://www.google.com/search?q=html2pdf+java"&gt;html2pdf java&lt;/a&gt;. Más allá de que era complicado encontrar algún resultado copado, la mayoría de las estrategias que aparecían iban por el lado de:&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Convertir el HTML a XHTML (por ejemplo con &lt;a href="http://jtidy.sourceforge.net/"&gt;JTidy&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Convertir el XHTML a XSL-FO (Extensible Stylesheet Language Formatting Objects) usando una hoja de estilo XSL y un trasformador XSLT (por ejemplo con &lt;a href="http://xalan.apache.org/"&gt;Xalan&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Formatear el XSL-FO para finalmente generar un PDF (por ejemplo con &lt;a href="http://xmlgraphics.apache.org/fop"&gt;FOP&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-04-2006/jw-0410-html.html"&gt;Esta guía&lt;/a&gt; explica muy bien cómo seguir esta estrategia. El asunto es que FOP aún &lt;a href="http://xmlgraphics.apache.org/fop/compliance.html"&gt;no soporta por completo&lt;/a&gt; el estandar de XSL-FO y los PDF generados mediante esta técnica no quedan nada bien.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Cambio de estrategia&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://juan.zauber.com.ar/"&gt;Juan&lt;/a&gt; me comentó acerca de &lt;a href="http://www.pcmasmas.com/viewtopic.php?t=27343"&gt;este post en PC++&lt;/a&gt; que hablaba de la posibilidad de usar a Open Office en modo servidor y enviarle mensajes mediante un socket. En esos mensajes se le podían decir cosas tan geniales como "abrí este archivo y exportalo a PDF". El post hablaba de usar un script en python, pero tenía que haber una manera de ejecutar eso desde Java (sin llegar a &lt;a href="http://www.jython.org/"&gt;JPython&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Efectivamente, en la página de la &lt;a href="http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html"&gt;API de Open Office&lt;/a&gt; encontré que está disponible para Java, C++ y Python.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;La Solución&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego de lidiar un rato con la API de Open Office dije "tiene que haber algo más fácil". Fue así como llegué a &lt;a href="http://www.artofsolving.com/opensource/jodconverter"&gt;JODConverter&lt;/a&gt; (Java Open Document Converter).&lt;br /&gt;&lt;br /&gt;JODConverter es una bibiloteca que encapsula las dificultades de conexión a Open Office que impone el uso de la API oficial y hace que su uso sea tan simple como esto:&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;  // it will guess the format based on the file extensions&lt;br /&gt;File inputFile = new File("document.doc");&lt;br /&gt;File outputFile = new File("document.pdf");&lt;br /&gt;&lt;br /&gt;// connect to an OpenOffice.org instance running on port 8100&lt;br /&gt;OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);&lt;br /&gt;connection.connect();&lt;br /&gt;&lt;br /&gt;// convert - input and output formats are guessed from file extensions&lt;br /&gt;DocumentConverter converter = new OpenOfficeDocumentConverter(connection);&lt;br /&gt;converter.convert(inputFile, outputFile);&lt;br /&gt;&lt;br /&gt;// close the connection&lt;br /&gt;connection.disconnect();&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;JODConverter tiene pocas dependencias, pero está en el &lt;a href="http://www.mvnrepository.com/artifact/com.artofsolving/jodconverter"&gt;mvnrepository&lt;/a&gt;, así que si usás maven vas a salir andando en 5 minutos.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Configurando Open Office&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Y sí, algo hay que hacer para que Open Office responda mis pedidos de conversión de archivos, pero también es muy simple. Hay que iniciarlo en modo servidor y decirle que escuche en algún puerto (para estos ejemplos, uso el puerto 8100, pero cualquiera que esté libre debería servir). Suponiendo que el ejecutable es &lt;span style="font-style: italic;"&gt;soffice&lt;/span&gt;:&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;soffice -headless -accept="socket,port=8100;urp;"&lt;/pre&gt;&lt;span style="font-size:130%;"&gt;Issue conocido&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;Hay un problema &lt;a href="http://www.openoffice.org/issues/show_bug.cgi?id=75519"&gt;reportado en Open Office&lt;/a&gt; que impide que el servidor de Open Office pueda correr en una computadora diferente a la que lo invoca.&lt;br /&gt;&lt;br /&gt;En el ejemplo de más arriba usamos a la clase &lt;span style="font-style: italic;font-family:courier new;" &gt;SocketOpenOfficeConnection&lt;/span&gt;. Esta clase lo que hace es usar el socket con Open Office para darle las instrucciones, pero el archivo se pasa por referencia y Open Office debe tener permiso para abrirlo del Filesystem (y permiso de escritura para guardar el resultado). Existe otra clase llamada &lt;span style="font-style: italic;font-family:courier new;" &gt;StreamOpenOfficeDocumentConverter&lt;/span&gt; que envía y recibe el contenido de los archivos por socket. Esta clase es la que no funciona bien por el bug de Open Office.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero que a alguien le sirva toda esta data :D&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-4661996519083162968?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/4661996519083162968/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=4661996519083162968' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/4661996519083162968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/4661996519083162968'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/05/html-pdf-y-otras-transformacines-con.html' title='HTML a PDF y otras transformaciónes con Open Office como Server'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-3499286392715261615</id><published>2007-05-23T23:16:00.000-03:00</published><updated>2007-05-23T23:32:31.108-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>¿Alguna vez "vieron" una raíz cúbica? :P</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mC39iQhy-Lk/RlT2YaSTGXI/AAAAAAAAD2s/wFNTuRXRTIQ/s1600-h/raizCubica.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_mC39iQhy-Lk/RlT2YaSTGXI/AAAAAAAAD2s/wFNTuRXRTIQ/s400/raizCubica.jpg" alt="" id="BLOGGER_PHOTO_ID_5067946379932014962" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-3499286392715261615?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/3499286392715261615/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=3499286392715261615' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/3499286392715261615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/3499286392715261615'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/05/alguna-vez-vieron-una-raz-cbica-p.html' title='¿Alguna vez &quot;vieron&quot; una raíz cúbica? :P'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mC39iQhy-Lk/RlT2YaSTGXI/AAAAAAAAD2s/wFNTuRXRTIQ/s72-c/raizCubica.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-2303861060091672243</id><published>2007-05-02T02:22:00.000-03:00</published><updated>2007-05-02T02:31:41.300-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dell'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='noticia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Linux Ubuntu vendrá preinstalado en algunas Dell</title><content type='html'>Tanto en el sitio de &lt;a href="http://www.ubuntu.com/news/dell-to-offer-ubuntu"&gt;Ubuntu&lt;/a&gt; como en el de &lt;a href="http://direct2dell.com/one2one/archive/2007/05/01/13147.aspx"&gt;Dell&lt;/a&gt; están anunciando oficialmente que algunas computadoras Dell podrán venir con &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 7.04 Feisty&lt;/a&gt; preinstalado.&lt;br /&gt;&lt;br /&gt;Es una gran noticia y estaría bueno que otras marcas de computadoras los imiten. A mi me encanta Ubuntu, así que el hecho de que esa sea la distro de Linux elegida me pone también muy contento, pero también podrían ser otras las distros a elegir.&lt;br /&gt;&lt;br /&gt;Claro que hay distros que nunca podrían venir preinstaladas porque se perdería su filosofía. Tengo &lt;a href="http://juan.zauber.com.ar/"&gt;un amigo&lt;/a&gt; al que le encanta &lt;a href="http://www.gentoo.org/"&gt;Gentoo&lt;/a&gt;, pero claro, le gusta instalarlo él mismo :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-2303861060091672243?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/2303861060091672243/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=2303861060091672243' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/2303861060091672243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/2303861060091672243'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/05/linux-ubuntu-vendr-preinstalado-en.html' title='Linux Ubuntu vendrá preinstalado en algunas Dell'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-1858489008980619585</id><published>2007-04-26T11:47:00.000-03:00</published><updated>2007-04-26T11:58:05.323-03:00</updated><title type='text'>apt-get con poderes de super vaca!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mC39iQhy-Lk/RjC9T_7W4NI/AAAAAAAADn8/8RUazGJ9t5s/s1600-h/superVaca.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_mC39iQhy-Lk/RjC9T_7W4NI/AAAAAAAADn8/8RUazGJ9t5s/s320/superVaca.PNG" alt="" id="BLOGGER_PHOTO_ID_5057750532812628178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hoy me sorprendí con algo que se ve que existe hace mucho pero que yo no conocía.&lt;br /&gt;&lt;br /&gt;El apt-get tiene poderes de super vaca!!! (ver la imagen que se obtiene luego de ejecutar &lt;span style="font-family: courier new;"&gt;apt-get --help&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Más divertido aún es lo que aparece con &lt;span style="font-family: courier new;"&gt;apt-get moo&lt;/span&gt; :D&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mC39iQhy-Lk/RjC9vP7W4OI/AAAAAAAADoE/5qm0M7_54QQ/s1600-h/superVacaMuuuuuuuu.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_mC39iQhy-Lk/RjC9vP7W4OI/AAAAAAAADoE/5qm0M7_54QQ/s320/superVacaMuuuuuuuu.PNG" alt="" id="BLOGGER_PHOTO_ID_5057751000964063458" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-1858489008980619585?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/1858489008980619585/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=1858489008980619585' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/1858489008980619585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/1858489008980619585'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/04/apt-get-con-poderes-de-super-vaca.html' title='apt-get con poderes de super vaca!!'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mC39iQhy-Lk/RjC9T_7W4NI/AAAAAAAADn8/8RUazGJ9t5s/s72-c/superVaca.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-117540382897839732</id><published>2007-04-01T02:58:00.000-03:00</published><updated>2007-04-01T03:03:48.986-03:00</updated><title type='text'>Ya salió la nueva joda de GMail por el primero de abril</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/5790/540/1600/605003/gmailJoke.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/5790/540/400/632322/gmailJoke.png" alt="" border="0" /&gt;&lt;/a&gt;Hoy es primero de abril y como es tradicional, ya Google nos trajo un chiste (y si no lo vieron, yo ya se los arruiné, ja)&lt;br /&gt;&lt;br /&gt;La idea esta vez es que te &lt;a href="http://mail.google.com/mail/help/paper/more.html"&gt;envían los mails impresos por correo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-117540382897839732?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/117540382897839732/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=117540382897839732' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/117540382897839732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/117540382897839732'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/04/ya-sali-la-nueva-joda-de-gmail-por-el.html' title='Ya salió la nueva joda de GMail por el primero de abril'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-116891572798880116</id><published>2007-01-15T23:32:00.000-03:00</published><updated>2007-01-15T23:49:09.336-03:00</updated><title type='text'>Se me llenó el GMail</title><content type='html'>Hoy se me llenó la casilla de Gmail. La estaba dejando llenar para ver qué pasaba. Pues bien, llega un momento en el que no te deja enviar mail porque dice que no tiene lugar (en la imagen se ve el mensaje).&lt;br /&gt;&lt;br /&gt;También se puede ver que la cuenta no está en realidad llena, sino que sobran tres megabytes (usando 2802 de 2805 MB). Vaya uno a saber si es un bug o una feature :P&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/5790/540/1600/679319/gmail-lleno.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/5790/540/320/536984/gmail-lleno.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-116891572798880116?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/116891572798880116/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=116891572798880116' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/116891572798880116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/116891572798880116'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2007/01/se-me-llen-el-gmail.html' title='Se me llenó el GMail'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-116502177650367083</id><published>2006-12-01T21:12:00.000-03:00</published><updated>2006-12-01T22:09:36.593-03:00</updated><title type='text'>Microstrategy y las bases de datos Open Source</title><content type='html'>Durante noviembre tuve que hacer un trabajo práctico para la facultad utilizando &lt;a href="http://www.microstrategy.com" target="_blank"&gt;Microstrategy&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;El tema del trabajo era &lt;a href="http://es.wikipedia.org/wiki/Inteligencia_empresarial" target="_blank"&gt;business intelligence&lt;/a&gt;, basándose en datos de un típico Video Club. Estaba todo planeado para usar una base de datos &lt;a href="http://www-306.ibm.com/software/data/db2/" target="_blank"&gt;IMB DB2&lt;/a&gt;, hacer el &lt;a href="http://es.wikipedia.org/wiki/ETL" target="_blank"&gt;ETL&lt;/a&gt; también con un producto de IBM que no recuerdo el nombre y finalmente acceder a todo eso desde Microstrategy.&lt;br /&gt;&lt;br /&gt;Entre los integrantes del grupo para hacer el TP estaba &lt;a href="http://www.leak.com.ar/~juan/blog/" target="_blank"&gt;Juan F. Codagnone&lt;/a&gt; y como él la tiene muy clara con &lt;a href="http://www.postgresql.org/" target="_blank"&gt;PostgreSQL&lt;/a&gt; quisimos probar con eso. Al fin y al cabo, DB2 es una mierda total, super lenta y con una interfaz horrible y llena de bugs (yo me pregunto a quién se le ocurre pagar por eso hoy en día). Encontramos que &lt;a href="http://www.microstrategy.com/news/pr_system/press_release.asp?ctry=167&amp;id=1299" target="_blank"&gt;Microstrategy había incorporado soporte para bases de datos Open Source&lt;/a&gt; y le dimos para adelante.&lt;br /&gt;&lt;br /&gt;Todo el trabajo sobre PostgreSQL resultó genial. Tuvimos un warehouse con ETLs hechos a mano (mezcla de scrips de bash, awk y un poco de SQL, en su mayoría hechos por Juan) en poco tiempo y sin problemas. &lt;br /&gt;&lt;br /&gt;El problema fue con Microstrategy. Usamos Microstrategy versión 8.0.2 y PostgreSQL versión 8.1.5-1, todo en Windows como decía Microstrategy que soportaba.&lt;br /&gt;&lt;br /&gt;Microstrategy tiene unas consultas SQL que utiliza para tomar la metadata de las tablas de la base (léase nombre de las tablas y nombres y tipos de las columnas). De entrada el SQL para levantar los nombres de las tablas tenía errores de sintaxis. Este es el SQL original:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELECT DISTINCT &lt;br /&gt; TABLE_CATALOG as NAME_SPACE, &lt;br /&gt; TABLE_NAME as TAB_NAME, &lt;br /&gt; COLUMN_NAME as COL_NAME, &lt;br /&gt; DATA_TYPE as DATA_TYPE, &lt;br /&gt; CHARACTER_MAXIMUM_LENGTH as DATA_LEN, &lt;br /&gt; NUMERIC_PRECISION as DATA_PREC, &lt;br /&gt; NUMERIC_SCALE as DATA_SCALE &lt;br /&gt;FROM INFORMATION_SCHEMA.COLUMNS &lt;br /&gt;WHERE TABLE_NAME IN ('#TABLE_LIST#') Order by 1,2,3&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;El &lt;code&gt;#TABLE_LIST#&lt;/code&gt; es reemplazado por el nombre entre comillas simples de la tabla que se busca, por ejemplo &lt;code&gt;'lu_peliculas'&lt;/code&gt; (el prefijo &lt;code&gt;lu_&lt;/code&gt; es una convención para referenciar a las tablas de lookup). Cuando reemplazaba en el SQL original quedaba ...&lt;code&gt;TABLE_NAME IN (''lu_peliculas'')&lt;/code&gt;... y daba error por las comillas simples repetidas.&lt;br /&gt;&lt;br /&gt;Solucionado este inconveniente (por suerte el SQL ese es personalizable), había otro. En la consulta mencionada dice &lt;code&gt;TABLE_CATALOG as NAME_SPACE&lt;/code&gt; y en la consulta que utiliza para buscar las tablas dice &lt;code&gt;TABLE_SCHEMA as NAME_SPACE&lt;/code&gt;. Como &lt;code&gt;TABLE_SCHEMA&lt;/code&gt; no es lo mismo que &lt;code&gt;TABLE_CATALOG&lt;/code&gt; (y Microstrategy internamiente los asociaba como lo mismo), luego tenía tablas que para él no tenían columnas.&lt;br /&gt;&lt;br /&gt;Al corregir ese problema surgieron más. No nos detectaba bien los tipos de datos de las columnas. Sólo detectaba bien los tipos &lt;code&gt;date&lt;/code&gt;, con lo cual luego nos llenaba de errores de Unknown type.&lt;br /&gt;&lt;br /&gt;Ya estábamos por mandar todo al carajo y rendirnos a usar la mierda de DB2 cuando se nos ocurrió ver qué pasaba si creabamos nuestro catálogo de tablas en &lt;a href="http://www.mysql.com/" target="_blank"&gt;MySQL&lt;/a&gt; y hacíamos que microstrategy tomara la metadata de allí. Esto fue finalmente la solución. No podíamos pasar todo a MySQL porque en nuestros SQL estábamos usando algunas cosas que PostgreSQL soporta y MySQL, no. Pero, para reconocer a las tablas y sus columnas, a Microstrategy le alcanzaba con que estuvieran creadas las tablas. Una vez reconocido todo, podíamos cambiar la conexión de la base y que hiciera los SELECTs a PostgreSQL (los SELECTs son la especialidad de Microstrategy).&lt;br /&gt;&lt;br /&gt;Como conclusión, me parece una vergüenza que Microstrategy anuncie que soporta bases Open Source cuando al intentar usar una de ellas pareciera que ni siquiera la probaron (como dije antes, el SQL generado tenía errores de sintaxis). Por suerte pudimos solucionarlo, pero fue algo que nos quitó mucho tiempo y que nos hizo odiar un poco a Microstrategy. Lo que sí hay que reconocer es que una vez que Microstrategy está bien configurado, es una herramienta potentísima para extraer datos y generar reportes de todo tipo.&lt;br /&gt;&lt;br /&gt;Cabe aclarar que la versión de Microstrategy que utilizamos corresponde a una demo que nos dio la gente de Microstrategy en DVD. Es probable que haya algún fix posterior a esa versión que solucione estos inconvenientes, pero no lo se. De todas formas, que el script de SQL ni siquiera compile es impresentable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-116502177650367083?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/116502177650367083/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=116502177650367083' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/116502177650367083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/116502177650367083'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/12/microstrategy-y-las-bases-de-datos.html' title='Microstrategy y las bases de datos Open Source'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-116106117790664804</id><published>2006-10-17T01:47:00.000-03:00</published><updated>2006-10-17T02:17:15.230-03:00</updated><title type='text'>Mash up de Flof</title><content type='html'>Ya les hablé de &lt;a href="http://flof.com.ar" target="_blank"&gt;flof&lt;/a&gt; en algún &lt;a href="http://epere4.blogspot.com/2006/06/flof-el-mundo-en-etiquetas.html"&gt;otro post&lt;/a&gt;. Hoy les quiero contar que armé mi primer &lt;span style="font-style: italic;"&gt;mash up&lt;/span&gt; sobre flof (así le llaman ellos).&lt;br /&gt;&lt;br /&gt;Pensé que era el primero que se hacía, pero me enteré que es el segundo (el primero es &lt;a href="http://ar-k.com.ar/blog/?p=21" target="_blank"&gt;en este blog&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Hacer mash up con flof es muy simple. Sólo hace falta poner un iframe como este:&lt;br /&gt;&lt;textarea rows="4" cols="50"&gt;&lt;iframe src="http://flof.com.ar/bin/map/embed/?ll=-58.42838287353516,-34.61&amp;zoom=5&amp;amp;filterEnabled=false&amp;width=400&amp;amp;height=320" width="400" height="320" frameborder="0"&gt;&lt;/iframe&gt;&lt;/textarea&gt;&lt;br /&gt;y se obtiene algo así:&lt;br /&gt;&lt;iframe src="http://flof.com.ar/bin/map/embed/?ll=-58.42838287353516,-34.61&amp;zoom=5&amp;amp;filterEnabled=false&amp;width=400&amp;amp;height=320" frameborder="0" height="320" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lo que yo hice lo pueden ver en &lt;a href="http://epere4.com.ar"&gt;epere4.com.ar&lt;/a&gt;. Ahí armé una página donde puedo poner mis mapas favoritos. Por default me carga el primer mapa de mi lista y luego, al hacer click en los links se van cargando los otros. Una vez que un mapa quedó cargado, ir a él es rápido porque queda cacheado en el browser.&lt;br /&gt;&lt;br /&gt;A lo mejor, si la idea interesa, puedo llegar a armar alguna web donde cada uno pueda tener sus propios mapas favoritos. Dejame tus comentarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-116106117790664804?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/116106117790664804/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=116106117790664804' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/116106117790664804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/116106117790664804'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/10/mash-up-de-flof.html' title='Mash up de Flof'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-115838630475852707</id><published>2006-09-16T02:46:00.000-03:00</published><updated>2006-09-16T02:58:24.763-03:00</updated><title type='text'>¡Llegaron mis CDs de Ubuntu!</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/5790/540/640/CDsDeUbuntu.jpg"&gt;&lt;img src="http://photos1.blogger.com/blogger/5790/540/320/CDsDeUbuntu.jpg" alt="" style="margin: 0px 10px 10px 0px; float: left;" border="0" /&gt;&lt;/a&gt;Luego de 1 mes y 20 días  de espera, llegaron finalmente los CDs de Ubuntu que &lt;a href="http://epere4.blogspot.com/2006/07/linux-ubuntu.html"&gt;encargué en su momento&lt;/a&gt;. Pedí el pack de 10 CDs que viene con uno para Mac, uno para AMD 64 bit y el resto para x86, tal como se pueden ver en la foto.&lt;br /&gt;&lt;br /&gt;Ya casi había perdido las esperanzas, porque dos amigos míos habían pedido los suyos después que yo y los habían recibido antes. Por suerte no se perdieron en el correo y acá están :)&lt;br /&gt;&lt;br /&gt;Vengo usando &lt;a href="http://www.ubuntu.com/" target="_blank"&gt;Ubuntu&lt;/a&gt; desde el 26 de Julio y la verdad es que estoy super conforme. Es realmente un Linux fácil.&lt;br /&gt;&lt;br /&gt;Planeo quedarme con uno solo de los CDs de x86 y al resto regalarlos, así que si me conocés personalmente y querés probar Ubuntu, me podés pedir uno.&amp;nbsp;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-115838630475852707?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/115838630475852707/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=115838630475852707' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115838630475852707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115838630475852707'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/09/llegaron-mis-cds-de-ubuntu.html' title='¡Llegaron mis CDs de Ubuntu!'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-115811408818913199</id><published>2006-09-12T22:59:00.000-03:00</published><updated>2006-09-12T23:21:28.226-03:00</updated><title type='text'>Performance de manipulación del DOM con Javascript en Internet Explorer</title><content type='html'>Hoy pasé la última parte de la tarde y comienzo de la noche luchando con un problema de performance al manipular el DOM de html con Javascript en Internet Explorer.&lt;br /&gt;&lt;br /&gt;Resulta que en el trabajo tenemos una tabla que hubo que partir en dos para agregarle scroll horizontal a partir de cierta columna. Para hacer esto, lo que se hizo fue partir dinámicamente la tabla en dos (o sea, se construyó una tabla con las columnas &lt;code&gt;1&lt;/code&gt; a &lt;code&gt;j&lt;/code&gt; y otra con las columnas &lt;code&gt;j+1&lt;/code&gt; a &lt;code&gt;n&lt;/code&gt;, siendo &lt;code&gt;n&lt;/code&gt; la cantidad de columnas y &lt;code&gt;j&lt;/code&gt; el número de columna de corte).&lt;br /&gt;&lt;br /&gt;El problema surgió cuando la tabla de la izquierda tenía filas con distinta altura que la tabla de la derecha. Se hizo un arreglo que consistía en recorrer las filas de las dos tablas comparando las altura (&lt;code&gt;row.height&lt;/code&gt;) y corrigiendo cuando eran diferentes. Ahí comenzamos a tener problemas de performance, porque la tabla puede tener hasta 600 filas. En el Firefox no teníamos problemas porque se las ingenia para hacer esto bien, pero en Internet Explorer tardaba una eternidad.&lt;br /&gt;&lt;br /&gt;Da la impresión de que Internet Explorer quiere redibujar enseguida la tabla apenas le cambiamos la altura a una fila (imagínense lo que tarda redibujando la tabla de 600 filas unas 600 veces).&lt;br /&gt;&lt;br /&gt;Me partí el bocho buscando maneras de mejorarle la performance a esto. Gasté un montón de tiempo intentando implenetar la solución que proponen en &lt;a href="http://alex.dojotoolkit.org/?p=550" target="_blank"&gt;esta página&lt;/a&gt; (a pesar de que es muy sucia), pero no sólo no mejoró los tiempos, sino que los empeoró levemente.&lt;br /&gt;&lt;br /&gt;Ya me estaba por rendir a la frustración cuando se me ocurrió probar qué pasaba si ocultaba todo antes de hacer los ajustes y lo volvía a mostrar después (seteando el &lt;code&gt;style.display = 'none' &lt;/code&gt;y luego volviéndolo a setear en &lt;code&gt;style.display = 'inline'&lt;/code&gt;). Mi razonamiento fue "&lt;span style="font-style: italic;"&gt;a lo mejor si está oculto no intenta redibujar nada&lt;/span&gt;" ¡y tuve suerte!&lt;br /&gt;&lt;br /&gt;Este simple y miserable cambio hizo que el ajuste de cada fila &lt;span style="font-weight: bold;"&gt;pasara de tomar unos 70 milisegundos a tomar sólo 2!!&lt;/span&gt; Al parecer, con esto se logra que el browser difiera el redibujado de los componentes hasta el momento en que se muestran realmente.&lt;br /&gt;&lt;br /&gt;Me quedé muy contento y por eso lo comparto. A lo mejor es algo super conocido, pero no logré que Google me encontrara ningún tip relacionado con esto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;¡Espero que a alguien más le sirva!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-115811408818913199?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/115811408818913199/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=115811408818913199' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115811408818913199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115811408818913199'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/09/performance-de-manipulacin-del-dom-con.html' title='Performance de manipulación del DOM con Javascript en Internet Explorer'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-115396730349454901</id><published>2006-07-26T22:55:00.000-03:00</published><updated>2006-07-26T23:28:23.536-03:00</updated><title type='text'>Linux Ubuntu</title><content type='html'>La verdad es que no hice mucho progreso con el tema anterior sobre el GWT (no se me presentó un caso práctico para usarlo), pero hoy me comentaron de la existencia de la distribución de &lt;a href="http://www.ubuntu.com/" target="_blank"&gt;Linux  Ubuntu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Se trata de una distribución basada en &lt;a href="http://www.debian.org/" target="_blank"&gt;Debian&lt;/a&gt;, y viene en dos versiones: servidor y escritorio. Se puede descargar desde el sitio web o encargar el CD de manera gratuita (esto me sorprendió y pedí el CD hoy mismo, vamos a ver si llega).&lt;br /&gt;&lt;br /&gt;Por lo poco que probé hasta ahora de la distro para escritorio (desktop) puedo decir que me sorprendió que me detectara y configurara correctamente hasta mi placa de Wi-Fi. Tiene muchas cosas configurables mediante la GUI (todavía no tuve necesidad de abrir la consola y, viniendo de la distribución &lt;a href="http://www.gentoo.org" target="_blank"&gt;Gentoo&lt;/a&gt;, esto es muy nuevo para mi :P)&lt;br /&gt;&lt;br /&gt;Creo que parte de la filosofía de esta distro es "Linux fácil" o "Linux para todos", así que si estás buscando tener Linux sin complicarte la vida y con una base sólida (el nexo con la gente de Debian es muy estrecho, incluso comparten desarrolladores), entonces esta &lt;span style="font-style: italic;"&gt;puede ser&lt;/span&gt; la que estás buscando. Remarco el  &lt;span style="font-style: italic;"&gt;puede ser&lt;/span&gt; porque hoy es mi primer día usándola, así que todavía no la puedo recomendar =)&lt;br /&gt;&lt;br /&gt;Más info en la &lt;a href="http://es.wikipedia.org/wiki/Ubuntu_Linux" target="_blank"&gt;Wikipedia en Español&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-115396730349454901?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/115396730349454901/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=115396730349454901' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115396730349454901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115396730349454901'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/07/linux-ubuntu.html' title='Linux Ubuntu'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-115039114555951207</id><published>2006-06-17T00:23:00.000-03:00</published><updated>2006-06-17T00:26:44.796-03:00</updated><title type='text'>GWT - Google Web Toolkit</title><content type='html'>Ya muchos habrán oido hablar del &lt;a href="http://code.google.com/webtoolkit/" target="blank"&gt;GWT&lt;/a&gt;. Se trata de un framework de desarrollo de front-ends web en el cual uno escribe y prueba el código totalmente en Java y una vez que está contento lo &lt;span style="font-style: italic;"&gt;traduce&lt;/span&gt; a Javascript.&lt;br /&gt;&lt;br /&gt;Yo en un comienzo no le di mucha bolilla porque no me había dado cuenta de que la aplicación corría &lt;span style="font-style: italic;"&gt;totalmente en la Java Virtual Machin&lt;/span&gt;e durante el desarrollo. La gente de Google desarrolló un ambiente de prueba que simula ser un browser, pero funcionando en Java, con lo cual uno puede depurar el código (que luego será Javascript) en, por ejemplo, el &lt;a href="http://www.eclipse.org/" target="blank"&gt;Eclipse&lt;/a&gt;. Tiene &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Fundamentals.JavaToJavaScriptCompiler.JavaRuntimeSupport.html" target="blank"&gt;algunas limitaciones&lt;/a&gt; en cuanto a los métodos de Java que se pueden utilizar de los paquetes java.lang y java.util (que fueron migrados a Javascript), pero es muy bueno.&lt;br /&gt;&lt;br /&gt;Hace un par de días estuve haciendo unas pequeñas pruebas y parece muy prometedor.  Ya les contaré más...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-115039114555951207?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/115039114555951207/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=115039114555951207' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115039114555951207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115039114555951207'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/06/gwt-google-web-toolkit.html' title='GWT - Google Web Toolkit'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-115038936647075814</id><published>2006-06-15T13:27:00.000-03:00</published><updated>2006-06-15T13:36:06.500-03:00</updated><title type='text'>LinkedIn</title><content type='html'>Hace poco descubrí que existía &lt;a href="http://www.linkedin.com" target="blank"&gt;LinkedIn&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Se trata de una red de contactos laborales, donde vos podés pedir y ofrecer trabajo a tu red de contactos.&lt;br /&gt;&lt;br /&gt;Tu red de contactos son tus contactos directos y los contactos de ellos, con lo cual se hace mucha gente.&lt;br /&gt;&lt;br /&gt;En el perfil de cada persona se puede poner el lugar actual de trabajo y los lugares anteriores, así como también la universidad y escuela donde uno estudió. Esto permite buscar contactos en gente que haya trabajado (o trabaje) en esos lugares, o que haya estudiado la misma institución, etc.&lt;br /&gt;&lt;br /&gt;También se puede publicar el perfil propio con una url más o menos bonita (este es el mío, por ejemplo: &lt;a href="http://www.linkedin.com/in/epere4" target="blank"&gt;http://www.linkedin.com/in/epere4&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-115038936647075814?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/115038936647075814/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=115038936647075814' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115038936647075814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/115038936647075814'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/06/linkedin.html' title='LinkedIn'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-114991788925266041</id><published>2006-06-10T02:32:00.000-03:00</published><updated>2006-06-15T13:39:20.783-03:00</updated><title type='text'>flof - el mundo en etiquetas</title><content type='html'>Se lanzó hoy &lt;a href="http://flof.com.ar/" target="_blank"&gt;este sitio&lt;/a&gt; que permite etiquetar puntos geográficos y catalogarlos arbitrariamente. Lo hicieron unos amigos míos y lo recomiendo porque está muy bueno.&lt;br /&gt;&lt;br /&gt;La idea es que si conocés un bar copado, sabés la ubicación de un cajero automático, un estacionamiento o lo que se te ocurra, lo marques en el mapa de flof (usa Google Map) y le pongas etiquetas. La onda es muy similar a la manera en que en &lt;a href="http://del.icio.us/" target="_blank"&gt;del.icio.us&lt;/a&gt; se etiquetan urls.&lt;br /&gt;&lt;br /&gt;Los puntos que vos marcas son públicos. Esto permite que puedas ver lo que otros marcaron y así saber de nuevos bares, estacionamientos en una zona a la que vas por primera vez, etc.&lt;br /&gt;&lt;br /&gt;¿La dirección? &lt;a href="http://flof.com.ar/" target="_blank"&gt;flof.com.ar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-114991788925266041?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/114991788925266041/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=114991788925266041' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/114991788925266041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/114991788925266041'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2006/06/flof-el-mundo-en-etiquetas.html' title='flof - el mundo en etiquetas'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166635.post-109408798852660907</id><published>2004-09-01T22:17:00.000-03:00</published><updated>2004-09-01T22:19:48.526-03:00</updated><title type='text'>Bienvenidos</title><content type='html'>&lt;span style="font-size:130%;"&gt;Bienvenidos a mi Blog personal!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por ahora estoy construyendo esto. Ya tendremos novedades!!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166635-109408798852660907?l=epere4.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://epere4.blogspot.com/feeds/109408798852660907/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166635&amp;postID=109408798852660907' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/109408798852660907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166635/posts/default/109408798852660907'/><link rel='alternate' type='text/html' href='http://epere4.blogspot.com/2004/09/bienvenidos.html' title='Bienvenidos'/><author><name>Edu Pereda</name><uri>https://profiles.google.com/117420352185549272202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-DWcFxWjx3RY/AAAAAAAAAAI/AAAAAAAAYUk/xmd6PsZdBfg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry></feed>
