<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Curiosity-Driven</title>
	<atom:link href="http://curiositydriven.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://curiositydriven.wordpress.com</link>
	<description>The personal weblog of Tero Parviainen</description>
	<lastBuildDate>Thu, 29 Nov 2007 16:00:13 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='curiositydriven.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/5e3e5e8eea5104ba8ed211bd4372bd3c?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Curiosity-Driven</title>
		<link>http://curiositydriven.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://curiositydriven.wordpress.com/osd.xml" title="Curiosity-Driven" />
		<item>
		<title>The Truth about Finnish Factory Farming</title>
		<link>http://curiositydriven.wordpress.com/2007/11/29/the-truth-about-finnish-factory-farming/</link>
		<comments>http://curiositydriven.wordpress.com/2007/11/29/the-truth-about-finnish-factory-farming/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 16:00:13 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/11/29/the-truth-about-finnish-factory-farming/</guid>
		<description><![CDATA[Oikeutta Eläimille, the Finnish animal rights organization, unveiled their new campaign &#8220;Julma totuus&#8221; yesterday. And what a beautifully executed campaign it is! They have documented the state of things on 101 Finnish farms in videos and photographs, and made it all available online.
The TV magazine news show A-Studio picked up on the matter and broadcast [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=20&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.oikeuttaelaimille.net">Oikeutta Eläimille</a>, the Finnish animal rights organization, unveiled their new campaign &#8220;<a href="http://tehotuotanto.net/">Julma totuus</a>&#8221; yesterday. And what a beautifully executed campaign it is! They have documented the state of things on 101 Finnish farms in videos and photographs, and made it all available online.</p>
<p>The TV magazine news show <a href="http://www.yle.fi/aohjelmat/astudio/">A-Studio</a> picked up on the matter and <a href="http://areena.yle.fi/toista?id=937785">broadcast some of the material</a>. They also had some talking heads in to discuss the material. Jaana Husu-Kallio, the director of <a href="http://www.evira.fi/">The Finnish Food Safety Authority</a> failed to put up a convincing argument, and instead alluded to these being &#8220;isolated incidents&#8221; and made some vague references to &#8220;scientific advances&#8221; that are supposed to alleviate the suffering of these animals.</p>
<p>They also had Elisa Aaltola (a <a href="http://www.vastapaino.fi/vp/index.php?page=shop.product_details&amp;flypage=$flypage&amp;product_id=46">prominent animal ethics expert</a>) in, and boy, did she make her case like Noam fucking Chomsky! While successfully linking the broader issue of our twisted relationship to animals to the discussion, she also had her facts straight, where Husu-Kallio didn&#8217;t: When asked about what the EU regulations say about the crowdedness of broiler chicken buildings, she did not have a number. Aaltola did: They are allowed to stock up to 38 kilograms of chickens per square metre.</p>
<p>It will be interesting to see how all of this plays out. I&#8217;m not getting my hopes up though. (Then again the <a href="http://www.facebook.com/group.php?gid=6090086682">Facebook group</a> has gone up to 360 members in one day&#8230;) Certainly most of the information here is nothing new, and so far it has mostly been stifled by the power of denial. But if there is one person in the country who, because of this material, starts to question the origins of their food, and that results in their consumption of animals going down, then, well, there&#8217;s that much less suffering in the world. It&#8217;s a nice thought.</p>
<p>It feels good to see an issue so important to me get some media attention. The animal rights movement has been so effectively marginalized that it rarely gets this kind of coverage, whereas <a href="http://www.broisku.fi/">this arse dribble</a> is funded by the state. Go figure.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=20&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/11/29/the-truth-about-finnish-factory-farming/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
		<item>
		<title>Battles &amp; Body Riddles</title>
		<link>http://curiositydriven.wordpress.com/2007/11/04/battles-body-riddles/</link>
		<comments>http://curiositydriven.wordpress.com/2007/11/04/battles-body-riddles/#comments</comments>
		<pubDate>Sun, 04 Nov 2007 13:05:54 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/11/04/battles-body-riddles/</guid>
		<description><![CDATA[This weekend I was quite vividly reminded of why Warp Records was one of the most important sources of music for me during my teenage years. This happened in the form of two albums I hadn&#8217;t heard (of) before:
Mirrored by Battles, released earlier this year blew my socks off, and is quite unlike anything I&#8217;ve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=19&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This weekend I was quite vividly reminded of why <a href="http://www.warprecords.com/">Warp Records</a> was one of the most important sources of music for me during my teenage years. This happened in the form of two albums I hadn&#8217;t heard (of) before:</p>
<p><a href="http://bleep.com/?bleep=WARPCDD156">Mirrored</a> by <a href="http://www.bttls.com/">Battles</a>, released earlier this year blew my socks off, and is quite unlike anything I&#8217;ve ever heard before.</p>
<p><a href="http://bleep.com/?bleep=WARPCDD149">Body Riddle</a> by (Chris) <a href="http://www.throttleclark.com/">Clark</a> is.. well.. classic Warp. It&#8217;s been out for about a year now, and seems to be heavily influenced by RDJ et al. Lovely.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=19&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/11/04/battles-body-riddles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
		<item>
		<title>Taking the next step after a year of vegetarianism</title>
		<link>http://curiositydriven.wordpress.com/2007/11/04/taking-the-next-step-after-a-year-of-vegetarianism/</link>
		<comments>http://curiositydriven.wordpress.com/2007/11/04/taking-the-next-step-after-a-year-of-vegetarianism/#comments</comments>
		<pubDate>Sun, 04 Nov 2007 10:49:55 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[veganism]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/11/04/taking-the-next-step-after-a-year-of-vegetarianism/</guid>
		<description><![CDATA[It&#8217;s been  about a year now since I stopped eating animals. As the reasons I did this were mainly ethical, becoming a proper vegan has been the goal ever since. To commemorate this &#8220;anniversary&#8221;, I think this is as good a time as ever to stop fucking around and take it to the next [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=18&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>It&#8217;s been  about a year now since I stopped eating animals. As the reasons I did this were mainly ethical, becoming a proper <a href="http://en.wikipedia.org/wiki/Veganism">vegan</a> has been the goal ever since. To commemorate this &#8220;anniversary&#8221;, I think this is as good a time as ever to stop fucking around and take it to the next level.</p>
<p>There are a few main areas I still need to concentrate on before I&#8217;m able to call myself a vegan:</p>
<h3>Food</h3>
<p>For the past year I&#8217;ve pretty much been a <a href="http://en.wikipedia.org/wiki/Lacto-ovo_vegetarianism">lacto-ovo vegetarian</a>, meaning that although I haven&#8217;t eaten animal body parts, I&#8217;ve continued consuming eggs and dairy in situations where it would have been somehow inconvenient to decline them.</p>
<p>For my eating habits at home it isn&#8217;t a very big step to drop eggs and dairy, as I very seldom buy them anyway and never use them for food I cook myself.</p>
<p>It does mean dropping many ready-made and half-made products though, and start cooking more often. I&#8217;m actually looking forward to this, as I like cooking and this is a good reason to spend more time on it. Living in Kallio also has the big advantage that there is a phenomenal variety of ethnic food shops and <a href="http://www.deliservice.com/">other vegan-friendly shops</a> all within a few blocks from where I live.</p>
<p>The biggest change for my daily eating habits will be that for the most part I won&#8217;t be able to eat the food they serve at work, as even the vegetarian choices usually contain one form of animal secretion or another. This isn&#8217;t a big deal either, though, as I only have lunch at work occasionally, and I can always take food with me from home.</p>
<p>I&#8217;ll also educate my family a bit on what I&#8217;ll be able to eat. This won&#8217;t be a problem with my immediate family as my mum is very aware of these issues. Events like x-mas are a bigger challenge, but I&#8217;m confident I&#8217;ll be able to communicate my situation with a reasonable amount of explaining.</p>
<h4>Drink</h4>
<p>For the most part, I won&#8217;t have to change my drinking habits (thank God!), but I know they do <a href="http://vegans.frommars.org/wine/">use animal parts to make many wines and beers</a>, so I&#8217;ll keep an eye on it.</p>
<h4>Nutrition</h4>
<p>I&#8217;ll start taking plant-based <a href="http://en.wikipedia.org/wiki/B12">B12</a> as pills, as well as <a href="http://en.wikipedia.org/wiki/Vitamin_D">D</a> in wintertime (although I&#8217;m aware I probably should have done that even in my carnivorous days).</p>
<p>Protein intake is not going to be an issue, but I&#8217;ll need to be aware of it to make sure I get enough.</p>
<p>Most other nutritional issues will be taken care of naturally by having enough diversity in my diet. I might try keeping a dietary calendar for a while and calculating my nutritional intake, but let&#8217;s see.</p>
<h3>Clothing</h3>
<p>I&#8217;ll stop buying pieces of animal carcasses to decorate myself with. This affects mostly shoes, belts, wallets, coats, and other leather goods. The apparel I already have that&#8217;s made from animals, I&#8217;ll use until they wear out naturally.</p>
<p>Fur is no issue, as like any sane person, I&#8217;ve always declined it.</p>
<h3>Cosmetics</h3>
<p>I don&#8217;t use a lot of cosmetics, but I&#8217;ll make sure the ones I do use don&#8217;t include animal parts and haven&#8217;t been tested with animals.</p>
<h3>Medication</h3>
<p>I don&#8217;t use a lot of medication either, apart from the occasional painkiller.</p>
<p>In situations where I do need medication though, I won&#8217;t decline animal-tested meds when I need them. I&#8217;m aware that there are rarely options for medication that haven&#8217;t been tested on animals. However, I will try to be aware of my options and use vegan-friendly medication where such an option exists.</p>
<h3>Travel</h3>
<p>This is what I think will be the hardest part of becoming a vegan. I like to travel, and I&#8217;ve been to places  where vegetarian food has been difficult to find.</p>
<p>In most places, this is just a matter of inconvenience though. It will mean that in many places I may need to cook my own food and/or not have a very diverse diet. But this is very much an inconvenience I&#8217;m prepared to accept.</p>
<p>So, I still have some work to do in becoming a proper vegan. In the near future, I might write a separate post on the reasons I&#8217;m doing it. For now, I&#8217;ll just say it gives me a great peace of mind to know that I&#8217;ll no longer be directly paying for violence and murder to be inflicted on <a href="http://en.wikipedia.org/wiki/Sentience">sentient</a> beings.</p>
<p>Oh, and the effects on climate, global food distribution, as well as my own health are a pretty nice bonus too.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=18&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/11/04/taking-the-next-step-after-a-year-of-vegetarianism/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
		<item>
		<title>Freeform Fridays</title>
		<link>http://curiositydriven.wordpress.com/2007/10/14/freeform-fridays/</link>
		<comments>http://curiositydriven.wordpress.com/2007/10/14/freeform-fridays/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 16:19:19 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/10/14/freeform-fridays/</guid>
		<description><![CDATA[I think Google&#8217;s well-known &#8220;20 percent time&#8221; is an absolutely brilliant idea, and we&#8217;ve been having discussions of maybe implementing something similar at EfiCode. I&#8217;m fairly sure it could end up being the best thing since sliced bread.
Here&#8217;s my take on what we could do, which I call Freeform Fridays. It consists of three key [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=17&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I think Google&#8217;s well-known &#8220;20 percent time&#8221; is an absolutely brilliant idea, and we&#8217;ve been having discussions of maybe implementing something similar at EfiCode. I&#8217;m fairly sure it could end up being the best thing since sliced bread.</p>
<p>Here&#8217;s my take on what we could do, which I call Freeform Fridays. It consists of three key ideas: freeform work, brown bag sessions and video sessions.</p>
<p><strong>The basics</strong></p>
<p>Every Friday, say after 10 am, everyone is allowed to work on whatever they want. There are only two rules:</p>
<ol>
<li>Whatever you do, it should not be directly related to any project you&#8217;re currently involved in at work</li>
<li>You should share with others what you&#8217;re up to</li>
</ol>
<p>The time could be spent studying or experimenting with new technologies. It could also be used programming on some personal project. It could be contributing to an open source project, or starting a new one. It could be doing pro bono development for a non-profit organization. It could be solo work or teamwork.</p>
<p>If someone has an important meeting on a Friday, or if they&#8217;re just extremely busy, the free time could be rescheduled to another day.</p>
<p><strong>Brown Bag Sessions</strong></p>
<p>Every Friday we would provide the possibility to have take-out lunch together, and every Friday someone would do an informal presentation about some idea, technology or problem they&#8217;re working on, after which we could discuss it. We could probably schedule the sessions with a wiki page.</p>
<p><strong>The Video and Pulla Session</strong>s</p>
<p>We could continue the video sessions we&#8217;re already doing. They would just merge into the concept of &#8220;Freeform Fridays&#8221;.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=17&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/10/14/freeform-fridays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
		<item>
		<title>Rumbling for EfiCode?</title>
		<link>http://curiositydriven.wordpress.com/2007/10/14/rumbling-for-eficode/</link>
		<comments>http://curiositydriven.wordpress.com/2007/10/14/rumbling-for-eficode/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 15:34:57 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/10/14/rumbling-for-eficode/</guid>
		<description><![CDATA[One of the most important things Ruby did for me was that it helped me break out of the Java ghetto. Previously, Java was the only language I really knew well, and because of that I naturally thought it was the answer to every problem in the world. I&#8217;ve since learned how severely this limited [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=16&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>One of the most important things Ruby did for me was that it helped me break out of the Java ghetto. Previously, Java was the only language I really knew well, and because of that I naturally thought it was the answer to every problem in the world. I&#8217;ve since learned how severely this limited my creativity and ability to solve programming problems. Perhaps even more importantly, it actually made programming enjoyable again.</p>
<p>However, I still use Java professionally all the time, and don&#8217;t actually think it&#8217;s that bad.  My point is that learning to program in other languages well has greatly improved my ability to <em>think</em>. This has made me so much better at Java as well, than I would be had I not made the leap.</p>
<p>So, as learning many different languages and frameworks is obviously a good idea, I&#8217;ve been thinking of possibilities to enable people to experiment with them. One idea that this severely hung over brain of mine produced today was to organize an internal &#8220;coding competition&#8221; at <a href="http://www.eficode.fi/">EfiCode</a>. <a href="http://railsrumble.com/">Rails Rumble</a> was a good experience for me, and led to the thought that maybe we could do something similar.</p>
<p><strong>The Gist of It</strong></p>
<p>People are divided into 4-5 teams. Each team will create and deploy a web application, and they will do it in two days. The application domain can be anything, and there are no restrictions for the functionality (apart from that it must be browser-based). The only rule &#8211; and this is the interesting part &#8211; is that the application must be done in a language and framework the team has <em>never used before</em>.  Here&#8217;s some possibilities:</p>
<ul>
<li><a href="http://www.ruby-lang.org/en/">Ruby</a> and <a href="http://www.rubyonrails.org/">Rails</a></li>
<li><a href="http://www.squeak.org/">Smalltalk</a> and <a href="http://www.seaside.st/">Seaside</a></li>
<li><a href="http://www.python.org/">Python</a> and <a href="http://www.djangoproject.com/">Django</a></li>
<li><a href="http://www.erlang.org/">Erlang</a> and <a href="http://erlyweb.org/">Erlyweb</a></li>
<li><a href="http://www.scala-lang.org/">Scala</a> and <a href="http://liftweb.net/">Lift</a></li>
<li><a href="http://groovy.codehaus.org/">Groovy</a> and <a href="http://grails.codehaus.org/">Grails</a></li>
</ul>
<p>All members of a team will be physically located in the same space. Meeting rooms would probably be ideal for this. All workspaces are equipped with network connections, a projector, whiteboards,  index cards and other writing materials, and some refreshments.</p>
<p>Each team will get their own Subversion repository, and a fresh Linux server / VPS for deployment. All other software usage is voluntary, but access to <a href="http://studios.thoughtworks.com/mingle-project-intelligence">Mingle</a>, <a href="http://trac.edgewall.org/">Trac</a>, <a href="http://www.campfirenow.com/">Campfire</a> and a wiki will be provided.</p>
<p>At the end of the second day, all teams gather in the same place, and over a few beers, will in turn present their application. They&#8217;ll also be asked to discuss  the peculiarities of the technology they chose, what was good about it and what wasn&#8217;t that good.</p>
<p>After the presentation, we&#8217;ll have a vote on whose application was best. The winners will receive some kind of prize, such as some cool gadgets.</p>
<p>The comp would ideally be scheduled to start on a Thursday morning and finish the following Friday evening. We could possibly do this at the time of this year&#8217;s x-mas party, so after the competition we could continue with the festivities.</p>
<p>I think this would be an extremely fun exercise in programming and teamwork. And who knows, maybe the beginnings of a great product or two would also come out of it.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=16&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/10/14/rumbling-for-eficode/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
		<item>
		<title>Starting an X Virtual Framebuffer on boot</title>
		<link>http://curiositydriven.wordpress.com/2007/10/09/starting-an-x-virtual-framebuffer-on-boot/</link>
		<comments>http://curiositydriven.wordpress.com/2007/10/09/starting-an-x-virtual-framebuffer-on-boot/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 09:46:33 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/10/09/starting-an-x-virtual-framebuffer-on-boot/</guid>
		<description><![CDATA[While enabling automated Selenium test runs for a project, I came across a situation where I needed to run the tests in a browser on a headless Linux (RHEL) server. I wanted to always have an X Virtual Framebuffer on to run Firefox in, so I added it to init. The following script starts Xvfb [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=15&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>While enabling automated <a href="http://www.openqa.org/selenium-rc/">Selenium</a> test runs for a project, I came across a situation where I needed to run the tests in a browser on a headless Linux (RHEL) server. I wanted to always have an <a href="http://en.wikipedia.org/wiki/Xvfb">X Virtual Framebuffer</a> on to run Firefox in, so I added it to init. The following script starts <a href="http://en.wikipedia.org/wiki/Xvfb">Xvfb</a> on display :2.</p>
<p>1. Add the following to a file called /etc/init.d/xvfb</p>
<blockquote>
<pre><strong>#!/bin/sh
#
# Startup script for Xvfb
#
# chkconfig: 2345 79 21
# description: Xvfb - X virtual frame buffer
# processname: Xvfb
#
# Source function library.
. /etc/rc.d/init.d/functions</strong></pre>
<pre><strong>case "$1" in
  start)
        echo -n "Starting Xvfb services: "
        Xvfb :2 -screen 0 800x600x8 &amp;
        touch /var/lock/subsys/Xvfb
        ;;
  stop)
        echo -n "Stopping Xvfb services: "
        killproc Xvfb
        rm -f /var/lock/subsys/Xvfb
        ;;
  status)
        status Xvfb
        ;;
  restart|reload)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: xvfb {start|stop|status|restart}"
        exit 1
esac</strong></pre>
<pre></pre>
</blockquote>
<p>2. Make it runnable</p>
<blockquote>
<pre><strong>chmod +x /etc/init.d/xvfb </strong></pre>
</blockquote>
<blockquote></blockquote>
<p>3. Add it to boot</p>
<blockquote>
<pre><strong>/sbin/chkconfig --add xvfb
/sbin/chkconfig xvfb on   </strong></pre>
</blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=15&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/10/09/starting-an-x-virtual-framebuffer-on-boot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
		<item>
		<title>Visualizing Build Data Pt.2: Coverage Time-Series Multiples</title>
		<link>http://curiositydriven.wordpress.com/2007/10/02/visualizing-build-data-pt2-coverage-time-series-multiples/</link>
		<comments>http://curiositydriven.wordpress.com/2007/10/02/visualizing-build-data-pt2-coverage-time-series-multiples/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 14:09:22 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[continuous_integration]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/10/02/visualizing-build-data-pt2-coverage-time-series-multiples/</guid>
		<description><![CDATA[This post continues the exploration started in Pt.1
All packages in a project, all classes in a package, and all methods in a class could benefit from a display where they are all on the same screen, in small separate graphs.
This technique fits a lot of data on a screen without making things crowded. It also [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=13&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This post continues the exploration started in <a href="http://curiositydriven.com/2007/09/29/visualizing-build-data-pt1-simple-coverage-time-series/">Pt.1</a></p>
<p>All packages in a project, all classes in a package, and all methods in a class could benefit from a display where they are all on the same screen, in small separate graphs.</p>
<p>This technique fits a lot of data on a screen without making things crowded. It also scales quite well to larger numbers of categories.</p>
<p>The technique invites the user to make comparisons between categories, to identify differences and similarities, but it doesn&#8217;t compromise the significance of any individual time-series, as a single graph with multiple categories would do.</p>
<p><img src="http://curiositydriven.files.wordpress.com/2007/10/multiples.gif" alt="multiples.gif" /></p>
<p>This is the <em>small multiples</em> technique from Edward Tufte&#8217;s <a href="http://www.amazon.com/Envisioning-Information-Edward-R-Tufte/dp/0961392118/ref=pd_bbs_sr_1/002-7174997-5730431">Envisioning Information</a>:</p>
<blockquote><p><em>&#8220;Small multiple designs, multivariate and data bountiful<br />
answer directly by visually enforcing comparisons of changes,<br />
of the differences among objects, of the scope of alternatives.<br />
For a wide range of problems in data presentation,<br />
small multiples are the best design solution.&#8221;</em></p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=13&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/10/02/visualizing-build-data-pt2-coverage-time-series-multiples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>

		<media:content url="http://curiositydriven.files.wordpress.com/2007/10/multiples.gif" medium="image">
			<media:title type="html">multiples.gif</media:title>
		</media:content>
	</item>
		<item>
		<title>Visualizing Build Data Pt.1: Simple Coverage Time-Series</title>
		<link>http://curiositydriven.wordpress.com/2007/09/29/visualizing-build-data-pt1-simple-coverage-time-series/</link>
		<comments>http://curiositydriven.wordpress.com/2007/09/29/visualizing-build-data-pt1-simple-coverage-time-series/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 18:44:28 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[continuous_integration]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[coverage]]></category>
		<category><![CDATA[graphs]]></category>
		<category><![CDATA[statistics]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/09/29/visualizing-build-data-pt1-simple-coverage-time-series/</guid>
		<description><![CDATA[Many continuous integration servers that have been running for any significant period of time have accumulated a large amount of data about project health. This is especially true for projects that use code coverage and analysis tools.
However, often this data is just sitting there, in XML files on the build server, seen by no one. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=7&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Many <a href="http://en.wikipedia.org/wiki/Continuous_integration#Software">continuous integration servers</a> that have been running for any significant period of time have accumulated a large amount of data about project health. This is especially true for projects that use <a href="http://en.wikipedia.org/wiki/Code_coverage">code coverage</a> and <a href="http://en.wikipedia.org/wiki/Static_code_analysis">analysis</a> tools.</p>
<p>However, often this data is just sitting there, in XML files on the build server, seen by no one. Seems like an awful waste of perfectly good data to me. So during this fall I&#8217;m going to be thinking about what can be done with it to make it look more <a href="http://www.flickr.com/explore/interesting/">interesting</a>. Being a beginning student of <a href="http://www.edwardtufte.com/tufte/">information visualization</a>, I&#8217;m going to be especially concentrating on the visual aspect of things, but I&#8217;ll bet I&#8217;m going to do some forays into statistical analysis and data mining as well.</p>
<p>Starting with the simplest of things: A time-series showing the trend of code coverage. What is the least <a href="http://junkcharts.typepad.com/">chart-junky</a> way to display this variable?</p>
<p>A line chart is probably the best way to visualize a time-series:</p>
<p><img src="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_1.gif" alt="coverage_timeseries_1.gif" /></p>
<p>Code coverage is distinctively a variable of &#8220;volume&#8221;, and always a fraction of some maximum volume (100%), so it might benefit from being displayed as such, by coloring the &#8220;filled&#8221; area:</p>
<p><img src="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_2.gif" alt="coverage_timeseries_2.gif" /></p>
<p>The filled area of coverage is usually considered <em>good</em>, and the uncovered area as <em>bad</em>, so maybe the <em>negative quality</em> of the negative space could be highlighted by coloring it red?</p>
<p><img src="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_3.gif" alt="coverage_timeseries_3.gif" /></p>
<p>The colored areas now outline the data, so the original line representing the graph becomes redundant. This means it must go. Let&#8217;s get rid of the bounding box too. Now we can also increase the value of the fill colors as they become the primary (only) element of the graph:</p>
<p><img src="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_4.gif" alt="coverage_timeseries_4.gif" /></p>
<p>That&#8217;s better. However, although right now the graph shows the general trend pretty well, it isn&#8217;t very easy to make out what the actual coverage value is at any given time. Maybe this can be helped by introducing a horizontal grid line at every 20% interval?</p>
<p><img src="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_5.gif" alt="coverage_timeseries_5.gif" /></p>
<p>It does help, but the grid is way too heavy. It actually takes over as the primary graphic element. That can&#8217;t be good. I don&#8217;t like things that are <a href="http://java.sun.com/javaee/javaserverfaces/">too heavy for their purpose</a>. We&#8217;ll make the grid as thin as possible, and make it white so it fades to the background:</p>
<p><img src="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_6.gif" alt="coverage_timeseries_6.gif" /></p>
<p>There. It is now easy to see the grid but it doesn&#8217;t get in your face.</p>
<p>I haven&#8217;t thought about the temporal scale here at all, nor the different granularities of code coverage that we could examine (project / package / class / method / block / line -level). That is what I&#8217;ll look at next.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=7&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/09/29/visualizing-build-data-pt1-simple-coverage-time-series/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>

		<media:content url="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_1.gif" medium="image">
			<media:title type="html">coverage_timeseries_1.gif</media:title>
		</media:content>

		<media:content url="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_2.gif" medium="image">
			<media:title type="html">coverage_timeseries_2.gif</media:title>
		</media:content>

		<media:content url="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_3.gif" medium="image">
			<media:title type="html">coverage_timeseries_3.gif</media:title>
		</media:content>

		<media:content url="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_4.gif" medium="image">
			<media:title type="html">coverage_timeseries_4.gif</media:title>
		</media:content>

		<media:content url="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_5.gif" medium="image">
			<media:title type="html">coverage_timeseries_5.gif</media:title>
		</media:content>

		<media:content url="http://curiositydriven.files.wordpress.com/2007/09/coverage_timeseries_6.gif" medium="image">
			<media:title type="html">coverage_timeseries_6.gif</media:title>
		</media:content>
	</item>
		<item>
		<title>Development Best Practices for a Medium-sized Rails Project</title>
		<link>http://curiositydriven.wordpress.com/2007/09/19/development-best-practices-for-a-medium-sized-rails-project/</link>
		<comments>http://curiositydriven.wordpress.com/2007/09/19/development-best-practices-for-a-medium-sized-rails-project/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 05:51:36 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[continuous_integration]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/09/19/development-best-practices-for-a-medium-sized-rails-project/</guid>
		<description><![CDATA[As part of a Wicket-Spring-Hibernate vs. Rails evaluation we&#8217;re doing, I&#8217;ve been thinking of a set of best practices we could employ if we were to go for the Rails solution.
Most of these would be of course relevant for Java as well as Rails. However, being familiar with the realities of most software projects I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=5&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As part of a <a HREF="http://wicket.apache.org/">Wicket</a>-<a HREF="http://www.springframework.org/">Spring</a>-<a HREF="http://hibernate.org/">Hibernate</a> vs. <a HREF="http://rubyonrails.org/">Rails</a> evaluation we&#8217;re doing, I&#8217;ve been thinking of a set of best practices we could employ if we were to go for the Rails solution.</p>
<p>Most of these would be of course relevant for Java as well as Rails. However, being familiar with the realities of most software projects I know some of these things are the first out the door when scheduling pressures kick in. I think the <a HREF="http://relevancellc.com/2005/12/19/ruby-rails-put-your-money-where-your-mouth-is">considerable productivity gain</a> we would get from employing Rails should give us an opportunity to really concentrate on improving the quality of both the software and the process.</p>
<p>So, here&#8217;s what I have in mind: <a HREF="#bdd">Behaviour-driven development</a>, <a HREF="#automated_acceptance_tests">automated acceptance tests</a>,  <a HREF="#continuous_integration">continuous integration</a>, <a HREF="#code_reviews">code reviews</a>, <a HREF="#shared_ownership">shared ownership</a>, <a HREF="#automated_deployment">automated deployment</a>, enhacing communication with a <a HREF="#wiki">wiki</a>, a <a HREF="#chat">chat solution</a> and <a HREF="#daily_meeting">daily meetings</a>, and last but not least, reflecting on how we&#8217;re doing with <a HREF="#agile_retrospectives">agile retrospectives</a>.</p>
<h4><a CLASS="" TITLE="bdd" NAME="bdd"></a>Behaviour-Driven Development</h4>
<p>We should use the wonderful <a HREF="http://rspec.rubyforge.org/">rSpec</a> library to do <a HREF="http://behaviour-driven.org/">behaviour-driven development</a>. BDD brings real rigor to the coding process by making us always <em>specify</em> the code we write before we write it.</p>
<p>BDD is the next natural step from test-driven development, and improves it by replacing the vocabulary of testing with that of specifying. <a HREF="http://rspec.rubyforge.org/">rSpec</a> is becoming quite mature at this point and can pretty much fully replace <a HREF="http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html">Test::Unit</a> in a Rails project.</p>
<p>We&#8217;ll want to use <a HREF="http://eigenclass.org/hiki.rb?rcov">rCov</a> to keep track of <a HREF="http://c2.com/cgi/wiki?CodeCoverage">code coverage</a>. We could decide to make some level of coverage an acceptance criterion for an iteration, but once we fully embrace BDD we won&#8217;t need to do that. At that point coverage reporting becomes a tool for the developers to use to find those little nooks of code that might have slipped in untested (or un<em>specified</em>).</p>
<h4><a CLASS="" TITLE="automated_acceptance_tests" NAME="automated_acceptance_tests"></a>Automated Acceptance Tests</h4>
<p>The acceptance criteria of each iteration should include automated acceptance tests of all implemented features. We can employ <a HREF="http://www.openqa.org/selenium/">Selenium</a> to do them, and they should be done by the developers, together with the system tester and the customer representative. They could be defined and stored in a system like <a HREF="http://fitnesse.org/">Fitnesse</a>, or just in the version control system with the code.</p>
<p>Automating acceptance makes it provable that the agreed-upon features were actually implemented. They also define a powerful regression test harness, as acceptance tests from previous iterations can be run any number of times without additional cost. Using <a HREF="http://www.openqa.org/selenium/">Selenium</a> also has the added benefit that the tests double as a cross-browser sanity check.</p>
<p>It is notable that automating acceptance tests <strong>does not replace the need for a separate system testing / QA process</strong>. What it does do is free up the system tester&#8217;s time from hunting down coding errors to doing exploratory testing and finding the really hard problems caused by integration issues or miscommunication between developers and customers.</p>
<h4><a CLASS="" TITLE="continuous_integration" NAME="continuous_integration"></a>Continuous Integration</h4>
<p>We should setup a <a HREF="http://martinfowler.com/articles/continuousIntegration.html">continuous integration</a> server, such as <a HREF="http://cruisecontrolrb.thoughtworks.com/">CruiseControl.rb</a>, which runs all our specs on each commit. It should also run our in-browser acceptance tests.</p>
<p>The CI machine can also be used for automating deployment to development / testing servers, so that they automatically get new versions of the software when its committed into version control and all automated tests pass.</p>
<h4><a CLASS="" TITLE="code_reviews" NAME="code_reviews"></a>Code Reviews</h4>
<p>All code changes should be <a HREF="http://en.wikipedia.org/wiki/Code_review">reviewed</a> by other developers before they get committed to version control. We can do this in a controlled &amp; automated fashion by using <a HREF="http://www.review-board.org/">Review Board</a> or a similar solution.</p>
<p>Code reviews not only provide a <a HREF="http://www.codinghorror.com/blog/archives/000495.html">proven reduction to defect rate</a>, but also enhance communication by keeping everyone up-to-date on what&#8217;s going on in different parts of the software.</p>
<h4><a CLASS="" TITLE="shared_ownership" NAME="shared_ownership"></a>Shared Ownership</h4>
<p>There should be no &#8220;my code&#8221; or &#8220;your code&#8221;. All code is owned by the <em>team</em>. We can support this by <a HREF="http://c2.com/cgi/wiki?CollectiveCodeOwnership">rotating the responsibility areas</a> for each iteration: The developer who was working on feature A in iteration 1 will work on feature B in iteration 2.</p>
<p>This prevents silos from forming, and helps everyone to understand all parts of the software and how they fit together.</p>
<p>Another thing which happens with rotating responsibilities is that developers will want to produce cleaner code. This is because they know the code will absolutely have to be understood and continued by someone else in the near future.</p>
<h4><a CLASS="" TITLE="automated_deployment" NAME="automated_deployment"></a>Automated Deployment</h4>
<p>This is pretty much a no-brainer for a Rails project, but I feel it needs to be said as this still often doesn&#8217;t happen in Java projects.</p>
<p>Deployment to development, testing and production servers should be automated so that it can be done easily by any developer, any number of times.</p>
<p>The whole process of deploying the application, which includes updating the code, updating the database schema and data and restarting all server processes should be reduced to a single command.</p>
<p>In a Rails project, we can of course employ <a HREF="http://capify.org/">Capistrano</a> to achieve this.</p>
<h4><a CLASS="" TITLE="wiki" NAME="wiki"></a>Wiki</h4>
<p>An active wiki should be maintained. It can include any kind of information which could be of interested to developers. Here are a few examples:</p>
<ul>
<li>News and announcements</li>
<li>Scheduling issues, upcoming  deadlines and milestones</li>
<li>Project metrics (open defects, code coverage, server status)</li>
<li>Server infrastructure information. IPs, directories, server software</li>
<li>Development environment setup instructions</li>
<li>Contact information for developers, customer representatives and other project personnel</li>
<li>Coding conventions and standards</li>
<li>Documentation of used plugins, both in-house and external</li>
<li>Solutions for common problems, &#8220;knowledge base&#8221;</li>
</ul>
<p>A rotating <a HREF="http://jspwiki.org/wiki/WikiGardener">wiki gardener</a> duty should be set up, so that every project member is responsible for one week at a time for keeping the wiki clean, consistent, relevant and up-to-date.</p>
<h4><a CLASS="" TITLE="chat" NAME="chat"></a>Chat</h4>
<p>The team will be distributed, so we need some kind of group IM solution. We could setup an IRC room or some web-based solution.</p>
<p>It should be encouraged that everyone is present in the chat whenever they are working on the project, as this will probably be the closest thing we get to a shared agile workspace.</p>
<h4><a CLASS="" TITLE="daily_meeting" NAME="daily_meeting"></a>Daily Meeting</h4>
<p>A daily 15-minute meeting, such as a <a HREF="http://www.mountaingoatsoftware.com/daily_scrum">daily scrum</a> should be held consistently. This meeting should be face-to-face when possible, and over the phone when not.</p>
<h4><a CLASS="" TITLE="agile_retrospectives" NAME="agile_retrospectives"></a>Agile Retrospectives</h4>
<p>In each iteration, we should <a HREF="http://www.pragmaticprogrammer.com/titles/dlret/">spend some time reflecting</a> on how these practices are working and what should be added, dropped or improved.</p>
<p>We should also do some &#8220;code strategizing&#8221;, like looking for emerging patterns in the code base which could be abstracted into reusable components. We should do this consistently in each iteration.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=5&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/09/19/development-best-practices-for-a-medium-sized-rails-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
		<item>
		<title>Seaside: A Flexible Environment for Building Dynamic Web Applications</title>
		<link>http://curiositydriven.wordpress.com/2007/09/18/seaside-a-flexible-environment-for-building-dynamic-web-applications/</link>
		<comments>http://curiositydriven.wordpress.com/2007/09/18/seaside-a-flexible-environment-for-building-dynamic-web-applications/#comments</comments>
		<pubDate>Tue, 18 Sep 2007 15:31:53 +0000</pubDate>
		<dc:creator>teropa</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[seaside]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://curiositydriven.com/2007/09/18/seaside-a-flexible-environment-for-building-dynamic-web-applications/</guid>
		<description><![CDATA[IEEE Computing has a very nice article up about Seaside, a web framework I think I&#8217;m falling in love with (in an extraordinarily geeky way).
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=4&subd=curiositydriven&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.computer.org/">IEEE Computing</a> has <a href="http://www.computer.org/portal/cms_docs_software/software/homepage/2007/S507/s5056.pdf">a very nice article</a> up about <a href="http://www.seaside.st/">Seaside</a>, a web framework I think I&#8217;m falling in love with (in an extraordinarily geeky way).</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/curiositydriven.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/curiositydriven.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/curiositydriven.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/curiositydriven.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/curiositydriven.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/curiositydriven.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/curiositydriven.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/curiositydriven.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/curiositydriven.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/curiositydriven.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/curiositydriven.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/curiositydriven.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=curiositydriven.wordpress.com&blog=1742597&post=4&subd=curiositydriven&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://curiositydriven.wordpress.com/2007/09/18/seaside-a-flexible-environment-for-building-dynamic-web-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bcc77135204e3830805785f79a351090?s=96&#38;d=identicon" medium="image">
			<media:title type="html">teropa</media:title>
		</media:content>
	</item>
	</channel>
</rss>