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

<channel>
	<title>Yo en el Universo &#187; storetto</title>
	<atom:link href="http://sixservix.com/blog/david/tag/storetto/feed/" rel="self" type="application/rss+xml" />
	<link>http://sixservix.com/blog/david</link>
	<description>El blog de David Bonilla</description>
	<lastBuildDate>Fri, 24 Jun 2011 05:30:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Arquitectura de logging en Glassfish</title>
		<link>http://sixservix.com/blog/david/2010/08/24/logging-glassfish/</link>
		<comments>http://sixservix.com/blog/david/2010/08/24/logging-glassfish/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 04:50:13 +0000</pubDate>
		<dc:creator>David Bonilla</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[glassfish]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[storetto]]></category>

		<guid isPermaLink="false">http://sixservix.com/blog/david/?p=4107</guid>
		<description><![CDATA[Aprende como funciona el sistema de registro o logging en Glassfish v3 descubriendo el "oscuro secreto" de este servidor de aplicaciones ¿te atreves?


Artículos relacionados:<ol><li><a href='http://sixservix.com/blog/david/2010/06/02/transacciones-y-bloqueos-en-glassfish-v3-con-ejb3-1-y-jpa2-iii/' rel='bookmark' title='Permanent Link: Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (III)'>Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (III)</a> <small>Tercera parte del tutorial sobre como utilizar transacciones y bloqueos...</small></li>
<li><a href='http://sixservix.com/blog/david/2010/05/12/transacciones-y-bloqueos-en-glassfish-v3-con-ejb3-1-y-jpa2-ii/' rel='bookmark' title='Permanent Link: Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (II)'>Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (II)</a> <small>Segunda parte del tutorial sobre como utilizar transacciones y bloqueos...</small></li>
<li><a href='http://sixservix.com/blog/david/2010/05/10/transacciones-bloqueos-glassfish-v3-ejb31-jpa2/' rel='bookmark' title='Permanent Link: Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (I)'>Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (I)</a> <small>Un sencillo tutorial sobre como utilizar transacciones y bloqueos con...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify"><img class="alignleft size-full wp-image-4121" style="margin-right: 15px" title="glassfish" src="http://sixservix.com/blog/david/files/2010/08/glassfish.jpg" alt="Glassfish" width="256" height="256" />Sí, sé lo que estáis pensando: &#8220;¿Un artículo sobre <em>logging </em>en <strong>Glassfish</strong>?&#8221; Los que visitan este <em>blog </em>y no son técnicos ni siquiera habrán llegado a esta línea y los que sí lo sois pensaréis <a title="Glassfish Logging ? WTF ?" href="http://twitter.com/molpe/status/20713037513" target="_blank">&#8220;¿Qué tiene de interesante?&#8221;</a>.</p>
<p style="text-align: justify">Y, sin embargo, lo es. El modo en el que <strong>Glassfish </strong>trabaja con <em>logs </em>es peculiar y guarda algún <em>oscuro secreto</em>.  Sólo te pido <strong>dos cosas:</strong></p>
<ol style="text-align: justify">
<li>
<ol>
<li><strong>Cinco minutos de tu tiempo</strong> para que juzgues si lo he conseguido.</li>
<li>Que, para vivir una experiencia completa, <strong>escuches la canción &#8216;<em>Old Souls</em>&#8216;</strong> de <a href="http://open.spotify.com/album/2qvA7HmSg1iM6XMiFF76dp" target="_blank">la banda sonora de <em>Origen</em></a> mientras lees el artículo.</li>
</ol>
</li>
</ol>
<p style="text-align: justify">Lo peor que te puede pasar es que salgas de aquí aprendiendo algo nuevo y, por supuesto, siempre puedes tirarme <em>tomates virtuales</em> en los comentarios del artículo.  ¿Te animas?</p>
<h3 style="text-align: justify">EL MISTERIO DE LAS TRAZAS INEXPLICABLES</h3>
<p style="text-align: justify">Como parte de mi <em>asedio y conquista</em> al entorno de trabajo de <a href="../../../es/storetto.php" target="_blank">STORETTO</a>, comencé a estudiar nuestro sistema de traza y la configuración del mismo. Parecía algo relativamente sencillo (una configuración típica de <a href="http://es.wikipedia.org/wiki/Log4j" target="_blank">log4j</a>) Sin embargo, algo no encajaba. Ni las trazas aparecían por donde debían ni tenían el formato  que queríamos. Nada se parecía ni remotamente a lo  que teníamos configurado.</p>
<p style="text-align: justify">Tampoco entendía por qué el equipo de <strong>STORETTO </strong>había configurado el sistema de <strong>log4j </strong>habitual de la compañía mediante una variable de sistema, en vez de colocar el fichero de configuración en el <em>classpath </em>de la aplicación.</p>
<p style="text-align: justify"><strong>¿Qué estaba pasando? ¿Era todo esto real o era un sueño? ¿Estaba soñando dentro de un sueño? ¿Cómo distinguir la realidad del sueño?</strong></p>
<p style="text-align: justify">Como en <a href="http://sixservix.com/blog/david/2010/08/18/nbsp-en-xhtml/" target="_blank">el anterior caso de las JSPX desestructuradas</a>, yo tenía un poco más de tiempo disponible que el equipo para comprender <strong>qué estábamos haciendo y por qué lo estábamos haciendo</strong>. Lo que averigüé fue SORPRENDENTE.</p>
<h3 style="text-align: justify"><em>FRAMEWORK </em>DE <em>LOGGING </em>DE GLASSFISH</h3>
<p style="text-align: justify">Antes de nada, era importante conocer qué sistema de registro de trazas utiliza <strong>Glassfish </strong>y cómo funciona el mismo.</p>
<p style="text-align: justify">He resumido todo lo que se necesita saber en un par de párrafos:</p>
<p style="text-align: justify"><strong>Glassfish</strong> utiliza para su sistema de trazas la implementación  por defecto de la especificación <a href="http://jcp.org/aboutJava/communityprocess/review/jsr047/">JSR-047</a>, una API de <em>logging</em>, y recomienda el  uso de la misma, aunque permite el uso de otras como <strong>Apache Commons  Logging</strong> o <strong>log4j</strong>.</p>
<p style="text-align: justify">El uso de la API de <em>logging </em>del JDK implica varias cosas a tener en  cuenta:</p>
<ol style="text-align: justify">
<li>Se basa en un sistema de <strong>Handlers</strong>, clases que heredan de <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/util/logging/Handler.html" target="_blank"><strong>java.util.logging.Handler</strong></a> y que son los que encapsulan tanto la lógica de publicación de trazas  como la configuración de las mismas.</li>
<li>Estableciendo un <em>level</em> o nivel por <strong>Handler</strong> podemos  establecer el nivel mínimo de traza que queremos que recoja el HANDLER.  Estableciendo un nivel determinado se recogerán todas las trazas de ese  nivel y de los niveles superiores jerárquicamente (para conocer más  sobre los nieles de traza, <a title="Niveles de Traza en JDK Logging" href="http://www.lab.dit.upm.es/~lprg/material/apuntes/log/log.htm" target="_blank">pinchar aquí</a>). También se  puede establecer el nivel mínimo de traza <strong>por paquete de clases</strong>,  independientemente del nivel implementado por paquete (se usará la  configuración más restrictiva)</li>
<li>Además del nivel, se puede establecer un control secundario y  opcional sobre lo que se registra o no, mediante la asignación de un  filtro o <strong>Filter</strong> (clase que hereda de <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/util/logging/Filter.html" target="_blank"><strong>java.util.logging.Filter</strong></a>)  a un Handler. Un Filter, básicamente, <a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.iseries.doc/info/iseriesexp/ae/rtrb_createfilter.html" target="_blank">implementa un método <em>isLoggeable</em></a> que devuelve un booleano que indica si un <em>log </em>se debe trazar o no.</li>
<li>Si se quiere formatear las trazas generadas con alguna estructura  especifica, se debe implementar un <strong>Formatter</strong> (clase que herede <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/util/logging/Formatter.html" target="_blank"><strong>java.util.logging.Formatter</strong></a>)  y asignarlo al Handler deseado.</li>
<li>Toda esta configuración se hace a través de un fichero denominado <em>logging.properties</em></li>
</ol>
<p style="text-align: justify">La primera diferencia que chocará a todos los que venimos de usar <strong>log4j </strong>es que todo se configura programándolo. Es decir, no tienes una manera de poder configurar de forma flexible el formato de tus trazas. Si quieres un <strong>Formatter</strong> que saque el patrón de tu traza de un fichero de propiedades, vas a tener que programártelo.</p>
<h3 style="text-align: justify">TRABAJANDO CON LOG4J</h3>
<p style="text-align: justify">
<div id="attachment_4192" class="wp-caption alignright" style="width: 298px"><a href="http://sixservix.com/blog/david/files/2010/08/origen-glassfish.jpg"><img class="size-full wp-image-4192  " title="origen-glassfish" src="http://sixservix.com/blog/david/files/2010/08/origen-glassfish.jpg" alt="" width="288" height="411" /></a><p class="wp-caption-text">¿Son mis logs reales o sólo un sueño?</p></div>
<p style="text-align: justify">
<p style="text-align: justify">Para trabajar con <strong>log4j </strong>en <strong>Glassfish v2 </strong><a href="http://www.david-sanmartin.net/2009/11/configuracion-de-log4j-glassfish-para-desarrollo/" target="_blank">se recomendaba</a> configurar la librería  de traza como librería del sistema para evitar problemas con el <em>classloading</em> pero esto ya no puede hacerse con <strong>Glassfish v3</strong> así que <a href="http://nzpcmad.blogspot.com/2009/10/log4j-path-to-properties-file.html" target="_blank">la solución</a> pasa por indicar al servidor la ruta del fichero de configuración de <strong>log4j</strong>.</p>
<p style="text-align: justify">En <strong>log4j </strong>se configuran <em>Appender </em>(el equivalente de los Handler en  JSR-047) El <em>Appender </em>típico que todo el mundo utiliza al desarrollar es el <a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/ConsoleAppender.html" target="_blank"><em>org.apache.log4j.ConsoleAppender</em></a>, que publica los <em>logs</em> en la salida por defecto de <em>System.out</em>.</p>
<p style="text-align: justify">El problema es que las trazas no salen por la <em>consola </em>habitual que esperamos todos los programadores sino en un fichero <em>server.log</em> que se encuentra en la ruta <em>/midominio/logs/</em>.</p>
<p style="text-align: justify">Eso es bastante fácil de explicar porque  <strong>ese fichero es <a href="http://forums.java.net/jive/thread.jspa?threadID=52977" target="_blank">la salida por defecto del servidor</a></strong>, así que, ésa es su <em>consola</em>.</p>
<p style="text-align: justify">Lo que <strong>no tiene ni pies ni cabeza</strong> es que <strong>nuestras trazas salgan con el formato de las trazas de la API de <em>logging </em>de JDK</strong> o, más exactamente, <em>envueltas </em>por su formato, puesto que nuestro traza aparece&#8230; pero sólo como parte del mensaje de la traza de <em>logging </em>del JDK.</p>
<p style="text-align: justify">Bueno&#8230; podemos pensar que, de alguna manera, el sistema está ignorando nuestra configuración de <strong>log4j</strong>. Sin embargo, si configuramos cualquier otro <em>Appender</em>, por ejemplo uno que publique en un fichero <em>inception.log</em>, <strong>log4j </strong>funciona PERFECTAMENTE.</p>
<p style="text-align: justify">¿Entonces? <strong>¿Qué está pasando?</strong> ¿Por qué salen todas mis trazas rodeadas de almohadillas &#8216;#&#8217;  y con un retorno de carro cuando las publico por consola?</p>
<h3 style="text-align: justify">LA SOLUCIÓN AL MISTERIO</h3>
<p style="text-align: justify">No, no estamos soñando. Nuestras trazas son reales y nuestra configuración también. No estamos haciendo nada <em>mal</em>. Simplemente, alguien ha estado jugando con nosotros. Alguien ha estado <em>haciendo trampas</em>.</p>
<p style="text-align: justify"><strong>Glassfish</strong>, utiliza una implementación propia y sobrescrita del objeto <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html" target="_blank">System</a> cuyo método <em>out </em>devuelve un <em>PrintWriter </em>que redirige todas las salidas al sistema de <em>logging</em> del servidor. Probadlo, hacer un <em>System.out.println</em> en una clase desplegada en <strong>Glassfish</strong>. No sólo aparecerá en la salida por defecto -server.log- sino que, además, aparecerá con el formato específico del sistema de <em>logging</em>.</p>
<p style="text-align: justify">Lo más <em>grave </em>de todo esto es que <em>System </em>es una clase final. Es decir, que no puede ser extendida, precisamente para evitar lo que <strong>Glassfish </strong>ha conseguido: que nuestro código tenga un comportamiento extraño y nos desconcierte. <strong>Que nos tengamos que frotar los ojos para comprobar que no estamos soñando</strong>.</p>
<p style="text-align: justify">De acuerdo, <strong>Glassfish </strong>nos ha engañado pero ahora, después de leer este artículo sabemos cómo vencerlo:</p>
<ul style="text-align: justify">
<li><strong>¿Queremos modificar el formato de las trazas del servidor? </strong>Implementaremos nuestro propio <em>Formatter </em>y se lo asignaremos al <em>ConsoleHandler </em>del fichero <em>logging.properties</em></li>
<li><strong>¿Queremos que nuestras propias trazas no se mezclen con las del servidor?</strong> Nos olvidaremos de utilizar el <em>ConsoleAppender</em></li>
<li><strong>¿Queremos que sólo nuestras trazas de error salgan en la salida por defecto del servidor?</strong> Podremos utilizar un <em>ConsoleAppender </em>y configurarlo en nuestro <em>log4j.properties</em> para que sólo registre trazas de nivel ERROR o superiores (recordad que sea cual sea el nivel de traza de<strong> log4j</strong>, la salida se publicará en <em>System.out</em> y el <em>logging </em>de JAVA las publicará por defecto como trazas de nivel INFO)</li>
</ul>
<p style="text-align: justify"><strong>Glassfish </strong>ha luchado contra nosotros y ha perdido, por lo menos a nivel de <em>logging</em>. Nosotros le dominamos. No él, a nosotros. Y, desde luego, <strong>no estamos soñando</strong>&#8230; ¿o sí?</p>
<p style="text-align: justify"><span style="color: #339966"><strong>BONILINKS:</strong></span></p>
<ul>
<li><a href="https://issues.sonatype.org/browse/NEXUS-1307" target="_blank">Gente despotricando sobre el tweaking de System de Glassfish</a></li>
<li><a href="http://forums.terracotta.org/forums/posts/list/1957.page" target="_blank">Gente flipando con el comportamiento de System.out</a></li>
<li><a href="http://www.javadocexamples.com/java_source/com/sun/enterprise/server/logging/UniformLogFormatter.java.html" target="_blank">La fuente del UniformLogFormatter</a> (o el origen del formato de traza infernal de <strong>Glassfish</strong>)</li>
<li><a href="http://wiki.glassfish.java.net/Wiki.jsp?page=FaqConfigureLogging" target="_blank">Información Oficial de Glassfish sobre configuración de <em>logging</em></a>, donde se les olvida comentar lo del <em>asuntillo </em>del <em>System.out</em>&#8230;</li>
<li><a href="http://www.crazysquirrel.com/computing/java/logging.jspx" target="_blank">Información para entender lo básico de la API Java Logging</a></li>
</ul>
<p style="text-align: justify">
<p style="text-align: justify">


<p>Artículos relacionados:<ol><li><a href='http://sixservix.com/blog/david/2010/06/02/transacciones-y-bloqueos-en-glassfish-v3-con-ejb3-1-y-jpa2-iii/' rel='bookmark' title='Permanent Link: Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (III)'>Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (III)</a> <small>Tercera parte del tutorial sobre como utilizar transacciones y bloqueos...</small></li>
<li><a href='http://sixservix.com/blog/david/2010/05/12/transacciones-y-bloqueos-en-glassfish-v3-con-ejb3-1-y-jpa2-ii/' rel='bookmark' title='Permanent Link: Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (II)'>Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (II)</a> <small>Segunda parte del tutorial sobre como utilizar transacciones y bloqueos...</small></li>
<li><a href='http://sixservix.com/blog/david/2010/05/10/transacciones-bloqueos-glassfish-v3-ejb31-jpa2/' rel='bookmark' title='Permanent Link: Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (I)'>Transacciones y bloqueos en Glassfish v3 con EJB3.1 y JPA2 (I)</a> <small>Un sencillo tutorial sobre como utilizar transacciones y bloqueos con...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://sixservix.com/blog/david/2010/08/24/logging-glassfish/feed/</wfw:commentRss>
		<slash:comments>364</slash:comments>
		</item>
		<item>
		<title>Entrada en Producción</title>
		<link>http://sixservix.com/blog/david/2010/01/11/entrada-en-produccion/</link>
		<comments>http://sixservix.com/blog/david/2010/01/11/entrada-en-produccion/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 06:45:01 +0000</pubDate>
		<dc:creator>David Bonilla</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[bigbang]]></category>
		<category><![CDATA[fases]]></category>
		<category><![CDATA[paralelo]]></category>
		<category><![CDATA[storetto]]></category>

		<guid isPermaLink="false">http://sixservix.com/blog/david/?p=1641</guid>
		<description><![CDATA[Cuando este artículo salga publicado, yo estaré a punto de llegar a Valencia para la entrada en producción de storetto, el proyecto en el que he estado trabajando durante los últimos 3 años. Para este proyecto en concreto, para este cliente en concreto, elegimos una combinación de implementación en Big Bang y una pseudo-implementación en [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify"><img class="alignleft size-full wp-image-1643" style="margin: 5px 10px" src="http://sixservix.com/blog/david/files/2010/01/luna_peq1.jpg" alt="luna_peq" width="247" height="173" />Cuando este artículo salga publicado, yo estaré a punto de llegar a Valencia para la <strong>entrada en producción de <a href="http://sixservix.com/es/storetto.php" target="_blank">storetto</a></strong>, el proyecto en el que he estado trabajando durante los últimos 3 años.</p>
<p style="text-align: justify">Para este proyecto en concreto, para este cliente en concreto, elegimos una combinación de <strong>implementación en <em>Big Bang </em></strong>y una <strong>pseudo-implementación en Paralelo</strong>. Hoy, se comienza a trabajar en el nuevo sistema y se abandona definitivamente el antiguo.</p>
<p style="text-align: justify">Según se acerca la <em>hora H</em> del día D, no puedes evitar preguntarte: ¿Elegimos la estrategia correcta o elegimos la única estrategia posible? En este artículo, <span style="text-decoration: underline">intentaré explicar las distintas estrategias de entrada en producción</span> y cómo la realidad choca brutalmente con el dogmatismo académico.<span id="more-1641"></span></p>
<h3 style="text-align: justify">ESTRATEGIAS DE ENTRADA EN PRODUCCIÓN</h3>
<p style="text-align: justify">Como &#8220;<em>entrada en producción</em>&#8221; se conoce al momento de puesta en marcha de una aplicación y/o servicio. Existen <strong>tres estrategias básicas</strong> de entrada en producción:</p>
<ol style="text-align: justify">
<li><em><strong>Big Bang</strong></em>. La implementación en <em>Big Bang</em> impone que el cambio del sistema antiguo al nuevo se produce en una fecha determinada. <span style="text-decoration: underline">Todo el mundo comienza a usar el nuevo sistema en el mismo momento y el antiguo sistema no volverá a ser usado</span> desde entonces.</li>
<li><strong>En Fases</strong>. La implementación en fases implica la entrada en producción en <span style="text-decoration: underline">varias fases en distintos periodos de tiempo</span>. Implica definir qué parte de la nueva aplicación comprenderá cada fase y la convivencia entre la nueva aplicación y la antigua, hasta que la última de las fases se haya completado.</li>
<li><strong>En Paralelo</strong>. La implementación en paralelo supone el <span style="text-decoration: underline">trabajo simultáneo con el antiguo y el nuevo sistema durante un determinado periodo de tiempo</span> para minimizar riesgos. Si se alcanzan los objetivos del nuevo sistema, se abandona el antiguo.</li>
</ol>
<h3 style="text-align: justify">PROS Y CONTRAS DE CADA ESTRATEGIA</h3>
<p style="text-align: justify">Cada estrategia tiene sus pros y sus contras, pero, al final, todo es cuestión -como casi siempre- de tiempo y dinero.</p>
<p style="text-align: justify">No se discute que <strong>la estrategia de implementación que minimiza el riesgo sea el Paralelo</strong>. El problema es que <strong>dispara los costes</strong>. Para poder implementar en paralelo, es necesario que los usuarios hagan su trabajo dos veces: en el antiguo sistema y en el nuevo. O se contrata nuevo personal o se sobrecarga al actual. En cualquier caso, es necesaria una inversión en recursos humanos.</p>
<p style="text-align: justify"><img class="alignright size-full wp-image-1675" style="margin: 5px 10px" src="http://sixservix.com/blog/david/files/2010/01/luna_peq2.jpg" alt="luna_peq2" width="262" height="180" />En una situación intermedia, está la <strong>implementación en Fases</strong>. Eso sí, la elección de esta estrategia <strong>implica asumir el coste derivado del desarrollo específico para permitir la convivencia entre el antiguo y el nuevo sistema</strong>. Este desarrollo específico tiene una esperanza de vida completamente acotada: será directamente <em>tirado a la basura</em> en cuanto la totalidad del nuevo sistema entre en producción.</p>
<p style="text-align: justify">Finalmente, <strong>la estrategia en <em>Big Bang</em> es la más barata&#8230; y la que más riesgo conlleva</strong>. No hay que hacer ningún desarrollo específico para que convivan los dos sistemas y tampoco supone ningún coste en recursos humanos. Eso sí, <strong>el riesgo de que algo vaya mal -muy mal- en la entrada en producción sube exponencialmente</strong>.</p>
<h3 style="text-align: justify">UN CASO REAL: STORETTO</h3>
<p style="text-align: justify">Os explicaré cuál ha sido la estrategia de entrada en producción de <a href="http://sixservix.com/es/storetto.php" target="_blank">storetto</a>, un caso real y que he vivido de primera mano como Jefe de Proyecto.</p>
<p style="text-align: justify"><strong>Storetto</strong> tiene la particularidad de entrar en producción junto con nuestro otro producto, <a href="http://sixservix.com/es/erps1.php" target="_blank">ERP S1</a>. Sin embargo, mientras éste ya ha sido probado y está funcionando en varios clientes, ésta es la primera vez que <strong>storetto</strong> entra en producción.</p>
<p style="text-align: justify">La entrada en producción de <strong>ERP S1</strong> se hace con una estrategia de <em>Big Bang,</em> puesto que se confía en la solidez del producto y era inviable una puesta en marcha por Fases. La aplicación que sustituye ERP S1 es un antiguo ERP legado y escasamente documentado desarrollado en <em>4GL/Informix</em>. Comunicar y conseguir que las dos aplicaciones trabajaran en paralelo suponía un coste que nadie quiso asumir. Así que no quedó más opción que el <em>Big Bang</em>.</p>
<p style="text-align: justify">En el caso de <strong>storetto</strong>, la aplicación sustituida era la misma, aunque se concibió como un proyecto diferente a <strong>ERP S1 </strong>y con arquitectura propia. <span style="text-decoration: underline">La implementación en <em>Big Bang </em>quedó descartada por el altísimo riesgo que conllevaba</span>. No sólo por ser la primera entrada en producción de <strong>storetto</strong>, sino por las especiales características de la misma: se ejecuta en un entorno hostil, utiliza radiofrecuencia, implementa un módulo de comunicación complejo con <strong>ERP S1</strong> y, sobre todo, <span style="text-decoration: underline">trabaja en tiempo real</span>.</p>
<div id="attachment_1692" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-1692" src="http://sixservix.com/blog/david/files/2010/01/nasa.jpg" alt="Por mucha metodología y teoría, una Entrada en Producción, no deja de tener la emoción e incertidumbre de mandar un hombre a la luna :)" width="450" height="179" /><p class="wp-caption-text">Por mucha metodología y teoría, una Entrada en Producción no deja de tener la emoción e incertidumbre de mandar un hombre a la luna </p></div>
<p style="text-align: justify"><span style="text-decoration: underline">La implementación en fases también era inviable</span> porque <strong>la nueva aplicación rompe radicalmente con el concepto y diseño de la antigua</strong>. Mientras que el antiguo sistema se basaba en el trabajo manual con papel  e impreso y su posterior mecanización por parte de administrativos, el nuevo <strong>delega todo el trabajo en los propios operarios del almacén, mediante el uso de terminales de carretillas y radiofrecuencia</strong>. Se intenta eliminar casi por completo el papel en los procesos internos e introduce nuevas funcionalidades principales como la trazabilidad alimentaria.</p>
<p style="text-align: justify">Así, <span style="text-decoration: underline">la opción recomendada era la entrada en Paralelo, pero éste no ha sido un paralelo &#8220;real&#8221;</span>, puesto que el trabajo con la parte de administración, el dominio funcional que cubrirá el <strong>ERP S1</strong> no ha podido probarse con el nuevo sistema (recordemos, entra en <em>Big Bang</em>). Además, el paralelo ha sido &#8220;progresivo&#8221;. En vez de manejar todo el almacén por completo con <strong>storetto </strong>desde el primer día, hemos ido incorporando productos poco a poco. Al principio, empezamos con una referencia y&#8230; hasta un día antes de la implementación, no han trabajado con todos los artículos e inventario que maneja el almacén que entra en producción. ¿Por qué? Por lo de siempre: falta de tiempo del personal del almacén o, lo que es lo mismo, dinero. Al final, todo se traduce en dinero.</p>
<p style="text-align: justify">Nuestra obligación como informáticos es informar de todas las soluciones posibles y proponer la que creamos más adecuada. La decisión, como casi siempre, la toman los directivos o el cliente, que analizan <strong>el coste frente al riesgo</strong>.</p>
<p style="text-align: justify">¿Que qué tal saldrá la entrada en producción de hoy? Espero que bien, aunque eso sí, seguro que aparece algún contratiempo. Estamos hablando de proyectos gigantescos con miles de clases, la casuística a probar es infinita. Si estáis interesados en saber más, espero vuestro <em>feedback </em>en los comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://sixservix.com/blog/david/2010/01/11/entrada-en-produccion/feed/</wfw:commentRss>
		<slash:comments>341</slash:comments>
		</item>
		<item>
		<title>¡Almacenes! ¡Almacenes! ¡Almacenes!</title>
		<link>http://sixservix.com/blog/david/2009/12/17/almacenes/</link>
		<comments>http://sixservix.com/blog/david/2009/12/17/almacenes/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 06:15:56 +0000</pubDate>
		<dc:creator>David Bonilla</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[sixservix]]></category>
		<category><![CDATA[tecnologías de la información]]></category>
		<category><![CDATA[almacenes]]></category>
		<category><![CDATA[cadena de suministro]]></category>
		<category><![CDATA[storetto]]></category>
		<category><![CDATA[supply chain management]]></category>

		<guid isPermaLink="false">http://sixservix.com/blog/david/?p=1316</guid>
		<description><![CDATA[Los programadores solemos cometer dos grandes errores de perogrullo cuando comenzamos nuestra carrera: &#8220;Yo te hago una página web en 2 minutos&#8220;: Calificar como trabajo menor todo lo que tiene que ver con diseño, maquetación, usabilidad e interfaz de usuario &#8220;¿Contabilidad? Yo soy informático, no contable&#8220;: Despreciar el conocimiento funcional o know-how y perseguir únicamente [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Los programadores solemos cometer dos grandes errores de perogrullo cuando comenzamos nuestra carrera:</p>
<ol>
<li>&#8220;<em>Yo te hago una página web en 2 minutos</em>&#8220;: Calificar como <em>trabajo menor</em> todo lo que tiene que ver con diseño, maquetación, usabilidad e interfaz de usuario</li>
<li>&#8220;<em>¿Contabilidad? Yo soy informático, no contable</em>&#8220;: Despreciar el conocimiento funcional o <em>know-how</em> y perseguir únicamente la excelencia técnica</li>
</ol>
<p style="text-align: justify">Con el tiempo, la realidad te va poniendo en tu sitio y te das cuenta de que puedes tener una aplicación con los <em>bytecodes</em> más limpios y relucientes, pero el cliente -ese ser extraño que paga las facturas- pensará que todo es una patata si la interfaz no es bien bonita y tiene colores y todas esas cosas. Por otro lado, <strong>programar sin tener la menor idea de lo que quiere un cliente te hace depender de un analista que te traduzca sus necesidades a tu idioma y limita tu papel al de chimpancé que golpea teclas a la voz de su <em>amo</em></strong>. Chimpancé cualificado, pero chimpancé al fin y al cabo. No aportas nada al negocio, que es, por si no te habías dado cuenta, <strong>donde está la pasta</strong>.</p>
<p style="text-align: justify">
<p style="text-align: justify"><img class="aligncenter size-full wp-image-1317" src="http://sixservix.com/blog/david/files/2009/12/almacen.jpg" alt="almacen" width="600" height="330" /></p>
<p style="text-align: justify">Hace poco, mi amigo Jeroclo <em>el espartano</em> me mandó <a href="http://www.dailymail.co.uk/news/article-1233766/Santas-little-helper-Todays-busiest-online-shopping-day-year-So-ready-biggest-grotto-Lapland.html" target="_blank">un enlace</a> sobre el almacén de <strong>Amazon</strong> en Milton Keynes, cerca de Londres. Algo tan -supuestamente- aburrido y poco motivador como la gestión de almacenes parecía adquirir <em>glamour</em> y caché 2.0 cuando metías la palabra &#8220;<strong>Amazon</strong>&#8221; de por medio.  De repente, me di cuenta de que, ¡vaya! <strong>¡yo desarrollo <a title="STORETTO" href="http://sixservix.com/es/storetto.php" target="_blank">software para almacenes</a>! </strong>y&#8230; ¡Vaya! ¡Esto es un <em>blog </em>corporativo! Así que me he decidido a escribir una serie de artículos sobre gestión de almacenes, desde el punto de vista del desarrollo informático, en los que intentaré explicaros por qué, a pesar de su engañosa simplicidad, <strong>es uno de los proyectos más difíciles que puedes llegar a afrontar</strong> y cuáles son los retos y oportunidades que representa.</p>
<p style="text-align: justify">Aunque <strong>el 70% de la audiencia de este blog son desarrolladores java radicales</strong> poco o nada interesado en estos temas (el 30% restante son mi madre y mi abuela), os animo a que sigáis leyendo. Estoy seguro de que lo encontraréis interesante.<span id="more-1316"></span></p>
<h3 style="text-align: justify">1. (PEQUEÑA) INTRODUCCIÓN A LA LOGÍSTICA Y AL SOFTWARE QUE LA CONTROLA</h3>
<p style="text-align: justify">Tranquilos, no voy a escribir un ensayo exhaustivo sobre <em>software</em> de almacenes, eso daría para un libro. Ya que habéis llegado hasta aquí, os compensaré haciendo lo más corto y ameno posible este artículo. Sólo haré una pequeña introducción sobre como es el<em> software</em> de gestión de almacenes.</p>
<p style="text-align: justify">La Gestión de Almacenes se encuadra dentro del <strong>área de Logística</strong> de una compañía. La <a title="Real Academia Española" href="http://www.rae.es/rae.html">RAE</a> define la <a href="http://es.wikipedia.org/wiki/Log%C3%ADstica" target="_blank">logística</a> como el <em>conjunto de medios y métodos necesarios para llevar a cabo la organización de una empresa, o de un servicio, especialmente de distribución</em>. Hablando claro, el área que se encarga de conseguir los bienes que necesita una empresa para producir sus productos y servicios, almacenar dichos bienes y los obtenidos en el proceso productivo de dicha empresa y, finalmente, distribuirlos a los clientes.</p>
<p style="text-align: justify">Dentro de todo este berenjenal nos podemos encontrar dos tipos de software.</p>
<ol style="text-align: justify">
<li><span style="text-decoration: underline">Software gestor de almacenes</span> (<strong>SGA </strong>o, en inglés, <strong>WMS </strong>de <em>Warehouse Management Software</em>)</li>
<li><span style="text-decoration: underline">Software gestor de cadena de suministro</span> (<strong>SGC </strong>o, en inglés, <strong>SCM </strong>de <em>Supply Chain Management</em>)</li>
</ol>
<p style="text-align: justify">La principal diferencia entre un SGA y un SGC es su alcance funcional. Mientras que un SGA controla las entradas y salidas de mercancía de un almacén y la gestión de dicha mercancía dentro del mismo; un SGC gestiona desde los pedidos a proveedores a los repartos y consumos de los clientes. Por poneros un ejemplo clarificador: mediante un <strong>SGC </strong>puedo controlar el consumo medio diario de una determinada mercancía, tener configurado el tiempo máximo de abastecimiento que me da mi proveedor y, en base a dichos datos, poder calcular un <strong>Stock Mínimo</strong> que debo tener en el almacén para no correr riesgo de sufrir una <strong>rotura de stock</strong> o, lo que es lo mismo, <span style="text-decoration: underline">quedarme sin mercancía para servir a mis clientes</span> (la peor pesadilla que puede sufrir una empresa: vender -que es lo <strong>verdaderamente complicado</strong>- y no poder servir)</p>
<h3 style="text-align: justify">2. PUES PARECE MUY SENCILLO ¿POR QUÉ DICES QUE ES TAN COMPLICADO?</h3>
<div id="attachment_1449" class="wp-caption alignleft" style="width: 216px"><img class="size-full wp-image-1449 " src="http://sixservix.com/blog/david/files/2009/12/baby8.jpg" alt="baby8" width="206" height="314" /><p class="wp-caption-text">Así trabajan un SGA y un SGC, abrazaditos :)</p></div>
<p style="text-align: justify">La logística se basa en la <strong>Teoría de la Caja de Zapatos</strong>: metes un zapato, sacas un zapato, pero la realidad se complica. BASTANTE.</p>
<p style="text-align: justify">Cualquier diseño de un sistema informático se basa en un conjunto de <em>inputs </em>o entrada de datos esperados y de <em>outputs</em> o datos producidos por el sistema según los <em>inputs </em>recibidos. El problema es que, cuando diseñas un sistema para una cadena de suministro, tienes que tener en cuenta que <strong>puedes tener un número infinito de <em>inputs</em></strong>. Os pongo un ejemplo, tú pides a un proveedor una mercancía y te manda menos, o más&#8230; o incluso OTRA. Pero, aún es peor, <span style="text-decoration: underline">un proveedor puede mandarte mercancía aunque no le hayas pedido nada</span>. Una vez que recibes la mercancía, te pueden pasar mil cosas más: que la mercancía esté rota, o que no esté porque la hayan robado, o que el operario que registró la entrada se equivocara en el conteo&#8230; infinitas posibilidades. Porque en estas aplicaciones no trabajas con datos sino con mercancía real, que puede desaparecer, aparecer o transformarse sin destruirse, como la energía. Parece que la <strong>Teoría de la Caja de Zapatos</strong> se va complicando, ¿verdad?</p>
<p style="text-align: justify">Otro punto a tener en cuenta es el <strong>Trabajo en Tiempo Real</strong><em>.</em> La gente del almacén trabaja con tu sistema en tiempo real. Si algo va mal no puedes decir &#8220;<em>espera que te lo miro cuando tenga un rato</em>&#8221; porque a lo mejor eso supone tener a <span style="text-decoration: underline">6 chicarrones del norte y a un <em>trailer </em>de 40 toneladas parados en la puerta de tu almacén</span>. Creedme, hasta que no has lidiado con un carretillero soliviantado de 2&#215;2 metros no sabes lo que es tratar con usuarios <em>difíciles</em>.  Y, por supuesto, todos los trabajos se hacen en paralelo. Ya puedes hacer que hasta tu <em>javascript</em> sea <em>ThreadSafe</em> porque las tareas se suelen hacer entre múltiples usuarios al mismo tiempo.</p>
<p style="text-align: justify">Por último, os hablaré del <strong>Trabajo en <em>Ambiente Hostil</em></strong>. Y es que, tu aplicación, no va a estar corriendo en un servidor atacado por cómodos oficinistas y ejecutivos desde sus Mac de diseño, sino por operarios que trabajan de sol a sol en un almacén donde hace un frío que pela, a través de terminales de mano o de carretilla que se comunican mediante un WI-FI industrial que debe soportar -en movimiento- obstáculos -como estanterías de hierro- y que cuentan, como mucho, con una interfaz táctil de 7 pulgadas.</p>
<p style="text-align: justify">Os reto a que cojáis a vuestro gurú del diseño y la usabilidad y lo pongáis a desarrollar interfaces táctiles que contengan toda la información necesaria y que <strong>puedan ser manejadas por tipos que llevan GUANTES de faena</strong>. Creedme, es&#8230; difícil.</p>
<h3 style="text-align: justify">3. EBRI FIDBAK GÜIL BI (ESPESIALI) APRESIERIT</h3>
<p style="text-align: justify">Suficiente por hoy.</p>
<p style="text-align: justify">Aunque no lo suelo pedir, <strong>cualquier comentario y/o sugerencia será especialmente apreciado</strong> porque <span style="text-decoration: underline">no tengo ni idea de lo mucho o poco que os puede interesar</span> conocer más del ámbito funcional de la Cadena de Suministro y de muchas otras aplicaciones corporativas en las que estoy embarcado (<strong>ERP</strong>, <strong>CRM</strong>, etc&#8230;). Por eso, os ruego que me hagáis llegar vuestras opiniones. Buenas o malas, seguro que todas son constructivas.</p>
]]></content:encoded>
			<wfw:commentRss>http://sixservix.com/blog/david/2009/12/17/almacenes/feed/</wfw:commentRss>
		<slash:comments>489</slash:comments>
		</item>
		<item>
		<title>Qué hago y porqué lo hago</title>
		<link>http://sixservix.com/blog/david/2009/10/19/que-hago-y-porque-lo-hago/</link>
		<comments>http://sixservix.com/blog/david/2009/10/19/que-hago-y-porque-lo-hago/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 06:15:00 +0000</pubDate>
		<dc:creator>David Bonilla</dc:creator>
				<category><![CDATA[david]]></category>
		<category><![CDATA[sixservix]]></category>
		<category><![CDATA[erp s1]]></category>
		<category><![CDATA[storetto]]></category>

		<guid isPermaLink="false">http://sixservix.com/blog/david/?p=330</guid>
		<description><![CDATA[No suelo escribir sobre lo que hago exactamente. Uno tiene un punto de vergüenza a la hora de hablar de sí mismo y la suficiente humildad y criterio como para darse cuenta de que su ombligo no le interesa a nadie. Por eso, los temas de este blog tienden hacia el desarrollo de software en [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify"><img class="alignleft size-full wp-image-344" style="margin-left: 3px;margin-right: 10px" src="http://sixservix.com/blog/david/files/2009/10/post1b.jpg" alt="post1b" width="298" height="224" />No suelo escribir sobre lo que hago exactamente. Uno tiene un punto de vergüenza a la hora de hablar de sí mismo y la suficiente humildad y criterio como para darse cuenta de que su ombligo no le interesa a nadie. Por eso, los temas de este blog tienden hacia el desarrollo de software en general más que hacia mi día a día en particular.</p>
<p style="text-align: justify">El caso es que, hace un par de fines de semana, volvieron a preguntarme &#8220;<em>pero tú, David, ¿exactamente qué haces?</em>&#8221; Y, como siempre, resoplé y puse los ojos en blanco. No es que me importe contar lo que hago pero, a veces, es muy frustrante intentar explicárselo a alguien que no sea informático sin aburrirle con una perorata de hora y media. El problema es que,me han hecho la misma pregunta muchas veces y, por increíble que parezca, en algunas ocasiones incluso dentro de mi propia empresa. Hace dos días, tomando un café, un compañero me preguntó de nuevo &#8220;<em>pero tú, David, ¿exactamente qué haces?</em>&#8221; :) .</p>
<p style="text-align: justify">Reflexionando sobre el tema, me di cuenta de que éste es un <strong>blog corporativo</strong> y, como tal, nació como un canal de comunicación con todos mis compañeros -desperdigados por toda España y parte de Latinoamérica- y gente relacionada con mi actividad profesional: clientes, proveedores y camaradas <em>picateclas</em>. Así que, voy a intentar explicar exactamente lo que hago y porqué lo hago. Si alguien me lo vuelve a preguntar, siempre podré remitirle el enlace a este post. Si a ti te interesa, pulsa en &#8220;Leer más&#8221;<span id="more-330"></span></p>
<p style="text-align: justify">Trabajo como Jefe de Proyecto en <a href="http://www.sixservix.com" target="_blank">SIXSERVIX</a>, una compañía del <strong>Grupo VARMA</strong>. El Grupo VARMA se dedica a importar y distribuir bebidas y, aunque no lo sepáis, la mayoría sois clientes nuestros. Cada vez que os bebáis una copa de <strong>Ron Barceló</strong>, <strong>Cutty Sark</strong>, <strong>Jack Daniel&#8217;s</strong> o <strong>Cointreau</strong>, por poner un ejemplo, estáis consumiendo nuestros productos. También si os preparáis unas palomitas <strong>MicroPop USA</strong> para ver una peli en casa, o si os coméis una caja de galletas <strong>Walker&#8217;s</strong>, incluso si alimentáis a vuestros bebés con los potitos ecológicos <strong>Hipp</strong>, estáis consumiendo productos de la empresa donde trabajo.</p>
<p style="text-align: justify">Dentro de este <em>totum revolutum</em> se supone que trabajo como <strong>Jefe de Proyecto</strong>. ¿Qué hace un Jefe de Proyecto? Definir las tareas que quedan pendientes, establecer <em>plannings</em> y fases de entrega, gestionar los recursos (personas, programas, servicios) de los que dispone y vigilar que dichos <em>plannings</em> y el presupuesto de coste del proyecto no sufran desviaciones. Ésa es la teoría pero, en la práctica, lo mismo programo que analizo o evalúo software, hago de preventa o toco la gaita. En cualquier caso, creo adivinar lo que más de uno estará pensando <strong>¿Qué tiene que ver un informático, un Jefe de Proyecto, con potitos ecológicos?</strong> Intentaré explicároslo.</p>
<p style="text-align: justify">SIXSERVIX era lo que los informáticos denominamos &#8220;empresa cliente&#8221; o &#8220;empresa final&#8221;. Es decir, una empresa que -a priori- no vive de la informática y donde -de nuevo, a priori- tienes menos presión por hacer las cosas rápido y mal.</p>
<p style="text-align: justify">Pero esto era demasiado fácil. En vez de dedicarnos a gestionar presupuestos y encargar proyectos, apostamos por desarrollarlos nosotros mismos. En vez de hacer proyectos, quisimos <strong>crear productos</strong>.  No es que no nos guste el ron, de hecho nos gusta muchísimo :) , pero queremos que nuestros sueldos no dependan del mucho o poco ron que vosotros bebáis sino, para bien o para mal, de nuestra capacidad de crear productos que el mercado -no sólo nuestro grupo de empresas- demande.</p>
<p style="text-align: justify">
<p style="text-align: center"><img class="aligncenter size-full wp-image-374" src="http://sixservix.com/blog/david/files/2009/10/varma.jpg" alt="varma" width="533" height="183" /></p>
<p style="text-align: justify">
<p style="text-align: justify">Como resultado de todo este esfuerzo, han nacido el <a href="http://sixservix.com/es/erps1.php" target="_blank">ERP S1</a> y el <a href="http://sixservix.com/es/storetto.php" target="_blank">SCM STORETTO</a>, los dos &#8220;niños&#8221; que han ocupado la mayor parte de mi tiempo durante los últimos 6 años. Os explicaré qué es cada cosa:</p>
<ul style="text-align: justify">
<li><strong>ERP S1</strong>. Lo de ERP viene de <em>Enterprise Resource Planner</em> y, básicamente, es un programa que controla todos y cada uno de los aspectos de una empresa. Desde compras a cobros, pasando por nóminas a contabilidad o liquidación de impuestos. Seguro que conocéis programas que hacen más que bien cada una de esas cosas. Lo bueno de un ERP es que hace que todo esté integrado. Así, cuando en un ERP se calcula la nómina de alguien,  por ejemplo, se genera un asiento contable, se liquidan los impuestos con hacienda y se imprime la nómina en sí. Cuando un directivo consulte un balance de beneficios, éste incluirá automáticamente el gasto de la nómina y, por supuesto, todas las ventas. Otro ejemplo para que podáis entender el nivel de integración: cuando un empleado se pone malo, se registra la baja, el director de RRHH puede consultar los empleados que están de baja o incluso un histórico de las mismas y, de nuevo, si la baja es prolongada, la empresa podrá deducirse dinero de la cotización de la seguridad social, afectando al cálculo de las nóminas. Todo está interconectado y el sistema se alimenta a sí mismo. <strong>Un ERP es el software más potente y crítico que se puede construir a nivel empresarial</strong> y constituye el corazón del negocio de la empresa que lo utiliza.</li>
<li><strong>SCM STORETTO</strong>. Lo de SCM viene de <em>Supply Chain Management</em> o, lo que es lo mismo, Software Gestor de Cadena de Suministro. Siendo la actividad principal de VARMA la distribución de bebidas y alimentación, es evidente la importancia de tener un buen producto para gestionar la logística. Al contrario de lo que algunos de nuestros compañeros piensan, STORETTO no es sólo un software que gestione almacenes y la mercancía  que hay en los mismos sino que llega mucho mas allá. STORETTO es un SCM porque, por ejemplo, en base al consumo de mercancía que tengas y al tiempo que tarden tus proveedores en reponerla, puede llegar a calcular el número de días que tienes  aseguradas tus ventas y avisarte si hay posibilidades de que rompas tu stock (lo peor que le puede pasar a una empresa es que venda algo y no tenga disponibilidad para servirlo).</li>
</ul>
<p style="text-align: justify">Comprendiendo la complejidad y dimensión de un ERP puede que entendáis un poco mejor porqué tardamos casi cinco años en acabarlo y porqué mi barba cada vez tiene más canas.</p>
<p style="text-align: justify">Por supuesto, intento que el trabajo no me absorba por completo. Me gustan un montón de cosas como viajar, la gastronomía, el cine o los videojuegos, pero eso puede dar para otro post mas largo todavía&#8230;</p>
<p style="text-align: justify">Espero que ahora algunos tengáis un poco más claro qué hago. Sobre todo, si trabajáis conmigo :D</p>
]]></content:encoded>
			<wfw:commentRss>http://sixservix.com/blog/david/2009/10/19/que-hago-y-porque-lo-hago/feed/</wfw:commentRss>
		<slash:comments>228</slash:comments>
		</item>
	</channel>
</rss>

