<?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>Franklin Dattein</title>
	<atom:link href="http://dattein.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://dattein.com/blog</link>
	<description>My soup of thoughts</description>
	<lastBuildDate>Wed, 28 Mar 2012 20:41:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MongoDB: find duplicates in a field</title>
		<link>http://dattein.com/blog/mongodb-find-duplicates-in-a-field/</link>
		<comments>http://dattein.com/blog/mongodb-find-duplicates-in-a-field/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 01:51:13 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=947</guid>
		<description><![CDATA[
m = function () {
    emit(this.my_field, 1);
}
r = function (k, vals) {
   return Array.sum(vals);
}
res = db.MyCollection.mapReduce(m,r, { out : "my_output" });
db[res.result].find({value: {$gt: 1}});

]]></description>
			<content:encoded><![CDATA[<pre name="code" class="JavaScript">
m = function () {
    emit(this.my_field, 1);
}
r = function (k, vals) {
   return Array.sum(vals);
}
res = db.MyCollection.mapReduce(m,r, { out : "my_output" });
db[res.result].find({value: {$gt: 1}});
</pre>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/mongodb-find-duplicates-in-a-field/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MongoDB: rename a field in all collections</title>
		<link>http://dattein.com/blog/mongodb-rename-a-field-in-all-collections/</link>
		<comments>http://dattein.com/blog/mongodb-rename-a-field-in-all-collections/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 05:54:27 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[mongodb]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=943</guid>
		<description><![CDATA[I would like to share a script to rename all fields in a collection. It can be used to update field values, as well.

var collections = db.getCollectionNames()

collections.forEach(function(collectionName) {
	var collection = db.getCollection(collectionName)
	collection.update ( {}, { $rename : { "oldFieldName" : "newFieldName" }} );
});

]]></description>
			<content:encoded><![CDATA[<p>I would like to share a script to rename all fields in a collection. It can be used to update field values, as well.</p>
<pre name="code" class="javascript">
var collections = db.getCollectionNames()

collections.forEach(function(collectionName) {
	var collection = db.getCollection(collectionName)
	collection.update ( {}, { $rename : { "oldFieldName" : "newFieldName" }} );
});
</pre>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/mongodb-rename-a-field-in-all-collections/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AmazonSESSMTPAppender for Log4J</title>
		<link>http://dattein.com/blog/amazonsessmtpappender-for-log4j/</link>
		<comments>http://dattein.com/blog/amazonsessmtpappender-for-log4j/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 07:12:26 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[ses]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=885</guid>
		<description><![CDATA[Log4J can easily send e-mail notifications   every time an error occurs. It is particularly interesting and a very powerful functionality for production environments. However,  the default SMTPAppender lacks support for SSL enabled SMTP servers and it is also not easily configurable according to the environment.
This is an enhanced version of the Original SMTPAppender, which supports SSL [...]]]></description>
			<content:encoded><![CDATA[<p>Log4J can easily send e-mail notifications   every time an error occurs. It is particularly interesting and a very powerful functionality for production environments. However,  the default SMTPAppender lacks support for SSL enabled SMTP servers and it is also not easily configurable according to the environment.</p>
<p>This is an enhanced version of the Original SMTPAppender, which supports SSL and is environment aware.</p>
<pre name="code" class="java">
package com.dattein.logging;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import java.security.Security;
import java.util.Properties;

public class SMTPAppender extends org.apache.log4j.net.SMTPAppender {

    public SMTPAppender() {
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    }

    @Override
    protected boolean checkEntryConditions() {
        //Obviously you have to use your own environment aware mechanisme, instead of the line below
        return Environment.isProduction();
    }

    @Override
    protected Session createSession() {
        Properties properties = new Properties();
        properties.setProperty("mail.transport.protocol", "smtp");
        properties.setProperty("mail.host", getSMTPHost());
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.port", getSMTPPort());
        properties.put("mail.smtp.socketFactory.port", getSMTPPort());
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.socketFactory.fallback", " false");
        properties.setProperty("mail.smtp.quitwait", " false");
        Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(getSMTPUsername(), getSMTPPassword());
            }
        });
        return session;
    }
}
</pre>
<p>That is how you use it:</p>
<pre name="code" class="xml">
<appender name="mail-appender" class="com.dattein.logging.SMTPAppender">
<param name="SMTPHost" value="email-smtp.us-east-1.amazonaws.com"/>
<param name="SMTPUsername" value="<USERNAME>"/>
<param name="SMTPPassword" value="<PASSWORD>"/>
<param name="SMTPPort" value="465"/>
<param name="BufferSize" value="64"/>
<param name="Subject" value="[ERROR]" />
<param name="To" value="errors@dattein.com" />
<param name="From" value="donotreply@dattein.com"/>
<param name="Threshold" value="ERROR"/>
        <layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="My App [%p] %c{2} %x - %m%n"/>
        </layout>
    </appender>

    <root>
        <level value="DEBUG"/>
        <appender-ref ref="mail-appender"/>
    </root>
</pre>
<p>If you are wondering how to activate the Amazon SES SMTP server, check this out: </p>
<p>https://console.aws.amazon.com/ses/home#smtp-settings:</p>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/amazonsessmtpappender-for-log4j/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>(Portuguese BR) Visita ao Sydney Aquarium</title>
		<link>http://dattein.com/blog/visita-ao-sydney-aquarium/</link>
		<comments>http://dattein.com/blog/visita-ao-sydney-aquarium/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 14:16:05 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Aquariums]]></category>
		<category><![CDATA[aquarium]]></category>
		<category><![CDATA[sydney]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/visita-ao-sydney-aquarium/</guid>
		<description><![CDATA[

]]></description>
			<content:encoded><![CDATA[<div style="padding: 0; overflow: hidden; margin: 0; width: 500px;"><a style="text-decoration: none;" title="DSC05823" href="http://www.flickr.com/photos/frankllin/4824788535/in/set-72157624500590259/"><br />
</a></div>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/visita-ao-sydney-aquarium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing mongodb with apt-get</title>
		<link>http://dattein.com/blog/installing-mongodb-with-apt-get/</link>
		<comments>http://dattein.com/blog/installing-mongodb-with-apt-get/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 23:13:05 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=858</guid>
		<description><![CDATA[sudo mkdir -p /etc/apt/sources.list.d/
sudo echo &#8216;deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&#8217; &#62;/tmp/mongodb.list
sudo cp /tmp/mongodb.list /etc/apt/sources.list.d/
sudo rm /tmp/mongodb.list
sudo apt-key adv &#8211;keyserver keyserver.ubuntu.com &#8211;recv 7F0CEB10
sudo apt-get update
sudo apt-get install mongodb-10gen
]]></description>
			<content:encoded><![CDATA[<blockquote><p>sudo mkdir -p /etc/apt/sources.list.d/<br />
sudo echo &#8216;deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&#8217; &gt;/tmp/mongodb.list<br />
sudo cp /tmp/mongodb.list /etc/apt/sources.list.d/<br />
sudo rm /tmp/mongodb.list<br />
sudo apt-key adv &#8211;keyserver keyserver.ubuntu.com &#8211;recv 7F0CEB10<br />
sudo apt-get update<br />
sudo apt-get install mongodb-10gen</p></blockquote>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/installing-mongodb-with-apt-get/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intellij not hot-deploying Grails application</title>
		<link>http://dattein.com/blog/intellij-not-hot-deploying-grails-application/</link>
		<comments>http://dattein.com/blog/intellij-not-hot-deploying-grails-application/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 02:21:25 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[intellij]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=829</guid>
		<description><![CDATA[Intellij IDEA 10.5 users might have noticed an annoying bug when running Grails applications, Controller classes are not reload, although Intellij says they have been recompiled.
This error is particular to IDEa 10.5.x and Grails 2.x.x and makes Grails development nearly as slow as Java development.
Fortunately, the solution is easy. Simply add the following configuration to the &#8220;VM [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste"><a href="http://www.flickr.com/photos/frankllin/6187642608/sizes/l/in/photostream/"><img class="alignright" title="Idea hot deploy issue" src="http://farm7.static.flickr.com/6168/6187642608_ae2a0bf19a_b.jpg" alt="" width="250" /></a>Intellij IDEA 10.5 users might have noticed an annoying bug when running Grails applications, Controller classes are not reload, although Intellij says they have been recompiled.</div>
<div>This error is particular to IDEa 10.5.x and Grails 2.x.x and makes Grails development nearly as slow as Java development.</div>
<div>Fortunately, the solution is easy. Simply add the following configuration to the &#8220;VM Parameters&#8221; field of Grails Run/Debug:</div>
<blockquote>
<div>-Xmx1024m</div>
<div id="_mcePaste">
<div id="_mcePaste">-Xms256m</div>
<div id="_mcePaste">-javaagent:/Users/franklin/java/grails-2.0.1/lib/com.springsource.springloaded/springloaded-core/jars/springloaded-core-1.0.2.jar<br />
-server</div>
<div id="_mcePaste">-noverify</div>
<div id="_mcePaste">-Dspringloaded=profile=grails</div>
</div>
<div id="_mcePaste"></div>
</blockquote>
<p>The solution has been found here:<a href="http://grails.1312388.n4.nabble.com/Grails-2-0-0-M1-Controller-reloading-broken-under-Windows-7-again-td3712633.html"></p>
<p>http://grails.1312388.n4.nabble.com/Grails-2-0-0-M1-Controller-reloading-broken-under-Windows-7-again-td3712633.html</a></p>
<p>And, the bug is being tracked here:<br />
<a href="http://youtrack.jetbrains.net/issue/IDEA-72968?projectKey=IDEA&amp;query=grails">http://youtrack.jetbrains.net/issue/IDEA-72968?projectKey=IDEA&amp;query=grails</a></p>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/intellij-not-hot-deploying-grails-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Development tools for Windows</title>
		<link>http://dattein.com/blog/developer-tools-for-windows/</link>
		<comments>http://dattein.com/blog/developer-tools-for-windows/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 00:33:59 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=797</guid>
		<description><![CDATA[There is nothing more annoying than having to use Windows as the main development machine. However, it happens a lot, specially when you work as a consultant.
These is a list of free tools to make Windows less unpleasant for software developers:

Freecomander: replacement for the slow Windows Explorer
ClipX: Clipboard History
 BareTail: Visual tail for log files [...]]]></description>
			<content:encoded><![CDATA[<p>There is nothing more annoying than having to use Windows as the main development machine. However, it happens a lot, specially when you work as a consultant.<br />
These is a list of free tools to make Windows less unpleasant for software developers:</p>
<ul>
<li><a href="http://www.freecommander.com/" target="_blank">Freecomander</a>: replacement for the slow Windows Explorer</li>
<li><a href="http://bluemars.org/clipx/" target="_blank">ClipX</a>: Clipboard History</li>
<li> <a href="http://www.baremetalsoft.com/baretail/" target="_blank">BareTail</a>: Visual tail for log files monitoring.</li>
<li><a href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a>: Lightweight text editor</li>
<li><a href="http://getgreenshot.org/" target="_blank">Greenshot</a>: Quick screenshot editor.</li>
<li><a href="http://puttycm.free.fr/cms/" target="_blank">Putty Connection Manager</a>: Store server addresses, usernames and passwords.</li>
<li><a title="portaPuTTY" href="http://socialistsushi.com/2005/11/17/portaputty">portaPuTTY</a>: Enhanced  Putty with the ability to export and restore connection configuration.</li>
<li><a href="http://winscp.net" target="_blank">Winscp</a>: SCP/File transfer for SSH connections.</li>
<li><a href="http://technet.microsoft.com/en-us/sysinternals/bb896653" target="_blank">Procexp</a>: Enhanced process monitor.</li>
<li><a href="http://www.getpaint.net/" target="_blank">Paint.net</a>: Powerful and lightweight image&#8217;s editor.</li>
<li><a href="http://www.launchy.net/" target="_blank">Lauchy</a>: Application launcher, similar to Mac&#8217;s hotspot.</li>
<li><a href="http://www.fiddler2.com/fiddler2/" target="_blank">Fiddler</a>: Web debugging proxy</li>
<li><a href="http://cntlm.sourceforge.net/" target="_blank">CNTLM</a>: Authentication proxy (for apps without proxy authentication support, such as iTunes)</li>
<li><a href="http://code.google.com/p/hudson-tray-tracker/" target="_blank">Hudson Tray tracker</a>: Tray Icon for Hudson/Jenkins Continuous Integration server.</li>
<li><a href="http://www.r1ch.net/stuff/forcebindip/">ForceBindIP</a>: Tool to route applications to specific network connections. For example: Firefox through ethernet and Putty through 3G.</li>
</ul>
<p>If you know some other interesting tools to suggest, please make a comment.</p>
<p>Update: Added ForceBindIp and portaPuTTY.</p>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/developer-tools-for-windows/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Grails Social Showcase</title>
		<link>http://dattein.com/blog/grails-social-showcase/</link>
		<comments>http://dattein.com/blog/grails-social-showcase/#comments</comments>
		<pubDate>Fri, 20 May 2011 00:38:00 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[grails social]]></category>
		<category><![CDATA[magaly]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring social]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=771</guid>
		<description><![CDATA[I have been working in a new pet project called Maga.ly, which is meant to be a Social Magazine for the Web, such as what Flipboard is for the iPad.
Maga.ly will not use a common login page with username, password and e-mail validation, but an integration with Twitter and Facebook, where all a user needs [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Social-Spring.png" src="http://www.springsource.org/files/Social-Spring.png" alt="" width="132" height="125" />I have been working in a new pet project called <a href="http://maga.ly/demo" target="_blank">Maga.ly</a>, which is meant to be a Social Magazine for the Web, such as what <a href="http://flipboard.com/" target="_blank">Flipboard</a> is for the iPad.<br />
<a href="http://maga.ly/demo" target="_blank">Maga.ly</a> will not use a common login page with username, password and e-mail validation, but an integration with Twitter and Facebook, where all a user needs to do is authorize the app within the Social Networks.</p>
<p><a href="http://www.springsource.org/spring-social" target="_blank">Spring Socia</a>l seemed to be a good starting point, since they provide a Java API to connect to the major Social Networks. In addition, <a href="https://github.com/SpringSource/spring-social-samples/tree/master/spring-social-showcase" target="_blank">Spring Social Showcase</a> from <a href="https://github.com/SpringSource/spring-social-samples" target="_blank">Spring-Social-Samples</a> provides a code sample, which covered good part of my needs.</p>
<p>Unfortunately, my problems began when  I tried to integrate <a href="https://github.com/SpringSource/spring-social-samples/tree/master/spring-social-showcase" target="_blank">Spring Social Showcase</a> with <a href="http://grails.org" target="_blank">Grails</a>, the main development framework for <a href="http://maga.ly/demo" target="_blank">Maga.ly</a>.</p>
<p>After struggling a little I came up with a solution and named it <a href="https://github.com/fsamir/grails-social-showcase">grails-social-showcase</a>, which is now available as open source on<a href="https://github.com/fsamir/grails-social-showcase"> GitHub</a> at: <a href="https://github.com/fsamir/grails-social-showcase">https://github.com/fsamir/grails-social-showcase</a></p>
<p>Please advice <a href="https://github.com/fsamir/grails-social-showcase">grails-social-showcase</a> is based on Spring Social version 1.0.0 <strong>M2. </strong>Version M3 is already available and it is full of enhancements, specially regarding Facebook Apis.<br />
Finally, it will be much appreciated if you want to help upgrading  it to support Spring Social M3.</p>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/grails-social-showcase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino Build Light</title>
		<link>http://dattein.com/blog/arduino-build-light/</link>
		<comments>http://dattein.com/blog/arduino-build-light/#comments</comments>
		<pubDate>Wed, 11 May 2011 05:01:34 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[rxtx]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/?p=753</guid>
		<description><![CDATA[The Build Light is meant to monitor Continuous Integration Servers and changes its colour according to the status of the server. Usually the red colour means that the code is broken, green is fine and blue means that the server is currently building.
Besides being an expensive gadget, for some, a build light might also sounds [...]]]></description>
			<content:encoded><![CDATA[<p>The Build Light is meant to monitor Continuous Integration Servers and changes its colour according to the status of the server. Usually the red colour means that the code is broken, green is fine and blue means that the server is currently building.</p>
<p>Besides being an expensive gadget, for some, a build light might also sounds like a silly and useless geek toy, but it is not.<br />
<img class="alignleft" style="border: 3px solid white;" title="arduino-build-light" src="http://farm3.static.flickr.com/2765/5708819693_02f64163fd_m.jpg" alt="" width="240" height="179" /> <em><span style="font-weight: normal;">Continuous Integration is all about </span>communication<span style="font-weight: normal;">, so you want to ensure that everyone can easily see the state of the system and the changes that have been made to it.</span></em><em><span style="font-weight: normal;"><br />
</span></em><em><span style="font-weight: normal;"> One of the most important things to communicate is the state of the mainline build. Many </span></em><em><span style="font-weight: normal;">teams like to make this even more apparent by hooking up a continuous </span><span style="font-weight: normal;">display </span><span style="font-weight: normal;">to the build system &#8211; </span><span style="font-weight: normal;">lights</span><span style="font-weight: normal;"> that glow green when the build works, or red if it fails are popular. </span></em></p>
<p style="text-align: right;"><span style="font-weight: normal;"><a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank"><em>Martin Fowler about Continuous integration </em></a></span></p>
<p>As the text above states, Martin Fowler also suggests a build light as a good source of quick feedbacks.<br />
Personally, I have experienced substantial benefits after adopting a build light or <a href="http://fabiopereira.me/blog/2009/12/15/build-dashboard-radiator-your-build-light-2/" target="_self">other types of visual build monitoring</a>. The light is different from a Tray Icon or an automated e-mail, because it is shared by the team and is impossible to ignore. So, it is common to see team members <a href="http://www.youbrokethebuild.com/" target="_self">making jokes</a> on red lights and trying to find &#8220;<a href="http://www.youtube.com/watch?v=DJ001Kgz5wc" target="_blank">who broke the build</a>&#8220;. Also, no one wants to be blamed for breaking the build and it creates a race for fixing the build as soon as possible.<br />
I have been using <a href="http://www.delcomproducts.com/products_USBLMP.asp">Delcom lights</a> for a couple of years now, but it always felt that I could have some fun building my own with <a href="http://www.arduino.cc" target="_blank">Arduino</a>, so I did.</p>
<p>It is using Java and <a href="http://rxtx.qbang.org/wiki/index.php/Main_Page" target="_blank">RXTX </a>to consume <a href="http://deadlock.netbeans.org/hudson/api/" target="_blank">Hudson/Jenkins feeds</a> and communicate via serial port.<br />
The Arduino code is pretty simple and uses the <a href="http://blog.lincomatic.com/?p=148" target="_blank">Colorduino library</a> to change the colors of the LED matrix.</p>
<p><strong>What do you need?</strong></p>
<ul>
<li> Arduino (I am using a <a href="http://www.seeedstudio.com/depot/seeeduino-v221-atmega-168p-p-690.html?cPath=132_133" target="_blank">Seeduino</a>) &#8211; $19.00</li>
<li><a href="http://iteadstudio.com/store/index.php?main_page=product_info&amp;cPath=35_37&amp;products_id=189" target="_self">8&#215;8 RGB  LED Matrix</a> &#8211; $15.00</li>
<li><a href="http://iteadstudio.com/store/index.php?main_page=product_info&amp;cPath=18&amp;products_id=312" target="_self">RGB LED Matrix driver shield</a> &#8211; $14.80</li>
<li>USB cable &#8211; $5</li>
</ul>
<p><strong>Total Cost</strong>: $53.80</p>
<p><strong>How to install?</strong></p>
<ul>
<li>Download <a href="https://github.com/fsamir/arduino-build-light" target="_blank">arduino-build-light project from GitHub</a>.</li>
<li><a href="http://arduino.cc/en/Guide/HomePage" target="_blank">Install Arduino IDE</a></li>
<li>Install the <a href="http://blog.lincomatic.com/?p=148" target="_blank">Colorduino Library</a>.</li>
<li><a href="http://arduino.cc/en/Guide/HomePage" target="_blank"></a>Compile and upload the file &#8220;/arduino-build-light/ArduinoSerialListener/ArduinoSerialListener.pde&#8221; to Arduino.</li>
<li><a href="http://www.gradle.org/installation.html" target="_blank">Install Gradle</a> (You can alternatively use a Java IDE)</li>
<li>Go to: cd  arduino-build-light/java/build-light-feeder</li>
<li>Execute: gradle run</li>
</ul>
<p><strong>Next steps</strong></p>
<ul>
<li>Perform a code cleaning. It has been written in just one day, so keep in mind that the code is still the <a href="http://brianluerssen.com/post/3552317843/build-the-ugly-version-first" target="_blank">first version that works</a>.</li>
<li>Start the Ethernet version. I am already working in another board that will be completely independent and won&#8217;t require a Java app connected to the serial port.</li>
</ul>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/arduino-build-light/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nelson Bay</title>
		<link>http://dattein.com/blog/nelson-bay/</link>
		<comments>http://dattein.com/blog/nelson-bay/#comments</comments>
		<pubDate>Thu, 05 May 2011 00:18:27 +0000</pubDate>
		<dc:creator>fsamir</dc:creator>
				<category><![CDATA[Photos]]></category>
		<category><![CDATA[Traveling]]></category>
		<category><![CDATA[Australia Immigration]]></category>
		<category><![CDATA[nelson_bay]]></category>
		<category><![CDATA[trips]]></category>

		<guid isPermaLink="false">http://dattein.com/blog/nelson-bay/</guid>
		<description><![CDATA[Nelson Bay, NSW at EveryTrail



Nelson Bay, a set on Flickr.

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everytrail.com/view_trip.php?trip_id=1074762">Nelson Bay, NSW at EveryTrail</a><br /><iframe src="http://www.everytrail.com/iframe2.php?trip_id=1074762&#038;width=400&#038;height=300" marginheight="0" marginwidth="0" frameborder="0" scrolling="no" width="400" height="300"></iframe><br />
</p>
<div style="padding: 0; overflow: hidden; margin: 0; width: 500px;"><a href="http://www.flickr.com/photos/frankllin/5675895114/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5227/5675895114_cf6ef19550_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675136629/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5303/5675136629_15514c41a4_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675700128/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5067/5675700128_b293d43147_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675702040/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5027/5675702040_bf5cc3e8ed_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675144101/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5228/5675144101_a214885453_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675147457/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5067/5675147457_9b7a90b227_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"/></a><br clear="all" /><a href="http://www.flickr.com/photos/frankllin/5675711192/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5304/5675711192_d82bb07ba9_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675150431/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5183/5675150431_e38f5ca91a_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675152299/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5184/5675152299_75d889274e_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675716246/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5026/5675716246_5c24944109_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675156957/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5224/5675156957_345ab3eb0f_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675158427/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5228/5675158427_cc9e59e0de_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"/></a><br clear="all" /><a href="http://www.flickr.com/photos/frankllin/5675721942/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5101/5675721942_0999606231_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675160651/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5102/5675160651_699e8d231b_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675164277/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5026/5675164277_9d8bf25a99_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675166023/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5264/5675166023_62e5e7c1de_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675730078/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5269/5675730078_813000bd8b_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675169667/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5142/5675169667_c805143106_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"/></a><br clear="all" /><a href="http://www.flickr.com/photos/frankllin/5675733848/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5029/5675733848_fa81398734_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675173283/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5305/5675173283_21d3e15e11_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675175159/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5148/5675175159_f9bb1ea30b_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675739806/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5030/5675739806_50f391f404_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675179249/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5021/5675179249_b9f2bcf3cc_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"/></a><a href="http://www.flickr.com/photos/frankllin/5675181077/in/set-72157626500169419/" title="NELSON BAY, NSW" style="text-decoration: none;"><img src="http://farm6.static.flickr.com/5149/5675181077_fe6d67b12a_s.jpg" alt="NELSON BAY, NSW" style="padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"/></a><br clear="all" /></div>
<div style="font-size: 0.8em; margin-top: 0px; margin-bottom: 5px">
<p><a href="http://www.flickr.com/photos/frankllin/sets/72157626500169419/">Nelson Bay</a>, a set on Flickr.</p>
</div>
<span class="fdPrintIncludeParentsPreviousSiblings"></span><span class="fdPrintIncludeParentsChildren"></span>]]></content:encoded>
			<wfw:commentRss>http://dattein.com/blog/nelson-bay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

