<?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>Bosque Viejo &#187; Desarrollo de Software</title>
	<atom:link href="http://bosqueviejo.net/category/desarrollo-de-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://bosqueviejo.net</link>
	<description>Sitio web sobre programación, software libre, redes, servidores, ofimática... y todo lo relacionado con la informática que nos rodea</description>
	<lastBuildDate>Thu, 22 Jul 2010 07:02:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Resolviendo Shikaku</title>
		<link>http://bosqueviejo.net/2010/07/11/resolviendo-shikaku/</link>
		<comments>http://bosqueviejo.net/2010/07/11/resolviendo-shikaku/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 13:01:44 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[algoritmo voraz]]></category>
		<category><![CDATA[algoritmo vuelta atrás]]></category>
		<category><![CDATA[shikaku]]></category>
		<category><![CDATA[uned]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=456</guid>
		<description><![CDATA[Esta es una práctica que realicé (y comenté) en diciembre de 2008 para la asignatura de Programación III de la UNED. La práctica se basaba en realizar un sistema para resolver tableros de shikaku, mediante el algoritmo de vuelta atrás. Mi solución es óptima pero no del todo correcta desde un punto de vista académico, [...]


Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2008/12/13/algoritmos-heuristicos-y-algoritmos-voraces/' rel='bookmark' title='Permanent Link: Algoritmos heurísticos y algoritmos voraces'>Algoritmos heurísticos y algoritmos voraces</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Esta es una práctica que realicé (y <a href="http://bosqueviejo.net/2008/12/13/algoritmos-heuristicos-y-algoritmos-voraces/">comenté</a>) en diciembre de 2008 para la asignatura de Programación III de la UNED.</p>
<p>La práctica se basaba en realizar un sistema para resolver tableros de shikaku, mediante el algoritmo de vuelta atrás. Mi solución es óptima pero no del todo correcta desde un punto de vista académico, ya que el uso del algoritmo (de <em>backtracking</em>) es menos usado de lo que debería.</p>
<p>Para poder ver el código, este puede descargarse a través de un cliente de Subversion, en sistemas Unix/Linux es tan fácil como:</p>
<pre>svn co http://project.bosqueviejo.net/svn/shikaku/trunk</pre>
<h3>Explicación del código</h3>
<p>Bueno, tengo que reconocer que, después de algo más de un año de haberlo hecho, he tenido que releer y revisar de nuevo todo para acordarme (y reaprender) cómo hace lo que hace.</p>
<p>Por ello, voy a escribir una documentación básica sobre el código en sí, para tenerla como referencia, cuando tenga que volver al mismo otra vez, y para que sirva a todos aquellos que lo necesiten.</p>
<p>En principio, el código se divide en las siguientes clases:</p>
<ul>
<li><strong>shikaku.tablero.Combinacion</strong>: esta clase se encarga de almacenar combinaciones. Una combinación es un rectángulo que se sitúa ocupando un espacio de X*Y=N. La combinación debe de tener en alguna de sus casillas el número contenido, por lo que se almacena también la ordenada de N para comprobaciones.</li>
<li><strong>shikaku.tablero.Ordenada</strong>: es cada uno de los números que aparecen en el tablero. Se almacena su posición dentro del tablero y la representación numérica del mismo.</li>
<li><strong>shikaku.tablero.Tablero</strong>: almacena las dimensiones del tablero, la lista de combinaciones fijas (las que solo tienen una combinación válida detectada) y la lista de soluciones posibles para el tablero.</li>
</ul>
<p>Una ejecución de <strong>shikaku</strong> tiene los siguientes pasos:</p>
<ol>
<li>Entra en <em>main</em> de la clase <em>shikaku</em>, donde se detecta el origen de datos, hasta saber de donde se va a cargar el tablero.</li>
<li>En <em>run</em> se crea una instancia del tablero, y se ejecuta, para cada punto del tablero, el <em>generador</em> de la clase <em>Combinacion</em>.</li>
<li>El <em>generador</em> se encarga de buscar combinaciones válidas para el punto dado, dentro del tablero y validando su posición dentro del tablero (es decir, que no haya parte del rectángulo fuera) y con respecto al resto de puntos (que no tenga contenido nada más que el punto del que tiene que hacer la combinación).</li>
<li>El último paso para la resolución, es llamando a <em>buscaSoluciones</em>, de la clase <em>Tablero</em>, que se encarga de realizar el algoritmo de vuelta atrás para buscar las soluciones al tablero.</li>
</ol>
<p>Estos son los pasos más importantes dentro del código para resolver el tablero de shikaku.</p>
<h3>La depuración</h3>
<p>Uno de los motivos por los que el algoritmo no es del todo de tipo vuelta atrás, es precisamente por el uso de tres algoritmos voraces que se ejecutan antes que el último, de vuelta atrás. Estos algoritmos realizan una criba sobre las combinaciones basándose en tres premisas que debe cumplir cada combinación para ser válida:</p>
<ol>
<li><strong>Que no haya nada fuera del tablero</strong>: esto se realiza mediante una simple validación a la hora de generar las combinaciones. Es simple y rápida, y quita mucho procesamiento al algoritmo final.</li>
<li><strong>Combinaciones con un solo número</strong>: esto se refiere a que dentro del rectángulo que conforma la combinación, solo esté contenido el número objeto de la combinación y ningún otro. Esta validación también está incluida a la hora de generar las combinaciones, para lo que se necesita, en el generador, pasar todos los puntos del tablero.</li>
<li><strong>Eliminar combinaciones imposibles</strong>: imposibles, además de las que se descartan en los puntos anteriores, son las que <em>colisionan</em> con todas y cada una de las combinaciones posibles de otro número vecino. Si la combinación de un número colisiona con todas las combinaciones posibles de otro número, como es lógico, no podrá ser posible.</li>
</ol>
<p>Ciertamente, con estos algoritmos se llega a resolver un alto porcentaje de los tableros básicos, sin necesidad de realizar el algoritmo de vuelta atrás. Solo los tableros grandes y con dificultad alta, necesitan, además de estos algoritmos voraces, el de vuelta atrás.</p>
<h3>Mejoras</h3>
<p>En sentido académico, teniendo en cuenta uno de los requisitos que se pide, que es que sea un algoritmo de vuelta atrás, quizás sea más correcto que la depuradora actúe solo a nivel de rama y no en profundidad.</p>
<p>Hay que tener en cuenta que esto penalizaría el rendimiento y empeoraría en lo que a gestión de memoria se refiere, pero prima más cumplir con los requisitos <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>


<p>Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2008/12/13/algoritmos-heuristicos-y-algoritmos-voraces/' rel='bookmark' title='Permanent Link: Algoritmos heurísticos y algoritmos voraces'>Algoritmos heurísticos y algoritmos voraces</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/07/11/resolviendo-shikaku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calidad Interna</title>
		<link>http://bosqueviejo.net/2010/07/01/calidad-interna/</link>
		<comments>http://bosqueviejo.net/2010/07/01/calidad-interna/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 19:46:30 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[calidad]]></category>
		<category><![CDATA[desarrollo ágil]]></category>
		<category><![CDATA[deuda técnica]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=451</guid>
		<description><![CDATA[el tema de la calidad ha llenado páginas y páginas de la literatura informática en todos los idiomas. Es tal la necesidad de la búsqueda de la calidad, que hay estudios, técnicas y departamentos dentro de empresas, e incluso empresas, que se dedican en cuerpo y alma a establecer parámetros de calidad a los productos [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>el tema de la calidad ha llenado páginas y páginas de la literatura informática en todos los idiomas. Es tal la necesidad de la búsqueda de la calidad, que hay estudios, técnicas y departamentos dentro de empresas, e incluso empresas, que se dedican en cuerpo y alma a establecer parámetros de calidad a los productos y proyectos que se realizan en las empresas de desarrollo de software.</p>
<p>Dentro del tema de la calidad, visto como un amplio abanico de elementos que la conforman, nos topamos con uno bastante confuso y complejo al principio: <strong>la calidad interna</strong>.</p>
<h3>¿Qué es la calidad interna?</h3>
<p>Cuando se desarrolla un software, se desarrolla con una calidad medida según sus requisitos que pueden determinar su alto grado de calidad, midiendo una serie de parámetros. Pero estos parámetros no reflejan ni tienen en cuenta la calidad del proceso de creación del software en sí, ni la calidad del software escrito, solo la calidad externa, es decir, la función que realiza el software.</p>
<p>La calidad interna, sin embargo, mide y tiene presente la forma en la que se ha desarrollado el código de modo que pueda mantenerse (corregirse, ampliarse y adaptarse) de forma rápida y sencilla, gracias a un diseño e implementación limpia, simple y clara.</p>
<p>La importancia que tiene este tipo de calidad se muestra de manifiesto en varios textos como <a href="/2010/03/08/scrum-y-xp-desde-las-trincheras/">Scrum y XP desde las trincheras</a> (de Henrik Kniberg) y algunos blogs como el de <a href="http://jmbeas.iexpertos.com/tag/agile/">José Manuel Beas</a>, <a href="http://secugest.blogspot.com/2007/11/calidad-interna-o-externa.html">Joseba Enjuto</a>, una entrada de Diego Gómez en la web <a href="http://www.dosideas.com/noticias/metodologias/189-como-hacer-yo-comprar-software-de-calidad.html">Dos Ideas</a>, o incluso en el propio estándar <a href="http://es.wikipedia.org/wiki/ISO/IEC_9126">ISO/IEC 9126</a>.</p>
<h3>¿Por qué es tan importante?</h3>
<p>Para un desarrollador, la calidad interna es tan o más importante que la calidad externa, puesto que si un software hace lo que debe, pero una de cada 1000 veces no funciona, puede deberse a un fallo interno difícil de detectar que, pueda incluso verse agravado por la mala calidad con la que se ha desarrollado (diseñado o implementado) el sistema en sí.</p>
<p>En base a tiempo, un software desarrollado con una calidad baja o nula, puede ser desarrollado en un tiempo muy pequeño, ya que no se tiene en consideración muchos aspectos necesarios y útiles, como por ejemplo, una buena orientación a objetos, modularización del código, reutilización, algoritmos excesivamente complejos u ofuscados, etc.</p>
<p>Cuando, por un fallo (mantenimiento correctivo) hay que volver al código para corregir un defecto, y se detecta un error de diseño, modificar un código <em>mal oliente</em>, es más complicado que corregir un defecto en un código que está mejor desarrollado en base a patrones y reglas básicas de análisis, diseño o codificación.</p>
<p>En otras palabras: <strong>un programa con calidad interna baja es un programa que generará <a href="/2010/06/20/deuda-tecnica/">deuda técnica</a>.</strong></p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/07/01/calidad-interna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deuda técnica</title>
		<link>http://bosqueviejo.net/2010/06/20/deuda-tecnica/</link>
		<comments>http://bosqueviejo.net/2010/06/20/deuda-tecnica/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 20:14:40 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[ward cunningham]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=447</guid>
		<description><![CDATA[mi amigo Guillermo me remitió un email hace poco en el que detallaba un concepto que ya conocía hace tiempo, pero que no había visto tan bien explicado hasta el momento (sí, tenía que haber leído antes a Cunningham ), el tema era: La deuda técnica en scrum, en un resumen de cómo lo enunció [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>mi amigo Guillermo me remitió un email hace poco en el que detallaba un concepto que ya conocía hace tiempo, pero que no había visto tan bien explicado hasta el momento (sí, tenía que haber leído antes a Cunningham <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ), el tema era: <em>La deuda técnica en scrum</em>, en un resumen de cómo lo enunció <a href="http://en.wikipedia.org/wiki/Technical_debt">Ward Cunningham</a>:</p>
<p><cite>Hacer código de mala calidad a toda prisa, es como pedir un crédito: puede que obtengamos un beneficio a corto plazo pero si tenemos que seguir desarrollando ese código, tarde o temprano tendremos que pagar todo el tiempo que nos habíamos ahorrado y los intereses. Refactorizar código mal escrito es siempre más difícil que escribirlo bien desde el principio.</cite></p>
<p>Creo que se ve claro que, programar rápido no significa hacerlo bien, en la mayoría de los casos, es raro hacerlo rápido y bien. Por otro lado, lo que puede haber funcionado (incluso de milagro) en una ocasión, si necesita mejoras o cambios, puede dejar de funcionar, teniendo que invertir mucho más tiempo del que habría costado hacerlo bien desde el principio.</p>
<p>¿Hacerlo bien significa gastar muchas más horas? No realmente. Si llevásemos un cómputo de las horas invertidas en hacer un proyecto de forma rápida, a priori, podría parecer que se han invertido pocas horas y el trabajo está <em>hecho</em>. El problema viene después, cuando toca corregir los errores de cualquier índole que no se han tenido en cuenta, o simplemente, por la rapidez, se han cometido. </p>
<p>Normalmente, las horas invertidas en mantenimiento, superan con creces las horas invertidas en un desarrollo <em>basura</em>. La comparación con el <em>haberlo hecho bien</em>, es que el tiempo de desarrollo planificado crece, pero el de mantenimiento es nulo o muy, muy pequeño. Por lo que, a la larga (o al medio plazo) compensa.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/06/20/deuda-tecnica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestión Documental en Blog</title>
		<link>http://bosqueviejo.net/2010/04/21/gestion-documental-en-blog/</link>
		<comments>http://bosqueviejo.net/2010/04/21/gestion-documental-en-blog/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 23:22:29 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[documentación]]></category>
		<category><![CDATA[gestión documental]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=413</guid>
		<description><![CDATA[Hace tiempo, en reuniones mantenidas por todo el departamento técnico, sobre todo la parte de I+D, de la empresa en la que trabajo, mi compañero Juan Sebastián me comentó: podemos hacer la documentación en un blog. Después de haber empleado métodos tradicionales como MS Word, OpenOffice Writer, LaTeX, DocBook&#8230; y otros más dinámicos como el [...]


Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/03/05/couchdb-rest-y-base-de-datos-documental/' rel='bookmark' title='Permanent Link: CouchDB: REST y Base de datos documental'>CouchDB: REST y Base de datos documental</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/papeles-300x224.jpg" alt="" title="papeles" width="300" height="224" class="alignleft size-medium wp-image-416" /> Hace tiempo, en reuniones mantenidas por todo el departamento técnico, sobre todo la parte de I+D, de la empresa en la que trabajo, mi compañero Juan Sebastián me comentó: <em>podemos hacer la documentación en un blog</em>.</p>
<p>Después de haber empleado métodos tradicionales como MS Word, OpenOffice Writer, LaTeX, DocBook&#8230; y otros más dinámicos como el wiki, aquella idea sonaba extraña, pero con cierto sentido.</p>
<p>Tras revisar el proyecto <a href="http://www.knowledgetree.org">Knowledge Tree</a> (árbol de conocimiento), llegué a ver más claro lo que comentaba mi compañero y comencé a verlo mucho más útil que toda la pila de documentación general que se realiza normalmente.</p>
<h3>Los problemas</h3>
<p>Cuando se realiza documentación, generalmente, se realiza un documento con una serie de apartados bien definidos y completados de la forma más completa posible.</p>
<p>El primer problema viene cuando hay que escribir el documento, el soporte. ¿Se hace en Internet a través de una página tipo wiki para que todo el mundo colabore?, ¿se hace en un sistema tipo foro para que se establezca en plan discusión?, ¿se hace en un sistema de control de incidencias para documentar tarea a tarea lo que llegue?</p>
<p>Este planteamiento deriva en otros muchos problemas. Cada uno, tiene el problema individual de que, cuando el nivel de información crece, la forma de buscar entre sus <em>tripas</em> para encontrar lo que se busca se hace más complejo y tedioso. Este sería el segundo problema de estos sistemas.</p>
<p>En el caso de que se haga una documentación formal. Tienes la posibilidad de imprimirlo cada vez que se haga una revisión del documento y dejarlo encuadernado y visible para uso de cada persona de la empresa o en un directorio compartido al que puedan tener acceso. Volvemos al principal problema de <em>la búsqueda</em> de la información dentro del documento, así como, cuando las personas vean que el documento excede de 20 páginas, seguramente lo mirarán con miedo.</p>
<p>El tercer y mayor problema&#8230; ¿quién lo mantiene?, en el caso de un documento wiki, hay que ir revisando sus páginas, al igual que en el documento formal escrito en formato de libro y es un trabajo que, una vez que el documento se extiende más allá de las primeras 20 páginas, se hace cada vez más dificultoso.</p>
<h3>¿Y el blog lo soluciona todo?</h3>
<p>Bueno, no es una panacea. Eso hay que tenerlo claro. Como comenté antes, el sistema <em>Knowledge Tree</em> tiene de bueno que comparte similitudes con los blogs, pero tiene la carencia de que los documentos escritos, siguen siendo los convencionales de procesador de textos, o cualquier editor que genere un PDF.</p>
<p>Por sus características, un blog tiene las siguientes ventajas:</p>
<ul>
<li><strong>Los blogs tienen artículos</strong>. Pueden constituir <em>recetas</em> en las que poner datos necesarios que se vean importantes para proporcionar información al resto de la empresa.</li>
<li><strong>Un blog tiene categorías</strong> donde se agrupan todos los artículos escritos. En este caso, las categorías podrían delimitar áreas técnicas como: web, sistema, explotación, infraestructura, atención al cliente, administración, dirección&#8230;</li>
<li><strong>Cada artículo puede contener una o varias etiquetas (tags)</strong>. Estas etiquetas pueden ser esenciales para localizar documentos que tengan que ver con temas tan diversos como: altas de clientes, facturación, despliegue, desarrollo, entorno de trabajo&#8230;</li>
<li><strong>Los artículos se escriben rápidamente</strong> y desde cualquier sitio, pueden contener media (imágenes, vídeos, presentaciones, audios&#8230;), que puede ayudar mucho a la documentación en sí.</li>
<li><strong>Los artículos tienen la posibilidad de agregar comentarios</strong>. Esto es muy útil porque se pueden agregar actualizaciones pequeñas por otras personas, o preguntas frecuentes que no se hayan recogido en el propio artículo.</li>
<li><strong>Los pingbacks o trackbacks</strong>, son referencias que hace un artículo contra otro cuando es referido por él. Esto es muy útil cuando queremos tener relaciones entre artículos, que quedan almacenadas en los mismos, a través de enlaces. E incluso actualizaciones a través de nuevos artículos.</li>
</ul>
<p>Por todo ello, un buen sistema de blog puede ser empleado como sistema de gestión documental fácil de llevar a producción y fácil de implementar entre los trabajadores, sobre todo en el entorno de programadores, administradores de sistemas y similares.</p>


<p>Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/03/05/couchdb-rest-y-base-de-datos-documental/' rel='bookmark' title='Permanent Link: CouchDB: REST y Base de datos documental'>CouchDB: REST y Base de datos documental</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/04/21/gestion-documental-en-blog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sistemas de Mensajes Encolados (MQ)</title>
		<link>http://bosqueviejo.net/2009/10/08/sistemas-de-mensajes-encolados-mq/</link>
		<comments>http://bosqueviejo.net/2009/10/08/sistemas-de-mensajes-encolados-mq/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 10:51:23 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[servidores]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=206</guid>
		<description><![CDATA[Hace poco me he encontrado con un problema. Tengo un entramado de servidores y comunicaciones entre cada uno de ellos. Cada servidor puede notificar, ya sea vía SOAP, HTTP, XMPP o mediante cualquier otro protocolo, un evento o una información a otro servidor del entramado, con lo que cada servidor se configura de una forma [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>Hace poco me he encontrado con un problema. Tengo un entramado de servidores y comunicaciones entre cada uno de ellos. Cada servidor puede notificar, ya sea vía SOAP, HTTP, XMPP o mediante cualquier otro protocolo, un evento o una información a otro servidor del entramado, con lo que cada servidor se configura de una forma específica, con una serie de nombres de dominio o IPs.</p>
<p>El problema viene al querer aplicar escalabilidad al proyecto. Cuando no solo hay un equipo implicado, sino que existen dos o tres, los cuales hay que configurar bajo ciertas circunstancias.</p>
<p>Lo primero que pensé, es que, si le puedo notificar a la red de que sucede un evento en concreto, ya sea a una sola máquina o conjunto definido de estas (pero para todos los equipos la misma configuración), facilitaría la puesta en producción. Con lo que me puse a buscar y encontré MQ, message queue.</p>
<h3>El encolado de mensajes</h3>
<p>La comunicación de los equipos informáticos se basa en mensajes, en eventos, que deben de poder transmitirse de unos a otros cuando sucedan (si es que se quiere tener la máxima fiabilidad en la información que se trata).</p>
<p>Una forma es comunicar directamente al implicado, lo cual resulta un poco tedioso si los implicados son muchos y muy distintos.</p>
<p>Otra forma es mediante un sistema <a href="http://es.wikipedia.org/wiki/Java_Message_Service">JMS</a> o un <a href="http://en.wikipedia.org/wiki/Message_queue">MQ</a>, como <a href="http://www.rabbitmq.com">RabbitMQ</a>.</p>
<p>El encolado de mensajes es un sistema que permite que un elemento perteneciente a un sistema de información, pueda comunicar un estado, evento o mensaje informativo o imperativo a otro conjunto de elementos dentro del sistema, para que interactúe con él.</p>
<p>Por ejemplo, si tenemos un servidor web, una interfaz, que controla un conjunto de máquinas encargadas realizar llamadas salientes, rastrear páginas de la web para almacenar información para un buscador o similar, y la interfaz quiere enviar parámetros nuevos de configuración a estas, puede hacerlo mediante el envío de un mensaje generalizado a ese conjunto de máquinas, y estas máquinas recibirán el mensaje en el momento que lo soliciten.</p>
<p>Esta utilidad es igualmente buena para cuando una interfaz web, por ejemplo de un estudio fotográfico, carga imágenes desde la web, las retoca con algún tipo de efecto, ajuste, etc. y más adelante permite su descarga. El sistema web puede enviar el evento al sistema de retocado de que hay una imagen disponible, y cuando la imagen ya está disponible, el sistema de retocado puede enviar otro mensaje de vuelta diciendo que ya está.</p>
<p>Quizás esto último podría hacerse mejor con una base de datos, pero con el sistema de mensajería, se eliminan los datos en el momento que ya no se necesitan, mientras que con la base de datos, esos datos podrían permanecer ahí de forma indeterminada.</p>
<h3>Conclusiones</h3>
<p>Los sistemas de encolado de mensajes tienen su utilidad, sobre todo, en sistemas formados por varias máquinas, con roles bien definidos y en las que se quiere afinar lo que son las conexiones y comunicaciones entre las máquinas.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2009/10/08/sistemas-de-mensajes-encolados-mq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cuánto cuesta un Proyecto de Software</title>
		<link>http://bosqueviejo.net/2009/09/01/cuanto-cuesta-un-proyecto-de-software/</link>
		<comments>http://bosqueviejo.net/2009/09/01/cuanto-cuesta-un-proyecto-de-software/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 16:07:44 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[gestión de proyectos]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=195</guid>
		<description><![CDATA[Hoy ya hace unas semanas que en la empresa en la que trabajo se ha comenzado un movimiento positivo en favor de medir lo que cuesta realizar desarrollos de software, dentro del departamento de desarrollo, lo cual es positivo desde el punto de vista del desarrollador, del programador y de los directivos. Hay que tener [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>Hoy ya hace unas semanas que en la empresa en la que trabajo se ha comenzado un movimiento positivo en favor de medir lo que cuesta realizar desarrollos de software, dentro del departamento de desarrollo, lo cual es positivo desde el punto de vista del desarrollador, del programador y de los directivos.</p>
<p>Hay que tener siempre presente que, cuando se realiza un trabajo, ya sea el que sea, si lo realiza una persona ajena, no de la empresa, se paga una factura por sus servicios, en los que viene detallado, normalmente, la mano de obra, que suele cobrarse en factor de tiempo empleado.</p>
<p>El coste asociado de emplear a una persona que está en nómina, dentro de la propia empresa, puede ser menor, pero no cero. Si un empleado cobra en bruto unos 2000 euros mensuales y le mandamos hacer un trabajo para lo cual gasta todo un mes, es de lógica pensar, que ese trabajo me ha costado esos 2000 euros, ya que es lo que ha hecho el empleado. Si el proyecto al final solo hace ingresar a la empresa 200 euros, la empresa ha perdido con ese desarrollo 1800 euros.</p>
<p>En el caso de que un proyecto se desarrolle en dos semanas de ese trabajador, por redondear, damos que son 1000 euros el coste y se consiguen 1200 euros. La empresa ha conseguido con su labor 200 euros&#8230; pero si el desarrollo ha sido deficiente, por el poco tiempo empleado, y el programador tiene que ir invirtiendo horas, que al final resultan ser días (en suma) y llegan a ser otras dos semanas, tendremos que esos 200 euros se convierten en 800 euros de pérdidas.</p>
<p>El las metodologías ágiles se hace hincapié a <strong>dar valor</strong>, es decir, realizar el desarrollo por iteraciones, siempre haciendo lo que más valor dé al cliente. Por ejemplo, si tenemos 10 requisitos en un proyecto, impuestos por el cliente, pero los más importantes son los 2 primeros, podemos negociar con el cliente el hacer esos dos primeros, valorarlos con el tiempo que toma el realizarlos y, en caso de querer el resto de requisitos, o algunos más, volver a realizar otra petición.</p>
<p>¿Qué conseguimos con esto?</p>
<ul>
<li>Que el cliente pida lo que necesita, únicamente.</li>
<li>Que el precio que se pague sea el justo y necesario, e incluso no muy desorbitado para el cliente.</li>
<li>Que la estimación de tiempo sea más ajustada a la realidad, siendo los plazos de desarrollo más cortos.</li>
<li>Que el cliente consiga su producto, su valor, antes.</li>
</ul>
<p>Por lo que recomiendo a todos los que trabajan en nómina en una empresa, y su jefe (o siendo jefes) no se lleven el cómputo de horas invertidas en proyectos, incidencias, etc., que lo hagan, porque es una moneda de cambio muy útil para cuando se quieren conseguir cosas importantes, dentro de la empresa.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2009/09/01/cuanto-cuesta-un-proyecto-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manifiesto Ágil</title>
		<link>http://bosqueviejo.net/2009/08/14/manifiesto-agil/</link>
		<comments>http://bosqueviejo.net/2009/08/14/manifiesto-agil/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 10:31:58 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[desarrollo ágil]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=179</guid>
		<description><![CDATA[El manifiesto ágil fue fruto de una reunión que se mantuvo en Salt Lake City en marzo de 2001. Diecisiete críticos de los modelos de mejora del desarrollo del software basado en procesos, convocados por Kent Beck, padre del Xtreme Programming, escribieron el siguiente manifiesto: Estamos poniendo al descubierto mejores métodos para desarrollar software, haciéndolo [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://es.wikipedia.org/wiki/Manifiesto_ágil">manifiesto ágil</a> fue fruto de una reunión que se mantuvo en Salt Lake City en marzo de 2001. Diecisiete críticos de los modelos de mejora del desarrollo del software basado en procesos, convocados por <a href="http://es.wikipedia.org/wiki/Kent_Beck">Kent Beck</a>, padre del <a href="http://es.wikipedia.org/wiki/Extreme_Programming">Xtreme Programming</a>, escribieron el siguiente manifiesto:</p>
<blockquote><p>
Estamos poniendo al descubierto mejores métodos para desarrollar software, haciéndolo y ayudando a otros a que lo hagan. Con este trabajo hemos llegado a valorar:</p>
<ul>
<li>A los individuos y su interacción por encima de los procesos y las herramientas.</li>
<li>El software que funciona por encima de la documentación exhaustiva.</li>
<li>La colaboración con el cliente por encima de la negociación contractual.</li>
<li>La respuesta al cambio por encima del seguimiento de un plan.</li>
</ul>
<p>Aunque hay valor en los elementos de la derecha, valoramos más los de la izquierda.
</p></blockquote>
<p>Entre estas diecisiete personas estaban: Kent Beck, uno de los tres creadores del Xtreme Programming; Alistair Cockburn, padre de los Crystal Methods; Martin Fowler, gran defensor de la Refactorización; Ward Cunningham, estudioso de los patrones y antipatrones de diseño del software y otro de los creadores de Xtreme Programming; Ron Jeffries, otro de los creadores del Xtreme Programming; Jeff Sutherland, gran promotor de Scrum.</p>
<h3>Individuos y su Interacción sobre Procesos y Herramientas</h3>
<p>No hay que malentender estas palabras tomándolas en su sentido más radical. La expresión de esta frase se refiere que se valora más la comunicación humana, las reuniones y lo que una persona pueda transmitir a otra, que las herramientas.</p>
<p>Así mismo, se considera más importante la valía de la persona, del programador y del diseñador, que los procesos establecidos en sí.</p>
<h3>Software que funciona sobre Documentación exhaustiva</h3>
<p>Es lógico que, si tengo un software que no funciona como quiero, da igual lo grande que sea la documentación. Es más útil un programa intuitivo, que hace única y exclusivamente lo necesario y tiene una calidad interna alta (código limpio, claro y con comentario concisos) que un software enrevesado que necesita un manual de no menos de 100 páginas para poder entenderlo.</p>
<h3>Colaboración con Cliente sobre Negociación Contractual</h3>
<p>La firma de un contrato ata a ambas partes a realizar un cierto desarrollo en un determinado tiempo con un gasto prefijado, solo que estos valores son solo estimados.</p>
<p>El contrato debe de existir, pero hay que colaborar con el cliente en realizarlo de forma más flexible, es decir, que los desarrollos sean de períodos cortos y vayan dando valor al cliente, de modo que, con esas cortas entregas, el cliente pueda decidir el curso a seguir entre iteraciones con sus peticiones y los desarrolladores realizar solo el esfuerzo necesario.</p>
<h3>Respuesta al cambio sobre Seguimiento de un plan</h3>
<p>Como comentaba, salvo para administraciones públicas, los desarrollos que se realizan a vista de un año o más, no suelen aportar valor al cliente hasta terminado ese período de espera. Una empresa que necesita un software, normalmente no puede dar unos requisitos fijos que, a lo largo de los siguientes meses, no cambien debido a un cambio externo o una necesidad de la propia empresa.</p>
<p>Por este motivo, la respuesta al cambio es vital y muy necesaria y, como indicaba el punto anterior, el hecho de poder hacer iteraciones y dar valor al cliente cada poco tiempo es lo que se persigue con el desarrollo ágil.</p>
<h3>Conclusión</h3>
<p>Esto se produjo en marzo de 2001, desde entonces ninguno de los diecisiete, más otros igualmente grandes, como Mary Poppendieck o Mike Cohn, no han parado de aportar bibliografía sobre el tema y métodos o matizaciones de los métodos ya existentes.</p>
<p>En este sentido, se puede decir que el desarrollo del software es un terreno vivo, donde no paran de descubrirse y crearse métodos y técnicas, para poder abarcar de una forma más exacta el desarrollo de un proyecto de software.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2009/08/14/manifiesto-agil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lenguajes Funcionales para el Desarrollo Web</title>
		<link>http://bosqueviejo.net/2009/08/13/lenguajes-funcionales-para-el-desarrollo-web/</link>
		<comments>http://bosqueviejo.net/2009/08/13/lenguajes-funcionales-para-el-desarrollo-web/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 15:46:46 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[programación funcional]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=177</guid>
		<description><![CDATA[La web concurrente, a prueba de fallos y distribuida ya va siendo más fácil de desarrollar gracias a dos iniciativas paralelas. Una de ellas es Erlyweb, el entorno desarrollado por Yariv Sadan que permite realizar de forma fácil sitios web en lenguaje Erlang. La otra es Lift, un framework de desarrollo web para otro lenguaje [...]


Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/02/02/lenguajes-de-programacion/' rel='bookmark' title='Permanent Link: Lenguajes de Programación'>Lenguajes de Programación</a></li>
<li><a href='http://bosqueviejo.net/2009/03/18/reia-ruby-sobre-erlang/' rel='bookmark' title='Permanent Link: Reia: Ruby sobre Erlang'>Reia: Ruby sobre Erlang</a></li>
<li><a href='http://bosqueviejo.net/2009/01/20/desarrollo-web/' rel='bookmark' title='Permanent Link: Desarrollo Web'>Desarrollo Web</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>La web concurrente, a prueba de fallos y distribuida ya va siendo más fácil de desarrollar gracias a dos iniciativas paralelas. Una de ellas es <a href="http://erlyweb.org/">Erlyweb</a>, el entorno desarrollado por <a href="http://yarivsblog.com/">Yariv Sadan</a> que permite realizar de forma fácil sitios web en lenguaje Erlang. La otra es <a href="http://liftweb.net/">Lift</a>, un framework de desarrollo web para otro lenguaje funcional: <a href="http://www.scala-lang.org/">Scala</a>.</p>
<h3>¿Lenguaje funcional para la web?</h3>
<p>Muchos se harán esta misma pregunta, si de siempre, los lenguajes imperativos han sido empleados para el desarrollo de aplicaciones web (Java, PHP, Ruby, Perl, C#, &#8230;), ¿por qué emplear un lenguaje funcional como Scala o Erlang?</p>
<p>Las ventajas son las siguientes:</p>
<ul>
<li><strong>El lenguaje funcional obliga a pensar lo que se programa</strong>, realmente, en este tipo de lenguajes también es posible cometer errores y hacer <em>barbaridades</em>, pero en menor medida. Por regla general, lo que se programa en un lenguaje funcional, suele ser meditado, pensado y puede ser probado de mejor forma.</li>
<li><strong>Obliga a organizar el código</strong>, ya que todo gira en torno a crear funciones que se llamen unas a otras y a sí mismas, así como tener el código separado en módulos o bloques funcionales. Por ejemplo, en Erlang, para emplear OTP (gen_server, gen_event, gen_fsm&#8230;) se debe de crear un módulo para cada uno de ellos, con lo que todo queda bien organizado.</li>
<li><strong>El código resultante es más corto y más legible</strong>, ya que el código funcional no reutiliza variables, se basa en listas y tiene menos estructuras de control que los lenguajes imperativos, sí, resulta más fácil de comprender el lenguaje en sí y el código, una vez se va leyendo.</li>
<li><strong>Tienen ventajas cuando se habla de concurrencia, tiempo real y tolerancia a fallos</strong>. Obviamente, si no se permite la reasignación, no se permite cambiar el valor de un dato ya asignado y, por tanto, no hay cabida para la memoria compartida, con lo que la concurrencia se simplifica de forma sorprendente. Por otro lado, estos lenguajes han sido pensados y desarrollados para distribuirse en varios nodos y/o equipos, pudiendo migrar sus procesos entre nodos y sustituir al nodo principal en caso de no estar operativo.</li>
</ul>
<p>En lo que respecta al lenguaje en sí, se ve claro y, hasta muchos pensarán: <em>¡mierda!, he perdido el tiempo aprendiendo y usando PHP</em> (o Perl, o Ruby, o Java&#8230;); pero no hay que ser tan radical, estos lenguajes son muy útiles y ofrecen muchas ventajas a los lenguajes tradicionales web y, gracias a los frameworks desarrollados, las mejoras son increíbles.</p>
<h3>Si tan bueno es&#8230; ¿por qué no se usa?</h3>
<p>Seamos sinceros, la razón de uso de un sistema u otro se basa, íntegramente, en la popularidad, la costumbre y los malos usos. Cuando en tu entorno hasta 3 personas dicen que PHP es bueno para la web, ya sabes que es lo que hay que aprender si quieres hacer web, pero eso no debería de ser lo único a calibrar, y sobre todo si el conocimiento que se adquiera de PHP se usará para el desarrollo profesional de aplicaciones.</p>
<p>Erlang lleva muchos años usándose en el terreno de las telecomunicaciones y Yariv, el creador del framework Erlyweb, integra servicios desarrollados en Erlang para Facebook, con lo que, los grandes de Internet, ya se han dado cuenta de que hay que dar un paso hacia adelante. Por otro lado, Scala es usado en otros sitios como Twitter.</p>
<h3>Ahora de verdad, ¿por qué usarlos?</h3>
<p>El desarrollo de entornos web conlleva el uso de varias tecnologías que se usen de forma coordinada y limpia. Desarrollar un software en cualquier lenguaje mezclado con SQL y código en HTML con CSS incrustado y código JavaScript repartido por todos lados hace que el código sea difuso. Difícil de entender.</p>
<p>Sin embargo, con C# y Java se comenzaron a emplear soluciones que han ido trascendiendo a lenguajes de scriptting como Ruby, Python o PHP, en los que ya no se dejan ver consultas SQL, sino el uso de objetos y funciones, el código de presentación queda almacenado por separado con etiquetas especiales, helpers y otros añadidos, los códigos HTML validados, los CSS en sus respectivos ficheros aparte y agregados desde la sección pertinente e incluso el uso del JavaScript no intrusivo.</p>
<p>Llegados a este punto, nos encontramos con que, desarrollar web es, tan solo, desarrollar. Realizar el programa en un solo lenguaje y de forma fácil. Pero aún así, volvemos a encontrar lo que ya había tiempo atrás, nuestro lenguaje imperativo puede contener fallos lógicos y, si es un lenguaje de scriptting muy permisivo, algunos de esos fallos son difíciles de <em>perseguir</em>.</p>
<p>El uso de un framework como lift o erlyweb facilita el seguimiento de fallos, desarrollar en erlang y scala facilita el desarrollo propio de la aplicación y agrega factores determinantes de crecimiento de la misma, así como estabilidad, ¿qué más se puede pedir?</p>


<p>Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/02/02/lenguajes-de-programacion/' rel='bookmark' title='Permanent Link: Lenguajes de Programación'>Lenguajes de Programación</a></li>
<li><a href='http://bosqueviejo.net/2009/03/18/reia-ruby-sobre-erlang/' rel='bookmark' title='Permanent Link: Reia: Ruby sobre Erlang'>Reia: Ruby sobre Erlang</a></li>
<li><a href='http://bosqueviejo.net/2009/01/20/desarrollo-web/' rel='bookmark' title='Permanent Link: Desarrollo Web'>Desarrollo Web</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2009/08/13/lenguajes-funcionales-para-el-desarrollo-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planificación de Póker</title>
		<link>http://bosqueviejo.net/2009/06/17/planificacion-de-poker/</link>
		<comments>http://bosqueviejo.net/2009/06/17/planificacion-de-poker/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 08:55:20 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[desarrollo ágil]]></category>
		<category><![CDATA[gestión de tiempo]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=146</guid>
		<description><![CDATA[Leyendo un artículo de una página de una empresa suiza (Crisp), he visto a lo que se refiere la planificación de póker. Voy a traducir gran parte del artículo para explicarlo. Introducción La estimación es una de las actividades del núcleo de Scrum y otros procesos ágiles. Este proceso se refiere a darle una duración [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>Leyendo un artículo de una página de una empresa suiza (<a href="http://www.crisp.se">Crisp</a>), he visto a lo que se refiere la <strong>planificación de póker</strong>. Voy a traducir gran parte del <a href="http://www.crisp.se/planningpoker">artículo</a> para explicarlo.</p>
<h3>Introducción</h3>
<p>La estimación es una de las actividades del núcleo de Scrum y otros procesos ágiles. Este proceso se refiere a darle una duración a cada historia, p.ej. ¿cuánto tiempo tomaría?, ¿cuánto trabajo tiene su implementación?, ¿cómo de caro es?, o cualquier otra cosa que quieras poner.</p>
<p>En Scrum, la estimación es una actividad de equipo. Para cada historia, todo el equipo participa en el proceso de estimación.</p>
<p>La planificación de póker (a veces llamada Scrum Póker) es simple, pero una potente herramienta que hace la estimación de equipo más rápida, más precisa y más divertida. El término fue acuñado por James Grenning y popularizado por Mike Cohn.</p>
<h3>Estimación sin Planficación de Póker</h3>
<p>Aquí hay un problema típico con las estimaciones de equipo. Cuando estamos en la planificación de un sprint y el Dueño del Producto dice:</p>
<p><img class="size-full wp-image-158 alignnone" title="Vale, chicos, ¿cuánto tiempo necesitáis para esta historia?" src="http://bosqueviejo.net/wordpress/wp-content/uploads/11.gif" alt="Vale, chicos, ¿cuánto tiempo necesitáis para esta historia?" width="117" height="101" /></p>
<p>El equipo comienza a pensar acerca de la duración de la historia (en el caso ideal de hombres-día)&#8230;</p>
<p><img class="alignnone size-full wp-image-148" title="2" src="http://bosqueviejo.net/wordpress/wp-content/uploads/2.gif" alt="" width="257" height="185" /></p>
<p>El participante A cree que el sabe exáctamente lo que necesita para hacerse, así que él piensa que puede tomar 3 días. Los participantes B y C son más pesimistas. Los participantes D y E están fuera de la conversación. El participante A dice &#8220;3 días&#8221;.</p>
<p><img class="alignnone size-full wp-image-149" title="3" src="http://bosqueviejo.net/wordpress/wp-content/uploads/3.gif" alt="" width="257" height="185" /></p>
<p>Esto hace que los participantes B y C queden confusos. Comienzan a dudar de sus propias estimaciones. El participante E despierta y no sabe realmente qué está siendo estimado. El participante D está aún dormido.</p>
<p>El dueño del producto pide al resto del equipo su estimación.</p>
<p><img class="alignnone size-full wp-image-150" title="4" src="http://bosqueviejo.net/wordpress/wp-content/uploads/4.gif" alt="" width="267" height="197" /></p>
<p>Como se puede ver, el resto del equipo ha sido fuertemente influenciado por el participante A, solo porque él habló primero. ¡Esto es muy arriesgado!, Tanto B como C pensaron que podría tomarse mucho más de 3 días, ¡sus dudas deberían ser aireadas!</p>
<h3>Estimación con Planificación Póker</h3>
<p>Ahora imagina que cada miembro de equipo tiene una baraja de cartas, conteniendo las siguientes cartas:</p>
<p><img class="alignnone size-full wp-image-155" title="deck" src="http://bosqueviejo.net/wordpress/wp-content/uploads/deck.gif" alt="" width="324" height="49" /></p>
<p>Vamos a rehacer la estimación. El dueño de producto dice:</p>
<p><img class="size-full wp-image-158 alignnone" title="Vale, chicos, ¿cuánto tiempo necesitáis para esta historia?" src="http://bosqueviejo.net/wordpress/wp-content/uploads/11.gif" alt="Vale, chicos, ¿cuánto tiempo necesitáis para esta historia?" width="117" height="101" /></p>
<p>Una vez de nuevo, el equipo comienza a pensar sobre el tiempo que tomaría la historia.</p>
<p><img class="alignnone size-full wp-image-151" title="5" src="http://bosqueviejo.net/wordpress/wp-content/uploads/5.gif" alt="" width="257" height="186" /></p>
<p>Esta vez, nadie dice nada. En lugar de eso, todos tienen que presentar una carta, bocaabajo, conteniendo su estimación. Todo el mundo tiene que tener presente una carta, así que los participantes D y E despiertan. El participante D admite que estaba durmiendo y pide que se le repita la historia. Es difícil evadirse cuando se estima de esta forma <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Cuando están todos, todas las cartas se destapan simultáneamente, revelando las estimaciones de todos.</p>
<p><img class="alignnone size-full wp-image-152" title="6" src="http://bosqueviejo.net/wordpress/wp-content/uploads/6.gif" alt="" width="238" height="179" /></p>
<p>¡Oooops! Gran divergencia. El equipo, en particular los participantes A y C, necesitan hablar sobre esta historia y el porqué sus estimaciones son tan diferentes. Después de la charla, el participante A dice que había olvidado algunas tareas importantes que necesitan incluirse en la historia. El participante C dice que, con el diseño que el participante A presentó, la historia parece ser más pequeña de 20.</p>
<p>Después de la charla (3 minutos en total) hacen otra ronda de estimación para la misma historia.</p>
<p><img class="alignnone size-full wp-image-153" title="7" src="http://bosqueviejo.net/wordpress/wp-content/uploads/7.gif" alt="" width="238" height="179" /></p>
<p>¡Convergencia! Vale, no hay una convergencia completa, pero están de acuerdo en que una estimación de 5 puede ser lo suficientemente cercana. Siguiente historia.</p>
<h3>¿Por qué la extraña serie de números?</h3>
<p><img class="alignnone size-full wp-image-155" title="deck" src="http://bosqueviejo.net/wordpress/wp-content/uploads/deck.gif" alt="" width="324" height="49" /></p>
<p>El más alto de los números tiene menos granularidad. ¿Por qué?, ¿Por qué no hay 21, por ejemplo?</p>
<p>Por varias razones:</p>
<ul>
<li>Acelera el proceso de estimación limitando el número de opciones (p.ej. número de cartas).</li>
<li>Elimina una falsa sensación de precisión para estimaciones altas.</li>
<li>Potencia al equipo a partir historias grandes en otras más pequeñas.</li>
</ul>
<p>Una estimación alta (mayor de 20, por ejemplo) normalmente quiere decir que la historia no se entendió bien en detalle. Podría ser una pérdida de tiempo discutir si la historia tiene 19, 20 ó 22,5. Esta es, simplemente, una historia grande y un 20 debería reflejar eso. Si deseas entrar en detalle, rompe la historia en varias historias más pequeñas. Las pequeñas historias pueden ser estimadas en gran detalle.</p>
<h3>Cartas Especiales</h3>
<p><img class="alignleft size-full wp-image-157" style="margin-left: 10px; margin-right: 10px;" title="zero-card" src="http://bosqueviejo.net/wordpress/wp-content/uploads/zero-card.gif" alt="" width="43" height="56" /></p>
<p>La carta cero significa <em>esta historia está hecha</em> o <em>la historia es tan corta que se puede hacer en muy pocos minutos de trabajo</em>.</p>
<p><img class="alignleft size-full wp-image-156" style="margin-left: 10px; margin-right: 10px;" title="question-card" src="http://bosqueviejo.net/wordpress/wp-content/uploads/question-card.gif" alt="" width="43" height="56" /></p>
<p>La carta del signo de interrogación significa <em>No tengo ni idea</em>. Debería de ser rara. Si esta carta es usada demasiado frecuente, el equipo necesita hablar las historias más e intentar alcanzar un mejor conocimiento.</p>
<p><img class="alignleft size-full wp-image-154" style="margin-left: 10px; margin-right: 10px;" title="coffee-card" src="http://bosqueviejo.net/wordpress/wp-content/uploads/coffee-card.gif" alt="" width="43" height="56" /></p>
<p>La carta del café significa <em>Estoy demasiado cansado para pensar. Vamos a tomar un descanso.</em></p>
<h3>Conclusión</h3>
<p>Después de leer el artículo completo, saco en conclusión que, algo como es la capacidad de comunicación, es algo que hay que intentar potenciar en los equipos de desarrollo, a modo de que, no solo todos y cada uno se puedan expresar, sino emplear técnicas como esta para que su expresión no sea opcional, sino <em>parte del juego</em>.</p>
<p>Es importante que la opinión de un miembro del equipo no se vea <em>afectada</em> por la de otro, a menos, hasta poner toda la información sobre la mesa, que es cuando ambos, deben de <em>afectarse</em> por la información del resto del equipo, y llegar a un punto de comunicación e información que le dé consistencia a la estimación.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2009/06/17/planificacion-de-poker/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Lo justo y lo estándar</title>
		<link>http://bosqueviejo.net/2009/06/04/lo-justo-y-lo-estandar/</link>
		<comments>http://bosqueviejo.net/2009/06/04/lo-justo-y-lo-estandar/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 15:42:57 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[desarrollo]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=144</guid>
		<description><![CDATA[Desde hace unos meses, he estado envuelto en algunos proyectos, en los que he intentado dar un enfoque basado en patrones y estándares, para facilitar y simplificar los problemas. Solo que, hay patrones y sistemas, o frameworks, que son algo incompatibles entre sí. Por ejemplo, el uso de un sistema BPM, puede ser compatible con [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>Desde hace unos meses, he estado envuelto en algunos proyectos, en los que he intentado dar un enfoque basado en patrones y estándares, para facilitar y simplificar los problemas. Solo que, hay patrones y sistemas, o frameworks, que son algo incompatibles entre sí.</p>
<p>Por ejemplo, el uso de un sistema BPM, puede ser compatible con un sistema REST como Ruby on Rails, mientras se mantenga la idea de REST&#8230; en cambio, si se modifica por intentar realizar un poco interoperatibilidad entre otros sistemas, a los cuales no se les quiere cambiar mucho la forma&#8230; se convierte en un infierno.</p>
<p>Al final, lo mejor, es mirar la piezas con las que queremos contar, por ser afines a los resultados que queremos obtener y, emplear única y exclusivamente, los patrones que se puedan ajustar bien a esas piezas.</p>
<p>En este caso, por ejemplo, Ruby on Rails, combina bien con sistemas BPM que sean REST, e incluso con bases de datos que sean REST, pero le quita características bastante deseables que sí tiene otro patrón como ActiveRecord, ante lo cual, se establece un sistema de preferencias y prioridades&#8230; ¿REST o ActiveRecord?&#8230; como es lógico, optando por ActiveRecord, desaparece BPM como tal, ya que ActiveRecord está hecho para su acceso directo a base de datos.</p>
<p>Pero al final, la base de datos, bien mirada, termina siendo nuestro sistema BPM y, con ayuda de procedimientos almacenados, triggers, usuarios y demás&#8230; es un sistema, no tan potente como otros, pero sí lo suficiente como para cumplir con las especificaciones básicas.</p>
<p>Bueno, al final, me doy cuenta de que, al igual que cuando se programa, se debe de decidir bien la estructura, los elementos a emplear, la forma y demás&#8230; cuando se desarrolla, se ha de tener especial cuidado con las metodologías, patrones de diseño y estándares, puesto que hay que comprobar que coordinen bien entre sí.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2009/06/04/lo-justo-y-lo-estandar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
