<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Lycka Bonita</title>
	
	<link>http://www.hachisvertas.net/blog/01</link>
	<description>J2EE, mis chorradas... y adoración a Lycka</description>
	<lastBuildDate>Mon, 13 May 2013 08:00:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Lycka" /><feedburner:info uri="lycka" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>He who has a why to live can bear almost any how.</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/8pTq8rKm7QI/he-who-has-a-why-to-live-can-bear-almost-any-how</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/05/13/he-who-has-a-why-to-live-can-bear-almost-any-how#comments</comments>
		<pubDate>Mon, 13 May 2013 08:00:40 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Liderazgo]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5213</guid>
		<description><![CDATA[He who has a why to live can bear almost any how. Friedrich Nietzsche. «Muchas personas me preguntan cómo hacer algo. Yo solía decírselo hasta que me di cuenta de que incluso después de haberles dicho cómo hacía algo yo, con frecuencia no lo hacían. Luego me di cuenta de que no es el cómo lograr algo, sino el porqué lograrlo [...]]]></description>
				<content:encoded><![CDATA[<blockquote><p>He who has a why to live can bear almost any how.</p></blockquote>
<p><strong>Friedrich Nietzsche</strong>.</p>
<blockquote><p>«Muchas personas me preguntan <i>cómo</i> hacer algo. Yo solía decírselo hasta que me di cuenta de que incluso después de haberles dicho cómo hacía algo yo, con frecuencia no lo hacían. Luego me di cuenta de que no es el <i>cómo</i> lograr algo, sino el<i> </i><i>porqué</i> lograrlo lo que es más importante. Es el <i>porqué </i>lo que te da el poder para hacer el <i>cómo</i>».</p></blockquote>
<p><strong>Robert Kiyosaki</strong> en <a href="http://www.amazon.es/gp/product/8466325042/ref=as_li_ss_tl?ie=UTF8&amp;camp=3626&amp;creative=24822&amp;creativeASIN=8466325042&amp;linkCode=as2&amp;tag=falcaide-21">Retírate joven y rico</a>. Vía blog de <strong>Francisco Alcaide</strong>, <a href="http://www.franciscoalcaide.com/2013/04/no-es-el-como-sino-el-porque.html">No es el «cómo» sino el «porqué»</a>.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-52140"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/8pTq8rKm7QI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/05/13/he-who-has-a-why-to-live-can-bear-almost-any-how/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/05/13/he-who-has-a-why-to-live-can-bear-almost-any-how</feedburner:origLink></item>
		<item>
		<title>JSF Tag – converDateTime</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/ItC5IJgrV-4/jsf-tag-converdatetime</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/05/06/jsf-tag-converdatetime#comments</comments>
		<pubDate>Mon, 06 May 2013 08:00:53 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[JSF]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5202</guid>
		<description><![CDATA[La etiqueta (taglib) de JSF convertDateTime aplica por defecto la zona horaria en la que se está ejecutando, por lo que cuando es ejecutada en España (que ahora estamos en la zona horaria GMT+2) lo que hace es restar 2 horas a la hora  que le es informada. Es decir, ejecutando el siguiente código en España [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/04/jsf-logo.png" rel='lightbox'><img class="alignleft size-thumbnail wp-image-5210" alt="jsf-logo" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/04/jsf-logo-150x150.png" width="150" height="150" /></a>La etiqueta (taglib) de <strong>JSF</strong> <a href="http://docs.oracle.com/javaee/5/javaserverfaces/1.2/docs/tlddocs/f/convertDateTime.html">convertDateTime</a> aplica por defecto la zona horaria en la que se está ejecutando, por lo que cuando es ejecutada en <strong>España</strong> (que ahora estamos en la zona horaria GMT+2) lo que hace es restar 2 horas a la hora  que le es informada.</p>
<p>Es decir, ejecutando el siguiente código en España e informando <em>user.createdOn</em> como &#8220;01/01/2013 <strong>12:00</strong>:00&#8243; :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h:outputText value=<span style="color: #0000ff;">&quot;#{user.createdOn}&quot;</span><span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>f:convertDateTime pattern=<span style="color: #0000ff;">&quot;dd/MM/yyyy HH:mm:ss&quot;</span> type=<span style="color: #0000ff;">&quot;both&quot;</span> /<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>/h:outputText<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>se pintará en pantalla &#8220;01/01/2013 <strong>10:00</strong>:00&#8243;. Pero lo que es peor, en <strong>Portugal</strong> (está en la zona horaria GMT+1) pintaría &#8220;01/01/2013 11:00:00&#8243; (creo, no me he desplazado a Portugal para probarlo <img src='http://www.hachisvertas.net/blog/01/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>Y lo que es peor, <strong>si estás desarrollando en España y finalmente tu código se despliega y ejecuta en otro país</strong>, el resultado será&#8230;.</p>
<p>Para solucionar esto (ñapa) en España podemos poner la zona horaria en el código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h:outputText value=<span style="color: #0000ff;">&quot;#{user.createdOn}&quot;</span><span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>f:convertDateTime timeZone=<span style="color: #0000ff;">&quot;GMT+2&quot;</span> pattern=<span style="color: #0000ff;">&quot;dd/MM/yyyy HH:mm:ss&quot;</span> type=<span style="color: #0000ff;">&quot;both&quot;</span> /<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>/h:outputText<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Aunque lo suyo sería que <em>timeZone</em> fuera una variable más a informar desde el servidor, porque sino cuando por ejemplo registremos un evento en el servidor persistiendo new Date(), al visualizar esa fecha se visualizará incorrectamente en clientes que no estén en la misma zona horaria que el servidor, complicando (innecesariamente) una lógica tan habitual como formatear una fecha.</p>
<p>¿Por qué no me gustará ningún código de <strong>Sun</strong>? ¿Por qué no respetaré las certificaciones de <strong>Sun</strong>?</p>
<p>&nbsp;</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-52030"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/ItC5IJgrV-4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/05/06/jsf-tag-converdatetime/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/05/06/jsf-tag-converdatetime</feedburner:origLink></item>
		<item>
		<title>Pantallazos de tu navegador</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/LvSYHk0-CY0/pantallazos-de-tu-navegador</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/04/29/pantallazos-de-tu-navegador#comments</comments>
		<pubDate>Mon, 29 Apr 2013 08:00:03 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Awesome Screenshot]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5199</guid>
		<description><![CDATA[Todo evoluciona, hasta tomar pantallazos del contenido de tu navegador, se acabó el &#8220;Imprimir Pantalla&#8221; e ir luego al MS Paint a retocar, poner flechitas y recortar la imagen. Awesome ScreenShot es una extensión gratuita tanto para Firefox como para Chrome y Safari para tomar pantallazos del contenido de tu navegador de una forma sencilla, [...]]]></description>
				<content:encoded><![CDATA[<p>Todo evoluciona, hasta tomar pantallazos del contenido de tu navegador, se acabó el &#8220;Imprimir Pantalla&#8221; e ir luego al MS Paint a retocar, poner flechitas y recortar la imagen.</p>
<p><a href="http://awesomescreenshot.com/">Awesome ScreenShot</a> es una extensión gratuita tanto para <strong>Firefox</strong> como para <strong>Chrome</strong> y <strong>Safari </strong>para tomar pantallazos del contenido de tu navegador de una forma sencilla, elegante y potente.</p>
<p>Sin duda es una herramienta que mejorará la comunicación entre los usuarios (es que no me funciona cuando pincho el botón!) y los desarrolladores.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-52000"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/LvSYHk0-CY0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/04/29/pantallazos-de-tu-navegador/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/04/29/pantallazos-de-tu-navegador</feedburner:origLink></item>
		<item>
		<title>Subversive vs Subclipse</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/Cs55mZEmGBc/subversive-vs-subclipse</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/04/22/subversive-vs-subclipse#comments</comments>
		<pubDate>Mon, 22 Apr 2013 08:00:36 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Subclipse]]></category>
		<category><![CDATA[Subversive]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5191</guid>
		<description><![CDATA[Cuando me instalo un nuevo entorno de trabajo con Eclipse, siempre dudo qué plugin de código abierto de SVN instalarme (igual que me pasa con MAVEN), si instalarme Subversive de Polarion o instalarme Subclipse de Tigris (referencia en el mundo SVN), ambas soluciones muy similares funcionalmente, respaldadas por una gran comunidad y muy maduras. Y [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/04/svn.png" rel='lightbox'><img class="alignleft size-full wp-image-5192" alt="svn" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/04/svn.png" width="91" height="89" /></a>Cuando me instalo un nuevo entorno de trabajo con <a href="http://www.eclipse.org/" target="_blank">Eclipse</a>, siempre dudo qué plugin de código abierto de <strong>SVN</strong> instalarme (igual que me pasa con <strong>MAVEN</strong>), si instalarme <a href="http://www.eclipse.org/subversive/" target="_blank">Subversive</a> de <strong>Polarion </strong>o instalarme <a href="http://subclipse.tigris.org/" target="_blank">Subclipse</a> de <strong>Tigris</strong> (referencia en el mundo SVN), ambas soluciones muy similares funcionalmente, respaldadas por una gran comunidad y muy maduras. Y <a href="http://stackoverflow.com/questions/61320/svn-plugins-for-eclipse-subclipse-vs-subversive" target="_blank">esta duda</a> es bastante popular y antigua.</p>
<p>Sin embargo hay 3 razones por las que <strong>Subclipse brilla más que Subversive</strong>:</p>
<ul>
<li>Están más involucrados en la evolución de la tecnología SVN.</li>
<li>Es significativamente más sencillo realizar un merge.</li>
<li>Soportan mejor cambios externos realizados por otros clientes SVN o directamente la línea de comandos.</li>
</ul>
<p>La segunda razón sí que la considero suficiente para decantarme por Subclipse ya que hacer un merge es el punto más débil de SVN frente a <strong>GIT</strong>.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-51920"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/Cs55mZEmGBc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/04/22/subversive-vs-subclipse/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/04/22/subversive-vs-subclipse</feedburner:origLink></item>
		<item>
		<title>Transacciones ACID vs BASE</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/NFj4lz5TyaE/transacciones-acid-vs-base</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/03/04/transacciones-acid-vs-base#comments</comments>
		<pubDate>Mon, 04 Mar 2013 08:00:38 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Conferencias]]></category>
		<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Transaction]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5172</guid>
		<description><![CDATA[Las transacciones deben cumplir con el acrónimo ACID para ser confiables: Atomicity, all or nothing, if one part of the transaction fails the entire transaction fails. Required when there is more than one Resource Manager. Example of two phase commit, marriage, both partners must return ok. Consistency, any transaction will bring the database from one [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/03/acid-base.png" rel='lightbox'><img class="alignleft size-thumbnail wp-image-5173" title="acid-base" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/03/acid-base-150x150.png" alt="" width="150" height="150" /></a>Las <strong>transacciones</strong> deben cumplir con el acrónimo <strong>ACID</strong> para ser <strong>confiables</strong>:</p>
<ul>
<li><strong>Atomicity</strong>, all or nothing, if one part of the transaction fails the entire transaction fails. Required when there is more than one Resource Manager. Example of two phase commit, marriage, both partners must return ok.</li>
<li><strong>Consistency</strong>, any transaction will bring the database from one valid state to another. The bride can not become married to another broom after her ok if her broom fails and another one gives ok.</li>
<li><strong>Isolation</strong>, can be executed concurrently but appear to execute serially.</li>
<li><strong>Durability</strong>, when a transaction commits its result remains and must survive failures.</li>
</ul>
<p>Sacado de la charla &#8220;<a href="http://www.infoq.com/presentations/Transactions-Misunderstood" target="_blank">Transactions: Over Used or Just Misunderstood?</a>&#8220;, de <strong>Mark Little de JBoss</strong> en <a href="http://www.infoq.com" target="_blank">InfoQ</a>.</p>
<p>Sin embargo, el <a href="http://en.wikipedia.org/wiki/CAP_theorem" target="_blank">teorema de Brewer</a> nos condena a <strong>convivir con el fallo</strong> si queremos <strong>escalar</strong> nuestro sistema, para lo cual utilizamos transacciones que se conforman con que eventualmente nos encontraremos en un estado consistente y con ofrecernos respuestas aproximadas, cumplen con el acrónimo <strong>BASE</strong>:</p>
<ul>
<li><strong>B</strong>asic <strong>A</strong>vailability</li>
<li><strong>S</strong>oft-state</li>
<li><strong>E</strong>ventual consistency</li>
</ul>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-51730"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/NFj4lz5TyaE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/03/04/transacciones-acid-vs-base/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/03/04/transacciones-acid-vs-base</feedburner:origLink></item>
		<item>
		<title>Copiar vs Duplicar objetos en Java</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/I8iShAIYowI/copiar-vs-duplicar-objetos-en-java</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/02/25/copiar-vs-duplicar-objetos-en-java#comments</comments>
		<pubDate>Mon, 25 Feb 2013 08:00:17 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5140</guid>
		<description><![CDATA[Java tiene gravísimos puntos oscuros desde sus orígenes, debido a que la API y el lenguaje están muy orientados a la implementación de la JVM y a la compatibilidad hacia atrás en lugar de orientarse a facilitar un lenguaje claro y sin ambigüedades. Baste decir que cuando hablamos de J2EE no hablamos de &#8220;Java v2 [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/do-not-duplicate.jpg" rel='lightbox'><img class="alignleft size-medium wp-image-5148" title="do-not-duplicate" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/do-not-duplicate-300x225.jpg" alt="" width="300" height="225" /></a>Java tiene gravísimos puntos oscuros desde sus orígenes, debido a que <strong>la API y el lenguaje están muy orientados a la implementación de la JVM y a la compatibilidad hacia atrás en lugar de orientarse a facilitar un lenguaje claro y sin ambigüedades</strong>.</p>
<p>Baste decir que cuando hablamos de <em>J2EE</em> no hablamos de &#8220;<em>Java v2 Enterprise Edition</em>&#8221; sino de &#8220;<em>Java v1.2 Enterprise Edition</em>&#8220;, pero todo el mundo (incluido yo) utiliza <em>J2EE</em> en lugar de simplemente <em>JEE</em> o <em>J7EE</em> (para referirnos a la versión 1.7 que es la actual de Java). Por cierto, cuánta falta hace que llegue por fin una versión 2.0 de Java!!!</p>
<p>Una de estas áreas de mejora es el mal uso de un concepto tan común como &#8220;<strong>duplicar</strong>&#8221; un objeto. La mayoría de las pesonas que leen este código,</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="java5" style="font-family:monospace;">Person personA= <span style="color: #000000; font-weight: bold;">new</span> Person<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
personA.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Juan&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Person personB = personA<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>piensan que <em>personB</em> es una copia de <em>personA</em>, dos objetos diferentes pero con los mismos valores, porque los humanos interpretamos la línea 3 como <em>&#8220;Crear un nuevo objeto del tipo Person llamado personB que inicalizamos con los valores que tiene el objeto llamado personA&#8221;</em>, o simplemente decimos &#8220;<em>Copiar personA a un nuevo objeto del tipo Person llamado personB</em>&#8221; pero queremos decir &#8220;<em>Duplicar</em>&#8221; en lugar de copiar.</p>
<p>Sin embargo Java se comporta de un modo diferente al esperado ya que la JVM interpreta esa línea de diferente forma. Si ahora realizamos un cambio en <em>personB</em>, comprobaremos asombrados cómo <em>personA</em> también ha cambiado!!!</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>4
5
</pre></td><td class="code"><pre class="java5" style="font-family:monospace;">personB.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Luisa&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//En este punto personA.getName() devolería &quot;Luisa&quot; y no &quot;Juan&quot;.</span></pre></td></tr></table></div>

<p>¿Por qué? Porque lo que realmente <strong>significa</strong> para la JVM la conflictiva línea 3 anterior, es &#8220;<em><strong>Crear una nueva variable del tipo Person llamada personB y asginar la misma referencia que tiene la variable personA</strong></em>&#8220;, o simplemente &#8220;<em><strong>Copiar la referencia (y no el contenido) de personA en una nueva variable del tipo Person llamada personB</strong></em>&#8220;. El resultado es que tenemos dos variables apuntando a una única referencia (espacio en memoria) en lugar de dos variables independientes con sus respectivas y diferentes referencias (espacios de memoria). Así, cuando una de las dos variables cambia, cambian las dos. Sí, Java se orienta más a punteros que a objetos, que es más útil en programación a bajo nivel y para ahorra unos bits; no en vano Java se basó en C.</p>
<p>Entonces, Java no facilita una funcionalidad para <strong>duplicar objetos</strong>?!?!?! Java ofrece un interfaz <em>Clonable</em>, pero no su imlementación. Ocurre lo mismo para <strong>comparar dos objetos o comprobar si dos objetos son iguales o imprimir los valores de un objeto</strong>, te obliga a escribirte tu propia implementación para estas funciones de uso común, más común (para un desarrollador) que las interpretaciones estándares, ralentizando el desarrollo al escribir código de poco valor añadido y propenso a los bugs pero sobre todo complicando el mantenimiento ya que tiene que evolucionar al tiempo que evoluciona el negocio.</p>
<p>O utilizar implementaciones genéricas que son peligrosas.</p>
<h3>Duplicación de objetos genérica</h3>
<p>Podemos implementar nuestra propia solución genérica para solucionar esta laguna de Java, o podemos utilizar soluciones ya existentes. Así <em>org.apache.commons.beanutils.BeanUtils</em> parece ofrecernos la solución:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;">Person personB = <span style="color: #006600; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	personB = <span style="color: #009900;">&#40;</span>Person<span style="color: #009900;">&#41;</span> BeanUtils.<span style="color: #006633;">cloneBean</span><span style="color: #009900;">&#40;</span>personA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>En este caso funcionaría, y ahora al volver a ejecutar un cambio en<em> personB</em> no cambiamos <em>personA</em>.</p>
<p>Pero qué pasa si el objeto <em>Person</em> tiene a su vez otros objetos, como por ejemplo un objeto <em>User</em>?</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;">@Test <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> duplication2Test2 <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	User userA<span style="color: #339933;">;</span>
	Person personA, personB<span style="color: #339933;">;</span>
	personA = <span style="color: #000000; font-weight: bold;">new</span> Person<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	personA.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nameA&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	userA = <span style="color: #000000; font-weight: bold;">new</span> User<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	userA.<span style="color: #006633;">setUsername</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;usernameA&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	personA.<span style="color: #006633;">setUser</span><span style="color: #009900;">&#40;</span>userA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	personB = personDuplication.<span style="color: #006633;">duplication2</span><span style="color: #009900;">&#40;</span>personA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	personB.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nameB&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	personB.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setUsername</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;usernameB&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;duplication1Test - personA.name = &quot;</span> + personA.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;duplication1Test - personB.name = &quot;</span> + personB.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;duplication1Test - personA.user.username = &quot;</span> + personA.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getUsername</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;duplication1Test - personB.user.username = &quot;</span> + personB.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getUsername</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Assert.<span style="color: #006633;">assertEquals</span><span style="color: #009900;">&#40;</span>personA.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;nameA&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Assert.<span style="color: #006633;">assertEquals</span><span style="color: #009900;">&#40;</span>personB.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;nameB&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Assert.<span style="color: #006633;">assertEquals</span><span style="color: #009900;">&#40;</span>personA.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getUsername</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;usernameA&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Assert.<span style="color: #006633;">assertEquals</span><span style="color: #009900;">&#40;</span>personB.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getUsername</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;usernameB&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Este Test falla. La razón es simple, <em>BeanUtils</em> duplica las variables primitivas y las variables de tipos de Java como <em>Boolean</em>, <em>Integer</em> o <em>String</em> (que es la que se utiliza en el ejemplo), pero en lugar de duplicar<strong> los objetos que nosotros implementamos</strong> (como el usado en el ejemplo <em>User</em>) <strong>está copiando su referencia</strong>.</p>
<h3>Duplicación profunda de objetos genérica</h3>
<p>Una forma sencilla es<strong> serializar nuestros objetos y desearializarlos en nueva instancia</strong>, para lo que podemos utilizar <em>org.apache.commons.lang.SerializationUtils</em>. La parte negativa de esta solución es que<strong> nuestros objetos deben ser serializables</strong> (implementar el intefaz <em>Serializable</em>), y también todos los objetos que los componen, y también todos los objetos que componen a estos, y también&#8230; por lo cual es una <strong>solución con peligros</strong> de cara al mantenimiento evolutivo.</p>
<p>Por fin, la siguiente implementación pasaría el test anterior:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> Person duplicationPerson<span style="color: #009900;">&#40;</span>Person personSource<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	Person personTarget = <span style="color: #006600; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		personTarget = <span style="color: #009900;">&#40;</span>Person<span style="color: #009900;">&#41;</span> SerializationUtils.<span style="color: #006633;">clone</span><span style="color: #009900;">&#40;</span>personSource<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">return</span> personTarget<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Lo podríamos hacer más genérico sustituyendo el tipo Person por Serializable. Más potencia, más peligro.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-51410"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/I8iShAIYowI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/02/25/copiar-vs-duplicar-objetos-en-java/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/02/25/copiar-vs-duplicar-objetos-en-java</feedburner:origLink></item>
		<item>
		<title>JPA – Tablas diccionario no estándares</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/Cxcp4dBprDk/jpa-tablas-diccionario-no-estandares</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/02/18/jpa-tablas-diccionario-no-estandares#comments</comments>
		<pubDate>Mon, 18 Feb 2013 08:00:27 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[JPA]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5102</guid>
		<description><![CDATA[En el principio de los tiempos para representar &#8220;entidades constantes&#8220;  se utilizaban en Java grupos de constantes públicas. Por ejemplo para monitorizar nuestra aplicación deberíamos saber qué niveles de trazas disponemos, así que en alguna clase deberíamos declarar las siguientes constantes públicas: public static final int DEBUG = 1; public static final int INFO = [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/libro-atril.jpg" rel='lightbox'><img class="alignleft" title="libro en atril" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/libro-atril-300x253.jpg" alt="" width="174" height="146" /></a>En el principio de los tiempos para representar &#8220;<strong>entidades constantes</strong>&#8220;  se utilizaban en Java grupos de <strong>constantes públicas</strong>.</p>
<p>Por ejemplo para monitorizar nuestra aplicación deberíamos saber qué niveles de trazas disponemos, así que en alguna clase deberíamos declarar las siguientes constantes públicas:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #006600; font-weight: bold;">int</span> DEBUG = <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #006600; font-weight: bold;">int</span> INFO = <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span>...<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Esta solución es <strong>poco eficiente</strong> (penaliza mucho el consumo de memoria, alto acoplo entre componentes, difícil refactorización&#8230;).  Además si quieres <strong>persistir</strong> una traza en base de datos, la columna del nivel de trazas debería ser una foreign key a una tabla diccionario que contiviese los niveles de trazas permitidos para preservar la <strong>integridad referencial</strong>.</p>
<p>Este mismo ejemplo se puede aplicar a otra multitud de casuísticas, tan a priori inmutables como el <strong>sexo</strong>, <strong>provincias</strong>, <strong>prefijos telefónicos</strong> o incluso casos más variables con el tiempo pero tan habituales como los <strong>roles</strong> de los usuarios o los <strong>tipos de documentos de identidad aceptables</strong>.</p>
<p>En la última década he visto diversas soluciones para utilizar estas tablas diccionarios en nuestro código implementadas por IBM, o por estudiantes recién salidos de la carrera. Pero desde la aparición de los tipos enumerados en la versión 1.5 de Java, los <strong>enum</strong> se han extendido como la manera más eficiente, elegante y más óptima para representar este tipo de datos. Ligado al desarrollo y aceptación de <strong>JPA</strong>, persistir y recuperar este tipo de datos nunca fue más fácil.</p>
<p>JPA asume que los enumerados que persistes se implementan de forma estándar. Es decir pares de códigos &#8211; descripciones en las que el código es un int y la secuencia comienza en cero.</p>
<p>Para el ejemplo de presentar los <strong>niveles</strong> de la <strong>entidad Traza</strong>, el enumerado que deberíamos implementar de forma estándard podría ser:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">enum</span> TraceLevelType <span style="color: #009900;">&#123;</span>
	TRIVIAL, MENOR, NORMAL, IMPORTANTE, CRITICO<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>que representaría la tabla diccionario  :</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">ID <span style="color: #339933;">-</span> KEY
<span style="color: #cc66cc;">0</span> <span style="color: #339933;">-</span> TRIVIAL
<span style="color: #cc66cc;">1</span> <span style="color: #339933;">-</span> MENOR
<span style="color: #009900;">&#91;</span>...<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Sin embargo <strong>no siempre vamos a poder optar por esta solución estándard</strong>, por ejemplo si no somos los propietarios de la base de datos o si la tabla se comparte con otras aplicaciones / equipos / organizaciones, si hay que ofrecer compatibilidad hacia atrás&#8230;</p>
<p>Un ejemplo de problema para nuestro caso es si a los dos meses de estar en producción necesitamos la necesidad de añadir un nuevo nivel de traza (pej WARNING), tratamos los niveles de traza de forma jerárquica (asumimos que a mayor id mayor importancia), y nuestro nuevo nivel es un nivel intermedio entre normal e importante.</p>
<p>Es decir que para implementar la tabla diccionario de niveles de traza no estándard:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;">ID - KEY
<span style="color: #cc66cc;">10</span> - CRITICO
<span style="color: #cc66cc;">20</span> - IMPORTANTE
<span style="color: #009900;">&#91;</span>...<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Podríamos utilizar el enum</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">enum</span> TraceLevelType <span style="color: #009900;">&#123;</span>
	CRITICO <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span>, IMPORTANTE <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span>, NORMAL <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span>, MENOR <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">40</span><span style="color: #009900;">&#41;</span>,
	TRIVIAL <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Pero no bastaría para que JPA persistiera y recuperase correctamente nuestras entidades Traza.</p>
<p><strong>Una solución sería persistir el nombre del enumerado en lugar del código</strong>, que aunque no me entusiasma y seguramente tendrías un encontronazo con tu DBA, sí solventa el problema y es una solución versátil para mantener la aplicación. En la entidad traza utilizaríamos para mapear la columna:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;">@Column<span style="color: #009900;">&#40;</span>name = <span style="color: #0000ff;">&quot;LEVEL&quot;</span><span style="color: #009900;">&#41;</span>
@Enumerated<span style="color: #009900;">&#40;</span>EnumType.<span style="color: #006633;">STRING</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">private</span> TraceLevelType level<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Otra solución sería explicitar la relación entre código y clave de cada nivel de traza dentro del enum</strong>. Así continuamos persistiendo el código, lo que es más eficiente.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">enum</span> TraceLevelType <span style="color: #009900;">&#123;</span>
	CRITICO <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span>, IMPORTANTE <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span>, NORMAL <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span>, MENOR <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">40</span><span style="color: #009900;">&#41;</span>,
	TRIVIAL <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #006600; font-weight: bold;">long</span> idType<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> TraceLevelType <span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">long</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">idType</span> = id<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">long</span> getIdType<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> idType<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> TraceLevelType parse<span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">long</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		TraceLevelType level = <span style="color: #006600; font-weight: bold;">null</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Default</span>
		<span style="color: #000000;  font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>TraceLevelType item : TraceLevelType .<span style="color: #006633;">values</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>item.<span style="color: #006633;">getIdType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> == id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				level = item<span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> level<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y la entidad Traza quedaría:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java5" style="font-family:monospace;">@Column<span style="color: #009900;">&#40;</span>name = <span style="color: #0000ff;">&quot;LEVEL&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399; font-weight: bold;">Long</span> level<span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span>...<span style="color: #009900;">&#93;</span>
<span style="color: #000000; font-weight: bold;">public</span> TraceLevelType getLevel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">return</span> TraceLevelType .<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">level</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> setLevel<span style="color: #009900;">&#40;</span>TraceLevelType level<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">level</span> = level.<span style="color: #006633;">getIdType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Sí, lo sé, hay static metido de por medio, hay un break, pero no he encontrado una solución mejor hasta la fecha para esta casuística. <strong>Se te ocurre una solución mejor?</strong></p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-51030"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/Cxcp4dBprDk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/02/18/jpa-tablas-diccionario-no-estandares/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/02/18/jpa-tablas-diccionario-no-estandares</feedburner:origLink></item>
		<item>
		<title>Java – Easy Overrided toString()</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/NHdJ23QfIg4/java-easy-overrided-tostring</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/02/12/java-easy-overrided-tostring#comments</comments>
		<pubDate>Tue, 12 Feb 2013 10:59:09 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5088</guid>
		<description><![CDATA[@Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } &#160; ToStringBuilder class belongs to org.apache.commons.lang library.]]></description>
				<content:encoded><![CDATA[<p>@Override<br />
public String toString() {<br />
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);<br />
}</p>
<p>&nbsp;</p>
<p><strong>ToStringBuilder</strong> class belongs to <strong>org.apache.commons.lang</strong> library.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50890"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/NHdJ23QfIg4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/02/12/java-easy-overrided-tostring/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/02/12/java-easy-overrided-tostring</feedburner:origLink></item>
		<item>
		<title>10 rasgos que definen a las personas que consiguen resultados</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/832y2h25l3E/10-rasgos-que-definen-a-las-personas-que-consiguen-resultados</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/02/11/10-rasgos-que-definen-a-las-personas-que-consiguen-resultados#comments</comments>
		<pubDate>Mon, 11 Feb 2013 08:00:51 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Metodología]]></category>
		<category><![CDATA[Result_Oriented]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5091</guid>
		<description><![CDATA[Visto aquí en el blog de Francisco Alcaide. No suelo copiar y pegar en este blog, sí enlazo y ahora retuiteo, pero esto me parece tan reseñable y tan a tener en cuenta por mí mismo ahora, que no puedo por menos que copiar los 10 rasgos comentados por el autor. El artículo original por [...]]]></description>
				<content:encoded><![CDATA[<p>Visto <a href="http://www.franciscoalcaide.com/2012/10/10-rasgos-que-definen-las-personas-que.html">aquí</a> en el blog de <a href="http://www.franciscoalcaide.com">Francisco Alcaide</a>.</p>
<p>No suelo copiar y pegar en este blog, sí enlazo y ahora retuiteo, pero esto me parece tan reseñable y tan a tener en cuenta por mí mismo ahora, que no puedo por menos que copiar los 10 rasgos comentados por el autor. El artículo original por supuesto es más recomendable por que está más desarrollado. Leételo.</p>
<p><strong>10 rasgos que definen a las personas que consiguen resultados</strong></p>
<ol>
<li><strong>Son personas que tienen claro lo que quieren.</strong></li>
<li><strong>Son personas de Acción</strong>.</li>
<li><strong>Son personas disciplinadas</strong>.</li>
<li><strong>Son personas que no pierden el Foco.</strong></li>
<li><strong>Son personas que tienen paciencia.</strong></li>
<li><strong>Son personas que ponen la responsabilidad en ellos mismos.</strong></li>
<li><strong>Son personas que tienen una fuerte Determinación.</strong></li>
<li><strong>Son personas mentalmente sana.</strong></li>
<li><strong>Son personas que se mueven en entornos adecuados.</strong></li>
<li><strong>Son personas que tienen una actitud de mejora continua.</strong></li>
</ol>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50920"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/832y2h25l3E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/02/11/10-rasgos-que-definen-a-las-personas-que-consiguen-resultados/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/02/11/10-rasgos-que-definen-a-las-personas-que-consiguen-resultados</feedburner:origLink></item>
		<item>
		<title>Dónde almacenar nuestro código funcional pero no necesario?</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/8SwAxSPI_0A/donde-almacenar-nuestro-codigo-funcional-pero-no-necesario</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/02/07/donde-almacenar-nuestro-codigo-funcional-pero-no-necesario#comments</comments>
		<pubDate>Thu, 07 Feb 2013 10:16:58 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5070</guid>
		<description><![CDATA[Hoy me ha surgido una duda sobre la organización de código. Resulta que una de las tareas que habíamos definido era borrado de usuarios, lo implementé y testeé, pero ahora nos hemos dado cuenta que esta funcionalidad no se quiere, lo que se desea es un borrado lógico de los usuarios por lo que esta [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/colocacion.jpg" rel='lightbox'><img class="alignleft  wp-image-5071" title="colocacion" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/colocacion.jpg" alt="" width="196" height="143" /></a>Hoy me ha surgido una duda sobre la organización de código.</p>
<p>Resulta que una de las tareas que <strong>habíamos definido</strong> era borrado de usuarios, <strong>lo implementé y testeé</strong>, pero ahora nos hemos dado cuenta que <strong>esta funcionalidad no se quiere</strong>, lo que se desea es un borrado lógico de los usuarios por lo que esta funcionalidad ya implementada y testeada deja de tener sentido.</p>
<ul>
<li>Desde luego, <strong>debe eliminarse del código de producción de la aplicación</strong> (típicamente src/main/java) para que un usuario no lo pueda utilizar.</li>
<li>Podríamos definir un entorno de pruebas transaccional que haga simplemente rollback al acabar, por lo cual esta funcionalidad en concreto <strong>tampoco debería archivarse dentro del código de pruebas</strong> (típicamente src/main/test).</li>
<li><strong>Tampoco es un código tan reutilizable como para almacenarlo en la arquitectura o una clase de utilería</strong>.</li>
</ul>
<p><strong>Sin embargo resulta y resultará útil para realizar pruebas web en el entorno de pruebas</strong> : me creo mi usuario, hago lo que tenga que hacer para probar otras funcionalidades, y luego lo borro (en cascada) y borrando toda su actividad dejando el entorno como si nada hubiese ocurrido, lo cual aunque se trate de un entrono de pruebas, es algo de agraceder para que no interfieras con los datos de otros compañeros. Peligroso en otros entornos, pero útil en pruebas.</p>
<p>Para explicar la situación con una analogía del mundo de la construcción, esta mesa ya no va a añadirse al edificio, no me resulta útil para comprobar la integridad del edificio, pero me resulta útil para mantener el edificio operativo, puedo subirme a ella y cambiar las bombillas del techo.</p>
<p>Mi duda aquí es <strong>qué hacer</strong> con esta funcionalidad en concreto, ya implementada y testeada,  o más en general con el típico código que implementa funcionalidades que no debe subir a producción pero sí te puede resultar útil mientras construyes, testeas, monitorizas o supervisas (y que no son test, aunque eso de hacer test en España está muy mal visto).</p>
<p><strong>Deberíamos implementar este código ad hoc, testearlo, usarlo y luego borrarlo? Deberíamos almacenarlo? Dónde debería estar ese código?</strong></p>
<p>Mi respuesta:</p>
<ul>
<li><strong>Debemos conservarlo</strong>. Si es funcional (está testeado) y me ha resultado útil una vez es probable que me vuelva a resultar útil en el futuro, y es probable que a otro compañero presente o futuro le resulte útil de nuevo.</li>
<li>Debemos conservarlo fuera de la carpeta de producción (títpicamente src/main/java) para que nunca pueda publicarse, es decir no vale comentarlo, tarde o temprano alguien commiteará con el código descomentado, y de pruebas (típicamente src/main/test).</li>
</ul>
<p>Yo lo que suelo hacer es crearme otro paquete (suelo llamarlo src/iplusd/java y/o src/support/java) que no se utiliza al ensamblar el artefacto entregable (vamos, el jar o war), y almacenar allí este tipo de código pero vigilándolo para que no se convierta en un cajón desastre ni se complique tanto como para que haya que documentarlo o crear apis o&#8230;</p>
<p>Y tú, qué haces ante este tipo de situaciones?</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50710"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/8SwAxSPI_0A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/02/07/donde-almacenar-nuestro-codigo-funcional-pero-no-necesario/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/02/07/donde-almacenar-nuestro-codigo-funcional-pero-no-necesario</feedburner:origLink></item>
		<item>
		<title>Resumen 2012 – Emprendiendo</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/5N0GZdRKKKM/resumen-2012-emprendiendo</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/01/31/resumen-2012-emprendiendo#comments</comments>
		<pubDate>Thu, 31 Jan 2013 08:00:26 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Emprender]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5037</guid>
		<description><![CDATA[Crear un empresa es algo que llevo barruntando años porque me permitiría compatibilizar trabajo con mi extraña vida personal, trabajando dónde y cuándo quisiese, haciendo las cosas a mi modo. Y ahora ha sido un buen momento al quedarme sin trabajo. Sin embargo ha sido un FRACASO: a pesar de que la experiencia ha sido [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/failure-success.jpg" rel='lightbox'><img class="alignleft size-full wp-image-5047" title="failure-success" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/02/failure-success.jpg" alt="" width="168" height="168" /></a>Crear un empresa es algo que llevo barruntando años porque me permitiría compatibilizar trabajo con mi extraña vida personal, trabajando dónde y cuándo quisiese, haciendo las cosas a mi modo. Y ahora ha sido un buen momento al quedarme sin trabajo. Sin embargo ha sido un <strong>FRACASO</strong>: a pesar de que la experiencia ha sido muy enriquecedora, a día de hoy poseo 0 empresas.</p>
<h3>Objetivo primario equivocado</h3>
<p>El objetivo principal que me ha movido a intentar crear la empresa ha sido quedarme en Salamanca, lo que supone una restricción innecesaria y a medio plazo creo que ha sido la principal razón de mi fracaso. Debí centrarme en crear una empresa viable, sin importar la localización geográfica, y en un futuro vivir en Salamanca y teletrabajar.</p>
<h3>Encontrar las personas adecuadas</h3>
<p>Todo es más fácil si te rodeas de las personas adecuadas, colaboradores, empleados, socios, proveedores, clientes&#8230; Yo, jugador de equipo que adora estar rodeado de gigantes, me he sentido muy solo y grande en Salamanca.</p>
<p>Ha supuesto una tremebunda decepción a nivel profesional, sobre todo por las altas expectativas que tenía en mi querida ciudad doblemente universitaria (pública y privada). Quizás sea yo, que no he sabido encontrarlas o reconocerlas? Quizás. Pero la mayor empresa de software salmantina fue nuestro proveedor, y sin objetar nada a nivel humano (públicamente), su trabajo fue para donar a un museo: todas las malas prácticas posibles, en 3 meses quitamos la mitad de las líneas de código, rebajamos el peso de 80 megas a 20, el tiempo de arranque de 03:30 minutos a 0:30&#8230; Tardamos 6 meses en incorporar a un desarrollador junior. Sinergia es una palabra desconocida en esta ciudad.</p>
<p>Aunque me duela en el alma, Salamanca no es lugar para emprender software.</p>
<h3>Comunicación primero</h3>
<p>Soy una persona medianamente multidisciplinar: sé un poco de todo, y pensaba que yo mismo podría cubrir todas las áreas mientras encontraba a otra persona y no sería un técnico que piensa que por saber manejar un destornillador puede crear una mesa, y crear una empresa de venta de mesas.</p>
<p>Sin embargo caí en un error fundamental. Pensé que puedo competir en un mercado con un producto mejor y más barato, así que estoy creando un producto y luego ya me esforzaría en abrir el mercado. Pero cuando hice el estudio de mercado a posteriori he descubierto que  no solo que había docenas de soluciones, algunas gratuitas, sino que oh sorpresa, se trata de un mercado menguante en el que migrar es muy costos.</p>
<p>En breve publicaré el proceso de desarrollo de un nuevo producto, que empezaré a seguir en el futuro.</p>
<h3>Enfocarse</h3>
<p>Sabía que no debía ofrecerme a prestar servicios, es decir a hacer páginas web, porque me distraían del objetivo principal de construir un producto que vender y revender, fue un error consciente por razones no profesionales. Además tengo abiertos dos proyectos y ninguno publicado, junto con dos colaboraciones con otras empresas : mucho tiempo y esfuerzo para pocos resultados y premios.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50380"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/5N0GZdRKKKM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/01/31/resumen-2012-emprendiendo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/01/31/resumen-2012-emprendiendo</feedburner:origLink></item>
		<item>
		<title>Resumen 2012 – Proyectos J2EE</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/6th4dV6fj74/resumen-2012-proyectos-j2ee</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/01/30/resumen-2012-proyectos-j2ee#comments</comments>
		<pubDate>Wed, 30 Jan 2013 08:00:40 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5023</guid>
		<description><![CDATA[¿Quieres ayudarme con alguno? Busco preferiblemente a un partner para el área de comunicación, pero cualquier ayuda se agradecería Surecat Por un lado ya tengo casi acabado desde el punto de vista técnico un proyecto muy majo, muy útil y podría fácilmente pasar una fase beta ya mismo; pero le falta comunicación, no sé qué [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/01/proyectos.png" rel='lightbox'><img class="size-medium wp-image-5030 alignright" title="proyectos" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/01/proyectos-300x131.png" alt="" width="300" height="131" /></a></p>
<p>¿Quieres ayudarme con alguno? Busco preferiblemente a un partner para el área de comunicación, pero cualquier ayuda se agradecería <img src='http://www.hachisvertas.net/blog/01/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Surecat</h3>
<p>Por un lado ya tengo casi acabado desde el punto de vista técnico un proyecto muy majo, muy útil y podría fácilmente pasar una fase beta ya mismo; pero le falta comunicación, no sé qué contar de él.</p>
<ul>
<li>Creo que lo llamaré &#8220;<strong>Surecat</strong>&#8220;, por similitud al plugin de Maven &#8220;<a href="http://maven.apache.org/surefire/maven-surefire-plugin/">Surefire</a>&#8220;, por introducir certeza (Sure) en el ámbito de las pruebas y desarrollo, y por homenagear a mis gatos (cat). Bien es cierto que quizás debería llevar alguna referencia a Test, QA o CI.</li>
<li>Su apellido me está bloqueando. Es una aplicación? Es un Framework? Es un Plugin? &#8220;Mejora tu proceso de Integración Continua: + comunicación interna, + automatización de pruebas, + calidad de tu software.&#8221; Sí, lo sé, es abstracto, largo, y cutre. Además tiene que estar en inglés.</li>
<li>La comunicación será en inglés. En España somos muy machos, programamos a calzón quitado, pelo en pecho y una cerveza en la mano, los test son para principiantes y pringaos, así que esta aplicación sobra en España.</li>
<li>Funciona muy bien sobre JUnit o sobre el framework de test de Spring, pero puede mejorar cualquier otro framework. Su extensión a otros lenguajes de programación no parece difícil, pero solo tengo dos manos.</li>
</ul>
<p>Cabe destacar que ha sido mi primer desarrollo de cero utilizando <strong>TDD</strong>, y ha sido <strong>una experiencia muy negativa</strong> que me ha hecho <strong>replantearme la opinión que me merecen destacados profesionales de nuestra industria</strong>. Pero esto para otro post, ya que supongo que será polémico y habrá que razonarlo suficientemente.</p>
<h3>GesPYME</h3>
<p>Aplicativo para llevar la gestión de tu pequeño o mediano negocio, ya seas autónomo o empresario. El nombre es evidentemente temporal. Todas los posibles usuarios de este producto me han comentado su disgusto con sus actuales aplicaciones por sus errores, mal interfaz, elevados precios y pésimo soporte, así que yo creía que había mercado y que podía hacerlo mejor que los competidores a pesar de las dificultades (diferentes y variables legislaciones y negocios).</p>
<p>La parte técnica de negocio y persistencia está muy cuca, una arquitectura basada en <strong>Spring</strong> + <strong>Hibernate</strong> muy genérica, potente, extensible y fácil de entender. Había automatizado el modelado de datos con <a href="http://www.mysql.com/products/workbench/" target="_blank">MySQL Workbench</a> e <a href="http://www.hibernate.org/subprojects/tools.html" target="_blank">Hibernate Tools</a> (aún no disponible para <strong>Eclipse Juno</strong>!) para generar y mantener actualizados el modelo y la base de datos de forma gráfica.</p>
<p>Al llegar a la capa de vista me he encontrado con un iceberg estupendo. He decidido utilizar <a href="http://docs.oracle.com/javase/tutorial/uiswing/" target="_blank">Java Swing</a> porque la voy a hacer de momento una aplicación de escritorio por razones de negocio, y porque así el día de mañana implementarlo en GWT debería ser fácil, me estoy encontrando sapo tras sapo.</p>
<p>Verborrea de código y framework muy rudimentario y rígido, tengo el triple de líneas de código en la capa de vista que en todo el resto de la aplicación, y aún no he resuelto dos problemas funcionales importantes y genéricos : botones en las tablas de datos e inyección de los controladores en los elementos de vista.</p>
<p>&nbsp;</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50240"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/6th4dV6fj74" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/01/30/resumen-2012-proyectos-j2ee/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/01/30/resumen-2012-proyectos-j2ee</feedburner:origLink></item>
		<item>
		<title>Resumen 2012 – Juzgados, Fogasa, Subvención de Desempleo</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/uR-JFLkP0fI/resumen-2012-juzgados-fogasa-subvencion-de-desempleo</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/01/29/resumen-2012-juzgados-fogasa-subvencion-de-desempleo#comments</comments>
		<pubDate>Tue, 29 Jan 2013 08:00:29 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Mis Delirios]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5013</guid>
		<description><![CDATA[Hace unos dos años dejé Madrid para vivir en Salamanca y me compré una casa. La empresa quebró, dejamos de cobrar en Diciembre de 2011 hasta que en Mayo de 2012 un juzgado disolvió nuestra relación contractual, permitiéndonos así pasar a cobrar la subvención por desempleo (primer ingreso en Julio de 2012) y reconociendo nuestra [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/01/unemployment-rise.jpg" rel='lightbox'><img class="alignleft size-full wp-image-5020" title="unemployment-rise" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2013/01/unemployment-rise.jpg" alt="" width="251" height="201" /></a>Hace unos dos años dejé Madrid para vivir en Salamanca y me compré una casa. <strong>La empresa quebró</strong>, dejamos de cobrar en Diciembre de 2011 hasta que en Mayo de 2012 <strong>un juzgado disolvió nuestra relación contractual</strong>, permitiéndonos así pasar a cobrar la <strong>subvención por desempleo</strong> (primer ingreso en Julio de 2012) y reconociendo nuestra deuda que no vamos a cobrar por la más que evidente insolvencia de la empresa.</p>
<p>Justicia? Gratuita? Dicho sea de paso,<strong> necesité contratar un abogado para realizar las gestiones</strong> ya que me fue imposible encontrar la ayuda necesaria en los propios juzgados. Cuando pregunté a un funcionario cuántas copias de mi denuncia debía entregar en el registro, la respuesta fue &#8220;es evidente cuántas, una para cada parte&#8221;, sin conseguir ninguna aclaración a tan sabia respuesta. Por cierto, en el registro no supieron decirme ni siquiera la perogrullada anterior. La respuesta correcta debería ser &#8220;cero, pásate por el registro y te toman declaración, redactan la denuncia, hacen las copias, las compulsan y se encargan de entregárselas a cada parte&#8221;.</p>
<p>A día de hoy <strong>Fogasa</strong> no nos ha pagado,  pero además <strong>no sabemos aún cuánto (ni cuándo) cobraremos</strong> ya que durante el proceso el Gobierno cambió la cantidad cubierta por este fondo para el salario a prácticamente la mitad y aunque debería no ser retroactivo nos tememos lo peor; eso sí, no me toques mi indemnización, que se ve es más importante que el salario por la (nula) reacción de los trabajadores a este despropósito.</p>
<p>El día 3 de Diciembre tenía que fichar el paro por segunda vez, pero se me pasó y fiché el 10 de Diciembre, lo que me ha hecho <strong>perder la subvención de Diciembre</strong>. Esta semana voy a empezar a moverlo, no para recuperar esa cantidad sino para intentar <strong>evidenciar la injusticia e inutilidad de un sistema que me penaliza por buscar trabajo</strong> (firmé un nuevo contrato el 13 de diciembre después de dos semanas de negociaciones). Aunque la cifra de 6 millones de parados ya habla por sí sola.</p>
<p>Parece que olvidamos que el Fogasa o la prestación por desempleo no son caridad, no son un favor que nos hace el Estado, sino que <strong>son seguros por los que hemos estado cotizando durante años</strong> pagando unas <strong>cotizaciones sociales altísimas</strong> en relación con lo recibido a cambio e <strong>injustas hasta el punto en que nunca los contrataría si fuesen opcionales o privados</strong>, <strong>máxime después de dejarnos en la estacada cuando son necesarios</strong>.</p>
<p>Desde luego si Larra levantase hoy la cabeza, no vería mucho cambio en la Administración Pública. Dejo a vuestra consideración la necesidad de un juzgado para poder cobrar lo que es nuestro, de un abogado para que un juzgado reconozca una deuda y disuelva un contrato, los plazos (nos dijeron que no es normal que el proceso fuese tan rápido), el cambio posiblemente retroactivo sobre la cantidad cubierta por el salario y el no cambio sobre la cantidad cubierta por las indemnizaciones, así como el patético sistema del inútil SEPE/ECYL&#8230;</p>
<p>Y eso que no he hablado de la educación, ni del despropósito de la nueva zona urbanizable del cementerio de Salamanca, ni de las ruinosas cuentas de nuestro Ayuntamiento, Comunidad y Estado, ni de la no separación de poderes, ni de&#8230; Pero permitidme insistir, la culpa no es de políticos, es tuya, es mía, es nuestra.</p>
<blockquote><p>El mundo no es como es; el mundo es como lo hacemos todos nosotros, todos los días.</p>
<p>Cámbiate a ti para cambiar al mundo.</p></blockquote>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50140"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/uR-JFLkP0fI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/01/29/resumen-2012-juzgados-fogasa-subvencion-de-desempleo/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/01/29/resumen-2012-juzgados-fogasa-subvencion-de-desempleo</feedburner:origLink></item>
		<item>
		<title>Nuevas cuentas de Twitter</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/RDwI1TIwG3w/nuevas-cuentas-de-twitter</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/01/28/nuevas-cuentas-de-twitter#comments</comments>
		<pubDate>Mon, 28 Jan 2013 09:48:28 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[MetaBlog]]></category>
		<category><![CDATA[@jcalvosanchez]]></category>
		<category><![CDATA[@yoyoooyoy1]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5017</guid>
		<description><![CDATA[Quiero agradecer a los más de 90 suscriptores vuestra paciencia, no he tenido mucho tiempo para este blog. Aprovecho para comunicaros que me he dado de alta dos cuentas de twitter, una que utilizaré para temas personales (@yoyoooyoy1) y otra para temas profesionales (@jcalvosanchez).]]></description>
				<content:encoded><![CDATA[<p>Quiero agradecer a los más de 90 suscriptores vuestra paciencia, no he tenido mucho tiempo para este blog.</p>
<p>Aprovecho para comunicaros que me he dado de alta dos cuentas de twitter, una que utilizaré para temas personales (<a href="https://twitter.com/yoyoooyoy1" target="_blank">@yoyoooyoy1</a>) y otra para temas profesionales (<a href="https://twitter.com/jcalvosanchez" target="_blank">@jcalvosanchez</a>).</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50180"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/RDwI1TIwG3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/01/28/nuevas-cuentas-de-twitter/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/01/28/nuevas-cuentas-de-twitter</feedburner:origLink></item>
		<item>
		<title>Eclipse – Garbage Collector</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/y5RUcSm4CuQ/eclipse-garbage-collector</link>
		<comments>http://www.hachisvertas.net/blog/01/2013/01/11/eclipse-garbage-collector#comments</comments>
		<pubDate>Fri, 11 Jan 2013 08:58:39 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=5008</guid>
		<description><![CDATA[Estos días me estoy enfrentando a un trabajo con un uso abusivo de memoria (en mi opinión muy innecesario), así que he recordado que cuando era joven y utilizaba el Intelligent Idea en otro trabajo de este estilo, la opción de invocar al colector de basura de la JVM me resultaba muy útil, porque la [...]]]></description>
				<content:encoded><![CDATA[<p>Estos días me estoy enfrentando a un trabajo con un uso abusivo de memoria (en mi opinión muy innecesario), así que he recordado que cuando era joven y utilizaba el <a href="http://www.jetbrains.com/idea/" target="_blank">Intelligent Idea</a> en otro trabajo de este estilo, la opción de invocar al colector de basura de la JVM me resultaba muy útil, porque la alternativa era reiniciar constantemente mi IDE.</p>
<p>Por defecto no puedes hacerlo en <a href="http://www.eclipse.org/" target="_blank">Eclipse</a>, debes ir a Preferences &gt; General y activar el check de &#8220;Show heap status&#8221;.</p>
<p>Relacionado, voy a echar un ojo al <a href="http://www.eclipse.org/mat/" target="_blank">Memory Analyzer</a> de Eclipse.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-50090"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/y5RUcSm4CuQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2013/01/11/eclipse-garbage-collector/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2013/01/11/eclipse-garbage-collector</feedburner:origLink></item>
		<item>
		<title>Jane McGonigal: The game that can give you 10 extra years of life</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/j8KvWNCVJgk/jane-mcgonigal-the-game-that-can-give-you-10-extra-years-of-life</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/11/26/jane-mcgonigal-the-game-that-can-give-you-10-extra-years-of-life#comments</comments>
		<pubDate>Mon, 26 Nov 2012 08:00:55 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Conferencias]]></category>
		<category><![CDATA[Resilencia]]></category>
		<category><![CDATA[vital]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4992</guid>
		<description><![CDATA[Jane McGonigal es una diseñadora de juegos considerada como una de las 20 personas más influyentes en su sector empeñada en hacer de este mundo un lugar mejor. Jane un ejemplo perfecto de resilencia sobre cómo superar en evento traumático. Sufrió un golpe en la cabeza mal curado, lo que la obligó a batallar literalmente [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://janemcgonigal.com/">Jane McGonigal</a> es una diseñadora de juegos considerada como una de las 20 personas más influyentes en su sector empeñada en hacer de este mundo un lugar mejor.</p>
<p>Jane un ejemplo perfecto de <a href="http://en.wikipedia.org/wiki/Psychological_resilience"><strong>resilencia</strong></a> sobre cómo superar en <strong>evento traumático</strong>. Sufrió un golpe en la cabeza mal curado, lo que la obligó a batallar literalmente por su vida durante un año, pero este importante trauma en su vida la ha convertido en una mejor persona, lo que llama <strong>crecimiento post-traumático</strong> en contrapartida a estrés post-traumático.</p>
<p>En esta charla nos, cuenta de una manera clara y muy documentada, su experiencia traumática, cómo la superó y cómo su experiencia nos puede beneficiar a todos nosotros sin necesidad de pasar por un calvario durante todo un año.</p>
<p><iframe src="http://embed.ted.com/talks/jane_mcgonigal_the_game_that_can_give_you_10_extra_years_of_life.html" frameborder="0" scrolling="no" width="504" height="315"></iframe></p>
<blockquote><p>A traumatic event doesn&#8217;t doom us to suffer indefinitely. Instead, we can use it as a springboard to unleash our best qualities and lead happier lives.</p></blockquote>
<p>Para lograr sacar provecho de su traumatismo, Jane diseñó un juego, <a href="https://www.superbetter.com/"><strong>Super Better</strong></a> (&#8220;Super mejor&#8221;), que ha refinado con otras personas en situaciones vitales críticas. El juego te propone <strong>4 simples quest a realizaar cada hora</strong>:</p>
<ol>
<li>Super Better Quest 1: <strong>Resilencia física</strong>. Elegir entre levantarse y andar 3 pasos o levantar los manos formando un puño tan alto como puedas durante 5 segundos. Mejora la capacidad de esfuerzo y recuperación del cuerpo.</li>
<li>Super Better Quest 2: <strong>Resilencia mental</strong>. Elegir entre chascar los dedos exactamente 50 veces o contar desde cien hacia atrás en pasos de 7 (100, 93, 86&#8230;). Mejora el foco mental y la fuerza de voluntad.</li>
<li>Super Better Quest 3: <strong>Resilencia emocional</strong>. Elegir entre si estás en un interior busca una ventana y mira fuera (si estás fuera mira dentro) o busca una imagen de algún cachorro. Gestionando 3 emociones positivas por cada 1 emoción negativa mejoramos nuestra salud y habilidad para superar cualquier obstáculo.</li>
<li>Super Better Quest 4: <strong>Resilencia social</strong>. Elegir en estrechar la mano de otra persona durante 6 segundos o dar las gracias a alguien (aunque sea vía electrónica). Mejora la confianza en los demás y el deseo de ayudar.</li>
</ol>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-49930"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/j8KvWNCVJgk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/11/26/jane-mcgonigal-the-game-that-can-give-you-10-extra-years-of-life/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/11/26/jane-mcgonigal-the-game-that-can-give-you-10-extra-years-of-life</feedburner:origLink></item>
		<item>
		<title>Scrum, en menos de 500 palabras</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/a2o-U9tpygU/scrum-en-menos-de-500-palabras</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/11/19/scrum-en-menos-de-500-palabras#comments</comments>
		<pubDate>Mon, 19 Nov 2012 08:00:39 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Gestión]]></category>
		<category><![CDATA[Metodología]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4969</guid>
		<description><![CDATA[Scrum es una metodología de trabajo ágil, iterativa e incremental para equipos multifuncionales y autogestionados. Roles Product Owner. Responsable del Valor del proyecto, y de la gestión del Product Backlog. Scrum Master. Responsable de la produtividad, madurez y enfoque del equipo. Supervisión de la pila de producto, y comunicación con el Product Owner para pedirle [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Scrum</strong> es una metodología de trabajo <a href="http://agilemanifesto.org/">ágil</a>, iterativa e incremental para equipos multifuncionales y autogestionados.</p>
<h3>Roles</h3>
<ul>
<li><strong>Product Owner</strong>. Responsable del Valor del proyecto, y de la gestión del Product Backlog.</li>
<li><strong>Scrum Master</strong>. Responsable de la produtividad, madurez y enfoque del equipo. Supervisión de la pila de producto, y comunicación con el Product Owner para pedirle aclaración de las dudas que pueda tener, o asesorarle para la subsanación de las deficiencias que observe.</li>
<li><strong>Equipo</strong>. O Equipos, cuyos miembros son multifuncionales y se autogestionan.</li>
</ul>
<h3>Artefactos</h3>
<ul>
<li><strong>Producto</strong>, es el sistema en construcción, tanto el ya construido y operativo como el trabajo por realizar.</li>
<li><strong>Incremento</strong>, es la parte o subsistema que se produce en un sprint y se entrega al Product Owner completamente terminada y &#8221;&#8217;operativa&#8221;&#8217;.</li>
<li><strong>Product Backlog</strong>. Es una Pila de trabajo (ordenada por prioridad) dinámica que contiene las historias de usuario a implementar y que definirán al sistema.</li>
<li><strong>Sprint Backlog</strong>. Es el conjunto de trabajo obtenido del Product Backlog que el Equipo y el Product Owner deciden incluir en la próxima iteración y que generará un Incremento en el Producto.</li>
<li><strong>Burndown Chart</strong>. Gráfico que muestra el avance y trabajo restante de la Iteración.</li>
</ul>
<h3>Actividades</h3>
<ul>
<li><strong>Sprint Planning</strong>. Reunión entre el equipo y el Product Owner para elegir qué trabajo se va a entregar al concluir la iteración.</li>
<li><strong>Daily Técnico</strong>. El equipo comparte brevemente (5 ó 10 minutos) el estado y progreso de su trabajo, así como las dificultades que se va encontrando.</li>
<li><strong>Sprint reviews</strong>. Demo en la que el equipo muestra al Producto Owner el trabajo completado durante la iteración, sobre el propio trabajo completado.</li>
<li><strong>Sprint retrospectives</strong>. Reunión en la que el equipo busca formas de mejorar el producto y el proceso.</li>
</ul>
<h3>Proceso</h3>
<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2012/11/Scrum_Framework_Flow.png" rel='lightbox'><img class="aligncenter" title="Scrum_Framework_Flow" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2012/11/Scrum_Framework_Flow-300x175.png" alt="" width="300" height="175" /></a></p>
<p>1. El Product Owner crea la Pila priorizada de trabajo del Producto.<br />
2. En la Planificación de la Iteración, se crea la Pila de trabajo de la Iteración a partir del tope de la Pila de trabajo del Producto, y el equipo dedice cómo se implementará.<br />
3. El equipo dispone de un plazo de tiempo para completar su trabajo, Iteración típicamente de 2 a 4 semanas, pero se reune diariamente para controlar el progreso.<br />
4. Durante todo el proceso, el ScrumMaster mantiene al equipo enfocado en su meta.<br />
5. Al finalizar la Iteración, el trabajo es potencialmente entregable.<br />
6. La Iteración concluye con una Revisión y una Retrospectiva.<br />
7. Se repite nuevamente desde el segundo paso.</p>
<h3>Referencias</h3>
<ul>
<li>[ENG] Scrum en <a href="http://www.scrumalliance.org/pages/scrum_101">Scrum Alliance</a>.</li>
<li>[ENG] <a href="http://www.axosoft.com/ontime/videos/scrum">Scrum Master in under 10 minutes</a>, video de <strong>Axosoft</strong>, creadores de la herramienta de gestión <strong>OnTime</strong> basada en Scrum.</li>
<li>[ESP] <a href="http://www.navegapolis.net/content/view/694/">Flexibilidad con Scrum</a>, un libro en formato PDF gratuito escrito por Juan Palacio de la siempre recomendable <strong>Navegapolis</strong>.</li>
</ul>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-49700"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/a2o-U9tpygU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/11/19/scrum-en-menos-de-500-palabras/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/11/19/scrum-en-menos-de-500-palabras</feedburner:origLink></item>
		<item>
		<title>Biografía de George Washington</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/nWtys6g9gfE/biografia-de-george-washington</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/11/12/biografia-de-george-washington#comments</comments>
		<pubDate>Mon, 12 Nov 2012 08:00:10 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Biografía]]></category>
		<category><![CDATA[George Washington]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4925</guid>
		<description><![CDATA[George Washington (1732 &#8211; 1799) fue sin duda uno de los personajes más influyentes del siglo XVIII debido a su importante papel en la  Guerra de la Independencia de los Estados Unidos como Comandante en Jefe del Ejercito Continental que culminó con la escisión de las 13 colonias americanas del Reino de Gran Bretaña, su [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2012/10/501px-Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg" rel='lightbox'><img class="alignleft size-thumbnail wp-image-4899" title="501px-Gilbert_Stuart_Williamstown_Portrait_of_George_Washington" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2012/10/501px-Gilbert_Stuart_Williamstown_Portrait_of_George_Washington-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://es.wikipedia.org/wiki/George_Washington" target="_blank">George Washington</a> (1732 &#8211; 1799) fue sin duda uno de los personajes más influyentes del siglo XVIII debido a su importante papel en la  <a title="Guerra de la Independencia de los Estados Unidos" href="http://es.wikipedia.org/wiki/Guerra_de_la_Independencia_de_los_Estados_Unidos">Guerra de la Independencia de los Estados Unidos</a> como <strong>Comandante en Jefe del Ejercito Continental</strong> que culminó con la escisión de las 13 colonias americanas del Reino de Gran Bretaña, su importante papel en la unión de las 13 colonias después de su Independencia en una <strong>Confederación de Estados</strong> que adoptaron la <a href="http://es.wikipedia.org/wiki/Republica" target="_blank">República</a> como forma de gobierno y se conoció como los <strong>Estados Unidos de América</strong>, y su liderazgo como primer <strong>Presidente</strong> esta confederación durante dos mandatos (de 1789 a 1797).</p>
<p>Washington nació en el seno de una familia adinerada de terratenientes en Virginia, en la que pronto fallecieron su padre Augustine (cuando Washington tenía 11 años) y su hermano mayor Lawrence (cuando Washington tenía 20 años) quién heredó el rol de padre. Se educó únicamente en América bajo la tutela de varios maestros en <strong>un estilo de vida tranquilo, de trabajos de sol a sol diarios, organizando a sus trabajadores y planificando las siguientes temporadas</strong>. Esta educación se reflejó posteriormente no solo en su estilo de liderazgo, sino también en su visión de <a href="http://en.wikipedia.org/wiki/Mount_Vernon">Mount Vernon</a>, su plantación, como un adelanto del paraíso en la tierra. Su amor por la tierra le llevó a tomar como primera profesión la <strong>topografía</strong>, reconociendo, cartografiando y registrando terrenos inexplorados como funcionario público, habilidad que posteriormente le resultó muy útil en <a href="http://www.hachisvertas.net/blog/01/2011/08/29/el-arte-de-la-guerra-de-sun-tzu">el arte de la guerra</a>.</p>
<p>Tras la muerte de su hermano Lawrence su posición como General Adjunto en la milicia estatal fue dividido en cuatro oficinas, siendo nombrado Washington responsable de una de ellas con el rango de <strong>Mayor</strong> (estos rangos no estaban homologados en el ejército regular inglés), comenzando a sus <strong>21 años de edad</strong> su carrera militar luchando junto al ejército regular inglés en las <strong>guerras contra los franceses e indios por el control de Ohio</strong>. A pesar de que su primera expedición acabó en <strong>derrota y captura</strong>, y de que su segunda expedición como ayudante de campo del veterano <strong>general inglés Braddock</strong> <a href="http://es.wikipedia.org/wiki/Expedici%C3%B3n_Braddock">resultó un desastre</a> [1] debido a la falta de experiencia del general en combate en tierras vírgenes, Washington fue muy tenido en cuenta durante la campaña y su actuación tras la derrota organizando los restos del ejército y retirándose de una forma ordenada, le sirvieron para ser promocionado a <strong>Coronel</strong> y <strong>Comandante en Jefe</strong> de las milicias de Virginia a sus <strong>23 años de edad</strong>.</p>
<p>Al mando de la primera unidad militar americana a tiempo completo, que contaba con alrededor de 1.000 hombres, sus órdenes fueron proteger las fronteras de Virginia, labor en la que destacó respecto a otras colonias cuyas milicias estaban formadas por unidades a tiempo parcial. A sus <strong>26 años de edad</strong>, renunció a su cargo retirándose a Mount Vernon para hacerse cargo de sus obligaciones y negocios personales.</p>
<p>Durante esta época Washington ya gozaba de una gran reputación militar a nivel colonial y americano, así como un elevado estatus social, que se ampliaron como consecuencia de su exitosa actividad mercantil (favorecida por el matrimonio a sus <strong>27 años de edad</strong> con la adinerada viuda <a title="Martha Washington" href="http://en.wikipedia.org/wiki/Martha_Washington">Martha Dandridge Custis</a>), su asentamiento en la élite social estatal [2], su elocuencia y dialéctica, así como su compromiso como ciudadano, hasta llevarle a iniciar su carrera política a sus <strong>33 años de edad</strong> ingresando en la asamblea estatal y siendo uno de los líderes del <strong>movimiento colonial</strong> que buscaba el reconocimiento de <strong>igualdad entre colonos y ciudadanos ingleses</strong>. Este conflicto comenzó con la sanción del primer impuesto directo sobre las colonias (la <a href="http://en.wikipedia.org/wiki/Stamp_Act_1765">Ley del Timbre</a> en 1765), fue escalando uniendo a las colonias en el <a href="http://es.wikipedia.org/wiki/Primer_Congreso_Continental">I Congreso Continental</a>, y derivó finalmente en el conflicto armado entre las dos partes conocido como <a href="http://es.wikipedia.org/wiki/Revoluci%C3%B3n_estadounidense">Guerra de la Independencia de los EEUU o Revolución Americana</a>.</p>
<p>El <a href="http://es.wikipedia.org/wiki/Segundo_Congreso_Continental">II Congreso Continental</a> en 1775 aprobó la formación del Ejército Continental y el nombramiento unánime de Washington como <strong>Comandante en Jefe</strong> del mismo en a sus <strong>43 años de edad</strong>. Un año después, Washington fue uno de los padres de la <a href="http://es.wikipedia.org/wiki/Declaraci%C3%B3n_de_Independencia_de_los_Estados_Unidos">Declaración de Independencia de los EEUU</a> a sus <strong>44 años de edad</strong>. El conflicto armado finalizó 8 años después con el reconocimiento por parte del Imperio Británico de la independencia de los EEUU en el <a href="http://es.wikipedia.org/wiki/Tratado_de_Par%C3%ADs_(1783)">Tratado de París</a> de 1783. Partiendo en clara desventaja, con tropas inexpertas y una permanente escasez de dinero, equipo militar, ropa e incluso comida (se estima que de las 25mil bajas totales durante la campaña, unas 10mil bajas fueron por inanición y unas 7mil más por enfermedades), sin armada, aplicando tácticas de desgaste que le valieron el sobrenombre de <a href="http://es.wikipedia.org/wiki/T%C3%A1cticas_Fabianas" target="_blank">Fabio</a>, se logró una victoria contra todo pronóstico ante el mayor ejército y armada del momento gracias a la guerra en Europa entre la alianza española y francesa contra el enemigo común inglés y la <a href="http://en.wikipedia.org/wiki/Franco-American_alliance" target="_blank">alianza con Francia en 1778</a> (y aunque Irving no lo menciona también España).</p>
<p>El nacimiento del nuevo estado americano no fue inmediato. Finalizado el conflicto armado desapareció el enemigo común de las 13 colonias y con su libertad debían escoger entre convertirse en 13 estados o una coalición de estados o una solución mixta de confederaciones. Washington influyó decisivamente durante estos años, presidiendo a sus <strong>55 años de edad</strong> la convención que dio a luz la <a href="http://es.wikipedia.org/wiki/Convenci%C3%B3n_de_Filadelfia" target="_blank">Constitución de 1787</a> la confederación se convirtió en nación con el apoyo de la mayoría de los ciudadanos, pero aún hoy persisten entre los ciudadanos corrientes en contra de un poder federal fuerte.</p>
<p>Este liderazgo unionista le valió la elección unánime como <strong>Primer Presidente</strong> de la nación en 1789 a sus <strong>57 años de edad</strong>, con <a href="http://es.wikipedia.org/wiki/John_Adams" target="_blank">John Adams</a> como vicepresidente. En su primer mandato fue muy cuidadoso, siendo consciente de que todo lo que hacía establecería un precedente, alejando al gobierno de las formas de gobierno europeas (República vs Monarquía), eligiendo a su equipo, delegando y resolviendo conflictos entre los dos partidos que surgieron (<a href="http://es.wikipedia.org/wiki/Partido_Federalista" target="_blank">partidarios de Alexander Hamilton</a> y <a href="http://es.wikipedia.org/wiki/Partido_Dem%C3%B3crata-Republicano_de_los_Estados_Unidos" target="_blank">partidarios de Thomas Jefferson</a>). La <strong>asunción de la deuda de la guerra por parte del gobierno federal</strong> fue el primer paso para ejecutar su derecho a imponer <strong>impuestos federales</strong>, precisamente para sufragar dicha deuda, lo que generó un movimiento de resistencia armado conocido como la <a href="http://es.wikipedia.org/wiki/Rebeli%C3%B3n_del_Whisky">Rebelión del Whiskey</a>, que fue sofocado enérgicamente pero sin apenas muertes.</p>
<p>Al finalizar su primer mandato en 1793 volvió a ser elegido unánimemente para un <strong>segundo mandato</strong>. Formalizó las <strong>relaciones y el comercio con Gran Bretaña</strong> con el <a href="http://en.wikipedia.org/wiki/Jay_Treaty" target="_blank">Tratado de Jay</a> de 1794 a la vez que mantuvo una <strong>estricta neutralidad en la guerra entre la Francia revolucionaria</strong> y los ingleses, pero se encontró con una gran oposición interna ya que el pueblo quería unirse a Francia por la afinidad a su gobierno, en devolución a la ayuda prestada y por algunos incumplimientos ingleses del Tratado de París.</p>
<p>Al finalizar este segundo mandato renunció a presentarse a la reelección y distribuyó un pequeño texto de despedida publicado por todo el país y aún hoy recordado en el Senado, conocido con el título de &#8220;Despedida de Washington&#8221; (<a href="http://en.wikipedia.org/wiki/George_Washington%27s_Farewell_Address" target="_blank">Washington&#8217;s Farewell Address</a>, cuyo texto original puedes consultar <a href="http://en.wikisource.org/wiki/Washington%27s_Farewell_Address" target="_blank">aquí</a>). La sensación de una guerra inminente contra Francia por las debilitadas relaciones causadas por el Tratado de Jay le llevó a aceptar un último servicio en 1798 como <strong>Comandante en Jefe</strong> para preparar un ejército que sirviese en una emergencia.</p>
<p>George Washington, salvo por el último servicio público mencionado, consiguió su objetivo de <strong>retirarse de la vida pública</strong> en su plantación de Mount Vernon, viviendo una vida tranquila dirigiendo su plantación hasta su <strong>muerte</strong> en 1799 a los <strong>67 años de edad</strong>.</p>
<p><strong>Campañas durante la Revolución Americana</strong></p>
<ul>
<li>Asedio americano a Bostón.</li>
<li>Desembarco inglés en New York.</li>
<li>Victoria en Trenton y rapiña en New Jersey.</li>
<li>Campaña en el Norte: Ticonderoga y Saratoga.</li>
<li>Pérdida de Philadelphia.</li>
<li>El cabal de Conway.</li>
<li>Campamentos en Morristown y Valley Forgue.</li>
<li>Victoria en Yorktown.</li>
<li>Desmobilización del ejército federal.</li>
</ul>
<p><strong>Notas</strong></p>
<p>[1] La humillantemente derrota de Braddock ha sido ampliamente estudiada ya que su rival era muy inferior en número, equipamiento, experiencia y mando. La determinación de un oficial francés en tomar el mando de un destacamento para preparar una emboscada convenció al comandante francés a última hora, cuando el ejército de Braddock esta a escasos kilómetros del fuerte que ocupaba, dado que no tenía nada que perder al estar decidido a rendir el fuerte sin condiciones. Tan a última hora tomó la decisión que a la expedición franco-india no le dió tiempo de tomar posiciones y se topó con la vanguardia de Braddock, comandada por Gates, poco después de haber cruzado un río. Al oir los disparos una parte del cuerpo central de Braddock se apresuró en cruzar el río, topándose con la vanguardia que se estaba retirando y haciendo fuego contra los pocos que se habían quedado</p>
<p>[2] Durante su estancia en Mount Vernon, Washington llegó a invitar a unas 2.000 personas de alto rango social, mientras ordenó tratar al resto de personas de una manera civilizada pero manteniéndoles en una prudencial distancia para que la familiaridad del trato no socavase su <strong>autoridad</strong>.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-49260"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/nWtys6g9gfE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/11/12/biografia-de-george-washington/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/11/12/biografia-de-george-washington</feedburner:origLink></item>
		<item>
		<title>Biografía de George Washington, por Irving Washington</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/Dly6lfNx1_Q/biografia-de-george-washington-por-irving-washington</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/11/04/biografia-de-george-washington-por-irving-washington#comments</comments>
		<pubDate>Sun, 04 Nov 2012 08:00:12 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Libros]]></category>
		<category><![CDATA[George Washington]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4897</guid>
		<description><![CDATA[Washington Irving (1783 &#8211; 1859) fue un escritor estadounidense del Romanticismo que también llegó a ser Embajador en España de los Estados Unidos de América. Fue autor del cuento sobre la Leyenda de Sleepy Hollow, varias obras ambientadas en España y también de trabajos históricos como su meticulosa y estudiada Biografía sobre George Washington, personaje [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.hachisvertas.net/blog/01/wp-content/uploads/2012/10/421px-Irving-Washington-LOC.jpg" rel='lightbox'><img class="alignleft size-thumbnail wp-image-4898" title="421px-Irving-Washington-LOC" src="http://www.hachisvertas.net/blog/01/wp-content/uploads/2012/10/421px-Irving-Washington-LOC-150x150.jpg" alt="" width="150" height="150" /></a><strong>Washington Irving</strong> (1783 &#8211; 1859) fue un escritor estadounidense del Romanticismo que también llegó a ser Embajador en España de los Estados Unidos de América. Fue autor del cuento sobre la <a href="http://es.wikipedia.org/wiki/La_leyenda_de_Sleepy_Hollow" target="_blank">Leyenda de Sleepy Hollow</a>, varias obras ambientadas en España y también de trabajos históricos como su meticulosa y estudiada <strong>Biografía sobre George Washington</strong>, personaje al que debe su nombre de pila sobre quien se comenta conoció brevemente cuando era un niño.</p>
<p>La obra es voluminosa, muy bien documentada y contextualizada, y resulta muy fácil de leer. Incluso hay momentos en los que echas de menos más datos del contexto histórico y personajes claves. Sin duda es <strong>muy recomendable</strong> aunque exija paciencia para llegar al final.</p>
<p>Próximamente publicaré los datos biográficos de George Washington.</p>
<blockquote><p>Siento el mayor desprecio por las personas que son capaces de planificar medidas que no se atreven a poner en práctica.</p></blockquote>
<p style="text-align: right;"><a href="http://en.wikipedia.org/wiki/Joseph_Reed_%28jurist%29">Joseph Reed</a></p>
<blockquote><p>Lo que no se consigue en casa, nunca puede tener éxito fuera.</p></blockquote>
<p style="text-align: right;">George Washington</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-48980"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/Dly6lfNx1_Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/11/04/biografia-de-george-washington-por-irving-washington/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/11/04/biografia-de-george-washington-por-irving-washington</feedburner:origLink></item>
		<item>
		<title>WebWitheBoard, tablero online colaborativo gratuito</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/3eyguvRVt2c/webwitheboard-tablero-online-colaborativo-gratuito</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/10/22/webwitheboard-tablero-online-colaborativo-gratuito#comments</comments>
		<pubDate>Mon, 22 Oct 2012 12:36:24 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Herramienta]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4903</guid>
		<description><![CDATA[Acabo de descubrir esta maravillosa herramienta online gratuita que te facilita un tablero que puedes compartir con otra gente: WebWhiteBoard.]]></description>
				<content:encoded><![CDATA[<p>Acabo de descubrir esta maravillosa herramienta online gratuita que te facilita un tablero que puedes compartir con otra gente:</p>
<p><a href="http://webwhiteboard.com/#f8nmpaux" target="_blank">WebWhiteBoard</a>.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-49040"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/3eyguvRVt2c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/10/22/webwitheboard-tablero-online-colaborativo-gratuito/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/10/22/webwitheboard-tablero-online-colaborativo-gratuito</feedburner:origLink></item>
		<item>
		<title>Iteración 01 – Semanas 05 y 06 – Planificación</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/vlNSLmxPFB8/iteracion-01-semanas-05-y-06-planificacion</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/08/20/iteracion-01-semanas-05-y-06-planificacion#comments</comments>
		<pubDate>Mon, 20 Aug 2012 09:27:05 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[New Project]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4879</guid>
		<description><![CDATA[Ya queda poco para acabar el tiempo que quería dedicar a esta iteración para conseguir un piloto funcional, así que vamos a aprovechar para planificar dos semanas de golpe. Necesario Lógicamente disponer de un piloto funcional. Para ello deberán estar acabadas las capas de control y vista. Una planificación de visitas. Quiero cerrar dos en [...]]]></description>
				<content:encoded><![CDATA[<p>Ya queda poco para acabar el tiempo que quería dedicar a esta iteración para conseguir un piloto funcional, así que vamos a aprovechar para planificar dos semanas de golpe.</p>
<h3>Necesario</h3>
<p>Lógicamente disponer de un piloto funcional. Para ello deberán estar acabadas las capas de control y vista.</p>
<p>Una planificación de visitas. Quiero cerrar dos en Salamanca y dos en Lugo, una en Ávila, y luego buscar algo más por ahí, preferiblemente el noreste.</p>
<p>Dedicar 80 horas, preferiblemente de calidad!</p>
<h3>Estaría bien&#8230;</h3>
<p>Que el piloto fuese una versión portable. Para ello debería instalar una base de datos, crear el esquema de la aplicación y disponer de un ejecutable, y todo esto para cualquier sistema operativo.</p>
<p>Que la empresa tuveria un nombre, así como el producto.</p>
<p>Empezar a documentar un poquito.</p>
<h3>Para mejorar en un futuro cercano</h3>
<p>Máquinas virtuales, automatizar back ups.</p>
<p>Crear un generador automático de código. Cuando en el futuro vaya añadiendo funcionalidades, hay bastante código que puede ser automatizado (crear y configurar daos, servicios, controladores e incluso parte gráfica), y podría aprovechar mi suricata para parametrizar este programa. Lo ideal sería integrarlo con eclipse desarrollando un plugin, pero&#8230;</p>
<p>Un site web, pero previamente se necesitaría tener al menos un nombre, el de la  empresa o el del producto.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-48800"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/vlNSLmxPFB8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/08/20/iteracion-01-semanas-05-y-06-planificacion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/08/20/iteracion-01-semanas-05-y-06-planificacion</feedburner:origLink></item>
		<item>
		<title>Iteración 01 – Semana 04 – Retrospectiva</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/lvd8Ca56JhU/iteracion-01-semana-04-retrospectiva</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/08/20/iteracion-01-semana-04-retrospectiva#comments</comments>
		<pubDate>Mon, 20 Aug 2012 09:02:58 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[New Project]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4877</guid>
		<description><![CDATA[Un objetivo que tenía era haber hecho 40 horas. Se ha cumplido malamente, pero han sido 40 horas de pobre calidad y productividad, en especial las últimas. Creo que es una buena idea intentar mantener este objetivo porque hay muchos cabos sueltos, abogado, hacienda, jardines y gatos, lectura&#8230; Pero sin embargo voy a quitarle prioridad, [...]]]></description>
				<content:encoded><![CDATA[<p>Un objetivo que tenía era haber hecho <strong>40 horas</strong>. Se ha cumplido malamente, pero han sido 40 horas de pobre calidad y productividad, en especial las últimas. Creo que es una buena idea intentar mantener este objetivo porque hay muchos cabos sueltos, abogado, hacienda, jardines y gatos, lectura&#8230; Pero sin embargo voy a quitarle prioridad, ya que me agobia tener tantos cabos sueltos, que al fin y al cabo son tareas que tengo que hacer y no se van a hacer solas.</p>
<p>El mayor logro de esta iteración ha sido <strong>simplificar el proyecto</strong>, que ahora tiene un alcance claro y definido para esta primera fase piloto, y una hoja de ruta clara.</p>
<p>La <strong>capa de vista</strong> no se ha completado, pero sí ha arrancado. La razón por la que no se ha completado es porque he decidio convertir mi capa de vista de pruebas en una capa de vista &#8220;clásica&#8221;, para poder vender la capa de vista que yo quiero como una mejora, y por tanto necesita más detalles que si fuese una simple colección de enlaces. De momento emplearé <strong>Swing</strong>. También he decidido que incluir una <strong>capa de controladores</strong>. ya que ahora la capa de vista será de producción y no de pruebas.</p>
<p>Sobre <strong>máquinas virtuales, nombres y tareas comerciales</strong>, cero avance, en parte debido a la escasa creatividad de esta semana y en parte debido a que las obras en la oficina me han obligado refugiarme en un lugar&#8230; poco productivo.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-48780"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/lvd8Ca56JhU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/08/20/iteracion-01-semana-04-retrospectiva/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/08/20/iteracion-01-semana-04-retrospectiva</feedburner:origLink></item>
		<item>
		<title>Spring 3 – Inyección de Dependencias – Anotaciones</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/x08sE_qwAvw/spring-3-inyeccion-de-dependencias-anotaciones</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/08/14/spring-3-inyeccion-de-dependencias-anotaciones#comments</comments>
		<pubDate>Tue, 14 Aug 2012 08:00:40 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[Implementación]]></category>
		<category><![CDATA[Inyección de dependencias]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4851</guid>
		<description><![CDATA[Una manera muy cómoda de inyectar las dependencias a una clase en Spring 3 es mediante el uso de etiquetas. De momento, yo sólo uso esta modalidad para inyectar las dependencias en los test: si quiero probar un DAO prefiero utilizar una anotación a tener que crear un XML porque seguramente será poco reutilizable. En [...]]]></description>
				<content:encoded><![CDATA[<p>Una manera muy cómoda de <strong>inyectar las dependencias</strong> a una clase en <strong>Spring 3</strong> es mediante el uso de <strong>etiquetas</strong>. De momento, yo sólo uso esta modalidad para inyectar las dependencias en los test: si quiero probar un DAO prefiero utilizar una anotación a tener que crear un XML porque seguramente será poco reutilizable.</p>
<p>En Spring v03.xx tenemos las siguientes posibilidades de popular beans mediante etiquetas:</p>
<p><em>@Resource</em>, es una etiqueta especificada en la Java Specefication Request <a href="http://en.wikipedia.org/wiki/JSR_250" target="_blank">JSR-250</a> (Common Annotations for the Java<sup>TM</sup> Platform). En Spring, inyectará la dependencia <strong>por nombre</strong>. Es decir, buscará dentro del contexto un bean cuyo nombre coincida con el nombre de la variable etiquetada. En el Contenedor IoC, un bean puede tener uno o más identificadores (puede tener aliases), pero todos ellos deben ser únicos en el ámbito del contenedor.</p>
<p><em>@Autowired</em>, es una etiqueta especificada por el propio framework de Spring. En Spring, inyectará la dependencia <strong>por tipo</strong>. Es decir, buscará dentro del contexto un bean cuya clase coincida con el tipo de variable etiquetada.</p>
<p>@Inject, es una etiqueta especificada en la Java Specefication Request <a href="http://www.jcp.org/en/jsr/detail?id=330" target="_blank">JSR-330</a> (Dependency Injection for Java). Es intercambiable por la etiqueta <em>@Autowired</em> siempre que su JAR esté en nuestro classpath.</p>
<p>La inyección de dependencias por tipo puede encontrarse con que dentro del mismo contexto existan más de un bean con el mismo tipo. Un ejemplo sería si tenemos un bean llamado administrador del tipo persona, otro bean llamado superadministrador del tipo persona, y una variable de tipo persona etiquetada con <em>@Autowired</em> o @Inject. Estos casos se utiliza la etiqueta <em>@Qualifier</em> para discriminar por nombre el bean que deseamos cargar, ya que el nombre sí que es único dentro del contenedor.</p>
<p>Ojo, porque la implementación de la etiqueta <em>@Qualifier</em> de la JSR-330 es distinta a la de la etiqueta <em>@Qualifier</em> de Spring v03.xx.</p>
<h3>En resumen</h3>
<p>¿Cuál es la mejor forma de inyectar dependencias en Spring 3? ¿Mediante configuración XML, mediante código Java, mediante anotaciones de Spring o mediante anotaciones de JSR-330? Pues la respuesta, como casi siempre en este tipo de preguntas, es que depende de la situación <img src='http://www.hachisvertas.net/blog/01/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Relacionado</h3>
<p><em>@Required</em>, esta etiqueta simplemente indica que la propiedad anotada debe ser populada en tiempo de configuración, es decir cuando se carga el contexto de Spring, bien mediante Autowiring o bien mediante configuración del bean en el XML. Si no es populada, entonces Spring lanza una excepción.</p>
<h3>Notas</h3>
<p>Ver la documentación original de Spring 3:</p>
<ul>
<li><a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html" target="_blank">The Inversion of Control Container</a>.</li>
<li><a href="http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-autowire" target="_blank"><em>Autowiring collaborators</em></a>, que incluye además los modos en los que trabaja.</li>
<li><a href="http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-annotation-config">Annotation-based container configuration</a>.</li>
</ul>
<p>En versiones anteriores a v03.xx no existe diferencias entre las etiquetas.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-48520"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/x08sE_qwAvw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/08/14/spring-3-inyeccion-de-dependencias-anotaciones/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/08/14/spring-3-inyeccion-de-dependencias-anotaciones</feedburner:origLink></item>
		<item>
		<title>Iteración 01 – Semana 04 – Planificación</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/3Xrqe5W3HGA/iteracion-01-semana-04-planificacion</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/08/13/iteracion-01-semana-04-planificacion#comments</comments>
		<pubDate>Mon, 13 Aug 2012 06:51:36 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[New Project]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4871</guid>
		<description><![CDATA[Esta semana tiene un día festivo, que me tomaré, pero no obstante mantendré el objetivo de dedicar al proyecto 40 horas, complicado porque tengo que hacer más cosillas profesionales y tengo varias cosas personales pendientes. Tengo que simplificar el proyecto, por lo que generaré un modelo de base de datos más simple, y comenzaré a [...]]]></description>
				<content:encoded><![CDATA[<p>Esta semana tiene un día festivo, que me tomaré, pero no obstante mantendré el objetivo de dedicar al proyecto <strong>40 horas</strong>, complicado porque tengo que hacer más cosillas profesionales y tengo varias cosas personales pendientes.</p>
<p>Tengo que <strong>simplificar el proyecto</strong>, por lo que generaré un modelo de base de datos más simple, y comenzaré a construir de cero el proyecto sobre él.</p>
<p>Una vez construida la capa de servicio, y asegurada que funciona mediante sus correspondientes test, entonces construiré la <strong>capa de vista</strong> muy simplificada. La capa de control por ahora es opcional, no me preocupa ahora mismo que la vista llame a los servicios.</p>
<p>Algo tendré que investigar al menos sobre <strong>máquinas virtuales</strong>, para tratar de poner orden en el desaguisado de sistemas que manejo actualmente.</p>
<p>También tengo que empezar a dedicar tiempo a tareas fuera del ámbito técnico, esta semana será de calentamiento para tareas <strong>comerciales</strong>.</p>
<p>Finalmente, tengo que buscar <strong>nombre</strong> tanto para el producto como para la empresa, el objetivo es tener tres candidatos para uno de ellos.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-48720"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/3Xrqe5W3HGA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/08/13/iteracion-01-semana-04-planificacion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/08/13/iteracion-01-semana-04-planificacion</feedburner:origLink></item>
		<item>
		<title>Iteración 01 – Semana 03 – Retrospectiva</title>
		<link>http://feedproxy.google.com/~r/Lycka/~3/WGAYFhVP5wo/iteracion-01-semana-03-retrospectiva</link>
		<comments>http://www.hachisvertas.net/blog/01/2012/08/13/iteracion-01-semana-03-retrospectiva#comments</comments>
		<pubDate>Mon, 13 Aug 2012 06:36:03 +0000</pubDate>
		<dc:creator>yoyoooyoy</dc:creator>
				<category><![CDATA[New Project]]></category>

		<guid isPermaLink="false">http://www.hachisvertas.net/blog/01/?p=4867</guid>
		<description><![CDATA[La semana pasada le he dedicado al proyecto&#8230; 15 horas, 8 el jueves, 7 el viernes. Sin embargo estoy contento con lo hecho en ese tiempo, cumpliendo los objetivos propuestos al comienzo de la iteración, incluso he escrito un post técnico aún no publicado. Backup: HECHO &#8211; De momento utilizaré HV como soporte para los [...]]]></description>
				<content:encoded><![CDATA[<p>La semana pasada le he dedicado al proyecto&#8230; 15 horas, 8 el jueves, 7 el viernes. Sin embargo estoy contento con lo hecho en ese tiempo, cumpliendo los objetivos propuestos al comienzo de la iteración, incluso he escrito un post técnico aún no publicado.</p>
<ul>
<li><strong>Backup</strong>: HECHO &#8211; De momento utilizaré HV como soporte para los backups de los datos, combinado con TrueCrypt. Debo mover a la carpeta Usuarios/Helmantica todos los datos a securizar, y extraer los datos a no securizar.</li>
<li><strong>Servidor SVN</strong>: HECHO &#8211; Respecto al servidor de SVN, de momento utilizaré VisualSVNServer sobre mi notebook con Windows 7. Ha sido muy simple, en 1h estaba todo hecho.</li>
<li><strong>Time Track</strong>: HECHO &#8211; Para corregir el problema del escaso tiempo dedicado al proyecto, he buscado algún software gratuito que me pudiese ayudar a registrar el tiempo exacto dedicado, para luego poder tomar las correspondientes medidas. Después de evaluar varios, de momento me voy a quedar con Task Coach, aunque quería que fuese más kanban-style o al menos pomodoro-style. A esta tarea le he dedicado 2h.</li>
<li><strong>Integración Continua</strong>: FAIL + POSTPUESTO &#8211; Respecto al servidor de Integración Continua, me he puesto un poco al día (Hudson vs Jenkins) y de momento he optado por Jenkins. Lo he instalado y configurado, pero no he conseguido que me de luz verde al proyecto porque aunque se descarga los ficheros fuente de configuración, no los incluye en el classpath del ejecutable y por tanto falla los test al intentar abrirlos. Por otro lado he decido postponer la I.C. básicamente porque de momento no tengo que integrar en un proyecto con un desarrollador <img src='http://www.hachisvertas.net/blog/01/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ¿Por qué entonces le he dedicado ahora este tiempo? Porque en el futuro el proyecto generará varios artefactos (distintas versiones, pej una para desktop otra para webapp), y un servidor de I.C. creo que me será de mucha ayuda.</li>
<li><strong>Cloud</strong>, de momento no.</li>
</ul>
<p>Los tres primeros días de la semana estuve pasando mi CV a formato Europass, creándolo en inglés en el mismo formato, actualizando mis CVs on line y echando un ojo al mercado, que está paradísimo.</p>
<p>Los sistemas de la empresa han crecido y se han complicado enormemente, hay que poner orden y ver cómo sobrevivir sin un segundo ordenador. De momento tenemos un servidor SVN, uno de Integración Continua (que no entrará en servicio de momento), otro de backup, otro de apoyo (por ejemplo para tickets) y otro para cada entorno de desarrollo (con un servidor MySQL y un tomcat). Además de momento una workstation (con su propio servidor MySQL y tomcat). Todo esto de momento dentro de la misma máquina!!!</p>
<p>Además me he dado cuenta que la primera iteración es más ambiciosa de lo que debería ser, voy a rebajar la complejidad del proyecto lo máximo posible.</p>
<div class="rw-left"><div class="rw-ui-container rw-class-blog-post rw-urid-48680"></div></div><img src="http://feeds.feedburner.com/~r/Lycka/~4/WGAYFhVP5wo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.hachisvertas.net/blog/01/2012/08/13/iteracion-01-semana-03-retrospectiva/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.hachisvertas.net/blog/01/2012/08/13/iteracion-01-semana-03-retrospectiva</feedburner:origLink></item>
	</channel>
</rss>
