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

<channel>
	<title>Diario de un programador &#187; Libros</title>
	<atom:link href="http://blog.cuerty.com/category/books/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cuerty.com</link>
	<description>Historias, pensamientos, ideas y proyectos de un programador viviendo en Buenos Aires, Argentina.</description>
	<lastBuildDate>Wed, 16 Jun 2010 20:38:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Buildbot: ¿Que?</title>
		<link>http://blog.cuerty.com/2009/11/18/buildbot-%c2%bfque/</link>
		<comments>http://blog.cuerty.com/2009/11/18/buildbot-%c2%bfque/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 13:25:06 +0000</pubDate>
		<dc:creator>qwerty</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blog.cuerty.com/?p=105</guid>
		<description><![CDATA[Este es el segundo post sobre django-yabe, mi propio blog engine.
Primero un poco de background, a principio de año lei el libro “The productive programmer”.

La verdad no es un gran libro, me deje llevar por un par de reviews y el glosario parecía interesante, pero resulto ser una colección de anécdotas (algunas muy buenas) y [...]]]></description>
			<content:encoded><![CDATA[<p>Este es el segundo post sobre <a href="http://bitbucket.org/cuerty/django-yabe/" target="_parent">django-yabe</a>, mi propio blog engine.</p>
<p>Primero un poco de background, a principio de año lei el libro “<a href="http://oreilly.com/catalog/9780596519544" target="_parent">The productive programmer</a>”.</p>
<p><img src="http://covers.oreilly.com/images/9780596519544/cat.gif" alt="The Productive Programmer" width="180" height="236" align="Center" /></p>
<p>La verdad no es un gran libro, me deje llevar por un par de reviews y el glosario parecía interesante, pero resulto ser una colección de anécdotas (algunas muy buenas) y alguna que otra analogía que me ayudaron a entender mejor algunos conceptos, pero el resumen del libro se puede hacer en una palabra: automatizar.</p>
<p>Automatizar es genial: cualquier trabajo repetitivo es propenso a errores cuando lo realiza una persona, en cambio cuando lo hace una computadora no. Una computadora no se “olvida de un parámetro” o “se saltea un paso”, la computadora hace lo que le digamos y listo (Si sabemos decírselo es otro tema). Y dentro de la creación de software existen muchas tareas que se pueden hacer de forma automática, una de ellas es la integración continua (del ingles Continuous Integration):</p>
<blockquote><p>Integración continua es una practica del desarrollo de software donde los miembros de un equipo integran su trabajo frecuentemente, normalmente cada persona integra su trabajo al menos una ve por día – dando múltiples integraciones por día. Cada una de estas integraciones es verificada por una construcción automática del software (incluyendo los tests) para detectar errores de integración tan rápido como sea posible. Muchos equipos encontraron que este acercamiento llevo a reducir significativamente los problemas de integración y permitió al equipo a desarrollar software de una forma mas rápida.</p>
<p>Martin Fowler, <a href="http://www.martinfowler.com/articles/continuousIntegration.html" target="_parent">Continuous Integration</a></p></blockquote>
<p>El primer paso para la integración continua se logra teniendo el código fuente de la aplicación en algún sistema de control de versiones (SCM por sus siglas en ingles). Particularmente a mi me gusta <a href="http://mercurial.selenic.com/" target="_parent">Mercurial</a> por ser distribuido y simple, pero existen otras opciones como <a href="http://git-scm.com/" target="_parent">GIT</a> y <a href="http://subversion.tigris.org/" target="_parent">Subversion</a>. El segundo paso es tener una construcción automática (automated build).</p>
<p>¿Que es un “automated build”? Del mismo texto de Fowler:</p>
<blockquote><p>Hacer que el código fuente se convierta en un sistema funcionando puede ser un proceso complicado que involucre compilar, mover archivos, cargar esquemas en las bases de datos y mas. Pero, como la mayoría de las tareas en el desarrollo de software, puede ser automatizada y, como consecuencia de esto, debe ser automatizada. Pedirle a personas que escriban comandos o hagan clicks en ventanas de dialogo es una perdida de tiempo y un campo fértil para errores.</p></blockquote>
<p>Así que entendemos a un automated build como tomar el código fuente y llevarlo a un sistema andando, en el que corremos las pruebas de forma automática. ¡Eso es perfectamente scripteable! Puede hacerse un hook para el SCM que elijamos que cuando recibe un commit se encargue de correr un script que compile el código (en este caso en particular estoy usando Python para el proyecto, así que no se compila, ¡pero puede correr los tests!), es tan fácil que me sorprende que nadie lo halla hecho ya&#8230; <a href="https://hudson.dev.java.net/" target="_parent">Hudson</a>, <a href="http://cruisecontrol.sourceforge.net/" target="_parent">CruiceControl</a> o <a href="http://bitten.edgewall.org/" target="_parent">Bitten</a> (de los creadores de <a href="http://trac.edgewall.org/" target="_parent">Trac</a>) son algunos de los que ya lo hicieron, y hay muchos mas en <a href="http://en.wikipedia.org/wiki/Continuous_Integration#Software" target="_parent">la pagina de Wikipedia al respecto</a>. De hecho <a href="http://micropipes.com/blog/2009/11/17/amo-development-changes-in-2010/" target="_parent">ayer anunciaron en Mozilla</a> que van a empezar a utilizar Hudson para el desarrollo de la pagina de Addons de Firefox y Thunderbird.</p>
<p>Mi gusto particular en herramientas de CI es <a href="http://buildbot.net/" target="_parent">BuildBot</a>. La primer razón por la que me gusta es porque esta hecho en Python, y se puede extender y configurar utilizando este lenguaje. Eso es una ventaja grande porque en el espíritu de ser DRY puedo hacer que configuraciones como “a quienes avisarles por email cuando falla un build” puedo, en lugar de escribirlas en la configuración, hacer que las lea dinamicamente de la base de datos de <a href="http://www.redmine.org/" target="_parent">Redmine</a> o Trac para el proyecto en cuestión. La segunda es que es muy completo, tiene distintas formas de notificarte, trabaja con muchos SCM (Subversion, Mercurial, GIT, ¡hasta CVS!) y tiene una documentación que es muy buena como referencia, aunque lamentablemente es pésima como introducción.</p>
<p>Así que el plan para el próximo post es configurar que cuando subo código al repositorio de Mercurial para django-yabe, BuildBot haga un build (Django tiene un <a href="http://docs.djangoproject.com/en/dev/topics/testing/" target="_parent">framework de unittesting</a> muy completo) y me avise por email si fallo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cuerty.com/2009/11/18/buildbot-%c2%bfque/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quote</title>
		<link>http://blog.cuerty.com/2009/11/17/quote/</link>
		<comments>http://blog.cuerty.com/2009/11/17/quote/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 23:45:33 +0000</pubDate>
		<dc:creator>qwerty</dc:creator>
				<category><![CDATA[Libros]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blog.cuerty.com/?p=102</guid>
		<description><![CDATA[Good programs do not contain spelling errors or have grammatical mistakes. I think this is probably a result of fractal attention to detail; in great programs things are correct at all levels, down to the periods at the ends of sentences in comments.
Dad hacker en  30 years of C

Me viene justo porque estoy leyendo  The [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Good programs do not contain spelling errors or have grammatical mistakes. I think this is probably a result of fractal attention to detail; in great programs things are correct at all levels, down to the periods at the ends of sentences in comments.</p>
<p style="text-align: right;">Dad hacker en  <a title="30 years of C" href="http://www.dadhacker.com/blog/?p=1132">30 years of C</a></p>
</blockquote>
<p>Me viene justo porque estoy leyendo  <a title="The Elements of Style" href="http://www.bartleby.com/141/">The Elements of Style</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cuerty.com/2009/11/17/quote/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herramientas: Una buena obsesión</title>
		<link>http://blog.cuerty.com/2009/05/06/herramientas-una-buena-obsesion/</link>
		<comments>http://blog.cuerty.com/2009/05/06/herramientas-una-buena-obsesion/#comments</comments>
		<pubDate>Wed, 06 May 2009 18:53:38 +0000</pubDate>
		<dc:creator>qwerty</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[Libros]]></category>

		<guid isPermaLink="false">http://blog.cuerty.com/?p=77</guid>
		<description><![CDATA[Como ya mencioné en otros posts la elección de las herramientas con las que trabajo es una obsesión, una sana pero exigente obsesión. Considero a esa particular mirada a como trabajo y si lo hago lo suficientemente efectivo como sana porque me gusta trabajar menos. ¿A quien no? Si hay algo que estoy haciendo de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><span><span style="font-family: Verdana;">Como ya mencioné en <a href="http://blog.cuerty.com/2009/03/22/sobre-editar/">otros</a> <a href="http://blog.cuerty.com/2009/03/22/sobre-editar/">posts</a> <strong>la elección de las herramientas con las que trabajo es una obsesión,</strong> una sana pero exigente obsesión. Considero a esa particular mirada a como trabajo y si lo hago lo suficientemente efectivo como sana porque me gusta trabajar menos. ¿A quien no? <strong>Si hay algo que estoy haciendo de una forma no-óptima en mi trabajo quiero darme cuenta, corregirlo, y disfrutar de ese tiempo haciendo otras cosas</strong>.</span></span></p>
<p style="text-align: justify;"><span><span style="font-family: Verdana;">En su libro <a title="The Seven Habits of Highly Effective People" href="http://www.amazon.com/Habits-Highly-Effective-People/dp/0743269519">The 7 Habits of Highly Effective People</a> Stephen Covey crea una de las analogías mas claras sobre esto:</span></span></p>
<blockquote style="text-align: justify;">
<p style="text-align: justify;"><span><span style="font-family: Verdana;">Un hombre se encontró con un leñador en las montañas. El hombre paro a observar al leñador, mirándolo atentamente mientras talaba un gran árbol. El noto que el leñador sudaba mientras trabajaba talando y talando, pero que no avanzaba mucho en su tarea. El espectador entonces noto que la a sierra que el leñador estaba usando estaba tan afilada como un cuchillo de manteca. Entonces le dijo: “Disculpe señor leñador, no pude dejar de notar que duro que esta trabajando en ese árbol, pero sin avanzar mucho”. El leñador respondió mientras se secaba el sudor de la frente, “Si&#8230; lo se. Este árbol me esta dando algunos problemas.”. El espectador entonces le dijo, “Pero señor leñador, su sierra tiene tan poco filo que es imposible que corte algo.” “Lo se”, dijo el leñador, “pero estoy muy ocupado talando este árbol como para ponerme a afilar la sierra.”</span></span></p>
<p style="text-align: right;"><em><span><span style="font-family: Verdana;">“Sharpen the Saw”, The 7 Habits of Highly Effective People, Stephen R. Covey, 1989</span></span></em></p>
<p style="text-align: right;">
<p style="text-align: right;">
<div class="wp-caption aligncenter" style="width: 250px"><span><span><a href="http://www.amazon.com/Habits-Highly-Effective-People/dp/0671708635"><img src="http://blog.cuerty.com/wp-includes/images/attachments/7_highly_effective_people.jpg" alt="The 7 Habits of Highly Effective People" width="240" height="240" /></a></span></span><p class="wp-caption-text">The 7 Habits of Highly Effective People</p></div></blockquote>
<p style="text-align: justify;"><span><span style="font-family: Verdana;">Si bien el libro no es exclusivo de programadores recomiendo leerlo porque sirve bastante bien para nuestra disciplina.</span></span></p>
<p style="text-align: justify;">Personalmente considero que de las herramientas que utilizo día a día le saco el jugo a unas pocas, <a href="http://www.vim.org">vim</a>, <a href="http://www.getfirefox.com">firefox</a>, <a href="http://www.zsh.org">zsh</a> y la shell en general, y quizás a <a href="http://www.python.org">Python</a> como lenguaje de scripting para automatizar las tareas repetitivas. Pero sin mucho esfuerzo <strong>veo muchos mas lugares donde podría mejorar los programas que uso o elegir mejores programas para usar:</strong></p>
<p style="text-align: justify;">El rol que cumplo en mi trabajo se puede llamar “Project Manager Pulpo”, porque son varios los proyectos que “llevo adelante” y una de las formas de comunicación mas comunes es el email, para el cual utilizo Thunderbird. Hay decenas de metodologías para organizar/seguir varios temas por email, yo personalmente sigo una versión bastante liberal de GTD (<a title="Getting Things Done: The Art of Stress-Free Productivity" href="http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1241635143&amp;sr=8-1">Getting Things Done: The Art of Stress-Free Productivity</a>, David Allen, 2002) pero mucho del trabajo que hago es manual (Como marcar emails con etiquetas “Por Hacer” y “Esperando Respuesta”), debería automatizar eso, y quizás pasarme a mutt, getmail, maildrop y scriptearlo un poco mas así hago uso de vim en mutt.</p>
<p style="text-align: justify;">El libro que estoy leyendo ahora es <a title="The Productive Programmer" href="http://oreilly.com/catalog/9780596519780/">The Productive Programmer</a>, si bien aun voy por los primeros capítulos ya me dio bastantes temas en los que pensar, y me motivo a hacer algunas pruebas: <strong>utilizar macros</strong> (una función de vim que siempre supe que existía pero ignore deliberadamente), <strong>utilizar un program launcher</strong> (tenia keybinds a los programas mas utilizados, pero con Gnome-Do ahora puedo hacer prácticamente todo sin mover mis manos del teclado hacia el mouse), aprovechar mejor algunas funcionalidades de los SCM que utilizo (<a title="Mercurial" href="http://www.selenic.com/mercurial/wiki/">Mercurial</a> y <a title="Subversion" href="http://subversion.tigris.org/">Subversion</a>), y hasta <strong>aprovechar de forma eficiente los <a href="http://en.wikipedia.org/wiki/Virtual_desktop">virtual desktops</a>.</strong></p>
<p style="text-align: justify;">Hoy en Hacker News, un muy buen sitio si buscan estar informados del ambiente IT internacional, salio la siguiente pregunta: “<a title="Ask HN: Why no love for PHP?" href="http://news.ycombinator.com/item?id=595860">Ask HN: Why no love for PHP?</a> ” y me dio mucha risa la primer respuesta:</p>
<blockquote style="text-align: justify;">
<p style="text-align: justify;"><span><span style="font-family: Verdana;"><strong>Las personas que son realmente buenas en sus trabajos se obsesionan sobre sus herramientas.</strong> Los artistas se obsesionan sobre la pintura, los carpinteros sobre sus herramientas a medida y los cocineros sobre sus cuchillos.</span></span></p>
<p>PHP es como comprar un cuchillo de chef en Wal-Mart. Vos podes hacer un plato 5 estrellas con el, corta perfectamente, pero no inspira la misma pasión que un cuchillo Shun.</p></blockquote>
<p style="text-align: justify;"><span><span style="font-family: Verdana;">Esto se extiende a todo. Si elegís el mejor editor de texto, uno completo <a title="Sobre editar..." href="http://blog.cuerty.com/2009/03/22/sobre-editar/">como el que describí en mi primer post en este blog</a>, vas a darle un uso y una importancia mucho mas alta que la que va a tener notepad que también puede editar código. Si elegís cualquier SCM, seguramente sea para tirar código ahí, si evalúas los pro y contras de cada uno seguramente cuando lo uses vas a aprovechar esos pro y no ignorarlos o dejarlos en desuso.</span></span></p>
<p style="text-align: justify;">Dejo para otro día elaborar una lista de lo que podría considerarse las herramientas básicas de cada programador, ya enumere editor y SCM pero creo que hay muchas mas y cada una se merece su artículo aparte.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cuerty.com/2009/05/06/herramientas-una-buena-obsesion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
