<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>programania</title>
	
	<link>http://www.programania.net</link>
	<description>Ingeniería del Software</description>
	<lastBuildDate>Mon, 31 Aug 2009 20:10:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Programania" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Buscando experiencias con facturación electrónica</title>
		<link>http://www.programania.net/diseno-de-software/buscando-experiencias-con-facturacion-electronica/</link>
		<comments>http://www.programania.net/diseno-de-software/buscando-experiencias-con-facturacion-electronica/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 20:09:58 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[WEBDEV]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=886</guid>
		<description><![CDATA[Pidiendo ayuda de facturación electrónica]]></description>
			<content:encoded><![CDATA[<p>Éste es un post algo inusual en programania, porque normalmente sólo suelo escribir artículos. Pero el caso lo que quiero es pedir ayuda. Porque vamos a implantar la facturación electrónica en la empresa donde trabajo y le veo varias pegas:</p>
<ol>
<li>El formato: creo que XML es lo mejor. Me parece la mejor manera de intercambiar y leer/escribir datos. El caso es que tampoco veo que haya por ahí muchos lectores (a poder ser multiplataforma y software libre) de facturas electrónicas en XML.</li>
<li>El algoritmo de firma: por lo que he visto en <a href="http://www.facturae.es/">Facturae </a>hay algún generador en Java, etc&#8230; pero la verdad es que lo que me gustaría es escribir a mí el algoritmo en PHP o en el lenguaje que yo quiera (o sé si estoy diciendo una burrada).</li>
</ol>
<p>En fin: ¿alguien que me pueda ayudar? ¿Qué experiencias tenéis con la facturación electrónica? ¿formatos? ¿algoritmos? ¿ideas varias?</p>
<p>¡Gracias adelantadas!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/cb2lw5KdivkDyaO525ApHTIO0Js/0/da"><img src="http://feedads.g.doubleclick.net/~a/cb2lw5KdivkDyaO525ApHTIO0Js/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cb2lw5KdivkDyaO525ApHTIO0Js/1/da"><img src="http://feedads.g.doubleclick.net/~a/cb2lw5KdivkDyaO525ApHTIO0Js/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/diseno-de-software/buscando-experiencias-con-facturacion-electronica/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Gestión de riesgos ágil e Impediment Backlog</title>
		<link>http://www.programania.net/desarrollo-agil/gestion-de-riesgos-agil-e-impediment-backlog/</link>
		<comments>http://www.programania.net/desarrollo-agil/gestion-de-riesgos-agil-e-impediment-backlog/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 07:17:05 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[gestión de proyectos]]></category>
		<category><![CDATA[gestión de riesgos]]></category>
		<category><![CDATA[impediment backlog]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=848</guid>
		<description><![CDATA[El impediment backlog para la gestión de riesgos en proyectos de software]]></description>
			<content:encoded><![CDATA[<p>Cuando escribí <a href="http://www.programania.net/desarrollo-agil/gestion-de-proyectos-objetivos/">un esquema sobre lo que supone la gestión de proyectos de software</a>, incluí la &#8220;Gestión de riesgos&#8221; como parte de la gestión tradicional de proyectos. Pero según voy investigando dentro de las metodologías ágiles no encuentro casi nada que hable explícitamente sobre cómo hacer ésta gestión de manera ágil.</p>
<p>Esto ocurre porque <a href="http://geeks.ms/blogs/rcorral/archive/2007/06/28/exprimiendo-scrum-scrum-y-la-gesti-243-n-del-riesgo.aspx">la gestión de riesgos en metodologías como SCRUM no se hace explícitamente, se hace de manera integrada en el propio proceso y, por lo tanto, de manera continua.</a></p>
<p>Quizá, la parte más explícita de la gestión de riesgos sea el <strong>Impediment Backlog</strong>. Un Impediment Backlog es una lista de incidencias que tienen que ser resueltas por el equipo y que el Scrum Master debe gestionar y asignar al alguien para que trabaje en ellas, y que será revisada en la reunión SCRUM diaria, tras la pregunta: ¿Qué está bloqueando el progreso del proyecto?</p>
<p>Creo que no vale la pena que explique nada más aquí porque, curiosamente, he encontrado <a href="http://geeks.ms/blogs/rcorral/archive/2007/06/28/exprimiendo-scrum-scrum-y-la-gesti-243-n-del-riesgo.aspx">el mejor artículo sobre el tema en castellano. Se trata de un análisis exhaustivo sobre los riesgos clásicos del desarrollo de software y cómo los afronta SCRUM</a>. Contentísimo de que la blogosfera de habla hispana de artículos de ésta calidad, oiga.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/nMVbzpEwadsnseyZw3RZmLIn3UA/0/da"><img src="http://feedads.g.doubleclick.net/~a/nMVbzpEwadsnseyZw3RZmLIn3UA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/nMVbzpEwadsnseyZw3RZmLIn3UA/1/da"><img src="http://feedads.g.doubleclick.net/~a/nMVbzpEwadsnseyZw3RZmLIn3UA/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/gestion-de-riesgos-agil-e-impediment-backlog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestión del conocimiento en proyectos de software</title>
		<link>http://www.programania.net/desarrollo-agil/gestion-del-conocimiento-en-proyectos-de-software/</link>
		<comments>http://www.programania.net/desarrollo-agil/gestion-del-conocimiento-en-proyectos-de-software/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 09:07:48 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[colective code ownership]]></category>
		<category><![CDATA[gestión de proyectos]]></category>
		<category><![CDATA[pair programming]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=855</guid>
		<description><![CDATA[medidas básicas para gestionar el conocimiento en empresas de software....]]></description>
			<content:encoded><![CDATA[<p>Hay un concepto que, sorprendentemente y por más que pregunto a colegas que trabajan en diferentes empresas, se deja de lado en muchas empresas de desarrollo de software: la gestión del conocimiento. Y dado el sector en el que nos movemos, parece un punto clave. Me parece que cualquier empresa debería ser capaz de responder a:</p>
<ul>
<li>¿Quién utilizó, qué tecnología, cuándo?</li>
<li>¿Quién ha desarrollado qué producto y, por tanto, conoce su Lógica de Negocio?</li>
<li>¿Qué pasa si el programador X se marcha de la empresa? ¿se lleva todo su conocimiento? ¿Quién más lo tiene?</li>
<li>¿Todo el mundo debe tener los mismos conocimientos? ¿Tenemos diferentes perfiles?</li>
<li>¿Cuál va a ser la estrategia para que un recien salido de la facultad llegue a tener los mismos conocimiento que un Senior de su perfil?</li>
</ul>
<p>Lo más triste es que pienso que la mayoría de estas cosas se podrían solucionar teniendo a una persona que se encargara de pensar un poco en ello. No sé si el problema es que la existencia o no de esa persona depende exclusivamente de que alguien, de manera proactiva, decida dedicarle algo de tiempo, o que algunas empresas tienen en la dirección cabezas que sólo piensan de manera financiera (beneficios = presupuesto &#8211; (coste del programador * número de programadores))&#8230;</p>
<p>Dejó aquí un <a href="http://jaibeermalik.wordpress.com/2009/04/12/code-quality-organizing-awareness-with-in-the-team/">artículo interesante</a> y las técnicas básicas que propone:</p>
<ul>
<li><em><strong>Pair Programming:</strong></em> ayuda a revisar el código, tomar decisiones de diseño, y trasvasar conocimiento entre programadores.<br />
<em><strong>Wiki:</strong></em> es una manera ágil y rápida de compartir documentación, modificarla, y mantenerla totalmente actualizada (sabiendo quién hizo qué cambios).<br />
<em><strong>Coding Standards Document:</strong></em> si todo el mundo escribe código igual, el mantenimiento es mucho más sencillo y evita que un código solo sea mantenible por quien lo programó.<br />
<em><strong>Mailing List:</strong></em> o montarte &#8220;un twitter&#8221; para el proyecto (con Prologue o con lo que sea) ayuda a preguntar y responder dudas sobre el proyecto rápidamente.<br />
<em><strong>Hacer saber a la gente que has arreglado un problema:</strong></em> esto se refiere a que una persona pueda entra en el código programado por otra y modificarlo para solucionar un problema, comentádoselo luego a los demás, y depende de la manera en que gestiones el código.</li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/CB7NKfvItcjcGPRkg-rsc3XE3To/0/da"><img src="http://feedads.g.doubleclick.net/~a/CB7NKfvItcjcGPRkg-rsc3XE3To/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CB7NKfvItcjcGPRkg-rsc3XE3To/1/da"><img src="http://feedads.g.doubleclick.net/~a/CB7NKfvItcjcGPRkg-rsc3XE3To/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/gestion-del-conocimiento-en-proyectos-de-software/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Agile Patterns: the technical cluster</title>
		<link>http://www.programania.net/desarrollo-agil/agile-patterns-the-technical-cluster/</link>
		<comments>http://www.programania.net/desarrollo-agil/agile-patterns-the-technical-cluster/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 08:37:00 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[agile patterns]]></category>
		<category><![CDATA[business smells]]></category>
		<category><![CDATA[technical clusters]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=744</guid>
		<description><![CDATA[patrones ágiles de desarrollo de software]]></description>
			<content:encoded><![CDATA[<p>Os aconsejo leeros el libro <a href="http://www.infoq.com/minibooks/agile-patterns">Patterns of Agile Practice Adoption</a>. Se trata de un libro un tanto esquemático pero bastante exhaustivo que analiza las prácticas ágiles poniéndolas en forma de patrones (qué es, cuándo usarlo, qué implica, etc.). Ademas, explica bastante bien los objetivos de las prácticas ágiles, e introduce un concepto, los Business Smells (cómo detectar cuando algo va mal) muy interesante.</p>
<p>Además, describe cómo ir adoptando las prácticas ágiles de manera paulatina, en forma de iteraciones. Una lectura realmente interesante para todos aquellos que pretendemos ir introduciendo las prácticas ágiles en nuestro proceso de desarrollo.</p>
<p>Además, en la parte final de libro, agrupa las prácticas ágiles por Technical Clusters, esto es, conjuntos de prácticas analizadas en los capítulos anteriores.</p>
<p>Lectura fácil y clarificadora. ¡ya os la estáis bajando!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/YQek0JgMsRsGzKsJZdWWPQp4qZY/0/da"><img src="http://feedads.g.doubleclick.net/~a/YQek0JgMsRsGzKsJZdWWPQp4qZY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/YQek0JgMsRsGzKsJZdWWPQp4qZY/1/da"><img src="http://feedads.g.doubleclick.net/~a/YQek0JgMsRsGzKsJZdWWPQp4qZY/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/agile-patterns-the-technical-cluster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Functor Objects</title>
		<link>http://www.programania.net/php/functor-objects/</link>
		<comments>http://www.programania.net/php/functor-objects/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 07:29:43 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[functor objets]]></category>
		<category><![CDATA[php 5.3]]></category>
		<category><![CDATA[php closures]]></category>
		<category><![CDATA[php invoke]]></category>
		<category><![CDATA[php lambda functions]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=674</guid>
		<description><![CDATA[¿qué ventajas tienen las nuevas características de PHP 5.3 como closures y lambda functions?]]></description>
			<content:encoded><![CDATA[<p>La verdad es que después de mucho discutir(por <a href="http://fabien.potencier.org/article/17/on-php-5-3-lambda-functions-and-closures">aquí</a>, <a href="http://www.slideshare.net/sebastian_bergmann/lambda-functions-closures-functors-presentation">aquí</a>, o <a href="http://www.programania.net/patrones-de-diseno/futuro-de-php-closures-traits-namespaces-lambda-y-mas/">aquí</a>) sobre las ventajas de las lamba functions, closures, etc. en PHP 5.3, todavía no tengo muy claro cómo aplicarlo a mi código. En <a href="http://mundogris.wordpress.com/2008/08/03/php-lambda-functions-y-closures-lo-que-es-bullshit-y-lo-que-realmente-es-de-provecho/">MundoGris, defienden que apenas hay cosas útiles, y que debemos fijarnos en el nuevo &#8220;magic method&#8221; __invoke como lo que realmente resultará útil.</a> El __invoke nos permitirá crear clases que funcionan como funciones (ideales para luego reutilizarlas con array_map, array_filter,etc&#8230;). A continuación un ejemplo directamente copypasteado de MundoGris:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> GreaterThan <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$limit</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$limit</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>limit <span style="color: #339933;">=</span> <span style="color: #000088;">$limit</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __invoke<span style="color: #009900;">&#40;</span><span style="color: #000088;">$number</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$number</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>limit<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">function</span> filterGreaterThan<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #339933;">,</span> <span style="color: #000088;">$limit</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_filter</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">new</span> GreaterThan<span style="color: #009900;">&#40;</span><span style="color: #000088;">$limit</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como vemos, GreatherThan es una clase con un método __invoke que array_filter utilizará para elegir aquellos miembros del array que sean mayores que $limit. Me ha parecido una solución útil e interesante.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/bqtS7Ep-H0NKMsYA4l_TduCGcYQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/bqtS7Ep-H0NKMsYA4l_TduCGcYQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bqtS7Ep-H0NKMsYA4l_TduCGcYQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/bqtS7Ep-H0NKMsYA4l_TduCGcYQ/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/php/functor-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Está PHP preparado para la empresa?</title>
		<link>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/</link>
		<comments>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 07:13:51 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[DSL - Domain Specific Language]]></category>
		<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[MVC - Model View Controller]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PRUEBAS FUNCIONALES]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[SELENIUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[e-learning]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[moodle]]></category>
		<category><![CDATA[phpundercontrol]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=683</guid>
		<description><![CDATA[PHP está preparado para la empresa]]></description>
			<content:encoded><![CDATA[<div>Leyendo el artículo de la <a href="http://www.infoq.com/articles/enterprise-php">infoQ sobre si PHP está preparado para la empresa</a>, me vienen varios pensamientos a la cabeza. En primer lugar, preguntarse si un lenguaje está &#8220;preparado para la empresa&#8221; me parece muy del mundo Java. A día de hoy no sé muy bien qué significa. Y, en segundo lugar, sigo en mis trece con <a href="http://www.programania.net/desarrollo-agil/tendencias-en-el-desarrollo-de-software-2009/">la &#8220;tendencia&#8221; que comenté en un artículo anterior: creo que los lenguajes de backend están perdiendo importancia</a>. Dicho esto, ¿está PHP preparado para la empresa? Descomponiendo ésta pregunta en subpreguntas:</div>
<div></div>
<div><strong>¿Permite PHP técnicas ágiles como pruebas unitarias, funcionales, integración contínua, etc?</strong></div>
<div>SI (phpunit, selenium, phpundercontrol, etc.)</div>
<div></div>
<div><strong>¿Permite PHP aplicar metodologías ágiles de gestión de proyectos como SCRUM, etc?</strong></div>
<div>Dado que esto no tiene que ver con el código&#8230; ¿Cómo no?</div>
<div></div>
<div><strong>¿Tiene PHP los suficientes mecanismos de POO, patrones y buenas prácticas?</strong></div>
<div>Zend Framework es una buena demostración de la posibilidad de escribir programas MVC, active record, con DSL´s, Conventions over Configurations, etc.</div>
<div></div>
<div><strong>¿Qué tal funciona PHP cuando hace falta alto rendimiento?</strong></div>
<div>Cuando se trata de aguantar a millones de usuarios, PHP no tiene competidor. Está demostrado que ofrece mayor rendimiento que Java y, por supuesto, que Ruby. Cuando la clave no está en tener muchos usuarios sino en tener complejas transacciones con bases de datos, normalmente se confía en Java (el rey del software bancario). <a href="http://www.oracle.com/technology/global/lad-es/tech/php/index.html">Por mucho que Oracle siga gritando que se puede utilizar perfectamente PHP para estos menesteres</a>.</div>
<div></div>
<div><strong>¿Ofrece algunas ventajas sobre los otros lenguajes?</strong></div>
<div>PHP es, sin duda, el rey del software libre. Y prueba de ello son desarrollos como Moodle, el rey del e-learning, MediaWiki, el rey de los wikis, Wordpress (nadie le iguala en plugins y themes, y es un potentísimo CMS) y es el lenguaje que permite tener un hosting más barato.</div>
<div></div>
<div><strong>Entonces, ¿es el mejor lenguaje, plataforma, y sólo deberíamos desarrollar en PHP?</strong></div>
<div>Pues no, claro. Si quieres hacer una aplicación no-web, en PHP lo tienes difícil (a menos de que sea con Flex). Aunque PHP permita montar un marco de desarrollo realmente profesional, no obliga y permite chapucear a base de bien, hay que tener más cuidado que en otros lenguajes, por ejemplo. Y es verdad que hasta ahora le faltaban mecanismos básicos de distribuión de código como PHAR o Namespaces.</div>
<div></div>
<div></div>

<p><a href="http://feedads.g.doubleclick.net/~a/Fyu1hDpFSnmNJMYSr5iFMt6LhKE/0/da"><img src="http://feedads.g.doubleclick.net/~a/Fyu1hDpFSnmNJMYSr5iFMt6LhKE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Fyu1hDpFSnmNJMYSr5iFMt6LhKE/1/da"><img src="http://feedads.g.doubleclick.net/~a/Fyu1hDpFSnmNJMYSr5iFMt6LhKE/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Métricas en la gestión de proyectos: estimaciones, costes, plazos y user stories</title>
		<link>http://www.programania.net/desarrollo-agil/metricas-en-la-gestion-de-proyectos-estimaciones-costes-plazos-y-user-stories/</link>
		<comments>http://www.programania.net/desarrollo-agil/metricas-en-la-gestion-de-proyectos-estimaciones-costes-plazos-y-user-stories/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 07:50:22 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[calidad del software]]></category>
		<category><![CDATA[estimación de proyectos]]></category>
		<category><![CDATA[gestión de proyectos]]></category>
		<category><![CDATA[iteration velocity]]></category>
		<category><![CDATA[métricas de software]]></category>
		<category><![CDATA[user stories]]></category>
		<category><![CDATA[wideband delphi]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=735</guid>
		<description><![CDATA[estimación de proyectos con metodologías ágiles]]></description>
			<content:encoded><![CDATA[<p>Ya estemos utilizando <a href="http://www.programania.net/desarrollo-agil/desarrollo-agil-con-kanban/">Kanban</a>, <a href="http://www.programania.net/category/scrum/">SCRUM</a> o <a href="http://www.programania.net/desarrollo-agil/feature-driven-development/">Feature Driven Development</a>, si estamos intentando aplicar cualquier metodología ágil necesitaremos elaborar un <strong>Product Backlog</strong> del proyecto donde cada ítem represente una user story (o una feature, o &#8230;). Además, deberemos priorizar esos items para ver cuales son más importantes y añaden más valor, e implementarlos primero.</p>
<p>Una de las claves a la hora de poner manejar cómodamente las user stories, elegir en qué iteración desarrollarlas y poder estimar cuanto tiempo tardaremos o si estamos cumpliendo el plan previsto, es hacer que sean del mismo tamaño (o, al menos, de un tamaño similar). Esto no siempre será posible, pero hay que intentar dividir una user story en varias, o juntarlas, para conseguir la mayor homogeneidad posible.</p>
<p>Para poder estimar el tiempo que nos llevará una user story, tenemos varias técnicas:</p>
<ul>
<li><strong>por analogía</strong>: &#8220;si un item me costó 3 horas, y éste es del mismo tamaño, éste también me costará 3 horas.&#8221; Cuidado con ésta manera de estimar porque si te equivocas en tu primera estimación, propagarás el error al resto de estimaciones&#8230;</li>
<li><strong>descomposición</strong>: si no soy capaz de estimar cuanto me costará un story point, quizá pueda subdividirlo en una serie de story points más fáciles de estimar. Nunca llevar esto demasiado lejos, podemos perder mucho tiempo descomponiendo más y más y más&#8230;</li>
<li><strong>WideBand Delphi</strong>: para cuestiones realmente difíciles de estimar. Se trata de un proces en el que se implica a varios programadores y se busca el consens a base de rondas iterativas. Para ver exactamente cómo se haría: <a href="http://en.wikipedia.org/wiki/Wideband_delphi">aquí</a>.</li>
<li>&#8230; y juegos típicos de SCRUM como el <a href="http://en.wikipedia.org/wiki/Planning_poker">Planning Poker</a>.</li>
</ul>
<p>Una vez que tengamos nuestra estimación para los items más prioritarios, podremos ver cuantas horas y cuantos programadores serán necesarios para llevar a uen puerto la iteración en el tiempo estimado. Ésta es nuestra primera métrica:<strong> Iteration velocity</strong>, esto es, el número de horas (o de story points) resultos multiplicado por el número de programadores que participarán.</p>
<p>Si la Iteration Velocity de cierta iteración que va a durar tres semanas se ha planificado en 45 user stories, y pasada una semana sólo se han resuleto 3 user stories, se puede ver claramente que el equipo se está retrasando. Esto se suele representar mediante un<strong> gráfico BurnDown</strong>.</p>
<p><img class="alignnone size-full wp-image-876" title="scrum_burndown_chart" src="http://www.programania.net/wp-content/uploads/scrum_burndown_chart.gif" alt="scrum_burndown_chart" width="341" height="301" /></p>
<p>Diariamente el programador introducirá las <strong>horas reales</strong> que le están suponiendo los story points. Las horas reales, son una métrica muy evidente. Si estamos por debajo de lo estimado, habrá que añadir story points a la iteración, y si estamos por encima, habrá que ver por qué, y en caso de no haber remedio, disminuir el número de story points de la iteración para poder llevarla a buen puerto.</p>
<p>Si la iteración va mal, y no nos va a dar tiempo a completarla como lo planificamos habrá que ver por qué. A eso nos ayudarán un par de métricas:</p>
<ul>
<li><strong>unplanned items</strong>: esto es, el número de items que hemos descubierto que había que hacer para poder realizar las funcionalidades desarrolladas. Esto puede darse por varios motivos. El primero es <strong>no haber detectado una dependencia</strong> (para poder hacer el item x, debería hacer primero el Y), y el segundo es un<strong> mala fase de análisis y diseño</strong>, que nos haga ahora descubrir cosas sobre nuetro software que ya deberíamos saber.</li>
<li><strong>defects</strong>: si el mismo equipo que se dedica al desarrollo se dedica a la solución de defectos encontrados en las iteraciones anteriores, y el <strong>número de defectos encontrados es alto</strong>, puede ser que nuestro equipo se esté dedicando a solucionar defectos en vez de desarrollar nuevas funcionalidades, y que esto lo esté retrasando.</li>
</ul>
<div><span style="font-family: Times; line-height: normal;"><span style="font-family: Helvetica; line-height: normal;">Las cuatro variables interdependientes con las que podemos jugar (aumentar o disminuir) a la hora de gestionar un proyecto son:</span></p>
<p></span></p>
<ul>
<li><strong>Alcance del producto</strong>. Es el número total de funcionalidades a implementar.</li>
<li><strong>Calidad</strong>: medido de forma fiable mediante el número de defectos total del sistema.</li>
<li><strong>Coste</strong>: muchas veces medido como el número de recursos necesario (programadores y número de horas por programador).</li>
<li><strong>Tiempo</strong>: plazos y fechas estimadas.</li>
</ul>
</div>
<div>Si el Time-Cost es fijo, sólo podemos jugar variando el alcance o la calidad. Bajar significativamente la calidad traerá problemas (subirá el coste en vez de bajarlo) posteriormente. Si el alcance es fijo, tendremos que jugar con el tiempo-coste o la calidad (glupss).</div>
<div><img class="alignnone size-full wp-image-850" title="costTimeQuality" src="http://www.programania.net/wp-content/uploads/costTimeQuality.jpg" alt="costTimeQuality" width="171" height="138" /></p>
<p><img class="alignnone size-full wp-image-851" style="margin-left:20px;" title="scope-cost-time-quality" src="http://www.programania.net/wp-content/uploads/scope-cost-time-quality.jpg" alt="scope-cost-time-quality" width="149" height="133" /></div>
<div>
<p><span style="font-family: Times; line-height: normal;"> </span></p>
<div><span style="font-family: Helvetica; line-height: normal;"></p>
<p>Razones para elegir una funcionalidad y priorizar:</p>
<p></span></p>
<ol>
<li>El valor financiero de tener una funcionalidad concreta.</li>
<li>El coste de desarrollar (y seguramente mantener) la nueva funcionalidad.</li>
<li>Lo que aprendemos sobre el producto al desarrollar esa funcionalidad.</li>
<li>La cantidad de riesgo que desaparece al desarrollar esa funcionalidad.</li>
</ol>
<p><span style="font-family: Helvetica; line-height: normal;"> </span></div>
</div>
<p>Y, por último, dejo aquí <a href="http://geeks.ms/blogs/rcorral/archive/2009/06/30/ser-237-as-capaz-de-161-por-supuesto-o-scrum-tambi-233-n-da-respuestas.aspx">un interesante artículo sobre preguntas que podemos hacernos a la hora de controlar el desarrollo de un proyecto, y cómo obtener las respuestas en un entorno SCRUM</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/zfrz-qVUlA2-AszzW3uj3_EzOGo/0/da"><img src="http://feedads.g.doubleclick.net/~a/zfrz-qVUlA2-AszzW3uj3_EzOGo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zfrz-qVUlA2-AszzW3uj3_EzOGo/1/da"><img src="http://feedads.g.doubleclick.net/~a/zfrz-qVUlA2-AszzW3uj3_EzOGo/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/metricas-en-la-gestion-de-proyectos-estimaciones-costes-plazos-y-user-stories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pero: ¿para qué sirve Twitter?</title>
		<link>http://www.programania.net/diseno-de-software/pero-%c2%bfpara-que-sirve-twitter/</link>
		<comments>http://www.programania.net/diseno-de-software/pero-%c2%bfpara-que-sirve-twitter/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 11:20:12 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[marketing on-line]]></category>
		<category><![CDATA[redes sociales]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=797</guid>
		<description><![CDATA[Como aprovechar Twitter para promocionar tu página y ganar tráfico.]]></description>
			<content:encoded><![CDATA[<p>Aprovecharé la <a href="http://alt1040.com/2009/07/guy-kawasaki-da-una-gran-clase-sobre-twitter">estupenda traducción de la entrevista sobre Guy Kawasaki que hicieron en ALT1040 </a>para hablar de Twitter, de la misma manera que <a href="http://www.programania.net/diseno-de-software/pero-%c2%bfpara-que-sirve-facebook/">hablé el otro día sobre Facebook,</a> ¿para qué nos sirve a los desarrolladores twitter y cómo podemos aprovecharlo para ganar tráfico y hacer marketing on-line?</p>
<p>Twitter una sencilla red social donde se pueden escribir mensajes de 140 caracteres, la gente puede seguirte y tu puedes seguir a gente. La formas de comunicarte son:</p>
<ol>
<li>publicar esos mensajes en tu status que verán todos tus seguidores</li>
<li>escribir mensajes directos a una persona en concreto</li>
<li>mensajes @, que son aquellos que se publican en tu status pero que contestan a un tweet concreto de otro usuario.</li>
<li>Que un seguidor haga un &#8220;retweet&#8221; de un mensaje publicado por tí, de tal manera que no sólo lo vean tus seguidores, sino sus seguidores también.</li>
</ol>
<p>Además, Twitter permite potentes búsquedas entre lo que la gente está twitteando, que además te permiten descubrir nueva gente interesante y suscribirte a ella. <strong>La gente que más exito está teniendo en Twitter, es aquella que está publicando contenido interesante</strong>.</p>
<p>Además, Twitter tiene una API que permite postear automáticamente contenido que venga de una aplicación que estés programando o de una fuente RSS por ejemplo. Así que si tienes un blog, puedes ganar en seguidores (y en tráfico) vinculando tu cuenta twitter a tu blog. También se puede utilizar el API para publicar incidencias en un servidor, por ejemplo, y que la gente relacionada con ese servidor pueda seguirlo (las aplicaciones del API de Twitter son infinitas).</p>
<p>Pese a que se habla de Twitter como el SMS-Killer (el día que todos los móviles tengan 3G, twitter te permitirá comunicarte de forma sencilla en mensajes cortos ), Twitter a día de hoy todavía es usado por gente bastante tekki (aunque esto va cambiando poco a poco). El tipo de audiencia que tendremos, comparando con Facebook, es una audiencia más tecnológica.</p>
<p>En definitiva, integrar una web o blog con Twitter es tan sencillo y el potencial aumento de tráfico puede ser tan grande que vale la pena hacerlo&#8230;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/fKJOpOnbmiiVh6CHiMzdPF7kYdk/0/da"><img src="http://feedads.g.doubleclick.net/~a/fKJOpOnbmiiVh6CHiMzdPF7kYdk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/fKJOpOnbmiiVh6CHiMzdPF7kYdk/1/da"><img src="http://feedads.g.doubleclick.net/~a/fKJOpOnbmiiVh6CHiMzdPF7kYdk/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/diseno-de-software/pero-%c2%bfpara-que-sirve-twitter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Seguridad y Zend Framework</title>
		<link>http://www.programania.net/php/seguridad-y-zend-framework/</link>
		<comments>http://www.programania.net/php/seguridad-y-zend-framework/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 10:44:39 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[session hichjacking]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[zend framework seguridad]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=707</guid>
		<description><![CDATA[Maneras de hacer más seguro el Zend Framework]]></description>
			<content:encoded><![CDATA[<p>Dejo a continuación una interesante presentación que habla sobre cómo implementar seguridad en un desarrollo con Zend Framework. Habla sobre temas básicos como autenticación , validación o filtrado, así como Cross Site Request Forgery, Session Hitchjacking, SQL Injection, etc. Está muy bien porque repasa aquellos mecanismos de seguridad automáticos que tiene el ZF y da consejos para hacer más seguro aquello que no lo es.</p>
<p><a href="http://www.suspekt.org/downloads/DPC_Secure_Programming_With_The_Zend_Framework.pdf">Presentación sobre seguridad en Zend Framework [PDF]</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/Pugn_3uUW1Rin5cmgMCZLhzfbFU/0/da"><img src="http://feedads.g.doubleclick.net/~a/Pugn_3uUW1Rin5cmgMCZLhzfbFU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Pugn_3uUW1Rin5cmgMCZLhzfbFU/1/da"><img src="http://feedads.g.doubleclick.net/~a/Pugn_3uUW1Rin5cmgMCZLhzfbFU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/php/seguridad-y-zend-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Internacionalización en PHP 5.3</title>
		<link>http://www.programania.net/php/internacionalizacion-en-php-5-3/</link>
		<comments>http://www.programania.net/php/internacionalizacion-en-php-5-3/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 10:22:01 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[php 5.3]]></category>
		<category><![CDATA[php internacionalizacion]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=824</guid>
		<description><![CDATA[Nueva posibilidad de internacionalizacion con PHP 5.3]]></description>
			<content:encoded><![CDATA[<p>PHP 5.3 es mucho más de lo que parece. Quizá nos hayamos centrado mucho en discutir la utilidad de las PHP closures, o en funcionalidades copiadas a Java como Namespaces o PHAR, pero la versión 5.3 nos trae nuevos módulos como el de internacionalización, que me ha dejado bastante sorpredido. Tiene muy buena pinta. <a href="http://sentidoweb.com/2009/07/07/internacionalizacion-en-php53.php">Copio y pego directamente de l artículo de sentidoweb</a>:</p>
<li><strong>Locale</strong>: divide los datos de localidad en componentes (pais, lenguaje, &#8230;)</li>
<li><strong>Collator</strong>: compara y ordena strings de acuerdo con las reglas locales.</li>
<li><strong>Number formatter</strong>: permite formatear números de diferentes modos (comas decimales, separador de miles, &#8230;)</li>
<li><strong>Date formatter</strong>: formatea fechas y obtiene fechas de texto.</li>
<li><strong>Message formatter</strong>: permite crear mensajes desde strings parametrizados dependiendo de las reglas locales.</li>
<li><strong>Normalizer</strong>: para trabajar con Unicode de forma normalizada, ya que hay caracteres que son representados por distintos códigos Unicode.</li>
<li><strong>Grapheme</strong>: trabaja con &#8220;graphemes&#8221; (no se traducirlo), que son las representaciones de las letras, las cuales puede constar de varios caracteres.</li>
<li><strong>IDN</strong>: permite trabajar con nombres de dominios en formato internacional (eñes, acentos, &#8230;)</li>
<p> </p>
<p>Artículo original: <a href="http://devzone.zend.com/article/4799-Internationalization-in-PHP-5.3">devzone</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/jK6xHqKQmP8tl6RvMcU8uKejU8I/0/da"><img src="http://feedads.g.doubleclick.net/~a/jK6xHqKQmP8tl6RvMcU8uKejU8I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jK6xHqKQmP8tl6RvMcU8uKejU8I/1/da"><img src="http://feedads.g.doubleclick.net/~a/jK6xHqKQmP8tl6RvMcU8uKejU8I/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/php/internacionalizacion-en-php-5-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
