<?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>The long way round... &#187; development</title>
	<atom:link href="http://www.clevegibbon.com/wordpress/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.clevegibbon.com/wordpress</link>
	<description>Stuff you pick up on the way...</description>
	<lastBuildDate>Tue, 02 Jun 2009 05:11:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Skills Matter Domain Driven Design Day</title>
		<link>http://www.clevegibbon.com/wordpress/2009/06/02/skills-matter-domain-driven-design-day/</link>
		<comments>http://www.clevegibbon.com/wordpress/2009/06/02/skills-matter-domain-driven-design-day/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 05:11:10 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[chit chat]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/?p=129</guid>
		<description><![CDATA[ Eric Evans &#038; Crew are back in town for a day of  Domain Driven Design.  The guys at Skills Matter have put together a great agenda for Friday, June 19th.  
I&#8217;m very keen on going to see what cross over there is between  domain modelling for general purpose software systems [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://skillsmatter.com/event/design-architecture/ddd-exchange"><img src="http://skillsmatter.com/custom/banner_ads/ddd-09-300x84px.gif" alt="ddd image" /></a> Eric Evans &#038; Crew are back in town for a day of <a href="http://skillsmatter.com/event/design-architecture/ddd-exchange"> Domain Driven Design</a>.  The guys at <a href="http://www.skillsmatter.com">Skills Matter</a> have put together a great agenda for Friday, June 19th.  </p>
<p>I&#8217;m very keen on going to see what cross over there is between  domain modelling for general purpose software systems and <a href="http://www.clevegibbon.com/contentmanagement/2009/05/18/content-modelling/">content modelling</a> for content managed solutions, a particularly interesting area for me at the moment.</p>
<p>Hope to see you there <img src='http://www.clevegibbon.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2009/06/02/skills-matter-domain-driven-design-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Git to God in Six Months</title>
		<link>http://www.clevegibbon.com/wordpress/2008/12/30/from-git-to-god-in-six-months/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/12/30/from-git-to-god-in-six-months/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 14:56:15 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[gtd]]></category>
		<category><![CDATA[knowledge]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/2008/12/30/from-git-to-god-in-six-months/</guid>
		<description><![CDATA[Just over a year ago I watched the Introduction to Git video below on by Linus Torvalds and just had to switch it off after 10 minutes of play.  I thought Linus was git and as a result didn&#8217;t touch Git for six months.  Then in May 2008, I was starting a new [...]]]></description>
			<content:encoded><![CDATA[<p>Just over a year ago I watched the <a href="http://www.youtube.com/v/4XpnKHJAok8&amp;hl=en&amp;fs=1">Introduction to Git</a> video below on by Linus Torvalds and just had to switch it off after 10 minutes of play.  I thought Linus was git and as a result didn&#8217;t touch Git for six months.  Then in May 2008, I was starting a new project looking into <a href="http://www.clevegibbon.com/wordpress/2008/06/16/infrastructure-as-a-service-just-compute-and-go/">puppet administration tools</a> and was peeved off having to set up yet another repository in subversion.  So I read the <a href="http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html">git tutorial</a>.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/4XpnKHJAok8&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/4XpnKHJAok8&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Well, that seemed easy.  So I tried it out.  Hmm, that works.  Then I re-watched the &#8216;Introduction to Git&#8217; video above.  Hey presto, from git-to-god in six months.  Impressive.  I still don&#8217;t like video, can&#8217;t put my finger on it, but I love the Git.  And to those people that brought us the Git and a big thank you to you.</p>
<p>What is the <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html">Git</a>?  Git is a fast distributed revision control system.  Now I use the Git religiously.  Not just for my personal coding projects, but for the documents I write, the web-sites I build, people I share knowledge with, and so on.  But why do I like Git, a few things really.</p>
<p>Firstly, I tend to operate out of directories a lot and need to version control everything under it.  What I don&#8217;t want to have to do is  create an artificial master copy on a centralised server and have to periodically sync up to that.  Pointless.  Instead I just want everything I need to be available from within my working area &#8211; my directory.</p>
<p>Secondly, branching and the management of branches must be brainless activity.  Git embraces and encourages branching.  After reading the <a href="http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html">git tutorial</a> I was shocked at just how easy it is to work with branches.  There is just no other way of working for me. Branching in subversion is harder and hence less appealing to me, so that&#8217;s probably why I didn&#8217;t use it as much as I&#8217;d liked/should have.</p>
<p>Thirdly, local commits.  I can commit without access to a centralised server.  There is NO centralised server.  Instead you have a network of peers.  No need to distribute/cluster a central repository.  Distributed repositories are the norm, not the exception.  There is no single-point of failure that you have with subversion, instead, the risk is spread amongst your peers.</p>
<p>Finally, simplicity.  Once you&#8217;re happy working with branches locally, you can push and pull information to and from your peers&#8217; branches.  The syntax is clear and concise.  There is not difference really to what you&#8217;re accustomed to working locally. </p>
<p>The problem with Git and distributed revision control systems like it is industry take up.  Will the build systems such as Ant and Maven, the IDEs such as Visual Studio, IntelliJ and Eclipse, and so on support the Git.  I think this is happening but cannot report conclusively on the current status.  However, I am starting to see many more open source projects start out with the GIT and other migrating over.  Also for web site development, where you try out new stuff, roll forward, roll back, compare and contrast, numerous different solutions, Git and its easy branching solution is a great tool.</p>
<p>Finally, a commercial example. I use a <a href="http://office.microsoft.com/en-us/groove/default.aspx">Groove</a>.  It&#8217;s a collaboration tool primarily used for sharing documents.  It has a proprietary algorithm for the effective sync&#8217;ing of large amounts of data across a network.  It also is a commercial product and so there are lots of features such instant messaging, calendaring, discussions, sharepoint integration and organising stuff.  However, for me, all that is redundant.  All I need is fast distributed, file-sharing. </p>
<div style="text-align:center;"><a href="http://clevegibbon.com/images/blog/groove2007.jpg"><img src="http://clevegibbon.com/images/blog/groove2007.jpg" width="400" height="300" align="center" /></a></div>
<p>The problem with Groove is that is breaks easily (admittedly the pre Microsoft Groove 2007 version).  I&#8217;ve had to install it many times in the past and that takes time.  When I change machines, I have to re-install it.  When it starts crashing, I have to re-install it.  The sych&#8217;ing between my peers has been problematic, to the point where we are asking each other whether you have the latest update.  That&#8217;s not good.  Given that I only use Groove for file sharing, I believe Git would be a much better and reliable solution going forwards.  It also has the added benefit of being cross platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/12/30/from-git-to-god-in-six-months/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Planning Game</title>
		<link>http://www.clevegibbon.com/wordpress/2008/12/24/the-planning-game/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/12/24/the-planning-game/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 13:30:38 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/2008/12/24/the-planning-game/</guid>
		<description><![CDATA[Successful projects are continually planning.  Big plans (release), small plans(iterations).  The best plans are clear, simple and easy to change.  Most importantly, plans are the result of a collaborative team effort.
Successful teams value planning over plans.   However, things are really broken when the reverse is true.  We&#8217;ve all been [...]]]></description>
			<content:encoded><![CDATA[<p>Successful projects are continually planning.  Big plans (release), small plans(iterations).  The best plans are clear, simple and easy to change.  Most importantly, plans are the result of a collaborative team effort.</p>
<p>Successful teams value planning over plans.   However, things are really broken when the reverse is true.  We&#8217;ve all been there before, trapped within the mother of all project plans.  You don&#8217;t need a sixth sense to see what&#8217;s coming &#8211; we see dead projects!  Jeff Goldblum in Jurassic Park sums up beautifully the typical phases within a plan-only project:</p>
<blockquote><p>	&#8220;Ooh, aah, that&#8217;s how it always starts, and then later the running and screaming&#8230; &#8220;</p></blockquote>
<p><img src="http://clevegibbon.com/images/blog/MalcomRaptorSide.jpg" width="400" height="200"/></p>
<p>About eight years ago I joined a project to seed Java knowledge.  The team was new to both the language and  object technology.  After an initial requirements discovery phase and some preliminary high level designs, the project manager called a team meeting to discuss <em>the plan</em>.  We all sat down ready to start planning.  I love planning sessions.  Instead, in true <a href="http://en.wikipedia.org/wiki/Blue_Peter">Blue Peter</a> fashion, out came a completed Gnatt chart that the project manager <em>&#8220;had prepared earlier&#8221;</em>.  My heart sank as he handed out the &#8220;final&#8221; plan with all the <em>final steps</em> to success.  Upon closer inspection, things were much worse than I had first feared.  Armed with the initial designs, add a generous sprinkling of Java for Dummies, and our friendly neighbourhood project manager added every class as a line item within the plan.</p>
<p>Then, he did it.  Oh boy, did he do it. He asked us to estimate each class on his project plan.  So for the AbstractDataFactory class, 1 day, StringUtils, 2 days.  And so it began, every day at 4pm GMT, we had a status meeting where each team member provided an update on <strong>% Complete</strong> for every class that they were responsible for.  After 3 of these 2 hour daily meetings the team rebelled.  Our project manager was suffering from a bad dose of plan-blindness.  He could NOT see past the plan.  The plan was the deliverable.  The project been relegated to being the dark horse of the family.  We no longer planning.  Am pretty awful place to be really.</p>
<p>Fruitless discussions between the team and the project manager brought about no change. Time was a premium so we made a decision. Project over plan we agreed. The team started scheming.  From our perspective, the plan was total project waste.  I won&#8217;t even tell you what happened to the plan when we re-factored the code base on day two.  So we looked at all the classes on the plan, wrote a simple application that sent an email that bumped along our % complete to successfully deliver the plan. The email basically told our project manager want he wanted to hear, delivered the plan, and immediately re-claimed a valuable 2 hours per day per developer.  We then set about successfully delivering the project.</p>
<p>So what? First of all, I&#8217;m not saying you don&#8217;t need a plan, but the plan is not as valuable as the act of planning.  Secondly, continuous planning is essential.  If you sat down with your team now, handed them a piece of paper and asked the following questions:</p>
<ol>
<li>What is your next deliverable?</li>
<li>When is it due?</li>
<li>Are you on track?</li>
</ol>
<p>If your team members come back with different answers, something is broken.  Finally, some people are good programmers, others are not.  Same for planning.  Some people are just not wired up to plan ahead and prefer to just do it.  That&#8217;s not a big deal but you just need to be aware of that and encourage them to participate in planning sessions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/12/24/the-planning-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby is the R in Rails</title>
		<link>http://www.clevegibbon.com/wordpress/2008/06/11/ruby-is-the-r-in-rails/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/06/11/ruby-is-the-r-in-rails/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 08:46:22 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[cognifide]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/archives/106</guid>
		<description><![CDATA[I would love to have attended RailsConf 2008 but alas you can only do so much in a day.  Although this was a Rails conference, it seems that this year there was less talk about Rails and more about Ruby.  This is hardly surprising really given that Rails is just a web framework. [...]]]></description>
			<content:encoded><![CDATA[<p>I would love to have attended <a href="http://en.oreilly.com/rails2008/public/content/home">RailsConf 2008</a> but alas you can only do so much in a day.  Although this was a Rails conference, it seems that this year there was less talk about Rails and more about Ruby.  This is hardly surprising really given that Rails is just a web framework.  Yep, Rails is just a web framework.  And just like any other web framework, its serves as a gateway from the web and into your enterprise.  Now, after a year of doing Rails, you&#8217;re basically done.  Coasting.  Yes, there are tips and tricks you can pick up along the way but for all intense purposes you&#8217;ve got the badge.  You&#8217;re done. You know Rails. </p>
<p>Now the more pressing problems and prickly questions around the enterprise, integration and scalability need to be addressed and this is where Ruby is  amore compelling story.  In fact, things in the Ruby space are really moving forward at break neck speed.  It&#8217;s not surprising really, given the relatively few Ruby conferences there are each year, that Ruby gets to play out and steal some of Rail&#8217;s thunder at RailConf.</p>
<p>So what is going on in Ruby space that&#8217;s so interesting?</p>
<p><strong>Ruby Implementations &#8211; Where integration is Key</strong></p>
<p>First up there&#8217;s <a href="http://jruby.codehaus.org/">JRuby</a>.  This is a 100% pure Java implementation of the Ruby programming language.  And right there is JRuby&#8217;s sweet spot.  The ability to seamlessly integrate with the Java platform through Ruby is a big win for some.  So running Rails under JRuby and using it as a web gateway into your Java enterprise, together with the ability to leverage mature/known Java tools and the free performance hikes that accompany it has been a very appealing proposition to some.  A prime example being the <a href="http://studios.thoughtworks.com/mingle-project-intelligence">ThoughtWorks Mingle</a> product.  Also, having access to the abstract syntax tree which can be shared between multiple Ruby runtimes hosted within the same JVM process is pretty neat and a highly efficient way of managing memory.</p>
<p><a href="http://ruby.macosforge.org/trac/wiki/MacRuby">MacRuby</a>!  As a Mac User I&#8217;m excited by this implementation of Ruby 1.9.  With MacRuby you can write Mac OS X applications in Ruby without the performance hit typically attributed to standard Ruby and Ruby Cocoa.   MacRuby is native to Mac OS X core technologies.  Damned quick with all the elegance of Ruby to boot.  </p>
<p><a href="http://www.ironruby.net/">IronRuby</a>, backed my Microsoft and sits on top of its Dynamic Language Runtime (check out <a href="http://www.microsoft.com/Downloads/details.aspx?FamilyID=b2a28e91-4ee3-4a79-8900-e4de253950bd&amp;displaylang=en">John Lam&#8217;s</a> talk on the DLR), is a .NET implemention of Ruby.  IronRuby enables Ruby programmers seamlessly integrate with the .NET platform, in much the same way that JRuby does on the Java platform.  <a href="http://rubydotnet.googlegroups.com/web/Home.htm">Ruby.NET</a> is open source .NET implementation that does not have the same pull as IronRuby.</p>
<p>In fact, the main draw for Ruby developers that target JRuby, MacRuby, Ruby.NET or IronRuby is integration with the Java, Mac OS X or .NET plaforms respectively.</p>
<p><strong>Ruby implementations &#8211; Standards are key</strong></p>
<p>Let&#8217;s park integration.  Let&#8217;s focus upon Ruby developers building Ruby apps with an Ruby-oriented environment.  Both <a href="http://rubini.us/">Rubinius</a> (a spec led Ruby implementation) and<a href="http://ruby-lang.org/en/about"> MRI</a>/<a href="http://www.atdot.net/yarv/">YARV</a> (currently the official Ruby) are competing VMs for running Ruby applications.  Everyone started with Matzs Ruby Interpreter  (MRI) but now we have many more alternatives.  The Yet Another Ruby VM (YARV) project has officially merged into MRI as of May 2008 to combine the best of both worlds to enhance the official Ruby implementation.</p>
<p><strong>RubySpec</p>
<p></strong>But unlike Smalltalk that was really killed by competing implementations, the Ruby community, through <a href="http://rubyspec.org/">RubySpec</a> are collaborating on standards and competing on implementation.  This is good.  No, hold up, this is great! This will hopefully provide more choice to the developers to select the appropriate Ruby implementation that best fits their solution requirements.  Hopefully, this will hold the community together and keep everyone pulling in the same direction.  So far, that appears to be the case&#8230;</p>
<p><strong>..but then there was Ruby for Scale &#8211; Maglev<br />
</strong><br />
<a href="http://ruby.gemstone.com/">Maglev</a> is a Ruby implementation built on top of Gemstone&#8217;s VM that is written in Smalltalk.  <a href="http://www.chadfowler.com/2008/6/5/maglev">Chad Fowler</a> goes into the why and when you would choose to use this Ruby implementation other the others.  But the problem is very few people have access to Maglev.  It promises the world and come on guys its time to <em>show me the money</em>!  The community has seen is a presentation.  A damned fine presentation I&#8217;m told but <a href="http://headius.blogspot.com/2008/06/maglev.html">Charles Nutter </a>of JRuby is not convinced and <a href="http://fukamachi.org/wp/2008/06/02/maglev-and-the-naiivety-of-the-rails-community/">other people</a> are already dismissing outright Maglev&#8217;s claim to scale.  100 times performance improvement is a big claim.   One to watch I guess.</p>
<p><strong>And Finally!</strong></p>
<p>Take a look at the following code snippet:</p>
<pre>#!/usr/local/bin/ruby

require 'scalability'

# your code
</pre>
<p>Now the Twitter guys must be get this all the time.  Twitter is growing in size and its architecture will mature and incorporate different technologies I&#8217;m sure that best fits their current problems.  Time will time.  But to say its Ruby&#8217;s fault is a little naive at best.  That said, wouldn&#8217;t it be just great if only you could <strong><em>include scalability</em></strong> in Ruby applications, Java apps, .NET apps, or whatever the platform.  </p>
<p>Now, that would be awesome.  But the simple fact is you can&#8217;t include it, you have design it in.  Boooooo say the crowd.  Kill joy chant the business.  But unfortunately, like so many things in the software industry, you have to go <em>the long way round (read as experience) </em>to get desired results.   Because there are no short cuts (<em>read as foolish hacks, or inexperience</em>) on the road to scalability&#8230;only blood, sweat and tears!  But there are leg ups, tools and techniques and people to assist, but that&#8217;s any story for another day&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/06/11/ruby-is-the-r-in-rails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Busy Java Developer: Stop, Look, Listen and Live</title>
		<link>http://www.clevegibbon.com/wordpress/2008/05/14/busy-java-developer-stop-look-listen-and-live/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/05/14/busy-java-developer-stop-look-listen-and-live/#comments</comments>
		<pubDate>Wed, 14 May 2008 14:37:56 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/archives/102</guid>
		<description><![CDATA[Back in the seventies, the &#8220;Stop, Look, Listen and Live&#8221; UK campaign was used to teach kids road safety.  Funnily enough, the Green Cross Code Man, who became the face of this road awareness campaign, went on to become Darth Vader!

It is now time for Java Developers to Stop, Look, Listen and Live!  [...]]]></description>
			<content:encoded><![CDATA[<p>Back in the seventies, the &#8220;<strong>Stop, Look, Listen and Live</strong>&#8221; UK campaign was used to teach kids road safety.  Funnily enough, the <a href="http://www.youtube.com/watch?v=CRUBMBi_lp4">Green Cross Code Man</a>, who became the face of this road awareness campaign, went on to become Darth Vader!</p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/CRUBMBi_lp4&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/CRUBMBi_lp4&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>It is now time for Java Developers to Stop, Look, Listen and Live!  The climate is changing.  Java <em>the language</em> is entering middle age.  Java is not the first language that developers are picking up.  These days when I talk to young non-Microsoft developers, a lot of them don&#8217;t know Java and have no plans to learn it either.  Dynamic and functional languages are <a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">on the rise</a>.  The web IS a viable platform for business.  More and more applications are moving out of datacentres and into the clouds. Since Java 1.4, the interest shown by experienced Java developers suggests that are not focussing on Java <em>the language</em>.  A lot of Java developers have not developed against Java 5.  Even less against Java 6.  As a Java developer, do you know what&#8217;s coming in Java 7?  Do you care?  Do you, Mr. Busy Java Developer, really care?  If so, here&#8217;s a couple of things I reckon you should, if you haven&#8217;t already done so, think about this year as a Java developer.</p>
<p><a href="http://audiblesmirk.files.wordpress.com/2008/04/jft-brackets-6.jpg"><img src="http://audiblesmirk.files.wordpress.com/2008/04/jft-brackets-6.jpg" width=300 height=200 align="left"/></a> <strong>The Three Gees</strong>: <a href="http://groovy.codehaus.org/">Groovy</a>, <a href="http://grails.codehaus.org/">Grails</a> and <a href="http://gant.codehaus.org/">Gant</a>.  Groovy is a dynamic language for the Java Platform.  In short, building on top of Java, it injects a degree of flexibility in the way Java-based software systems are created and continue to evolve.  As a Java developer, you are seriously missing a trick if you do not have Groovy in your toolbox.</p>
<p>Grails is damned fine web framework.  The Grails/Groovy pairing brings the same advantages to the table that Rails/Ruby does.  Now I&#8217;m a big fan of Ruby, for the busy Java developer I think that JRuby/Rails/Ruby is more of a distraction than the Grails/Groovy option.  Groovy&#8217;s support for Java frameworks such as Spring and Hibernate are too good to ignore.  Also, if you already know Groovy, Grails is a no brainer.  In fact, at the <a href="http://news.ycombinator.com/item?id=187377">Java Web Frameworks Tournament 2008</a>, Grails made it into the semi-finals.  Not bad&#8230;JRuby on Rails won <img src='http://www.clevegibbon.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Finally, we move onto Gant.  Which is like Ant but the language is Groovy not XML.  With Gant plugins for Maven 2, your build options are trivial.  The only real contender to Gant is <a href="http://incubator.apache.org/buildr/">Buildr</a> which is a damned fine Ruby based build system for Java applications. Again, the trade-off for simplicity in the Busy Java Devleoper life is, if you keep to the Three Gees, you&#8217;re covered.  Otherwise, you have another build system to learn and require all your developers to know Ruby.</p>
<p><strong><a href="http://www.scala-lang.org/">Scala</a></strong>: This is a newbie on the language scene that has been bubbling away since 2001.  However, like Groovy it integrates with Java beautifully and provides a nice mix of object-oriented and functional to bring yet more options for solving a differ class of problems for Java developers.  For the Microsoft people out here, Scala implementations also integrate with the .NET platform.  In this era of distributed computing, scalability and component based development Scala arms the Java Platform with some great tools for addressing these problems.  And again, for the Busy Java Developer whose bread and butter is the Java Platform, you cannot afford not to be aware of how Scala may fit into your world.  Word of warning, Scala is not for the lazy or faint hearted.  You need to put some time into this language before you start reaping the benefits!</p>
<p><strong><a href="http://www.springsource.com/web/guest/products/suite/applicationplatform">Spring Source Application Platform</a></strong>: EJB 3.0 is alive and kicking.  EJB 3.0 is a great platform.  EJB 3.0 is not future.  EJB 3.0 will never be mainstream.  After the non-sense of EJB 1.0.  The constant public pounding by Roger Sessions @ <a href="http://www.objectwatch.com/">ObjectWatch</a> (Poor Ed Roman).  The rather feeble attempt of EJB 2.0 to rectify the shortcomings of EJB 1.0.  The industry couldn&#8217;t and didn&#8217;t wait for EJB 3.0.  Now if we could wind back the clock say 24 months and re-branded EJB 3.0 as HellFire 1.0, there would be no such thing as Spring Source Application Platform.  EJB 2.0 created the market and effectively stepped out the race by giving us such long lead times.  The guys at Spring have capitalised on this massive window of opportunity  and have produced something pretty cool.  However, not all is great.  They have rather naughtily upset the OSGi people, in particular <a href="http://www.osgi.org/blog/2008/05/springsource-application-platform.html">Peter Kriens</a>.  Hopefully, they&#8217;ll change fall into line for the good of the community.</p>
<p><strong>I like your Bundle!</strong>: This leads us nicely onto <a href="http://www.osgi.org/Main/HomePage">OSGi</a>.  If you haven&#8217;t heard about this as a Java developer, <a href="http://en.wikipedia.org/wiki/OSGi">where have been</a>?  Please, please, please, add it to your list of things for this year to pick up.  It a must.  Have you never wondered how Eclipse manages the lifecycle of its components?  How you can upgrade stuff easily and without a restart.   No messy classloaders.  Define, package, deploy, stop/start and manage your components.  Side-by-side deployments of versioned components. Essential for 24/7 Java  applications.  This is OSGi.  The guys at Spring have created a Bundle Repository that makes the use of OSGi simple.</p>
<p><strong>Domain This, Domain That</strong>: Not essential but an important thing to know about.  Domain Models, <a href="http://www.domaindrivendesign.org/">Domain Driven Design</a> (DDD) and Domain Specific Languages (DSLs).  When you start thinking about the Three Gees, Scala, OSGi  and so on, how can you do that without a domain model.  The DDD is an approach to domain modeling, where DSLs are way to facilitate human to machine communication that invariably operate within the context of a domain.</p>
<p>Right, I&#8217;m exhausted.  Everyone gets busy.  It&#8217;s easy to be left in the trenches and not have time to step back and take a long look at what is going on around you.  I&#8217;ve suggested a couple of things that I think are useful.  You probably have more.  If so, please leave a comment&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/05/14/busy-java-developer-stop-look-listen-and-live/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Beauty of Ruby</title>
		<link>http://www.clevegibbon.com/wordpress/2008/04/16/the-beauty-of-ruby/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/04/16/the-beauty-of-ruby/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 21:20:19 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/archives/98</guid>
		<description><![CDATA[I&#8217;m more of a fan of Ruby than Rails.  Sure Rails is good, but Ruby is way better.  I&#8217;m trying to put some time aside to learn a little bit of Polish.  As a result, I was a frequent visitor to www.dict.pl.  After a couple of days of using this, I&#8217;d [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m more of a fan of Ruby than Rails.  Sure Rails is good, but Ruby is way better.  I&#8217;m trying to put some time aside to learn a little bit of Polish.  As a result, I was a frequent visitor to <a href="http://www.dict.pl">www.dict.pl</a>.  After a couple of days of using this, I&#8217;d had enough.  Too slow.  Too restrictive.  Too crap!  Time to turn this around.</p>
<p>I wrote a simple English-&gt;Polish translator application in Ruby.  It does all the usual stuff such as add new words, search for words in either language, and maintain the words in named bundles.   The challenge I set myself as a novice Ruby programmer was to implement the core set of features knowing that the code would be fat and not very pretty.  I then aggressively sort to refactor the code to reduce its size, whilst <strong><em>increasing</em></strong> the feature set. </p>
<p>The core translation engine started out as 120 lines of code with just the add new word feature.  Since then I&#8217;ve learnt a lot about how to structure Ruby programs and the effective use of closures, iterators, containers and yaml.  In the process, I&#8217;ve added search, display and bi-directional features to the translation engine and reduced the lines of code to 114.</p>
<p>I have a new found respect for Ruby the Language.  It is the most expressive language I played within in a long time.  Also, contrary to what many non-Ruby programmers tell me, Ruby is readable when written well.  Unfortunately, on my travels through the web, I have seen some really awful Ruby code and this stuff is truly poisonous.  Bad Ruby is completely unfathomable.  A ticking time bomb.  However, well-written is Ruby is sublime.  I truly believe that there are no shades of grey here <img src='http://www.clevegibbon.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/04/16/the-beauty-of-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s on your Stack?</title>
		<link>http://www.clevegibbon.com/wordpress/2008/03/11/whats-on-your-stack/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/03/11/whats-on-your-stack/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 12:39:34 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/archives/91</guid>
		<description><![CDATA[Yesterday I attended a talk on DSLs and towards the end of it we started looking at external DSLs.  I&#8217;m going to skip over that topic for now, but as a result tutorial headed by Rebecca Parsons moved into the area of lexers, grammars, parsers, language design and a little bit of compiler theory. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.clevegibbon.com/wordpress/archives/90">Yesterday</a> I attended a talk on DSLs and towards the end of it we started looking at external DSLs.  I&#8217;m going to skip over that topic for now, but as a result tutorial headed by <a href="http://www.thoughtworks.com/who-we-are/leadership-profiles/rebecca-parsons.html">Rebecca Parsons</a> moved into the area of lexers, grammars, parsers, language design and a little bit of compiler theory.  Good stuff.</p>
<p>What became abundantly clear to me is that although the room was jammed packed full of smart people, only about half of us knew what lexers and grammars were.  This got me thinking about assumed knowledge.  I&#8217;d also assumed that the majority of application developers knew at least Java or .NET.  Not so.  There were a lot of attendees that were pure Ruby, Perl or another.</p>
<p>Looking back, my language stack consists of 5 years of assembler/C, 10 years of C++, and 10 years of Java, where there was gradual hand-over from one language to the next.  On the way, I dabbled in Smalltalk, Eiffel, ML, Prolog, and more seriously in .NET and Ruby.  The very nature of the language meant that I needed to know about compilers and language design.  Also, as part of my thesis I had to swallow context free grammars and chomsky, to write a  header file parser that performed the static design analysis of large C++ systems.  But the only reason I did this is because I had to, and the tools available to me then were yacc(grammar)/lex(lexical analysis).  </p>
<p>Now, if you don&#8217;t use these types of languages and parse very simple grammars, there is no need to get your hands dirty.  However, Rebecca was spot on when she pointed out that tools such as yacc/lex and to a lesser degree antlr, have received bad press as being archaic, blunt tools with magical powers that are wielded by the chosen few.  In reality, there hasn&#8217;t been much cause for the masses to use them.  Will the drive for external DSLs where you want to create your own language make them more popular?  I doubt it.  I think people will still opt for internal DSLs that are written essentially in the host language (e.g. rSpec, JMock, and so on).</p>
<p>But I have to realise now that those guys/gals born in the eighties and heaven forbid the nineties, are operating off a completely different programming stack. Their minds are in different places and their toolset is somewhat orthogonal to mine.</p>
<p>Strange.  I suddenly got older very fast&#8230;</p>
<p><!-- technorati tags start -->
<p style="text-align:right;font-size:10px;">Technorati Tags: <a href="http://www.technorati.com/tag/dsl" rel="tag">dsl</a></p>
<p><!-- technorati tags end --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/03/11/whats-on-your-stack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>QCon 2008 : Domain Specific Languages</title>
		<link>http://www.clevegibbon.com/wordpress/2008/03/10/qcon-2008-domain-specific-languages/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/03/10/qcon-2008-domain-specific-languages/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 19:48:49 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[cognifide]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/archives/90</guid>
		<description><![CDATA[Today I spent my first day at QCon 2008 in a room with Martin Fowler, Neal Ford and Rebecca Parsons presenting their position on Domain Specific Languages, the results I&#8217;m sure will end up in a book.
For me, having sat through the tutorial, the headline moments for me were:

Understanding what the differences are between an [...]]]></description>
			<content:encoded><![CDATA[<p>Today I spent my first day at <a href="http://qcon.infoq.com/london/conference/">QCon 2008</a> in a room with <a href="http://www.martinfowler.com/">Martin Fowler</a>, <a href="http://memeagora.blogspot.com/">Neal Ford</a> and <a href="http://www.thoughtworks.co.uk/what-we-say/CTO-blog.html">Rebecca Parsons</a> presenting their position on Domain Specific Languages, the results I&#8217;m sure will end up in a <a href="http://www.martinfowler.com/dslwip/">book</a>.</p>
<p>For me, having sat through the tutorial, the headline moments for me were:</p>
<ul>
<li>Understanding what the differences are between an <a href="http://www.martinfowler.com/dslwip/InternalOverview.html">internal</a> and <a href="http://www.martinfowler.com/dslwip/ExternalOverview.html">external</a> DSL</li>
<li>Knowing when to select one over the other</li>
<li>There is a lot of unknowns surrounding the whole area of DSLs, and what Fowler and Co are doing are exploring the problem space and proposing options.  </li>
<li>Some languages, Ruby, Groovy, Scala lend themselves more easily to writing readable internal DSLs</li>
<li>Other languages, such as C# and Java, tend to pollute their DSLs with syntactical noise in the form of {}, &#8220;&#8221; and ()</li>
<li>When the language is getting in your way, it&#8217;s time to more from internal to external</li>
<li>DSLs are a layer on top of a framework that is used to setup and configure framework objects</li>
<li>External DSLs free you from the constraints of a specific programming language but introduce an extra step in the form a parser generation code to your build</li>
<li>There were a <strong>LOT</strong> of Ruby guys in the room, including the leads on <a href="http://rspec.info/">rSpec</a>, an internal DSL for Ruby testing</li>
<li>The definition for DSLs is wide open for interpretation and a lot more will happen in the space over the coming months</li>
<li>I need to do some more reading around the concept of a language workbenches.  Very interesting stuff.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/03/10/qcon-2008-domain-specific-languages/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>When do you code review?</title>
		<link>http://www.clevegibbon.com/wordpress/2008/03/09/when-do-you-code-review/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/03/09/when-do-you-code-review/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 21:32:40 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/archives/89</guid>
		<description><![CDATA[I stumbled across this article in my google reader on code reviews that I found quite interesting.  All too often code reviews just don&#8217;t happen software projects.  Whether they are forgotten about, or there is no company procedure for doing them, or no time is set aside to perform them, if no-one makes [...]]]></description>
			<content:encoded><![CDATA[<p>I stumbled across <a href="http://www.agilejournal.com/articles/the-agile-developer/making-agile-reviews-effective.html">this article</a> in my google reader on code reviews that I found quite interesting.  All too often code reviews just don&#8217;t happen software projects.  Whether they are forgotten about, or there is no company procedure for doing them, or no time is set aside to perform them, if no-one <strong><em>makes</em></strong> them happen, code reviews <strong><em>will not</em></strong> happen.  To me that is a great shame, because code reviews are an wonderful place to learn about others in your team and to explore <strong>your</strong> problem space through the eyes of others.  When done right, those teams that hold code reviews, would never dream of letting them accidentally fall of the project plan.  Code reviews are an essential part of the development (yours, the teams and of course the product&#8217;s) process.  </p>
<p>So when is a good time to hold a code review?  Weekly, after every sprint/iteration, monthly? The regimented, thou shalt have a code review every X, has never worked for me.  You cannot predict what will be going on in a project and shoe-horning a code review is just counter-productive in the extreme.  Typically, you should always hold your first code review when you get to a place when you have something to take about.  In the article, the author says this is 20% through the build.  Maybe.  But I think this depends on the project, so its a team gut feel.  It&#8217;s got to be early enough for changes to made, glaring errors and/or omissions to be highlighted but far enough through to warrant the time and effort that needs to be invested to make it worthwhile.  </p>
<p>After the first review, its a judgement call, as to whether another code review is needed.  This is where certain design quality and product  metrics can be used to help make that call.  Are the number of broken builds increasing?  Is the test coverage going down? Are the number of dependencies between packages increasing?  Is the team producing more complex and/or large methods? Is the source not conforming with pre-defined standards.  If so, maybe its time for a code review.</p>
<p>Oh, and before the pure agilists start jumping all over this and say code reviews, isn&#8217;t that covered by pair programming throughout.  Well yes and no.  I think a code review, at a team, rather than just at pair level, is a very important exercise that should not be replaced by pair programming.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/03/09/when-do-you-code-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Heroku!</title>
		<link>http://www.clevegibbon.com/wordpress/2008/02/20/heroku/</link>
		<comments>http://www.clevegibbon.com/wordpress/2008/02/20/heroku/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 22:24:00 +0000</pubDate>
		<dc:creator>Cleve Gibbon</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.clevegibbon.com/wordpress/archives/84</guid>
		<description><![CDATA[I&#8217;ve found Heroku!  
Heroku allows me to build and deploy Rails applications.  It couldn&#8217;t have happened at a better time for me because my current provider doesn&#8217;t give me what I need re. Ruby and Rails.  So I took the following steps:
1) Registered with Heroku
2) When I got my sign-up email, I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve found <a href="http://heroku.com/">Heroku!</a>  </p>
<p>Heroku allows me to build and deploy Rails applications.  It couldn&#8217;t have happened at a better time for me because my current provider doesn&#8217;t give me what I need re. Ruby and Rails.  So I took the following steps:</p>
<p>1) Registered with Heroku<br />
2) When I got my sign-up email, I zipped up my Rails app (removing the .svn directories, tmp and log folders)<br />
3) Uploaded to Heroku<br />
4) Then run it</p>
<p>The application is a re-write of <a href="http://www.clevegibbon.com">http://www.clevegibbon.com</a> and can be found here <a href="http://clevegibbon.heroku.com">http://clevegibbon.heroku.com</a>.  I&#8217;ll evolve it there.</p>
<p>Heroku is novel. Stunningly simple.  Very expressive. </p>
<p>Sweet!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clevegibbon.com/wordpress/2008/02/20/heroku/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
