<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>What about...</title>
	<atom:link href="http://whatabout.es/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://whatabout.es/blog</link>
	<description>What about me?</description>
	<pubDate>Wed, 03 Aug 2011 17:02:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>Variables globales</title>
		<link>http://whatabout.es/blog/2011/08/03/variables-globales/</link>
		<comments>http://whatabout.es/blog/2011/08/03/variables-globales/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 17:02:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

		<category><![CDATA[variables globales]]></category>

		<guid isPermaLink="false">http://whatabout.es/blog/?p=245</guid>
		<description><![CDATA[El otro día leía en Mundo Geek cómo las variables globales son malvadas. En el post enumeraba las razones por las que las variables globales, lejos de ser nuestras amigas, son malvadas:


El código es más difícil de entender
El código es más difícil de depurar
El código es más difícil de testear
El código es más difícil de [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día leía en Mundo Geek cómo las <a title="variables globales" href="http://mundogeek.net/archivos/2011/07/12/variables-globales/" target="_blank">variables globales son malvadas</a>. En el post enumeraba las razones por las que las variables globales, lejos de ser nuestras amigas, son malvadas:</p>
<div>
<ol>
<li>El código es más difícil de entender</li>
<li>El código es más difícil de depurar</li>
<li>El código es más difícil de testear</li>
<li>El código es más difícil de mantener</li>
<li>El código es más difícil de reutilizar</li>
<li>Las variables globales matan gatitos</li>
</ol>
</div>
<p></p>
<div>Yo añadiría, desde luego, una más y es que en manos inexpertas y/o malvadas pueden llegar a ser unas de las cosas más peligrosas en el mundillo de las aplicaciones</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2011/08/03/variables-globales/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A mí ésto no me cabe</title>
		<link>http://whatabout.es/blog/2010/12/23/a-mi-esto-no-me-cabe/</link>
		<comments>http://whatabout.es/blog/2010/12/23/a-mi-esto-no-me-cabe/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 13:03:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

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

		<guid isPermaLink="false">http://whatabout.es/blog/?p=220</guid>
		<description><![CDATA[Yo siempre había escuchado eso de &#8220;Nunca digas este cura no es mi padre ni de este agua no beberé&#8221; pero un día soltando estas frases Nolita, muy atenta, añadió: &#8220;ni a mí ésto no me cabe&#8220;. ¡Siempre grande Nolita!
Y esto mismo, &#8220;no me digas que esto no tecabe&#8221; es lo que deben pensar todas [...]]]></description>
			<content:encoded><![CDATA[<p>Yo siempre había escuchado eso de &#8220;<em>Nunca digas este cura no es mi padre ni de este agua no beberé</em>&#8221; pero un día soltando estas frases Nolita, muy atenta, añadió: &#8220;<em>ni a mí ésto no me cabe</em>&#8220;. ¡Siempre grande Nolita!</p>
<p>Y esto mismo, &#8220;<em>no me digas que esto no tecabe</em>&#8221; es lo que deben pensar todas esas personas dedicadas a revisar/pedir tareas cuando dicen: &#8220;esto tiene que estar en la mitad de tiempo&#8221;.</p>
<p>Informándome un poco, parece ser que la expresión correcta más bien sería: &#8220;&#8230; <em>ni esta polla no me entra</em>&#8221; que también viene que ni al caso, por que tras estallar la planificación/tarea/proyecto es lo que la persona que está por encima y/o cliente del que decidió reducir/ignorar los tiempos quien en la mayoría de los casos acaba diciendo: &#8220;<em>no me digas tú a mí ahora que esta polla no te entra</em>&#8220;.</p>
<p>Y es que estas cosas pasan. Una planificación puede llegar a ser algo muy complejo y difícil de manejar que requiere una persona con capacidad para ello no a una persona que piense y se crea que una tarea de 3 meses se pueda reducir a 3 semanas simplemente apretando/amenazando o rompiendo brazos como diría el primo.</p>
<p>P.D.: a veces es inevitable que la persona responsable de las planificacines/tareas acabe violada sí o sí haga lo que haga, pero esa es otra historia.</p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2010/12/23/a-mi-esto-no-me-cabe/feed/</wfw:commentRss>
		</item>
		<item>
		<title>La programación y el mundo de la noche</title>
		<link>http://whatabout.es/blog/2010/12/23/la-programacion-y-el-mundo-de-la-noche/</link>
		<comments>http://whatabout.es/blog/2010/12/23/la-programacion-y-el-mundo-de-la-noche/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 12:41:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

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

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

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

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

		<guid isPermaLink="false">http://whatabout.es/blog/?p=236</guid>
		<description><![CDATA[El otro día anda ojeando algunos blog sobre programación a través de Google Reader cuando me paré a leer una artículo sobre Tapestry. Una parte importante del proyecto en el que me encuentro trabajando ahora se está desarrollando con éste framework así que me paré a leer el post. Desgraciadamente sólo puedo leer y no opinar porque [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día anda ojeando algunos blog sobre programación a través de Google Reader cuando me paré a leer una artículo sobre <a title="Tapestry" href="http://tapestry.apache.org/" target="_blank">Tapestry</a>. Una parte importante del proyecto en el que me encuentro trabajando ahora se está desarrollando con éste framework así que me paré a leer el post. Desgraciadamente sólo puedo leer y no opinar porque aunque estamos trabajando con Tapestry yo personalmente no he tenido la oportunidad de tocarlo.</p>
<p>El autor del post, <a title="Google it" href="http://www.google.com/search?ie=UTF-8&amp;q=Igor+Drobiazko" target="_blank">Igor Drobiazko</a>, criticaba la mala posición que Tapestry había optenido en una <a title="http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks" href="http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks" target="_blank">comparación </a>de JVM Web Frameworks reciente por Matt Raibley y argumentaba cómo éste framework merecía mejor puntuación en diversos aspectos.</p>
<p>Cuál fue mi sorpresa cuando reconocí al primer comentarista del post. ¡Ay va! ¡Si yo he trabajado con este tío! Más sorpresa me llevé al leer el comentario donde empezaba diciendo que también se tendría que haber tenido en cuenta a <a title="ATG" href="http://www.atg.com" target="_blank">ATG </a>en la comparación. ¿A qué viene este comentario sobre ATG que nada tiene que ver con el post y qué hace este tío hablando de ATG? OK, el proyecto donde estoy y en el que coincidí con este individuo está basado principalmente en ATG pero él nunca llegó a trabajar con ATG. La respuesta creo que es simple: escribes un post y cometas algo sobre ATG y de esa forma tu nombre queda vinculado a este producto.</p>
<p>Esta persona de la que hablo no duró más de mes y medio en el proyecto ya que hubo que echarlo porque su productividad era prácticamente cero. Sin embargo, cuando llegó prometía mucho ya que se le llenaba la boca de tecnologías y presumía de conocer a mucha gente en esto del Java. Que si yo conozco al creador de tal framework, que si el creador de este otro es amigo mío&#8230; Eso sí, lo que es trabajar, cero. Cada vez que pasaba por delante de su monitor estaba conectado a LinkedIn o Twitter.</p>
<p>Me pongo a investigar al pájaro este y resulta que en su perfil de <a title="http://www.linkedin.com/" href="http://www.linkedin.com/" target="_blank">LinkedIn </a>dice que todavía sigue trabajando en nuestro proyecto (dos meses y medio hace ya que lo echamos) como experto en seguridad y el que viene a decir que &#8220;nos ayuda&#8221; (algo así como asesora) cuando su perfil era el de programador raso. Entre miles de referencias en Google y el que el perla se ve que no escatima en tiempo a la hora de comentar blogs se puede leer como dice que tiene 18 años de experiencia (¿?¿?), conocimientos y experiencia en un sin fin de tecnologías, su propia fundación y miles de tontearías. Eso sí, su más de 500 conexiones en LinkedIn (otro que se piensa que LinkedIn es un Facebook) y otras tantas en Twitter.</p>
<p>Menudo personaje. Teniendo en cuenta lo que duró en nuestro proyecto, el rol que realizó y lo que él va describiendo por ahí que hizo (o está haciendo) me puedo imaginar cómo prácticamente nada de lo que se puede leer en su perfil de LinkedIn es cierto. Por cierto, echo de menos un botón &#8220;esto es mentira&#8221; en esta &#8220;red social&#8221;.</p>
<p>A mí este personaje me recuerda a la gente del mundo del corazón. A esas personas que desean la fama y que no pudiéndola conseguir por sí solos se dedican a ir de sarao en sarao buscando a personajes famosos para relacionarse con ellos y conseguir fotos, relaciones, amistades y un sin fin de cosas. Con el tiempo algunos de estos personajes pueden ser confundidos con famosos.</p>
<p>En fin, cuidado con este tipo de personajes.</p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2010/12/23/la-programacion-y-el-mundo-de-la-noche/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ahoj</title>
		<link>http://whatabout.es/blog/2010/08/15/ahoj/</link>
		<comments>http://whatabout.es/blog/2010/08/15/ahoj/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 11:31:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

		<category><![CDATA[About me]]></category>

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

		<guid isPermaLink="false">http://whatabout.es/blog/?p=227</guid>
		<description><![CDATA[Y es que por la cuenta que me trae, más me vale ir aprendiendo algo de checho ya que es a la República Checa donde me ha llevado mi nueva aventura profesional. No, no he cambaido de empresa sino que a la actual le surgió un proyecto en Praga y yo fui uno de los [...]]]></description>
			<content:encoded><![CDATA[<p>Y es que por la cuenta que me trae, más me vale ir aprendiendo algo de checho ya que es a la República Checa donde me ha llevado mi nueva aventura profesional. No, no he cambaido de empresa sino que a la actual le surgió un proyecto en Praga y yo fui uno de los premiados.</p>
<p>Siempre me mostré encantado con la idea de ir a trabajar una temporada fuera por lo que nunca hubo ninguna necesidad por parte de nadie de convencerme. Ya que le gusta la idea de irse fuera, debieron pensar mis jefes, vamos a plantearlo como un premio: &#8220;siempre pensamos en ti cuando surgió este proyecto, te lo has ganado, te lo mereces&#8230;&#8221;. Seamos sinceros, estoy seguro de que si me respuesta no hubiera sido tan favorable ante la posibilidad de irme a un proyecto fuera otro hubiera sido el planteamiento por parte de la empresa. Tal vez un &#8220;es una gran oportunidad, te vamos a pagar más&#8230;&#8221;. No me parece reprochable este comportamiento de la empresa y es que cada cual intenta jugar sus cartas lo mejor que puede.</p>
<p>Si me paro a pensar llego a la conclusión de que no debe de haber por ahí mucha gente dispuesta a hacer la maleta e irse a un país extranjero donde hablan otro idioma a trabajar en un proyecto complicado.</p>
<p>Mi situación personal y mis vivencias me permite esta aventura:</p>
<ul>
<li>Para empezar, ya no sé ni los años que hace que me fui de casa para estudiar fuera. He vivido en distintas ciudades y dormido en una docena de sitios diferentes por lo que no he podido desarrolloar un amor incondicional a un cama y/o colchón en particular. Por ahí se escucha hablar de gente que apenas puede dormir si no es en su propia cama o si el colchón no tiene una infinidad de características.</li>
<li>Llevo alejado de la cocina de mi madre los mismos años que llevo fuera así que mi estomago no es nada delicado. Los que me conocen, saben que básicamente, si me cae en el plato y hay pan para acompañar, me lo como y hasta rebaño (mi padres pueden estar orgulloso). No tengo problemas si aquí la mitad de los días acabo comiendo pollo porque apenas hay otras opciones viables o si la mayonesa sabe mostaza. Muchos hay por ahí que o comen en casa o se llevan el tupper porque han desarrollado una intolerancia a cualquier comida que no sea la de sus madre.</li>
<li>Vivir fuera de casa también haces que olvides otros hábitos alimenticio. Si hay que almorzar a las 11 porque es constumbre del país donde estás y cenar a las 23 el mismo día porque es la costumbre en España tampoco tengo problema, no va a provocar en mí ningún trastorno alimenticio. Muchos no sobrevivirían.</li>
<li>He cambido de ciudad varias veces, como he dicho, y varias veces son las que he dejado a tras práticamente todos los amigos. Sé lo que es estar varias semanas sin poder ir a tomar un copa por no tener con quién ir a tomarla por lo que ahora, si me tengo que quedar un fin de semana sólo en un país extranjero, no voy a entrar en depresión ni llamaré llorando a casa.</li>
<li>Llevo años viendo series en versión original y leyendo libros en inglés unos años ya por lo que ahora, a pesar de haber recibido mi última clase de inglés allá por el 99 ahora logro sobrevivir en un país extranjero y en un proyecto donde el idioma oficial es el inglés. No sin esfuerzo y ni sin malos momentos&#8230; pero sobrevivo, cada día mejor.</li>
<li>Entrando en el terrenos más personal puedo decir que no tengo novia, al menos no una dependencia que me ate a ningún sitio y estoy acostumbrado a estar meses sin ver a la familia.</li>
<li>&#8230;</li>
</ul>
<p>Por supuesto, también podría hacer una lista de cosas a las aún no estoy acostumbrado, como el que el sol entre por mi ventana a las 4:25 de la mañana por que aquí amanece a esa hora y porque las persianas no son muy conocidas más allá de los pirineos.</p>
<p>No sé&#8230; repasando todo esto creo me doy cuenta de que tal vez no sea tan sencillo mandar a alguién a trabajar fuera.</p>
<p>Dicen que Praga es una ciudad presiosa llena de mujeres bonitas. Sí, es cierto, he podido comprabarlo algún fin de semana que me he quedado aquí y es que aunque la empresa me paga lo billetes todas las semanas es una locura coger un vuelo que siembre va con retraso a España el viernes a las 20.00 y pisar suelo español a eso de las doce. Con un poco de suerte estoy metido en cama a eso de las 1 después de unas 7 horas entre taxis, aeropuertos y vuelo. ¿La vuelta? A las 4.30 de la mañana suena mi reloj el lunes: maleta, taxi, aeropuerto, avión, aeropuerto, taxi, oficina, taxi para por fin llegar a mi apartamento en Praga con un poco de suerte a eso de las 20.30. Y levantandose a las 6.30 de la mañana y saliendo a las 20.30 de la oficina (generalmente) no logro superar el madrugón del lunes.</p>
<p>Voy a saltarme la parte en la que hablo del proyecto ya que éste sigue su curso y no me parece correcto comentar nada hasta que termine. Sólo diré que en los cinco años que llevo trabajo jamás había deseado tanto que llegaran los viernes&#8230; incluso sabiendo que el viernes me pueden estar esperando hasta 7 horas de viaje para llegar a España. Siempre he hecho el remolón al sonar el despertador y miles de mañanas he pensado en lo maravilloso que sería no ir a trabajar y quedarme durmiendo. Ahora mi pensamiento es diferente por las mañanas. Todas las mañanas la misma idea me invade: no quiero ir a trabajar. Como si fuera un crío de 10 años que no quiere ir al colegio porque el profesor le tiene manía y porque además sabe que los otros chicos del cole le van a pegar al entrar, en la hora del recreo y a la salida.</p>
<p>Mucha gente recordará el mundial de fúltbol de Suráfrica como el año que España ganó el su primer mundial. Yo además, como el año que tuve que ver más de un partido en el aeropuerto. ¿Si celebré el trinfo español? No. Tras ternimar el partido y ver a Casillas levantar la copa, me fui a casa a dormir porque al día siguiente era lunes y el reloj ya estaba puesto a las 4.30.</p>
<p>Por supuesto, como dije, estoy aquí voluntario. Me gusta pensar que fui voluntario. Es una gran oportunidad tanto profesionalmente como personalmente y eso me anima a seguir adelante a pesar de todos los problemas y penurias.</p>
<p>A todos aquellos que piensen que esto es como estar en unas vacaciones pagadas, que aquí nos lo estamos pasando bien y que van diciendo por ahí: &#8220;pero qué suerte tienes cabrón&#8221;&#8230; No, esto no es fácil. ¿Te pondrías en mi lugar? Piénsalo detenidamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2010/08/15/ahoj/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Leyes epónimas relacionadas con el desarrollo de software</title>
		<link>http://whatabout.es/blog/2010/02/15/leyes-eponimas-relacionadas-con-el-desarrollo-de-software/</link>
		<comments>http://whatabout.es/blog/2010/02/15/leyes-eponimas-relacionadas-con-el-desarrollo-de-software/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 16:34:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

		<category><![CDATA[About me]]></category>

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

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

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

		<guid isPermaLink="false">http://whatabout.es/blog/?p=214</guid>
		<description><![CDATA[En Variable Not Found han recogido 30 leyes epónimas relacionadas con el Software. He echado unas risas al leerlas aunque la risa no dura mucho al darme cuenta de que he sufrido ésta o aquella ley. Hay una que especialmente me ha hecho gracia:
8. Ley de Brooks
Incluir trabajadores en un proyecto retrasado hará que éste [...]]]></description>
			<content:encoded><![CDATA[<p>En <a title="Variabla Not Found - Leyes" href="http://www.variablenotfound.com/2010/02/30-leyes-eponimas-relacionadas-con-el.html" target="_blank">Variable Not Found</a> han recogido 30 leyes epónimas relacionadas con el Software. He echado unas risas al leerlas aunque la risa no dura mucho al darme cuenta de que he sufrido ésta o aquella ley. Hay una que especialmente me ha hecho gracia:</p>
<h3>8. Ley de Brooks</h3>
<blockquote><p>Incluir trabajadores en un proyecto retrasado hará que éste avance aún más lentamente.</p></blockquote>
<p>Esta gran ley me recuerda una conversación telefónica que tuve hace unos meses:</p>
<blockquote><p>Gerente: Voy a sacar a fulanito de proyecto porque hace falta para otro con urgencia.</p>
<p>Juande: ¡Pero si entró hace tres semanas y me ha costado dos y medias formarlo! ¡Y vamos con retraso!</p>
<p>G.: No te preocupes, te meto a otra persona.</p>
<p>J.: Eso retrasará más el proyecto.</p>
<p>G.: Pues metemos a dos.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2010/02/15/leyes-eponimas-relacionadas-con-el-desarrollo-de-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Spring + Quartz + Clustering</title>
		<link>http://whatabout.es/blog/2009/12/16/spring-quartz-clustering/</link>
		<comments>http://whatabout.es/blog/2009/12/16/spring-quartz-clustering/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 11:14:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://whatabout.es/blog/?p=141</guid>
		<description><![CDATA[En Javi&#8217;s Java podemos encontrar un estupendo post a cerca de Quartz, sobre qué es y cómo se configura dentro de nuestra aplicación Web por lo que no es necesario hablar mucho más del tema. En este post sólo me gustaría resaltar la sencillez y elegancia resultante de la integración de Quartz con Spring, como [...]]]></description>
			<content:encoded><![CDATA[<p>En <a title="Quartz en Javis Java" href="http://www.javisjava.com/blog/?p=61" target="_blank">Javi&#8217;s Java</a> podemos encontrar un estupendo post a cerca de <a title="Quartz site" href="http://www.opensymphony.com/quartz/" target="_blank">Quartz</a>, sobre qué es y cómo se configura dentro de nuestra aplicación Web por lo que no es necesario hablar mucho más del tema. En este post sólo me gustaría resaltar la sencillez y elegancia resultante de la integración de Quartz con <a title="Spring site" href="http://www.springsource.org/" target="_blank">Spring</a>, como el mismo Javi comentaba en uno de los <a title="comment" href="http://www.javisjava.com/blog/?p=61#comment-5482" target="_blank">comentarios</a>, que nos permite configurar una tarea en apenas un par de minutos.</p>
<p>Tampoco es necesario escribir ninguna línea de código como ejemplo para la integración con Spring ya que la <a title="Spring + Quartz documentation" href="http://static.springsource.org/spring/docs/1.2.9/reference/scheduling.html" target="_blank">documentación de Spring sobre el tema</a> (<a title="CronExpression" href="http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html" target="_blank">cronExpression</a>) es clara y sencilla.</p>
<p>¿Quién necesita ahora los crones de Linux o las tareas de Windows para programar tareas relacionas con nuestra aplicación Web?</p>
<p>Si además necesitamos ejecutar la aplicación en distintas instancias y no queremos que haya problemas, como que el proceso se ejecute simultáneamente en todas ellas, podemos configurar Quartz para que se ejecute en Clustering añadiendo sólo unas cuántas líneas extras en la configuración. Ejemplo de configuración en Spring para la ejecución de Quartz en clustering:</p>
<pre>&lt;bean name="job"
   class="org.springframework.scheduling.quartz.JobDetailBean"&gt;
    &lt;property name="jobClass" value="whatabout.Job" /&gt;
    &lt;property name="jobDataAsMap"&gt;
        &lt;map&gt;
            &lt;!-- properties
            &lt;entry key="timeout" value="" /&gt;
            --&gt;
        &lt;/map&gt;
    &lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="cronTrigger"
   class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;
    &lt;property name="jobDetail" ref="job" /&gt;
    &lt;property name="cronExpression" value="0 0 6 * * ?" /&gt;
&lt;/bean&gt;

&lt;bean
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;
    &lt;property name="triggers"&gt;
        &lt;list&gt;
            &lt;ref bean="cronTrigger" /&gt;
        &lt;/list&gt;
    &lt;/property&gt;
    &lt;property name="applicationContextSchedulerContextKey"&gt;
        &lt;value&gt;applicationContext&lt;/value&gt;
    &lt;/property&gt;
    &lt;property name="startupDelay" value="0" /&gt;
    &lt;property name="waitForJobsToCompleteOnShutdown" value="true" /&gt;
    &lt;property name="dataSource" ref="myDataSource" /&gt;
    &lt;property name="quartzProperties"&gt;
        &lt;props&gt;
            &lt;!-- ThreadPool --&gt;
            &lt;prop key="org.quartz.threadPool.class"&gt;org.quartz.simpl.SimpleThreadPool&lt;/prop&gt;
            &lt;prop key="org.quartz.threadPool.threadCount"&gt;5&lt;/prop&gt;
            &lt;prop key="org.quartz.threadPool.threadPriority"&gt;5&lt;/prop&gt;
            &lt;!-- Job store --&gt;
            &lt;prop key="org.quartz.jobStore.misfireThreshold"&gt;60000&lt;/prop&gt;
            &lt;prop key="org.quartz.jobStore.class"&gt;org.quartz.impl.jdbcjobstore.JobStoreTX&lt;/prop&gt;
            &lt;prop key="org.quartz.jobStore.driverDelegateClass"&gt;org.quartz.impl.jdbcjobstore.StdJDBCDelegate&lt;/prop&gt;
            &lt;prop key="org.quartz.jobStore.useProperties"&gt;false&lt;/prop&gt;
            &lt;!-- Clustering --&gt;
            &lt;prop key="org.quartz.jobStore.isClustered"&gt;true&lt;/prop&gt;
            &lt;prop key="org.quartz.scheduler.instanceId"&gt;AUTO&lt;/prop&gt;
            &lt;prop key="org.quartz.jobStore.clusterCheckinInterval"&gt;30000&lt;/prop&gt;
        &lt;/props&gt;
    &lt;/property&gt;
&lt;/bean&gt;</pre>
<p>Evidéntemente es necesario configurar un Datasource (myDataSource en el ejemplo) y crear las tablas de Quartz oportunas. He de añadir que en uno de los últimos proyectos en los que he trabajado hemos montado Quartz en Clustering con cinco máquinas con éxito y después de varios meses en producción ningún proceso se ha ejecutado más de una vez o ninguna.</p>
<p>Referencia:</p>
<ul>
<li><a title="Scheduling reference" href="http://static.springsource.org/spring/docs/1.2.9/reference/scheduling.html" target="_blank">Scheduling reference</a></li>
<li><a title="ConfigJobStoreTX docs" href="http://www.opensymphony.com/quartz/wikidocs/ConfigJobStoreTX.html" target="_blank">ConfigJobStoreTX docs</a></li>
<li><a title="Tutorial lesson 9" href="http://www.opensymphony.com/quartz/wikidocs/TutorialLesson9.html" target="_blank">Tutorial lesson 9</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2009/12/16/spring-quartz-clustering/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mi modelo de datos</title>
		<link>http://whatabout.es/blog/2009/12/11/el-modelo-de-datos/</link>
		<comments>http://whatabout.es/blog/2009/12/11/el-modelo-de-datos/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 12:49:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

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

		<category><![CDATA[modelo datos]]></category>

		<guid isPermaLink="false">http://whatabout.es/blog/?p=189</guid>
		<description><![CDATA[Hoy me ha venido el jefe diciendo que hay que hacer una aplicación para gestionar los usuarios de la empresa. Según he entendido, creo que vamos a necesitar tres tablas: EMPLEADO, DIRECCION y CIUDAD de empleado.
¿Cómo plantemos las relaciones entre las tablas? Creo que un principio podría centrarme en la tabla EMPLEADO y que ésta tuviera [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy me ha venido el jefe diciendo que hay que hacer una aplicación para gestionar los usuarios de la empresa. Según he entendido, creo que vamos a necesitar tres tablas: <strong>EMPLEADO</strong>, <strong>DIRECCION </strong>y <strong>CIUDAD </strong>de empleado.</p>
<p>¿Cómo plantemos las relaciones entre las tablas? Creo que un principio podría centrarme en la tabla EMPLEADO y que ésta tuviera una clave foránea a la tabla DIRECCION, pero no sé, no me convence. ¿Y si un empleado no tiene dirección? Le pregunto al analista funcional (aquel que ha echado un ojo a los dos folios del documento de requisitos) y me dice que nunca se va a dar el caso en el que tengamos un empleado sin dirección. De todas formas, para curarme en salud, creo que mejor centrarme en la tabla DIRECCION y que ésta tenga dos claves foráneas: id_empleado e id_ciudad. Perfecto, así me curo en salud y ahora un usuario puede no tener ninguna dirección o tener N. Sí, el jefe dice que esto no pasará en la vida, pero yo prefiero pensar en posibles evolutivos que para eso soy más listo y con visión de futuro.</p>
<p>Vale, ahora que ya he decidido cómo van a ser las relaciones entre las tablas veamos ahora los campos de éstas.</p>
<p>Tabla <strong>EMPLEADO</strong>:</p>
<ul>
<li>ID_EMPLEADO. Mejor concatenar el nombre de la tabla con el nombre del campo para estar seguro siempre de qué ID hablamos (siempre pensando en los demás y en el futuro). De tipo VARCHAR(100) además me voy a currar un mega algoritmo que cree genere los ID en función de la hora, la cotización del IBEX 35 y la hora a la que llega mi compi al curro, así me aseguraré de que jamás en la vida se repita un identificador.</li>
<li>FECNA_TRABAJADOR. VARCHAR(10) . He decidido no poner el literal &#8220;fecha nacimiento&#8221; al completo porque una vez oí que cobran por caracteres.</li>
<li>DIA, MES y ANIO. Estos tres campos lo utilizaremos para guardar la fecha de incorporación del empleado. Todos VARCHAR(4). Sé que sólo necesitaría VARCHAR(2) para el día y el mes, pero mejor homogeneizar un poco.</li>
<li>NOM_DIRECCION. VARCHAR(100). Nombre del empleado.</li>
</ul>
<p>Ok, decido no describir los campos (los nombres son descriptivos por sí solos) ni indicar cuales de ellos pueden ir a NULL.</p>
<p>Tabla <strong>DIRECCION:</strong></p>
<ul>
<li>ID_DIR. NUMBER(10) que luego mapearé con un Float o Double.</li>
<li>CALLE. VARCHAR(200).</li>
<li>NUMERO. VARCHAR(5).</li>
<li>TLFNO_DIREC. VARCHAR(10).</li>
<li>CIUDAD. VARCHAR(32). He decidido guardar también en esta tabla el literal del la ciudad para que no haya que cruzar con la tabla CIUDAD las consultas. Esto agradecerá el rendimiento.</li>
<li>ID_CIUDAD. Identificador de la ciudad.</li>
<li>ID_EMPL. Identificador de empleado.</li>
<li>COM. VARCHAR(50). Creo que nunca viene mal crear un campo comodín por si el día de mañana hace falta algún campo extra. Así no habrá que modificar el modelo.</li>
</ul>
<p>Tabla <strong>CIUDAD</strong>:</p>
<ul>
<li>ID. VARCHAR(100);</li>
<li>VALUE. NUMBER(3). ¿cuál es el equivalente a NUMBRE en Java? Ya sé, Number.</li>
<li>DESCRIPTION. VARCHAR(100)</li>
<li>FC_CREACION, FC_MODIFICACION. Ambos de tipo DATE. Con estos campos llevaré un control sobre cuando se crean y actualizan los datos.</li>
</ul>
<p>Qué bien me está quedando el modelo.</p>
<p>De repente me viene otra vez el jefe y me dice que hace falta crear otra tabla para guardar las direcciones de las oficinas y que no puede ser la que ya tenemos. Me pongo al lío:</p>
<p>Tabla <strong>DIRECCION</strong>&#8230; no, el nombre ya está pillado&#8230; <strong>DIRECCION_OFICINAS</strong>&#8230; muy largo y vaya ser que cobren por caracteres. Ya sé, <strong>ADDRESS</strong>. Que se note que sé idiomas.</p>
<p>Ya está todo listo. ¿Qué más puedo hacer para mejorar el modelo? Ya sé, voy a desactivar las claves foráneas. He oído que fastidian el rendimiento y quiero que la aplicación vaya super-rápida además, las claves foráneas es algo que está sobrevalorado, en realidad no son tan necesarias. Debemos confiar más en que la gente mantendrá los datos de forma coherente.</p>
<p>Ahora me voy a poner con la capa DAO. He oído que hay por ahí un algo que se llama &#8220;Hibernate&#8221; que hace las cosas pero a mí eso no me convence. Me gusta saber lo que hago y llevar el control en todo momento y esto no se puede hacer con los frameworks que no te dejan liberta al desarrollador.</p>
<p>¡Cagüen! Me voy que ya ha pasado un minuto de la hora de irme. Otro día sigo con la capa DAO.</p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2009/12/11/el-modelo-de-datos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google App Engine and Struts</title>
		<link>http://whatabout.es/blog/2009/04/09/google-app-engine-and-struts/</link>
		<comments>http://whatabout.es/blog/2009/04/09/google-app-engine-and-struts/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 21:35:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

		<category><![CDATA[google app engine]]></category>

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

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

		<guid isPermaLink="false">http://whatabout.es/blog/?p=135</guid>
		<description><![CDATA[Recientemente hemos podido leer como ahora Google App Engine soporta Java. Ni corto ni perezoso me he lanzado a probarlo. Pero ya puestos no nos íbamos a conformar con probar un simple Servlet ¿no?
En este enlace podemos ver una prueba de Google App Engine funcionando con Struts 1.3.
Para desarrollar la aplicación y desplegarla he utilizado [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente hemos podido leer como ahora <a title="Google App Enfine" href="http://code.google.com/appengine/" target="_blank">Google App Engine</a> soporta Java. Ni corto ni perezoso me he lanzado a probarlo. Pero ya puestos no nos íbamos a conformar con probar un simple <em>Servlet </em>¿no?</p>
<p>En este <a title="link to google app engine with struts" href="http://jddsantaella.appspot.com/" target="_blank">enlace </a>podemos ver una prueba de Google App Engine funcionando con <em>Struts 1.3</em>.</p>
<p>Para desarrollar la aplicación y desplegarla he utilizado el <a title="Google plugin for eclipse" href="http://code.google.com/eclipse/docs/install-eclipse-3.4.html" target="_blank">plugin </a>de Google para Eclipse.</p>
<p>Por ahora me he quedado aquí, pero habrá que seguir estudiando todas las posibilidades que Google App Engine nos ofrece a los desarrolladores Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2009/04/09/google-app-engine-and-struts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Maven corrompe las imágenes</title>
		<link>http://whatabout.es/blog/2009/02/13/maven-corrompe-las-imagenes/</link>
		<comments>http://whatabout.es/blog/2009/02/13/maven-corrompe-las-imagenes/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 21:06:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

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

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

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

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

		<guid isPermaLink="false">http://whatabout.es/blog/?p=120</guid>
		<description><![CDATA[&#8220;Maven está corrompiendo las imágenes&#8221; es una frase que que he oido a tres compañeros de mi proyecto actual. Tranquilos, no os preocupeis por eso - les dije yo.
¿Por qué Maven corrompe las imágenes cuando por ejemplo, construimos un war con nuestra aplicación Web? Este problema surge cuando &#8220;filtramos&#8221; nuestros archivos de recursos (src/main/resources) para [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Maven está corrompiendo las imágenes&#8221; es una frase que que he oido a tres compañeros de mi proyecto actual. Tranquilos, no os preocupeis por eso - les dije yo.</p>
<p>¿Por qué <a title="Maven" href="http://maven.apache.org/" target="_blank">Maven</a> corrompe las imágenes cuando por ejemplo, construimos un war con nuestra aplicación Web? Este problema surge cuando &#8220;filtramos&#8221; nuestros archivos de recursos (<code>src/main/resources</code>) para sustituir las variables indicadas con los delimitadores <code>${...}</code>. Qué gran utilidad sin duda para poder construir nuestra aplicación Web para diferentes entornos de forma simple y automática.</p>
<p>¡¡Pero es que corrompe las imáganes!! La solución es bastante sencilla, sólo debéis buscar en <a title="busqueda google" href="http://www.google.es/search?hl=es&amp;q=maven+filtering+resource+images&amp;btnG=Buscar&amp;meta=" target="_blank">Google </a>las siguientes palabras: <em>maven filtering resource images</em> y en la segunda entrada, además de explicaros qué es eso del filtrado, os da la solución para que éste no corrampa las imágenes u otros archivos.</p>
<p>Aquí os pongo el fagmento en particular:</p>
<pre name="code" class="xml">
<project>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
          <exclude>**/*.jpg</exclude>
        </excludes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
          <include>**/*.jpg</include>
        </includes>
      </resource>
      ...
    </resources>
    ...
  </build>
  ...
</project>.</pre>
<p>Aquí os dejo el enlace con más detalles: <a title="Maven filter" href="http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html" target="_self">http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2009/02/13/maven-corrompe-las-imagenes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Supervivencia a la hora de escribir código</title>
		<link>http://whatabout.es/blog/2008/12/29/supervivencia-a-la-hora-de-escribir-codigo/</link>
		<comments>http://whatabout.es/blog/2008/12/29/supervivencia-a-la-hora-de-escribir-codigo/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 15:17:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[About job]]></category>

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

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

		<category><![CDATA[serial killer]]></category>

		<guid isPermaLink="false">http://whatabout.es/blog/?p=92</guid>
		<description><![CDATA[&#8220;Always code as if the person who will maintain your code is a maniac serial killer that knows where you live&#8221;
Y es que, nunca se sabe si la persona que va a mantener tu código es un programador o un asesino en serie. Pero claro, qué fue antes, ¿el huevo o la gallina?, porque ¿a [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<em>Always code as if the person who will maintain your code is a maniac serial killer that knows where you live</em>&#8221;</p>
<p>Y es que, nunca se sabe si la persona que va a mantener tu código es un <a href="http://www.malevole.com/mv/misc/killerquiz/" target="_blank">programador o un asesino en serie</a>. Pero claro, qué fue antes, ¿el huevo o la gallina?, porque ¿a quienes no os ha entrado ganas de matar a alguien tras ver algunas líneas de código? A mí sí, es algo que ya sabéis.</p>
<p>Por otro lado, si queréis mantener vuestro puesto de trabajo para siempre, corriendo el riesgo de ser asesinado por un asesino en serie claro está, siempre podéis usar las técnicas de <a href="http://freeworld.thc.org/root/phun/unmaintain.html" target="_blank">escritura de código inmantenible</a>. Si echáis un vistazo a estas prácticas seguro que os daréis cuenta que sois habituales en algunas de ella aunque de forma menos exagerada (o quizás no). Tal vez sea nuestro instinto de supervivencia lo que nos hace escribir código inmantenible pero paradójicamente esto nos pueda llevar a ser asesinados  por un asesino en serie.</p>
]]></content:encoded>
			<wfw:commentRss>http://whatabout.es/blog/2008/12/29/supervivencia-a-la-hora-de-escribir-codigo/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

