<?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>Pablo Alonso García</title>
	<atom:link href="http://alonsogarciapablo.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://alonsogarciapablo.com/blog</link>
	<description>Desarrollo de software, desarrollo web, metodologías ágiles, internet.</description>
	<lastBuildDate>Wed, 03 Aug 2011 22:52:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Una semana de trabajo en BeBanjo</title>
		<link>http://alonsogarciapablo.com/blog/una-semana-de-trabajo-en-bebanjo/</link>
		<comments>http://alonsogarciapablo.com/blog/una-semana-de-trabajo-en-bebanjo/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 16:34:15 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[bebanjo]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[VOD]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=673</guid>
		<description><![CDATA[Durante el pasado de mes de Julio, tuve la gran oportunidad de pasar una semana trabajando con los increíbles chicos de BeBanjo. En cuanto me enteré de que están buscando gente para ampliar su equipo, decidí escribir a Luismi Cavallé para obtener más información al respecto. Y cual fue mi sorpresa cuando me propusieron trabajar [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bebanjo.com/"><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/08/BeBanjo.jpg" alt="BeBanjo - A better way to manage your VOD services" title="BeBanjo - A better way to manage your VOD services"  class="aligncenter size-full wp-image-674" /></a></p>
<p>Durante el pasado de mes de Julio, tuve la gran oportunidad de pasar <strong>una semana trabajando con los increíbles chicos de <a href="http://bebanjo.com/" rel="external">BeBanjo</a></strong>. En cuanto me enteré de que <a href="http://twitter.com/#!/cavalle/status/80921455017197568" rel="external">están buscando gente para ampliar su equipo</a>, decidí escribir a <a href="http://www.lmcavalle.com/" rel="external">Luismi Cavallé</a> para obtener más información al respecto. Y cual fue mi sorpresa cuando <strong>me propusieron trabajar una semana con ellos</strong>. Claro: <strong>¿qué mejor forma de conocer a tus candidatos que trabajar una semana con ellos?</strong>. Mucha gente no entendía que fuese a una empresa a trabajar sin cobrar un duro, pero ¡yo no lo dudé ni un minuto! <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>La experiencia fue genial para mí. Fueron sólo 5 días pero personalmente me aportó mucho. Por eso, y en primer lugar, quiero <strong>dar las gracias a <a href="http://www.linkedin.com/in/jorgesancha" rel="external">Jorge Gomez Sancha</a> y <a href="http://www.linkedin.com/in/bastianm" rel="external">Bastian Manintveld</a> por la invitación. Thanks!</strong>. </p>
<p>Paso a resumir algunas de las <strong>buenas prácticas y aspectos que más me llamaron la atención</strong> y por las que opino que realmente merece mucho la pena trabajar en BeBanjo:</p>
<h2>A nivel técnico</h2>
<p>Llevaba mucho tiempo deseando trabajar en algún proyecto Rails &#8220;de la vida real&#8221; y con un equipo maduro que realmente llevara mucho tiempo trabajando con el framework. Ya había asistido a una <a href="http://alonsogarciapablo.com/blog/retrospectiva-de-agile-spain-2010-la-primera-conferencia-sobre-metodos-agiles-en-espana#testing-de-aceptacion-con-luismi-y-sergio" rel="external">sesión sobre Testing de aceptación en Ruby impartida por Luismi y Sergio Gil</a> y eso me motivó mucho a escribirles. A nivel técnico, me llamó la atención:</p>
<h3>La programación por parejas: un ordenador, dos pantallas, dos teclados, y dos ratones</h3>
<p>Reconozco que nunca había <a href="http://en.wikipedia.org/wiki/Pair_programming" rel="external">programado en pareja</a> de una forma tan intensiva. Sí lo había hecho para resolver algún problema complejo concreto, pero no durante jornadas completas. La experiencia fue muy positiva. En BeBanjo tuve la oportunidad de comprobar la <strong>productividad y calidad que se consigue cuando dos cabezas están resolviendo un mismo problema</strong>.</p>
<p>El hecho de tener una persona al lado, con quien poder discutir una determinada solución, no sólo ayuda a obtener un mejor código, sino que también consigue que <strong>ambas partes estén completamente concentradas en su trabajo</strong>. Trabajando con Luismi comprendí que <strong>el hecho de exponer el problema a otra persona de una forma oral, ayuda a darse cuenta de muchas cosas que de forma introspectiva sería difícil descubrir</strong>.</p>
<p>Y si a eso le sumas <strong>la <a href="http://www.pomodorotechnique.com/" rel="external">técnica del Pomodoro</a> sincronizada</strong> entre todos los miembros del equipo con <a href="http://tomatoi.st/" rel="external">tomatoi.st</a>, un sencillo tablero kanban y una planificación al comienzo de cada día: <strong>¡la productivad es brutal!</strong> <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>El ciclo BDD/TDD: ¡las pruebas primero!</h3>
<p><strong>¡En BeBanjo siempre escriben los tests primero!</strong>. Y gracias a esta experiencia puede ver a un <a href="http://www.lmcavalle.com/2009/02/10/how-we-do-bdd.html" rel="external">equipo real con su propia forma de hacer BDD/TDD</a>, es decir, programando primero cuál es el comportamiento esperado desde el punto de vista del usuario en forma de test para después codificar una solución lo más elegante posible. Esto hace posible <strong>desarrollar nuevas funcionalidades sin apenas abrir el navegador</strong>.</p>
<p>En el caso de Ruby On Rails, tuve la oportunidad de trabajar con el <a href="http://github.com/cavalle/steak" rel="external">famoso Steak</a>, y también pude ver a <a href="http://pivotal.github.com/jasmine/" rel="external">Jasmine</a> en acción <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Lo mejor que he aprendido referente a este tema es, a parte del enfoque BDD, que <strong>no existe una forma definitiva de probar tu código</strong> sino que cada equipo/persona debe elegir qué <em>aproach</em> le aporta más valor y seguridad&#8230; Por otro lado, he aprendido que hay cosas bastante triviales que no merece la pena probar.</p>
<h3>El workflow con git: varias ramas y un buen entorno</h3>
<p>He de reconocer que a nivel profesional sólo he trabajado con Subversion. Conozco GIT gracias a <a href="https://github.com/" rel="external">GitHub</a> y algún proyecto que he desplegado en <a href="http://www.heroku.com/" rel="external">Heroku</a>.</p>
<p>En BeBanjo tienen muy bien planteando <a href="http://www.slideshare.net/sergio.gil/a-git-workflow" rel="external">su flujo de trabajo con git</a>. Descubrí bastante comandos de git y los problemas que puede ocasionar el trabajar con una única rama <em>master</em>.</p>
<p>Ni que decir tiene, que <a href="http://en.wikipedia.org/wiki/Release_early,_release_often" rel="external">los <strong>despliegues en producción son bastante frecuentes</strong></a> y que cualquier miembro del equipo puede <strong>desplegar nuevas funcionalidades sin miedo a romper algún código anterior</strong>.</p>
<h3>Excelencia técnica y <em>happy programmers</em></h3>
<p>Poco puedo contar de <a href="https://github.com/cavalle" rel="external">Luismi</a>, <a href="https://github.com/porras" rel="external">Sergio Gil (Porras)</a> y <a href="https://github.com/christos" rel="external">Christos Zisopoulos</a> que no se sepa ya. A nivel técnico cuentan con una gran experiencia y son <strong>desarrolladores muy &#8220;visibles&#8221; y activos en el panorama Ruby nacional e internacional</strong>, lo cual dice mucho sobre sus perfiles y los convierte en grandes compañeros de trabajo. Pero <strong>lo más importante de todo es que disfrutan con su trabajo</strong>. </p>
<p>En este punto he de <strong>agradecerles a los tres su gran paciencia a la hora de responder mis infinitas preguntas</strong>, y en especial a Luismi que fue con quién más trabajé y de quién más pude aprender <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Thanks!</p>
<h2>A nivel de empresa</h2>
<p>Al mismo tiempo, <strong>tenía muchas ganas de vivir el ambiente de una <a href="http://alzado.org/articulo.php?id_art=895" rel="external">empresa de producto</a> tipo <em>startup</em></strong>. El hecho de que mi estancia coincidiera con un cambio de oficina me hizo estar implicado en situaciones bastante divertidas y a su vez curiosas por las que supongo toda startup debe pasar algún día. BeBanjo me parece una buena empresa por los siguientes aspectos:</p>
<h3>El buen ambiente de trabajo: felt like home!</h3>
<p><a href="http://bebanjo.com/about">Los miembros de BeBanjo</a><strong> me hicieron sentir como en casa desde el minuto nº1</strong>. Pocas veces me he sentido tan cómodo en un ambiente de trabajo en tan sólo una semana. He de reconocer que durante esa semana no tuve la sensación de ir a &#8220;trabajar&#8221;. Horarios flexibles, mucha comunicación entre el equipo, reuniones informales, comidas muy distendidas, y mi gran inquietud por aprender con<strong> ellos lograron que el día a día fuese super ameno</strong>.</p>
<h3>Productos nicho que resuelven necesidades reales</h3>
<p>El éxito de BeBanjo radica en que sus <strong>productos están enfocados a un nicho de mercado muy específico</strong>. Los fundadores detectaron que las empresas que ofrecen contenidos de video bajo demanda tienen determinados problemas a la hora de gestionar la información sobre sus referencias (series, películas, etc) y la publicación en diversas plataforma. Entonces <strong>diseñaron y desarrollaron varias aplicaciones (<a href="http://bebanjo.com/sequence" rel="external">Sequence</a>, <a href="http://bebanjo.com/movida" rel="external">Movida</a> y <a href="http://bebanjo.com/metadata">Metadata</a>) enfocadas a ayudar a estas empresas</strong>. Un punto clave en este aspecto es la <strong>gran colaboración de los clientes en todo este proceso</strong>.</p>
<h3>Concienciación de la importancia del diseño</h3>
<p>Sin duda, en BeBanjo saben lo importante que es el buen diseño de producto y por eso trabajan con los mejores. No pude conocer personalmente a <a href="http://sofanaranja.com/" rel="external">Ale Muñoz</a> pero sin duda ha hecho un gran trabajo en el diseño de los actuales productos de BeBanjo. Actualmente están buscando diseñadores todo-terreno y estoy convencido que no tardarán en encontrar a algún crack en este campo.</p>
<h3>La importancia de un buen equipo comercial y una clara orientación a cliente</h3>
<p>Hace tiempo que soy consciente de <strong>la importancia de un buen equipo comercial a la hora de desarrollar productos tecnológicos de éxito</strong>. De poco o nada sirve tener un producto excelente a nivel técnico si los posibles compradores no conocen acerca de su existencia&#8230; En este sentido creo que<strong> ambos socios realizan una gran labor a la hora de establecer nuevos contactos comerciales y en el trato diario con el cliente</strong>. </p>
<h3>Su enfoque internacional: pensando en grande</h3>
<p>Me llamó mucho la atención el <strong>enfoque claramente internacional de esta pequeña gran empresa</strong>&#8230; No era raro escuchar a lo largo del día muchas conversaciones de fondo en inglés o francés. Parece de perogrullo pero&#8230; <strong>¿por qué limitarse al mercado nacional?</strong> Y este enfoque no se limita a la parte de captar clientes, sino también a la hora de contratar nuevos empleados&#8230; <strong>¿por qué no contratar a gente con talento de otros países?</strong>.</p>
<p style="margin-top:40px">
Podría seguir escribiendo&#8230; pero no me quiero extender mucho más. Aprovecho para agradecer de nuevo a todos los miembros de BeBanjo y <strong>me despido recomendado a todo el mundo vivir una experiencia de este tipo. Merece la pena.
</p>
<p>¡Gracias BeBanjo!</strong> </p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/una-semana-de-trabajo-en-bebanjo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>8 sitios web que ofrecen alojamiento para el código fuente de tus proyectos privados</title>
		<link>http://alonsogarciapablo.com/blog/sitios-web-alojar-el-codigo-fuente-privado/</link>
		<comments>http://alonsogarciapablo.com/blog/sitios-web-alojar-el-codigo-fuente-privado/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 08:47:41 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=638</guid>
		<description><![CDATA[A esta alturas cualquier desarrollador debería tener claro que es importante usar un sistema de control de versiones tanto en el ámbito profesional como en proyectos personales. Las empresas acostumbran a destinar uno o varios servidores para albergar en ellos los repositorios de cada uno de sus proyectos. Otras recurren a servicios como los que [...]]]></description>
			<content:encoded><![CDATA[<p>A esta alturas cualquier desarrollador debería tener claro que <strong>es importante usar un <a rel="external" href="http://en.wikipedia.org/wiki/Revision_control">sistema de control de versiones</a> tanto en el ámbito profesional como en proyectos personales</strong>.</p>
<p>Las empresas acostumbran a destinar uno o varios servidores para albergar en ellos los repositorios de cada uno de sus proyectos. Otras recurren a servicios como los que incluyo a continuación.</p>
<p>A nivel personal, es muy probable que no contemos con esa infraestructura y nos interese contratar un servicio bueno, bonito y barato, que nos permita alojar nuestros proyectos privados (y otros públicos). Si bien es cierto que <a rel="external" href="http://github.com">GitHub</a> es uno de los sitios más populares y alberga el código fuente de muchas aplicaciones conocidas, existen otras alternativas.</p>
<h2>Bitbucket</h2>
<p><img class="aligncenter size-full wp-image-647" title="bitbucket" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/bitbucket.jpg" alt="bitbucket, sitio web para alojar código fuente" /></p>
<p style="text-align: center;"><a rel="external" href="https://bitbucket.org/">Visitar ell sitio web de BitBucket</a></p>
<h2>Codebase</h2>
<p><img class="aligncenter size-full wp-image-648" title="codebase" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/codebase.jpg" alt="codebase, sitio web para alojar código fuente" /></p>
<p style="text-align: center;"><a rel="external" href="http://www.codebasehq.com/">Visitar el sitio web de Codebase</a></p>
<h2>Codeplane</h2>
<p><img class="aligncenter size-full wp-image-649" title="codeplane" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/codeplane.jpg" alt="codeplane, sitio web para alojar código fuente" /></p>
<p style="text-align: center;"><a rel="external" href="https://codeplane.com">Visitar el sitio web de Codeplane</a></p>
<h2>GitHub</h2>
<p><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/github.jpg" alt="github, sitio web para alojar código fuente" title="github" class="aligncenter size-full wp-image-662" /></p>
<p style="text-align: center;"><a rel="external" href="https://github.com/">Visitar el sitio web de GitHub</a></p>
<h2>Projectlocker</h2>
<p><img class="aligncenter size-full wp-image-650" title="projectlocker" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/projectlocker.jpg" alt="projectlocker, sitio web para alojar código fuente" /></p>
<p style="text-align: center;"><a rel="external" href="http://projectlocker.com">Visitar el sitio web de Projectlocker</a></p>
<h2>Repositoryhosting</h2>
<p><img class="aligncenter size-full wp-image-651" title="Repositoryhosting" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/Repositoryhosting.jpg" alt="Repositoryhosting, alternativa a Github para alojar código fuente" /></p>
<p style="text-align: center;"><a rel="external" href="http://repositoryhosting.com">Visitar el sitio web de RepositoryHosting</a></p>
<h2>unfuddle</h2>
<p><img class="aligncenter size-full wp-image-652" title="unfuddle" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/unfuddle.jpg" alt="bitbucket, alternativa a github para alojar tu código fuente" /></p>
<p style="text-align: center;"><a rel="external" href="http://unfuddle.com">Visitar el sitio web de unfuddle</a></p>
<h2>XP-Dev</h2>
<p><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/06/xpdev.jpg" alt="xpdev, servicio para alojar tu codigo fuente" title="xpdev" width="334" height="640" class="aligncenter size-full wp-image-667" /></p>
<p style="text-align: center;"><a rel="external" href="http://xp-dev.com/">Visitar el sitio web de XP-Dev</a></p>
<p>Si conoces alguna alternativa más estaré encantado de incluirla en este listado. Gracias! <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/sitios-web-alojar-el-codigo-fuente-privado/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Introducción a los módulos en Ruby</title>
		<link>http://alonsogarciapablo.com/blog/modulos-en-ruby/</link>
		<comments>http://alonsogarciapablo.com/blog/modulos-en-ruby/#comments</comments>
		<pubDate>Thu, 12 May 2011 07:54:17 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[autoload]]></category>
		<category><![CDATA[extend]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[mixin]]></category>
		<category><![CDATA[modules]]></category>
		<category><![CDATA[modulos]]></category>
		<category><![CDATA[require]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=603</guid>
		<description><![CDATA[Llega un momento en la vida del programador Ruby en que, de forma natural, empieza a indagar en el código escrito por otras personas, por ejemplo en proyectos alojados en GitHub. En estos proyectos se empieza a ver cómo se hace uso de los módulos, mixins, etc. Pero no siempre es fácil de entender todos [...]]]></description>
			<content:encoded><![CDATA[<p>Llega un momento en la vida del programador Ruby en que, de forma natural, empieza a indagar en el código escrito por otras personas, por ejemplo en proyectos alojados en <a href="http://github.com" rel="external">GitHub</a>. En estos proyectos se empieza a ver cómo se hace uso de los módulos, mixins, etc. Pero no siempre es fácil de entender todos estos conceptos.</p>
<p>Con este post pretendo <strong>ayudarte a entender bien los módulos de ruby</strong> para, por ejemplo, aprender cómo dividir bien el código en módulos, entender el código de las gemas, extender el comportamiento de Rails, etc&#8230;</p>
<h2>¿Qué es un módulo?</h2>
<p>Un módulo es una <strong>agrupación de métodos, clases y constantes</strong>. Mediante el uso de módulos, podemos dividir un programa o sistema en varias partes independientes y reutilizables que interactúen entre sí. Si estás familiarizado con Java, el concepto de módulo podría asimilarse al concepto de paquetes.</p>
<p>Uno podría pensar que esta definición es similar a la de una Clase, que también tiene métodos, clases y constantes&#8230; Sin embargo, la <strong>diferencia fundamental respecto a las clases, es que no se pueden crear instancias de un módulos</strong>.</p>
<p>Como ejemplo de módulo tenemos <a href="http://www.ruby-doc.org/core/classes/Math.html" rel="external">el módulo Math</a>, que recopila mayormente funciones para operaciones trigonométricas. Y que </p>
<h2>¿Cómo se define un módulo?</h2>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> MyModule
&nbsp;
  MY_CONSTANT = <span style="color:#996600;">'...'</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> MyModule.<span style="color:#9900CC;">my_method_1</span>
    ...
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> my_method_2
     ...
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  ...
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#6666ff; font-weight:bold;">MyModule::MY_CONSTANT</span>
...
<span style="color:#9900CC;">MyModule</span>.<span style="color:#9900CC;">my_method_1</span></pre></div></div>

<p>El ejemplo define un módulo de nombre &#8216;MyModule&#8217; con una constante MY_CONSTANT. Vemos que el módulo tienes 2 métodos: un primer <strong>método de módulo</strong>, llamado &#8220;my_method_1&#8243;, que sería equivalente a un método estático de una clase; y un segundo método, &#8220;my_method_2&#8243;, que sería un <strong>método de instancia</strong>. ¿Método de instancia? ¿No me acabas de decir que los módulos no tienen instancias? Lo veremos un poco más abajo <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Como hemos visto, podemos acceder al valor de una constante a través de &#8220;::&#8221; y el nombre de la constante. La invocación de los métodos de módulo sería similar a la invocación de un método estático.</p>
<h2>Principales usos de los módulos</h2>
<h3>Definición de espacios de nombres</h3>
<p>Cuando los programas crecen, surge la <strong>necesidad de organizar de alguna forma todas las partes de la aplicación que están de alguna forma relacionadas entre sí</strong>. En el caso del módulo Math, queda claro que todas esas funciones están tan relacionadas que deben habitar en un mismo espacio de nombres. Los espacios de nombres también <strong>evitan el problema de que surja una ambiegüedad en el caso de que haya dos componentes con un mismo nombre</strong>. Por ejemplo, podemos tener dentro de un programa varias clases con el nombre &#8220;Settings&#8221;, pero cada una estará referida a algo concreto. Incluyendo esas clases en distintos módulos, conseguimos que puedan ser identificadas de forma unívoca.</p>
<p>Para cargar y utilizar un módulo desde otras partes de la aplicación, podemos usar principalmente 3 métodos:</p>
<ul>
<li><strong><a href="http://ruby-doc.org/core/classes/Kernel.html#M001418" rel="external">require</a></strong>, que carga un fichero de código sólo una vez. En este caso el método recibe una cadena con el nombre del fichero.</li>
<li><strong><a href="http://ruby-doc.org/core/classes/Kernel.html#M001417" rel="external">load</a></strong>, que carga un fichero de código aunque ya ha sido ejecutado previamente.
<li>
<li><a href="http://ruby-doc.org/core/classes/Kernel.html#M001419" rel="external">autoload</a>, que recibe el nombre de un fichero y de un módulo, y carga el fichero la primera vez que se accede al módulo indicado.</a>
</ul>
<p>Todos estos métodos aceptan rutas absolutas y relativas.</p>
<h3>Mixins</h3>
<p>Los <em>mixins</em> permiten añadir funcionalidad a una clase mediante el comando <a href="http://ruby-doc.org/core/classes/Module.html#M000440" rel="external">include</a>.</p>
<p>Vamos a ver un ejemplo en el que añadimos un método de instancia a la clase String que elimina los espacios en blanco de principio y fin de una cadena y los sustituye por guiones.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> StringUtils
  <span style="color:#9966CC; font-weight:bold;">def</span> hyphenize
    <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">to_s</span>.<span style="color:#9900CC;">strip</span>.<span style="color:#CC0066; font-weight:bold;">gsub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">' '</span>, <span style="color:#996600;">'-'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC0066; font-weight:bold;">String</span>
  <span style="color:#9966CC; font-weight:bold;">include</span> StringUtils
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot; en un lugar de la mancha... &quot;</span>.<span style="color:#9900CC;">hyphenize</span></pre></div></div>

<p>Con este mecanismo, podemos reutilizar el módulo en varias clases. <strong>Es posible incluir varios módulos en una misma clase o módulo</strong>, con lo que conseguiríamos un efecto similar al de la herencia múltiple disponible en otros lenguajes como C++.</p>
<p><strong>Además de añadir métodos de instancia, es posible extender una clase con métodos de clase</strong>, haciendo uso de <a href="http://ruby-doc.org/core/classes/Object.html#M001002" rel="external">extend</a>. Lo vamos a ver con un último ejemplo, que extiende una clase con métodos de instancia y de clase.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> MiModulo
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">included</span><span style="color:#006600; font-weight:bold;">&#40;</span>base<span style="color:#006600; font-weight:bold;">&#41;</span>
    base.<span style="color:#9900CC;">send</span> <span style="color:#ff3333; font-weight:bold;">:include</span>, InstanceMethods
    base.<span style="color:#9900CC;">send</span> <span style="color:#ff3333; font-weight:bold;">:extend</span>, ClassMethods
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">module</span> InstanceMethods
    <span style="color:#9966CC; font-weight:bold;">def</span> mi_metodo_de_instancia
      <span style="color:#996600;">&quot;mi método de instancia&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">module</span> ClassMethods<span style="color:#006600; font-weight:bold;">&lt;/</span>p<span style="color:#006600; font-weight:bold;">&gt;</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> mi_metodo_de_clase
      <span style="color:#996600;">&quot;mi método de clase&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> MiClase
  <span style="color:#9966CC; font-weight:bold;">include</span> MiModulo
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">puts</span> MiClase.<span style="color:#9900CC;">mi_metodo_de_clase</span>
<span style="color:#CC0066; font-weight:bold;">puts</span> MiClase.<span style="color:#9900CC;">new</span>.<span style="color:#9900CC;">mi_metodo_de_instancia</span></pre></div></div>

<p>Como vemos, definiendo el método <a href="http://ruby-doc.org/core/classes/Module.html#M000458" rel="external">included</a> dentro de un módulo, podemos especificar un comportamiento que se ejecutará cuando ese módulo sea incluido en otro módulo o clase. En este caso, cuando se incluye el módulo en tiempo de ejecución, en envían dos mensaje con <a href="http://ruby-doc.org/core/classes/Object.html#M000999" rel="external">send</a> a MiClase para añadir los métodos de instancia(<em>include</em>) y de clase(<em>extend</em>).</p>
<p>Y con esta introducción y los ejemplillos, espero que entiendas un poco mejor cómo funcionan los módulos en Ruby <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<h2>Referencias</h2>
<p>Lógicamente, esto no lo he inventado yo, sino que he consultado estos enlaces:</p>
<ul>
<li><a href="http://ruby-doc.org/core/classes/Module.html" rel="external">Documentación de la clase <em>Module</em> de Ruby</a>.</li>
<li><a href="http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html" rel="external">Capítulo sobre módulos en Programming Ruby, The Pragmatic Programmer&#8217;s Guide</a>.</li>
<li><a href="http://www.rubyist.net/~slagell/ruby/modules.html" rel="external">Sección sobre módulos, Ruby User&#8217;s Guide</a>.</li>
<li><a href="http://en.wikipedia.org/wiki/Modular_programming" rel="external">Definición de programación modular, Wikipedia</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/modulos-en-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>westartup: un evento ágil para desempleados y emprendedores</title>
		<link>http://alonsogarciapablo.com/blog/westartup-un-evento-agil-para-desempleados-y-emprendedores/</link>
		<comments>http://alonsogarciapablo.com/blog/westartup-un-evento-agil-para-desempleados-y-emprendedores/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 11:20:21 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Metodologías ágiles]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=582</guid>
		<description><![CDATA[westartup es un evento que une a desempleados y emprendedores para impulsar ideas de negocio. El próximo evento se va a celebrar en Gijón, del 6 al 8 de mayo 2011. ¿En qué consiste el evento? El evento consiste en desarrollar dos ideas de negocio, ver su viabilidad y hasta desarrollar prototipos del producto / servicio [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-583" title="westartup" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/04/westartup.png" alt="Logotipo de westartup, evento en Gijón para desempleados" width="232" height="75" /></p>
<p><a rel="external" href="http://www.westartup.org/">westartup</a> es un evento que une a <strong>desempleados y emprendedores</strong> para impulsar ideas de negocio. El <a href="http://www.westartup.org/proximos-eventos/gijon-asturias-6-7-y-8-de-mayo-2011-tu-oportunidad/" rel="external">próximo evento se va a celebrar en Gijón, del 6 al 8 de mayo 2011</a>.</p>
<h2>¿En qué consiste el evento?</h2>
<p>El evento consiste en desarrollar dos ideas de negocio, ver su viabilidad y hasta desarrollar prototipos del producto / servicio de la idea. Tanto si tu idea sale seleccionado como si no trabajarás en un equipo multidisciplinar, de forma ágil y aprendiendo constantemente. Apúntate, es una experiencia única.</p>
<h2>¿Cuanto dura el evento?</h2>
<p>El evento <strong>comienza el viernes 6 de mayo a las 16 horas y finaliza el domingo 8 de mayo</strong> con la cena de fin de westartup, dos días y medio intensos y llenos de experiencias que no te puedes perder.</p>
<h2>¿Cómo es el proceso de Inscripción?</h2>
<p>Se ha de mandar un correo electrónico a la dirección <a href="mailto:tuoportunidad@westartup.org">tuoportunidad@westartup.org</a> para recibir las instrucciones para formalizar la inscripción</p>
<h2>¿Es necesario presentar una idea de negocio para participar?</h2>
<p>No, no hace falta. Los asistentes que no quieran presentar una propuesta son bienvenidos igualmente. Podrán participar en las votaciones de selección de ideas y luego trabajar en la idea que prefieran de las dos ganadoras.</p>
<h2>¿Qué tiene además de novedoso este evento?</h2>
<p><strong>En este evento se va a aplicar Scrum</strong> (metodología ágil) para el desarrollo de las dos ideas de negocio, esto permite disponer ya de una primera beta del plan de empresa el sábado para posteriormente redefinirlo el domingo. Por tanto<strong> los asistentes se benefician además de la experiencia de trabajar en un entorno ágil con una metodología ágil</strong>.</p>
<p>El evento está organizado por la asociación ImpulsaTIC (formada por: Inxeniu Internet Media, Domótica Davinci, Gedpro, Iniciamedia y Cowork Asturias).</p>
<p>Tenéis más información en la página oficial westartup: <a href="http://www.westartup.org/">http://www.westartup.org/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/westartup-un-evento-agil-para-desempleados-y-emprendedores/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducción rápida a Ruby Version Manager (RVM)</title>
		<link>http://alonsogarciapablo.com/blog/rvm-gestion-versiones-ruby/</link>
		<comments>http://alonsogarciapablo.com/blog/rvm-gestion-versiones-ruby/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 18:50:12 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=561</guid>
		<description><![CDATA[En esta entrada explico mis primeros pasos con Ruby Version Manager (RVM), una aplicación que nos permite gestionar fácilmente varias versiones de Ruby y agrupaciones de gemas. Mi intención es ir &#8220;migrando&#8221; poco a poco a la versión 1.9.2 de Ruby y a la versión 3 de Ruby On Rails y durante un tiempo voy [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/04/tutorial_rvm.png" alt="Empezando con RVM" title="tutorial_rvm" width="230" height="220" class="aligncenter size-full wp-image-569" /></p>
<p>En esta entrada explico mis primeros pasos con <a rel="external" href="http://rvm.beginrescueend.com/">Ruby Version Manager (RVM)</a>, una aplicación que nos permite <strong>gestionar fácilmente varias versiones de Ruby y agrupaciones de gemas</strong>. Mi intención es ir &#8220;migrando&#8221; poco a poco a la versión 1.9.2 de Ruby y a la versión 3 de Ruby On Rails y durante un tiempo voy a tener que convivir con ambos entornos&#8230; De momento todo esto me ha funcionado bajo Mac OS X.</p>
<h3>Instalación</h3>
<p>Ejecutamos el siguiente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>curl <span style="color: #660033;">-s</span> https:<span style="color: #000000; font-weight: bold;">//</span>rvm.beginrescueend.com<span style="color: #000000; font-weight: bold;">/</span>install<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>Añadimos la siguiente línea al fichero de configuración <em>~/.bashrc</em>, teniendo en cuenta que no haya ningún &#8220;return&#8221; antes:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-s</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$HOME</span>/.rvm/scripts/rvm&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">source</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$HOME</span>/.rvm/scripts/rvm&quot;</span>  <span style="color: #666666; font-style: italic;"># This loads RVM into a shell session.</span></pre></div></div>

<p>Si abrimos un nuevo shell y ejecutamos el comando <em>rvm</em>, deberíamos ver la descripción del comando y modo de uso. Ahora deberíamos instalar una versión de Ruby, por ejemplo la versión 1.9.2:</p>
<h3>Instalación de Ruby</h3>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rvm <span style="color: #c20cb9; font-weight: bold;">install</span> 1.9.2</pre></div></div>

<p>Ahora ya podemos indicarle al sistema que use la versión de ruby de RVM:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rvm use 1.9.2</pre></div></div>

<p>Si ejecutamos la orden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">which</span> ruby</pre></div></div>

<p>Veremos que ya no apunta a <em>/usr/bin/ruby</em>, y si listamos las gemas instaladas veremos que ¡no hay ninguna!. Podríamos <strong>volver a la versión del sistema fácilmente</strong>, con:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rvm system</pre></div></div>

<p>Si queremos seleccionar una versión por defecto para nuestro shell, podemos hacerlo con el flag &#8211;default:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rvm <span style="color: #660033;">--default</span> use 1.9.2</pre></div></div>

<h3>Gemsets</h3>
<p>Ahora llega la parte interesante, la opción de <strong>crear <em>gemsets</em></strong>, que son agrupaciones de gemas. Por ejemplo, podríamos tener en un mismo sistema 2 <em>gemsets</em>, uno con las gemas de rails 2.3.8, y otro con las gemas que tienen que ver con la versión 3 de Rails. Al instalar una versión de Ruby, RVM crea por defecto el <em>gemset</em> de nombre &#8216;Global&#8217; y es el que se usa por defecto si no se lo indicamos explícitamente otro (como en el siguiente ejemplo). Para crear un <em>gemset</em> y empezar a usarlo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rvm gemset create rails3
rvm use 1.9.2<span style="color: #000000; font-weight: bold;">@</span>rails3</pre></div></div>

<p>Podemos ver los <em>gemsets</em> que hemos creados con:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rvm gemset list</pre></div></div>

<p>Ahora ya podemos instalar la gema de Rails3 y todas las gemas que nos hagan falta. <strong>¡Anímate a probarlo!</strong> Es my sencillito. Y ahora&#8230; ¡a enredar un poco con Rails 3! <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/rvm-gestion-versiones-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aprendiendo a escribir código limpio con Clean Code</title>
		<link>http://alonsogarciapablo.com/blog/codigo-limpio-con-clean-code/</link>
		<comments>http://alonsogarciapablo.com/blog/codigo-limpio-con-clean-code/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 18:03:47 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Metodologías ágiles]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[robert c.martin]]></category>
		<category><![CDATA[uncle bob]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=397</guid>
		<description><![CDATA[Por fín he terminado de leer Clean Code, el famoso libro de Robert C.Martin a.k.a. Uncle Bob, que algunos conoceréis por ser uno de los autores del manifiesto ágil. Después de haberme encontrado con innumerables referencias al libro &#8211; tanto en twitter, como en algunos blogs que sigo habitualmente (que ahora recuerde este de @kinisoftware [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/01/MG_1805.jpg" alt="Portada del libro Clean Code, A Handbook of Agile Software Craftsmanship" title="Portada del libro Clean Code, A Handbook of Agile Software Craftsmanship"  class="aligncenter size-full wp-image-399" /></p>
<p>Por fín he terminado de leer <a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882" rel="external">Clean Code</a>, el famoso libro de <a href="http://www.objectmentor.com/omTeam/martin_r.html" rel="external">Robert C.Martin a.k.a. Uncle Bob</a>, que algunos conoceréis por ser uno de los autores del <a href="http://agilemanifesto.org/" rel="external">manifiesto ágil</a>. Después de haberme encontrado con innumerables referencias al libro &#8211; tanto en twitter, como en algunos blogs que sigo habitualmente (que ahora recuerde este de <a href="http://kinisoftware.lacoctelera.net/post/2010/12/11/comentando-libro-clean-code" rel="external">@kinisoftware</a> y este de <a href="http://jacegu.eu/libros/clean-code/" rel="external">@jacegu</a>) &#8211; me propuse leerlo como uno de los objetivos para este año.</p>
<p>Escribir código que funciona es una tarea relativamente sencilla. Lo difícil es escribir código que, con el tiempo, no se convierta en un &#8220;chorizo&#8221; imposible de ampliar y/o mantener, y que sea entendible por otros programadores. En Clean Code, Uncle Bob nos explica su visión del buen código: el código limpio.</p>
<p>Resumiendo mucho, un código limpio (y bueno según el autor):
<ul>
<li>Incluye <strong>nombres significativos</strong> en variables, funciones, clases, etc.</li>
<li>Incluye <strong>funciones con responsabilidades bien diferenciadas, los parámetros justos, un nivel de abstracción uniforme</strong>.</li>
<li><strong>No repite código</strong>.</li>
<li>Está <strong>autodocumentado</strong>, por lo que no es necesario usar comentarios.</li>
<li>Está <strong>bien diseñado</strong>. Por ejemplo, hace uso de interfaces en vez de implementaciones concretas.</li>
<li>Tiene bien separado <strong>el manejo de errores para que esto no interfiera en la comprensión del código</strong>.</li>
<li>Se <strong>integra bien con otras aplicaciones</strong>, manteniendo limpias las fronteras y transformando la información externa en objetos de nuestra aplicación.</li>
<li>Está <strong>cubierto al 100% por una batería de tests</strong> que comprueban todos los posibles caminos de ejecución.</li>
<li>Está dividido y organizado en <strong>clases de un tamaño justo con responsabilidades bien definidas</strong>.</li>
<li><strong>Separa claramente la construcción e inicialización del sistema de lo que es la ejecución en sí</strong>.</li>
<li>Crece de una forma sostenible, es decir que <strong>la arquitectura evoluciona incrementalmente</strong> y el código no va degenerando sino todo lo contrario, con cada cambio es más &#8220;fino&#8221; y siempre <strong>cumple las <a href="http://alonsogarciapablo.com/blog/las-4-reglas-de-kent-beck-para-escribir-codigo-simple/">4 reglas de Kent Beck para escribir código limpio</a></strong>.</li>
</ul>
<p>El libro está <strong>repleto de código escrito en Java</strong>. Hay 2 capítulos donde Uncle Bob explica las refactorizaciones de una clase de <a href="http://junit.sourceforge.net/" rel="external">JUnit</a> y la clase <a href="http://www.docjar.com/html/api/org/jfree/date/SerialDate.java.html" rel="external">org.free.date.SerialDate</a>. Estos ejemplos son muy educativos, aunque exigen bastante atención.</p>
<p>En general <strong>no es un libro &#8220;de piscina&#8221; ni &#8220;de váter&#8221;, sino que requiere bastante esfuerzo</strong>: reeler los ejemplos para entenderlos, subrayar y tomar notas, consultar referencias, etc.</p>
<p>Me ha gustado por que no sólo te explica cómo escribir si no que tiene bastantes referencias y conceptos como la <a href="http://en.wikipedia.org/wiki/Law_of_Demeter" rel="external">Ley de Demetrio</a>, <a href="http://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas" rel="external">Desarrollo guiado por pruebas (TDD)</a> y las reglas F.I.R.S.T., <a href="http://en.wikipedia.org/wiki/Separation_of_concerns" rel="external">Separation of Concerns</a>,<a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" rel="external"> Single Responsability Principle</a> (Principio de Responsabilidad Única), <a href="http://en.wikipedia.org/wiki/Open/closed_principle" rel="external">Open-Closed Principle</a>, <a href="http://martinfowler.com/articles/injection.html" rel="external">Inversion of Control y el patrón Depency Injection</a>,<a href="http://en.wikipedia.org/wiki/Domain-specific_language" rel="external"> Domain Specific Languajes</a>, etc.</p>
<p>También ayuda a ver y compreder algunos patrones de diseño como <a href="http://es.wikipedia.org/wiki/Abstract_Factory_(patr%C3%B3n_de_dise%C3%B1o)" rel="external">Abstract Factory</a> y <a href="http://es.wikipedia.org/wiki/Adapter_(patr%C3%B3n_de_dise%C3%B1o)" rel="external">Adapter (Wrapper)</a>.</p>
<p>El último capítulo incluye una referencia de &#8220;Smells and heuristics&#8221;, que son una <strong>ampliación de los <em>Code Smells</em> del libro de <a href="http://martinfowler.com/books.html#refactoring" rel="external">Refactoring de Martin Fowler</a></strong> y que sirve como muy buen resumen del resto del libro.</p>
<p>Sin duda, <strong>Clean Code puede marcar un antes y un después en tus capacidades de programación si lo estudias con dedicación</strong>.</p>
<p>Y cómo la práctica hace al maestro, ¡ahora toca practicar!</p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/codigo-limpio-con-clean-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>3 aplicaciones web para crear tu página personal y gestionar tu marca personal</title>
		<link>http://alonsogarciapablo.com/blog/tres-aplicaciones-web-para-crear-tu-pagina-personal/</link>
		<comments>http://alonsogarciapablo.com/blog/tres-aplicaciones-web-para-crear-tu-pagina-personal/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 08:45:17 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[about.met]]></category>
		<category><![CDATA[flavors.me]]></category>
		<category><![CDATA[marca personal]]></category>
		<category><![CDATA[myegoo.com]]></category>
		<category><![CDATA[pagina personal]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=506</guid>
		<description><![CDATA[Si estás pensando en crear una página personal para reforzar tu marca personal las opciones son muy variadas: desde crear un blog con Blogger y WordPress, hasta codificar la página usando HTML y CSS de toda la vida. Últimamente, están proliferando aplicaciones web que te permiten aglutinar fácilmente tu biografía y tu presencia online (cuenta [...]]]></description>
			<content:encoded><![CDATA[<p>Si estás pensando en <strong>crear una página personal para reforzar tu marca personal </strong>las opciones son muy variadas: desde crear un blog con <a href="http://www.blogger.com/" rel="external">Blogger</a> y <a href="http://wordpress.com/" rel="external">WordPress</a>, hasta codificar la página usando HTML y CSS de toda la vida.</p>
<p>Últimamente, están proliferando<strong> aplicaciones web que te permiten aglutinar fácilmente tu biografía y tu presencia online</strong> (cuenta de <a href="http://twitter.com" rel="external">twitter</a>, <a href="http://facebook.com" rel="external">facebook</a>, <a href="http://linkedin.com" rel="external">linkedin</a>, etc) en una página personal. Algunas de ellas te permiten incluso configurar un dominio personal. Gracias a las posibilidades de <strong>personalización del aspecto final de la página</strong>, y usando un poco nuestra imaginación, el resultado puede ser muy bonito.</p>
<p>Estas son las 3 aplicaciones que conozco a día de hoy, ordenadas según mis preferencias:</p>
<h3><a href="https://about.me/" rel="external">About.me</a></h3>
<p><a href="http://about.me"><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/03/about_me_screenshot.jpg" alt="Captura de pantalla de about.me, aplicación para crear una página personal" title="about_me_screenshot" class="aligncenter size-full wp-image-511" /></a></p>
<h3><a href="http://flavors.me" rel="external">Flavors.me</a></h3>
<p><a href="http://flavors.me"><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/03/flavors_me_screenshot.png" alt="Captura de pantalla de flavors.me, aplicación para crear una página personal" title="flavors_me_screenshot" class="aligncenter size-full wp-image-531" /></a></p>
<h3><a href="http://www.myegoo.com/" rel="external">Myegoo.com</a></h3>
<p><a href="http://myegoo.com"><img src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/03/myegoo_com_screenshot.jpg" alt="Captura de pantalla de myegoo.com, aplicación para crear una página personal" title="myegoo_com_screenshot"  class="aligncenter size-full wp-image-513" /></a></p>
<p>Y a tí, ¿cual te gusta más? <strong>¿conoces alguna más?</strong> Te invito a comentar esta entrada y prometo ir ampliando la lista. ¡Gracias!</p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/tres-aplicaciones-web-para-crear-tu-pagina-personal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>12 tendencias digitales para 2011 según Fjord</title>
		<link>http://alonsogarciapablo.com/blog/12-tendencias-digitales-para-2011-por-fjord/</link>
		<comments>http://alonsogarciapablo.com/blog/12-tendencias-digitales-para-2011-por-fjord/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 14:12:14 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Emprender]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=493</guid>
		<description><![CDATA[Me ha gustado mucho esta presentación de Fjord, donde analizan 12 tendencias digitales para este año 2011. Tuve el placer de asistir a un taller suyo en FICOD donde ya hablaban sobre la importancia de captar y anticiparse a las nuevas tendencias para desarrollar productos impactantes y realmente innovadores. Resumiendo, las 12 tendencias que proponen [...]]]></description>
			<content:encoded><![CDATA[<p>Me ha gustado mucho esta presentación de <a rel="external" href="http://www.fjordnet.com">Fjord</a>, donde analizan <strong>12 tendencias digitales para este año 2011</strong>. Tuve el placer de asistir a un taller suyo en <a rel="external" href="http://www.ficod.es/ficod/">FICOD</a> donde ya hablaban sobre la importancia de captar y anticiparse a las nuevas tendencias para desarrollar productos impactantes y realmente innovadores.</p>
<div style="width: 100%; text-align:center"><object id="__sse6455040" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fjordtrends2011v1-7forslideshare-110105044026-phpapp01&amp;stripped_title=fjord-trends-2011&amp;userName=fjordnet" /><param name="name" value="__sse6455040" /><param name="allowfullscreen" value="true" /><embed id="__sse6455040" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fjordtrends2011v1-7forslideshare-110105044026-phpapp01&amp;stripped_title=fjord-trends-2011&amp;userName=fjordnet" name="__sse6455040" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>Resumiendo, las 12 tendencias que proponen son:</p>
<ol>
<li><strong>&#8220;Barcos salvavidas&#8221; para la inundación de aplicaciones</strong>. La red está inundada de aplicaciones y será necesario desarrollar mecanismos que permitan a los usuarios buscar y encontrar las aplicaciones que mejor se adapten a sus necesidades. Una consecuencia de la sobrecarga de información.</li>
<li><strong>&#8220;Experiencias líquidas&#8221;</strong>. Experiencias que pueden ser experimentadas desde cualquier pantalla. Por ejemplo, el mecanismo de Amazon para que, independientemente de la pantalla que uses para leer los libros de Kindle, sigas leyendo en el punto en que lo dejaste. O el botón &#8220;Me gusta&#8221; de Facebook, que aparece ya en millones de contenidos y aplicaciones.</li>
<li><strong>Reinvención de las revistas digitales</strong>, para que se adapten a los nuevos dispositivos (tipo <em>tablets</em>) tanto en lo referente a modelos de negocio, como en sus formas, diseño, vocabulario, etc.</li>
<li><strong>Uso de juegos para las tareas cotidianas</strong>. En este sentido recomiendan estar atento a los próximos movimientos de <a rel="external" href="http://es.foursquare.com/">Foursquare</a>. Esto me recuerda a los <a rel="external" href="http://www.thefuntheory.com">vídeos y experimentos de The Fun Theory</a>.</li>
<li><strong>Proliferación de los objetos inteligentes</strong>, también conocido como <a rel="external" href="http://es.wikipedia.org/wiki/Internet_de_las_Cosas">El internet de las cosas</a>.</li>
<li><strong>Desarrollo de super-teléfonos</strong>. Cada vez más, los teléfonos serán capaces de renderizar gráficos en 3D e incluso imágenes proyectadas por el propio teléfono.</li>
<li><strong>Nuevas necesidades para la gestión de información sobre la vida de las personas en la red</strong>. Estos últimos años mucha gente ha compartido información sobre su vida personal en la nube y en Fjord creen que será necesario que haya agentes que se dediquen a aglutinar toda esa información de cada persona.</li>
<li><strong>Uso de teléfonos móviles como tarjetas de crédito</strong>.</li>
<li><strong>Cambios en nuestra forma de trabajar debido a la proliferación de los Tablets</strong>, que tenderán a convertirse en herramientas de trabajo de uso cotidiano.</li>
<li><strong>Aparición de nuevos formas de pago a través del móvil</strong>: subscripciones, micropagos, cupones, etc. En definitiva, uso del móvil como monedero para pequeños pagos.</li>
<li><strong>&#8220;La nube se transforma en una cometa&#8221;</strong>. Hay mucha información ya en &#8220;la nube&#8221;. Aparecerán nuevos servicios y <em>mashups</em> que introduzcan nuevas formas de relacionar y visualizar toda esa información.</li>
<li><strong>Batalla de los fabricantes para entrar en nuestros salones</strong>. Nuestros salones tienden a acumular cada día más dispositivos y entretenimientos: televisores en 3D, Tablets, Internet en la televisión, etc. Seguirán surgiendo nuevas formas de interacción y control remoto de todos estos aparatos.</li>
</ol>
<p>Algunas de sus propuestas son ya parte del presente. En cualquier caso, todos estos campos tienen muchas posibilidades de desarrollo y mucho potencial. Si quieres ser innovador, ya sabes: ¡a darle al coco y a currar!</p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/12-tendencias-digitales-para-2011-por-fjord/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Las 4 reglas de Kent Beck para escribir código simple</title>
		<link>http://alonsogarciapablo.com/blog/las-4-reglas-de-kent-beck-para-escribir-codigo-simple/</link>
		<comments>http://alonsogarciapablo.com/blog/las-4-reglas-de-kent-beck-para-escribir-codigo-simple/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 09:34:17 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Metodologías ágiles]]></category>
		<category><![CDATA[Código simple]]></category>
		<category><![CDATA[DRY]]></category>
		<category><![CDATA[Kent Beck]]></category>
		<category><![CDATA[YagNi]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=487</guid>
		<description><![CDATA[En sus 4 reglas para escribir código simple, Kent Beck explica que un buen código simple debe cumplir: Pass all tests. Clear, expressive &#038; consistent. Duplicates no behavior or configuration. Minimal methods, classes, &#038; modules Cuya traducción al castellano vendría a ser: Estar bien cubierto y satisfacer las aserciones de una buena batería de tests [...]]]></description>
			<content:encoded><![CDATA[<p>En sus <a href="http://c2.com/cgi/wiki?XpSimplicityRules" rel="external">4 reglas para escribir código simple</a>, Kent Beck explica que un buen código simple debe cumplir:</p>
<ul>
<li>Pass all tests.</li>
<li>Clear, expressive &#038; consistent.</li>
<li>Duplicates no behavior or configuration.</li>
<li>Minimal methods, classes, &#038; modules</li>
</ul>
<p>Cuya traducción al castellano vendría a ser:</p>
<ul>
<li>Estar bien cubierto y satisfacer las aserciones de una buena <a href="http://c2.com/cgi/wiki?UnitTestsTellYouWhenYoureDone" rel="external">batería de tests unitarios</a>.</li>
<li>Expresar las ideas que nosotros como programadores queremos expresar (<a href="http://c2.com/cgi/wiki?SelfDocumentingCode" rel="external">código auto-documentado</a>).</li>
<li>Decir cada cosa una única vez (<a href="http://c2.com/cgi/wiki?DontRepeatYourself" rel="external">DRY -> Don&#8217;t Repeat Yourself</a>).</li>
<li>Evitar tener partes supérfluas: debe ser simple y satisfacer las necesidades actuales, sin pensar en lo que puede pasar en el futuro (<a href="http://c2.com/cgi/wiki?YouArentGonnaNeedIt" rel="external">You ain&#8217;t gonna Need it -> YagNi</a>); y <a href="http://c2.com/cgi/wiki?MinimumNumberOfClassesAndMethods" rel="external">tener el mínimo  número de clases y métodos</a> (teniendo en cuenta el Principio de Responsabilidad Única).</li>
</ul>
<p>Me he enterado de la existencia de estas reglas gracias al libro <a href="http://www.informit.com/store/product.aspx?isbn=0132350882" rel="external">Clean Code</a>, que llevo tiempo leyendo y que mucha gente considera de obligada lectura para cualquier desarrollador de software.</p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/las-4-reglas-de-kent-beck-para-escribir-codigo-simple/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;Ha llegado la hora de montar tu empresa&#8221;, de Alejandro Suárez</title>
		<link>http://alonsogarciapablo.com/blog/ha-llegado-la-hora-de-montar-tu-empresa-de-alejandro-suarez/</link>
		<comments>http://alonsogarciapablo.com/blog/ha-llegado-la-hora-de-montar-tu-empresa-de-alejandro-suarez/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 22:09:27 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
				<category><![CDATA[Emprender]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[alejandro suarez]]></category>
		<category><![CDATA[emprendedor]]></category>
		<category><![CDATA[emprender]]></category>
		<category><![CDATA[empresario]]></category>
		<category><![CDATA[hallegadolahora]]></category>
		<category><![CDATA[plan de empresa]]></category>
		<category><![CDATA[self made men]]></category>

		<guid isPermaLink="false">http://alonsogarciapablo.com/blog/?p=426</guid>
		<description><![CDATA[Ya he terminado de leer Ha llegado la hora de montar tu empresa, el nuevo libro de Alejándro Suárez, donde hace un repaso general de todos los pasos que hay que seguir para emprender un negocio. Esta es mi ficha del libro. ¿Por qué lo leí? Hace tiempo que barajo la posibilidad y siento muchas [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-428" href="http://alonsogarciapablo.com/blog/ha-llegado-la-hora-de-montar-tu-empresa-de-alejandro-suarez/ha-llegado-la-hora-de-montar-tu-empresa-por-alejandro-suarez/"><img class="aligncenter size-full wp-image-428" title="ha-llegado-la-hora-de-montar-tu-empresa-por-alejandro-suarez" src="http://alonsogarciapablo.com/blog/wp-content/uploads/2011/02/ha-llegado-la-hora-de-montar-tu-empresa-por-alejandro-suarez.jpg" alt="Ha llegado la hora de montar tu empresa, por Alejandro Suárez" width="640" height="427" /></a></p>
<p>Ya he terminado de leer <a href="http://www.hallegadolahorademontartuempresa.com/" rel="external">Ha llegado la hora de montar tu empresa</a>, el nuevo libro de <a href="http://www.alejandrosuarez.es/" rel="external">Alejándro Suárez</a>, donde hace un repaso general de todos los<strong> pasos que hay que seguir para emprender un negocio</strong>. Esta es mi ficha del libro.
</p>
<p><span id="more-426"></span></p>
<h3>¿Por qué lo leí?</h3>
<p>Hace tiempo que barajo la posibilidad y siento muchas inquietudes por montármelo por mi cuenta. Desde entonces, vengo formándome en estos temas, leyendo otros libros como <a href="http://www.casadellibro.com/libro-el-libro-negro-del-emprendedor-/1136030/2900001178147" rel="external">El libro negro del emprendedor</a> y acudiendo a eventos como <a href="http://iniciador.com/" rel="external">Iniciador</a> (ahora en Asturias). La recomendación, por parte de <a href="http://loogic.com/hallegadolahora/" rel="external">Javier Martín (Loogic)</a> me impulsó a comprar el libro y tengo que reconocer que <strong>me lo merendé en un viaje de ida y vuelta en tren Gijón-Madrid</strong> <img src='http://alonsogarciapablo.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>¿A quién se lo recomendaría?</h3>
<p>Se <strong>lo recomendaría a cualquier persona que tenga en mente montar su propio negocio y tenga dudas sobre el proceso</strong>: ¿cómo buscar financiación? ¿qué tipo de sociedad constituir?, ¿con qué ayudas podemos contar?, ¿qué errores son los más comunes?, etc.</p>
<h3>Resúmen</h3>
<p>El libro divide el <strong>proceso</strong> para convertir una idea en emprendimiento de la siguiente forma:</p>
<ol>
<li>Evaluación de tus capacidades como emprendedor.</li>
<li>Búsqueda y análisis de la idea de negocio.</li>
<li>Toma de la decisión de lanzarse a emprender.</li>
<li>Elaboración del plan de empresa.</li>
<li>Emprendimiento en sí.</li>
</ol>
<p>En cada uno de los pasos, Alejandro aporta <strong>ejemplos y casos concretos</strong>: algunos extraídos de su propia experiencia como emprendedor e inversor; y otros extraídos principalmente del negocio anglosajón (Amazon, Apple, etc). Y no duda en hablar también de sus fracasos.</p>
<p>A lo largo de todo el libro, y más a fondo en el último capítulo,<strong> Alejandro hace una evaluación de la situación de la cultura empredora en España</strong>. Concretamente nos expone<strong> los errores más comunes de los emprendedores españoles y analiza porqué en este país no hay más personas que, en vez de aspirar a convertirse en funcionarios, optan por el camino de convertirse en &#8220;hombres echos a sí mismos&#8221;</strong> (<a href="http://en.wikipedia.org/wiki/Self-Made_Men_(Frederick_Douglass)" rel="external"><em>self-made men</em></a>). La conclusión es que tenemos que dejar de ver al empresario como un explotador y empezar a verlo como alguien que ha asumido unos riesgos, ha pensado en grande y ha conseguido generar empleo.
</p>
<p>Me ha gustado el tono con el que Alejandro se dirige al lector (de tú a tú).<strong> Desde mi punto de vista se trata de un libro aséptico</strong> en el sentido de que no te va a animar a dar el paso, pero sí que te puede aclarar muchas dudas para que te animes a hacerlo.</p>
<p>En la página del libro, se ofrecen una <a href="http://www.hallegadolahorademontartuempresa.com/descargas/" rel="external">serie de descargas complementarias</a>. Es interesante la <strong>plantilla para elaborar el Plan de Empresa</strong>, cuyos distintos apartados se explican a lo largo del libro.</p>
<p>Para cerrar este post, incluyo un vídeo (3:22 min) con uno de los ejemplos de motivación de los que habla Alejandro en el libro: la historia de la última carrera del atleta olímpico Derek Redmond en las olimpiadas de Barcelona 92:</p>
<p><iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/Hhao_QrXlVI" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://alonsogarciapablo.com/blog/ha-llegado-la-hora-de-montar-tu-empresa-de-alejandro-suarez/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

