<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>So be IT</title>
	<atom:link href="http://pvillega.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pvillega.wordpress.com</link>
	<description>Un espacio personal, para hablar de todo y no decir nada. O todo lo contrario.</description>
	<pubDate>Thu, 17 Jul 2008 22:40:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>es</language>
			<item>
		<title>EJB 3.0: Message Driven Beans</title>
		<link>http://pvillega.wordpress.com/2008/07/17/ejb-30-message-driven-beans/</link>
		<comments>http://pvillega.wordpress.com/2008/07/17/ejb-30-message-driven-beans/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 22:37:45 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/?p=124</guid>
		<description><![CDATA[Un mes más tarde, entre vacaciones y otras historias, pero aqui siguen. Siguiente &#8220;capítulo&#8221; de los EJB: Message Driven Beans.
5. Mesage Driven Beans
Los siguientes beans a tratar son los Message Driven Beans (MBD), unos beans con una estrecha relación con JMS (Java Messaging Service). De hecho la mayoría de los MBD son consumidores de mensajes [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Un mes más tarde, entre vacaciones y otras historias, pero aqui siguen. Siguiente &#8220;capítulo&#8221; de los EJB: Message Driven Beans.</p>
<p><span style="font-size:medium;"><strong>5. Mesage Driven Beans</strong></span></p>
<p>Los siguientes beans a tratar son los Message Driven Beans (MBD), unos beans con una estrecha relación con JMS (Java Messaging Service). De hecho la mayoría de los MBD son consumidores de mensajes JMS. Dado que para trabajar con ellos se usan clases de la API JMS, antes de entrar en los MBD propiamente dichos haré una breve introducción a JMS.<br />
<span id="more-124"></span><br />
<strong>5.1 <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">Mensajería</span></strong></p>
<p>En JEE el concepto de <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">mensajería</span> se refiere a la comunicación con poco acoplamiento entre emisor y receptor y totalmente asíncrona. Se podría definir su comportamiento como buzón de voz, donde un emisor deja un mensaje para que un receptor lo recoja cuando pueda. En terminología JEE tenemos un producer (emisor) que almacena un mensaje en un destino, un almacen específico. Posteriormente un consumer (receptor) comprueba si hay algún mensaje para él en el destino.</p>
<p>Existen diferentes modelos de <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">mensajería</span>. Un modelo se define por la forma en que se comunican los producers y los consumers:<br />
<strong>- point-to-point (punto a punto):</strong> el mensaje va de un emisor A a un receptor B, quedando almacenado en una cola (queue). La cola no garantiza el orden de entrega de los mensajes (sí, mala elección del nombre). Si existe más de un receptor potencial se elige uno de forma aleatoria. Una vez entregado el mensaje desaparece de la cola. La analogía sería un mensaje en una botella, lanzada al mar (queue) que es recibida por alguien desconocido en una playa. Toda persona en la playa es un posible receptor pero no sabemos quién la recibirá.<br />
<strong>- publish-subscriber: </strong>lo más parecido a publicar algo en un chat. El emisor (publisher) envía el mensaje a un &#8220;topic&#8221;, un almacen temático de mensajes. Los multiples receptores (subscribers) que estén conectados en ese momento reciben el mensaje. Una vez enviado el mensaje se pierde.</p>
<p>Hay más modelos de <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">mensajería</span> en JMS, algunos de ellos variaciones de los expuestos con derecho a respuesta por parte del receptor, pero estos dos son los que se usan con MDB.</p>
<p><strong>5.2 Java Messaging System</strong></p>
<p>La API JMS es para la <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">mensajería</span> lo que JDBC es para las bases de datos. Proporciona un accesso simple y uniforme a los servicios de <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">mensajería</span> y es soportado por la mayoría de sistemas. Un ejemplo de código para ver cómo funciona:</p>
<p><strong>Ejemplo(código correspondiente a diversas partes de una clase):</strong><br />
@Resource(name=&#8221;jms/QueueConnectionFactory)<br />
private ConnectionFactory connFactory;</p>
<p>@Resource(name=&#8221;jms/ShippingQueue&#8221;)<br />
private Destination destination;</p>
<p>Connection connection = connFactory.createConnection();<br />
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);</p>
<p>MessageProducer producer = session.createProducer(destination);</p>
<p>ObjectMessage message = session.createObjectMessage();<br />
//crear objeto a enviar aquí<br />
&#8230;.<br />
message.setObject(shipping);</p>
<p>producer.send(message);</p>
<p>session.close();<br />
connection.close();</p>
<p>El código es bastante autoexplicativo. Las variables &#8220;connFactory&#8221; y &#8220;destination&#8221; definen las bases de la comunicación, el origen del emisor y el destino del mensaje, en este caso una queue. Las anotaciones indican a JEE la dirección <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">JNDI</span>. La ConnectionFactory es usada para crear objetos de conexión, que crean objetos de sesión (una sesión de <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">mensajería</span> entre emisor y destino) y estos crean el &#8220;Producer&#8221;, el emisor en si. El objeto &#8220;ObjectMessage&#8221; es el mensaje que enviaremos, al que agregamos un objeto con los datos a transmitir. Posteriormente mandamos el mensaje mediante el producer, y cerramos las conexiones al haber terminado el trabajo.</p>
<p>Hay más detalles, como el hecho de que la sesión sea transaccional en este ejemplo (el &#8220;true&#8221; de &#8220;createSession&#8221;) y que debido a ello no enviaremos el mensaje hasta cerrar la sesión (session.close()), pero son aspectos que se salen del objetivo de mostrar un ejemplo de envio de mensajes. Para obtener documentación exhaustiva visita http://java.sun.com/products/jms/docs.html</p>
<p><strong>5.3 Message Driven Beans</strong></p>
<p>Los MDB están pensados para consumir los mensajes creados usando JMS. De hecho son más potentes, usando JCA (Java EE Connector Arquitecture) pueden recibir mensajes de cualquier EIS (Enterprise Information Service) lo que los hace muy versátiles y facilita la integración con sistemas obsolescentes. Pero la mayoría de las veces los usareis para recibir mensajes desde JMS.</p>
<div id="owzu" style="text-align:left;">Existen varias razones para usar MDB frente a otras soluciones. La primera es su sistema de pooling, transparente al programador, que facilita el proceso de mensajes en paralelo al usar múltiples instancias del MDB. También automatizan el proceso de conectar al almacén de mensajes y leer los pendientes, reduciendo los errores y el tiempo de desarrollo. Y por último gestionan el proceso de lectura de mensajes (saber cuando hay que leer el almacén ya que hay nuevos mensajes) de forma interna, sin necesidad de configuración extra.Como los Session EJB, los MDB son POJOs con ciertas normas:<br />
- deben implementar una interficie de escucha de mensajes, directamente (implements) o mediante anotaciones<br />
- no puede ser una clase final o abstract<br />
- debe ser un POJO, nunca una subclase de otro MDB<br />
- debe ser una clase pública<br />
- debe tener un constructor sin argumentos<br />
- no puede tener un metodo &#8220;finalize&#8221;<br />
- debe implementar todos los métodos de la interficie como métodos públicos no estáticos ni finales<br />
- no debe lanzar ninguna excepción del tipo RemoteException o RuntimeException</p>
<p>Como vemos las restricciones que sufren son muy similares a las de los EJB. A continuación pongo un ejemplo de MDB:</p></div>
<p><strong>Ejemplo(POJO):</strong><br />
@MessageDriven(<br />
name=&#8221;ShippingRequestProcessor&#8221;,<br />
activationConfig={<br />
@ActivationConfigProperty(<br />
propertyName=&#8221;destinationType&#8221;,<br />
propertyValue=&#8221;javax.jms.Queue&#8221;),<br />
@ActivationConfigProperty(<br />
propertyName=&#8221;connectionFactoryJndiName&#8221;,<br />
propertyValue=&#8221;jms/QueueConnectionFactory&#8221;),<br />
@ActivationConfigProperty(<br />
propertyName=&#8221;destinationName&#8221;,<br />
propertyValue=&#8221;jms/ShippingQueue&#8221;),<br />
}<br />
)<br />
public class ShippingRequestMDB implements MessageListener{<br />
private java.sql.Connection connection;<br />
private DataSource dataSource;</p>
<p>@Resource<br />
private MessageDrivenContext context;</p>
<p>@Resource(name=&#8221;jdbc/TurtleDS&#8221;)<br />
public void setDataSource(DataSource datasource){<br />
this.datasource = datasource;<br />
}</p>
<p>@PostConstruct<br />
public void initialize(){<br />
try{<br />
connection = dataSource.getConnection();<br />
}catch(SQLException e){<br />
e.printStackTrace();<br />
}<br />
}</p>
<p>@PreDestroy<br />
public void cleanup(){<br />
try{<br />
connection.close();<br />
}catch(SQLException e){<br />
e.printStackTrace();<br />
}<br />
}</p>
<p>public void onMessage(Message message){<br />
try{<br />
ObjectMessage objectMessage = (objectMessage) message;<br />
ShippingRequest shipRequest = (ShippingRequest) objectMessage.getObject();<br />
}catch(SQLException e){<br />
e.printStackTrace();<br />
context.setRollBackOnly();<br />
}<br />
}</p>
<p>}</p>
<p>Como se puede apreciar la principal diferencia con un Session Bean esta en la anotación inicial, más compleja. La complejidad adicional es debido a que la anotación además de definir el nombre indica a que &#8220;almacén&#8221; estamos escuchando, en este caso una Queue. El resto del código es muy similar. La clase implementa la inteface MessageListener de la API JMS, para indicar que recibiremos mensajes. Se usa inyección de dependencias para crear un contexto (MessageDrivenContext) y dar acceso a unos recursos <span class="__mozilla-findbar-search" style="background-color:yellow;display:inline;font-size:inherit;color:black;padding:0;">JNDI</span> (la conexión al datasource). Tenemos dos métodos para ejecutar en el ciclo de vida del bean, uno después de construir el objeto (initialize) y otro antes de destruirlo (cleanup). Y por último un método exigido por la interficie (onMessage) que contiene la lógica de negocio del bean.</p>
<p>Sobre las propiedades de la anotacion ActivationConfigProperty, cada una indica un parámetro de configuración. Exiten las siguientes:<br />
<strong>- destinationType:</strong> indica el tipo de almacén (Queue, Topic)<br />
<strong>- connectionFactoryJndiName:</strong> indica la factoría de conexiones JMS que usará el MDB<br />
<strong>- destinationName:</strong> dirección del almacén (jndi)<br />
<strong>- acknowledgeMode:</strong> cómo se indica al almacén que hemos procesado el mensaje para que lo borre. Hay dos valores: AUTO_ACKNOWLEDGE (por defecto, lo hace solo) y DUPS_OK_ACKNOWLEDGE (como auto pero menos riguroso, permite la existencia de envíos duplicados)<br />
<strong>- subscriptionDurability:</strong> sólo para Topics, puede ser &#8220;non_durable&#8221; (default) o &#8220;durable&#8221;. En el segundo caso el mensaje no se borra hasta que tod subscriptor del tipo &#8220;durable&#8221; lo ha leído, aunque no estuviera online en el momento de su emisión.<br />
<strong>- messageSelector:</strong> permite filtrar los mensajes que consume nuestro MDB</p>
<p><strong>5.4 Ciclo de vida</strong></p>
<p>Ahora que ya hemos visto como funcionan los MDB es hora de explicar brevemente su ciclo de vida. El ciclo de vida de los MDB tiene tan sólo 3 fases: no existe, desocupado y ocupado. Un bean en estado &#8220;no existe&#8221; no ha sido instanciado por el contenedor. Una vez instanciado pasa a la fase &#8220;desocupado&#8221; donde espera un mensaje. Cuando lo recibe, pasa a la fase &#8220;ocupado&#8221; mientras lo procesa. Una vez lo ha procesado vuelve a la fase &#8220;desocupado&#8221;. Si se necesita liberar recursos en el contenedor los beans de la fase &#8220;desocupado&#8221; pueden ser destruidos e ir a la fase &#8220;no existe&#8221;.</p>
<p>El control de estas fases del ciclo se hace mediante dos callback: @PostConstruct y @PreDestroy. El primero se ejecuta cuando el bean llega a la fase &#8220;desocupado&#8221; por primera vez. El segundo cuando estamos a punto de volver a la fase &#8220;no existe&#8221;.</p>
<p><strong>5.5 Enviar mensajes desde MDB</strong></p>
<p>Una situación muy común es que un MDB reciba un mensaje y durante el proceso ocurra un error que hay que notificar al emisor. Dado que la comunicación es asíncrona, la única forma de asegurarnos que recibe la notificación es enviar un mensaje desde el MDB al emisor. Para enviar un mensaje simplemente usamos el código del punto 5.2 embebido dentro del MDB. Hay que tener en cuenta que esto penaliza el rendimiento de los MDB. Si la situación es muy común pued eser más recomendable usar una comunicación síncrona como SOAP o RMI para aprovechar el canal establecido entre emisor y receptor.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/124/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/124/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/124/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=124&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/17/ejb-30-message-driven-beans/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>IcedTea</title>
		<link>http://pvillega.wordpress.com/2008/07/16/icedtea/</link>
		<comments>http://pvillega.wordpress.com/2008/07/16/icedtea/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 23:54:46 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[icedtea]]></category>

		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/16/icedtea/</guid>
		<description><![CDATA[La noticia tiene un mes, pero toca comentarla brevemente: IcedTea ha pasado el estricto test TCK de Java (Java Test Compatibility Kit). Este test verifica que IcedTea aporta las APIs de Java 6 con el comportamiento que se espera de ellas. Es decir, que actúa exactamente igual (bugs aparte) a otra implementación de la JVM, [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La noticia tiene un mes, pero toca comentarla brevemente: <a target="_blank" href="http://www.infoq.com/news/2008/06/icedtea_tck">IcedTea ha pasado</a> el estricto test TCK de Java (Java Test Compatibility Kit). Este test verifica que IcedTea aporta las APIs de Java 6 con el comportamiento que se espera de ellas. Es decir, que actúa exactamente igual (bugs aparte) a otra implementación de la JVM, como la de Sun.</p>
<p>Esto convierte a IcedTea en la primera Java Virtual Machine 100% open-source (OpenJDK no era 100% opensource al pasar los tests IcedTea debido a unas API de audio). Esto es importante, pero cobra más importancia cuando vemos que el creador de IcedTea es Red Hat, propietaria de JBoss. Espero grandes mejoras en el rendimiento de JBoss en el futuro <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/122/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/122/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/122/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=122&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/16/icedtea/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>Unified Diff</title>
		<link>http://pvillega.wordpress.com/2008/07/14/unified-diff/</link>
		<comments>http://pvillega.wordpress.com/2008/07/14/unified-diff/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 20:15:30 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[Architect]]></category>

		<category><![CDATA[diff]]></category>

		<category><![CDATA[merge]]></category>

		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/14/unified-diff/</guid>
		<description><![CDATA[Una situación común en las empresas de software es vender la personalización de un producto. Es decir, tu me pides una configuración concreta de Alfresco con ciertas funciones extras, yo te lo hago y te cobro un pellizco por ello. Todos contentos. Menos el programador. Porqué? Por los dolores de cabeza que obtiene a raíz [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Una situación común en las empresas de software es vender la personalización de un producto. Es decir, tu me pides una configuración concreta de <a href="http://www.alfresco.com/" target="_blank">Alfresco </a>con ciertas funciones extras, yo te lo hago y te cobro un pellizco por ello. Todos contentos. Menos el programador. Porqué? Por los dolores de cabeza que obtiene a raíz del &#8220;merging&#8221;.</p>
<p>Al personalizar los productos tienes dos ramas de código en el repositorio: una contiene el código fuente de la aplicación mientras que la otra contiene el código personalizado. Si personalizas la aplicación para varias empresas, tendrás una rama con el código de la aplicación y varias con el código personalizado para los diversos clientes. Todo funciona hasta que llegas a trabajar y lees en la lista de correo del producto que han arreglado un agujero de seguridad importante. Toca actualizar el código, lo que implica actualizar las personalizaciones, es decir, hacer un merge del código viejo y el que corrige el bug.</p>
<p><span id="more-120"></span></p>
<p>La tarea en sí no es difícil, simplemente copias la nueva versión del fichero, recompilas y haces un deploy de la aplicación. Pero la ley de Muprhy se cumple y has de realizar el merge sobre un fichero que has modificado por petición del cliente. Esto lo complica un poco, ya que has de realizar un merge manual, aunque en Linux puedes usar herramientas como <a href="http://meld.sourceforge.net/" target="_blank">Meld </a>o en Windows <a href="http://www.araxis.com/merge/index.html" target="_blank">Araxis Merge</a>. Haces merge de las partes que interesan, y repites el proceso: compilar, deploy.</p>
<p>El problema es cuando no tienes un cliente, sino 50. Y no es un solo cambio, sino una &#8220;release&#8221; de bug fixes como les ha pasado a los chicos encargados de <a href="http://moodle.org/" target="_blank">Moodle </a>en mi trabajo: <a href="http://tracker.moodle.org/secure/IssueNavigator.jspa?mode=hide&amp;requestId=10543" target="_blank">557 bugs</a> resueltos. A actualizar más de 50 clientes. Y como bien dice Murphy, muchos cambios en ficheros personalizados. Una pesadilla, resuelta en unas <strong>5 horas</strong> gracias a nuestro Tech Leader y el tiempo que dedico a principios del presente 2008 a reestructurar la forma de trabajar con Moodle. Como lo ha hecho? Bienvenidos al &#8220;<a href="http://en.wikipedia.org/wiki/Diff" target="_blank">Unified Diff</a>&#8220;.</p>
<p><strong>Unified Diff</strong></p>
<p>El &#8220;Unified Diff&#8221; es un formato usado por el comando &#8220;diff&#8221; de Linux que marca las diferencias entre dos ficheros como cambios que hay que realizar sobre el primero para que sea idéntico al segundo. Un ejemplo es:</p>
<pre>--- original timestamp
+++ new timestamp
@@ -1,3 +1,9 @@
+This is an important
-notice! It should
(....)</pre>
<p>Las 2 primeras líneas (las que empiezan por &#8212; y +++) marcan el fichero origen y el modificado. La línea de las @ indica las líneas a cambiar. Las líneas inferiores marcan líneas a agregar (empiezan con &#8216;+&#8217;) o a eliminar (empiezan con &#8216;-&#8217;).</p>
<p>El formato es fácilmente comprensible para un humano pero a la vez puede ser interpretado por una máquina sin problemas. Esto, junto al contexto que se incluye en el &#8220;diff&#8221; (no lo muestro) permite identificar fácilmente que partes del fichero han de ser modificadas.</p>
<p><strong>Como se realizan los diff?</strong></p>
<p>En Linux existe la instrucción &#8220;diff&#8221; que crea la salida unificada. La instrucción es compleja, pero la parte que nos interesa es:</p>
<p>diff -Naur origen destino &gt; file.patch</p>
<p>Este comando crea un fichero (file.patch) que contiene las diferencias expresadas en formato unificado. Tan simple como esto. Podéis ver la salida directamente ejecutando:</p>
<p>diff -Naur origen destino</p>
<p>Hay un detalle a tener en cuenta: para evitar problemas los diff han de realizarse siempre relativos a una estructura de directorios idéntica, respetando los mismos niveles en el árbol de ficheros. Esto quiere decir que si tenemos un fichero en &#8220;/tmp/a.file&#8221;, realizar un diff contra un fichero en &#8220;/home/user/a2.file&#8221; puede crear problemas. Para que no los hubiera, deberiamos hacer el diff de &#8220;/tmp/a.file2 contra &#8220;/user/a2.file&#8221;.</p>
<p>Como los &#8220;path&#8221; de los ficheros son relativos a donde ejecutamos el comando diff, lo más normal es tener 2 directorios con la misma estructura interna (llamemosles origen y destino) y ejecutar diff desde el directorio que los contiene.</p>
<p><strong>Aplicar los parches</strong></p>
<p>Aplicar un parche es sencillo. Primero nos hemos de situar en la raíz de la estructura de directorios que contiene los ficheros a modificar. Esto es importante ya que al crear el fichero &#8220;patch&#8221; se ha almacenado una ruta relativa al fichero a modificar, y si lo ejecutamos desde otro punto recibiremos un error. Una vez en el directorio adecuado, ejecutamos:</p>
<p>cat file.patch | patch -p1</p>
<p>Esto aplicará el parche sobre el fichero adecuado, obteniendo la información de &#8220;file.patch&#8221;. En caso de que hubiera un error se nos mostrará por pantalla. Los errores suelen darse por &#8220;patch&#8221; creados de forma incorrecta. En unos pocos casos el programa puede ser incapaz de aplicar los cambios debido a que el fichero destino ha sido modificado de forma masiva, en este caso tendremos que aplicar el cambio a mano.</p>
<p>Una vez tenemos los parches, lo mejor es almacenarlos en el repositorio en lugar del código modificado. Esto nos permitirá aplicarlos a nuevas revisiones del código original de forma rápida y simple, ahorrando trabajo a los desarrolladores.</p>
<p><strong>La clave: automatización</strong></p>
<p>Hasta aquí el proceso de generar y almacenar los diff resulta más complicado que el proceso estándard de hacer commit del código sobre el svn. Y aplicar los parches no parece muy cómodo tampoco, aunque reduce el tiempo necesario para actualizar el codigo. Si da más trabajo, donde está la grácia? Pues en que el proceso es fácilmente automatizable. Una vez tenemos los patch, podemos crear un script (por ejemplo con Ruby) que recoja los patchs de nuestro repositorio y los aplique sobre un fragmento de codigo, dejandolo listo para ponerlo en producción.</p>
<p>Si lo convertimos en el escenario que he mencionado al inicio, con un código tan cambiado, podemos ejecutar un script que para cada cliente obtenga los parches de nuestro repositorio y los aplique a una cópia del código. De hecho el mismo script peude encargarse de obtener el código del repositório remoto del producto y una vez hayamos aplicado los parches (sin errores), poner ese código en producción. Acabamos de evitar un trabajo muy engorroso y que consume mucho tiempo, de una forma bien fácil.</p>
<p><strong>Contrapartidas<br />
</strong><br />
El principal problema está en acostumbrarse a trabajar de esta forma. Supone algunos pasos extras que aunque se pueden automatizar, no resultan cómodos.  Obviamente no es un sistema perfecto, sólo sirve para mantenimiento dentro de una misma versión, sin grandes cambios en los formatos de los ficheros. Y a veces podeis tener cambios muy grandes en un solo fichero, lo que producirá errores en el &#8220;patch&#8221; correspondiente. En estos casos es recomendable generar un nuevo &#8220;patch&#8221; y se pierde algo de tiempo en ello. Pero en general facilita mucho la vida y es un sistema que funciona independientemente del lenguaje o repositorio usado.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/120/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/120/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=120&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/14/unified-diff/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>VMWare cambia de CEO</title>
		<link>http://pvillega.wordpress.com/2008/07/08/vmware-cambia-de-ceo/</link>
		<comments>http://pvillega.wordpress.com/2008/07/08/vmware-cambia-de-ceo/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 22:35:45 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[virtualizacion]]></category>

		<category><![CDATA[vwmware]]></category>

		<category><![CDATA[ceo]]></category>

		<category><![CDATA[relevo]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/08/vmware-cambia-de-ceo/</guid>
		<description><![CDATA[La virtualización es un mercado en esa fase en que ya no es una tecnología novedosa, es útil, y varias empresas quieren parte del pastel del grande: VMWare. En InfoQ han publicado que una de las compañía más famosas en el ramo de virtualización, y seguramente la que más ha aportado al campo, cambia de [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La virtualización es un mercado en esa fase en que ya no es una tecnología novedosa, es útil, y varias empresas quieren parte del pastel del grande: VMWare. En InfoQ han <a target="_blank" href="http://www.infoq.com/news/2008/07/vmware-ceo">publicado </a>que una de las compañía más famosas en el ramo de virtualización, y seguramente la que más ha aportado al campo, cambia de CEO en un momento en que nuevos jugadores entran en el mercado. Comentan que parece un movimiento más político que no por estrategia del negocio (y las acciones han bajado un 30% como resultado). </p>
<p>El anterior CEO era a su vez el fundador. Veremos que pasos toma la empresa en el futuro. </p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/119/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/119/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/119/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=119&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/08/vmware-cambia-de-ceo/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>Cuidar al empleado</title>
		<link>http://pvillega.wordpress.com/2008/07/08/cuidar-al-empleado/</link>
		<comments>http://pvillega.wordpress.com/2008/07/08/cuidar-al-empleado/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 22:26:36 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[profesional]]></category>

		<category><![CDATA[expansión]]></category>

		<category><![CDATA[falta personal]]></category>

		<category><![CDATA[trabajo]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/08/cuidar-al-empleado/</guid>
		<description><![CDATA[Vía los compartidos de Google Reader (gracias chicos!) he dado con este artículo de Expansión. El tema es más que conocido, y no dice nada nuevo. Lo triste es que a estas alturas, no hayan aprendido nada. Sigo en contacto con gente de mis anteriores empresas y sé los problemas que tienen para reclutar gente. [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Vía los compartidos de Google Reader (gracias chicos!) he dado con <a target="_blank" href="http://www.expansion.com/edicion/exp/empresas/tecnologia/es/desarrollo/1142555.html">este artículo</a> de Expansión. El tema es más que conocido, y no dice nada nuevo. Lo triste es que a estas alturas, no hayan aprendido nada. Sigo en contacto con gente de mis anteriores empresas y sé los problemas que tienen para reclutar gente. No sera la primera vez que me han dicho si quería volver, pero cuando preguntas las condiciones, no han mejorado en nada. No se como se atreven a quejarse&#8230;</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/118/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/118/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=118&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/08/cuidar-al-empleado/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>Spin</title>
		<link>http://pvillega.wordpress.com/2008/07/08/spin/</link>
		<comments>http://pvillega.wordpress.com/2008/07/08/spin/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 22:19:42 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<category><![CDATA[book]]></category>

		<category><![CDATA[libro]]></category>

		<category><![CDATA[spin]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/08/spin/</guid>
		<description><![CDATA[Spin es una novela de Robert Charles Wilson, que gano en 2006 (año de su publicación), el premio Hugo. Y merecidamente.
Sin previo aviso, la Tierra es envuelta por una membrana artificial que la aísla del resto del universo. Esa membrana filtra los objetos que pueden entrar y salir de la atmósfera y sitúa el planeta [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a target="_blank" href="http://en.wikipedia.org/wiki/Spin_%28novel%29">Spin </a>es una novela de <a target="_blank" href="http://en.wikipedia.org/wiki/Robert_Charles_Wilson">Robert Charles Wilson</a>, que gano en 2006 (año de su publicación), el premio <a target="_blank" href="http://en.wikipedia.org/wiki/Hugo_Award">Hugo</a>. Y merecidamente.</p>
<p>Sin previo aviso, la Tierra es envuelta por una membrana artificial que la aísla del resto del universo. Esa membrana filtra los objetos que pueden entrar y salir de la atmósfera y sitúa el planeta en un plano temporal diferente, donde cada segundo de la Tierra son 3.17 días en el exterior. La novela sigue las consecuencias de este fenómeno sobre la gente de una Tierra condenada, una población que sabe que debido a la membrana el Sol ya no existirá en 50 años. Quien ha creado la membrana? Con qué objetivo? Que destino espera a la humanidad?</p>
<p>Lo interesante de la novela es que pertenece a ese género que usa la ciencia ficción como excusa para plantear situaciones y reacciones muy humanas. Mediante explicaciones técnicas bastante buenas, con pocas licencias fantásticas además del Spin en sí. Además mezcla la visión histórica, el relato de lo que sucedió, con lo que sucede. Estos &#8220;flashbacks&#8221; dan unos cambios de ritmos que hacen la novela más amena, ya que mientras estás en una época te preguntas que pasará en la otra (aunque recibas algunas pistas en el camino).</p>
<p>La novela tiene una semi-continuación, <a target="_blank" href="http://en.wikipedia.org/wiki/Axis_%28novel%29">Axis</a>, situada en el mismo universo pero que no sigue la trama de Spin. Ya está reservada <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/117/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/117/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=117&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/08/spin/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>Virtualización</title>
		<link>http://pvillega.wordpress.com/2008/07/01/virtualizacion/</link>
		<comments>http://pvillega.wordpress.com/2008/07/01/virtualizacion/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 23:12:21 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[virtualizacion]]></category>

		<category><![CDATA[definicion]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/01/virtualizacion/</guid>
		<description><![CDATA[Hoy en día la palabra &#8220;virtualización&#8221; es uno de los hypes de las IT. Parece la &#8220;silve bullet&#8221; de los administradores de sistemas: más seguridad, menos costes, CPD más pequeños, ahorro energético&#8230; todo muy bonito. Aquí hay un artículo (vía InfoQ) que comenta los pros y las contras de la virtualización. No es oro todo [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hoy en día la palabra &#8220;virtualización&#8221; es uno de los hypes de las IT. Parece la &#8220;silve bullet&#8221; de los administradores de sistemas: más seguridad, menos costes, CPD más pequeños, ahorro energético&#8230; todo muy bonito. Aquí hay un <a target="_blank" href="http://www.infoq.com/articles/virtualization-intro">artículo </a>(vía InfoQ) que comenta los pros y las contras de la virtualización. No es oro todo lo que reluce.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/116/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/116/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=116&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/01/virtualizacion/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>Java 6 y procesos multihilo</title>
		<link>http://pvillega.wordpress.com/2008/07/01/java-6-y-procesos-multihilo/</link>
		<comments>http://pvillega.wordpress.com/2008/07/01/java-6-y-procesos-multihilo/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 23:00:50 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[eficiencia]]></category>

		<category><![CDATA[threads]]></category>

		<category><![CDATA[benchmark]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/01/java-6-y-procesos-multihilo/</guid>
		<description><![CDATA[La tendencia actual de los procesadores es añadir núcleos. Tenemos dual-core, quad-core, y pronto veremos 8-core o lo que quieran inventar. Esto ha sido una forma de mantener la &#8220;Ley de Moore&#8221; ya que era extremadamente difícil crear nuevos procesadores más potentes, y tampoco era tan necesario. Dadas las aplicaciones que un usuario normal puede [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La tendencia actual de los procesadores es añadir núcleos. Tenemos dual-core, quad-core, y pronto veremos 8-core o lo que quieran inventar. Esto ha sido una forma de mantener la &#8220;Ley de Moore&#8221; ya que era extremadamente difícil crear nuevos procesadores más potentes, y tampoco era tan necesario. Dadas las aplicaciones que un usuario normal puede ejecutar en su día a día, poseer varios procesadores para repartir la carga de los múltiples procesos es mejor que tener un sólo procesador muy potente.</p>
<p>Claro que este cambio implica que los programadores han de adaptarse a un nuevo paradigma, donde es importante programar la aplicación para que aproveche los múltiples núcleos, fomentando el paralelismo de tareas. Esta forma de trabajar era importante en aplicaciones de servidor, pero al menos en Java los propios contenedores (JBoss, BEA, etc) gestionaban de forma transparente los threads relacionados con J2EE. Con los nuevos procesadores esta metodología se ha extendido al escritorio, donde el uso adecuado de threads mejora la experiencia del usuario.</p>
<p>Las optimizaciones en paralelismo han llegado a los lenguajes de programación y con Java 6 SUN ha intentado mejorar el sistema de threads de Java. En InfoQ han escrito <a target="_blank" href="http://www.infoq.com/articles/java-threading-optimizations-p1">dos</a> <a target="_blank" href="http://www.infoq.com/articles/java-threading-optimizations-p2">artículos </a>estudiando las mejoras introducidas. Como resumen rápido para los impacientes, si queréis aprovechar mejor los threads usad Java 6 y actualizad la JVM constantemente.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/115/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/115/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/115/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=115&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/01/java-6-y-procesos-multihilo/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>Las entrevistas de trabajo</title>
		<link>http://pvillega.wordpress.com/2008/07/01/las-entrevistas-de-trabajo/</link>
		<comments>http://pvillega.wordpress.com/2008/07/01/las-entrevistas-de-trabajo/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 11:47:39 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[profesional]]></category>

		<category><![CDATA[rrhh]]></category>

		<category><![CDATA[entrevista]]></category>

		<category><![CDATA[preguntas]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/07/01/las-entrevistas-de-trabajo/</guid>
		<description><![CDATA[Una de las formas más fáciles de progresar en tu carrera profesional es ir saltando de empresa cada cierto tiempo, buscando una posición mejor con su correspondiente aumento. Especialmente interesante si estás en empresas que tienen la subida 0% como constante y cuyo concepto de carrera profesional es hacer lo mismo durante 10 años. 
Cuando [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Una de las formas más fáciles de progresar en tu carrera profesional es ir saltando de empresa cada cierto tiempo, buscando una posición mejor con su correspondiente aumento. Especialmente interesante si estás en empresas que tienen la subida 0% como constante y cuyo concepto de carrera profesional es hacer lo mismo durante 10 años. </p>
<p>Cuando cambias de trabajo pasas por todo un ritual: entrevistas técnicas, de recursos humanos, test de conocimiento, dinámicas de grupo, etc. Cada uno exige una preparación específica, pero sin duda la más propensa a fallos es la entrevista con recursos humanos, plagada de preguntas &#8220;trampa&#8221; y el nerviosismo de no saber si estás respondiendo de forma &#8220;correcta&#8221;.</p>
<p>En el Blog Salmón han publicado unos artículos con preguntas que <a target="_blank" href="http://www.elblogsalmon.com/2008/06/28-seis-preguntas-que-te-pueden-hacer-en-una-entrevista-de-trabajo">te pueden hacer</a>, preguntas que <a target="_blank" href="http://www.elblogsalmon.com/2007/08/11-seis-preguntas-a-preguntar-en-tu-entrevista">debes hacer</a> y preguntas <a target="_blank" href="http://www.elblogsalmon.com/2007/04/14-diez-preguntas-a-tu-posible-futuro-jefe">sobre tu futuro jefe</a>. No garantizan el éxito pero ir preparado siempre ayuda.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/114/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/114/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/114/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=114&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/07/01/las-entrevistas-de-trabajo/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Source</title>
		<link>http://pvillega.wordpress.com/2008/06/30/java-source/</link>
		<comments>http://pvillega.wordpress.com/2008/06/30/java-source/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 15:35:14 +0000</pubDate>
		<dc:creator>Pere Villega</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[proyectos]]></category>

		<guid isPermaLink="false">http://pvillega.wordpress.com/2008/06/30/java-source/</guid>
		<description><![CDATA[Aunque algunos ya la conoceréis, os adjunto un link a Java Source. Se trata de un recopilatorio de aplicaciones &#8220;open source&#8221; clasificadas por categorías, desde Ajax a herramientas XML. Es una buena forma de encontrar herramientas que resuelvan nuestras necesidades o de descubrir proyectos muy interesantes como Kbee.
Un detalle a destacar es que para cada [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Aunque algunos ya la conoceréis, os adjunto un link a <a target="_blank" href="http://java-source.net/">Java Source</a>. Se trata de un recopilatorio de aplicaciones &#8220;open source&#8221; clasificadas por categorías, desde Ajax a herramientas XML. Es una buena forma de encontrar herramientas que resuelvan nuestras necesidades o de descubrir proyectos muy interesantes como <a target="_blank" href="http://java-source.net/open-source/workflow-engines/kbee-workflow">Kbee.</a></p>
<p>Un detalle a destacar es que para cada proyecto además del enlace a la web y a la licencia que usa, muestra un listado de proyectos alternativos, lo que facilita la búsqueda de alternativas.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pvillega.wordpress.com/113/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pvillega.wordpress.com/113/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pvillega.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pvillega.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pvillega.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pvillega.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pvillega.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pvillega.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pvillega.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pvillega.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pvillega.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pvillega.wordpress.com/113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pvillega.wordpress.com&blog=3061911&post=113&subd=pvillega&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pvillega.wordpress.com/2008/06/30/java-source/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/aracon-128.jpg" medium="image">
			<media:title type="html">pvillega</media:title>
		</media:content>
	</item>
	</channel>
</rss>