<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7428639459298659300</id><updated>2011-09-26T18:28:03.945+02:00</updated><category term='ruby'/><category term='SOLID'/><category term='mocks'/><category term='Libros'/><category term='Agile Open Spain'/><category term='coding kata'/><category term='seth godin'/><category term='XP'/><category term='eden'/><category term='resistencia'/><category term='autotest'/><category term='Software Craftsmanship'/><category term='Agile-Spain'/><category term='awesomeness'/><category term='internship'/><category term='Testing'/><category term='RSpec'/><category term='Burndown'/><category term='TDD'/><category term='css'/><category term='Git'/><category term='rack'/><category term='BDD'/><category term='racktest'/><category term='Kanban'/><category term='vim'/><category term='JUnit'/><category term='Changes'/><category term='Continuous delivery'/><category term='Heroku'/><category term='dirigidoportests'/><category term='Retrospectiva'/><category term='diseño simple'/><category term='xgn'/><category term='Pruebas de aceptación'/><category term='java'/><category term='sass'/><category term='Principios Ágiles'/><category term='Rails'/><category term='How to'/><category term='capybara'/><category term='cucumber'/><category term='agilismo.es'/><category term='Concordion'/><category term='API'/><category term='goos'/><category term='hammock driven development'/><category term='pair programming'/><category term='omniauth'/><category term='Agile'/><category term='FitNesse'/><category term='twitter'/><category term='Scrum'/><category term='coding dojo'/><category term='stubs'/><category term='apprenticeship'/><category term='Kaizen'/><title type='text'>El programador feliz</title><subtitle type='html'>La prueba primero, cobarde</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-232530239293954740</id><published>2011-07-23T20:54:00.000+02:00</published><updated>2011-07-23T20:54:23.119+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Changes'/><title type='text'>Me he mudado</title><content type='html'>Hace tiempo que pensaba en cambiar de blog. Quería algo que no implicara acceder a la web para escribir y publicar, y quería ser yo el que alojara los posts (y no google).&lt;br /&gt;&lt;br /&gt;Hace poco encontré lo que estaba buscando en Github, y ahora podéis seguirme en:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;a href="http://blog.plagelao.com/"&gt;http://blog.plagelao.com&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un saludo y ¡Adios blogger!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-232530239293954740?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/232530239293954740/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/07/me-he-mudado.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/232530239293954740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/232530239293954740'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/07/me-he-mudado.html' title='Me he mudado'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-2977650563063727680</id><published>2011-05-15T21:50:00.001+02:00</published><updated>2011-05-15T22:39:48.105+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='autotest'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Autotest: friend or foe</title><content type='html'>For all of you who don't know what &lt;a href="https://github.com/grosser/autotest"&gt;autotest&lt;/a&gt; is, it's just a ruby gem that lets you run your tests automatically in the background every time you make a change either in your code or in your tests. It is very clever, and a lot of people use it. You can see some examples in almost every screencast of a kata written in ruby.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why I don't like autotest&lt;/b&gt;&lt;br /&gt;Well, it's not that I don't like it. It is a very cool project and I've used it sometimes while performing a kata. My real problem with it is that it breaks the TDD cycle. Let me explain myself.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Running the test should be a blocking step&lt;/b&gt;&lt;br /&gt;When we are doing TDD, we run the tests to get feedback. Then, &lt;b&gt;we use that feedback to guide our code/design.&lt;/b&gt;&lt;br /&gt;When we use autotest we are not waiting for the tests to fail, we just continue coding, ruining the TDD cycle.&lt;br /&gt;&lt;br /&gt;Wait a second, I do not write any code till autotest tells me that there is a failing test.&lt;br /&gt;Well done. Why are you using autotest then?&lt;br /&gt;&lt;br /&gt;Update: Talking with &lt;a href="https://twitter.com/#!/tom_b025"&gt;Tom Brand&lt;/a&gt; the other day, he said that maybe it is ok to use autotest in the refactoring phase. I think he is right :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-2977650563063727680?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/2977650563063727680/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/05/autotest-friend-or-foe.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2977650563063727680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2977650563063727680'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/05/autotest-friend-or-foe.html' title='Autotest: friend or foe'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1383048816768985801</id><published>2011-04-27T14:50:00.001+02:00</published><updated>2011-04-27T14:53:22.500+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Craftsmanship'/><category scheme='http://www.blogger.com/atom/ns#' term='xgn'/><title type='text'>XGN y Software Craftsmanship</title><content type='html'>Hace una semana estuve pasándomelo pipa en la #XGN de Santiago de Compostela (Muchas gracias a la organización, que nos trató muy bien y muchas gracias a mis anfitriones de &lt;a href="http://www.agil-az.com/"&gt;agil-az&lt;/a&gt;, que me llevaron a cenar cosas muy ricas). &lt;a href="https://twitter.com/#!/alfredocasado"&gt;Alfredo Casado&lt;/a&gt; y yo dimos un par de charlas técnicas (refactorización y continuous delivery) y una charla sobre Software Craftsmanship.&lt;br /&gt;&lt;br /&gt;Si quieres ver la presentación de la charla, aquí la tienes:&lt;br /&gt;&lt;div style="width:425px" id="__ss_7731371"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/plagelao/software-craftsmanship-convierte-tu-vida-en-una-lan-party-7731371" title="Software Craftsmanship: Convierte tu vida profesional en una Lan Party"&gt;Software Craftsmanship: Convierte tu vida profesional en una Lan Party&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/7731371" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/plagelao"&gt;plagelao&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;No tiene mucho sentido verla sin nosotros, porque casi todo son imágenes, pero podemos resumirla en esta cita de &lt;a href="http://www.mcbreen.ab.ca/consulting/BioPeteMcBreen.html"&gt;Pete McBreen&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Software development is meant to be fun, if it isn't, the process is wrong&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;El desarrollo de software se supone que es divertido, si no lo es, el proceso es incorrecto&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Pete McBreen - &lt;a href="http://www.mcbreen.ab.ca/SoftwareCraftsmanship/"&gt;Software Craftsmanship: The new imperative&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1383048816768985801?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1383048816768985801/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/04/xgn-y-software-craftsmanship.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1383048816768985801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1383048816768985801'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/04/xgn-y-software-craftsmanship.html' title='XGN y Software Craftsmanship'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6912716182040997117</id><published>2011-04-25T09:30:00.000+02:00</published><updated>2011-04-25T09:30:00.593+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>5 Things I want to do today!</title><content type='html'>Two weeks ago I was in Edinburgh. I attended the Scottish Ruby Conference and it was awesome! I met a lot of great people and I enjoyed a lot of great talks. But I want to talk today about one of the lightning talks that I had the pleasure to attend. It was not about code, technology or robots, it was about how to manage your time and how to set your priorities.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The idea&lt;/b&gt;&lt;br /&gt;The idea is very simple. Before going to sleep, you have to write down the 5 most important things you want to do tomorrow. Once you've written them down, you have to prioritize them. Then, the next day you have to do the first task in your list. Once you finish the first task, you have to start with the second task. It goes on and on until you finish the 5 tasks or the day ends :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The reality (My reality)&lt;/b&gt;&lt;br /&gt;I've been doing this for two weeks, so I'm not an "expert" :P but I have some conclusions to share.&lt;br /&gt;&lt;br /&gt;First of all, I feel much more productive :D "Planning" what to do the next day helps me to focus on the important things and shows me how difficult it is to achieve everything I want to do (pretty obvious. You can't do everything you want in a day :D )&lt;br /&gt;&lt;br /&gt;Second, it is not easy to follow your plan :D I always start with my first task, and most of the times I continue with the second one, but, eventually, I get distracted. The thing is, there are a lot of things I want to do, and limiting myself to only five is not easy. Also, some of the tasks on the list are really bored (but still important), so sometimes I just ignore them...&lt;br /&gt; Some other times, I just "forget" the priorities :)&lt;br /&gt;&lt;br /&gt;And last, but not least, is not easy to write down the five most important things you have to do the next day.&lt;br /&gt;&lt;br /&gt;Anyway, I think that this simple method is helping me a lot, and I recommend all of you to give it a try. Even if you are not able to follow "the rules", it is a great exercise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6912716182040997117?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6912716182040997117/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/04/5-things-i-want-to-do-today.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6912716182040997117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6912716182040997117'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/04/5-things-i-want-to-do-today.html' title='5 Things I want to do today!'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6457890237280398946</id><published>2011-04-12T22:50:00.001+02:00</published><updated>2011-04-13T20:22:48.855+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous delivery'/><category scheme='http://www.blogger.com/atom/ns#' term='Heroku'/><category scheme='http://www.blogger.com/atom/ns#' term='xgn'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>BDD y Continuous Delivery en la XGN</title><content type='html'>Este fin de semana estaré en la &lt;a href="http://www.xuventudegalicia.net/web/"&gt;XGN de Santiago de Compostela&lt;/a&gt; y voy a intentar picaros un poco para que os animéis a venir. &lt;a href="http://blog.plagelao.com/2011/03/xgn-en-santiago-de-compostela.html"&gt;Como ya os conté&lt;/a&gt;, tengo tres sesiones junto con &lt;a href="http://twitter.com/#!/alfredocasado"&gt;Alfredo Casado&lt;/a&gt;, pero hoy os voy a hablar de &lt;b&gt;Teo crea su primera aplicación web (con Rails, Git y Heroku)&lt;/b&gt;. La idea para esta sesión es hacer un taller en el que crearemos una aplicación web en &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt; utilizando &lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt;. Sin embargo, para hacerlo un poco más interesante, lo vamos a hacer al estilo Software Craftsmanship, lo vamos a hacer usando BDD y Continuous Delivery. ¿Os hace?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Continuous Delivery&lt;/b&gt;&lt;br /&gt;Vamos a aprovechar lo fácil que nos pone las cosas Heroku para practicar (y entender) un poco eso de Continuous Delivery. Veremos lo que mola desplegar con cada commit y el nos daremos cuenta del cuidado que hay que tener cuando desarrollamos software (y no solo mientras escribimos el código).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BDD&lt;/b&gt;&lt;br /&gt;Dado que vamos a desplegar la aplicación en el entorno de producción prácticamente con cada commit, necesitamos definir exactamente cada feature que vamos a desplegar. Para ello utilizaremos BDD (Utilizaremos &lt;a href="http://cukes.info/"&gt;Cucumber&lt;/a&gt;) de forma que cada vez que todas nuestras features ejecutables estén verdes podamos desplegar la aplicación sin ningún temor :D&lt;br /&gt;Una pequeña cuña aquí. Nos vamos a dar cuenta de la importancia que tiene definir buenas historias de usuario de forma que nos sea sencillo crear features pequeñas y deployables. Por eso, os recomiendo el dojo de historias de usuario de los &lt;a href="http://agilismo.es"&gt;agilismo.es&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Entorno&lt;/b&gt;&lt;br /&gt;Si os apetece participar en el taller tenéis un par de opciones, podéis traer vuestro ordenador con &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; y &lt;a href="http://www.ruby-lang.org/en/"&gt;ruby&lt;/a&gt; instalado o podéis traer vuestro ordenador con &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; instalado y yo me encargo de daros una máquina virtual con todo instalado (Eso sí, esa máquina será un Linux con Vim como editor, ya os aviso :P).&lt;br /&gt;Si os da tiempo, nos ahorraríamos algo de tiempo si os hacéis una cuenta en &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt; antes de asistir al taller.&lt;br /&gt;Otra opción es que vengáis a cotillear, que también vale, pero es un poco más aburrido.&lt;br /&gt;&lt;br /&gt;Ya sabéis, si quereis darle caña al continuous delivery no os podéis perder esta sesión. ¡Os espero!&lt;br /&gt;&lt;br /&gt;PS: Por cierto, la aplicación que vamos a crear nos va a servir para sortear un par de &lt;a href="http://oreilly.com/catalog/9780596518387"&gt;Apprenticeship Patterns&lt;/a&gt; en la sesión sobre Software Craftsmanship, así que no podemos fallar :P&lt;br /&gt;&lt;br /&gt;ACTUALIZACIÓN: Os cuento un poco las versiones de ruby y de las gemas que vamos a utilizar:&lt;br /&gt;&lt;br /&gt;La versión de ruby será la 1.8.7&lt;br /&gt;La versión de Rails será la 3.0.3.&lt;br /&gt;Necesitamos también la gema de heroku, claro.&lt;br /&gt;Después usaremos cucumber-rails y capybara. También le daremos al haml (haml-rails es la gema) y al Sass :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6457890237280398946?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6457890237280398946/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/04/bdd-y-continuous-delivery-en-la-xgn.html#comment-form' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6457890237280398946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6457890237280398946'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/04/bdd-y-continuous-delivery-en-la-xgn.html' title='BDD y Continuous Delivery en la XGN'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1569171395658185786</id><published>2011-04-01T22:00:00.000+02:00</published><updated>2011-04-01T22:00:07.320+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>My Vim configuration. Part 4 - Vim as an IDE</title><content type='html'>Today I'm going to finish my Vim configuration explanation (&lt;a href="http://blog.plagelao.com/search/label/vim"&gt;Have a look at the previous articles&lt;/a&gt;). The final part of my configuration is related to the "IDE behaviour" in Vim.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Encoding&lt;/b&gt;&lt;br /&gt;First of all, I have set my encoding to utf-8 with:&lt;br /&gt;&lt;pre&gt;set encoding=utf-8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Indentation&lt;/b&gt;&lt;br /&gt;I prefer spaces to tabs, so this is how I configure it in Vim.&lt;br /&gt;&lt;pre&gt;filetype indent on&lt;br /&gt;set tabstop=2&lt;br /&gt;set softtabstop=2&lt;br /&gt;set smarttab&lt;br /&gt;set expandtab&lt;br /&gt;set autoindent&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Line numbers&lt;/b&gt;&lt;br /&gt;If you want to see the line numbers in Vim you only need to do:&lt;br /&gt;&lt;pre&gt;set number&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Backspace&lt;/b&gt;&lt;br /&gt;Default backspace behaves in a strange way :P I've changed it so it behaves in a more "normal" way:&lt;br /&gt;&lt;pre&gt;set backspace=indent,eol,start&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Search&lt;/b&gt;&lt;br /&gt;One of the most important features in Vim is searching. I've configured mine so it is case insensitive (except if what I search has an uppercase character, then it is case sensitive)&lt;br /&gt;&lt;pre&gt;set ignorecase&lt;br /&gt;set smartcase&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I also want Vim to highlight my search terms:&lt;br /&gt;&lt;pre&gt;set incsearch&lt;br /&gt;set hlsearch&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And I have a shortcut to remove the highlighting:&lt;br /&gt;&lt;pre&gt;nnoremap &amp;lt;leader&amp;gt;&amp;lt;space&amp;gt; :noh&amp;lt;cr&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;There are some more little things that can help you in making a more "personal" Vim, but I'm going to stop here :) Feel free to have a look to &lt;a href="https://github.com/plagelao/config_files/blob/master/vimrc"&gt;my vimrc file&lt;/a&gt; or, you know, google it :P&lt;br /&gt;&lt;br /&gt;Thanks for reading :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1569171395658185786?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1569171395658185786/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/04/my-vim-configuration-part-4-vim-as-ide.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1569171395658185786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1569171395658185786'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/04/my-vim-configuration-part-4-vim-as-ide.html' title='My Vim configuration. Part 4 - Vim as an IDE'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1877512377654155419</id><published>2011-03-22T10:00:00.002+01:00</published><updated>2011-03-23T18:41:32.653+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xgn'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>XGN en Santiago de Compostela</title><content type='html'>Los próximos 15, 16 y 17 de Abril estaré en la &lt;a href="http://www.xuventudegalicia.net/"&gt;XGN&lt;/a&gt; presentando algunas charlas junto a &lt;a href="http://twitter.com/#!/alfredocasado"&gt;Alfredo Casado&lt;/a&gt;. La verdad es que tengo muchas ganas de estar por allí con todos los demás participantes (la gente de &lt;a href="http://axilmente.blogspot.com/"&gt;axilmente&lt;/a&gt;, las &lt;a href="http://www.agile-girls.com/"&gt;agile girls&lt;/a&gt;, los &lt;a href="http://agilismo.es/"&gt;agilismo.es&lt;/a&gt;, los &lt;a href="http://www.funius.com/"&gt;funius&lt;/a&gt;, los &lt;a href="http://1uptalent.com/"&gt;1up talent&lt;/a&gt;, etc). Vamos a aprender mogollón y nos lo vamos a pasar piruleta :)&lt;br /&gt;&lt;br /&gt;He podido cotillear algunas de las charlas propuestas por algunos de estos cracks y son realmente alucinantes :) Nosotros intentaremos mantener el nivel, que no va a ser fácil. Para ello, estamos preparando:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Convierte tu vida profesional en una lan party: software craftsmanship&lt;/li&gt;&lt;li&gt;Teo crea su primera aplicación web (con Rails, Git y Heroku)&lt;/li&gt;&lt;li&gt;¡Si funciona no lo toques!, ¿o sí?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Además, si todo lo que os he contado no os termina de convencer, se está organizando un openspace para el sábado en el que seguiremos hablando de desarrollo, agilismo, etc.&lt;br /&gt;&lt;br /&gt;Si no tenéis reservada la fecha, reservadla ya. En serio, nos lo vamos a pasar piruleta.&lt;br /&gt;&lt;br /&gt;PS: Iré publicando por aquí pequeños spoilers de las charlas para ir abriendo boca :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1877512377654155419?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1877512377654155419/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/03/xgn-en-santiago-de-compostela.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1877512377654155419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1877512377654155419'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/03/xgn-en-santiago-de-compostela.html' title='XGN en Santiago de Compostela'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-246529707635104068</id><published>2011-03-11T20:00:00.006+01:00</published><updated>2011-03-11T20:00:02.789+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='resistencia'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>Elige tu propia aventura</title><content type='html'>Tras un par de semanas algo turbulentas, hoy ha sido mi último día como edenita.&lt;br /&gt;El tiempo que he formado parte de Eden ha sido espectacular. Estoy muy agradecido a todos y cada uno de mis compañeros por creer en mi y por hacerme crecer tanto en lo personal como en lo profesional :) De verdad, muchas, muchas gracias por haberme brindado esta oportunidad.&lt;br /&gt;&lt;br /&gt;Supongo que os preguntaréis qué ha pasado. Tranquilos, no he suspendido durante mi aprendizaje :P De hecho, voy a seguir siendo aprendiz de Aimee (¡yuju!). Simplemente, a veces las cosas no salen como uno espera y entonces es cuando tenemos que abrazar el cambio :D&lt;br /&gt;Ahora empieza otra aventura :D Me voy a quedar en Inglaterra mejorando mi inglés y trabajando como autónomo. Después de mi internship pense en hacerlo en España, pero no terminé de atreverme. Ahora sí que me voy a lanzar :D Todavía no tengo muy claro los pasos a seguir (tengo bastante lectura acumulada para el fin de semana :D ), pero tengo compañeros que me van a ayudar en esta nueva etapa del largo camino (y también tengo un cliente :P ).&lt;br /&gt;&lt;br /&gt;¡Nos vemos! &lt;br /&gt;&lt;br /&gt;PS: Mañana tenemos code retreat en el taller :D Ya os contaré que tal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-246529707635104068?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/246529707635104068/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/03/elige-tu-propia-aventura.html#comment-form' title='9 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/246529707635104068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/246529707635104068'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/03/elige-tu-propia-aventura.html' title='Elige tu propia aventura'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-3123719465144896856</id><published>2011-03-11T09:00:00.001+01:00</published><updated>2011-03-11T09:00:15.882+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>My Vim configuration. Part 3 - Vim shortcuts</title><content type='html'>Continuing with my explanation of my Vim configuration (you can have a look at &lt;a href="http://plagelao.blogspot.com/2011/02/my-vim-configuration-part-1-view.html"&gt;my view settings&lt;/a&gt; and &lt;a href="http://plagelao.blogspot.com/2011/03/my-vim-configuration-part-2-vim-plugins.html"&gt;my plugin settings&lt;/a&gt;), today is the day of the shortcuts :)&lt;br /&gt;&lt;br /&gt;Everyone of us love the &lt;a href="http://www.sbastn.com/programmer-personality"&gt;shortcuts our favorite IDE has&lt;/a&gt;. Vim is no less and you can define whatever shortcut you need :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to define a shortcut in Vim&lt;/b&gt;&lt;br /&gt;It is very easy to define a shortcut in Vim, you only need to map the key combination you one to use with the actual command you want to execute.&lt;br /&gt;To map a combination you can use map or noremap (and all the variants for each mode, like imap, inoremap, nmap, nnoremap, etc...). The difference between map and noremap is that the second one is not recursive. You have &lt;a href="http://stackoverflow.com/questions/3776117/vim-what-is-the-difference-between-the-remap-noremap-nnoremap-and-vnoremap-map"&gt;a very good explanation here&lt;/a&gt;.&lt;br /&gt;You can see an example of a shortcut definition:&lt;br /&gt;&lt;script src="https://gist.github.com/859568.js?file=gistfile7.vim"&gt;&lt;/script&gt;&lt;br /&gt;This shortcut closes Vim without saving the file and can be executed by pressing the keys 'c', 'l', 'o', 's' and 'e'&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Leader&lt;/b&gt;&lt;br /&gt;The previous example is more or less a "hard code" shortcut :) A better way to map commands is using the leader variable, so you start your shortcut by pressing your leader combination.&lt;br /&gt;To define your leader combination you only need to do something like this:&lt;br /&gt;&lt;script src="https://gist.github.com/859568.js?file=gistfile1.vim"&gt;&lt;/script&gt;&lt;br /&gt;In this case, my leader combination is just the ',' key :)&lt;br /&gt;&lt;br /&gt;It is important to define your leader combination because a lot of the existing plugins for Vim use it for their own shortcuts (mappings).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My shortcuts&lt;/b&gt;&lt;br /&gt;Ok, now that we have defined the leader, let's have a look to my actual shortcuts.&lt;br /&gt;The first one I want to show you is how to change between the actual buffer and the alternative buffer (If you don't know anything about Vim buffers, &lt;a href="http://vimeo.com/6306508"&gt;take a look at this video&lt;/a&gt;, it is great!)&lt;br /&gt;&lt;script src="https://gist.github.com/859568.js?file=gistfile3.vim"&gt;&lt;/script&gt;&lt;br /&gt;What I'm doing here is mapping ',' and '6' to ':b#&lt;cr&gt;' (:b# is what you have to type to switch buffers when in normal mode. &lt;cr&gt; means that, after the command, I want to press 'return', executing the command). I'm using nnoremap for this shortcut because I want to use it only in normal mode (the first n of nnoremap) and because if some of my plugins map any ':', 'b' or '#' key to any command I don't want to execute that shortcut (not recursive), I just want to execute ':b#'.&lt;br /&gt;&lt;br /&gt;The next shortcuts are related to some plugins I use:&lt;br /&gt;&lt;script src="https://gist.github.com/859568.js?file=gistfile2.vim"&gt;&lt;/script&gt;&lt;br /&gt;I just map the NERD tree to ',d' and a little bit of help every time I want to use ack (only in normal mode) :P&lt;br /&gt;&lt;br /&gt;Then, I have two shortcut for removing the extra spaces (at the end of the line) and to change tabs with 2 spaces :)&lt;br /&gt;&lt;script src="https://gist.github.com/859568.js?file=gistfile5.vim"&gt;&lt;/script&gt;&lt;br /&gt;I also have a shortcut that changes the ruby hashes (with a symbol as key) from 1.8 syntax to 1.9 syntax:&lt;br /&gt;&lt;script src="https://gist.github.com/859568.js?file=gistfile6.vim"&gt;&lt;/script&gt;&lt;br /&gt;And last, but not least, I map the tab as a match bracket finder:&lt;br /&gt;&lt;script src="https://gist.github.com/859568.js?file=gistfile4.vim"&gt;&lt;/script&gt;&lt;br /&gt;I probably change all of this shortcuts in the future, when I get more experience with Vim, but I hope it shows you how powerful (and customizable) Vim is :)&lt;br /&gt;&lt;br /&gt;PS: I know that the gist are not visible on google reader. Sorry about that! I want to move my blog and fix that :)&lt;/cr&gt;&lt;/cr&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-3123719465144896856?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/3123719465144896856/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/03/my-vim-configuration-part-3-vim.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3123719465144896856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3123719465144896856'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/03/my-vim-configuration-part-3-vim.html' title='My Vim configuration. Part 3 - Vim shortcuts'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-4288107604483562417</id><published>2011-03-08T09:00:00.001+01:00</published><updated>2011-03-08T09:00:03.711+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='sass'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>Sass is so cool!</title><content type='html'>I have to admit that I didn´t know almost anything about CSS six months ago. I was an API developer and I never needed it. But now, everything has changed (I know, it should have changed before, but it didn´t). I need to improve my CSS skills and I need to do it quickly!&lt;br /&gt;&lt;br /&gt;The thing is, I don't really like CSS. I find it a bit confusing and, every time I try to do something I end up doing a mess. What can I do? I need to learn &lt;a href="http://sass-lang.com/"&gt;SASS (&lt;b&gt;S&lt;/b&gt;yntactically &lt;b&gt;A&lt;/b&gt;wesome &lt;b&gt;S&lt;/b&gt;tyle&lt;b&gt;S&lt;/b&gt;heets)&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SASS to the rescue&lt;/b&gt;&lt;br /&gt;This is the first line you can read on the SASS page:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Sass makes CSS fun again.&lt;/i&gt;&lt;/blockquote&gt;And, do you know what? It is true!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What makes SASS funny&lt;/b&gt;&lt;br /&gt;For me, SASS is funny because it brings programming concepts to CSS, and I love programming :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Variables in SASS&lt;/b&gt;&lt;br /&gt;&lt;a href="http://twitter.com/#!/coreyhaines/status/22294186552201216"&gt;Corey Haines said on Twitter&lt;/a&gt; that this year's color was &lt;span class="Apple-style-span" style="color: #CB6586;"&gt;#CB6586&lt;/span&gt;. If I start to use this color on my CSS I have two problems:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If I want to change it on january 1st of 2012 with the 2012 color I'm going to find all the places I'm using it (DRY violation).&lt;/li&gt;&lt;li&gt;I am not a color machine. &lt;span class="Apple-style-span" style="color: #CB6586;"&gt;#CB6586&lt;/span&gt; does not mean anything to me (Not readable).&lt;/li&gt;&lt;/ol&gt;SASS solves those two problems with variables. We can define our color as:&lt;br /&gt;&lt;script src="https://gist.github.com/859472.js?file=variable.sass"&gt;&lt;/script&gt;&lt;br /&gt;And we can use that variable everywhere we want:&lt;br /&gt;&lt;script src="https://gist.github.com/859472.js?file=using_variables.sass"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;Mixins in SASS&lt;/b&gt;&lt;br /&gt;Another DRY violation that I used to do with CSS is when I have to define effects (round borders, shadows, gradients, etc...) to the elements. I end up writing the same more than once (probably because I don't know almost anything about CSS, but probably because it is a very easy thing to do with CSS). SASS helps me to define mixins so I don't repeat my "code" every now and then.&lt;br /&gt;An example of how to define a mixin to apply a gradient can be this one:&lt;br /&gt;&lt;script src="https://gist.github.com/859472.js?file=mixins.sass"&gt;&lt;/script&gt;&lt;br /&gt;And we can use it like this:&lt;br /&gt;&lt;script src="https://gist.github.com/859472.js?file=using_mixins.sass"&gt;&lt;/script&gt;&lt;br /&gt;Did you notice it? Mixins accepts arguments! How awesome is that?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More SASS awesomeness&lt;/b&gt;&lt;br /&gt;You can find more cool SASS features on &lt;a href="http://sass-lang.com/"&gt;the official page&lt;/a&gt;. It is very simple and very useful!&lt;br /&gt;&lt;br /&gt;Enjoy it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-4288107604483562417?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/4288107604483562417/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/03/sass-is-so-cool.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4288107604483562417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4288107604483562417'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/03/sass-is-so-cool.html' title='Sass is so cool!'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-8217661720365578264</id><published>2011-03-06T10:00:00.001+01:00</published><updated>2011-03-06T10:00:08.243+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>My Vim configuration. Part 2 - Vim plugins</title><content type='html'>I was supposed to talk about shortcuts in Vim, but I've changed my mind :P I'm going to talk about how to install plugins for Vim :)                &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Vim plugins&lt;/b&gt;&lt;br /&gt;Vim has a lot of plugins, &lt;a href="http://vim-scripts.org/vim/scripts.html"&gt;&lt;b&gt;a lot&lt;/b&gt;&lt;/a&gt; :D So, how do I choose the plugins I need? Well, fist of all, you have to know what you need. This is very important, you shouldn't use a plugin if you're not sure about why you need it!&lt;br /&gt; &lt;br /&gt;Once you've decided which plugins do you want you only need to install them!&lt;br /&gt; &lt;br /&gt;&lt;b&gt;How to install a vim plugin&lt;/b&gt;&lt;br /&gt;Vim plugins are just scripts and to install them you only need to copy the script file in the right directory. Ok, this looks very similar to &lt;a href="http://plagelao.blogspot.com/2011/02/my-vim-configuration-part-1-view.html#colorscheme"&gt;the way we add color schemes to our Vim&lt;/a&gt;, doesn't it? Yes, the only thing we need to change is the directory. When we install a plugin, we have to add the script file to the 'plugin' (or 'ftplugin' if it is a file-type-dependent script) directory in our .vim directory. &lt;a href="http://www.installationwiki.org/Installing_Vim_Scripts"&gt;Sooo easy&lt;/a&gt; :D&lt;br /&gt; &lt;br /&gt;Yes, so easy. But, do I have to do that every time I get a new plugin or every time I update an old one? Cannot this process be automated? Yes, it can! There are a lot of tools to manage your plugin dependencies. I am using &lt;a href="https://github.com/gmarik/vundle"&gt;Vundle&lt;/a&gt; right now.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Vundle&lt;/b&gt;&lt;br /&gt;Vundle is a plugin management tool for vim. It is very easy to set up and it is very easy to use. You only need to follow &lt;a href="https://github.com/gmarik/vundle"&gt;their instructions&lt;/a&gt; to "install" it. Once you have everything in its right place, you have to add those two lines to your .vimrc file:&lt;br /&gt;&lt;script src="https://gist.github.com/853872.js?file=gistfile1.vim"&gt;&lt;/script&gt;&lt;br /&gt;This makes bundle available while you're using Vim :D&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Vim plugins&lt;/b&gt;&lt;br /&gt;Ok, so, how do I install plugins with Vundle? You only need to add the plugins you want to your .vimrc file (with the Vundler format). I have those:&lt;br /&gt;&lt;script src="https://gist.github.com/853872.js?file=gistfile2.vim"&gt;&lt;/script&gt;&lt;br /&gt;As you can see, you can ask for the plugin by its "official" name or you can linked it to its github repository.&lt;br /&gt;&lt;br /&gt;Once you've defined the plugins you want you only need to type:&lt;br /&gt;&lt;script src="https://gist.github.com/853872.js?file=gistfile3.vim"&gt;&lt;/script&gt;&lt;br /&gt;on Vim to install or update your plugins :D&lt;br /&gt; &lt;br /&gt;Ok, that's all for today. Soon on your screens "How to create shortcuts with Vim" (Although maybe I'll talk a little bit about why I choose those plugins)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-8217661720365578264?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/8217661720365578264/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/03/my-vim-configuration-part-2-vim-plugins.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8217661720365578264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8217661720365578264'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/03/my-vim-configuration-part-2-vim-plugins.html' title='My Vim configuration. Part 2 - Vim plugins'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6495704774517935295</id><published>2011-02-27T20:49:00.001+01:00</published><updated>2011-03-06T01:06:56.901+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>My Vim configuration. Part 1 - View settings</title><content type='html'>Lately, I've been trying to understand better how Vim works, so I've started looking at its configuration files. I forked &lt;a href="https://github.com/chrismdp/config_files"&gt;Chris's configuration&lt;/a&gt; (that was the easy part :D ) and I removed everything I'm not using at the moment. You can see &lt;a href="https://github.com/plagelao/config_files"&gt;my actual configuration files here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It was not easy for me to understand how everything works, that's why I'm going to write about it :D Let's start from the beginning, the vimrc file.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;.vimrc file&lt;/b&gt;&lt;br /&gt;You can find an explanation about the .vimrc file &lt;a href="http://vimdoc.sourceforge.net/htmldoc/starting.html#vimrc"&gt;here&lt;/a&gt;. Basically, this file is loaded just before entering Vim and it contains our personal Vim configuration settings.&lt;br /&gt;I'll try to explain every line of &lt;a href="https://github.com/plagelao/config_files/blob/master/vimrc"&gt;my vimrc&lt;/a&gt; file during the week but, today, I'm going to show you how to configure the "view" part (colors, syntax highlighting, status line, etc).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My Vim view settings&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/846334.js?file=.vimrc"&gt;&lt;/script&gt;&lt;br /&gt;Now, we have a nice Vim window much more friendly than the initial one :D The only problem is that the color scheme is just the default one (which is not very good).&lt;br /&gt;&lt;br /&gt;&lt;a name="colorscheme"&gt;&lt;b&gt;Adding color schemes to Vim&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;To add a color scheme to vim we first need to get one :D &lt;a href="http://www.vim.org/scripts/script_search_results.php?keywords=&amp;script_type=color+scheme&amp;order_by=rating&amp;direction=descending&amp;search=search"&gt;There are a lot of them&lt;/a&gt;. I'm actually using &lt;a href="http://www.vim.org/scripts/script.php?script_id=2777"&gt;tir_black&lt;/a&gt;, but I have to try some more :D&lt;br /&gt;&lt;br /&gt;Ok, you've selected one color scheme, how does Vim know about it? First of all, you need to create a .vim/colors directory in your home directory. Then, you have to copy the color scheme vim file to that directory.&lt;br /&gt;That's all! Now, you can go to Vim and type&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/846334.js?file=gistfile3.vim"&gt;&lt;/script&gt;&lt;br /&gt;The only problem with this is that it is not a permanent change. Every time you close Vim, it will lose your color scheme preference.&lt;br /&gt;What can we do about it? Easy, we just need to open our .vimrc file and add the following line:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/846334.js?file=gistfile2.vim"&gt;&lt;/script&gt;&lt;br /&gt;Now, Vim knows our preferences :D&lt;br /&gt;&lt;br /&gt;Ok, that's all for today. Soon on your screens "How to create shortcuts with Vim"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6495704774517935295?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6495704774517935295/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/my-vim-configuration-part-1-view.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6495704774517935295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6495704774517935295'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/my-vim-configuration-part-1-view.html' title='My Vim configuration. Part 1 - View settings'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1711539249979741579</id><published>2011-02-24T21:28:00.000+01:00</published><updated>2011-02-24T21:28:05.781+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>Vim macros</title><content type='html'>I'm a total noob with vim, so I'm going to start a very basic series of blog posts writing down everything I learn :) Those are going to be very short posts explaining a vim feature. So, let's get started.&lt;br /&gt;&lt;br /&gt;Today, I've been working with Tooky the whole day and he has taught me how macros work in Vim.&lt;br /&gt;I can only imagine how powerful they are :D We've used one to rename a method (including everyplace it was called)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to record a macro&lt;/b&gt;&lt;br /&gt;First of all, we need to be on command mode. Then, we have to press 'q' and the key to store the macro ('qa' will store the macro in the key 'a'). We'll see the word 'recording' on the last line.&lt;br /&gt;&lt;br /&gt;Everything we do then will be recorded (And I mean everything and on any mode).&lt;br /&gt;&lt;br /&gt;To stop recording the macro, all we need to do is press 'q' on command mode.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to execute a macro&lt;/b&gt;&lt;br /&gt;All we have to do is to press 'q' and the key where we stored the macro (on command mode). To execute a macro stored in the key 'a' we have to press '@a'.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Recursive macros&lt;/b&gt;&lt;br /&gt;We can make a recursive macro by recording a '@&amp;lt;key that stores the macro&amp;gt;'&lt;br /&gt;&lt;br /&gt;Hope you find it useful :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1711539249979741579?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1711539249979741579/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/vim-macros.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1711539249979741579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1711539249979741579'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/vim-macros.html' title='Vim macros'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-5307128170577627187</id><published>2011-02-22T09:00:00.001+01:00</published><updated>2011-02-22T09:00:00.472+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>Estado de un plagelao</title><content type='html'>Hoy voy a escribir un poco sobre como han sido mis tres primeras semanas en Eden a nivel personal. Os advierto desde ya que va a ser un post sobre como me siento yo, no sobre como funciona Eden. Si no os apetece leerlo, lo entiendo :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enrique continúa su largo camino&lt;/b&gt;&lt;br /&gt;Estas tres semanas han dado para mucho pero, probablemente, lo más importante es &lt;a href="http://blog.nexwerk.com/2011/02/16/the-long-road/"&gt;la marcha de Enrique&lt;/a&gt;.&lt;br /&gt;Como para muchos de vosotros, &lt;a href="http://twitter.com/#!/ecomba"&gt;Enrique&lt;/a&gt; es una fuente de inspiración tanto en lo personal como en la profesional. Creo que soy muy afortunado por haberle conocido y por poder trabajar con él. ¡Gracias, Enrique! ¡Te deseo muchos éxitos y felicidad mientras cumples tus sueños!&lt;br /&gt;Por suerte, Enrique se queda hasta abril (o no, depende de varias cosas :D ) en Winchester, así que aún podré disfrutar de su compañía algún tiempo más :)&lt;br /&gt;&lt;br /&gt;Pero entonces ¿tú que haces?, ¿te quedas en Winchester o te vuelves a Madrid? ¿Qué pasa con &lt;a href="http://twitter.com/#!/edenmadrid"&gt;Eden Madrid&lt;/a&gt;?&lt;br /&gt;Estas preguntas me las habéis hecho varios y creo que a todos os he contestado lo mismo. De momento, yo me quedo en Winchester continuando con mi apprenticeship. Si todo va bien espero quedarme en Eden una vez termine, ya os iré contando. Respecto a Eden Madrid, aún no se nada.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Los edenitas&lt;/b&gt;&lt;br /&gt;Como ya os conté durante mi &lt;a href="http://plagelao.blogspot.com/search/label/internship"&gt;internship&lt;/a&gt;, los edenitas molan todo y más :D Todos me están ayudando mucho a integrarme en &lt;a href="http://edendevelopment.co.uk/"&gt;Eden&lt;/a&gt; (tanto personalmente como profesionalmente), especialmente mi mentora, &lt;a href="http://twitter.com/#!/sermoa"&gt;Aimee&lt;/a&gt; :)&lt;br /&gt;Quiero hacer una mención especial para mi compañera de aprendizaje, &lt;a href="http://twitter.com/#!/despo"&gt;Despo&lt;/a&gt; :D Compartir el apprenticeship con alguien que está pasando por la misma experiencia ayuda a no sucumbir a la presión que nos auto-imponemos. ¡Gracias, Despo! &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pair programming&lt;/b&gt;&lt;br /&gt;Todo lo que programo en Eden lo programo haciendo pair programming. No estaba acostumbrado pero tengo que decir que es muy divertido, muy cansado y mucho más productivo (al menos para mi).&lt;br /&gt;Es más divertido porque no estás solo :D Siempre tienes alguien con quien hablar :P&lt;br /&gt;Es muy cansado porque te obliga a estar a tope de concentración. Echando cuentas, creo que el máximo de pomodoros que he conseguido terminar en un día han sido 10, que vienen a ser 4 horas y cuarto... Y sin embargo termino mucho más cansado que cuando trabajo solo en casa.&lt;br /&gt;Es más productivo porque es mucho más difícil relajar las buenas prácticas. Siempre tienes a alguien al lado diciendo cosas como "Creo que ese nombre no es correcto" o "¿No deberíamos hacer un test antes?".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Futuro&lt;/b&gt;&lt;br /&gt;No se lo que me deparará el futuro. Lo que tengo claro es que pienso disfrutar el presente :D&lt;br /&gt;&lt;br /&gt;¡Abrazos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-5307128170577627187?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/5307128170577627187/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/estado-de-un-plagelao.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5307128170577627187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5307128170577627187'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/estado-de-un-plagelao.html' title='Estado de un plagelao'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1217507341408290956</id><published>2011-02-20T23:15:00.000+01:00</published><updated>2011-02-20T23:15:46.301+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='omniauth'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>Omniauth, Twitter and BDD</title><content type='html'>Today I've (almost) integrated Twitter authentication for &lt;a href="http://walkingthepath.heroku.com/"&gt;Let's walk the path together!&lt;/a&gt; I've used the &lt;a href="https://github.com/intridea/omniauth"&gt;omniauth gem&lt;/a&gt; to achieve this task. Thanks to &lt;a href="http://railscasts.com/episodes/241-simple-omniauth"&gt;this railscast&lt;/a&gt;, it is very easy to understand how to do it. But, we are doing BDD, aren't we? How do we do BDD against Twitter? That's what I'm going to tell you today :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Omniauth&lt;/b&gt;&lt;br /&gt;OmniAuth is a Rack-based authentication system for twitter (and many other services). Its rack middleware is the one that talks with twitter and puts the twitter user data in the env variable. You can watch the railcast to see an explanation of how it works (it's only 8 minutes).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BDD&lt;/b&gt;&lt;br /&gt;Ok, I know how to integrate Twitter authentication in my application. How do I test it? How do I continue with my BDD cycle? When we are testing our application, we don't want to rely on the actual Twitter service. It will make our tests slower and brittle. We need to have control of our tests, so we need to fake the Twitter server. Fortunately, doing it with omniauth is very easy.&lt;br /&gt;We only need to put omniauth in test mode and give it the information we want to receive from Twitter in our test:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/836348.js?file=bdd.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;In this case, we're telling omniauth to, when asked about Twitter, give us the provider, the user uid and the user name.&lt;br /&gt;&lt;br /&gt;We can integrate this easy in a cucumber hook, or even in a cucumber step, to mock the Twitter server and continue with our BDD cycle :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1217507341408290956?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1217507341408290956/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/omniauth-twitter-and-bdd.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1217507341408290956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1217507341408290956'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/omniauth-twitter-and-bdd.html' title='Omniauth, Twitter and BDD'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6953322991044715013</id><published>2011-02-17T09:00:00.000+01:00</published><updated>2011-02-17T09:00:07.183+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='capybara'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='racktest'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>BDD y descargas de ficheros auto-generados</title><content type='html'>La semana pasada, &lt;a href="http://twitter.com/#!/tom_b025"&gt;Tom&lt;/a&gt; y yo necesitábamos comprobar que un informe se descargaba correctamente desde la aplicación. Dicho informe era una hoja excel generada a partir de los datos contenidos en la base de datos. ¿Os interesa saber cómo lo hicimos? Os lo voy a contar con un ejemplo algo más simple :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Escenario&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Empecemos creando un escenario en cucumber. Queremos descargar un catálogo de productos generado por nuestra aplicación:&lt;br /&gt;&lt;script src="https://gist.github.com/830456.js?file=file.feature"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps&lt;/b&gt;&lt;br /&gt;El given simplemente crea un producto en el sistema y el when descarga el catálogo:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/830456.js?file=given_and_when.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Muy bien, hemos descargado el fichero al pulsar el enlace pero, ¿cómo accedemos a dicho fichero cuando estoy usando &lt;a href="https://github.com/jnicklas/capybara"&gt;capybara&lt;/a&gt; y &lt;a href="https://github.com/brynary/rack-test"&gt;rack-test&lt;/a&gt;? Se me ocurren dos cosas. La primera es usar selenium en lugar de rack-test, haciendo que nuestros tests sean muuucho más lentos. La otra es obtener el &lt;b&gt;bytestream del fichero descargado&lt;/b&gt; que, por si no lo sabíais, &lt;b&gt;está en el body de la página&lt;/b&gt; obtenida tras hacer click en el enlace de descarga:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/830456.js?file=then_plain_text.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Esto tan simple funciona porque, en nuestro caso, estamos descargando un fichero de texto plano. Si en lugar de un texto plano tenemos, por ejemplo, un fichero Excel solo necesitamos parsear los bytes que nos llegan en el body con un objeto que entienda el formato Excel. Nosotros utilizamos la &lt;a href="http://spreadsheet.rubyforge.org/"&gt;gema Spreadsheet&lt;/a&gt; (Cuidado con pronunciarlo spred-shit que queda muy feo :P )&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/830456.js?file=then_excel.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;¡Esto es todo, amigos! Un saludo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6953322991044715013?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6953322991044715013/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/bdd-y-descargas-de-ficheros-auto.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6953322991044715013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6953322991044715013'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/bdd-y-descargas-de-ficheros-auto.html' title='BDD y descargas de ficheros auto-generados'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6602964817835070818</id><published>2011-02-09T10:29:00.000+01:00</published><updated>2011-02-09T10:29:10.081+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='mocks'/><category scheme='http://www.blogger.com/atom/ns#' term='goos'/><category scheme='http://www.blogger.com/atom/ns#' term='stubs'/><category scheme='http://www.blogger.com/atom/ns#' term='RSpec'/><category scheme='http://www.blogger.com/atom/ns#' term='SOLID'/><title type='text'>Specify exactly what you want to happen and no more</title><content type='html'>There is &lt;a href="http://groups.google.com/group/tddev-sp/browse_thread/thread/b682cd36b6c4e45b/00ff9f57189cea0f#00ff9f57189cea0f"&gt;a discussion in the spanish TDD group&lt;/a&gt; about whether it is good or bad, when you have a stub object, to return a different value depending on the input arguments of the method. I don't think it's the right thing to do because, normally, when a stub object cares about the input arguments in its method calls it's because it should not be a stub object, it should be a mock object. Let me explain it with an example:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/813032.js?file=order_spec.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The payment gateway is a stub that returns true when user_has_funds is called with an input argument of 50.&lt;br /&gt;If we look carefully at the test, what we are really doing is testing more than one behavior. First, we're asserting that a user can buy stuff if she has sufficient funds. Second, we are expecting that the payment gateway is called with the right amount.&lt;br /&gt;So, if it is an expectation, why don't we use a mock instead of a stub? We're mixing the concepts of mock and stub and, as a consequence, &lt;b&gt;we're testing more than one thing.We're breaking the single responsibility principle&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/#!/sf105"&gt;Steve Freeman&lt;/a&gt; and &lt;a href="http://twitter.com/#!/natpryce"&gt;Nat Pryce&lt;/a&gt;, authors of the great &lt;a href="http://www.growing-object-oriented-software.com/"&gt;Growing objects oriented software, guided by tests&lt;/a&gt;, recommend to follow a simple rule of thumb, "&lt;a href="http://www.jmock.org/yoga.html"&gt;specify exactly what you want to happen and no more&lt;/a&gt;". If we listen to them (and we should!), those are the resulting tests:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/813032.js?file=sqmc_order_spec.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The first test specifies the relationship between the order and the payment gateway (The message protocol). It uses a mock object to replace the gateway payment object and it expects a call at user_has_funds method with the order amount as an input argument. We want to know that the payment gateway is going to be called with the right amount, so we are interested in its input argument (which is right when mocking). The second one specifies the behavior of the order when the user has funds, and I don't really care about how the order interacts with the payment gateway. I just want to know that the user has sufficient funds. That's why, in this case, we use a stub.&lt;br /&gt;&lt;br /&gt;What I like about the new tests is that, if we change the order behavior by adding some taxes to the product price, the second test is not going to break (we still confirm the order if the payment gateway says that the user has funds, nothing has changed in that specification). Only the first one would be red (and for the right cause, we've changed exactly that specification).&lt;br /&gt;&lt;br /&gt;What do you think?&lt;br /&gt;&lt;br /&gt;PS: I know that, in RSpec:mocks, stub() is an alias for mock() and I don't like it very much :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6602964817835070818?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6602964817835070818/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/specify-exactly-what-you-want-to-happen.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6602964817835070818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6602964817835070818'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/specify-exactly-what-you-want-to-happen.html' title='Specify exactly what you want to happen and no more'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-8171596450318758050</id><published>2011-02-07T09:30:00.001+01:00</published><updated>2011-02-07T09:30:02.351+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='resistencia'/><category scheme='http://www.blogger.com/atom/ns#' term='seth godin'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>Resistencia</title><content type='html'>Hace más o menos un mes, mi novia me regaló "&lt;a href="http://www.amazon.co.uk/Linchpin-Indispensable-Career-Create-Remarkable/dp/0749953357/ref=sr_1_1?ie=UTF8&amp;qid=1296687044&amp;sr=8-1"&gt;Linchpin&lt;/a&gt;", un libro de &lt;a href="http://sethgodin.typepad.com/"&gt;Seth Godin&lt;/a&gt;. Si no lo habéis leido, leedlo.&lt;br /&gt;Aunque prácticamente debería copiar el libro palabra por palabra, hoy solo voy a hablar de una de las partes que más me han llamado la atención, la &lt;b&gt;resistencia&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;La resistencia&lt;/b&gt;&lt;br /&gt;¿Alguna vez os habéis puesto una excusa para no hacer algo? Yo os pongo algunas de las mías:&lt;br /&gt;"Me gusta esa chica pero no voy a decirle nada no vaya a ser que pase de mi"&lt;br /&gt;"No voy a proponer nada para el open porque eso de hablar en público no me gusta nada"&lt;br /&gt;"Podría solicitar ese puesto pero ¿que va a pasar con mi vida si me cogen? Mejor lo dejo pasar" &lt;br /&gt;&lt;br /&gt;Lo que tienen en común todas esas frases es que yo soy el que pone los impedimentos, nadie más. Yo soy el que me impide alcanzar nuevas metas, yo soy el que no me deja evolucionar, yo soy el único responsable de mi propio futuro. Cualquier otra causa que sea capaz de pensar es una excusa creada por la resistencia.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pasar a la acción&lt;/b&gt;&lt;br /&gt;Últimamente estoy intentando vencer siempre que puedo a esa resistencia. Cada vez que me doy cuenta de que estoy pensando alguna excusa para no hacer una tarea, dejo de pensar y me pongo a hacerla. Así es como he decidido que mi primera &lt;a href="http://twitter.com/#!/edentalks"&gt;charla en Eden&lt;/a&gt; trate sobre javascript (un lenguaje que desconozco), o que la tecnología que quiero enseñar al resto de &lt;a href="http://edendevelopment.es/"&gt;edenitas&lt;/a&gt; (españolizando el término) sea node.js.&lt;br /&gt;&lt;br /&gt;¿Qué puede ser lo peor que puede pasar? Por mucho que mi cerebro de reptil me diga lo contrario, lo peor que puede pasar es que aprenda algo nuevo.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-8171596450318758050?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/8171596450318758050/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/resistencia.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8171596450318758050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8171596450318758050'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/resistencia.html' title='Resistencia'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6175602415771239701</id><published>2011-02-03T19:04:00.000+01:00</published><updated>2011-02-03T19:04:08.460+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='apprenticeship'/><title type='text'>Apprentice at Eden Development</title><content type='html'>Here I am! I'm an apprentice at &lt;a href="http://edendevelopment.co.uk/"&gt;Eden Development&lt;/a&gt; :D I'm very happy to be here and I want to share this experience with you.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apprenticeship and Eden&lt;/b&gt;&lt;br /&gt;Even though &lt;a href="http://edendevelopment.es/"&gt;Eden&lt;/a&gt; is all into the Software craftsmanship, &lt;a href="http://twitter.com/#!/despo"&gt;Despo&lt;/a&gt; and I are their first full-time apprentices, so we'll improve the process as we walk the road :D We're going to do two month iterations with all &lt;a href="http://twitter.com/#!/edendevelopment"&gt;Eden&lt;/a&gt; and one week iterations with &lt;a href="http://twitter.com/#!/sermoa"&gt;Aimee&lt;/a&gt; (our mentor).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apprentice expectations&lt;/b&gt;&lt;br /&gt;Last monday, &lt;a href="http://twitter.com/#!/chrismdp"&gt;Chris&lt;/a&gt; and Aimee told us about the kind of things they're expecting from us.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Real world experience of client work&lt;/li&gt;&lt;li&gt;Ability to grasp complex logic&lt;/li&gt;&lt;li&gt;Confidence to change code (sometimes unattended)&lt;/li&gt;&lt;li&gt;Humility&lt;/li&gt;&lt;li&gt;Admitting to mistakes&lt;/li&gt;&lt;li&gt;A good grasp of TDD&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Apprentice tasks&lt;/b&gt;&lt;br /&gt;Apart from the expectations, they also told us some "mandatory" things, so I have a lot of homework :P&lt;br /&gt;&lt;br /&gt;I must write one blog post every week. I don't really think that's going to be a problem given my previous internship ;) I'll try to write twice a week (once in English and once in Spanish)&lt;br /&gt;&lt;br /&gt;I must give an &lt;a href="http://twitter.com/#!/edentalks"&gt;Eden talk&lt;/a&gt; every month. Since all Eden talks are already booked until March, I'll do the first one on March 1st. The talk is titled "Javascript, I didn't know that!" and I'm going to do a &lt;a href="https://github.com/mrdavidlaing/javascript-koans"&gt;javascript koans&lt;/a&gt; session.&lt;br /&gt;&lt;br /&gt;I must do an apprenticeship ongoing project. I want to continue growing &lt;a href="http://walkingthepath.heroku.com/"&gt;Let's walk the path together!&lt;/a&gt; I want it to be a useful resource for the spanish developer community so, if you want me to add some features just tell me about it. I also have to do a presentation about the project every two months (code review and retrospective included).&lt;br /&gt;&lt;br /&gt;There is one more thing I have to do during my apprenticeship. I have to teach some technology to the edenites! I don't know yet what I'm going to do with that...&lt;br /&gt;&lt;br /&gt;As you can see, I have a big challenge ahead!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6175602415771239701?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6175602415771239701/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2011/02/apprentice-at-eden-development.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6175602415771239701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6175602415771239701'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2011/02/apprentice-at-eden-development.html' title='Apprentice at Eden Development'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-213101071545690529</id><published>2010-12-23T23:07:00.000+01:00</published><updated>2010-12-23T23:07:07.143+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='awesomeness'/><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>There is no way back</title><content type='html'>Today, I have finished my internship at &lt;a href="http://www.edendevelopment.es"&gt;Eden Development&lt;/a&gt;. After this month, I think I know what Eden is (for me, at least). Eden is a group of good people who care about what they do. &lt;b&gt;It has been really awesome to work with you, guys! Thanks for everything :)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I came here with a lot of questions and I am leaving with the certainty that other companies are possible. Much more fun, more responsible, better companies :)&lt;br /&gt;&lt;br /&gt;I have been tracking &lt;a href="http://mercuryapp.com/trackings/JW4K-FF9TY-FA5F2"&gt;my feelings about my internship with MercuryApp&lt;/a&gt; and here is the result:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/TROcseLX4EI/AAAAAAAAAKE/Iy1jUztWruY/s1600/Screen+shot+2010-12-23+at+6.59.15+PM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/TROcseLX4EI/AAAAAAAAAKE/Iy1jUztWruY/s640/Screen+shot+2010-12-23+at+6.59.15+PM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As you can see, it has been a great month :D The neutral days were the snowy saturdays or sundays.&lt;br /&gt;The best ones are more interesting. They were the days I did pair programming with &lt;a href="http://twitter.com/sermoa"&gt;Aimee&lt;/a&gt; and &lt;a href="http://twitter.com/ecomba"&gt;Enrique&lt;/a&gt;. Think about it, &lt;b&gt;the best days were the ones I did pair programming&lt;/b&gt; and, you know what, every day is like that for the edenites :D &lt;br /&gt;I also enjoyed a lot the plage-presentation days, even though I do not like to speak in public. They were my opportunity to offer something to Eden (besides translations :P).&lt;br /&gt;The rest of the days were "just funny days" :D &lt;br /&gt;&lt;br /&gt;I also appreciate that Enrique has forced me to write an article every day. I am looking forward to read them :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thank you, Eden, for given me this opportunity :D It has been a life changing experience.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;PS: I have liked Eden so much that I have stuck their sticker on my mac :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-213101071545690529?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/213101071545690529/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/there-is-no-way-back.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/213101071545690529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/213101071545690529'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/there-is-no-way-back.html' title='There is no way back'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0fjBGCsPOPo/TROcseLX4EI/AAAAAAAAAKE/Iy1jUztWruY/s72-c/Screen+shot+2010-12-23+at+6.59.15+PM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-485439296242002878</id><published>2010-12-22T21:59:00.000+01:00</published><updated>2011-03-23T22:48:45.811+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous delivery'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='Libros'/><title type='text'>Principios detrás de "Continuous Delivery"</title><content type='html'>Mañana tengo que hacer la presentación sobre "Continuous Delivery" y todavía no se muy bien que contar, así que voy a ensayar un poco con esta entrada :P Os voy a contar los principios que guían a los autores en esto de la entrega continua. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create repeatable, reliable process for releasing software&lt;/b&gt;&lt;br /&gt;Para los autores, liberar software debe ser fácil. ¿Alguna vez os habéis tenido que quedar una tarde o un fin de semana preparando una puesta en producción? ¿Os ponéis nerviosos con cada entrega al cliente? Si eso pasa es porque no confiais en vuestro proceso de entrega de software, os crea incertidumbre porque no es repetible. Depende demasiado de las personas que realizan esa tarea.&lt;br /&gt;Según los autores, habremos triunfado si conseguimos que entregar software sea aburrido (común).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Automate almost everything&lt;/b&gt;&lt;br /&gt;¿Cómo conseguimos que entregar software sea aburrido? Según los autores, automatizando todo lo que podamos el proceso. Eso sí, nos avisan de que no es necesario que automaticemos todo de golpe. Podemos ser un poco más conservadores e ir resolviendo solo nuestro mayor problema.&lt;br /&gt;&lt;br /&gt;Yo estoy de acuerdo con ellos, aunque a mi me gusta hacerlo de golpe :D Cualquier proceso manual puede ser propenso a errores, por lo que prefiero minimizarlos :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Keep everything in version control&lt;/b&gt;&lt;br /&gt;Se refieren a todo, desde el código fuente, por supuesto, hasta las máquinas virtuales que utilizas para montar los entornos de test, pasando por los compiladores que necesitan para crear los entregables... &lt;br /&gt;&lt;br /&gt;En realidad, no se refieren a que lo tengas todo dentro del sistema de control de versiones, se refieren a que cada entregable y el entorno en el que se construyó debe poder ser reconstruido a partir de un número de versión. Por ejemplo, si usas maven, tener todas las librerías externas que usas anotadas con la versión, de forma que cuando reconstruyas el artefacto no uses nuevas versiones. O, si tu aplicación la van a desplegar en un Tomcat 6, tener un entorno de test asociado a la versión a reconstruir que tenga ese Tomcat 6.&lt;br /&gt;&lt;br /&gt;Todo esto me parece un autentico pasote y no se muy bien que pensar de todo ello. Veo que, algunas cosas sí que son sencillas (código fuente, librerías externas, documentación, etc) pero no tengo ni idea de como asociar hardware a versiones de artefactos. Creo que muchas del movimiento devops está relacionado con esa parte (mencionan puppet en algún lado), pero hablo desde la ignorancia :D &lt;br /&gt;&lt;br /&gt;&lt;b&gt;If it hurts, do it more frequently, and bring the pain forward&lt;/b&gt;&lt;br /&gt;La integración continua se basa en este principio. ¿Integrar el código de los desarrolladores cada semana duele? Pues hazlo cada minuto. Es curioso, porque es muy poco intuitivo, pero funciona: D ¿Por qué no aplicarlo al resto? Cada vez que tenemos que desplegar la aplicación en el entorno de pruebas las pasamos canutas. Despliégala con cada commit, verás como al final no duele.&lt;br /&gt;Es una forma de obligarnos a mejorar nuestro proceso de desarrollo.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Build quality in&lt;/b&gt;&lt;br /&gt;Este lo toman prestado de lean (pero lo dicen, ¡eh!) :D Cuando suene una alarma, actua en consecuencia. ¿Se rompe el build? La prioridad es arreglarlo. ¿La aplicación falla en producción? Volvemos a la versión anterior y arreglamos el error (Eso sí, para volver a la versión anterior de una forma fácil y rápida más nos vale haber cumplido el primer y segundo principio).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Done means released&lt;/b&gt;&lt;br /&gt;Algo terminado es algo que tiene el cliente. El resto está sin terminar. Puede parecer un poco radical, pero es cierto. La solución que plantean los autores es minimizar el tiempo que pasa entre el inicio del desarrollo y la entrega al cliente.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Everybody is responsible for the delivery process&lt;/b&gt;&lt;br /&gt;Al igual que en el Agile Testing nos dicen que las pruebas son responsabilidad de todo el equipo, aquí nos dicen que la entrega de software debe ser responsabilidad de todo el equipo también.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Continuous improvement&lt;/b&gt;&lt;br /&gt;Este también lo toman prestado de lean y, basicamente, significa que hay que reflexionar sobre lo que hacemos y mejorar :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y eso es todo. Como veis, es un libro bastante ambicioso. Estoy deseando ver como se las apañan para acercarse a estos ideales :D Un saludo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-485439296242002878?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/485439296242002878/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/principios-detras-de-continuous.html#comment-form' title='9 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/485439296242002878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/485439296242002878'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/principios-detras-de-continuous.html' title='Principios detrás de &quot;Continuous Delivery&quot;'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-2495465880306729849</id><published>2010-12-21T22:54:00.000+01:00</published><updated>2010-12-21T22:54:03.832+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Tipografía</title><content type='html'>Hace unos días, Spencer me pasó un par de enlaces sobre tipografía en la red. Aún no me los he leido enteros pero, de momento, me parecen muy interesantes :D&lt;br /&gt;&lt;br /&gt;El primero de los enlaces es "&lt;a href="http://webtypography.net/toc/"&gt;web typography&lt;/a&gt;". En esta página nos cuentan todo lo referente a tipografía en la red, desde el principio (¿qué son las em?). Todo viene muy bien explicado (yo, que no tengo ni idea de css, me estoy enterando bastante bien de todo :D ) pero, lo realmente molón, es que está viva. Cada poco sacan nuevos artículos o actualizaciones sobre los ya escritos (añadiendo algo de css3, por ejemplo). Os recomiendo que, aunque no tengáis que tocar un css en la vida, le echéis un ojo (La &lt;a href="http://webtypography.net/intro/"&gt;introducción&lt;/a&gt; es bastante chula).&lt;br /&gt;&lt;br /&gt;El segundo enlace es un articulo de &lt;a href="http://www.smashingmagazine.com/"&gt;Smashing Magazine&lt;/a&gt; en el que hablan sobre "&lt;a href="http://www.smashingmagazine.com/2010/12/14/what-font-should-i-use-five-principles-for-choosing-and-using-typefaces/"&gt;Qué fuente usar&lt;/a&gt;". No os asustéis, es bastante introductorio (explican que es eso de "serif"...).&lt;br /&gt;&lt;br /&gt;Mi única experiencia en lo referente a tipografía en la red es este blog, con eso os digo todo :P Era uno de esas cosas que no sabía que no sabía.&lt;br /&gt;Leyendo esos dos enlaces, me he dado cuenta de lo bonito e importante que es seleccionar una fuente adecuada, un espacio entre lineas cómodo, etc. Se que nunca llegue a ser un buen diseñador, tampoco es mi objetivo (me parece que no tengo demasiado buen gusto :P) pero, al menos, empiezo a entender la dificultad y esfuerzo que requiere dicho trabajo.&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;br /&gt;&lt;br /&gt;PS: Parece que el tiempo mejora y que, al final, sí que voy a poder volver a casa para la cena de nochebuena :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-2495465880306729849?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/2495465880306729849/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/tipografia.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2495465880306729849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2495465880306729849'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/tipografia.html' title='Tipografía'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1182656860006326850</id><published>2010-12-20T19:00:00.000+01:00</published><updated>2011-03-23T22:49:05.941+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous delivery'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Libros'/><title type='text'>Continuous Delivery</title><content type='html'>Aunque parezca mentira, ya casi ha pasado un mes desde que llegué a Eden. Hoy comienza mi última semana como interno y, como todos los lunes, ya tengo mi tarea semanal. Tengo que leerme el "&lt;a href="http://continuousdelivery.com/"&gt;Continuous Delivery&lt;/a&gt;" y hacer un resumen durante mi presentación :) Tenía ganas de leerlo, ahora ya tengo excusa :P&lt;br /&gt;&lt;br /&gt;Continuous delivery está escrito por &lt;a href="http://twitter.com/#!/jezhumble"&gt;Jez Humble&lt;/a&gt; y David Farley, ambos thoughtworkers, y el libro entra dentro de la serie firmada por &lt;a href="http://twitter.com/#!/martinfowler"&gt;Martin Fowler&lt;/a&gt;. Tal y como ellos cuentan al principio, el titulo lo han sacado directamente del &lt;a href="http://agilemanifesto.org/"&gt;Manifiesto Ágil&lt;/a&gt;, concretamente del &lt;a href="http://plagelao.blogspot.com/2009/11/principios-agiles-1.html"&gt;primero de sus principios&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;Our highest priority is to satisfy the customer through early and &lt;b&gt;continuous delivery&lt;/b&gt; of valuable software.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Lo primero que me ha venido a la cabeza cuando he empezado a leer el libro ha sido ¿&lt;a href="http://plagelao.blogspot.com/2010/12/por-que.html"&gt;por qué&lt;/a&gt; necesito leer este libro? Jez y David me han dado la respuesta:&lt;br /&gt;&lt;blockquote&gt;Only when you have control over the progression of every change from introduction to release can you begin to optimize and improve the quality and speed of software delivery.&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Solo cuando tengas el control sobre la progresión de cada cambio desde que lo introduces hasta que lo liberas, podrás empezar a optimizar y mejorar la calidad y velocidad de tus entregas de software&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Aunque acabo de empezarlo y aún no he podido leer mucho, la idea central del libro es lo que ellos llaman el patrón "deployment pipeline" que, tal y como lo definen, es una implementación automatizada de las fases de build, deploy, test y release de la aplicación sobre la que se trabaja, es decir, automatizar al máximo todo el proceso a partir del commit.&lt;br /&gt;&lt;br /&gt;El libro promete bastante, ya os iré contando. Un saludo.&lt;br /&gt;&lt;br /&gt;PS: Hoy es el cumpleaños de &lt;a href="http://twitter.com/#!/edentodd"&gt;Todd&lt;/a&gt;, felicitadle por twitter :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1182656860006326850?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1182656860006326850/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/continuous-delivery.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1182656860006326850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1182656860006326850'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/continuous-delivery.html' title='Continuous Delivery'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-130557733842956394</id><published>2010-12-20T01:30:00.000+01:00</published><updated>2010-12-20T01:30:45.724+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='coding kata'/><title type='text'>String calculator kata</title><content type='html'>On Friday, Aimee suggested me that, in order to improve my English, I should write some of my blog entries in that language so, every now and then, I am going to write short entries in English :D&lt;br /&gt;&lt;br /&gt;As I have told you before, I need to practice, practice and practice. The problem I have chosen to start with is the string calculator kata. For those of you who do not know this kata, it is a very simple problem. Someone gives you a string with numbers separated by a defined separator and you have to calculate the sum of that numbers. You can find the actual code-kata specification &lt;a href="http://www.osherove.com/tdd-kata-1/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is not the first time I confront this problem, I already did it some months ago in Java. Now, I am doing it in Ruby and the code I am writing is much more precise than the one in Java. Ruby classes are more friendly than the Java ones (Manipulate Strings in java is a nightmare compared with Ruby), and everything seems simpler. I am not an expert in Ruby nor in Java, but I think Ruby is a much more friendly language to work with.&lt;br /&gt;&lt;br /&gt;I will practice this kata every day until I feel ready to record a screencast so, Stay tuned!&lt;br /&gt;&lt;br /&gt;Meanwhile, here is the kata done in scheme by Enrique :D&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/8397819" width="400" height="250" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/8397819"&gt;String Calculator Kata&lt;/a&gt; from &lt;a href="http://vimeo.com/ecomba"&gt;Enrique Comba Riepenhausen&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-130557733842956394?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/130557733842956394/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/string-calculator-kata.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/130557733842956394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/130557733842956394'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/string-calculator-kata.html' title='String calculator kata'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6002109299620294998</id><published>2010-12-17T22:18:00.002+01:00</published><updated>2010-12-17T23:37:19.612+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Practicar, practicar, practicar</title><content type='html'>Imagino que todos lo tendréis claro ya, pero tengo que decirlo. Tenemos que practicar mucho.&lt;br /&gt;&lt;br /&gt;Hoy me ha tocado presentar la refactorizacion del código para internacionalizar la web. Pensaba que no estaba demasiado mal. Había partes que me gustaban más que otras pero, en general, me parecía bastante buen código... Pues, ¡sorpresa! no lo es :D Mientras explicaba lo que habíamos modificado, he ido planteando las dudas que tenía en la cabeza. Mis compañeros me han contestado, pero no de forma teórica, con las manos en la masa. Cada mejora, consejo o discusión me parecían bastante obvias, pero yo no había sido capaz de verlas antes. ¿No os ha pasado nunca? Te dicen algo y piensas, "claro, ¿cómo no se me había ocurrido nunca?&lt;br /&gt;&lt;br /&gt;Creo que, esa dificultad en descubrir el siguiente paso se debe a que no he practicado lo suficiente hasta ahora.&lt;br /&gt;&lt;br /&gt;Estoy utilizando Ruby, un lenguaje que no domino. Acabo de empezar con él y le he cogido el gusto a los yield, lo que provoca que mi código a veces sea demasiado listo y difícil de entender. Si quiero entender bien como usar Ruby, está claro lo que tengo que hacer, &lt;b&gt;practicar&lt;/b&gt; :)&lt;br /&gt;&lt;br /&gt;No tengo claro los niveles de abstracción ni los conceptos que representan, lo que me lleva a mezclarlos. Tengo que &lt;b&gt;practicar&lt;/b&gt; con problemas simples y pensar muy bien lo que hago. Necesito aclararme la cabeza y, espero, poco a poco todo irá saliendo más natural.&lt;br /&gt;&lt;br /&gt;Dado que no manejo bien el lenguaje y no termino de definir las abstracciones, es imposible que un diseño decente emerja... Igual que antes, tengo que &lt;b&gt;practicar&lt;/b&gt; mucho para que todo fluya.&lt;br /&gt;&lt;br /&gt;Siento que esta entrada sea tan cortita y ligera, pero tengo que irme a practicar :D&lt;br /&gt;&lt;br /&gt;Un saludo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6002109299620294998?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6002109299620294998/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/practicar-practicar-practicar.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6002109299620294998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6002109299620294998'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/practicar-practicar-practicar.html' title='Practicar, practicar, practicar'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-2370144864532044357</id><published>2010-12-16T23:51:00.000+01:00</published><updated>2010-12-16T23:51:37.371+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>¿Por qué?</title><content type='html'>Tenía pensado contar algo sobre como hemos puesto en producción la página internacionalizada de &lt;a href="http://www.edendevelopment.es"&gt;Eden Development&lt;/a&gt;, pero he cambiado de idea después de la reunión del grupo de &lt;a href="http://sites.google.com/site/agilemadrid/"&gt;MadriAgil&lt;/a&gt; :D El tema de la reunión ha sido BDD, pero lo que yo me he llevado de ella es la importancia que tiene preguntar por qué.&lt;br /&gt;&lt;br /&gt;Si os acordais, cuando escribí sobre los &lt;a href="http://plagelao.blogspot.com/2010/12/los-valores-de-eden.html"&gt;valores de Eden&lt;/a&gt; mencionaba este:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;We ask "why?"&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Preguntamos "¿por qué?"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Hoy, Enrique nos ha demostrado a todos los del grupo de Madrid la importancia que tiene para ellos preguntar por qué. Creo que nos a convencido a todos :P&lt;br /&gt;&lt;br /&gt;Es muy importante cuestionar las motivaciones de los clientes. Obligarles a pensar en su problema, no solo en la solución. De hecho, esto es tan importante para Eden que se tiran 2 días enteros buscando respuestas a los por qué que plantean.&lt;br /&gt;&lt;br /&gt;Sin embargo, lo que más me interesa a mi en este momento (intentando convertirme en aprendiz :P) es la parte en la que te cuestionas a ti mismo. Ahí van algunos ejemplos en distintos ámbitos:&lt;br /&gt;&lt;br /&gt;¿Por qué he creado esta clase?&lt;br /&gt;¿Por qué le he puesto ese nombre a esta variable?&lt;br /&gt;¿Por qué mi código se entiende?&lt;br /&gt;¿Por qué no entiendo SOLID? &lt;br /&gt;&lt;br /&gt;¿Por qué me pongo tan nervioso cuando hablo en público?&lt;br /&gt;&lt;br /&gt;¿Por qué no quiero ir a trabajar?&lt;br /&gt;&lt;br /&gt;¿Por qué no soy feliz?&lt;br /&gt;¿Por qué soy feliz?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Como veis, no todos los por qué tienen que llevarnos a malas conclusiones :D &lt;br /&gt;Os dejo con esas preguntas (las que apliquen), pero sobre todo, con la idea de cuestionarnos tanto a nosotros mismos como a los demás, se aprende mucho :)&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-2370144864532044357?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/2370144864532044357/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/por-que.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2370144864532044357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2370144864532044357'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/por-que.html' title='¿Por qué?'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-5188896430020971730</id><published>2010-12-15T20:10:00.000+01:00</published><updated>2010-12-15T20:10:52.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño simple'/><title type='text'>Diseño Simple</title><content type='html'>Hoy no he podido hacer pair programming con ningún "edenite" :( Los que no estaban en proyectos, estaban liándola parda organizando cosillas para Madrid :) Preparaos para la que se nos viene encima :D Ya se están empezando a mover cosas y nos vamos a divertir mucho :D Si queréis estar informados de todo lo que se organice para Eden Madrid debéis seguir &lt;a href="http://twitter.com/#!/edenmadrid"&gt;esta cuenta de twitter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pero a lo que iba, que me desvío :P Hoy me ha tocado enfrentarme a mi código solo (aunque Chris me ha ayudado con una cosilla que se me resistía :D ) y me ha surgido una duda que, creo :P,  las 4 reglas del diseño simple han conseguido aclarar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Las 4 reglas del diseño simple&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Runs all the tests.&lt;/li&gt;&lt;li&gt;Expresses every idea that we need to express.&lt;/li&gt;&lt;li&gt;Says everything OnceAndOnlyOnce.&lt;/li&gt;&lt;li&gt;Has no superfluous parts.&lt;/li&gt;&lt;/ol&gt;&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;ol&gt;&lt;li&gt;Pasan todos los tests.&lt;/li&gt;&lt;li&gt;Expresa cada idea que necesitamos expresar.&lt;/li&gt;&lt;li&gt;Dice lo que dice una única vez.&lt;/li&gt;&lt;li&gt;No tiene partes superfluas.&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;br /&gt;El orden de las reglas define su importancia, por lo que, si dos reglas entran en conflicto, debemos quedarnos con la primera de las dos. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;El problema&lt;/b&gt;&lt;br /&gt;Tengo una clase que debe dar de alta en el entorno un par de variables. Ambas variables dependen de si existe una cookie con el idioma en dicho entorno, por lo que el mismo &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if&lt;/span&gt; puede valernos para dar de alta las dos variables, tal que así:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/742415.js?file=middleware.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Sin embargo, el &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;set_variables(env)&lt;/span&gt; del primer método no me parece lo suficientemente expresivo, así que lo he cambiado por esto:&lt;br /&gt; &lt;br /&gt;&lt;script src="https://gist.github.com/742416.js?file=middleware.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Está claro que, en este último caso, tenemos duplicación (Nos cargamos la tercera regla), pero aumenta la legibilidad (la segunda regla). He estado dudando si dejar la duplicación o eliminarla y, al final, he decidido que me gustaba más la legibilidad del segundo caso. No estoy seguro de si es lo correcto, veremos mañana cuando programe con un "edenite" al lado :D A vosotros, ¿qué os parece?&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;br /&gt;&lt;br /&gt;PD: Spencer me ha pasado hoy &lt;a href="http://webtypography.net/"&gt;este enlace sobre tipografía en la web&lt;/a&gt;. No lo he podido leer todavía, pero parece muy molón :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-5188896430020971730?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/5188896430020971730/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/diseno-simple.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5188896430020971730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5188896430020971730'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/diseno-simple.html' title='Diseño Simple'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-3733146427282131832</id><published>2010-12-14T20:32:00.002+01:00</published><updated>2010-12-15T10:27:07.482+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='pair programming'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Código expresivo</title><content type='html'>Como os conté ayer, he comenzado un nuevo show que me gusta llamar "limpiemos el código que he creado". El invitado especial de hoy ha sido &lt;a href="http://twitter.com/#!/ecomba"&gt;Enrique Comba&lt;/a&gt;, y tengo que decir que &lt;a href="http://twitter.com/#!/sermoa"&gt;Aimee&lt;/a&gt; es una gran profesora :D Bueeeno, Enrique también es buen profe :P Ahora en serio, he estado programando todo le día con Enrique y me lo he pasado muy bien :D ¡Muchas gracias, Enrique!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Código expresivo&lt;/b&gt;&lt;br /&gt;Lo que más me ha gustado de programar con Enrique es la importancia que le da a que el código sea expresivo. Hemos pasado mucho tiempo buscando buenos nombres y preguntándonos como conseguir que el código hablara por si mismo. Todo ese pensar, que muchas veces yo no hago :P, nos ha llevado a un código mucho más simple y entendible que el que había. No hemos conseguido terminar de limpiar, pero hemos avanzado bastante :D&lt;br /&gt;&lt;br /&gt;Aunque siempre intento buscar nombres correctos cuando programo, hoy me he dado cuenta que soy muy vago. De hecho, comparado con Enrique, prácticamente no uso mi cerebro para pensar en el naming o para darle vueltas al código, de forma que sea más expresivo. Ojo, yo pensaba que sí que tenía cuidado, pero me he dado cuenta de que necesito ser mucho más responsable y tener mucha más autodisciplina. Para mi, no es fácil "perder" tanto tiempo intentando hacer que mi código sea lo más expresivo posible. Hoy creo que he aprendido a calmarme y a pensar bien lo que hago, aunque está claro que necesito practicar mucho.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pequeños éxitos&lt;/b&gt;&lt;br /&gt;Si aún no habéis programado con Enrique, os tengo que decir que es muy divertido (es un poco ganso :P ). A parte de lo mucho que sabe (he aprendido mucho sobre como refactorizar y un poco más de vi), siempre que limpiábamos algo un poco más complejo y conseguíamos que todos los tests estuvieran en verde, lo celebrábamos con un "high five" :) Parece una tontería, pero esas celebraciones son un reconocimiento al trabajo bien hecho y motivan para afrontar el siguiente cambio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pair programming&lt;/b&gt;&lt;br /&gt;No es fácil hacer código que entienda mucha gente si solo trabajas tú en él. Hoy me he dado cuenta de lo importante que es tener a alguien al lado que lea lo que escribes y opine sobre ello. No he hecho mucho pair programming, por lo que no puedo comparar, pero el de hoy me ha parecido muy comunicativo. Ambas partes opinábamos sobre el código (aunque yo aveces no sabía como mejorarlo o como expresar lo que quería hacer :P) y lo íbamos "enriqueciendo", haciendolo más simple y más comunicativo. Creo que esa comunicación (feedback instantáneo sobre el código que escribes) es una de las mayores ventajas del pair programming.&lt;br /&gt;Además, mientras haces pair programming es más complicado que vaguees a la hora de limpiar el código. La otra persona te puede dar un capón y ponerte en tu sitio :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cucumber&lt;/b&gt;&lt;br /&gt;Respecto a los escenarios de cucumber, hemos dejado de hablar de locales y, como decía &lt;a href="http://twitter.com/#!/calavera"&gt;calavera&lt;/a&gt; en los comentarios de la anterior entrada, lo hemos cambiado por idiomas. Creo que la especificación de la funcionalidad ha quedado algo más clara, aunque puede que cuando la vuelva a leer se me ocurra otro cambio :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Otras cosas&lt;/b&gt;&lt;br /&gt;A parte de pasar el día programando con Enrique, que ya mola un montón, Aimee no ha dado una charla sobre como ha integrado &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt; en su &lt;a href="http://merlin.heroku.com/"&gt;Merlin's castle&lt;/a&gt; :D ¿Cuanto mola eso? No se, creo que casi infinito. Tener unos compañeros así creo que no tiene precio :D&lt;br /&gt;&lt;br /&gt;Oops, dinner's ready! Un saludo.&lt;br /&gt;&lt;br /&gt;Actualizado: La charla sobre MongoDB la podéis ver &lt;a href="http://vimeo.com/17815778"&gt;aquí&lt;/a&gt;. ¡Muchas gracias por compartirla, Aimee!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-3733146427282131832?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/3733146427282131832/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/codigo-expresivo.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3733146427282131832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3733146427282131832'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/codigo-expresivo.html' title='Código expresivo'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-3257246881162711726</id><published>2010-12-13T20:49:00.000+01:00</published><updated>2010-12-13T20:49:50.147+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='rack'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='cucumber'/><title type='text'>Limpiando la casa</title><content type='html'>Como ya os dije, el viernes pasado hice la exposición de la &lt;a href="http://edendevelopment.co.uk"&gt;web de Eden&lt;/a&gt; en español :) Durante la presentación del código, los edenites me apuntaron unas cuantas cosas a mejorar. Debía estudiar algunas tecnologías más en profundidad y tenía que intentar conseguir que mi código se explicara solo. Durante este fin de semana he estado estudiando un poco y hoy, con la ayuda de &lt;a href="http://twitter.com/#!/sermoa"&gt;Aimee&lt;/a&gt;, hemos empezado a limpiar el código. Me lo he pasado muy bien con ella y he aprendido mucho. Se nota que es muy buena profesora :) Me ha hecho comprender mejor &lt;a href="http://cukes.info/"&gt;cucumber&lt;/a&gt; y la importancia de expresarse correctamente en el código. Cada paso que dábamos parecía obvio, pero ya os digo yo que no lo era (de hecho, la semana pasada no veía el problema tan claro :P ) y los buenos nombres aparecían prácticamente solos.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cucumber&lt;/b&gt;&lt;br /&gt;Hemos empezado creando los escenarios que me faltaban para completar la descripción de la funcionalidad. Realmente, viéndolo ahora mismo, creo que fui muy vago. Con deciros que yo tenía 4 escenarios y ahora estamos en 10... Hemos ido creando cada escenario (y haciéndolo funcionar) de forma que, al final, tuviéramos una buena descripción de como funciona la selección de idioma en la página.&lt;br /&gt;&lt;br /&gt;Además, los escenarios han ganado en expresividad y robustez. Los que yo hice tenían elementos de la vista "a la vista", lo que los hacía muy frágiles, y no hablaban de la abstracción correcta. Os pongo un ejemplo del antes y el ahora:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/739414.js?file=locale.feature"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Hemos abandonado los detalles de la vista ("software que amarás") y hablamos de localizaciones en lugar de idiomas. &lt;br /&gt;&lt;br /&gt;Mientras escribía el gist para el ejemplo se me ha ocurrido que aún no está del todo claro. He añadido un posible escenario algo más coherente con el naming ¿Qué os parece?&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/739472.js?file=locale.feature"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Hemos dejado de hablar de cookies porque no es interesante para el usuario. Lo que aún no tengo claro es si prefiero locale o idioma... Desde el punto de vista del cliente, lo que quiere es la página en varios idiomas. Mañana lo hablaré con los edenites ¿Vosotros que opinais?&lt;br /&gt;&lt;br /&gt;Lo que sí que he sacado en claro hoy sobre cucumber, es que hay que intentar explicar la funcionalidad desde el punto de vista del cliente (de ahí que los escenarios los escriban los clientes :P ). No nos interesa mostrar detalles de implementación. Esto es fácil decirlo, pero, al menos para mi, no es fácil de hacer. Siempre se me cuela algún detalle de implementación...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rack middleware&lt;/b&gt;&lt;br /&gt;Además de añadir escenarios de cucumber, aunque la experiencia de usuario sigue siendo idéntica, hemos modificado todo el código responsable de la selección del idioma.&lt;br /&gt;&lt;br /&gt;Lo que yo hice la semana pasada era seleccionar el idioma en el mismo método que me devolvía la página, provocando que el servicio web tuviera más de una responsabilidad. &lt;a href="http://twitter.com/#!/tooky"&gt;Steve&lt;/a&gt; me lo apuntó en la demo y me dijo que mirara los &lt;a href="http://decodeuri.com/2008/10/15/creating-a-http://decodeuri.com/2008/10/15/creating-a-rack-middleware-for-minifying-your-javascript-files/"&gt;middleware de rack&lt;/a&gt; porque podían ser una solución al problema.&lt;br /&gt;&lt;br /&gt;Basicamente, un middleware de rack filtra las llamadas a nuestra aplicación. En nuestro caso, lo vamos a utilizar para obtener el lenguaje preferido por el usuario y para establecer una cookie  que recuerde dicho lenguaje. Esto permitirá que nuestro servicio web se desentienda de la selección del lenguaje, delegando dicha responsabilidad en el middleware.&lt;br /&gt;&lt;br /&gt;No nos ha dado tiempo a dejarlo limpio del todo, pero ha mejorado bastante :D Estoy deseando que llegue mañana para dejarlo mejor :) ¡A ver si podemos ponerlo en producción pronto!&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-3257246881162711726?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/3257246881162711726/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/limpiando-la-casa.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3257246881162711726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3257246881162711726'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/limpiando-la-casa.html' title='Limpiando la casa'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1865967050635044764</id><published>2010-12-12T22:03:00.000+01:00</published><updated>2010-12-12T22:03:14.895+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Dos semanas en Eden</title><content type='html'>Llevo un par de semanas en Winchester y me lo estoy pasando muy bien :D Es muy divertido ver como funciona Eden, todos los días estoy aprendiendo cosas nuevas y, por si fuera poco, estoy conociendo a mucha gente que merece la pena :D&lt;br /&gt;&lt;br /&gt;Aunque el viernes me pudisteis preguntar todo lo que quisisteis en la &lt;a href="http://plagelao.blogspot.com/2010/12/plagentrevista.html"&gt;#plagentrevista&lt;/a&gt;, tengo ganas de hacer una reflexión propia :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aspecto personal&lt;/b&gt;&lt;br /&gt;Cuando surgió la oportunidad de venirme, no lo dudé. Tenía claro que no podía desaprovechar la ocasión. Aún así, no podía evitar ponerme nervioso. Otro país, otro idioma, un entorno desconocido, etc. Todas esas dudas desaparecieron el primer lunes :) Está siendo una experiencia espectacular :)&lt;br /&gt;&lt;br /&gt;Una de las cosas que más me gusta de Eden es que se respira respeto por los demás y positivismo (palabro que no se si existe). Es algo que ayuda mucho a generar un entorno muy agradable y muy acogedor. Personalmente, quiero tratar así con la gente en mi vida normal, y estoy intentando forzar ese cambio. No es fácil, ya os lo digo. Evitar, por ejemplo, los típicos chascarrillos o bromas en plan "mira que eres paquete" (que es un desprecio hacia la otra persona), o intentar no buscar culpables (en la entrevista por ejemplo se me escapa un "no es culpa mía"...), es complicado porque es algo que tengo bastante interiorizado :P Aún así, se que tengo que cambiarlo y lo estoy intentando (el primer paso está dado).&lt;br /&gt;&lt;br /&gt;Algo que, en ocasiones, es más difícil de manejar, es lo mucho que me queda por aprender. &lt;a href="http://twitter.com/#!/rlaina"&gt;Raquel&lt;/a&gt; me lo preguntaba en la entrevista. ¿Cómo llevas lo de que te falte tanto por aprender sin agobiarte? La única respuesta que tengo es otra pregunta ¿Tengo alguna otra opción? Tenemos que hacernos a la idea de que vamos a estar toda la vida aprendiendo. ¿Nos queda mucho? Sí. Siempre nos va a quedar mucho. ¿Nos agobiamos? No. Eso no arregla nada. En lugar de agobiarte, practica :P Es parte del pensamiento positivo que, a partir de ahora, quiero tener :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aspecto técnico&lt;/b&gt;&lt;br /&gt;De todo lo que estoy aprendiendo, sobresale sin ninguna duda la importancia que tiene que &lt;b&gt;el código sea expresivo&lt;/b&gt;. Me gustó mucho algo que me dijo &lt;a href="http://twitter.com/#!/ecomba"&gt;Enrique&lt;/a&gt; en la exposición del código de internacionalización de la página web. &lt;a href="http://twitter.com/#!/chrismdp"&gt;Chris&lt;/a&gt; me preguntó qué sería necesario modificar si quisieran añadir un tercer idioma. Yo conteste que, además de cambiar la experiencia de usuario, habría que tocar el código aqui y allá (resaltando el pobre diseño de mi código). Entonces, Enrique me dijo que era importante escribir el código lo más expresivo posible, de forma que no se tardara mucho en modificarlo para añadir un tercer idioma, permitiendo dedicar mucho más tiempo al problema importante, que en este caso es diseñar una buena experiencia de usuario.&lt;br /&gt;&lt;br /&gt;Respecto a Ruby, nunca lo había utilizado "en serio" y tengo que decir que me está gustando mucho. Me parece un lenguaje muy expresivo y divertido. Aún me queda mucho por aprender, pero se que necesito dominar las colecciones. Muchas veces me lío por no conocer bien como funciona el Hash o el Array... Tendré que escribir alguna entrada sobre las cositas que voy aprendiendo. De momento, a parte de aprender el lenguaje, he utilizado &lt;a href="http://cukes.info/"&gt;Cucumber&lt;/a&gt;, &lt;a href="http://rspec.info/"&gt;RSpec&lt;/a&gt;, &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt;, &lt;a href="http://rack.rubyforge.org/"&gt;Rack&lt;/a&gt;, &lt;a href="http://gembundler.com/"&gt;Bundler&lt;/a&gt; y &lt;a href="http://rvm.beginrescueend.com/"&gt;rvm&lt;/a&gt;. Echadle un vistazo a todo eso porque realmente es impresionante. Sinatra es un alucine, Rack es la leche, bundler es super simple y RSpec y Cucumber molan mogollón. Si os apetece que escriba sobre algo en especial no tenéis más que decirmelo :)&lt;br /&gt;&lt;br /&gt;Fuera del lenguaje en si, estoy aprendiendo a utilizar &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; de un modo más serio, aunque todavía en modo novato. Me está gustando bastante, la verdad, aunque ya os digo que todavía estoy empezando. Casi todo lo que hago lo subo a github (que me parece un flipe), por si os interesa cotillear :P&lt;br /&gt;&lt;br /&gt;El viernes, Chris me enseñó lo fácil que es usar &lt;a href="http://heroku.com/"&gt;heroku&lt;/a&gt; y lo bien que se han montado el negocio :) Este fin de semana he estado trasteando un poco y he conseguido desplegar mi primera aplicación "Hola mundo" (que no hace nada, así que ni la enlazo :P ).&lt;br /&gt;También me contó algo del servicio de &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EEC2&lt;/a&gt;, pero eso lo tengo muy verde. Espero que tenga tiempo para contarme algo más porque el proyecto que está haciendo me parece super interesante :D&lt;br /&gt;&lt;br /&gt;Y no me podía olvidar de el &lt;a href="http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html"&gt;vi&lt;/a&gt; (vim, macvim, etc). Está siendo todo un descubrimiento. No digo que sea intuitivo ni fácil, pero si consigues dominarlo, no creo que haya nada más productivo (y ligero). Como ya os dije, la curva de aprendizaje no es una curva, es una pared, pero eso solo implica practicar más. Se que no os voy a convencer de lo bueno que es (tampoco es mi objetivo), pero un día lo dominaré y entonces podré demostrároslo :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Libros...&lt;/b&gt;&lt;br /&gt;Ahora mismo tengo una pila de libros importante para leer. Por si os interesa, estoy con el "&lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215"&gt;DDD&lt;/a&gt;", que me lo traje de España, con el "&lt;a href="http://www.amazon.com/Timeless-Way-Building-Christopher-Alexander/dp/0195024028"&gt;The timeless way of building&lt;/a&gt;" y con el "&lt;a href="http://mitpress.mit.edu/sicp/full-text/book/book.html"&gt;Structure and Interpretation of Computer Programs&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;La guinda&lt;/b&gt;&lt;br /&gt;Hoy, domingo, Enrique y yo nos hemos ido a Heathrow a comer con &lt;a href="http://twitter.com/#!/sarah11918"&gt;Sarah&lt;/a&gt; y &lt;a href="http://twitter.com/#!/jbrains"&gt;J.B. Rainsberger&lt;/a&gt;. ¡Son muy simpáticos y divertidos! :D &lt;br /&gt;La excusa de la comida era fijar la fecha para unos cursos en España pero, en realidad, ha sido más una comida entre amigos. Se ha hablado de todo menos de software :) Respecto a los cursos, deciros que parece ser que algo se hará, aunque todavía no tengo muy claro el qué (No por culpa del inglés, que conste :P Es que Enrique y J.B. parece ser que tienen un código secreto o algo así :P).&lt;br /&gt;&lt;br /&gt;Resumiendo, me lo estoy pasando pipa y soy un programador feliz :D &lt;br /&gt;Eso es todo, un saludo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1865967050635044764?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1865967050635044764/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/dos-semanas-en-eden.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1865967050635044764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1865967050635044764'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/dos-semanas-en-eden.html' title='Dos semanas en Eden'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-8734437392831803308</id><published>2010-12-10T22:07:00.001+01:00</published><updated>2010-12-11T01:01:25.537+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Plagentrevista</title><content type='html'>Para los que no lo sepáis, Enrique y yo hemos hecho una &lt;a href="http://es-es.justin.tv/edendevelopment/b/275460382"&gt;"entrevista" a través de justin.tv&lt;/a&gt; en la que la gente que se conectaba nos ha hecho preguntas sobre Eden. Ha quedado un poco larga pero creo que tiene partes muy molonas :) Os voy a destacar un poco algunos momentos por si no os apetece verla entera :P&lt;br /&gt;&lt;br /&gt;- Minuto 5 - Empezamos :) Antes de eso podéis verme haciendo un poco el ganso, pero no aporta mucho más :P&lt;br /&gt;&lt;br /&gt;- Minuto 12:30 - ¿Por qué Eden en UK y no en España?&lt;br /&gt;&lt;br /&gt;- Minuto 16 - Germán pregunta cómo hacen en Eden cuando detectan algo que va mal.&lt;br /&gt;&lt;br /&gt;- Minuto 25 - Kini me pregunta cómo hacen programación por parejas en Eden.&lt;br /&gt;&lt;br /&gt;- Minuto 29 - Raquel pregunta si los clientes de Eden están ya educados cuando llegan a Eden o si, por el contrario, hay que educarles.&lt;br /&gt;&lt;br /&gt;- Minuto 35:40 - Raquel vuelve a la carga preguntando sobre la documentación que les exigen los clientes.&lt;br /&gt;&lt;br /&gt;- Minuto 37 - De nuevo, Raquel nos pregunta sobre la asignación de personas a proyectos ¿Fijas? ¿rotan? ¿cada cuanto?&lt;br /&gt;&lt;br /&gt;- Minuto 44 - Si queréis saber que tal va la página en español de Eden este es vuestro minuto :)&lt;br /&gt;&lt;br /&gt;- Minuto 55:30 - Kini pregunta por los radiadores de información en Eden.&lt;br /&gt;&lt;br /&gt;- Minuto 1:08:30 - ¿Eden desarrolla producto o solo proyecto?&lt;br /&gt;&lt;br /&gt;- Minuto 1:17:45 - Jesús no se fía del vi como editor :P&lt;br /&gt;&lt;br /&gt;- Minuto 1:18:45 - ¿Por qué Ruby?&lt;br /&gt;&lt;br /&gt;- Minuto 1:20:30 - Steve aparece como invitado sorpresa :)&lt;br /&gt;&lt;br /&gt;- Minuto 1:39:00 - Tour por Eden :) ¡No os lo podéis perder!&lt;br /&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" height="300" width="400" id="clip_embed_player_flash" data="http://www.justin.tv/widgets/archive_embed_player.swf" bgcolor="#000000"&gt;&lt;param name="movie" value="http://www.justin.tv/widgets/archive_embed_player.swf" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="allowNetworking" value="all" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="flashvars" value="auto_play=false&amp;start_volume=25&amp;title=Alberto Peña\'s Internship at Eden Development Q&amp;A&amp;channel=edendevelopment&amp;archive_id=275460382" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://www.justin.tv/edendevelopment#r=-rid-&amp;s=em" class="trk" style="padding:2px 0px 4px; display:block; width: 320px; font-weight:normal; font-size:10px; text-decoration:underline; text-align:center;"&gt;Watch live video from edendevelopment on Justin.tv&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y eso es todo :D Siento no haber escrito mucho hoy, pero creo que con la entrevista tenéis un rato para entreteneros :P Este fin de semana escribiré un mini resumen semanal o algo así :D&lt;br /&gt;&lt;br /&gt;Un saludo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-8734437392831803308?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/8734437392831803308/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/plagentrevista.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8734437392831803308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8734437392831803308'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/plagentrevista.html' title='Plagentrevista'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6045762782494763173</id><published>2010-12-09T22:41:00.000+01:00</published><updated>2010-12-09T22:41:23.748+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Productividad</title><content type='html'>Aunque alguna vez ya os lo he contado, es alucinante lo que son capaces de producir en Eden. Una de las razones principales de su alta productividad es que son muy buenos, pero también es importante como funcionan como empresa en las tareas que no tienen nada que ver con tirar código (y derivados). &lt;br /&gt;Dentro de ese grupo de tareas, me gusta como manejan el tema de las reuniones, así que os voy a hablar un poco sobre como las hacen y como no las hacen :P&lt;br /&gt;&lt;br /&gt;En Eden les gusta más hacer cosas que hablar de si quieren hacer cosas, por lo que las reuniones, &lt;b&gt;cuantas menos, mejor y, cuanto más cortas, mejor&lt;/b&gt;.&lt;br /&gt;Como todas las cosas que ocurren en Eden, parece de sentido común, pero ¿cuantas veces os ha pasado eso de ir a una reunión a la que falta un asistente y habéis tenido que esperar a que llegue? o ¿cuantas veces os habéis ido por las ramas durante una planificación? Eso, en Eden no pasa. Si alguien no está para una reunión, se aplaza o se hace sin él. Si alguien se va por las ramas con algún tema, se le pide que lo discuta en otro momento. Tienen muy claro que una reunión es una perdida de tiempo y dinero y &lt;b&gt;actúan en consecuencia&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Siempre que tiene que haber una reunión (una retrospectiva, una reunión de empresa como en la que se discutió sobre Eden Madrid, un grupo de estudio, la reunión diaria, etc) aparece la figura del facilitador, que enfoca la reunión y cuida de que ésta sea lo más productiva posible. Pero cuidado, no es que alguien diga: "Tú, facilita la reunión". Es algo más espontaneo. Simplemente, alguien toma la iniciativa.&lt;br /&gt;Una cosa que me llama mucho la atención es que se pide turno de palabra levantando la mano. Aunque alguna vez se pisan (no son perfectos :P), intentan respetarlo al máximo, y siempre se piden disculpas si se saltan la norma. Ese ambiente de respeto suele hacer que sean reuniones bastante constructivas. &lt;br /&gt;&lt;br /&gt;Otro punto importante es que las reuniones con los clientes no existen. El cliente siempre está ahí para conversar con él cuando es necesario (que es bastante a menudo). Es como si se hiciera una planificación continua, que no notas, pero que es muy eficaz.&lt;br /&gt;&lt;br /&gt;Me parece que es una empresa muy madura y muy consciente del valor de su tiempo.&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;br /&gt;&lt;br /&gt;PD: Mañana por la mañana es la presentación de la web :) No se si nos dará tiempo a ponerla en el servidor porque tenemos la comida de navidad (y porque quizás surja alguna idea interesante durante la exposición que involucre cambios), pero haremos lo posible :P&lt;br /&gt;&lt;br /&gt;PD-2: Cada vez que escribo en el blog intento borrar lineas escritas pulsando "dd" :P Creo que estoy infectado :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6045762782494763173?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6045762782494763173/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/productividad.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6045762782494763173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6045762782494763173'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/productividad.html' title='Productividad'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-2393881188539278176</id><published>2010-12-08T20:21:00.000+01:00</published><updated>2010-12-08T20:21:36.820+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>User Experience</title><content type='html'>Como ya sabéis, mi tarea semanal es traducir la &lt;a href="http://edendevelopment.co.uk/"&gt;web de Eden Development&lt;/a&gt; al Español. Aunque no esta siendo una tarea muy complicada, me está causando muchas más dificultades que el &lt;a href="https://github.com/plagelao/PlageServer"&gt;PlageServer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dificultades técnicas&lt;/b&gt;&lt;br /&gt;A nivel técnico es una tarea muy sencilla. Los problemas que surgen en esta fase son , principalmente, culpa mía.&lt;br /&gt;Para empezar, mi desconocimiento de Ruby hace que haga las cosas de una manera algo rebuscada, dejando un código no muy legible. Tengo que investigar más antes de lanzarme a tirar código. Soy demasiado impaciente.&lt;br /&gt;Por si eso fuera poco, se me ha ido la cabeza y me he complicado la vida mucho más de lo que era necesario :S Menos mal que Enrique me ha encauzado y he vuelto a enfocarme en la tarea principal.&lt;br /&gt;Aunque estoy aprendiendo mucho, aún caigo en los mismos errores del pasado. Como ya os he comentado en alguna ocasión, a veces se me va el desarrollo de las manos por no pensar bien en lo que estoy haciendo :(&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Problemas en la experiencia de usuario&lt;/b&gt;&lt;br /&gt;Pero sin duda, las dificultades más grandes están surgiendo a la hora de diseñar una buena experiencia de usuario.&lt;br /&gt;He estado con Spencer un rato viéndole diseñar la modificación de la página mientras pensábamos en el problema :) Ha sido brutal. De hecho, todos los de Eden son brutales. Es espectacular verlos manejar el código con el Vim, casi no me da tiempo a ver las modificaciones que hacen en el código. Nunca había visto programar tan rápido y, a la vez, de forma tan precisa. Están a años luz. De momento, a mi ya me han convencido.  Hay que dejar de usar IDEs y pasarse a Vim o similares. Cuesta entrar, pero merece la pena (aunque yo soy un paquete aún).&lt;br /&gt;&lt;br /&gt;La duda más importante que nos ha surgido es si queremos que un usuario con el Español como idioma de preferencia sea redirigido directamente a la página en Español o, si por el contrario, es mejor presentarle la página en Inglés y darle la opción de cambiar la página a Español.&lt;br /&gt;Si elegimos la opción en la que el usuario debe seleccionar en que idioma quiere la página, la siguiente duda es si debemos recordar su selección (con una cookie) y no volver a preguntarle. Si hacemos esto, solo se podrá cambiar el idioma una vez la cookie sea eliminada. ¿Deberíamos tener una opción para cambiar el idioma cuando quiera el usuario? Entonces, ¿para qué darle la posibilidad de elegir al principio?&lt;br /&gt;Espero vuestras sugerencias :P&lt;br /&gt;&lt;br /&gt;Nunca antes me había tenido que enfrentar a este tipo de cuestiones (al menos no tan "a fondo") y por eso me cuesta pensar en una buena solución. Me gusta como lo hace github (te presenta la página en inglés y te dice que la página está disponible en español en un mini-banner. Luego tiene también una opción para cambiar el idioma que seleccionaste en su momento), pero parece que a Spencer no le ha convencido para este caso :)&lt;br /&gt;&lt;br /&gt;Mañana tocará definir bien lo que vamos a hacer y terminar la tarea (mejorar un poco la traducción y añadir algún test de cucumber, que lo he dejado para el final porque soy un paquete...). Enrique quería que hiciera la presentación mañana, pero no se si me va a dar tiempo :S Ya os contaré.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-2393881188539278176?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/2393881188539278176/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/user-experience.html#comment-form' title='8 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2393881188539278176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2393881188539278176'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/user-experience.html' title='User Experience'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6746745396900016990</id><published>2010-12-07T19:35:00.000+01:00</published><updated>2010-12-07T19:35:09.170+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hammock driven development'/><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Hammock Driven Development</title><content type='html'>Ya os conté que una de las cosas que más me han gustado de Eden (y que más sencillas me parecen) es la parte de la reunión diaria en la que se habla de las cosas interesantes que ha descubierto la gente. Hoy, Steve nos ha contado lo interesante que le había parecido &lt;a href="http://java.dzone.com/videos/hammock-driven-development"&gt;esta charla&lt;/a&gt;. Nos ha convencido de que merecía la pena verla y hemos quedado en proyectarla a la hora de la comida.&lt;br /&gt;&lt;br /&gt;No es una charla técnica, es más bien "filosófica", así que no tenéis excusa para no verla :P&lt;br /&gt;&lt;br /&gt;De todas formas, como tengo que escribir algo :P, voy a explicar algunos de los puntos que he sacado en claro tras la discusión que hemos tenido en Eden después de verla.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hammock driven development&lt;/b&gt;&lt;br /&gt;Básicamente, la idea central de la charla es como mejorar nuestra habilidad para resolver problemas. Hay una transparencia muy aclarativa en la que &lt;a href="http://twitter.com/#!/richhickey"&gt;Rich Hickey&lt;/a&gt;, el creador de Clojure, nos recuerda que, si no estamos resolviendo un problema, para que demonios estamos trabajando (dentro del contexto del software). Además, se centra mucho en la importancia de entender el problema de forma global, no solo en el ámbito técnico. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pensar y reflexionar sobre el problema&lt;/b&gt;&lt;br /&gt;Nada más empezar, Rich nos hace una pregunta &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;¿Cuanto hace que no piensas en un problema durante toda una hora? ¿Durante todo un día? ¿y durante un año? &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;No se vosotros, pero yo no me paro a pensar "demasiado" en el problema ni en su por qué. Intento buscar una solución lo antes posible. Esta charla me ha recordado que lo importante no es la solución, es entender el por qué (a lo mejor no hace que busques una solución porque realmente no existe un problema). Me lo apunto como "a mejorar" :)&lt;br /&gt;&lt;br /&gt;Además, ese pensar en el problema va a hacer posible que tu cerebro asimile que es importante y trabajará en "background" en ello.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿El cerebro trabajando en background?&lt;/b&gt;&lt;br /&gt;A lo que se refiere el autor con esto es al trabajo que realiza tu subconsciente mientras, por ejemplo, duermes (De ahí lo de hammock driven development, que es algo así como desarrollo dirigido por hamaca :D )&lt;br /&gt;Rich deja claro que la charla no es un estudio científico ni nada de eso, así que no os lancéis como leones :P pero, ¿Nunca os ha pasado eso de encontrar la solución mientras dormías?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enfocarse en profundidad en el problema&lt;/b&gt;&lt;br /&gt;Esto implica pensar en el problema sin distracciones (nada de twitter, mail, teléfono, etc), es decir, hay que separarse del ordenador (suena duro, ¿no?). Para nosotros, los ordenadores son nuestra herramienta preferida para la procrastinación y el desenfoque, así que, en los momentos en los que se está enfocado en el problema, hay que intentar dejarlos a un lado.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Anotarlo todo&lt;/b&gt;&lt;br /&gt;Personalmente, una de las cosas que más me ha chocado de la charla es que hace mucho hincapié en anotar todo lo que vamos descubriendo del problema. La razón principal es para no olvidar los detalles que ya se han descubierto. No se mete en como tienes que escribirlo, simplemente te aconseja que lo anotes.&lt;br /&gt;&lt;br /&gt;No dejéis de ver la charla, es mucho mejor que mis notas :D&lt;br /&gt;&lt;br /&gt;Un saludo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6746745396900016990?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6746745396900016990/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/hammock-driven-development.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6746745396900016990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6746745396900016990'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/hammock-driven-development.html' title='Hammock Driven Development'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-8973127104799727533</id><published>2010-12-06T22:58:00.000+01:00</published><updated>2010-12-06T22:58:13.560+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>¿Lunes? Menudo lunes</title><content type='html'>Es increible la cantidad de cosas que han pasado hoy en Eden :D&lt;br /&gt;Tengo tarea nueva, hemos hablado de Eden Madrid, he asistido a una planificación de release, nos ha visitado un desarrollador de la zona y, por si fuera poco, el Agile South Coast User Group se ha reunido en nuestras oficinas (sí, nuestras, que yo también soy de Eden :P)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nueva tarea semanal&lt;/b&gt;&lt;br /&gt;Tengo que traducir al español la página de &lt;a href="http://edendevelopment.co.uk/"&gt;Eden&lt;/a&gt; :D En realidad lo que tengo que hacer es internacionalizar la página, porque en un futuro quieren poder traducirla también al alemán o al frances.&lt;br /&gt;La web de Eden está hecha con sinatra y utiliza haml para las vistas. No tenía ni idea de lo que eran ninguna de esas dos palabras, así que la mañana la he pasado entendiendo la tecnología y buscando como internacionalizar aplicaciones que usan &lt;a href="http://www.sinatrarb.com/"&gt;sinatra&lt;/a&gt;. La solución que he encontrado es utilizar &lt;a href="http://r18n.rubyforge.org/index.html"&gt;r18n&lt;/a&gt;. &lt;br /&gt;Tras una horita haciendo un spike para entender el funcionamiento tanto de sinatra como de r18n tengo que decir que ruby te hace la vida muy fácil :D No se que demonios hacía programando en java :P&lt;br /&gt;Una vez descubierto cómo internacionalizar Eden, &lt;a href="http://twitter.com/#!/spencerturner"&gt;Spencer&lt;/a&gt; me ha hablado de la usabilidad de la web y de como puede afectarle el que esté disponible en varios idiomas.&lt;br /&gt;¿Queremos que si vienes de España te aparezca la página en español? ¿Vamos a dar la poibilidad de elegir el idioma en el que mostrar el texto? En fin, una serie de preguntas de las que hemos sacado en claro que, aunque de primeras te aparezca en el lenguaje indicado por tu browser, debemos permitir seleccionar el idioma (aunque aún no sabemos como lo vamos a hacer).&lt;br /&gt;De momento lo único que he conseguido es obtener la preferencia de idioma del navegador que consulta la página, mañana ya me meteré a fondo con la internacionalización de la página.&lt;br /&gt;Otro problema que aún no he pensado como resolver es el de las pruebas. No estoy seguro de como montar las pruebas para probar la i18n.&lt;br /&gt;&lt;br /&gt;Por si os interesa, he tenido que pelearme con unas expresiones regulares y Spencer me ha recomendado &lt;a href="http://rubular.com/"&gt;esta web&lt;/a&gt;. Me ha parecido super útil :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Eden Madrid&lt;/b&gt;&lt;br /&gt;Mas tarde, a las 13:00 nos hemos reunido para hablar de Eden Madrid. La idea era que los edenites decidieran si querían o no embarcarse en el proyecto Eden Madrid. Como siempre, ha sido una discusión abierta (incluso a los que venían de visita, a los clientes, etc) y honesta, en la que cada persona a expresado sus dudas. &lt;br /&gt;Sin duda alguna, me quedo con lo que se preocupan por su empresa :) Está claro que les gusta.&lt;br /&gt;&lt;br /&gt;Aunque la reunión ha sido muy reveladora, el resultado de la reunión no ha sido el esperado porque no se ha podido responder a las dudas planteadas. Dentro de una o dos semanas habrá otra reunión con algo mas de información y de la que quizás se salga con una decisión. Os mantendremos al tanto :)&lt;br /&gt;&lt;br /&gt;Una de las dudas que han aparecido es si hay mercado en España para Eden (training, coaching y proyectos)y, si lo hay, cuanto tardarían en encontrar un cliente. ¿Vosotros que pensáis?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Release planning&lt;/b&gt;&lt;br /&gt;Después de la comida (sí, la reunión de Eden Madrid la hemos hecho mientras omíamos) he participado en una release planning con uno de los clientes.&lt;br /&gt;Ha sido una conversación muy interesante en la que el cliente ha demostrado un grado de madurez muy alto, eliminando de la release las features que menos valor le iban a aportar y contestanto muy tranquilamente a todas las preguntas y observaciones del equipo (era una colaboración con el cliente de las de verdad) e incluso de fuera del equipo (nuestro visitante).&lt;br /&gt;Me ha parecido un product owner al que le importaba de verdad su producto.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Visita de uno de los desarrolladores de la comunidad&lt;/b&gt;&lt;br /&gt;&lt;a href="http://twitter.com/#!/ukd1"&gt;Russel&lt;/a&gt;, uno de los fundadores de la &lt;a href="http://winchesterwebscene.co.uk/"&gt;Winchester Web Scene&lt;/a&gt;, ha estado hoy de visita y ha sido algo un poco espectacular. Ha trabajado con Aimee durante casi todo el día pero, lo mejor de todo, es que ha intervenido tanto en la reunión sobre Eden Madrid como en la release planning. Nadie se ha soprendido, salvo yo, y todo el mundo le ha tratado como a uno más. Se nota que están acostumbrados a este tipo de visitas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reunión del grupo Agile South Coast&lt;/b&gt;&lt;br /&gt;Ha sido una reunión un poco extraña. Parece ser que &lt;a href="http://agilesouthcoast.grouply.com/"&gt;el grupo&lt;/a&gt; está en horas bajas y esta debía ser una reunión "refundacional". De los regulares solo ha aparecido uno, el resto eramos un CSM que acudía a su primera reunión y la gente que estábamos en Eden.&lt;br /&gt;No hemos hablado de nada ágil, pero tengo que decir que me ha impresionado mucho como han llevado el tema los edenites. En todo momento han sido constructivos, pero nunca condescendientes. Ha sido una demostración de como intentar revitalizar una reunión y, sobre todo, como revitalizar un grupo. Todos han intentado buscar soluciones, dejando a un lado toda la parte de buscar culpables y no aceptando justificaciones que no eran pedidas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esto es todo por hoy. Como veis, en Eden no tienes tiempo de aburrirte :) Animaos a venir de visita, esto tenéis que verlo por vosotros mismos :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-8973127104799727533?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/8973127104799727533/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/lunes-menudo-lunes.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8973127104799727533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8973127104799727533'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/lunes-menudo-lunes.html' title='¿Lunes? Menudo lunes'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-2848407137795309999</id><published>2010-12-05T02:25:00.000+01:00</published><updated>2010-12-05T02:25:07.120+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Los valores de Eden</title><content type='html'>En una de las paredes de Eden hay pegada una tarjeta con una frase que resume qué es Eden:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Eden exists to enable people to achieve better, greater, more worthwhile things&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Eden existe para permitir a las personas conseguir cosas mejores, más grandes, que valgan más la pena &lt;/blockquote&gt;&lt;br /&gt;No se a vosotros, pero a mi me gusta mucho :D &lt;br /&gt;&lt;br /&gt;Como os he contado en las anteriores entradas, Eden se guía por una serie de valores que todos los "edenites" entienden, comparten y cumplen. De hecho, dichos valores los han decidido entre todos, como hacen con todo lo demás :D Todos los valores de Eden están relacionados con esa frase.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We build relationships (Construímos relaciones)&lt;/b&gt;&lt;br /&gt;Eden no solo se preocupa de construir software. Además, se preocupa de construir relaciones de total confianza con sus clientes. Tienen claro están dejando en sus manos su reputación y su medio de subsistencia.&lt;br /&gt;&lt;br /&gt;Por supuesto, también se preocupa de las propias relaciones entre "edenitas". De hecho, &lt;b&gt;lo que más vas a ver en Eden son sonrisas&lt;/b&gt; :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We have a mindset of mutual respect (Tenemos una mentalidad de respeto mutuo)&lt;/b&gt;&lt;br /&gt;Esto es muy importante en Eden. Puede que existan diferencias de opinión, pero nunca se pierde el respeto hacia la otra persona.&lt;br /&gt;&lt;br /&gt;De verdad, es alucinante. En estos 5 días no ha habido ni una sola falta de respeto entre "edenites", y por falta de respeto me refiero incluso al típico chascarrillo español en plan "será cabrón :)". Sí que lo he visto por ejemplo por parte del cliente, y también he podido comprobar como los "edenites" lo han cortado de raíz con un toque de atención.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We ask "why?" (Preguntamos "¿por qué?")&lt;/b&gt;&lt;br /&gt;Eden quiere añadir valor al negocio de los clientes, por lo que necesitan tener claras sus motivaciones.&lt;br /&gt;Lógicamente, si es bueno para un cliente, también es bueno para Eden. El nivel de exigencia que tienen les hace cuestionarse sus motivaciones con el objetivo de mejorar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We craft excellence (lo hacemos de forma excelente)&lt;/b&gt;&lt;br /&gt;Eden es un equipazo. Son gente muy buena en su trabajo y muy responsable. Dicha responsabilidad les lleva a entregar sólo código excelente. Si la funcionalidad no está al nivel que ellos mismos se exigen, no se entrega.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We are disciplined (Somos disciplinados)&lt;/b&gt;&lt;br /&gt;No son disciplinados en el sentido de cumplir órdenes, son disciplinados en el sentido de ser responsables. Prefieren arreglar la raiz de los problemas antes que parchear los sintomas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We learn aggressively (Aprendemos de forma agresiva)&lt;/b&gt;&lt;br /&gt;Todos los miembros de Eden sienten pasión por su profesión y están continuamente aprendiendo (nuevos lenguajes, nuevas técnicas, etc.) y compartiendo lo aprendido con el resto.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We give generously (Damos generosamente)&lt;/b&gt;&lt;br /&gt;Eden es realmente generosa. Se involucran con las comunidades (no solo con las relacionadas con el software), aceptan visitas, promueven actividades, etc.&lt;br /&gt;&lt;br /&gt;Si se monta Eden en Madrid entenderéis mejor a que me refiero. Nos lo vamos a pasar piruleta :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We value people (Valoramos a las personas)&lt;/b&gt;&lt;br /&gt;Eden no permite que los proyectos y sus fechas de entrega entren en conflicto con la vida personal de los "edenites". Además, fomentan actividades que refuercen las relaciones personales entre los "edenites" (como por ejemplo la proyección de Avatar del otro día)&lt;br /&gt;&lt;br /&gt;Tengo que decir que todo esto sale de forma natural. En ningún momento se "fuerza la amistad". Simplemente son buenas personas juntas en una oficina :)&lt;br /&gt; &lt;br /&gt;&lt;b&gt;We are honest and open, even when it's hard (Somos honestos y abiertos, incluso cuando es duro)&lt;/b&gt;&lt;br /&gt;La confianza entre todo Eden permite una honestidad brutal. Si algo no gusta, se dice, aunque cueste.&lt;br /&gt;&lt;br /&gt;Realmente, en la semana que he pasado con ellos la única vez que se dio un toque de atención fue para intentar mejorar la dinámica de trabajo de un equipo cliente. No fue gratuito, fue necesario, y el equipo cliente lo aceptó y reconoció el problema.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We are humble (Somos humildes)&lt;/b&gt;&lt;br /&gt;Eden es humilde y los "edenites" son humildes. Saben que son muy buenos y que hacen las cosas muy bien, pero también tienen claro que aún pueden mejorar (Aunque yo ahora mismo no veo como :D ).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Eso es todo, ¿Qué os parece? Espero que esto os de una idea del tipo de compañía que es Eden (o lo que yo entiendo que es Eden), aunque realmente es mucho mejor :) En serio, tenéis que comprobarlo por vosotros mismos. &lt;a href="http://twitter.com/#!/cavalle/status/10239506997317632"&gt;Este tweet&lt;/a&gt; de &lt;a href="http://twitter.com/#!/cavalle"&gt;Luismi Cavallé&lt;/a&gt; resume bastante bien como me siento después de esta semana :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-2848407137795309999?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/2848407137795309999/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/los-valores-de-eden.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2848407137795309999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2848407137795309999'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/los-valores-de-eden.html' title='Los valores de Eden'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-3072294390538238588</id><published>2010-12-03T19:49:00.000+01:00</published><updated>2010-12-03T19:49:53.860+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Mi primera presentación en Eden</title><content type='html'>Como parte de mi internship en Eden cada semana tengo que dar una charla al resto de la compañía. La primera ha consistido en explicar como he desarrollado el PlageServer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Qué es PlageServer&lt;/b&gt;&lt;br /&gt;Ya os lo he contado en varias entradas. PlageServer es mi primera tarea en Eden. La idea era implementar un servidor web capaz de aceptar peticiones y devolver respuestas que cumplan la &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html"&gt;rfc2616&lt;/a&gt;.&lt;br /&gt;Aunque no he conseguido terminarlo, si que me ha dado tiempo a completar la operación GET. Si queréis ver el código lo tenéis en &lt;a href="https://github.com/plagelao/PlageServer"&gt;github&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;La presentación&lt;/b&gt;&lt;br /&gt;Teníamos fijada la presentación para las 15:00 y, aunque no os lo creais, a las 14:50 estaba tan tranquilo en uno de los sofás de Eden. Normalmente me pongo muy nervioso cuando me toca hablar, pero hoy no ha sido así. Mis compañeros me han dado mucha confianza durante toda la semana y me siento bastante integrado, lo que me ha permitido relajarme y disfrutar :D Tampoco os penséis que gracias a eso la presentación ha sido perfecta. Me he liado tanto con el idioma como con el código en sí :D No ha sido un desastre, pero he ido demasiado rápido y creo que ha sido un poco confuso.&lt;br /&gt;&lt;br /&gt;Una vez terminada la exposición, mis compañeros han comentado el código. Ha habido de todo, desde que era un código más o menos limpio hasta que era una mezcla entre OO y programación estructurada :D&lt;br /&gt;Realmente, creo que podría haberlo hecho mucho mejor (sobre todo ahora que ya se hacerlo mal :P).&lt;br /&gt;No se si os pasa a vosotros, pero hay un momento en el que el código se me va de las manos (y eso que hago TDD). Creo que tiene que ver con los test que defino. Puede que esté dando pasos demasiado grandes.&lt;br /&gt;&lt;br /&gt;A pesar de todo, mis compañeros me han felicitado con un "well done" :D ¡Muchas gracias!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Feedback semanal&lt;/b&gt;&lt;br /&gt;Una vez terminada la presentación y la ronda de preguntas/observaciones, le ha llegado el turno al feedback semanal.&lt;br /&gt;Por un lado, mis compañeros me han contado como se sienten conmigo por allí. Valoran el que haya venido desde España, dejando mi trabajo y a mi pobre novia (a la que, por cierto, le dedico este post :D ) y se sienten cómodos conmigo :) Eso sí, tengo que intentar dejar la timidez en casa. &lt;br /&gt;Por el otro lado, yo les he dicho como me siento con ellos. ¿Os imagináis mis palabras? Las podéis leer &lt;a href="http://twitter.com/#!/sermoa/status/10725041897472000"&gt;aquí&lt;/a&gt; :) También les he comentado que quiero programar más con ellos. Esta semana no hemos podido por varios motivos (gente enferma, nieve bloqueando las carreteras, etc) y quiero aprender de ellos :D&lt;br /&gt;&lt;br /&gt;Resumiendo, todo va bastante bien. Estoy disfrutando como un enano de la experiencia y espero que se note en estas entradas :)&lt;br /&gt;&lt;br /&gt;¡Un saludo a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-3072294390538238588?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/3072294390538238588/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/mi-primera-presentacion-en-eden.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3072294390538238588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/3072294390538238588'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/mi-primera-presentacion-en-eden.html' title='Mi primera presentación en Eden'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6841209804309602585</id><published>2010-12-02T21:26:00.002+01:00</published><updated>2010-12-02T21:36:47.090+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Nevando a tope</title><content type='html'>Os pido disculpas de antemano porque la entrada de hoy va a ser muy cortita :( Intentaré redimirme el fin de semana.  &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Que bonita es la nieve&lt;/b&gt;&lt;br /&gt;Hoy ha sido un día extraño en Winchester. Anoche nevó mucho y nos hemos levantado con unos 20 centímetros de nieve. Eso ha provocado un mini caos en la ciudad debido al cual solo hemos podido ir al taller tres personas de Eden (Enrique, Aimee y yo) y los cuatro compañeros que están por parte del cliente :S Cuando nos hemos querido poner a trabajar nos hemos dado cuenta de que no funcionaba internet, no sabemos por qué. El proyecto del cliente lo necesita (skype para pair remoto, consultas de documentación, etc), así que nos hemos bajado a trabajar a un café cercano que tiene WiFi :D &lt;a href="http://twitter.com/#!/ecomba/status/10304674880036864"&gt;Este tweet&lt;/a&gt; sirve como prueba. A la hora del almuerzo, el equipo del cliente ha decidido irse a Londres para evitar problemas con los trenes, lo que ha dejado a Aimee y Enrique compuestos y sin novio :P Esto nos ha llevado a adelantar la proyección de Avatar (edición de coleccionista), por lo que, aunque la película mola, no hemos trabajado demasiado :P&lt;br /&gt;¿Os lo había contado? El otro día planeamos ver Avatar en Eden :) Otra de esas cosas que crean relaciones personales y que tanto se dan en Eden :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Avances en el PlageServer&lt;/b&gt;&lt;br /&gt;Mañana tengo la presentación del &lt;a href="https://github.com/plagelao/PlageServer"&gt;PlageServer&lt;/a&gt; y no va del todo mal, aunque quiero darle un repasillo esta noche. Tengo algún problema con los require que provoca que cucumber no funcione, pero he conseguido terminar el GET :D Además, es posible que mañana antes de la presentación pueda tener el post también terminado. No está mal para no tener ni idea de Ruby y Vi (que por cierto, le estoy cogiendo el gustillo :P A ver si me animo y os escribo algo) Personalmente creo que el código no ha quedado del todo mal, aunque seguro que mañana me darán caña a tope (eso espero) :D Si tenéis ganas, también podéis criticarlo vosotros en los comentarios o por twitter :)&lt;br /&gt;&lt;br /&gt;Lo dicho, siento que sea una entrada tan corta, pero ha sido un día extraño y tranquilo.&lt;br /&gt;&lt;br /&gt;¡Nos vemos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6841209804309602585?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6841209804309602585/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/nevando-tope.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6841209804309602585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6841209804309602585'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/nevando-tope.html' title='Nevando a tope'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-4483709735162580786</id><published>2010-12-01T21:05:00.000+01:00</published><updated>2010-12-01T21:05:41.546+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Esas pequeñas cosas</title><content type='html'>Desde que he llegado a Eden no han parado de sorprenderme las cosas que suceden sin que nadie les de importancia y que a mi me dejan con una sonrisa en la boca :)&lt;br /&gt;&lt;br /&gt;Una de las primeras sorpresas que me llevé fue como funciona el stand up diario que se celebra a las 9:30. La típica reunión corta en la que cada uno dice que hizo ayer y que va a hacer hoy. ¿Típica? Bueno, típica no es, porque Eden es diferente. La mayor diferencia es que no hay una reunión por equipo. Hay una única reunión en la que participa todo Eden (por skype si no has podido ir a la oficina) y todos los clientes que estén con ellos en las oficinas. Mola porque todo el mundo sabe lo que está haciendo todo el mundo y mola porque no hay diferencias entre técnicos, no técnicos, clientes, internos :P Todos somos iguales y todos somos importantes :)&lt;br /&gt;Pero sin duda, lo mejor de la reunión sucede cuando termina la ronda. Entonces llega el momento en el que el que quiera puede contar cosas interesantes que ha descubierto en casa (Por ejemplo, Enrique hoy ha hablado de los koans para clojure). ¿No os ha pasado alguna vez eso de haber leído algo super molón sobre programación y no tener nadie con quien compartirlo en el trabajo? Pues aquí es casi obligatorio que lo compartas :D&lt;br /&gt;&lt;br /&gt;El momento de antes de la reunión también es divertido y suelen surgir conversaciones curiosas en torno a la programación. Hoy, por ejemplo, ha surgido el tema "frameworks sí, frameworks no" que tanto gustó en el AOS2010 :D &lt;br /&gt;Espera, que no me lo creo del todo. ¡Mis compañeros hablan de programación en el trabajo! Moooola. Y además nadie les mira como si fueran frikis :P (Lo digo porque a Alfredo y a mi alguna vez sí que nos han mirado raro...)&lt;br /&gt;&lt;br /&gt;Otro de los momentos en los que surge la magia es la hora de la comida. Todos los días ha pasado algo divertido e inspirador.&lt;br /&gt;Mi primer almuerzo, como ya os conté, sirvió para que me contaran como ven la empresa, por qué es como es, etc.(Tengo ese tema pendiente, no me olvido) Todo de una forma muy natural y abierto a todo el que quisiera escucharlo.&lt;br /&gt;El segundo día Chris nos contó como estaba enseñando a programar a su hijo de 6 años. Está utilizando un programa que simula un enfrentamiento entre robots y tu tienes que programarte el tuyo. Aquello dio paso a una discusión en torno a la mejor manera de acercar a niños tan pequeños a la programación bastante didáctica :)&lt;br /&gt;Después, Enrique nos hizo la kata de los números romanos a unos cuantos curiosos en menos de 5 minutos (y creo que en mucho menos), dejándonos ojipláticos. &lt;br /&gt;Hoy nos hemos juntado como grupo de estudio de patrones de diseño y hemos hablado sobre el Singleton. No nos ha tocado el más divertido pero aún así ha sido una charla interesante. Además, me he enterado de que twitter usa el 3% de sus servidores para Justin Bieber :O&lt;br /&gt;&lt;br /&gt;De todo lo que os he contado, lo que me parece más importante es lo fácil y espontáneo que es,  y el hecho de que sea abierto a todos los que quieran acudir (por supuesto, no es obligatorio), ya sean clientes o personal de Eden porque, mientras estás en Eden eres Eden :D&lt;br /&gt;&lt;br /&gt;PD: El servidor va mejor :D Hoy he conseguido resolver un GET de un navegador :P Lo malo es que después me lo he cargado en la fase de refactor... El código no está del todo mal, aunque imagino que el viernes me meteran caña a tope :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-4483709735162580786?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/4483709735162580786/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/12/esas-pequenas-cosas.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4483709735162580786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4483709735162580786'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/12/esas-pequenas-cosas.html' title='Esas pequeñas cosas'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1877119484791131666</id><published>2010-11-30T20:25:00.002+01:00</published><updated>2010-11-30T22:45:04.625+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='Retrospectiva'/><title type='text'>Una retrospectiva en Eden</title><content type='html'>Ya se que os tengo que hablar de los valores de Eden, pero hoy he podido asistir a una retrospectiva con un cliente y prefiero contaros como se lo montan :D Sobre los valores os prometo una entrada el fin de semana.&lt;br /&gt;&lt;br /&gt;Antes de entrar en harina, hoy he conocido a Frances y bueno, super amable y encantadora. Además, nos ha traido una tarta de chocolate hecha por su hermana que estaba muy rica. Parece ser que mañana nos va a traer unos &lt;i&gt;mince pies&lt;/i&gt; caseros que, por lo que dicen, son de chuparse los dedos :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hablemos de la retro&lt;/b&gt;&lt;br /&gt;La retro de hoy la ha facilitado Aimee y han participado, por parte del cliente, las 4 personas que hay ahora mismo en Eden, y por parte de Eden, Enrique, Steve (via Skype porque sigue enfermo), Aimee y yo (Yo por parte de Eden, ¿qué os parece? Alucino :P ), aunque básicamente he ido a curiosear.&lt;br /&gt;&lt;br /&gt;La retro ha empezado de una forma muy chula. Los implicados hemos entrado en la sala y nos hemos sentado alrededor de una mesa redonda. Delante nuestra teníamos una nota que decía:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand.&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Independientemente de lo que descubrimos, entendemos y creemos firmemente que todo el mundo hizo el mejor trabajo que pudo, teniendo en cuenta lo que sabían en ese momento, sus destrezas y habilidades, los recursos disponibles, y la situación actual.&lt;/blockquote&gt;&lt;br /&gt;Actualizado: Aimee me ha pasado el &lt;a href="http://www.retrospectives.com/pages/retroPrimeDirective.html"&gt;enlace a la cita original&lt;/a&gt; :D&lt;br /&gt;&lt;br /&gt;Todo el mundo ha leido la nota y se ha mostrado de acuerdo :) (uno por uno hemos dicho "estoy de acuerdo")&lt;br /&gt;&lt;br /&gt;Después, se han fijado unas reglas básicas (no se como traducir ground rules) para la retro entre todos los asistentes. Por ejemplo, hay que pedir la palabra levantando la mano, o queda prohibido faltar al respeto a la gente, o hacemos media hora, paramos y luego otra media hora.&lt;br /&gt;&lt;br /&gt;Una vez fijadas las reglas, Aimee nos ha pedido que escribieramos en postits eventos importantes que han ocurrido en las dos semanas de proyecto que se iban a retrospectivar (un evento por postit). Algunos ejemplos, Enrique ha escrito que el 14 de noviembre estaba en Madrid en un curso de TDD (que es igual que escribir que no estaba en Inglaterra pero mola más :D), que el 23 fueron a las oficinas del cliente, etc. Supongo que os hacéis una idea. Una vez escritos los postits, los hemos que colocarlos en un calendario en su correspondiente día. Ha quedado algo parecido a esto:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_0fjBGCsPOPo/TPVHpgX6eLI/AAAAAAAAAJc/rh3EOoqQveU/s1600/Untitleddrawing-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://3.bp.blogspot.com/_0fjBGCsPOPo/TPVHpgX6eLI/AAAAAAAAAJc/rh3EOoqQveU/s320/Untitleddrawing-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Luego hemos puesto en común los eventos que ha escrito cada uno y hemos dibujado nuestra línea de "sentimiento" del proyecto. Os lo enseño y después os lo explico:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0fjBGCsPOPo/TPVI8vqlRUI/AAAAAAAAAJg/_IeholgEkJc/s1600/Untitleddrawing-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/TPVI8vqlRUI/AAAAAAAAAJg/_IeholgEkJc/s320/Untitleddrawing-2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;La línea punteada representa el estado "neutral", ni frio ni calor. Cada línea continua representa el sentimiento de un miembro del equipo durante las dos semanas de proyecto.&lt;br /&gt;Una vez que todos los miembros del equipo han dibujado su línea (la mía es la roja :P) cada uno explica por qué la línea es como es, lo que da lugar a que todo el mundo sepa como se siente cada uno de los implicados.&lt;br /&gt;No se ha vosotros, pero a mi me ha parecido una forma muy chula de expresar el bien y el mal del proyecto y, lo que es más importante, de compartirlo :)&lt;br /&gt;&lt;br /&gt;Esto nos ha consumido la primera media hora, así que hemos parado para beber un poco, ir al baño, lo típico. Cinco minutos después hemos vuelto al ataque.&lt;br /&gt;&lt;br /&gt;La segunda parte de la retrospectiva la hemos dedicado a tratar los problemas que más han afectado al proyecto. Para decidir que temas eran los que más importaban hemos juntado los postit-evento por temas y hemos votado los temas (7 puntos y puedes asignar tantos puntos como quieras a cualquier tema). Se han seleccionado los tres más votados y se ha charlado un rato de cada uno. En el momento en el que la discusión dejaba de tratar sobre como trabajar mejor para centrarse en detalles muy específicos del proyecto, alguien pedía tiempo muerto y cortaba la conversación. Esto mantenía enfocada la reunión.&lt;br /&gt;&lt;br /&gt;Como punto y final de la retro, Aimee ha apuntado las conclusiones y las posibles mejoras en tarjetas y las ha dejado pegadas a la pared para que todo el mundo las pueda ver.&lt;br /&gt;&lt;br /&gt;Y eso es todo, la verdad es que me ha parecido una forma muy amena de llevar una retrospectiva.&lt;br /&gt;&lt;br /&gt;Nos vemos :)&lt;br /&gt;&lt;br /&gt;PD: El servidor va igual que ayer porque hoy he borrado todo lo que hice y lo he vuelto a hacer desde otro enfoque :S Esperemos que mañana avance algo más.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1877119484791131666?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1877119484791131666/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/11/una-retrospectiva-en-eden.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1877119484791131666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1877119484791131666'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/11/una-retrospectiva-en-eden.html' title='Una retrospectiva en Eden'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0fjBGCsPOPo/TPVHpgX6eLI/AAAAAAAAAJc/rh3EOoqQveU/s72-c/Untitleddrawing-1.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-199646392311158047</id><published>2010-11-29T22:53:00.000+01:00</published><updated>2010-11-29T22:53:14.249+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><category scheme='http://www.blogger.com/atom/ns#' term='RSpec'/><title type='text'>Eden por dentro</title><content type='html'>Hoy he empezado mi internship en Eden y tengo que deciros que esto es la caña. He conocido a &lt;a href="http://twitter.com/chrismdp"&gt;Chris&lt;/a&gt;, &lt;a href="http://twitter.com/edentodd"&gt;Todd&lt;/a&gt;, &lt;a href="http://twitter.com/spencerturner"&gt;Spencer&lt;/a&gt;, &lt;a href="http://twitter.com/juarnu"&gt;Juliet&lt;/a&gt; y &lt;a href="http://twitter.com/sermoa"&gt;Aimee&lt;/a&gt; y son todos muy simpáticos y muy amables. Entre Chris y Aimee me han explicado lo que es Eden y me han pasado su "código de valores" (A ver si mañana os blogueo algo). Sinceramente, es una empresa espectacular. No se muy bien como explicarlo, pero escucharles contar como sienten la empresa y verlos en acción con sus clientes deja bien claro que su máximo interes es hacer que las personas se superen. Es muy inspirador.&lt;br /&gt;&lt;br /&gt;Aimee y Steve iban a ser los encargados de darme caña estos primeros días, pero Steve (al que conocí en la Software Craftsmanship y al que todavía debo una cerveza) está enfermo y le ha tocado a Aimee lidiar conmigo :) Lo primero que hemos hecho Aimee y yo ha sido modificar la &lt;a href="http://edendevelopment.co.uk/"&gt;web de Eden&lt;/a&gt;. Supongo que la mayoría ya os habréis dado cuenta del cambio :P El proceso entero ha sido muy sencillo. El código está en github y el deploy se hace con un comando. A prueba de plagelaos :)&lt;br /&gt;Más tarde, Aimee me ha encargado (ha petición de enrique vía email) una tarea algo más compleja. Me ha pedido que realice una implementación de un servidor web que cumpla la &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html"&gt;rfc2616&lt;/a&gt; :) Además, tendré que hacer una exposición sobre el tema el próximo viernes... Por supuesto, hay que desarrollarlo usando TDD (Con Cucumber y RSpec). Para añadir algo de dificultad al ejercicio, me he propuesto hacerlo en Ruby y utilizando el Vim (bueno, el MacVim, que es algo más amigable) ¿Qué puede salir mal? Pues nada, porque hemos venido a aprender y a mejorar, y eso no se consigue dentro de tu zona de confort. Hay que tirarse a la piscina.&lt;br /&gt;Por si os interesa &lt;a href="https://github.com/plagelao/PlageServer"&gt;el código lo estoy dejando en github&lt;/a&gt;, aunque estos próximos días os iré contando mis dudas y las soluciones. De momento, hoy he aprendido a lanzar todos los specs de mi proyecto a la vez :P Os cuento como lo he hecho. Me he creado un fichero spec_helper.rb en el que he metido todos los ficheros con specs como require. Después lo único que hago es ruby spec_helper.rb y automagicamente se ejecutan todos los tests. Supongo que habrá alguna forma más sencilla de hacerlo ¿Me la contáis? Tampoco me importaría mirar un poco como funciona autotest...&lt;br /&gt;&lt;br /&gt;No quería terminar sin agradeceros a todos los ánimos que me estáis dando :D ¡Muchas gracias!&lt;br /&gt;&lt;br /&gt;Por cierto, creo que en Madrid ha nevado hoy ¿no? Aquí ha salido el sol por la mañana :) La vida puede ser maravillosa, que decía aquel.&lt;br /&gt;&lt;br /&gt;Saludos del "Lucky Bastard" :P&lt;br /&gt;&lt;br /&gt;PD: Me dejo muchas cosas en el tintero (Todd explicándome que si tengo algún problema no dude en hablar con él, Spencer recogiéndome en el B&amp;B para llevarme a Eden, el bollo que me ha comprado Juliet, las cañas que nos hemos tomado al salir con los chicos de la empresa cliente a la que están ayudando de la que no recuerdo el nombre ahora, etc). Todo genial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-199646392311158047?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/199646392311158047/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/11/eden-por-dentro.html#comment-form' title='11 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/199646392311158047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/199646392311158047'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/11/eden-por-dentro.html' title='Eden por dentro'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-4956821265535506096</id><published>2010-11-28T19:32:00.000+01:00</published><updated>2010-11-28T19:32:35.639+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internship'/><category scheme='http://www.blogger.com/atom/ns#' term='eden'/><title type='text'>Un plagelao en Winchester</title><content type='html'>¡Sí, ya estoy en Winchester! De momento (no podía ser de otra forma) todo está siendo espectacular.&lt;br /&gt;&lt;br /&gt;Para empezar, &lt;a href="http://twitter.com/#!/ecomba"&gt;Enrique Comba&lt;/a&gt; me ha ido a recoger a la estación y me ha acompañado a lo que va a ser mi casa durante este mes, &lt;a href="http://www.flowerdews.com/"&gt;Flowerdrews&lt;/a&gt;. Es el B&amp;B que me buscó &lt;a href="http://twitter.com/#!/juarnu"&gt;Juliet Arnott&lt;/a&gt; y es increíble (además de calentito). Siento no tener cámara de fotos (sí, soy lamentable), pero os lo recomiendo 100% a todos los que vengáis a Winchester. Es un sitio bastante tranquilo, las habitaciones son enormes y la pareja que lo lleva es super amable :) &lt;br /&gt;&lt;br /&gt;Después de dejar la maleta y la mochila en la habitación, Enrique me ha llevado a las oficinas de &lt;a href="http://edendevelopment.es/"&gt;Eden Development&lt;/a&gt;. "Yo... He visto cosas que vosotros no creeriais" :P Las oficinas reflejan todo lo que Enrique nos ha contado tanto en el aos2010 como en la lista de agile-spain. Hay restos de inceptions, story boards, libros, teclados Dvorak, sillas con nombres de bólidos, un globo-clon y &lt;b&gt;muchos Macs&lt;/b&gt; ("ordenadores de verdad" los llama Enrique). Un pasote :) Sin embargo, lo que más me ha llamado la antención es la cantidad de espacio "libre" que tienen. De hecho, Enrique me ha contado que ellos no tienen un sitio fijo en el que trabajar. Cada uno trabaja donde le da la gana (o donde haya elegido su pareja, claro). Estoy deseando ir mañana para ver el taller a pleno rendimiento :) Va a ser una pasada.&lt;br /&gt;&lt;br /&gt;Tras la visita a las oficinas de Eden, nos hemos ido de ruta turística por Winchester. Hemos visto al Rey Arturo, el mercado de Navidad, el centro de la ciudad, la catedral (&lt;a href="http://yfrog.com/n5pzt0j"&gt;testimonio gráfico incluido&lt;/a&gt;), etc, aunque lo mejor ha sido la charla durante el recorrido, saltando del software a la fotografía, pasando por la comida y, como no, por Eden Madrid :)&lt;br /&gt;&lt;br /&gt;Siento que la entrada sea tan cortita, pero estoy baldado y mañana va a ser un día duro. De hecho, una de las cosas que me ha dicho Enrique es que esta primera semana las voy a pasar canutas, así que me voy a dormir :) ¡Mañana más!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-4956821265535506096?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/4956821265535506096/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/11/un-plagelao-en-winchester.html#comment-form' title='11 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4956821265535506096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4956821265535506096'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/11/un-plagelao-en-winchester.html' title='Un plagelao en Winchester'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-4574006758086208782</id><published>2010-11-24T08:00:00.004+01:00</published><updated>2010-11-24T08:00:07.530+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pair programming'/><category scheme='http://www.blogger.com/atom/ns#' term='dirigidoportests'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><category scheme='http://www.blogger.com/atom/ns#' term='SOLID'/><title type='text'>Más sobre S.O.L.I.D.</title><content type='html'>En el &lt;a href="http://plagelao.blogspot.com/2010/11/violando-la-d-de-solid.html"&gt;último post&lt;/a&gt; os intenté convencer de que habíamos conseguido no violar el principio de inversión de dependencias con nuestra clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;. Si no lo recordáis, nos quedó algo como esto:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/704484.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/#!/reemplazable"&gt;José Luis Barrera&lt;/a&gt; me sugirió en los comentarios que utilizáramos una clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Credenciales&lt;/span&gt; que agrupara tanto el nombre del usuario como el &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Pin&lt;/span&gt;. Con esa nueva abstracción, el código de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; queda aún más claro:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/712436.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Guay :D&lt;br /&gt;&lt;br /&gt;Ahora bien, ¿qué ocurre cuando la validación de las &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Credenciales&lt;/span&gt; falla? Tal y como tenemos ahora mismo &lt;a href="https://github.com/plagelao/jcajero"&gt;nuestra implementación&lt;/a&gt;, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;OperacionesBancarias&lt;/span&gt; lanzaría una excepción por cada tipo de error que se produzca al validar el usuario. Por ejemplo, si lo que falla es que las &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Credenciales&lt;/span&gt; son incorrectas se produce una excepción &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CredencialesIncorrectas&lt;/span&gt;. Si lo que sucede es que la validación de las &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Credenciales&lt;/span&gt; ha sido fallida más de tres veces, la excepción que se lanza es una &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;AccesoInvalidadoPorMultiplesReintentosFallidos&lt;/span&gt;. Si lo que se produce es un error en el acceso al banco real, se lanzará un &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;BancoInaccesible&lt;/span&gt;.&lt;br /&gt;Veamos como implementaríamos un cliente de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; (un &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt;) que se preocupe del resultado de la validación:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/706495.js?file=GUIContraBanco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Pues no parece que sea muy legible... No se vosotros, pero yo estoy bastante acostumbrado a este tipo de código y tengo que decir &lt;b&gt;¡basta ya!&lt;/b&gt; &lt;br /&gt;Las excepciones que captura &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; no son parte de la abstracción de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;, son detalles de bajo nivel que se encuentran en &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;OperacionesBancariasBancoManolito&lt;/span&gt;, con lo que estamos volviendo a violar el principio de inversión de dependencias. Además, estamos controlando el flujo del programa mediante excepciones. ¡Que desastre!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Las excepciones deberían ser para casos excepcionales&lt;/b&gt;&lt;br /&gt;Como bien nos contó (recordó) Enrique Comba en el curso de T.D.D., las excepciones deben ser excepcionales. No tiene sentido usarlas para controlar el flujo porque, en ese caso, dejan de ser excepcionales. Esto que parece tan trivial es una de las cosas que más nos cuesta cuando nos ponemos a programar.&lt;br /&gt;Con esto en mente, volvamos a nuestro ejemplo, ¿Es excepcional que unas &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Credenciales&lt;/span&gt; sean incorrectas? ¿Es excepcional que un &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; tenga que anular una tarjeta porque el usuario se ha equivocado n veces al intentar usarla? De nuestro ejemplo, el único caso "excepcional" puede ser que el banco real no esté accesible pero ¿de verdad es tan raro que haya un corte de comunicaciones? Para mi, ninguno de estos casos es merecedor de una excepción, así que vamos a intentar arreglarlo. Lo primero que vamos a hacer es que &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; no dependa de los detalles de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;OperacionesBancariasBancoManolito&lt;/span&gt; (y si de paso evitamos controlar el flujo con excepciones, mejor que mejor). Para ello, vamos a pasarle al &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; la responsabilidad de avisar al &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; cuando suceda un evento de validación (correcta, incorrecta, invalida, sin conexión). Refatorizamos nuestro &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; para que quede como sigue:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/712774.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;y nuestro &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; ahora queda mucho más limpio:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/712785.js?file=Cajero.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Aunque nuestra clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; ha quedado mucho más clara, hemos pasado el problema de las excepciones a la clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;. Además, estamos violando el principio de segregación de interfaces (&lt;a href="http://www.objectmentor.com/resources/articles/isp.pdf"&gt;&lt;b&gt;I&lt;/b&gt;&lt;/a&gt;). Vayamos paso a paso.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Segregación de interfaces&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Clients should not be forced to depend upon interfaces that they do not use.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Los clientes no deben verse forzados a depender de interfaces que no usan.&lt;/blockquote&gt;&lt;br /&gt;Para cumplir este principio, nuestra clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; debe implementar un interfaz para manejar los eventos de validación, que es lo único que la clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; necesita conocer de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/706704.js?file=GUIContraBanco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Y nuestra clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; dejaría de depender de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; para depender de dicho interfaz:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/706693.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ahora que nuestra clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt; ya cumple el principio de segregación de interfaces, arreglemos &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;.&lt;br /&gt;La solución que se me ha ocurrido es que sea la abstracción &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Token&lt;/span&gt; la que nos de la información que actualmente nos dan las excepciones:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/706728.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ahora el flujo ya no es guiado por excepciones pero, lo que me parece más importante aún, es que nuestro código ahora es más sencillo de extender. Antes necesitábamos ir a un javadoc (o similar) para leer que tipo de excepciones eran necesarias para que &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; funcionara, ahora basta con implementar &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Token&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Por último, tengo que decir que no me gustan las estructuras if-elseif-elseif-else, pero para este caso en particular no me parece tan horrible. Si los motivos por los que &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Token&lt;/span&gt; puede no ser válido fueran más o pudieran cambiar más a menudo me pensaría una solución con suscriptores similar a la que hemos utilizado con el &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cajero&lt;/span&gt;. Si os apetece hacerlo os lo dejo como ejercicio :P&lt;br /&gt;&lt;br /&gt;Perdonad que me haya quedado una entrada tan larga y atolondrada. Espero que al menos se entienda lo que he intentado expresar :D ¡Nos vemos en la siguiente!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nota&lt;/b&gt;: No haría estas refactorizaciones que he hecho aquí si no tuviera una buena base de pruebas contra las que probar cada pasito.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-4574006758086208782?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/4574006758086208782/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/11/mas-sobre-solid.html#comment-form' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4574006758086208782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4574006758086208782'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/11/mas-sobre-solid.html' title='Más sobre S.O.L.I.D.'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-7619242672101283994</id><published>2010-11-18T09:00:00.006+01:00</published><updated>2010-11-18T09:00:04.301+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pair programming'/><category scheme='http://www.blogger.com/atom/ns#' term='dirigidoportests'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><category scheme='http://www.blogger.com/atom/ns#' term='SOLID'/><title type='text'>Violando la D de S.O.L.I.D</title><content type='html'>A principios de semana tuve la suerte de asistir al curso de TDD que impartió &lt;a href="http://twitter.com/#!/ecomba"&gt;Enrique Comba&lt;/a&gt; en Madrid. Me lo pasé genial pero me fui aún más convencido de que programar es muy difícil.&lt;br /&gt;Aunque el temario del curso fue bastante amplio, yo sólo voy a centrarme en los principios &lt;b&gt;&lt;a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod"&gt;S.O.L.I.D.&lt;/a&gt;&lt;/b&gt; Si queréis saber más sobre lo que hicimos allí, &lt;a href="http://twitter.com/#!/jjballano"&gt;Jesús Jiménez&lt;/a&gt; ha escrito &lt;a href="http://jjballano.wordpress.com/2010/11/17/curso-tdd/trackback/"&gt;este post&lt;/a&gt; explicándolo.&lt;br /&gt;&lt;br /&gt;El primer día del curso, Enrique nos dividió en 5 grupos y nos asignó la exposición de un principio &lt;b&gt;S.O.L.I.D.&lt;/b&gt; a cada equipo. A nosotros (&lt;a href="http://twitter.com/#!/amaliahern"&gt;Amalia Hernandez&lt;/a&gt;, Jesús Jiménez, &lt;a href="http://twitter.com/#!/lantoli"&gt;Leo Antolí&lt;/a&gt; y yo) nos tocó explicar la &lt;b&gt;&lt;a href="http://www.objectmentor.com/resources/articles/dip.pdf"&gt;D&lt;/a&gt;&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Inversión de Dependencias (D)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;High level modules should not depend upon low level modules. Both should depend upon abstractions&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;Abstractions should not depend upon details. Details should depend upon abstractions&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Los módulos de alto nivel no deberían depender de módulos de bajo nivel. Ambos deberían depender de abstracciones&lt;/blockquote&gt;&lt;blockquote&gt;Las abstraccciones no deberían depender de los detalles. Los detalles deberían depender de las abstracciones&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;Cuéntamelo con código&lt;/b&gt;&lt;br /&gt;El segundo día lo dedicamos a crear el software que controla un cajero automático (haciendo T.D.D., claro). El código que creó nuestro equipo (los mismos cuatro que el día anterior) lo tenéis completo &lt;a href="https://github.com/plagelao/jcajero"&gt;aquí&lt;/a&gt;, pero yo me voy a centrar sólo en nuestra implementación de la clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/703843.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Lo que hace la clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; es realizar una petición de validación mediante el &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Conector&lt;/span&gt; a una url. Dicha validación nos devuelve un json a partir del cual se puede crear el token de seguridad con el que se realizarán las siguientes operaciones del usuario validado.&lt;br /&gt;&lt;br /&gt;¿Habremos sido capaces de respetar el principio que nos tocó explicar el día anterior?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Los módulos de alto nivel &lt;/b&gt;(&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;)&lt;b&gt; no deben depender de módulos de bajo nivel&lt;/b&gt;(Implementaciones de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Conector&lt;/span&gt; y &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;GeneradorToken&lt;/span&gt;)&lt;b&gt;, ambos deben depender de abstracciones.&lt;/b&gt; Nuestro &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; depende de la abstracción &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Conector&lt;/span&gt; y de la abstracción &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;GeneradorToken&lt;/span&gt;, pero no "conoce" que implementación de cada abstracción está usando (Ambas se le inyectan en el constructor). Parece que esta parte es correcta.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Las abstracciones &lt;/b&gt;(&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;)&lt;b&gt; no deben depender de detalles. Los detalles deben depender de abstracciones.&lt;/b&gt; En esta parte es donde hemos metido la pata. Si &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; no debe depender de detalles ¿Qué pinta la construcción de la url contra la que debe operar el &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Conector&lt;/span&gt;? ¿Por qué el &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; conoce que el &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Conector&lt;/span&gt; devuelve json?&lt;br /&gt;&lt;br /&gt;Pensando en esto se me ocurre el siguiente refactor de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/703974.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Nuestro módulo de alto nivel depende ahora de una abstracción más general, dejándole a los módulos de bajo nivel (Las implementaciones de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;OperacionesBancarias&lt;/span&gt;) todo lo que tiene que ver con la infraestructura (tipo de comunicación, transformación de la respuesta, etc). Pero, ¿no es el token un detalle de bajo nivel? Si la respuesta es afirmativa deberíamos eliminarlo de &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; y &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;OperacionesBancarias&lt;/span&gt; devolvería directamente la &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Cuenta&lt;/span&gt;, haciendo que nuestra clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; fuera redundante. Sin embargo, yo (que soy el que está programando :P ) creo que cualquier autenticación bancaria me va a devolver un token (hablo desde la ignorancia, pero suena bien) con lo que deja de ser un detalle para formar parte de la abstracción. Eso sí, no estaría mal que fuera una clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Token&lt;/span&gt; en lugar de un String, que no todos los tokens tienen porque ser iguales. La clase &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Banco&lt;/span&gt; que no viola el principio de inversión de dependencias quedaría así:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/704484.js?file=Banco.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusiones&lt;/b&gt;&lt;br /&gt;Yo ya conocía los principios &lt;b&gt;S.O.L.I.D.&lt;/b&gt; y se que mis compañeros también (aunque de este código tenemos la culpa Leo y yo :D ). Nos habíamos preocupado de leerlos y de intentar entenderlos mucho antes de dar este curso. Entonces, ¿por qué no fuimos capaces de recordar la dichosa &lt;b&gt;D.&lt;/b&gt; incluso habiendo tenido que explicarla el día anterior? Yo pienso que es porque &lt;b&gt;no lo tenemos interiorizado&lt;/b&gt;. Hace falta &lt;b&gt;mucha práctica y mucha experiencia&lt;/b&gt; trabajando con los principios &lt;b&gt;S.O.L.I.D.&lt;/b&gt; en la cabeza para que no se te olviden mientras programas. Por eso considero importante practicar &lt;b&gt;T.D.D. con ejemplos sencillos&lt;/b&gt;, porque lo importante no es resolver el problema, &lt;b&gt;lo importante es el proceso mental con el que resuelves el problema&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Criticadme, por favor&lt;/b&gt;&lt;br /&gt;Lo que os he contado en este artículo es como entiendo yo el principio de inversión de dependencias. ¿Coincide con lo que entendéis vosotros? Si no es así, ¿en que me he equivocado?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-7619242672101283994?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/7619242672101283994/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/11/violando-la-d-de-solid.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7619242672101283994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7619242672101283994'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/11/violando-la-d-de-solid.html' title='Violando la D de S.O.L.I.D'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-544255627130848401</id><published>2010-10-25T09:45:00.001+02:00</published><updated>2010-10-25T09:45:00.189+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Craftsmanship'/><category scheme='http://www.blogger.com/atom/ns#' term='pair programming'/><category scheme='http://www.blogger.com/atom/ns#' term='coding kata'/><category scheme='http://www.blogger.com/atom/ns#' term='Libros'/><title type='text'>Pair Programming Cara a Cara</title><content type='html'>Hace poco he empezado a tomarme más en serio mi relación con la &lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;Software Craftsmanship&lt;/a&gt;.&lt;br /&gt;He decidido andar "El Largo Camino" (The Long Road).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mi largo camino&lt;/b&gt;&lt;br /&gt;En el &lt;a href="http://agilismo.es/index.php?option=com_content&amp;amp;view=article&amp;amp;id=100:despues-del-coderetreat-en-madrid&amp;amp;catid=35:evento"&gt;Coderetreat que organizó Agilismo.es&lt;/a&gt; (patrocinado por &lt;a href="http://www.autentia.com/index.php"&gt;Autentia&lt;/a&gt; y &lt;a href="http://edendevelopment.co.uk/"&gt;Eden Development&lt;/a&gt; ¡Gracias!) tuve la suerte de desvirtualizar a &lt;a href="http://twitter.com/#!/ecomba"&gt;Enrique Comba&lt;/a&gt; el cual me regaló una copia del &lt;a href="http://oreilly.com/catalog/9780596518387"&gt;"Apprenticeship Patterns, Guidance for the Aspiring Software Craftsman"&lt;/a&gt;. Si os interesa la Software Craftsmanship tenéis que leer este libro. Entre otras muchas cosas, algo que deja claro es lo importante que es &lt;b&gt;relacionarse&lt;/b&gt; con otros, &lt;b&gt;aprender&lt;/b&gt; de otros y &lt;b&gt;enseñar&lt;/b&gt; a otros.&lt;br /&gt;&lt;br /&gt;A su vez, hace poco que un grupo de españoles (vale, también había un argentino) fuimos a la &lt;a href="http://agilismo.es/index.php?option=com_content&amp;amp;view=article&amp;amp;id=102:en-la-conferencia-sc2010&amp;amp;catid=35:evento"&gt;conferencia SC 2010&lt;/a&gt; en Bletchley Park. El mensaje que &lt;a href="http://twitter.com/#!/jasongorman"&gt;Jason Gorman&lt;/a&gt; quiso transmitirnos allí fue:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Enseñad vuestro código, enseñad lo que hacéis, difundid la palabra&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Así pues, he decidido que, en esta parte del camino, voy a intentar relacionarme con la gente  para enseñarles lo que hago y aprender lo que ellos hacen. Voy a &lt;b&gt;compartir con otros&lt;/b&gt; mis experiencias.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Compartir con otros&lt;/b&gt;&lt;br /&gt;Tras volver de Londres escribí un &lt;a href="http://twitter.com/#!/plagelao/status/26539289027"&gt;twitt&lt;/a&gt; ofreciendome a programar con gente con una sola condición, tenía que ser &lt;b&gt;cara a cara&lt;/b&gt;. A aquel twitt contestarón varios &lt;b&gt;apasionados&lt;/b&gt; del software. Aún tengo pendiente quedar con varios de ellos (no os he olvidado :P), pero ya he tenido mis dos primeras experiencias.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apasionados&lt;/b&gt;&lt;br /&gt;Mi primera vez (sé como suena) fue con &lt;a href="http://twitter.com/#!/jjballano"&gt;@jjballano&lt;/a&gt;. Nos reunimos para hacer la kata &lt;a href="http://osherove.com/tdd-kata-1/"&gt;"StringCalculator"&lt;/a&gt; en Java. No llegamos a acabarla (¿es una kata muy larga o solo me lo parece a mi?) pero sí que avanzamos bastante en la solución. Creo que, aunque empezamos haciendo ping-pong programming, no dejé participar demasiado a Jesús (no se como lo vio él, pero hice un refactor demasiado largo). Habrá que repetir y "arreglar" eso.&lt;br /&gt;&lt;br /&gt;La segunda vez hice un trío (sé como sigue sonando) con &lt;a href="http://twitter.com/#!/GermanDZ"&gt;@GermanDZ&lt;/a&gt; y &lt;a href="http://twitter.com/#!/reemplazable"&gt;@reemplazable&lt;/a&gt; :P Nos decantamos por &lt;a href="http://codekata.pragprog.com/2007/01/kata_nine_back_.html"&gt;esta kata&lt;/a&gt; en Ruby. Tras intentar instalar RSpec (sin éxito), acabamos usando Test::Unit y terminando la kata. Aprendimos un poquito de Ruby, @GermanDZ nos enseñó como afronta él las refactorizaciones y @reemplazable  hizo una linea de código que nos dejó locos :). Creo que fuimos un poco rápido y 13'' no es lo mejor para tres personas, pero estuvo muy bien. Después nos tomamos las debidas cañas, que molaron igual o más :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Futuro&lt;/b&gt;&lt;br /&gt;Lo próximo que quiero hacer es grabar una de estas sesiones y subirla al internet para que la podáis ver todos.&lt;br /&gt;&lt;br /&gt;Si os apetece programar una tarde conmigo no tenéis más que avisarme. Eso sí, daos prisa porque el próximo 30 de noviembre me marcho a &lt;a href="http://edendevelopment.co.uk/"&gt;Eden Development&lt;/a&gt;. Me han ofrecido &lt;b&gt;hacer un internship&lt;/b&gt; y, si todo va bien, convertirlo en un apprenticeship :D Ya os iré contando.&lt;br /&gt;&lt;br /&gt;Estoy muy contento y féliz :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-544255627130848401?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/544255627130848401/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/10/pair-programming-cara-cara.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/544255627130848401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/544255627130848401'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/10/pair-programming-cara-cara.html' title='Pair Programming Cara a Cara'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6085408660959761687</id><published>2010-08-17T09:30:00.001+02:00</published><updated>2010-08-17T09:30:01.031+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Libros'/><title type='text'>Libros: Implementation Patterns</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/TEhxpI4C8AI/AAAAAAAAAHE/3QPuem0G1RY/s1600/implementation_patterns.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/TEhxpI4C8AI/AAAAAAAAAHE/3QPuem0G1RY/s200/implementation_patterns.jpg" width="151" /&gt;&lt;/a&gt;&lt;/div&gt;En una de mis anteriores entradas explicaba la necesidad de &lt;a href="http://plagelao.blogspot.com/2010/05/principios-agiles-6.html"&gt;aprender de los que más saben&lt;/a&gt;, de apoyarse en los grandes. Como dicen que hay que predicar con el ejemplo, os voy a comentar lo que he aprendido de mis gigantes. Voy a empezar con &lt;a href="http://twitter.com/kentbeck"&gt;Kent Beck&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hace una semana que compré sus&amp;nbsp;&lt;a href="http://pragprog.com/screencasts/v-kbtdd/test-driven-development"&gt;screencasts sobre tdd&lt;/a&gt;&amp;nbsp;y hace algo más de un mes que leí su&amp;nbsp;&lt;a href="http://www.amazon.co.uk/Implementation-Patterns-Addison-Wesley-Signature-Kent/dp/0321413091"&gt;"Implementation Patterns"&lt;/a&gt;&amp;nbsp;(Previa recomendación de&amp;nbsp;&lt;a href="http://twitter.com/XaV1uzz"&gt;Xavi Gost&lt;/a&gt;&amp;nbsp;en las cañas de la &lt;a href="http://agilismo.es/index.php?option=com_content&amp;amp;view=article&amp;amp;id=89:coderetreat-en-segovia&amp;amp;catid=35:evento"&gt;primera code retreat española&lt;/a&gt;). De los&amp;nbsp;screencasts ya os hablaré otro día, hoy le toca al libro.&lt;br /&gt;&lt;br /&gt;No voy a haceros un resumen, simplemente os diré que es un libro espectacular. Debería ser de lectura obligatoria en la carrera de informática junto con el &lt;a href="http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1279814638&amp;amp;sr=1-1"&gt;"Clean Code"&lt;/a&gt; de &lt;a href="http://twitter.com/unclebobmartin"&gt;Robert Martin&lt;/a&gt; :) Os recomiendo leerlo (176 páginas que se leen en un plis plas) pero, como es muy probable que mi recomendación no os baste, voy a tiraros la caña para que piquéis escribiendo las frases que más me han impactado. Vamos a ello.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0fjBGCsPOPo/TFGmv-33GxI/AAAAAAAAAHc/9ZUmoAFezAE/s1600/kent_beck_says_instinct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/TFGmv-33GxI/AAAAAAAAAHc/9ZUmoAFezAE/s400/kent_beck_says_instinct.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;[Decidí]Dejar de fingir que programo por instinto&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Mis primeros pasos en esto de la programación fueron así. Hacía lo que yo pensaba (intuía) que estaba bien, pero en realidad no tenía ni idea. No tenía visión global, no pensaba en el usuario, iba a impulsos, no hacía pruebas automáticas, etc. Era un patán, una inconsistencia con patas. Y sin embargo, ¡Me parecía que hacía las cosas bien! Que barbaridad... No tenía ningún tipo de criterio.&lt;br /&gt;Cuando empece a tomar conciencia de mi profesión (y en esto le debo mucho a &lt;a href="http://weblogs.javahispano.org/artesanodeprimera/"&gt;Alfredo Casado&lt;/a&gt;) descubrí lo &lt;b&gt;malo&lt;/b&gt; que era. Avergonzado, decidí &lt;b&gt;empezar a aprender mi oficio&lt;/b&gt; y, no es que ahora sea la hostia, pero estoy a años luz de aquel paquete :D Espero que dentro de unos años vuelva a pensar lo mismo del paquete que os escribe ahora mismo, querrá decir que no me he estancado.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/TGQd10SLP0I/AAAAAAAAAHs/gVLv95o8O4k/s1600/read_more_than_written.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/TGQd10SLP0I/AAAAAAAAAHs/gVLv95o8O4k/s400/read_more_than_written.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;Los programas se leen más a menudo de lo que se escriben.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Espero que esto lo tengamos todos más que asumido. Hay que hacer código legible porque vamos a pasar más tiempo leyéndolo que escribiendo código nuevo. Sin embargo, cuando empiezas en esta profesión no eres consciente. En mi caso, no pensaba en el mantenimiento de mi programa porque, obviamente, una vez que lo hiciera funcionar nadie iba a volver a tocarlo :D Ahora, cada vez que me toca "enseñar" a alguien intento explicarle ésta necesidad y casi siempre me encuentro con lo mismo: "caras de pescao y culos torcios" ¿Nadie explica esto en las empresas o en las universidades?&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_0fjBGCsPOPo/TGQfaCeEvAI/AAAAAAAAAH0/9zEBHTGwE7s/s1600/right_name.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://3.bp.blogspot.com/_0fjBGCsPOPo/TGQfaCeEvAI/AAAAAAAAAH0/9zEBHTGwE7s/s400/right_name.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt; Encontrar el nombre correcto es uno de los momentos más satisfactorios cuando se programa&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Cuando empiezas a pensar en leer código más que en escribirlo se te plantea el problema de cómo nombrar una clase, un método, una variable... ¿Qué nombre representa mejor a esta clase? ¿Es lo suficientemente comunicativo? Para mi, es una de las partes más complicadas de la programación por eso, cuando consigues dar en el clavo, es de las más gratificantes.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/TGQhjf-tSlI/AAAAAAAAAH8/RyP8JOz5ySQ/s1600/think+and+learn.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/TGQhjf-tSlI/AAAAAAAAAH8/RyP8JOz5ySQ/s400/think+and+learn.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;Los programadores deben pensar, comunicar y aprender. Es parte de ser un profesional&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Ser un profesional. Si queremos que nos tomen en serio como sector debemos empezar a tomarnos en serio nosotros mismos. Debemos empezar a ser profesionales. Para Kent Beck, los tres pilares de un programador profesional son &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pensar: Programar es muy difícil. Si haces las cosas a la ligera lo acabaras pagando.&lt;/li&gt;&lt;li&gt;Comunicar: Como ya he dicho antes, debemos empezar a hacer código expresivo, sencillo de leer y entender.&lt;/li&gt;&lt;li&gt;Aprender: No anclarnos, no quedarnos obsoletos. Intentar mantenernos al día.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQiPts1p0I/AAAAAAAAAIE/XKUn_swktWg/s1600/best_code.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQiPts1p0I/AAAAAAAAAIE/XKUn_swktWg/s400/best_code.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;El mejor código para optimizar es el legible, modular y probado&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Me gusta esta frase porque pone por delante de la optimización las pruebas y la legibilidad. Haz que funcione, ya harás que funcione rápido. &lt;br /&gt;Espera a tener pruebas que demuestren que necesitas optimizar y optimiza entonces.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQjRXYmR7I/AAAAAAAAAIM/q4VsiHX6IAA/s1600/code_working.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQjRXYmR7I/AAAAAAAAAIM/q4VsiHX6IAA/s400/code_working.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;Haz que tu código funcione, decide después como debe estructurarse. Si gastas mucho tiempo estructurando tu código antes de escribirlo, tendrás que deshacer todo ese trabajo y rehacerlo de nuevo cuando aprendas algo durante la implementación&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Código que funcione, código que funcione, código que funcione, código que funcione, código que funcione, código que funcione, código que funcione... ¡Hazlo! Deja el análisis y pasa a la acción. Pero recuerda, PIENSA.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQjuj4ZsOI/AAAAAAAAAIU/gZRtOFg3-kY/s1600/setters.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQjuj4ZsOI/AAAAAAAAAIU/gZRtOFg3-kY/s400/setters.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;[sobre los setters]Intenta entender que problema está resolviendo el cliente al asignar la variable.&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Orienta tu código al dominio del cliente, no al contrario. En esta cita en concreto, Beck se refiere a los típicos métodos "set" que únicamente sirven para asignarle el valor a una variable. ¿Por qué necesita tu cliente hacer ese "set"? ¿Qué problema necesita resolver? Cuando empecé a programar &lt;b&gt;nunca&lt;/b&gt; me hacía estas preguntas. Pasaba de mi cliente (Entendido como el programador que utilizaba mi código). El solo hecho de pensar en ellas te asegura un código mucho mejor.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQkDiLBWdI/AAAAAAAAAIc/gYy-URsewMw/s1600/complexity.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/TGQkDiLBWdI/AAAAAAAAAIc/gYy-URsewMw/s400/complexity.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;i&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;Antes de añadir complejidad a un programa, asegurate de que dicha complejidad traerá beneficios&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Manten tu código lo más simple posible. Muchas veces los programadores somos los que añadimos la complejidad a nuestro código sin venir a cuento. Si cuando estás programando te da la impresión de estar creando un código demasiado complejo párate a pensar en por qué está pasando eso. Puede que hayas perdido el foco y estés añadiendo funcionalidad innecesaria.&lt;br /&gt;Algo que me ha ayudado mucho a mantenerme enfocado en el problema a resolver es TDD. ¡A tope con el TDD!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Con esto paro, que me veo comentando el libro entero y eso prefiero hacerlo delante de unas cañas. Yo pago la primera :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6085408660959761687?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6085408660959761687/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/08/libros-implementation-patterns.html#comment-form' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6085408660959761687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6085408660959761687'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/08/libros-implementation-patterns.html' title='Libros: Implementation Patterns'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0fjBGCsPOPo/TEhxpI4C8AI/AAAAAAAAAHE/3QPuem0G1RY/s72-c/implementation_patterns.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-8055986914352493909</id><published>2010-05-10T09:40:00.000+02:00</published><updated>2010-05-10T09:40:18.702+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Principios Ágiles'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Principios ágiles #6</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.microsiervos.com/images/jovencito-frankenstein-tesl.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://www.microsiervos.com/images/jovencito-frankenstein-tesl.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Hace muuuucho tiempo comencé una serie de post sobre &lt;a href="http://plagelao.blogspot.com/search/label/Principios%20%C3%81giles"&gt;los principios ágiles&lt;/a&gt; que hay detrás del manifiesto ágil. No se por qué, dejé de escribir en el blog y la serie se interrumpió. Hoy, a lo &lt;a href="http://www.filmaffinity.com/es/film367692.html"&gt;Fronkonstoin&lt;/a&gt;, voy a devolver la serie a la vida hablando del sexto de ellos (esperemos que dure):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation&lt;/i&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;El método más eficiente y efectivo de comunicar la información a un equipo de desarrollo y entre los miembros del mismo es la conversación cara a cara.&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;Comunicar información&lt;/b&gt;&lt;br /&gt;¿Por qué hay gente que oculta información, que no comparte? Quizás para hacerse indispensables (como bien dice &lt;a href="http://twitter.com/david_bonilla"&gt;David Bonilla&lt;/a&gt; en su entrada sobre &lt;a href="http://sixservix.com/blog/david/2010/03/22/caja-negra/"&gt;cajas negras&lt;/a&gt;). Que no os engañen, no lo son y no lo serán. Lo único que van a conseguir es aislarse de sus colegas de profesión y perderse todas &lt;a href="http://agilismo.es/"&gt;las cosas buenas que hay fuera&lt;/a&gt; de su cubículo. Van a quedarse obsoletos.&lt;br /&gt;&lt;br /&gt;Como decía Newton (aunque la wikipedia dice que fue Chartres):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Si he visto más lejos es porque estoy sentado sobre los hombros de gigantes &lt;/blockquote&gt;&lt;br /&gt;Si es bueno para Newton (vale, Chartres. Creo que se nota que soy físico) es bueno para ti.&lt;br /&gt;&lt;br /&gt;Hay que salir, enriquecerse. Hay que aprender a ser humilde, a compartir tus conocimientos. Hay que enseñar lo que sabes y aprender lo que no sabes. Para todo esto es necesario comunicarse. No te conviertas en una &lt;a href="http://sixservix.com/blog/david/2010/03/22/caja-negra/"&gt;caja negra&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A un equipo de desarrollo&lt;/b&gt;&lt;br /&gt;Como he dicho ya muchas veces en &lt;a href="http://plagelao.blogspot.com/search/label/Principios%20%C3%81giles"&gt;anteriores posts&lt;/a&gt;, es importante que el cliente esté en contacto continuo con el equipo. Que sea capaz de comunicar sus objetivos y preferencias es una parte imprescindible de dicho contacto. Esto implica un nivel de compromiso por parte del cliente en el proyecto muy alto, siendo éste uno de los problemas más comunes en los equipos ágiles (al menos en los que yo conozco). Veamos un dialogo tipo:&lt;br /&gt;&lt;br /&gt;- Hola, ¿vosotros sois ágiles?&lt;br /&gt;- ¡Sí!&lt;br /&gt;- ¿Cómo habéis conseguido involucrar al cliente en el ciclo de desarrollo?&lt;br /&gt;- Respuesta 1: A no, eso no lo hemos conseguido.&lt;br /&gt;- Respuesta 2: Nuestro cliente es interno.&lt;br /&gt;&lt;br /&gt;Mi experiencia personal es del segundo tipo, así que tengo suerte :P Sinceramente, no se cómo resolver el primer caso :( Lo que sí que tengo claro es que, si no consigues que tu cliente se comprometa en el proyecto vas a pasarlas canutas...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Entre un equipo de desarrollo&lt;/b&gt;&lt;br /&gt;Está claro que un equipo de desarrollo, si es sano ,debe estar en continua comunicación. Cuando se trabaja en intervalos de tiempo cortos es necesario que todo el equipo esté sincronizado de forma que se evite el trabajo duplicado. Igualmente, es muy importante que los miembros del equipo se encuentren comodos entre si, de forma que no resulte extraño que alguien pregunte cuando no sabe algo (No hay preguntas tontas ni respuestas estupidas, ya sabéis). Básicamente, es necesario que los miembros del equipo creen relaciones de &lt;b&gt;confianza&lt;/b&gt; que ayuden el desarrollo de su trabajo (Todos trabajamos mejor con amigos alrededor ¿no? Huy, me ha salido muy piruleta esto último...).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conversación cara a cara&lt;/b&gt;&lt;br /&gt;Lo más eficiente no es ni usar el teléfono, ni el e-mail, ni el wave, ni el twitter, ni el skype... lo más eficiente (y por tanto lo deseable) es la comunicación cara a cara.&lt;br /&gt;&lt;br /&gt;Pensad en la cantidad de herramientas que propone el agilismo a los equipos para que mejoren su comunicación. Desde el &lt;b&gt;¡Sienta al equipo junto!&lt;/b&gt; de &lt;a href="http://twitter.com/henrikkniberg"&gt;Henrik kniberg&lt;/a&gt; a las &lt;b&gt;reuniones diarias&lt;/b&gt; de &lt;a href="http://www.scrum.org/scrumguides/"&gt;Scrum&lt;/a&gt; sin olvidarme de algunas de las &lt;a href="http://www.extremeprogramming.org/rules.html"&gt;prácticas XP&lt;/a&gt; como la &lt;b&gt;programación en parejas&lt;/b&gt;. Todas ellas se basan en la comunicación cara a cara, lo que debe dar una idea de su importancia.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;Conclusiones&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;El sexto principio ágil:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implica un alto nivel de &lt;b&gt;compromiso&lt;/b&gt; en el proyecto por parte del cliente&lt;/li&gt;&lt;li&gt;Necesita que se den relaciones de &lt;b&gt;confianza&lt;/b&gt; entre los miembros del equipo (incluido el cliente) &lt;/li&gt;&lt;li&gt;Señala la importancia de la relación directa entre las &lt;b&gt;personas&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;Foto de "portada":  Galería de &lt;a href="http://picasaweb.google.com/lh/photo/juXuc8cuIV37rr__luaslg"&gt;Fernando en Picasa&lt;/a&gt;, bajo licencia Creative Commons.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-8055986914352493909?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/8055986914352493909/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/05/principios-agiles-6.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8055986914352493909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8055986914352493909'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/05/principios-agiles-6.html' title='Principios ágiles #6'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-9023216293257361512</id><published>2010-02-02T11:26:00.000+01:00</published><updated>2010-02-02T11:26:47.294+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Principios Ágiles'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Principios Ágiles #5</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_8ISIK2q5fVw/Rt7fls1KCII/AAAAAAAAJbg/MqFdUep44d4/Comic%20-%20Spiderman%20-01.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="http://lh3.ggpht.com/_8ISIK2q5fVw/Rt7fls1KCII/AAAAAAAAJbg/MqFdUep44d4/Comic%20-%20Spiderman%20-01.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Siguiendo con la &lt;a href="http://plagelao.blogspot.com/search/label/Principios%20%C3%81giles"&gt;temática de los principios ágiles&lt;/a&gt;, hoy voy a hablar del quinto de ellos:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Construye proyectos con profesionales motivados. Dales el entorno y soporte que necesitan, y confia en ellos para que realicen el trabajo.&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;Profesionales motivados&lt;/b&gt;&lt;br /&gt;Cuando una persona encuentra un nuevo trabajo su motivación inicial es bastante alta. Si tiene experiencia previa probablemente haya conseguido un trabajo que le guste con un sueldo acorde a dicha experiencia. Estará contento y querrá demostrar que vale lo que le van a pagar. Si es un junior sin experiencia querrá aprender y prosperar en su carrera profesional. ¿Qué lleva a cualquiera de estas dos personas a desmotivarse? Pues multitud de causas. Falta de dirección (visión de empresa, visión de producto, abandono por parte de la gerencia...), mala cultura empresarial  (mala relación entre compañeros, infraestructura deficiente, falta apoyo al aprendizaje), etc. Imagino que todos hemos pasado por algo así en algún momento, por desgracia.&lt;br /&gt;Una vez que una persona pierde la motivación es muy complicado volver a motivarla, por lo que hay que esforzarse en evitar que ocurra.&lt;br /&gt;¿Cómo se puede evitar la desmotivación?&lt;br /&gt;Dan Pink lo explica muy bien en &lt;a href="http://holykaw.alltop.com/the-3-keys-to-motivation?"&gt;esta presentación&lt;/a&gt; (Si aún no la habéis visto ya estáis tardando :P)&lt;br /&gt;Os escribo las conclusiones para los más vagos (aunque ya os digo que mola mogollón). Básicamente cuenta que, una vez resuelto el tema salarial (está claro que es un factor importante, pero no el único) los factores que ayudan a mantener la motivación son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Autonomía&lt;/b&gt;. Muy en sintonía con la auto-organización de los equipos ágiles ;) Hay que confiar en que el trabajador es capaz de hacer su trabajo por si mismo.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Maestría&lt;/b&gt;. Para los agilistas significa buscar la excelencia técnica (Sea lo que sea eso, que ya lo veremos en futuras entradas)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Propósito&lt;/b&gt;. Contribuir a algo importante. En el caso de la agilidad sería equivalente a contribuir en la mejora del negocio del cliente. Aportar valor y tal :)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Estos tres factores ayudan a mantener la motivación de un profesional (no solo los profesionales técnicos, cualquier tipo de profesional) ya que crea un entorno en el que &lt;b&gt;las personas son importantes y valiosas&lt;/b&gt; (Ya sabéis, personas sobre procesos...).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Crear un entorno y dar el soporte necesario&lt;/b&gt;&lt;br /&gt;Tal y como hemos visto arriba, la cultura empresarial es muy importante a la hora de mantener la motivación.&lt;br /&gt;Es necesario que la empresa proporcione un ambiente que &lt;b&gt;favorezca el aprendizaje&lt;/b&gt;, que ayude a crecer profesionalmente a sus trabajadores, que &lt;b&gt;confíe&lt;/b&gt; en ellos para realizar su trabajo, que les proporcione una infraestructura adecuada a sus necesidades, etc. Es decir, que se dedique a &lt;b&gt;eliminar impedimentos&lt;/b&gt; externos del día a día para que los únicos problemas que se encuentren sus trabajadores sean los propios de su trabajo (Eliminar burocracia inútil, métricas absurdas, controles exhaustivos, etc).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Confianza&lt;/b&gt;&lt;br /&gt;Todo lo anterior se basa en la &lt;b&gt;confianza&lt;/b&gt;. Está claro que un buen profesional sabe hacer su trabajo. No necesita un jefe todo el día detrás suya, interrumpiéndole cada 10 minutos para preguntarle qué tal lo lleva. Ese micro-control, además de desmotivar, reduce la productividad.&lt;br /&gt;Sin embargo, hay que tener claro que no todo depende de área de gestión, el empleado debe responder. Como dijo el &lt;a href="http://es.wikipedia.org/wiki/T%C3%ADa_May_y_T%C3%ADo_Ben#Benjamin_Parker"&gt;Tío Ben&lt;/a&gt; :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Un gran poder conlleva una gran responsabilidad&lt;/blockquote&gt;&lt;br /&gt;Si queremos que nuestro trabajo mejore, que se nos trate como a verdaderos profesionales y que se confíe en nosotros, debemos responder con autentica profesionalidad. Si nuestra empresa fomenta el aprendizaje debemos aprovecharlo y mejorar. Si nuestra empresa nos permite autonomía debemos comprometernos. No podemos desaprovechar las (¿pocas?) oportunidades que se nos ofrecen.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;Conclusiones&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;El quinto principio ágil:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Busca fomentar la &lt;b&gt;confianza&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Advierte que lo importante son las &lt;b&gt;personas&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Pide que se &lt;b&gt;eliminen los impedimentos&lt;/b&gt; externos&lt;/li&gt;&lt;li&gt;Implica &lt;b&gt;responsabilidad y profesionalidad&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;b&gt;NOTA&lt;/b&gt;: Si os interesa más el tema de la motivación de un equipo os recomiendo el libro &lt;a href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-Second/dp/0932633439"&gt;Peopleware&lt;/a&gt;. Yo aún no lo he podido leer, pero &lt;a href="http://jmbeas.iexpertos.com/"&gt;José Manuel Beas&lt;/a&gt; lo recomendó en la &lt;a href="http://plagelao.blogspot.com/2009/12/10-encuentro-agile-madrid-principios.html"&gt;reunión que tuvimos sobre principios ágiles&lt;/a&gt; al hablar sobre este principio. El libro se lo dejó a &lt;a href="http://weblogs.javahispano.org/artesanodeprimera/"&gt;Alfredo Casado&lt;/a&gt;, que nos ha ido contando algunas de las cosillas que ha ido leyendo. La verdad es que tiene muy buena pinta :)&lt;br /&gt;&lt;br /&gt;Foto de "portada":  Galería de &lt;a href="http://picasaweb.google.com/lh/photo/juXuc8cuIV37rr__luaslg"&gt;Fernando en Picasa&lt;/a&gt;, bajo licencia Creative Commons.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-9023216293257361512?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/9023216293257361512/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/02/principios-agiles-5.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/9023216293257361512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/9023216293257361512'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/02/principios-agiles-5.html' title='Principios Ágiles #5'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_8ISIK2q5fVw/Rt7fls1KCII/AAAAAAAAJbg/MqFdUep44d4/s72-c/Comic%20-%20Spiderman%20-01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6614270375780177936</id><published>2010-01-27T23:31:00.009+01:00</published><updated>2010-02-08T10:37:38.556+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Burndown'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><title type='text'>Sprint #2 - Aceptando el riesgo</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm3.static.flickr.com/2568/3823087332_9bea0b5f9c_o.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://farm3.static.flickr.com/2568/3823087332_9bea0b5f9c_o.jpg" width="133" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span id="goog_1264624437077"&gt;&lt;/span&gt;&lt;span id="goog_1264624437078"&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;Os presento la segunda planificación del ScrumBlog. Si no leistéis la &lt;a href="http://plagelao.blogspot.com/2010/01/sprint-1-planificando-enero.html"&gt;primera planificación&lt;/a&gt; podéis echarle un ojo ahora (Allí explico un poco los roles de Scrum y las fases de la planificación). Doy eso por sabido y me meto directamente a planificar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Planificación de la iteración&lt;/b&gt;&lt;br /&gt;Voy a intentar que todas las iteraciones duren lo mismo, por lo que esta también durará 15 días. Quedan las fechas del sprint como siguen:&lt;br /&gt;Planificación - Miércoles 27 de Enero&lt;br /&gt;Inicio de Sprint - Jueves 28 de Enero&lt;br /&gt;Fin de Sprint - Jueves 11 de Febrero&lt;br /&gt;Retrospectiva - Viernes 12 de Febrero&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Disponibilidad del equipo&lt;/b&gt;&lt;br /&gt;Tal y como señale en la retrospectiva, la velocidad del equipo es de 11 puntos de historia cada 15 días. Dado que la disponibilidad del equipo es la misma que en la iteración anterior, fijamos los puntos de historia en 11.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Estimación de las historias&lt;/b&gt;&lt;br /&gt;Veamos el estado de la pila de producto:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0fjBGCsPOPo/S2CziY8MGSI/AAAAAAAAAGY/m4KuASjMHBM/s1600-h/PilaSprint2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_0fjBGCsPOPo/S2CziY8MGSI/AAAAAAAAAGY/m4KuASjMHBM/s400/PilaSprint2.png" width="281" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;El equipo ha estimado las historias pero, si os fijáis bien, la historia de FitNesse aparece con un símbolo de exclamación. Esto es debido a que dicha historia tiene un factor de riesgo alto debido al desconocimiento del equipo en la tecnología a utilizar. La idea es hacer un ScreenCast cuando nunca he hecho ninguno. Es muy probable que mi estimación sea mala pero, es la mejor que puedo hacer.&lt;br /&gt;¿Qué hacemos con este tipo de historias? Existen varias alternativas. Las que yo considero más adecuadas son las siguientes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fijar un limite de tiempo a dedicar a dicha tarea (en este caso 4 horas) de forma que, si mientras estamos investigando como realizar dicha historia nos damos cuenta de que la complejidad es mucho mayor que la que estimamos, dejemos dicha historia para la siguiente iteración.&lt;/li&gt;&lt;li&gt;Dividir la historia en dos. Por un lado tendríamos una historia para la formación del equipo y otra historia para la ejecución.&lt;/li&gt;&lt;/ul&gt;En este caso, tras hablarlo con el dueño de producto optamos por la primera de las opciones (algo más arriesgada). Si al final se lía la cosa el cliente como el equipo tendrán claro el por qué.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Selección de las historias del sprint&lt;/b&gt;&lt;br /&gt;Estas 4 historias suman 12 puntos y solo tenemos 11 disponibles. Volvemos a encontrarnos con que no entran todas en el sprint. Sin embargo, esta vez, después de acaloradas discusiones entre el equipo y el dueño de producto, se decide aumentar el nivel de compromiso del equipo para que entren las cuatro historias en la iteración, por lo que las proximas entradas del blog serán:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Principios ágiles #5&lt;/b&gt;. Importancia de la motivación de, la confianza hacia y el apoyo a las personas involucradas en el proyecto.&lt;/li&gt;&lt;li&gt;&lt;b&gt;How To: Primeros pasos con FitNesse&lt;/b&gt;. Mi primer ScreenCast. Espero que no sea el último :D Además, este ScreenCast lo añadiré al resumen de la reunión de Madrid para completarlo un poco más.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Principios ágiles #6&lt;/b&gt;. Comunicación cara a cara como método más eficiente y efectivo para que fluya la información.&lt;/li&gt;&lt;li&gt;&lt;b&gt;How To: Mockeando llamadas asíncronas con easymock&lt;/b&gt;. ¿Os habéis planteado como hacer TDD con llamadas asíncronas? Intentaremos explicarlo en esta entrada.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Burndown&lt;/b&gt;&lt;br /&gt;Por último, falta el burndown de la iteración. Iré actualizándolo regularmente con los avances :D&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img src="https://spreadsheets.google.com/oimg?key=0AhMrDc6yU3NddEdqMWh2emlYN1ROTFFmZEYwT3ctYkE&amp;amp;oid=2&amp;amp;v=1264626205290" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Reunión Diaria (Scrum diario) del 28 de Enero: Al ser la primera, lo único que se hace es que cada miembro del equipo elija la tarea en la que quiere trabajar. Voy a intentar escribir la entrada sobre el quinto principio ágil. Al menos el primer borrador&lt;/li&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 29 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Comence con el quinto principio, pero avancé menos de lo que esperaba. Me quedan un par de horitas todavía&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy espero terminar la entrada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 30 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Nada :( Las cañas de los viernes pudieron al blog&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy espero terminar la entrada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 31 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Pues hice un poquito más de la entrada de los principios. pero aún le falta una horita&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Nada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 1 de Febrero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Pues jugar al COD. Menudo vicio.&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy acabo la entrada sí o sí&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 2 de Febrero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? ¡Terminé la entrada!&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Pues investigar un poco como va lo de los screencasts&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 3 de Febrero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Pues al final no me dio tiempo a hacer nada.&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Creo que tampoco me va a dar tiempo a hacer nada, pero igual preparo el guión del screencast&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 4 de Febrero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Terminé el guión del screencast.&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy me voy de concierto, así que nada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 5 de Febrero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Nada&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy voy a ver a los Arctic Monkeys, así que nada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 8 de Febrero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer (y antes de ayer y antes de antes de ayer)? Pues no pude ponerme con el screencast porque vinieron invitados a casa pero al menos saqué tiempo para avanzar con el sexto principio ágil. Le queda una horia más a esa entrada.&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Quiero intentar el screencast, a ver si tengo tiempo.&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;Foto de "portada": &amp;nbsp;&lt;/span&gt;&lt;a href="http://www.flickr.com/photos/71284893@N00/3823087332/" style="color: #5588aa; text-decoration: none;"&gt;&lt;span style="font-size: x-small;"&gt;Galería de boo_licious en Flickr&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;, bajo licencia Creative Commons.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6614270375780177936?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6614270375780177936/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/01/sprint-2-aceptando-el-riesgo.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6614270375780177936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6614270375780177936'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/01/sprint-2-aceptando-el-riesgo.html' title='Sprint #2 - Aceptando el riesgo'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_0fjBGCsPOPo/S2CziY8MGSI/AAAAAAAAAGY/m4KuASjMHBM/s72-c/PilaSprint2.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-4701577744895328427</id><published>2010-01-25T20:25:00.003+01:00</published><updated>2010-01-25T20:30:52.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Retrospectiva'/><title type='text'>Retrospectiva #2</title><content type='html'>&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img height="165" src="https://spreadsheets.google.com/oimg?key=0AhMrDc6yU3NddEdqMWh2emlYN1ROTFFmZEYwT3ctYkE&amp;amp;oid=1&amp;amp;v=1262806145692" width="200" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Bueno, pues parece que hemos terminado la &lt;a href="http://plagelao.blogspot.com/2010/01/sprint-1-planificando-enero.html"&gt;primera iteración del ScrumBlog&lt;/a&gt; :D Vamos a "retrospectivar" un rato sobre dicha iteración.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Por donde empezamos?&lt;/b&gt;&lt;br /&gt;Vamos a empezar calculando la velocidad del equipo y su eficacia. Para ello vamos a basarnos en el burndown de la iteración.&amp;nbsp;Podemos ver que &lt;b&gt;la velocidad del equipo se corresponde a 11 puntos de historia&lt;/b&gt; y su eficacia es de un 100%. Estos datos nos servirán como base para la próxima planificación.&lt;br /&gt;&lt;br /&gt;Parece que ha sido una buena iteración ¿no? Veamos que opina el equipo (Como ya hicimos en la &lt;a href="http://plagelao.blogspot.com/2010/01/retrospectiva-1.html"&gt;retrospectiva anterior&lt;/a&gt;, vamos a hacer a basarnos en 3 preguntas para llevar la retro).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Qué nos ha gustado de este sprint y queremos seguir haciendo? &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El compromiso. Ha sido "duro", pero ha merecido la pena.&lt;/li&gt;&lt;li&gt;Por fin hemos metido una historia técnica. No se si os habrá gustado, a mi sí :D. Me parece una idéa muy interesante, la verdad. Además, el tener una historia técnica me ha servido para iniciarme en git.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;¿Qué estamos haciendo mal? &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La priorización de las historias. No puede ser que la segunda historia más prioritaria no pueda empezarse hasta un par de días antes del final de la iteración&lt;/li&gt;&lt;li&gt;Aunque hemos aumentado la tasa de entradas, sigue siendo un poco baja.&lt;/li&gt;&lt;li&gt;Los Scrum diarios no han sido tan diarios :D Ha sido un poco despendole...&lt;/li&gt;&lt;li&gt;La plantilla del blog no permite leer bien el código :(&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Acciones&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Las historias bloqueantes hay que priorizarlas teniendo en cuenta dicho bloqueo.&lt;/li&gt;&lt;li&gt;Fijar una hora para realizar el Scrum diario. Si es posible, por la mañana&lt;/li&gt;&lt;li&gt;Modificar la plantilla del blog para que el código se pueda leer decentemente.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;¡Que poquitos problemas! :D Se nota que esta primera iteración ha salido bien. Veremos las siguientes...&lt;br /&gt;&lt;b&gt;Si queréis proponerme algún tema para la próxima iteración dejad un comentario en la entrada antes de la planificación de mañana :D&lt;/b&gt; De momento, en lo más alto de la pila están el quinto principio ágil y una introducción a FitNesse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-4701577744895328427?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/4701577744895328427/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/01/retrospectiva-2.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4701577744895328427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4701577744895328427'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/01/retrospectiva-2.html' title='Retrospectiva #2'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-6589191854611988493</id><published>2010-01-21T17:06:00.000+01:00</published><updated>2010-01-21T17:06:59.912+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pruebas de aceptación'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile-Spain'/><category scheme='http://www.blogger.com/atom/ns#' term='FitNesse'/><category scheme='http://www.blogger.com/atom/ns#' term='Concordion'/><title type='text'>11º Encuentro Agile-Madrid. Definition of Done (Pruebas de aceptación automatizadas)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://sites.google.com/site/agilemadrid/_/rsrc/1242533195481/config/app/images/customLogo/customLogo.gif?revision=4" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://sites.google.com/site/agilemadrid/_/rsrc/1242533195481/config/app/images/customLogo/customLogo.gif?revision=4" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Entre todos los asistentes a la reunión hemos creado &lt;a href="http://sites.google.com/site/agilemadrid/reuniones/2010-01-19"&gt;un resumen en el sitio google del grupo&lt;/a&gt;. &lt;b&gt;Leedlo&lt;/b&gt; antes de continuar :D&lt;br /&gt;&lt;br /&gt;Dado que el resumen ya está hecho, voy a escribir un poco qué supuso para mi la reunión.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Preparativos&lt;/b&gt;&lt;br /&gt;En un principio, mi labor para esta reunión era preparar un ejemplo de automatización de pruebas de aceptación en &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt; y presentarlo (Tengo que decir que, aunque conocía &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt;, nunca lo había usado y, esta reunión me ha servido para aprender un poco de que va ese rollo :D Me ha gustado bastante y puede que para la próxima iteración del blog escriba un "How To" sobre &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt;).&lt;br /&gt;Unos días antes de la reunión, &lt;a href="http://jmbeas.iexpertos.com/"&gt;José Manuel Beas&lt;/a&gt; me dijo que no iba a poder ir y me pidió que me encargarse yo de la charla. Me cedió tanto la presentación como el ejemplo de &lt;a href="http://www.concordion.org/"&gt;Concordion&lt;/a&gt; que iba a presentar.&lt;br /&gt;No estoy acostumbrado a hablar en público y soy bastante tímido, así que me puse un poco nervioso. Aún así, el tema era muy chulo y me apetecía hablar de él, por lo que acepté :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;El encuentro&lt;/b&gt;&lt;br /&gt;Acudimos unas 20 personas, entre las que había bastantes caras nuevas (lo que aumentó el miedo escénico :D). No se lo que piensan los demás, pero para mi la reunión fue bastante entretenida (Me sentí bastante cómodo mientras casi improvisaba la presentación) y la gente debatió bastante. Como ya he dicho, el &lt;a href="http://sites.google.com/site/agilemadrid/reuniones/2010-01-19"&gt;resumen podéis leerlo en el sitio del grupo&lt;/a&gt;, pero os apunto las conclusiones a las que llegamos por si sois un poco vagos :P&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Las pruebas de aceptación deben comprobar las reglas de negocio (Qué y no cómo).&lt;/li&gt;&lt;li&gt;Las pruebas de aceptación deben producirse mediante la colaboración de cliente y equipo (Negocio y desarrollo juntos).&lt;/li&gt;&lt;li&gt;Es deseable que las pruebas de aceptación se escriban antes que el desarrollo, ya que ayuda a focalizar dicho desarrollo.&lt;/li&gt;&lt;li&gt;Utilizar un framework que ayude a automatizar las pruebas de aceptación es deseable.&lt;/li&gt;&lt;li&gt;Entre &lt;a href="http://www.concordion.org/"&gt;Concordion&lt;/a&gt; y &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt; no sabemos con cual quedarnos. Ambos tienen aspectos positivos y negativos. Probadlos y decidid :D&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Futuro&lt;/b&gt;&lt;br /&gt;El haber dado esta charla me ha enseñado que no es tan duro hablar delante de la gente. Te puede salir mejor o peor, pero lo importante es compartir. La verdad es que me he animado bastante y creo que voy a proponer alguna charla más e, incluso, algún taller (A ver si hablo con &lt;a href="http://planeta.javahispano.org/artesanodeprimera/"&gt;Alfredo Casado&lt;/a&gt; y organizamos algo de TDD, que ya me lo ha dicho un par de veces. &lt;a href="http://jmbeas.iexpertos.com/"&gt;José Manuel Beas&lt;/a&gt; quiere montar uno sobre &lt;a href="http://www.concordion.org/"&gt;Concordion&lt;/a&gt; y creo que estaría muy bien).&lt;br /&gt;Además, después de haber entrado un poco más a fondo en las pruebas de aceptación, queremos empezar a utilizar algún framework para automatizar las pruebas de aceptación en &lt;a href="http://www.ipsa.es"&gt;mi trabajo&lt;/a&gt;. Yo me decanto por &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt;, que me parece más sencillo de cara a un usuario no técnico, pero algún que otro compañero prefiere &lt;a href="http://www.concordion.org/"&gt;Concordion&lt;/a&gt;. ¿Que haremos? De momento creo que vamos a probar &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt; porque me voy a encargar yo de hacer esas pruebas :D Ya os contaré nuestros avances y nuestros problemas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Animaos y venir a las reuniones, a los coding-dojos, a los talleres, etc. Son gratis y de verdad que merecen la pena.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-6589191854611988493?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/6589191854611988493/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/01/11-encuentro-agile-madrid-definition-of.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6589191854611988493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/6589191854611988493'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/01/11-encuentro-agile-madrid-definition-of.html' title='11º Encuentro Agile-Madrid. Definition of Done (Pruebas de aceptación automatizadas)'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-8322371160749177102</id><published>2010-01-17T01:50:00.096+01:00</published><updated>2010-02-23T10:54:10.930+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><category scheme='http://www.blogger.com/atom/ns#' term='dirigidoportests'/><category scheme='http://www.blogger.com/atom/ns#' term='SOLID'/><title type='text'>How To: Contract Tests (Pruebas de Contrato)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_imQWYxBWypw/SDIwKyjc7BI/AAAAAAAAMY4/0hwONDMl7NI/s1600/pile_2[1].jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_imQWYxBWypw/SDIwKyjc7BI/AAAAAAAAMY4/0hwONDMl7NI/s200/pile_2[1].jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;El diseño de un API es un problema bastante complejo. Hay que tener multitud de cosas en mente (modularidad, escalabilidad, extensibilidad, usabilidad, simpleza, etc). Si os interesa el tema os recomiendo este&amp;nbsp;&lt;a href="http://www.amazon.com/Practical-API-Design-Confessions-Framework/dp/1430209739"&gt;libro de Jaroslav Tulach&lt;/a&gt; (uno de los arquitectos de NetBeans). Es un libro difícil, como el problema que aborda, pero muy bueno.&lt;br /&gt;En dicho libro conocí el concepto de &lt;i&gt;Contract Tests&lt;/i&gt;(Pruebas de Contrato). Sin embargo, aunque me pareció una buena idea, no le dí mucha importancia en aquel momento (hace un año, aproximadamente). Antes de fin de año,  J.B. Rainsberger twitteaba &lt;a href="http://twitter.com/jbrains/status/7159195678"&gt;el vídeo de Ben Rady escribiendo &lt;i&gt;Contract Tests&lt;/i&gt; en Junit 4&lt;/a&gt; y todo el tema volvió a mi cabeza. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Qué son las Pruebas de Contrato?&lt;/b&gt;&lt;br /&gt;J.B. Rainsberger lo explica en &lt;a href="http://www.jbrains.ca/permalink/281"&gt;este artículo&lt;/a&gt; (Que escribió en el 2005, menudo crack). Básicamente, las Pruebas de Contrato son una batería de pruebas que especifican el comportamiento de un determinado interfaz (o clase abstracta). Cualquier implementación de dicho interfaz (o cualquier clase derivada de la clase abstracta) debe superar dicha batería de pruebas para ser considerada correcta.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Qué problema resuelven las Pruebas de Contrato?&lt;/b&gt;&lt;br /&gt;Normalmente, cuando se crea un interfaz (o una clase abstracta) es para que tenga varias implementaciones (o clases derivadas). Sucede lo mismo con un API, puede tener más de una implementación pero un único interfaz.&lt;br /&gt;Si no se define un comportamiento general, es posible que las implementaciones no sean intercambiables entre sí, violando así el &lt;a href="http://en.wikipedia.org/wiki/Liskov_substitution_principle"&gt;principio de sustitucion de Liskov&lt;/a&gt; y, lo que es más importante, dejando a los clientes de dicho interfaz con el culo al aire. Dicho comportamiento es lo que se define como contrato. Podemos escribir dicho contrato como un documento más, con los problemas que ello conlleva (Código y documentación desincronizada, interpretaciones subjetivas de lo escrito, etc) o podemos escribir dicho contrato mediante pruebas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Por qué me interesan las Pruebas de Contrato?&lt;/b&gt;&lt;br /&gt;Imagino que estaréis pensando:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Vaya chapa nos está metiendo el Peña. &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Así que voy a contaros un poco mi motivación. Mi pensamiento tras ver el &lt;a href="http://www.benrady.com/2009/12/contract-tests-in-junit-4.html"&gt;vídeo de Ben Rady&lt;/a&gt; fue:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;¡Coño! Que bueno. Si lo hubiera aplicado antes a mi proyecto ahora sería mucho más feliz. &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;El proyecto actual de mi equipo consiste en diseñar (e implementar, testear, etc. Nada de waterfallismo :D )un API y crear varias implementaciones de dicho API (y diseñarlas, testearlas, etc. :D ).&lt;br /&gt;Cuando comenzó el proyecto no le dimos importancia a esto de las Pruebas de Contrato (Sobre todo por desconocimiento). Tampoco pasaba nada, solo existía una implementación para la cual teníamos una batería de pruebas.&lt;br /&gt;Más adelante añadimos una segunda implementación y, en lugar de convertir los test de la anterior implementación en Pruebas de Contrato, hicimos un corta-pega del demonio (Me da vergüenza escribir esto, pero de los errores se aprende).&lt;br /&gt;No os recomiendo este enfoque :D Las pruebas huelen a &lt;a href="http://c2.com/cgi/wiki?DontRepeatYourself"&gt;DRY&lt;/a&gt; que tiran de espaldas.&lt;br /&gt;Además, aceptamos pequeños cambios en el comportamiento de las implementaciones ya que, al definir el contrato en un wiki en lugar de hacerlo con pruebas, malinterpretamos ciertos detalles (algunas veces a propósito :S ).&lt;br /&gt;Le he planteado al equipo que, las nuevas pruebas funcionales que creemos sean Pruebas de Contrato, a ver si conseguimos eliminar duplicaciones.&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;NOTA: Tengo que aclarar que estoy muy contento con la marcha del proyecto :D Lo que pasa es que mi nivel de exigencia aumenta cada mes. De hecho, nuestro equipo es famoso por lo mal que habla de su propio código, estando dicho código bastante por encima de la media. Somos un equipo muy autoexigente y muy autocrítico.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Un caso práctico: El interfaz &lt;i&gt;Collection&lt;/i&gt; con JUnit 4&lt;/b&gt;&lt;br /&gt;Después de todo este rollo, vamos a la chicha.&lt;br /&gt;&lt;br /&gt;Vamos a hacer unas Pruebas de Contrato para el interfaz &lt;i&gt;Collection&lt;/i&gt; (No vamos a hacer el contrato entero porque nos puede dar un chungo).&lt;br /&gt;Normalmente, las Pruebas de Contrato se añaden al proyecto que contiene los intefaces a definir. Las clases que ejecutan las pruebas para cada implementación se añaden al proyecto que contiene dicha implementacion. Como yo no tengo acceso a dichos proyectos, me he creado uno propio. He metido todas las clases en ese proyecto, pero he hecho una separación en paquetes para que entendáis un poco la distribución de las clases. Podéis verlo &lt;a href="http://github.com/plagelao/Ejemplos-Plagelao/tree/master/EjempoContractTests"&gt;aquí&lt;/a&gt; (Es de NetBeans. A mi me gusta mucho, pero Xavi Gost me diría que madurara... Aún así, es tan sencillito que no creo que de problemas :D ).&lt;br /&gt;&lt;br /&gt;Lo primero es crear una &lt;b&gt;clase abstractra&lt;/b&gt; que contenga todos los test de contrato y un método abstracto que devuelva un objeto &lt;i&gt;Collection&lt;/i&gt;. Yo he hecho la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/279081.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Como podéis ver, el método &lt;i&gt;nuevaColeccion&lt;/i&gt; se llama en el &lt;i&gt;setUp&lt;/i&gt; para no tener que escribirlo en cada prueba. Además, dicho &lt;i&gt;setUp&lt;/i&gt; es &lt;b&gt;&lt;i&gt;final&lt;/i&gt;&lt;/b&gt; para que no pueda ser sobreescrito por las clases hijas.&lt;br /&gt;&lt;br /&gt;Si ahora lanzamos las pruebas obtenemos el siguiente resultado:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/S1JJ3x9l9KI/AAAAAAAAAFc/6OfPHLGDGKg/s1600-h/ningunTest.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/S1JJ3x9l9KI/AAAAAAAAAFc/6OfPHLGDGKg/s400/ningunTest.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Si os fijáis, la clase abstracta que hemos creado no termina en &lt;i&gt;Test&lt;/i&gt;, así que &lt;i&gt;JUnit 4&lt;/i&gt; no la tiene en cuenta a la hora de ejecutar las pruebas.&lt;br /&gt;&lt;br /&gt;Ahora vamos a probar las implementaciones. Empezamos por &lt;i&gt;ArrayList&lt;/i&gt;, para lo que añadimos la siguiente clase:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/279089.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Lo mismo para &lt;i&gt;HashSet&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/279090.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Si ahora pasamos las pruebas obtenemos:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0fjBGCsPOPo/S1JP-utF8CI/AAAAAAAAAFk/05hk2maNWls/s1600-h/testsVerde.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_0fjBGCsPOPo/S1JP-utF8CI/AAAAAAAAAFk/05hk2maNWls/s400/testsVerde.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;¡Bien! Pasan todas las pruebas :D Eso quiere decir que ambas implementaciones cumplen con el contrato y todos somos un poco más felices.&lt;br /&gt;Hay que destacar que las pruebas se están contabilizando en cada clase de prueba de cada implementación (Todas las Pruebas de Contrato se ejecutan en &lt;i&gt;ArrayListTest&lt;/i&gt; y en &lt;i&gt;HashSetTest&lt;/i&gt;). A la hora de contabilizar pruebas la clase base no existe :D&lt;br /&gt;&lt;br /&gt;Vamos a ponérselo un poco más difícil a las implementaciones. Añadimos la siguiente prueba a la clase que define el contrato:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/279095.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Si ahora pasamos las pruebas de las implementaciones obtenemos:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/S1JREI_07PI/AAAAAAAAAFs/h2VIzNEfhy4/s1600-h/testRojo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/S1JREI_07PI/AAAAAAAAAFs/h2VIzNEfhy4/s640/testRojo.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;¿Rojo? mmmmm Huele a violación de los &lt;a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod"&gt;principios S.O.L.I.D.&lt;/a&gt;&lt;br /&gt;La implementación &lt;i&gt;HashSet&lt;/i&gt; no supera la nueva prueba que hemos añadido. Hemos definido un contrato demasiado estricto y algunas implementaciones no lo soportan.&lt;br /&gt;En este caso, no podemos suponer lo que hará una colección cuando se le añada el mismo objeto varias veces. Depende de la clase derivada. Claramente, las implementaciones de &lt;i&gt;Collection&lt;/i&gt; violan el principio de Liskov :D&lt;br /&gt;&lt;br /&gt;Podríamos seguir añadiendo pruebas y tal, pero imagino que ya ha quedado más o menos claro ¿No? Ya veis que no sería muy complicado organizar las pruebas que ya tenemos para obtener unas cuantas Pruebas por Contrato. Espero poder hacerlo en mi equipo :D (Me temo que esto es deuda técnica).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Conclusiones&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Las Pruebas de Contrato son una especificación del API.&lt;/li&gt;&lt;li&gt;Las Pruebas de Contrato se pueden usar como documentación del interfaz. La documentación escrita en prosa "a la antigua usanza" es mucho más fácil de malinterpretar.&lt;/li&gt;&lt;li&gt;El contrato puede ser todo lo estricto que queramos. Hay que aplicar el sentido común para saber cuando parar.&lt;/li&gt;&lt;li&gt;Mediante Pruebas de Contrato eliminamos duplicidad de código de test. Las pruebas hay que seguir escribiéndolas tengamos o no Pruebas de Contrato y, escribir las mismas (o parecidas) en cada una de las implementaciones es una perdida de tiempo y un infierno a la hora de mantenerlas (lo digo por experiencia).&lt;/li&gt;&lt;li&gt;Definir unas Pruebas por Contrato puede ayudarnos a descubrir problemas de diseño en el API. Una violación del principio de Liskov es un problema en el API&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Esto es todo amigos. Espero que os haya gustado mi primera entrada técnica :D&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Foto de "portada": Galería de &lt;/span&gt;&lt;a href="http://picasaweb.google.com/lh/photo/grqtpLR5B_HXRu5L9YpSbw"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Mark&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, bajo licencia Creative Commons&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-8322371160749177102?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/8322371160749177102/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/01/contract-tests-pruebas-de-contrato.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8322371160749177102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/8322371160749177102'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/01/contract-tests-pruebas-de-contrato.html' title='How To: Contract Tests (Pruebas de Contrato)'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_imQWYxBWypw/SDIwKyjc7BI/AAAAAAAAMY4/0hwONDMl7NI/s72-c/pile_2[1].jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-2986056893103041221</id><published>2010-01-13T21:50:00.014+01:00</published><updated>2010-01-13T21:59:08.520+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Principios Ágiles'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Principios Ágiles #4</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm4.static.flickr.com/3186/3042777307_8ee504d469_m.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://farm4.static.flickr.com/3186/3042777307_8ee504d469_m.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;Siguiendo con la &lt;a href="http://plagelao.blogspot.com/search/label/Principios%20%C3%81giles"&gt;temática de los principios ágiles&lt;/a&gt;, hoy voy a hablar del cuarto de ellos:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;blockquote&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;Business people and developers must work together daily throughout the project.&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;La gente de negocio y los desarrolladores deben trabajar de forma conjunta diariamente a lo largo del proyecto.&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;¿Gente de Negocio y gente de desarrollo?&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="font-weight: normal;"&gt;Cuando se comienza un nuevo proyecto es lógico que el equipo de desarrollo (encargado de implementar una solución) no sea experto en el negocio del cliente. Por otro lado, un experto de negocio (encargado de explicar las reglas de negocio) casi nunca se interesará por el aspecto técnico (desde luego, ninguno que yo conozca). Ambos mundos están bastante separados, al menos sobre el papel, lo que provoca que sean incapaces de entenderse. No poseen un lenguaje común.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;¿Por qué trabajar juntos de forma conjunta?&lt;/b&gt;&lt;br /&gt;Obligar a que ambos mundos trabajen juntos de forma continua provoca que la separación entre ambos se reduzca. Obviamente, el objetivo no es que un desarrollador se convierta en un experto de negocio ni viceversa. Siempre existirá una cierta separación. El objetivo es construir un &lt;b&gt;lenguaje común&lt;/b&gt; mediante el cual ambos grupos consigan entenderse y resolver sus dudas. Actualmente en el mundo ágil, dicho lenguaje común se plasma sobre todo en las&amp;nbsp;&lt;b&gt;pruebas de aceptación&lt;/b&gt;, definidas por la gente de negocio con ayuda del equipo técnico&amp;nbsp;(Si queréis saber más sobre pruebas de aceptación pasaos por la &lt;a href="http://sites.google.com/site/agilemadrid/reuniones/2010-01-19"&gt;próxima reunión de Agile-Spain Madrid&lt;/a&gt;).&lt;br /&gt;Cuando ambos grupos empiezan a colaborar se empieza a reducir la brecha que los separa. Comienza a aparecer un s&lt;b&gt;entimiento de equipo&lt;/b&gt; y una &lt;b&gt;visión global del producto&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Por qué diariamente?&lt;/b&gt;&lt;br /&gt;No vale con reuniones esporádicas, debe ser un esfuerzo continuo.&amp;nbsp;No vale que los grupos se reunan una vez al mes para tratar ciertos temas y que después cada uno se marche a su cubículo. Si un desarrollador se encuentra con que tiene que tomar una decisión de negocio debe acudir a los expertos de negocio para que se la resuelvan. Si un experto de negocio quiere conocer que tal va el desarrollo de una funcionalidad X debe acudir al desarrollador para que le informe. Obviamente, esta colaboración no se puede llevar a cabo sin&amp;nbsp;&lt;b&gt;confianza&amp;nbsp;&lt;/b&gt;y&amp;nbsp;&lt;b&gt;transparencia&lt;/b&gt;. No me sirve de nada que los desarrolladores estén siempre disponibles para el experto de negocio pero le mientan sobre el estado del proyecto.&lt;br /&gt;Este trabajo diario no es sencillo de llevar a cabo. Muchas veces los desarrolladores no queremos levantar la cabeza del ordenador. Otras muchas los expertos de negocio no tienen tiempo (ni ganas) de reunirse con los "frikis". Por eso, es necesario un &lt;b&gt;compromiso &lt;/b&gt;por ambas partes. Si alguno de los dos no se compromete se deja de ser ágil.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;Conclusiones&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;El cuarto principo ágil:&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Busca que la gente de &amp;nbsp;negocio y la gente técnica hablen un lenguaje común que favorezca el entendimiento.&lt;/li&gt;&lt;li&gt;Refuerza el sentimiento de equipo aumentando la confianza entre sus componentes.&lt;/li&gt;&lt;li&gt;Implica compromiso.&lt;/li&gt;&lt;li&gt;Obliga a la transparencia.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;Imagen de "portada": Galería de &lt;/span&gt;&lt;a href="http://www.flickr.com/photos/thinkpublic/3042777307/"&gt;&lt;span style="font-size: x-small;"&gt;thinkpublic&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;, bajo licencia Creative Commons.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-2986056893103041221?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/2986056893103041221/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/01/principios-agiles-4.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2986056893103041221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/2986056893103041221'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/01/principios-agiles-4.html' title='Principios Ágiles #4'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3186/3042777307_8ee504d469_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-7510909266212826936</id><published>2010-01-06T21:32:00.021+01:00</published><updated>2010-01-21T17:39:51.585+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Burndown'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><title type='text'>Sprint #1 - Planificando enero</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm3.static.flickr.com/2088/2512525538_00e669f39e_o.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://farm3.static.flickr.com/2088/2512525538_00e669f39e_o.jpg" width="150" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Como ya escribí en la retrospectiva, voy a intentar aplicar una especie de Scrum al blog. Tanto &lt;a href="http://twitter.com/jmbeas"&gt;José Manuel Beas&lt;/a&gt; como &lt;a href="http://twitter.com/Bendem"&gt;Juan Quijano&lt;/a&gt; apuntaron en los comentarios de la &lt;a href="http://plagelao.blogspot.com/2010/01/retrospectiva-1.html"&gt;anterior entrada&lt;/a&gt; los problemas que veían al aplicar Scrum para un blog. Es cierto que Scrum está orientado a productos desarrollados por equipos de varias personas y que no cuadra muy bien con un blog personal. Aún así, se que me va a servir para mejorar el ritmo de entradas, que es lo que busco. Además, los post de planificación y retrospectivas pueden ayudar a entender la parte de gestión de Scrum (que no es que sea muy difícil) A ver que tal sale, probablemente sea un "fail", pero voy a probar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Roles de Scrum&lt;/b&gt;&lt;br /&gt;En Scrum hay basicamente tres roles:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Dueño de Producto - Gestiona la pila de producto&lt;/li&gt;&lt;li&gt;Scrum master - Elimina los obstáculos que impiden que el equipo cumpla sus compromisos.&lt;/li&gt;&lt;li&gt;Equipo - Desarrolla el producto.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Normalmente cada persona involucrada en el proyecto tiene asignado un único rol y existen varias restricciones.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Solo hay un dueño de producto (Se puede argumentar que puede ser un comité de expertos de negocio los que implementen dicho rol pero vamos, lo más adecuado es que sea una única persona de ese comité el dueño de producto. Personalizar ese rol en una persona ayuda al equipo, que tiene más claro a quien dirigirse).&lt;/li&gt;&lt;li&gt;Solo hay un Scrum Master.&lt;/li&gt;&lt;li&gt;El equipo está formado por una o más personas (En realidad, el equipo siempre es de más de una persona. He puesto una porque en este caso el equipo soy yo solo).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Yo haré de Dueño de producto, de Scrum master y de equipo :) Me voy a volver loco...&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;La Pila de Producto&lt;/b&gt;&lt;br /&gt;Tenemos nuestro dueño de producto y nuestro equipo. Ahora necesitamos una pila de producto. Para no aburriros con muchos datos, solo voy a contaros los temas que he metido en la pila (si continúo con el blog-scrum la presentaré en futuros posts) mientras llevaba puesto mi gorro de dueño de producto.&lt;br /&gt;Voy a seguir con la serie de principios ágiles y con el resumen del libro "Agile Testing". También he añadido unos cuantos temas técnicos (Orientados sobre todo a testing, aunque hay algo de TDD). Además, he incluido una historia para el resumen de la &lt;a href="http://sites.google.com/site/agilemadrid/reuniones/2010-01-19"&gt;reunión del día 19 de Agile-Spain Madrid&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Planificación de la iteración&lt;/b&gt;&lt;br /&gt;Creada la pila ¡podemos empezar a planificar la primera iteración!&lt;br /&gt;Sigo con el gorro de dueño de producto.&amp;nbsp;Lo primero que tengo que decidir es la duración de este sprint. Como quiero incluir la historia con el resumen de la reunión&amp;nbsp;he pensado en una iteración de dos semanas. Quedan las fechas del sprint como siguen:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Planificación - Miércoles 6 de Enero&lt;/li&gt;&lt;li&gt;Inicio de Sprint - Jueves 7 de Enero&lt;/li&gt;&lt;li&gt;Fin de Sprint - Jueves 21 de Enero&lt;/li&gt;&lt;li&gt;Retrospectiva - Viernes 22 de Enero (Creo que esta se puede alargar al fin de semana del 22...)&lt;/li&gt;&lt;/ul&gt;Ahora toca ver que entra en la iteración. Para ello primero debo conocer la disponibilidad del equipo y las estimaciones de las historias. Me pongo mi gorro de Scrum master y os cuento que, para simplificar un poco, voy a igualar los puntos de historia a horas ideales (Se que no está muy bien, pero voy a empezar así).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Disponibilidad del equipo&lt;/b&gt;&lt;br /&gt;Me pongo ahora el gorro de equipo.&amp;nbsp;Como es el primer sprint aún no conozco mi velocidad así que voy a ponerme una a ojo. Una&amp;nbsp;persona durante quince días dedicándole unas seis horas a la semana me dice que, más o menos, mi velocidad es de 12 puntos de historia.&lt;br /&gt;&lt;b&gt;Estimación de las historias&lt;/b&gt;&lt;br /&gt;Todavía con mi gorro de equipo estimo las primeras historias de la pila:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0fjBGCsPOPo/S0Tr1drKjYI/AAAAAAAAAE8/bMgD4CF1Y4I/s1600-h/pila-sprint1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/S0Tr1drKjYI/AAAAAAAAAE8/bMgD4CF1Y4I/s400/pila-sprint1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;Selección de las historias del sprint&lt;/b&gt;&lt;br /&gt;Una vez estimadas las historias vuelvo a ponerme el gorro de dueño de producto para decidir que historias de las estimadas entran en el sprint.&lt;br /&gt;Estas 4 historias suman 15 puntos y solo tengo 12 disponibles ¿Qué hago? Tengo varias opciones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Puedo intentar convencer al equipo para que aumente su nivel de compromiso y acepte hacer los 15 puntos. He estado discutiendo conmigo mismo (cambiando de gorro mientras lo hacía, menudo cuadro) y he decidido que el equipo no puede aumentar su compromiso (Hay que hacer más cosas en la vida...)&lt;/li&gt;&lt;li&gt;Puedo reordenar las historias de forma que las tres historias con estimación 4 entren en la iteración. El problema de esta opción es que uno de los requisitos era tener al menos una historia técnica por sprint.&lt;/li&gt;&lt;li&gt;Puedo regalarle un punto al equipo y que hagan las 3 historias más prioritarias. Me quedo con esta opción.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Decidido entonces. Las proximas entradas del blog serán:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;b&gt;Principios ágiles #4&lt;/b&gt;. Continuamos con la serie sobre principios ágiles. Esta vez toca "Negocio y tecnología deben trabajar juntos" (traducción libre :) ).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;b&gt;Resumen reunión 19 Enero Agile-Spain&lt;/b&gt;. Podéis ver toda la información sobre la reunión en &lt;a href="http://sites.google.com/site/agilemadrid/reuniones/2010-01-19"&gt;esta página&lt;/a&gt;.&amp;nbsp;Animaos y venid.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;b&gt;Contract tests&lt;/b&gt;. Una idea muy buena que ya leí en "&lt;a href="http://www.amazon.com/Practical-API-Design-Confessions-Framework/dp/1430209739"&gt;Practical API design: Confessions of a Java framework architect&lt;/a&gt;" y que he recordado gracias a &lt;a href="http://www.jbrains.ca/permalink/281"&gt;este post de J.B. Rainsberger&lt;/a&gt;&amp;nbsp;:) Qué son y como se hacen con JUnit.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;b&gt;Burndown&lt;/b&gt;&lt;br /&gt;Por último, falta el burndown de la iteración. Iré actualizándolo regularmente con los avances :D&lt;br /&gt;&lt;br /&gt;&lt;img src="https://spreadsheets.google.com/oimg?key=0AhMrDc6yU3NddEdqMWh2emlYN1ROTFFmZEYwT3ctYkE&amp;amp;oid=1&amp;amp;v=1262806145692" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Reunión Diaria (Scrum diario) del 7 de Enero: Al ser la primera, lo único que se hace es que cada miembro del equipo elija la tarea en la que quiere trabajar. Yo elijo la tarea "No hacer nada porque no tengo tiempo".&amp;nbsp;&lt;/li&gt;&lt;li&gt;Reunión Diaria (Scrum diario) del 8 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Nada. Como no hice nada no reestimo la duración de las tareas quedando un burndown plano. Como siga así veras que risa.&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy voy a intentar empezar el post sobre el cuarto principio ágil.&lt;/li&gt;&lt;li&gt;¿Algún impedimento? Nop.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión&amp;nbsp;Diaria (Scrum diario) del 9 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Empecé la historia de los principios ágiles. Reestimo que me quedan unas 3 horitas. Esta reestimación hace que el burndown de reestimación baje un poquito, hacercandose al ideal. Sin embargo el de terminado sigue plano ya que aún no he acabado ninguna historia.&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Voy a continuar con dicho artículo, aunque no se si voy a poder hacer mucho.&lt;/li&gt;&lt;li&gt;¿Algún impedimento? Ninguno, de momento.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum diario) del 10 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Pues al final no hice nada. Me pudieron las ganas de darle caña al modern warfare 2. ¡Que vicio!&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy voy a avanzar sí o sí con la historia de los principios ágiles.&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 11 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? &lt;br /&gt;He creado el esqueleto del post. Yo creo que con un par de horitas más lo acabo&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Nada, me parece que hoy toca ver una peli.&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 12 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? &lt;br /&gt;Nada :(&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy espero terminar una primera versión de la entrada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 13 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? He seguido avanzando en la entrada de los principios y casi la tengo lista :)&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy espero terminar la entrada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 14 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Terminé la historia de los principios ágiles :D y empecé con la de la reunión, pero no la puedo hacer porque ¡todavía no hemos hecho la reunión!&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy puede que empiece con la de "Contract tests"&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No puedo hacer la historia más prioritaria...&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 15 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? He creado el borrador de Contract Test, pero no he podido escribir nada :D Por lo menos me he registrado en github, donde dejaré el código de los ejemplos&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy voy a crear los ejemplos para "Contract tests" y, si me da tiempo, escribiré algo&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 16 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Además de ver perder al Madrid he estado trabajando en la entrada de Contract Test. Con un poco más de esfuerzo la tengo lista para el lunes :D &lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Seguir con la entrada. Tengo que hacer los ejemplos y poner el código en el post&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 17 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? ¡Acabé la historia de las Pruebas de Contrato!&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hasta despues de la reunión no creo que haga nada :D&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 18 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Nada. Bueno, preparar la reunión de Agile-Madrid&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Nada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 19 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Nada. Bueno, preparar la reunión de Agile-Madrid&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Nada&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 20 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Hice la presentación sobre Definition of Done al grupo de Madrid. También  he escrito el resumen en el sitio de Agile-Madrid&lt;/li&gt;&lt;li&gt;¿Qué vas a hacer hoy? Hoy terminaré la entrada sobre la reunión en el blog :D&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Reunión Diaria (Scrum Diario) del 21 de Enero&lt;/li&gt;&lt;ul&gt;&lt;li&gt;¿Qué hiciste ayer? Termina la historia de la reunión de agile Madrid :D&lt;/li&gt;&lt;li&gt;¿Algún impedimento? No&lt;/li&gt;Hoy no preguntamos que vamos a hacer porque esta reunión simplemente identifica lo que nos ha dado tiempo a terminar el último día de sprint :D. ¡Nos vemos en la retro!&lt;/ul&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;Foto de "portada": &amp;nbsp;&lt;a href="http://www.flickr.com/photos/65844741@N00/2512525538"&gt;&lt;span style="font-size: x-small;"&gt;Galería de Wyscan en Flickr&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;, bajo licencia Creative Commons.&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-7510909266212826936?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/7510909266212826936/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/01/sprint-1-planificando-enero.html#comment-form' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7510909266212826936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7510909266212826936'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/01/sprint-1-planificando-enero.html' title='Sprint #1 - Planificando enero'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_0fjBGCsPOPo/S0Tr1drKjYI/AAAAAAAAAE8/bMgD4CF1Y4I/s72-c/pila-sprint1.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-7391911707279246771</id><published>2010-01-04T16:44:00.000+01:00</published><updated>2010-01-04T16:44:30.632+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kaizen'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Retrospectiva'/><title type='text'>Retrospectiva #1</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_0fjBGCsPOPo/S0Ef6NhHldI/AAAAAAAAAEA/tm9e0CLmDzI/s1600-h/kaizen.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_0fjBGCsPOPo/S0Ef6NhHldI/AAAAAAAAAEA/tm9e0CLmDzI/s200/kaizen.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Desde que entré en esto del agilismo he aprendido muchísimas cosas. Una de las más importantes es &lt;b&gt;kaizen&lt;/b&gt;, más conocido por &lt;b&gt;mejora continua&lt;/b&gt;. En este caso, quiero mejorar mi forma de llevar el blog. &lt;br /&gt;Una de las formas de mejorar es reflexionar sobre lo que has hecho. Para eso (y muchas más cosas) sirven las &lt;a href="http://en.wikipedia.org/wiki/Retrospective#Software_development"&gt;retrospectivas&lt;/a&gt;. Hay infinidad de formas de realizar una retrospectiva. Actualmente en los equipos en los que estoy lo hacemos como sigue:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;¿Qué estamos haciendo bien y queremos seguir haciendo? Empezar por lo que se hace bien ayuda a crear un buen ambiente en la reunión y sirve para celebrar los pequeños éxitos (a nadie le amarga un dulce)&lt;/li&gt;&lt;li&gt;¿Qué estamos haciendo mal? Es necesario identificar en qué nos estamos equivocando para intentar evitarlo en un futuro.&lt;/li&gt;&lt;li&gt;Acciones para mejorar lo que hacemos mal. Si queremos mejorar debemos actuar. No vale con identificar los errores, hay que solucionarlos.&lt;/li&gt;&lt;/ol&gt;Siguiendo estos pasos voy a hacer una retrospectiva de lo que llevo de blog (un par de meses, creo). Animaos y contribuid a la retro, los comentarios están abiertos :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Qué estamos haciendo bien y queremos seguir haciendo?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sin duda, lo mejor ha sido empezar el blog :D Pensaba que no iba a darle continuidad y, aunque debería escribir más, no está del todo mal. Ocho publicaciones en dos meses :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Otro puntazo fue que Lisa Crispin leyera el post sobre su libro y lo publicitara en twitter :) Que buena gente. Realmente, le pedí permiso y, tras dármelo, me pidió el enlace al post, pero aún así :D&lt;/li&gt;&lt;li&gt;Publicitar las entradas en twitter me parece dabuti. Muchos de vosotros retwitteais y ayudáis a difundirlo. Gracias a todos ;)&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;¿Qué estamos haciendo mal?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La periodicidad de las entradas. Hago una a la semana aproximadamente, pero es de milagro. De hecho, no me había dado cuenta hasta ahora... Menuda potra.&lt;/li&gt;&lt;li&gt;Ningún contenido técnico de momento. Soy el programador féliz y todavía no he enseñado ni una linea de código... Eso no está bien.&lt;/li&gt;&lt;li&gt;No aplico el agilismo a la hora de crear entradas. Voy a lo cowboy.&lt;/li&gt;&lt;li&gt;La interacción con los lectores (clientes) es casi nula. ¡No se qué os gusta y qué no! :P&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Acciones&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Aplicar &lt;b&gt;Scrum &lt;/b&gt;con&amp;nbsp;el blog. Ya tengo cliente (vosotros). Voy a tener una pila de producto, voy a hacer iteraciones y voy a hacer retrospectivas. Lo de hacer demo no creo :) Aquí tengo algunas dudas...&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;¿Cuanto debe durar la iteración? Voy a empezar probando con iteraciones de un mes, a ver que tal.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;¿Publico el plan de cada iteración? Voy a crear un post con el resultado del plan para cada iteración.&lt;/li&gt;&lt;li&gt;¿Hago reuniones diarias? En el post con el plan iré actualizando un burndown. A ver que tal sale :)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;En esa pila priorizaré algo de contenido técnico. Al menos &lt;b&gt;una entrada técnica por iteración&lt;/b&gt; (menudo lío).&lt;/li&gt;&lt;li&gt;Dado que voy a aplicar Scrum, necesito un dueño de producto. De momento, el dueño de producto seré yo, pero actuaré como proxy de &lt;b&gt;mis verdaderos clientes,  vosotros&lt;/b&gt;. Por eso, si tenéis en mente algún tema del que queráis que escriba no dudéis en escribir en los comentarios.&lt;/li&gt;&lt;/ul&gt;Pues nada, me estoy metiendo en un lío pero merece la pena.&lt;br /&gt;La primera planificación la haré a lo largo de esta semana (Probablemente comience la iteración el miércoles 6 de Enero). Animaos y proponed historias para la pila de producto :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-7391911707279246771?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/7391911707279246771/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2010/01/retrospectiva-1.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7391911707279246771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7391911707279246771'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2010/01/retrospectiva-1.html' title='Retrospectiva #1'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0fjBGCsPOPo/S0Ef6NhHldI/AAAAAAAAAEA/tm9e0CLmDzI/s72-c/kaizen.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-7691083177603716020</id><published>2009-12-31T15:41:00.001+01:00</published><updated>2010-01-03T23:50:10.243+01:00</updated><title type='text'>Objetivos para el 2010</title><content type='html'>&lt;a href="http://sixservix.com/blog/david/"&gt;David Bonilla&lt;/a&gt; me ha "obligado" a postear el meme de los objetivos personales para el 2010. Nunca he sido de marcarme objetivos para el nuevo año (más que nada por lo vago que soy) pero esta vez haré una excepción. Hay van:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Continuar aprendiendo de (y compartiendo con) la comunidad ágil española. Estoy flipándola, de verdad. Creo que estamos creando entre todos una comunidad muy activa y divertida. Espero que este nuevo año sigamos mejorándola.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Leer muuucho. Tengo pendiente varios libros "profesionales" pero estoy empezando a echar de menos a Dostoyevski, Palahniuk, James, las Bronte, etc. Jo, que pedantón ha quedado eso. Os jodéis.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ir a esquiar. Hace como un millón de años que no voy y tengo mazo de ganas. Ya no me acuerdo como se hace así que me romperé un brazo seguro (Eso por pedante, ahora me jodo yo).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mejorar el blog. A principios de año publicaré una entrada con mi plan secreto... Es un experimentillo, a ver que tal sale.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Aprender un nuevo lenguaje de programación. Tengo ganas de meterme con los lenguajes dinámicos, aunque también me llama mucho Scala.&lt;/li&gt;&lt;li&gt;Mejorar mi ingles. Leer, escuchar y escribir va bien pero, cada vez que intento hablarlo se me seca la boca.&lt;/li&gt;&lt;li&gt;Mudarme de piso y, con un poco de suerte, hasta de continente :D De esto no hay nada definido, pero si salen un par de cosas bien a lo mejor me toca cruzar el charco :)&lt;/li&gt;&lt;li&gt;Quemar la Xbox360 dandole caña al modern warfare 2 y a todo lo que se ponga por delante. &lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;No parece muy complicado conseguirlo ¿no? ¡Feliz año nuevo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-7691083177603716020?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/7691083177603716020/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/12/objetivos-para-el-2010.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7691083177603716020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7691083177603716020'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/12/objetivos-para-el-2010.html' title='Objetivos para el 2010'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-1636997448606888384</id><published>2009-12-29T01:47:00.011+01:00</published><updated>2009-12-30T02:20:00.295+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='pair programming'/><category scheme='http://www.blogger.com/atom/ns#' term='coding kata'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='agilismo.es'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>El coding dojo de agilismo.es</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_0fjBGCsPOPo/SzqqjIjeUtI/AAAAAAAAAD4/8m93W_yJ38g/s1600-h/slogan.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_0fjBGCsPOPo/SzqqjIjeUtI/AAAAAAAAAD4/8m93W_yJ38g/s200/slogan.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Por fin tengo un ratito durante las fiestas para hablar del&amp;nbsp; &lt;a href="http://agilismo.es/index.php?option=com_content&amp;amp;view=article&amp;amp;id=87:que-es-un-coding-dojo"&gt;coding dojo&lt;/a&gt; que organizó &lt;a href="http://agilismo.es/"&gt;agilismo.es&lt;/a&gt;. Fue en &lt;a href="http://www.okurispaces.com/"&gt;Okuri Spaces&lt;/a&gt;&amp;nbsp;y fueron ayudados por&amp;nbsp;&lt;a href="http://www.autentia.com/index.php"&gt;Autentia&lt;/a&gt;&amp;nbsp;(que, ademas de encargarse de la grabación del evento, nos pusieron unas cocacolas y unas pastas muy ricas).&lt;br /&gt;&lt;br /&gt;Como he tardado unos días en escribir esto (lo siento, las comidas y cenas navideñas me han dejado KO) algunos de los asistentes ya han escrito sobre el tema. Podéis leer la opinión de &lt;a href="http://weblogs.javahispano.org/artesanodeprimera/entry/coding_dojo"&gt;Alfredo Casado&lt;/a&gt; y la de&lt;a href="http://sixservix.com/blog/david/2009/12/24/coding-dojo/"&gt; David Bonilla&lt;/a&gt;. Coincido con ellos en todo. Fue muy divertido y os recomiendo a todos que acudáis a los eventos de este estilo que se organicen cerca vuestra. No os vais a arrepentir.&lt;br /&gt;&lt;br /&gt;De todas formas, como soy un pesado, voy a contar como fue el evento para mi.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Presentación del problema del pomodoro&lt;/b&gt;&lt;br /&gt;&lt;a href="http://agilismo.es/"&gt;agilismo.es&lt;/a&gt; preparó una kata nueva para este evento. Dicha kata consistía en crear una clase que representara un reloj pomodoro que sirviera para utilizarla en la &lt;a href="http://www.pomodorotechnique.com/"&gt;técnica del pomodoro&lt;/a&gt;. Nos dieron unas &lt;a href="http://agile-spain.googlegroups.com/attach/dda0bc8ec7ad118a/Gui%C3%B3nKata.pdf?view=1&amp;amp;part=4"&gt;especificaciones&lt;/a&gt; y nos pidieron que hicieramos dos equipos de voluntarios para codificar el pomodoro. Hay que señalar que había que hacerlo en Java sobre eclipse y haciendo TDD. Esto frenó a muchos de los asistentes pero 9 "valientes" nos animamos a mostrar nuestro Kung-Fu (Copyright de Xavi Gost). El primer equipo comenzaría el trabajo y el segundo continuaría por donde lo dejó el primero.&lt;br /&gt;&lt;br /&gt;Aquí podéis ver al primero de los equipos planeando la estrategía:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://sixservix.com/blog/david/files/2009/12/IMG_1064.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://sixservix.com/blog/david/files/2009/12/IMG_1064.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Imagen Robada del blog de David Bonilla ;)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Los equipos dandole caña&lt;/b&gt;&lt;br /&gt;Mi equipo fue el primero en entrar en acción. La idea era hacer programación por parejas de forma que uno de los dos componentes de la pareja hacía un test (Piloto) y el otro codificaba lo necesario para que el test pasara (Copiloto). Cada 5 minutos el piloto desalojaba, el copiloto se convertía en piloto y otro componente del equipo entraba como copiloto. Tengo que decir que contábamos con la ventaja de tener en nuestras filas a uno de los miembros de &lt;a href="http://agilismo.es/"&gt;agilismo.es&lt;/a&gt;, José Manuel Beas, lo que nos ayudo a comenzar algo más rápido. Conseguimos crear pomodoros y asignarles una duración, aunque nos pusieron alguna pega por utilizar un operador ternario :D&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm3.static.flickr.com/2710/4206860381_4c9b1ac41e_m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://farm3.static.flickr.com/2710/4206860381_4c9b1ac41e_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Momento Ternario, con Xavi Gost metiendo el dedo en la yaga :D&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;No nos fue mal hasta que llegamos a la parte complicada del ejercicio, que era la parte en la que debíamos controlar que el tiempo del pomodoro se agotaba...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm5.static.flickr.com/4007/4207623968_7381002d01_m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://farm5.static.flickr.com/4007/4207623968_7381002d01_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Momento marrón&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nos quedamos atrancadillos y les dejamos el marrón al segundo equipo que, al menos, fue capaz de volver a tener todos los test en verde.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm3.static.flickr.com/2787/4206869257_64aa05c51d_m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://farm3.static.flickr.com/2787/4206869257_64aa05c51d_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Segundo equipo, enmarronado&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;La kata ejecutada por los maestros&lt;/b&gt;&lt;br /&gt;Después de que los equipos hiciéramos lo que pudimos (no fue mucho, la verdad). José Manuel Beas se puso a los mandos del portátil para realizar el ejercicio en modo &lt;a href="http://www.agile-spain.com/node/731"&gt;kata&lt;/a&gt; mientras Xavi Gost nos comentaba las discusiones de diseño que habían ido teniendo mientras preparaban el programa. Hay que decir que Beas tardo menos de 20 minutos en realizar el ejercicio y que lo enseñaron funcionando. Doy fe :P Se que van a subir el vídeo de la kata. Cuando esté actualizaré el post con el enlace. De momento os tendréis que fiar de mi :)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm3.static.flickr.com/2764/4207629902_662d961527_m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://farm3.static.flickr.com/2764/4207629902_662d961527_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Agilismo.es en plena Kata&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Además del vídeo de la kata creo que también iban a colgar el vídeo del evento. Cuando lo cuelguen actualizaré el post con el enlace y podréis ver a los equipos desplegar nuestro Kung-Fu, todo amenizado con los comentarios/puyas de Xavi (menudo crack). De momento podéis echarle un ojo a las fotos que han subido los chicos de Okuri Spaces &lt;a href="http://www.flickr.com/photos/luisrivera/sets/72157622928912277/with/4207629902/"&gt;aquí&lt;/a&gt; (Algunas os las he mostrado en el resumen) y al &lt;a href="http://www.adictosaltrabajo.com/detalle-noticia.php?noticia=211"&gt;vídeo-montaje&lt;/a&gt; que han realizado los chicos de Autentia con todos los asistentes al evento.&lt;br /&gt;&lt;br /&gt;En fin, fue un evento muy divertido. Espero que se organicen más. Mejoraré mi Kung-Fu para la próxima :D&lt;br /&gt;&lt;br /&gt;Para mi fue todavía más molón porque Jose Manuel Beas me regalo esto: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0fjBGCsPOPo/SzjWUIIBcVI/AAAAAAAAADw/DLKmmQuq3aM/s1600-h/pulsera.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_0fjBGCsPOPo/SzjWUIIBcVI/AAAAAAAAADw/DLKmmQuq3aM/s200/pulsera.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Yo, féliz con mi pulsera&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Toma pulsera de Clean Code :D Pedazo regalo de navidad.&lt;br /&gt;&lt;br /&gt;En cuanto a la Pomodoro-Kata, prometo darle caña y mejorarla :P A ver si consigo picar a &lt;a href="http://weblogs.javahispano.org/artesanodeprimera/"&gt;Alfredo&lt;/a&gt; y la hacemos en pareja.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-1636997448606888384?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/1636997448606888384/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/12/el-coding-dojo-de-agilismoes.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1636997448606888384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/1636997448606888384'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/12/el-coding-dojo-de-agilismoes.html' title='El coding dojo de agilismo.es'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0fjBGCsPOPo/SzqqjIjeUtI/AAAAAAAAAD4/8m93W_yJ38g/s72-c/slogan.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-7164883517977195266</id><published>2009-12-22T16:40:00.003+01:00</published><updated>2010-02-23T10:54:34.721+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Libros'/><category scheme='http://www.blogger.com/atom/ns#' term='dirigidoportests'/><title type='text'>Libros: Agile Testing (Parte 1)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/SzDoNPlCPQI/AAAAAAAAADk/XPvp8Ambx6k/s1600-h/agile-testing.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/SzDoNPlCPQI/AAAAAAAAADk/XPvp8Ambx6k/s200/agile-testing.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Desde que volví del &lt;a href="http://plagelao.blogspot.com/2009/10/agile-open-spain-2009.html"&gt;Agile Open Spain&lt;/a&gt; he intentado practicar el agilismo de guerrilla de &lt;a href="http://twitter.com/XaV1uzz"&gt;Xavi Gost&lt;/a&gt; y, de momento, he conseguido que nos compren &lt;a href="http://www.amazon.co.uk/gp/richpub/listmania/fullview/R27IBP3IB6ZK9A/ref=cm_lm_pthnk_view?ie=UTF8&amp;amp;lm_bb="&gt;todos estos libros&lt;/a&gt;&amp;nbsp;¡Yuju! Algunos ya los he leido, pero me pareció buena idea tenerlos en la oficina por si, algún día, alguien se interesa y lee alguno. De entre los que aún tengo pendientes de leer me decidí por &lt;a href="http://www.amazon.co.uk/Agile-Testing-Practical-Addison-Wesley-Signature/dp/0321534468/ref=cm_lmf_tit_3"&gt;Agile Testing&lt;/a&gt; de &lt;a href="http://twitter.com/lisacrispin"&gt;Lisa Crispin&lt;/a&gt; y &lt;a href="http://twitter.com/janetgregoryca"&gt;Janet Gregory&lt;/a&gt;&amp;nbsp;(Si no os dicen nada estos nombres os recomiendo ojear sus twitters y blogs. Además, por si hace falta vender un poco más el libro, sabed que&amp;nbsp;contiene un prefacio escrito por&amp;nbsp;&lt;a href="http://twitter.com/mikewcohn"&gt;Mike Cohn&lt;/a&gt;&amp;nbsp;y otro escrito por&amp;nbsp;&lt;a href="http://twitter.com/marick"&gt;Brian Marick&lt;/a&gt;&amp;nbsp;¡ahí es nada!). Les pedí permiso para hacer un pequeño resumen en castellano de su libro y me lo dieron, así que... ¡Allá vamos!&lt;br /&gt;&lt;br /&gt;Para empezar, el libro está dividido en 6 partes, así que dedicaré un post (mínimo) a cada una de las partes. Este, como ya os imagináis, está dedicado a la primera :D&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Parte I: Introducción&lt;/span&gt;&lt;br /&gt;En esta primera parte se hace un resumen de las principales diferencias entre el enfoque ágil y el enfoque tradicional basado en fases (algo que deberíamos tener todos bien claro ya). También se explora la idea del equipo multidisciplinar ágil desde el punto de vista de la calidad y las pruebas. Además, se&amp;nbsp;define lo que debe ser la "mentalidad ágil para testing" y que hace que un tester tenga éxito en un equipo ágil.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Capítulo 1: De todos modos, ¿Qué es testing ágil?&lt;/b&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Para ser ágil es necesario ser un equipo, y es necesario que todo el equipo sea consciente de la importancia que tienen las pruebas para alcanzar una calidad alta. Pero, si todo el equipo está preocupado de probar el desarrollo ¿Cómo cuadra un tester en un equipo ágil? Debe ser consciente de su situación.&amp;nbsp;Cuando un equipo es ágil, los programadores prueban los casos límite (mediante TDD). Dado que el tester queda libre del trabajo de grano fino, puede centrarse en otro tipo de problemas que aporten un mayor valor al cliente (Exploratory testing, usabilidad de la aplicación, etc).&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;En un equipo ágil los testers no se sientan a esperar el trabajo, dan un paso adelante y buscan formas de contribuir durante todo el ciclo de desarrollo. Estas contribuciones pueden ir desde la automatización de las pruebas (en la medida de lo posible) hasta opiniones en las charlas de diseño para que el código sea más sencillo de testear.&lt;br /&gt;&lt;/div&gt;Al ser un equipo ágil la colaboración con el cliente es la norma. El tester debe beneficiarse de esa colaboración para definir los test de aceptación de cada funcionalidad.&amp;nbsp;Cuando los test demuestran que un mínimo de funcionalidad está completo el equipo puede considerar la historia terminada.&lt;br /&gt;El tester de un equipo ágil debe conocer tanto el negocio como la tecnología. Debe ser el "traductor" entre negocio y tecnología.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0fjBGCsPOPo/Sy_0HknAHLI/AAAAAAAAADc/65nr0PonglA/s1600-h/figura_roles.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_0fjBGCsPOPo/Sy_0HknAHLI/AAAAAAAAADc/65nr0PonglA/s320/figura_roles.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Conclusiones del capítulo 1&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Un tester ágil debe seguir el &lt;b&gt;manifiesto ágil&lt;/b&gt; (Individuos e interacciones, software funcionando, colaboración con el cliente y respuesta al &amp;nbsp;cambio).&lt;/li&gt;&lt;li&gt;El testing ágil se centra en &lt;b&gt;añadir valor al negocio&lt;/b&gt; y en entregar la &lt;b&gt;calidad&lt;/b&gt; que el cliente solicita, diferenciándose así del testing tradicional, centrado en cumplir unos requisitos.&lt;/li&gt;&lt;li&gt;Todos los miembros del equipo es responsable de &lt;b&gt;entregar software de alta calidad&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;En caso de duda, volver a los &lt;b&gt;valores y principios ágiles&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Capítulo 2: Diez principios para testers ágiles&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;¿Que es un tester ágil? Es un tester que acepta el cambio, sabe colaborar tanto con la gente de negocio como con la gente técnica y entiende como utilizar los test para documentar los requisitos y dirigir el diseño.&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Un tester ágil no debe verse a si mismo como un policía de la calidad que protege al cliente de código inadecuado. Debe estar preparado para reunir y compartir información, para trabajar con el cliente y ayudarle a expresar sus requisitos de forma adecuada para que pueda conseguir las características que necesita y para proveer el feedback sobre el progreso del proyecto a todo el mundo.&lt;br /&gt;Un tester ágil, al igual que sus compañeros de equipo, disfruta adquiriendo nuevas habilidades y no se limita a resolver únicamente problemas sobre testeo. Como cualquier otro miembro del equipo ayuda a la mejora continua tanto del proyecto como de dicho equipo.&lt;br /&gt;Los 10 principios que debe seguir un tester ágil son:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Provee feedback de forma continua&lt;/b&gt;. Dado que las pruebas dirigen el diseño, es importante que el tester se centre en expresar los requisitos del cliente en forma de tests y que trabaje de la mano del cliente para que cualquier cambio en los requisitos llegue de forma rápida y clara al equipo de desarrollo.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Entrega valor al cliente&lt;/b&gt;. Un tester ágil permanece centrado en la visión global del proyecto. Si una característica se vuelve demasiado compleja debe analizar si conviene realizarla completa o simplemente hacer que funcione el camino normal (dejando los casos raros para otra iteración).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Posibilita la comunicación cara a cara&lt;/b&gt;. Si hay dudas sobre una cierta funcionalidad el tester debe reunir al experto de negocio y al programador para que lo discutan. Dado que el tester entiende el negocio pero también comprende la parte técnica, puede ayudar a crear un lenguaje común entre ambos mundos.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ten coraje&lt;/b&gt;. Cualquier miembro de un equipo ágil debe tener coraje. Además, un tester ágil lo necesita porque, al ponerse en la situación del cliente, puede tener que decirle al equipo que algo no es correcto.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Mantenlo simple&lt;/b&gt;. Debe hacer las pruebas más simples posibles que verifiquen que una funcionalidad satisface las exigencias del cliente respecto a la calidad del producto. Esto no quiere decir que la funcionalidad esté implementada y que funcione, eso se presupone. Se refiere a temas como el rendimiento, la seguridad, etc.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Practica mejora continua&lt;/b&gt;. Debe buscar nuevas formas de ayudar al equipo (herramientas de automatización, unirse a listas de correo sobre testing, mejorar en el test exploratorio, leer artículos, libros y blogs para obtener nuevas ideas, etc).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Responde al cambio&lt;/b&gt;. Mediante la automatización de las pruebas es más sencillo responder al cambio. Si todas las pruebas que realiza son manuales será imposible adaptarse a los cambios a la velocidad que exige un equipo ágil.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Auto-organízate&lt;/b&gt;. Debe compartir con el equipo los problemas que encuentre de forma que el equipo se auto-organice para solucionar dicho problema.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Céntrate en las personas&lt;/b&gt;. En un equipo ágil todos sus miembros son igual de importantes y los tester no están infravalorados. Un tester ágil sabe que está ayudando al equipo de una forma única.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Disfruta&lt;/b&gt;. Trabajar en un equipo donde todos sus miembros colaboran, donde el tester está involucrado desde el principio del proyecto hasta el fin del mismo, donde los responsables de negocio trabajan junto al equipo de desarrollo y donde todo el equipo toma la responsabilidad tanto de las pruebas como de la calidad es un bonito lugar de trabajo para un tester.&lt;/li&gt;&lt;/ol&gt;¿Cómo añade valor un tester a un equipo ágil? Se está hablando de que, en un desarrollo ágil, las pruebas dirigen el desarrollo, pero se necesitan las pruebas correctas. El tester, con su capacidad para entender tanto el negocio como el lado técnico es capaz de aportar al equipo dichas pruebas.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Conclusiones del capítulo 2&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;La mentalidad de un tester ágil está &lt;b&gt;centrada en el cliente&lt;/b&gt;, es &lt;b&gt;orientada a resultados&lt;/b&gt;, es &lt;b&gt;colaborativa &lt;/b&gt;y tiene muchas &lt;b&gt;ganas de aprender&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;La &lt;b&gt;actitud &lt;/b&gt;es importante y difumina las fronteras entre los roles en un equipo ágil.&lt;/li&gt;&lt;li&gt;Los testers ágiles aplican los &lt;b&gt;valores y principios ágiles&lt;/b&gt; (feedback, comunicación, simplicidad, entrega de valor, etc) para ayudar al equipo a identificar y entregar los requisitos del cliente.&lt;/li&gt;&lt;li&gt;Los testers ágiles añaden valor a sus equipos y organizaciones gracias a su &lt;b&gt;punto de vista único&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-7164883517977195266?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/7164883517977195266/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/12/agile-testing-parte-1.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7164883517977195266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7164883517977195266'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/12/agile-testing-parte-1.html' title='Libros: Agile Testing (Parte 1)'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0fjBGCsPOPo/SzDoNPlCPQI/AAAAAAAAADk/XPvp8Ambx6k/s72-c/agile-testing.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-5902311879956421742</id><published>2009-12-15T22:53:00.003+01:00</published><updated>2009-12-15T23:07:50.093+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Principios Ágiles'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Principios Ágiles #3</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0fjBGCsPOPo/SygIpZfEflI/AAAAAAAAAC0/Rq0SdKwyKfk/s1600-h/I_LOVE_XP.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_0fjBGCsPOPo/SygIpZfEflI/AAAAAAAAAC0/Rq0SdKwyKfk/s320/I_LOVE_XP.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Después del &lt;a href="http://plagelao.blogspot.com/2009/12/10-encuentro-agile-madrid-principios.html"&gt;10º encuentro&lt;/a&gt; del grupo de Madrid de Agile-Spain en el que charlamos sobre los principios ágiles voy a continuar con mi serie sobre dichos principios. Hoy toca el tercero de ellos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;blockquote&gt;&lt;i&gt;Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Entregamos software frecuentemente, desde un par de semanas a un par de meses, con preferencia por los periodos más cortos posibles.&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Este principio va de la mano del &lt;a href="http://plagelao.blogspot.com/2009/11/principios-agiles-1.html"&gt;primero&lt;/a&gt;. El primer principio introduce la idea de entregas continuas de software y este tercer principio especifica un poco más como realizar dichas entregas. De forma frecuente, en iteraciones cortas, entre la semana y el mes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt; &lt;b&gt;¿Por qué frecuentemente?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Ya lo he hablado con anterioridad pero, en el desarrollo ágil, el feedback que aporta el cliente es muy importante tanto para llevar el proyecto a buen puerto como para mejorar el producto final. Queremos entregar s&lt;b&gt;oftware que funciona&lt;/b&gt; frecuentemente porque aumenta el &lt;b&gt;feedback&lt;/b&gt; que nos aporta el cliente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt; &lt;b&gt;¿Por qué mejor si los periodos son lo más cortos posibles?&lt;/b&gt;&lt;br /&gt;Porque, cuanto más pequeño sea el ciclo de desarrollo, antes le entregaremos al cliente algo que no quiere, con lo que antes nos avisará de qué es lo que realmente quiere. Ya sabéis, la movida del &lt;b&gt;feedback &lt;/b&gt;otra vez.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Ahora bien, es fácil decirlo pero entregar software que funciona cada poco tiempo es &lt;b&gt;muy difícil&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Como &lt;a href="http://www.viddler.com/explore/oredev/videos/125/"&gt;dice Robert C. Martin (Uncle Bob)&lt;/a&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Takes a real man to do a one week iteration!&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;¡Hay que ser muy hombre para hacer iteraciones de una semana!&lt;br /&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;No es sencillo entregar software funcionando y con nuevas funcionalidades cada poco tiempo. Cuanto más corto sea el ciclo de entrega &lt;b&gt;mejores deben ser nuestras prácticas de desarrollo software&lt;/b&gt; (¡Aupa XP!). Si, por ejemplo, tu equipo hace Scrum pero deja de lado XP es muy probable que acabe por no soportar las iteraciones cortas o, peor aún, termine entregando software que no funciona.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;Conclusiones&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;El tercer principio ágil:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Obliga a que se entregue software que funciona cada poco (y por poco me refiero a un mes o menos).&lt;/li&gt;&lt;li&gt;Necesita acompañarse de una serie de prácticas de desarrollo (XP) para soportar las frecuentes entregas en ciclos cortos.&lt;/li&gt;&lt;li&gt;Apunta que ser ágil no es sencillo. Se debe entregar software funcionando cada poco y hay que pelear por conseguirlo. Es un objetivo ambicioso, pero es necesario.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-5902311879956421742?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/5902311879956421742/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/12/principios-agiles-3_15.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5902311879956421742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5902311879956421742'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/12/principios-agiles-3_15.html' title='Principios Ágiles #3'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_0fjBGCsPOPo/SygIpZfEflI/AAAAAAAAAC0/Rq0SdKwyKfk/s72-c/I_LOVE_XP.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-7189271660557494029</id><published>2009-12-08T22:46:00.001+01:00</published><updated>2009-12-08T22:49:00.852+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Principios Ágiles'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile-Spain'/><title type='text'>10º Encuentro Agile-Madrid. Principios Ágiles</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://sites.google.com/site/agilemadrid/_/rsrc/1242533195481/config/app/images/customLogo/customLogo.gif?revision=4" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://sites.google.com/site/agilemadrid/_/rsrc/1242533195481/config/app/images/customLogo/customLogo.gif?revision=4" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;El pasado día 1 de diciembre tuvo lugar el 10º encuentro del grupo madrileño de Agile-Spain en las instalaciones de &lt;a href="http://www.ipsa.es/"&gt;IPSA&lt;/a&gt; (me tocó hacer de anfitrión/portero :D ).&lt;br /&gt;&lt;br /&gt;El tema de la reunión era "&lt;b&gt;Los Principios Ágiles detrás del Manifiesto Ágil&lt;/b&gt;".&amp;nbsp;Parece ser que el tema interesaba porque acudimos 12 personas, entre las cuales había varias caras&amp;nbsp;nuevas (Mola que siga entrando gente nueva). Personalmente&amp;nbsp;me interesaba bastante conocer que pensaba el grupo sobre los principios ágiles y si sus opiniones coincidían con las mías (las cuales podéis leer en mi &lt;a href="http://plagelao.blogspot.com/search/label/Principios%20%C3%81giles"&gt;serie de post sobre Principios Ágiles&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Como ya os dije en el &lt;a href="http://plagelao.blogspot.com/2009/11/9-encuentro-agile-madrid-kanban.html"&gt;post sobre el 9º encuentro&lt;/a&gt;, hemos cambiado el formato de las charlas y ahora comenzamos con una pequeña presentación introductoria. Esta vez, el encargado de hacer dicha presentación era José Manuel Beas y su presentación podéis verla &lt;a href="http://www.slideshare.net/jmbeas/los-principios-giles-madrid"&gt;aquí&lt;/a&gt;&amp;nbsp;(Esta vez no hay vídeo de la charla&amp;nbsp;porque el ordenador encargado de realizar la grabación se quedó sin espacio en disco :D La próxima vez ya no nos pasa).&lt;br /&gt;&lt;br /&gt;Tras la introducción comenzó un debate del que salieron algunas preguntas y respuestas interesantes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;¿Son los principios ágiles de obligado cumplimiento para ser ágil? Obviamente sí, pero siempre teniendo en cuenta que son principios, es decir, guías. Para &lt;b&gt;ser ágil&lt;/b&gt; es necesario practicarlos, pero más importante es entenderlos.&lt;/li&gt;&lt;li&gt;¿Cómo introducir los principios en la empresa? Dado que los principios representan un cambio de mentalidad, es importante &lt;b&gt;practicar con el ejemplo&lt;/b&gt;. Además, un enfoque "de abajo a arriba" (bottom-up) parece más sencillo que "de arriba a abajo" (top-down).&lt;/li&gt;&lt;li&gt;Los principios hacen hincapié en la &lt;b&gt;autogestión &lt;/b&gt;(Principio #11). Esto puede provocar rechazo en la empresa porque saca a relucir puestos innecesarios y obliga a la gente a redefinir su trabajo.&lt;/li&gt;&lt;li&gt;¿Es necesaria una jerarquía en la empresa? Aquí hubo bastante discordia. Aparecieron dos bandos, "&lt;i&gt;Sí hay autogestión mi jerarquía puede ser plana&lt;/i&gt;" y "&lt;i&gt;Es necesaria una jerarquía que saque a la gente de la zona cómoda (comfort zone)&lt;/i&gt;". Yo, personalmente, soy partidario de la primera opinión. Los principios ágiles también piden &lt;b&gt;autoexigencia &lt;/b&gt;y &lt;b&gt;responsabilidad &lt;/b&gt;(Principio #9) por lo que de la "comfort zone" sales tú solito. Además, creemos en las jerarquías porque las empresas que conocemos funcionan (o no) así, pero ¿Que harías si montaras tu propia empresa? Quizás un modelo ágil más plano te funcione mejor. Aún así, en este punto no hubo acuerdo.&lt;/li&gt;&lt;/ul&gt;Una vez finalizado el debate sacamos unas pequeñas conclusiones:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Los principios ágiles marcan el camino, pero dicho camino es &lt;b&gt;duro &lt;/b&gt;y &lt;b&gt;difícil de recorrer&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Hay que creer (sin llegar al fanatismo). Es muy importante ser &lt;b&gt;apasionado &lt;/b&gt;para conseguir convencer a otros.&lt;/li&gt;&lt;li&gt;La &lt;b&gt;confianza &lt;/b&gt;hay que ganársela. Además, es muy fácil perderla por lo que hay que &lt;b&gt;esforzarse &lt;/b&gt;en mantenerla.&lt;/li&gt;&lt;li&gt;Hay que invertir la polaridad en las relaciones de &lt;b&gt;confianza&lt;/b&gt;, es decir, hay que empezar a confiar en la gente. Si no confías en la gente no esperes que la gente confíe en ti.&lt;/li&gt;&lt;li&gt;Hay que ser &lt;b&gt;exigentes &lt;/b&gt;con el cliente. No se puede renunciar a los principios ágiles porque el cliente no los comparta.&lt;/li&gt;&lt;li&gt;Cuando hablamos de agilismo, a veces se nos olvida que&amp;nbsp;&lt;b&gt;negocio y tecnología deben ir de la mano&lt;/b&gt;, ser uno (Principio #4).&lt;/li&gt;&lt;li&gt;La&amp;nbsp;&lt;b&gt;confianza&amp;nbsp;&lt;/b&gt;es fundamental en el mundo ágil. Para conseguirla es necesaria la&amp;nbsp;&lt;b&gt;transparencia&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Para &lt;b&gt;ser ágil&lt;/b&gt; debes ser &lt;b&gt;autoexigente &lt;/b&gt;y tener &lt;b&gt;coraje &lt;/b&gt;y &lt;b&gt;confianza&lt;/b&gt;(en ti mismo y en los demás).&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Esto fue todo. Bueno, miento un poco. También hicimos una retrospectiva en la que nos comprometimos a:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Tener una agenda para las próximas reuniones.&lt;/li&gt;&lt;li&gt;Elegir los temas de forma que haya dos reuniones "teóricas" y un taller.&lt;/li&gt;&lt;li&gt;Grabar en vídeo las reuniones.&lt;/li&gt;&lt;li&gt;Crear un taller de ATDD. La propuesta la hizo Agustín Yagüe y, aunque quedamos en hacerlo fuera de las reuniones, nos pareció una muy buena idea.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Si os interesa, la próxima reunión será el día 19 de Enero de 2010 y el tema a tratar será "Definition of Done (Pruebas de Aceptación Automatizadas)"&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: 13px;"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: medium;"&gt;&amp;nbsp;La charla la llevaremos a cabo Jose Manuel Beas (se encargará de hablar de pruebas en Concordion) y yo (hablaré de pruebas en Fitnesse), así que, &lt;b&gt;os esperamos en la siguiente reunión del grupo&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-7189271660557494029?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/7189271660557494029/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/12/10-encuentro-agile-madrid-principios.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7189271660557494029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/7189271660557494029'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/12/10-encuentro-agile-madrid-principios.html' title='10º Encuentro Agile-Madrid. Principios Ágiles'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-4504464921921610405</id><published>2009-11-24T20:22:00.009+01:00</published><updated>2009-12-09T00:11:43.238+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Principios Ágiles'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Principios Ágiles #2</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/SwwyuW1B8TI/AAAAAAAAACs/k_oy38rHc20/s1600/usain-bot2-cien-metros-foto-matt-dunham-associated-press-the-new-york-times.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/SwwyuW1B8TI/AAAAAAAAACs/k_oy38rHc20/s200/usain-bot2-cien-metros-foto-matt-dunham-associated-press-the-new-york-times.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;Siguiendo con la temática de los principios ágiles, hoy voy a hablar de el segundo de ellos:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;blockquote&gt;&lt;i&gt;Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Aceptamos requisitos cambiantes, incluso en etapas avanzadas del desarrollo. Los procesos ágiles aprovechan el cambio para proporcionar ventaja competitiva al cliente.&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;¿Por qué se aceptan los requisitos cambiantes?&lt;/b&gt;&lt;br /&gt;Porque es la forma más sencilla de adaptarse a la realidad. Aunque exista un contrato firmado por el cliente en el que se fija el "alcance" del proyecto, lo cierto es que los requisitos cambian. Normalmente un cliente no sabe exactamente lo que quiere. Su conocimiento va aumentando según avanza el proyecto y es así como consigue definir realmente su objetivo.&amp;nbsp;Dado que es imposible que el proyecto no cambie hay que hacer algo para que ese cambio no sea doloroso. Ahí es donde entra este principio. Aceptar los requisitos cambiantes significa que, si el cliente cambia de opinión, hay que hacerle caso y se debe modificar el desarrollo (Recordad que &lt;a href="http://plagelao.blogspot.com/2009/11/principios-agiles-1.html"&gt;"nuestra máxima prioridad es satisfacer al cliente"&lt;/a&gt;). No hay que utilizar el contrato como escudo contra el cliente. Hay que utilizar al cliente como compañero para conseguir que el contrato llegue a buen puerto. Es decir, se debe establecer una &lt;b&gt;relación de confianza entre el cliente y el proveedor&lt;/b&gt;&amp;nbsp;para aprovechar las ideas de ambos.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Por qué no importa que los cambios lleguen en etapas avanzadas de desarrollo?&lt;/b&gt;&lt;br /&gt;Porque, al tener &lt;a href="http://plagelao.blogspot.com/2009/11/principios-agiles-1.html"&gt;"entregas continuas y tempranas de software valioso"&lt;/a&gt;, es sencillo introducir los cambios que pida el cliente en cualquier etapa. La obligación de entregar software funcionando en cualquier momento del desarrollo hace que la complejidad al introducir cambios sea constante a lo largo del tiempo. Para que este modelo sea mantenible es necesario que el equipo de desarrollo se preocupe de que la base de código sea de calidad (Prácticas XP). &lt;b&gt;Si no se mejora la base de código de forma continua, aceptar los cambios&amp;nbsp;será&amp;nbsp;cada vez&amp;nbsp;más complicado&lt;/b&gt;, faltando así a este principio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Cómo aprovechar el cambio para proporcionar ventaja competitiva?&lt;/b&gt;&lt;br /&gt;Al aceptar el cambio lo que en realidad se está haciendo es &lt;b&gt;aumentar la velocidad de reacción&lt;/b&gt;&amp;nbsp;del cliente, que&amp;nbsp;puede reaccionar antes a los proyectos de la competencia. Es capaz de adaptar su producto para eliminar las ventajas del rival y crear las suyas propias (o, al menos, intentarlo).&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;Conclusiones&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;El segundo principio ágil:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;ul&gt;&lt;li&gt;se basa en &lt;b&gt;abrazar el cambio&lt;/b&gt;. No hay que protegerse contra el cambio.&lt;/li&gt;&lt;li&gt;introduce la &lt;b&gt;colaboración con el cliente&lt;/b&gt;. Un cliente implicado que quiere la mejor herramienta posible.&lt;/li&gt;&lt;li&gt;asume ciertas prácticas en el área de desarrollo (&lt;b&gt;XP&lt;/b&gt;).&lt;/li&gt;&lt;li&gt;&lt;b&gt;aumenta la velocidad de reacción&lt;/b&gt; del cliente ante el mercado.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-4504464921921610405?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/4504464921921610405/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/11/principios-agiles-2.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4504464921921610405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/4504464921921610405'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/11/principios-agiles-2.html' title='Principios Ágiles #2'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0fjBGCsPOPo/SwwyuW1B8TI/AAAAAAAAACs/k_oy38rHc20/s72-c/usain-bot2-cien-metros-foto-matt-dunham-associated-press-the-new-york-times.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-5677455617190814998</id><published>2009-11-18T23:27:00.003+01:00</published><updated>2011-03-23T22:49:33.837+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Continuous delivery'/><category scheme='http://www.blogger.com/atom/ns#' term='Principios Ágiles'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Principios Ágiles #1</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_0fjBGCsPOPo/SwQuABEGbUI/AAAAAAAAAB8/2cdLgxOVDHU/s1600/satisfaction.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/SwQuABEGbUI/AAAAAAAAAB8/2cdLgxOVDHU/s200/satisfaction.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;Cuando uno entra en esto del agilismo lo primero que le cuentan es el &lt;a href="http://agilemanifesto.org/"&gt;Manifiesto Ágil&lt;/a&gt;. Conocer el manifiesto ágil es importante, pero no basta con quedarse ahí. Los autores originales del manifiesto se tomaron muchas molestias para redactar los &lt;a href="http://agilemanifesto.org/principles.html"&gt;12 principios detrás del manifiesto&lt;/a&gt; y es necesario que nos los tomemos tan en serio como al propio manifiesto.&lt;br /&gt;He decidido dedicar un post a cada principio. Empecemos por el primero:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;i&gt; Our highest priority is to satisfy the customer&lt;br /&gt;through early and continuous delivery&lt;br /&gt;of valuable software&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;Nuestra prioridad más alta es satisfacer al cliente mediante entregas continuas y tempranas de software valioso.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;b&gt;¿Por qué la prioridad más alta?&lt;/b&gt;&lt;br /&gt;Es importante destacar que los firmantes del manifiesto ágil tienen un objetivo por encima del resto. Además, dicho objetivo no es negociable. Siempre debe estar presente y siempre debe cumplirse. Si no se cumple es un fracaso.Dicho objetivo es&amp;nbsp;&lt;b&gt;satisfacer al cliente&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Qué significa satisfacer al cliente?&lt;/b&gt;&lt;br /&gt;A la hora de realizar un desarrollo es importante tener un cliente que lo demande (Cuando hablo de cliente me refiero a quien demanda dicho desarrollo. Por ejemplo, un cliente puede ser el propio desarrollador que necesita una nueva librería para un proyecto más grande. No tiene porque ser siempre un cliente que firma un contrato). Si no existe el cliente no existe el desarrollo.&amp;nbsp;&lt;b&gt;El cliente es el&amp;nbsp;&lt;/b&gt;&lt;i&gt;&lt;b&gt;leitmotiv&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;b&gt;del desarrollo&lt;/b&gt;. Esto, que parece tan simple, se pierde muchas veces de vista a lo largo del desarrollo, provocando que se tomen decisiones sin contar con el cliente con lo que el desarrollo se va alejando de las necesidades de dicho cliente.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Por qué con entregas continuas y tempranas?&lt;/b&gt;&lt;br /&gt;Por varios motivos. Deben realizarse entregas tempranas porque es una forma de involucrar al cliente en el desarrollo (Puede validar la usabilidad del desarrollo, puede opinar sobre el entregable, etc...).&amp;nbsp;A su vez, deben realizarse entregas continuas porque de esa forma se es capaz de adaptarse a lo que el cliente quiere en cada momento. Los requisitos del cliente no son inmutables, por eso, cuanto antes se le enseñe software funcionando antes se podrá modificar de acuerdo a las nuevas necesidades del cliente.&lt;br /&gt;Mediante este tipo de entregas se consigue un &lt;b&gt;&lt;i&gt;feedback &lt;/i&gt;del cliente&lt;/b&gt; que permite que el rumbo del desarrollo siempre apunte hacía donde el cliente desea.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Qué es software valioso?&lt;/b&gt;&lt;br /&gt;Es &lt;b&gt;software que funciona y&amp;nbsp;&lt;/b&gt;&lt;b&gt;que hace lo que el cliente necesita&lt;/b&gt;. Es fácil decirlo, pero no es nada sencillo conseguirlo.&lt;br /&gt;Software que hace lo que el cliente necesita se puede conseguir mediante entregas continuas y tempranas, tal y como se ha explicado antes.&lt;br /&gt;Conseguir software que funcione es mucho más complicado pero es condición necesaria para conseguir la satisfacción del cliente. Esto, que puede parecer algo obvio, se suele olvidar en la mayoría de los desarrollos. La "&lt;i&gt;industria del software&lt;/i&gt;"&amp;nbsp;(clientes y proveedores)&amp;nbsp;está acostumbrada a rebajar las exigencias y a permitir errores en la mayoría de los proyectos que se realizan (ya sea por los tiempos de entrega, por la pobre formación de los desarrolladores, etc). A un desarrollo hay que exigirle que funcione y en eso es en lo que se centra el agilismo, en el software que funciona.&amp;nbsp;Cualquier otra cosa dejará al cliente insatisfecho.&amp;nbsp;Probablemente algún bug aparezca (ya sabéis, cualquier código contiene al menos un bug) pero se debe reducir la tasa de errores al mínimo (sobre todo en las funcionalidades principales).&amp;nbsp;Es cierto que no todos los desarrollos tendrán la misma calidad (Siempre habrá desarrolladores mejores y desarrolladores peores, pero eso solo puede tener influencia en el tiempo que se tarde en realizar el proyecto, en lo fácil o difícil que sea mantener dicho proyecto, etc), pero es necesario exigirnos que funcionen&amp;nbsp;(Un Seat y un Ferrari funcionan, la diferencia está en el proceso de montaje, en la calidad de los materiales, etc).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;Conclusiones&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;b&gt;El primer principio ágil:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;ul&gt;&lt;li&gt;se basa en el la &lt;b&gt;satisfacción del&amp;nbsp;cliente&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;muestra como obtener un &lt;b&gt;feedback periódico del cliente&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;indica la necesidad de &lt;b&gt;e&lt;/b&gt;&lt;b&gt;ntregar lo que el cliente necesita.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;avisa de la importancia que tiene el entregar &lt;b&gt;software que funciona&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-5677455617190814998?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/5677455617190814998/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/11/principios-agiles-1.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5677455617190814998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5677455617190814998'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/11/principios-agiles-1.html' title='Principios Ágiles #1'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0fjBGCsPOPo/SwQuABEGbUI/AAAAAAAAAB8/2cdLgxOVDHU/s72-c/satisfaction.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-5551672924707635226</id><published>2009-11-12T21:34:00.001+01:00</published><updated>2009-11-12T21:46:29.147+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kanban'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile-Spain'/><title type='text'>9º Encuentro Agile-Madrid. Kanban</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sites.google.com/site/agilemadrid/_/rsrc/1242533195481/config/app/images/customLogo/customLogo.gif?revision=4"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 110px; height: 76px;" src="http://sites.google.com/site/agilemadrid/_/rsrc/1242533195481/config/app/images/customLogo/customLogo.gif?revision=4" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Ayer se celebró la 9ª reunión del grupo local de Madrid en las oficinas de &lt;a href="http://11870.com/"&gt;11870.com&lt;/a&gt;. El tema de la reunión era &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Kanban&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;, un tema que, particularmente, me resultaba muy interesante (en mi empresa soy "Kanban-master" de un equipo). A la llamada acudimos 10 caras conocidas (todos eramos "habituales" de las reuniones, aunque yo falté a las dos últimas...) dispuestos a aprender y compartir experiencias.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;La reunión comenzó con una charla de Agustín Yagüe sobre los fundamentos de Kanban (&lt;/span&gt;&lt;a href="http://sites.google.com/site/agilemadrid/reuniones/2009-11-11"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Aquí&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; tenéis la página de la reunión. Están las transparencias de la presentación y las lecturas recomendadas. De estas, yo recomiendo &lt;/span&gt;&lt;a href="http://www.infoq.com/articles/hiranabe-lean-agile-kanban"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;ésta&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;. Muy buen artículo. Además, José Manuel Beas ha colgado el vídeo de la presentación &lt;a href="http://vimeo.com/channels/69150#7574367"&gt;aquí&lt;/a&gt;). Normalmente no empezamos así las reuniones pero la verdad es que estuvo bien comenzar con una pequeña introducción sobre el tema porque nos hizo adoptar un vocabulario común (el expresado en la presentación). Además, la gente que no conocía Kanban pudo entender por lo menos de que se iba a discutir en la reunión. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Después de la presentación, Agustín preparó un pequeño ejercicio práctico en el que los asistentes simulábamos un proceso guiado mediante Kanban. La verdad es que fue muy divertido y bastante instructivo. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Lo que me llevo sobre Kanban de la reunión es lo siguiente:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Kanban es un sistema &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;pull&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;, es decir, no se hace nada hasta que te lo pida la siguiente fase (y la fase final es el cliente que demanda un producto).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Kanban está basado en señales. En el caso del desarrollo de software esas señales son los post-it con las tareas a realizar y los movimientos de dichos post-it que, al dejar un hueco indican la posibilidad de crear algo.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Los pilares de Kanban son &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;limitar el trabajo en progreso&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; (evitar la sobreproducción, es decir, no hacer más de lo que el cliente pida) y la &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;mejora continua del proceso&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; (cualquiera de los miembros del equipo es capaz de descubrir posibles mejoras en el proceso).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Kanban necesita un workflow para funcionar. Dicho workflow puede ser tan simple o tan complicado como se quiera (Desde el típico ToDo-Doing-Done hasta flujos complejos).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Kanban dice que l&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;os equipos deben ser multidisciplinares&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; ya que, cuando una de las fases se convierte en un cuello de botella, las personas bloqueadas por dicha fase deben hacer todo lo posible por desbloquearla (Ayudando a la persona que está en dicha fase). Sin embargo, el basarse en un workflow &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;implica cierto grado de especialidad&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; (Tú vas a estar más tiempo en la fase a la que pertenezcas y menos en las otras, ya que en las otras solo estarás si las cosas van mal).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Que Kanban sea capaz de modelar flujos complejos puede llevarnos a pensar en desarrollo "waterfall" con equipos específicos para cada taréa. Si bien Kanban te permite modelar un proyecto a la "waterfall" no hay que olvidar que Kanban es simplemente una herramienta y que depende del que la usa.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Kanban, al limitar el trabajo en progreso de forma explícita evita el multi-tasking en los miembros del equipo, no como Scrum en el que es el propio equipo el que se autogestiona y decide si hace o no multi-tasking (aunque está claro que es una mala práctica hacerlo ;) ).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Lo que me llevo del nuevo formato de la reunión, ya que no pude quedarme a la retrospectiva es:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Empezar con una introducción/presentación me parece muy buena idea, aunque quizás debería haber sido algo más corta. Ayuda a que todos los asistentes sepan de que se está hablando.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Aunque nos vamos de hora (yo me fuí a las diez menos veinte y todavía quedaba la retro) me quedo con ganas de más :D&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Me perdí las cañas :(&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-5551672924707635226?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/5551672924707635226/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/11/9-encuentro-agile-madrid-kanban.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5551672924707635226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/5551672924707635226'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/11/9-encuentro-agile-madrid-kanban.html' title='9º Encuentro Agile-Madrid. Kanban'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-787363091133836404</id><published>2009-10-27T17:27:00.007+01:00</published><updated>2009-10-27T23:44:27.152+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile Open Spain'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile-Spain'/><title type='text'>Agile Open Spain 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0fjBGCsPOPo/Suchm1T9PDI/AAAAAAAAAAU/k392ZN5wDVo/s1600-h/LogoAgileOpen.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 153px; height: 116px;" src="http://2.bp.blogspot.com/_0fjBGCsPOPo/Suchm1T9PDI/AAAAAAAAAAU/k392ZN5wDVo/s320/LogoAgileOpen.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5397319629456358450" /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:verdana;"&gt;El pasado 23 y 24 de octubre se celebró en la Universidad Politécnica de Madrid el primer (y esperemos que no último) Agile Open Spain. Os presento mis recuerdos de las sesiones a las que asistí.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Lean in Agile Adoption&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;En un principio esta charla la iba a introducir Robin Dymond, pero no pudo asistir (Creemos que se quedó sobado, pero no estamos seguros) y Xavier Quesada se encargó de reemplazarlo. Xavier Quesada es uno de los impulsores del agilismo hispanohablante y siempre es un placer poder escuchar sus opiniones.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Estuvimos hablando un poco sobre los principios Lean y su posible mapeo al desarrollo de software, aunque teníamos claro que no había que tomarlos como reglas (por algo son principios). &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Lo más interesante de esta charla fue cuando Xavier nos introdujo el concepto de &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Value_stream_mapping"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Value Stream Mapping&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; y como aplicarlo en tu empresa para eliminar tiempos de espera. En próximas entradas intentaré hablar de ésto con algo más de conocimiento porque la verdad es que merece la pena.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Caminos de adopción ágil&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Esta sesión la presentaban Jorge Uriarte y Angel Medinilla. Tenía muchas ganas de conocerles y la verdad es que no me defraudaron. Son dos monstruos del agilismo español.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;La sesión comenzó con la identificación de problemas a la hora de implementar una metodología ágil en tu empresa. Aparecieron cuatro grandes grupos de impedimentos:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;La gerencia no apoya el cambio&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. La causa principal de esta falta de apoyo se debe a que no sabemos venderle a la gerencia las virtudes del cambio ágil. Debemos aprender a hablar el idioma de la gerencia si queremos que nos hagan caso.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Los compañeros no quieren modificar su forma de trabajar&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. Una parte de la plantilla teme que la transparencia que aportan las metodologías ágiles muestre su poca productividad. Se planteo que, a la hora de realizar cualquier cambio, primero hay que aliarse con los emprendedores de la empresa y después convencer a la gran masa de indecisos, de forma que los intransigentes al cambio no tengan más remedio que tragar.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Los clientes no se implican&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. Se habló de que al cliente había que venderle las ventajas. Un cliente no va a decir que no a entregas mensuales, no va a decir que no a un informe diario del estado del proyecto, no va a decir que no a la posibilidad de modificar el proyecto si descubre que lo que pidió no le sirve, etc.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;El proceso de implantación no funciona&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. La mayoría de los problemas encontrados en este grupo se referían a la fase en la que ya hemos conseguido implantar la metodología en algún equipo pero se hacía difícil escalar a toda la empresa.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Agilismo de guerrilla&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Xavi Gost, para mi el crack del evento, introdujo el tema de como implantar en el agilismo (y sobre todo las prácticas de XP) en una empresa sin permiso. Fue una charla espectacular. Manipulación, engaño, sabotaje... todo tiene cabida a la hora de implantar ágil :D&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Los puntos más importantes de la sesión:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Hay que ser valiente. &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Si nadie hace test, empieza tú&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. No han despedido a nadie por hacer test pero, si te echan, además de ser unos capullos, que lo pongan en la carta de despido. Es probable que te sirva como carta de recomendación en otra empresa :D&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;No hay que  esperar agradecimiento. &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Haces XP porque te gusta&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; y porque quieres cambiar la industria. Si tus compañeros no hacen pair programming pideles ayuda con algo, aunque sepas hacerlo. Estarán haciendo pair programming sin saberlo.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Haz integración continua. Aunque sea monta un Hudson en tu equipo. Cuando el equipo se acostumbre a él, quitaselo. Veras como empiezan a pedir un servidor de IC :D&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Un guerrillero no debe ir de cara contra el ejercito. Es decir, se sutil. No te lances al vacío. Ve poco a poco. Conquista primero a los que están más cerca y expándete poco a poco.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;A veces, un guerrillero tiene que sabotear por el bien común. Si un proyecto es un infierno en cuanto a mantenibilidad y consumo de recursos, haz que dicho infierno sea visible para la gerencia.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Si tus compañeros se resisten al cambio, utiliza la manipulación. Si no quieren hacer reuniones diarias invítales todos los días a un café y que te cuenten en que andan.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Fue una charla muy divertida en la que se dijeron verdades como puños.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;The rise of the agile hacker (o la charla del queso)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Luismi Cavallé propuso una de las charlas más interesantes del Agile Open Spain. Nos introdujo el movimiento &lt;/span&gt;&lt;/span&gt;&lt;a href="http://arxta.net/"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;ARxTA&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. Si visitáis&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#E7E7E7;"&gt;&lt;span class="Apple-style-span" style="line-height: 24px;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=" color: rgb(231, 231, 231); line-height: 24px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);  line-height: normal; "&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;la página veréis que la primera frase dice algo así como:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Nosotros creemos que el manifiesto ágil está siendo simplificado, su idea se está comercializando y está perdiendo su espíritu.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Brian Marick, uno de los firmantes originales del manifiesto ágil,  está impulsando este movimiento debido a la creciente comercialización de la marca "Agile". El nombre completo de este movimiento es Artisanal Retro-Futurism crossed with Team-Scale Anarcho-Syndicalism.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Artisanal&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;: Se refiere a que el programador es más un artesano que un ingeniero. Este concepto ya apreció en varias de las sesiones del Agile Open Spain.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Retro-Futurism&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;: Es cierto que las personas son más importantes que la tecnología, pero también es muy importante el uso que esas personas le dan a la tecnología a la hora de desarrollar software. Además, la tecnología es necesaria. Por ejemplo, Ron Jeffries dice "&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;si no haces XP, olvidate de hacer SCRUM&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;" ¿Como haces XP con FORTRAN?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Team-Scale Anarcho-Syndicalism&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;: Es importante la autogestión a nivel de equipo, pero ¿por qué no pensamos más allá? ¿Son necesarios los jefes? ¿Por qué no es posible una comunidad de programadores artesanos capaces de autogestionarse a la hora de repartirse el trabajo existente?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;A mi esta sesión me dejo trastocado. Salí emocionado y con ganas de trabajar e impulsar el movimiento ARxTA.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Mortal Kombat y Pair Programming&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;La sesión comenzó con un pequeño debate sobre si XP mola o no mola. La opinión generalizada es que es útil cuando los niveles de la pareja son aprendiz-maestro pero que realmente es poderosa cuando se realiza entre pares equilibrados.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Tras la pequeña discusión comenzó el combate entre José Manuel Beas y Xavi Gost. Hicieron una sesión de Ping-Pong Programming que dio mucho que hablar sobre estilo.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Conclusiones&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Para mi ha sido una de las mejores "conferencias" en las que he estado. Espero que se repita y que, como dice Xavi Gost:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;blockquote&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Mantengamos el Open Agile como un evento por y para la comunidad[...]&lt;br /&gt;mantengamos el Open Agile lo mas "puro" posible y si se pudiera&lt;br /&gt;financiar de los restos de otros eventos (conferencias , cursos,&lt;br /&gt;jornadas) de pago , lo ideal es que no tuviera ni sponsors&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-787363091133836404?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/787363091133836404/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/10/agile-open-spain-2009.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/787363091133836404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/787363091133836404'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/10/agile-open-spain-2009.html' title='Agile Open Spain 2009'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_0fjBGCsPOPo/Suchm1T9PDI/AAAAAAAAAAU/k392ZN5wDVo/s72-c/LogoAgileOpen.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7428639459298659300.post-434806318139675245</id><published>2009-10-27T00:01:00.004+01:00</published><updated>2009-10-27T19:32:30.905+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile-Spain'/><title type='text'>Presentación: ¿Por qué un blog?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_0fjBGCsPOPo/SuYzW0YlH1I/AAAAAAAAAAM/b5aeDRl042M/s1600-h/phoca_thumb_m_question-mark.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://1.bp.blogspot.com/_0fjBGCsPOPo/SuYzW0YlH1I/AAAAAAAAAAM/b5aeDRl042M/s320/phoca_thumb_m_question-mark.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5397057670561996626" /&gt;&lt;/a&gt;&lt;br /&gt;Porque después de estar en el Agile Open Spain 2009 tengo la necesidad de seguir compartiendo.&lt;br /&gt;&lt;br /&gt;Porque creo que es necesario aprovechar el impulso y generar contenido en español tanto sobre metodologías ágiles como sobre buenas prácticas en el desarrollo de software.&lt;br /&gt;&lt;br /&gt;Porque quiero una comunidad activa, que comparta y aprenda.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Porque, aunque aún  se que tengo mucho que aprender, creo que puedo enseñar algo de lo que ya he aprendido.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Porque me apetece.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mi nombre es Alberto Peña y soy agilista :D&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7428639459298659300-434806318139675245?l=plagelao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plagelao.blogspot.com/feeds/434806318139675245/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://plagelao.blogspot.com/2009/10/presentacion-por-que-un-blog.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/434806318139675245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7428639459298659300/posts/default/434806318139675245'/><link rel='alternate' type='text/html' href='http://plagelao.blogspot.com/2009/10/presentacion-por-que-un-blog.html' title='Presentación: ¿Por qué un blog?'/><author><name>Alberto Peña Abril</name><uri>http://www.blogger.com/profile/17197118160282601941</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://4.bp.blogspot.com/_0fjBGCsPOPo/SuckXXqN10I/AAAAAAAAAAg/tFjyl9E2sRc/S220/elfo.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0fjBGCsPOPo/SuYzW0YlH1I/AAAAAAAAAAM/b5aeDRl042M/s72-c/phoca_thumb_m_question-mark.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
