<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet TW - Alumni</title>
	<link>http://blogs.thoughtworks.com/alumni/</link>
	<language>en</language>
	<description>Planet TW - Alumni - http://blogs.thoughtworks.com/alumni/</description>

<item>
	<title>Griffin Caprio: Links for 2008-05-21 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-21</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/295566639/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.wikimatrix.org/&quot;&gt;WikiMatrix - Compare them all&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
HUGE site for comparing wiki engines.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.25hoursaday.com/weblog/2008/05/21/NoteToWeb20CompaniesEarlyAdoptersAreNotTheMassMarket.aspx&quot;&gt;Dare Obasanjo aka Carnage4Life - Note to Web 2.0 Companies: Early Adopters are not the Mass Market&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Great post by Dare that crystalizes my thoughts on most Web 2.0 companies.&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/295566639&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Thu, 22 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Kurt Schrader: Ruby is a Playground, PHP is a Factory</title>
	<guid isPermaLink="false">urn:uuid:34c4ab0d-58b6-4792-9dc0-fd88c765caf1</guid>
	<link>http://feeds.feedburner.com/~r/Schradeblog/~3/295307342/ruby-is-a-playground-php-is-a-factory</link>
	<description>&lt;p&gt;While reading yet another article on why &lt;a href=&quot;http://www.codinghorror.com/blog/archives/001119.html&quot;&gt;PHP Sucks (today's witty twist, &quot;but It Doesn't Matter&quot;)&lt;/a&gt; I realized yet another reason that I'm glad to be programming in Ruby.&lt;/p&gt;

&lt;p&gt;Ruby, to me, is like a big open playground, while languages like PHP remind me of big industrial factories.  I don't think that any of us would argue that industrial factories are more efficient for most things, but they also suck the creativity and life out of the people working in them. &lt;/p&gt;

&lt;p&gt;For instance, why would you ever want to write code like this:&lt;/p&gt;

&lt;pre&gt;class DescribeNewBowlingGame extends PHPSpec_Context
{
    private $_bowling = null;
    public function before()
    {
        $this-&amp;gt;_bowling = new Bowling;
    }

    public function itShouldScore0ForGutterGame()
    {
        for ($i=1; $i&amp;lt;=20; $i++) {
            $this-&amp;gt;_bowling-&amp;gt;hit(0); // someone is really bad at bowling!
        }       $this-&amp;gt;spec($this-&amp;gt;_bowling-&amp;gt;score)-&amp;gt;should-&amp;gt;equal(0);
    }

}
&lt;/pre&gt;

&lt;p&gt;when instead you can write this:&lt;/p&gt;

&lt;pre&gt;describe Bowling do
  before(:each) do
    @bowling = Bowling.new
  end

  it &quot;should score 0 for gutter game&quot; do
    20.times { @bowling.hit(0) }
    @bowling.score.should == 0
  end
end
&lt;/pre&gt;

&lt;p&gt;You wouldn't. The first case is, at best, a bastard representation of the second case.&lt;/p&gt;

&lt;p&gt;Of course, being out on the playground means that people get hit in the face with a ball once in a while, and everything isn't as neatly laid out for you as it is in a factory, but you also have the option to be creative, and not just do things like everyone else does.&lt;/p&gt;

&lt;p&gt;And, sure, the playground is far more full of assholes than the factory, but these assholes are also more creative and entertaining to work with than people who just put widgets in place in a factory. &lt;/p&gt;

&lt;p&gt;Plus the playground has that weird kid in the corner who's doing something totally crazy, but that just might be a genius, and if you get enough of these kids together, you're going to produce something that's much cooler and more creative than anything that gets built in a factory.&lt;/p&gt;

&lt;p&gt;So you can talk all you want about big boring websites being written in PHP (or Java, etc).&lt;/p&gt;

&lt;p&gt;As for me, I'll keep working in a language that encourages people to be creative.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/Schradeblog?a=c8mIhH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Schradeblog?i=c8mIhH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Schradeblog?a=2UmDuH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Schradeblog?i=2UmDuH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/Schradeblog/~4/295307342&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 21 May 2008 20:23:34 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Now, this is funny</title>
	<guid isPermaLink="false">tag:typepad.com,2003:post-50225098</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/295246421/now-this-is-fun.html</link>
	<description>&lt;p&gt;While trying to load up the twitter blog post addressing the allegations that their downtime is a publicity stunt, i just got this:&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/br&gt;
&lt;img src=&quot;http://blog.1530technologies.com/Picture 1_1.jpg&quot; alt=&quot;Picture 1.png&quot; height=&quot;530&quot; width=&quot;663&quot;&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p&gt;Just kinda funny....&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?a=ruysmH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?i=ruysmH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/295246421&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 21 May 2008 18:48:04 +0000</pubDate>
</item>
<item>
	<title>Alex Ruiz: Design Patterns Training with Dr. Heinz Kabutz</title>
	<guid isPermaLink="true">http://www.jroller.com/alexRuiz/entry/design_patterns_training_with_dr</guid>
	<link>http://www.jroller.com/alexRuiz/entry/design_patterns_training_with_dr</link>
	<description>&lt;p&gt;
Last week I attended the &lt;a href=&quot;http://www.javaspecialists.eu/courses/dpc.jsp&quot; target=&quot;_blank&quot;&gt;Java Design Pattern Course&lt;/a&gt; by Java Champion &lt;a href=&quot;http://www.javaspecialists.eu&quot; target=&quot;_blank&quot;&gt;Dr. Heinz Kabutz&lt;/a&gt;, author of the famous &lt;a href=&quot;http://www.javaspecialists.eu/archive/archive.jsp&quot; target=&quot;_blank&quot;&gt;Java Specialists' Newsletter&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The 3-day course covered the following patterns:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;li&gt;Factory method&lt;/li&gt;
&lt;li&gt;Abstract factory&lt;/li&gt;
&lt;li&gt;Template method&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;Iterator&lt;/li&gt;
&lt;li&gt;Observer&lt;/li&gt;
&lt;li&gt;Adapter&lt;/li&gt;
&lt;li&gt;Decorator&lt;/li&gt;
&lt;li&gt;Composite&lt;/li&gt;
&lt;li&gt;Visitor&lt;/li&gt;
&lt;li&gt;Command&lt;/li&gt;
&lt;li&gt;Memento&lt;/li&gt;
&lt;li&gt;Chain of responsibility&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Facade&lt;/li&gt;
&lt;li&gt;Flyweight&lt;/li&gt;
&lt;li&gt;Bridge&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The course was well organized. The material was clear and very easy to follow, and the labs reinforced what I learned during the lessons. 
&lt;/p&gt;
&lt;p&gt;
Heinz is an excellent instructor and a very nice guy. He presented the patterns in an effective way, using clear examples and real-world experiences.
&lt;/p&gt;
&lt;p&gt;
I learned a lot and had tons of fun! Highly recommended!
&lt;/p&gt;
&lt;p&gt;
Here is an interview with Heinz: &quot;&lt;a href=&quot;http://java.sun.com/developer/technicalArticles/Interviews/community/kabutz_qa.html&quot; target=&quot;_blank&quot;&gt;Becoming a Better Programmer: A Conversation With Java Champion Heinz Kabutz&lt;/a&gt;.&quot;
&lt;/p&gt;</description>
	<pubDate>Wed, 21 May 2008 18:40:06 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Links for 2008-05-20 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/www_build_doctor_com#2008-05-20</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/294790251/www_build_doctor_com</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.1060.org/blogxter/entry?publicid=61A39BC7EDD7A14D5C66E20AF35BC5CD&quot;&gt;Steve: Developing on the Edge - Artifact numbering in JSR 277&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
+1!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/05/deploying-why-artifacts-are-your-friend.html&quot;&gt;Deploying: Why artifacts are your friend&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Why deploying direct from SVN may not be so wise.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.atalasoft.com/cs/blogs/jake/archive/2008/05/07/writing-custom-nant-tasks.aspx&quot;&gt;Jake Opines : Writing Custom NAnt Tasks&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Writing a custom Nant task&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.developer.com/java/article.php/3630721&quot;&gt;Introduction to Custom Ant Tasks&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Writing a custom Ant task&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://nayyeri.net/blog/how-to-write-a-custom-msbuild-task/&quot;&gt;How to Write a Custom MSBuild Task : Keyvan Nayyeri&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Uh, writing a custom MSBuild Task&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Wed, 21 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Links for 2008-05-20 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-20</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/294785340/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://sitesucker.us/home.html&quot;&gt;SiteSucker Home Page&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Suck down entire web sites.&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/294785340&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 21 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Chris Matts: Feature Injection</title>
	<guid isPermaLink="true">http://abc.truemesh.com/archives/000736.html</guid>
	<link>http://abc.truemesh.com/archives/000736.html</link>
	<description>OK. So I finally got round to reading the stuff. I'm halfway through and I realised a few bits are a bit out of date. Mainly the information arrival process at the end of the article is missing where I...</description>
	<pubDate>Tue, 20 May 2008 17:31:12 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Links for 2008-05-19 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/www_build_doctor_com#2008-05-19</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/294000941/www_build_doctor_com</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ddj.com/linux-open-source/184406479&quot;&gt;Dr. Dobb's | Dependency Management | April 1, 2006&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
At first I thought this was going to be an April Fools ...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.exubero.com/ant/dependencies.html&quot;&gt;Exubero - Project Dependencies Using Ant&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Joe knows his build.  Here he talks about how to build the inevitable common bits of your project using Nant.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-ap05068/index.html&quot;&gt;Automation for the people: Manage dependencies with Ivy&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
This is a nice concise introduction to Ivy by Paul Duvall.  Dependency managers are doubleplusgood.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://daveverwer.com/2007/4/23/deploy-rails-using-capistrano-without-access-to-subversion&quot;&gt;Dave Verwer: Deploy Rails using Capistrano without access to Subversion&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Hmm. Interesting.  Very interesting.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://weblogs.asp.net/owscott/archive/2003/12/30/46776.aspx&quot;&gt;Managing Terminal Services Sessions Remotely - Scott Forsyth's WebLog&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Boo hoo!  I want SSH back!&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Tue, 20 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Blogging for O'Reilly</title>
	<guid isPermaLink="false">tag:typepad.com,2003:post-50113952</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/293935484/blogging-for-or.html</link>
	<description>&lt;p&gt;Around the end of march, xml.com site editor Kurt Cagle put out a call for writers. I submitted my resume of sorts and Kurt was kind enough to make me a blogger! I will be trying to concentrate on the semantic web and associated technologies.&lt;/p&gt;
&lt;p&gt;You can check out the XML.com blog &lt;a href=&quot;http://www.oreillynet.com/xml/blog/&quot;&gt;here&lt;/a&gt; and my first post is &lt;a href=&quot;http://www.oreillynet.com/xml/blog/2008/05/introductions_are_in_order.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We have a good group of authors contributing, so do yourself a favor and subscribe to the &lt;a href=&quot;http://www.oreillynet.com/xml/blog/index.xml&quot;&gt;feed&lt;/a&gt; if you aren't already.&lt;/p&gt;
&lt;p&gt;Here's hoping I don't make too big of a fool out of myself.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?a=aMpYFH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?i=aMpYFH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/293935484&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 20 May 2008 02:42:46 +0000</pubDate>
</item>
<item>
	<title>Mike Melia: Revisited: AmbiguousTableNameException with DBUnit</title>
	<guid isPermaLink="true">http://www.gigantiq.com/blogs/mike/?p=12</guid>
	<link>http://www.gigantiq.com/blogs/mike/?p=12</link>
	<description>&lt;p&gt;I only had a little time yesterday to follow up on this issue (the priority is low as we know that making the user a non-DBA works) but I’ll document what I have encountered.&lt;/p&gt;
&lt;p&gt;The programmatic solution I mentioned&lt;br&gt;&lt;/br&gt;
&lt;code&gt;&lt;br&gt;&lt;/br&gt;
connection.getConfig().setFeature(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES);&lt;br&gt;&lt;/br&gt;
&lt;/code&gt;&lt;br&gt;&lt;/br&gt;
was dependent on me using DBUnit 2.2.2. I was using DBUnit 2.2 and had to upgrade.&lt;br&gt;&lt;/br&gt;
On upgrading to DBUnit 2.2.2, I discovered that a new dependency had been introduced on slf4j. I then discovered that the dependency was on version 1.4.3 (not version 1.5, which I had installed). Eventually, I had all of the correct libraries but, sadly, the AmbiguousTableNameException was still being thrown.&lt;/p&gt;
&lt;p&gt;Whilst DBUnit will now ignore all tables that begin with BIN$, my user has access to all tables in the system and some of those may be repeated for different users (the one I am currently failing on is DR$CLASS).&lt;/p&gt;
&lt;p&gt;I will leave this investigation now as I’m happy for my test user not be a DBA.&lt;/p&gt;</description>
	<pubDate>Mon, 19 May 2008 23:25:24 +0000</pubDate>
</item>
<item>
	<title>Jonathan Rasmusson: The Toyota Way - Use Pull Systems to Avoid Overproduction</title>
	<guid isPermaLink="false">http://rasmusson.wordpress.com/?p=63</guid>
	<link>http://rasmusson.wordpress.com/2008/05/19/the-toyota-way-use-pull-systems-to-avoid-overproduction/</link>
	<description>Overproduction (waste) is one of the biggest tenets of the Toyota Production System. In this principle, Toyota recommends using pull systems to avoid producing overproduction.

Section II: The Right Process Will Produce the Right Results
Principle 3. Use “Pull” Systems to Avoid Overproduction
■ Provide your downline customers in the production process with what
they want, when they want [...]</description>
	<pubDate>Mon, 19 May 2008 22:35:21 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Deploying: Why artifacts are your friend</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6500374844252313496.post-5596584053111094921</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/293770643/deploying-why-artifacts-are-your-friend.html</link>
	<description>&lt;a href=&quot;http://bp2.blogger.com/_-rlZcQ-7nAM/SDHpn9Xoo6I/AAAAAAAAAEQ/3cdMdEgt2cs/s1600-h/875110550_cf6da223ec.jpg&quot;&gt;&lt;img src=&quot;http://bp2.blogger.com/_-rlZcQ-7nAM/SDHpn9Xoo6I/AAAAAAAAAEQ/3cdMdEgt2cs/s400/875110550_cf6da223ec.jpg&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5202195917287498658&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;(image taken from &lt;a href=&quot;http://flickr.com/photos/zonagirl/&quot;&gt;Nancy's photostream&lt;/a&gt;)&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;/span&gt;&lt;/div&gt;You're almost there.  There's a single character in a single file that you need to change and you think the deployment is good to go.  &quot;There's no need to do a whole CI build and bother the QA's for this one&quot;, you think.  &quot;I'll just make the change against this tag, and merge it down later this afternoon.&quot;  Oops.  There you go.  Provoking the Operations Manager again. You just made a decision on their behalf, and they probably won't like it.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The Operations Manager's job is about keeping services available, and about managing risk.  They tend to mitigate risk by insisting that all code releases have passed whatever QA process your organisation has.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;When your users turn on the telly for Neighbours, the operations team will be deploying a release candidate.    Allowing deployments direct from your VCS (even if you compile it), is opening the the door to the possibility (no matter now slight) that the release candidate might have a few &quot;enhancements&quot; to it, courtesy of someone who isn't aware of the QA process.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;So this is why people have a job that involves taking code from a Version Control System like Subversion, checking out a tag that a developer emailed them, optionally building that code, and then deploying it to a QA or production environment.  You might think that's inefficient.  But when it comes to keeping a major web property or financial system online,  there's different calculations going on: and they are about risk.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Every time software is deployed, there's always the risk that no matter how diligent the development team has been, there's errors.  Which can lead to outages, and cause at best reputational issues. So having someone to be the interface between the development team and the operations team and pull the right code across comes pretty cheaply.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Tools like Capistrano that work off of Subversion aren't yet a good fit for some the organisations because of this effect.  When those organisations see fit to use Java and C# code anyway, I think there's virtue in taking the code that is built via Continuous Integration and using that as the clean, deployable unit.  That's a repeatable process, and it doesn't involve humans typing stuff in, or clicking stuff, which always seems error prone to me.  Mind you, that's could just be my typing.&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=qt4rLH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=qt4rLH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=DwsZjh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=DwsZjh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=n7p43h&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=n7p43h&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=yeleWh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=yeleWh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
	<pubDate>Mon, 19 May 2008 21:07:08 +0000</pubDate>
	<author>noreply@blogger.com (Julian)</author>
</item>
<item>
	<title>Bret Pettichord: Next Watir Austin Meeting: Jim Matthews' Link Checker</title>
	<guid isPermaLink="true">http://www.io.com/~wazmo/blog/archives/2008_05.html#000277</guid>
	<link>http://www.io.com/~wazmo/blog/archives/2008_05.html#000277</link>
	<description>The next meeting of the Austin Watir Users Group will be this Wednesday, May 21. Jim Matthews will be speaking about his link checker, a web crawler optimized for testing that he has released as open-source. He needed a script...</description>
	<pubDate>Mon, 19 May 2008 17:40:20 +0000</pubDate>
</item>
<item>
	<title>Alex Ruiz: FEST-Swing 1.0a2: Fluent interface for testing Swing GUIs</title>
	<guid isPermaLink="true">http://www.jroller.com/alexRuiz/entry/fest_swing_1_0a2_fluent</guid>
	<link>http://www.jroller.com/alexRuiz/entry/fest_swing_1_0a2_fluent</link>
	<description>&lt;p&gt;
We are proud to announce the release of &lt;a href=&quot;http://fest.googlecode.com/files/fest-swing-1.0a2.zip&quot;&gt;FEST-Swing 1.0-Alpha2&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://fest.easytesting.org/swing/&quot; target=&quot;_blank&quot;&gt;FEST-Swing&lt;/a&gt; is a Java library that provides a &lt;a href=&quot;http://martinfowler.com/bliki/FluentInterface.html&quot; target=&quot;_blank&quot;&gt;fluent interface&lt;/a&gt; for functional Swing GUI testing. This library provides an easy-to-use API that makes creation and maintenance of GUI tests easy.
&lt;/p&gt;
&lt;p&gt;
Changelog:
&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
Updated &lt;a href=&quot;http://fest.easytesting.org/swing&quot; target=&quot;_blank&quot;&gt;documentation&lt;/a&gt; and &lt;a href=&quot;http://fest.easytesting.org/swing/apidocs/index.html&quot; target=&quot;_blank&quot;&gt;Javadocs&lt;/a&gt;.
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=68&quot; target=&quot;_blank&quot;&gt;68&lt;/a&gt;: Add multi-selection support for &lt;code class=&quot;code&quot;&gt;JTree&lt;/code&gt;s:
&lt;pre class=&quot;prettyprint&quot;&gt;dialog.tree(&quot;feeds&quot;).selectPaths(&quot;Web Feeds/Groovy/Andres Almiray's Weblog&quot;,
                                 &quot;Web Feeds/Groovy/The Disco Blog&quot;);
&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=99&quot;&gt;99&lt;/a&gt;: Add methods to check properties of &lt;code class=&quot;code&quot;&gt;JTable&lt;/code&gt; cells. Many thanks to J. Simmons. For more details, please read &quot;&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.ColorsAndFonts&quot; target=&quot;_blank&quot;&gt;Verifying Colors and Fonts&lt;/a&gt;&quot; and &quot;&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.CustomCellRenderers&quot; target=&quot;_blank&quot;&gt;Custom Cell Renderers&lt;/a&gt;.&quot;
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=123&quot; target=&quot;_blank&quot;&gt;123&lt;/a&gt;: &lt;code class=&quot;code&quot;&gt;NullPointerException&lt;/code&gt; when calling &lt;code class=&quot;code&quot;&gt;deleteText()&lt;/code&gt; on filled &lt;code class=&quot;code&quot;&gt;JTextfield&lt;/code&gt;. Many thanks to Manuel Kueblboeck.
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=124&quot; target=&quot;_blank&quot;&gt;124&lt;/a&gt;: Unable to use &lt;code class=&quot;code&quot;&gt;JListFixture&lt;/code&gt; when &lt;code class=&quot;code&quot;&gt;CellRenderer.getListCellRendererComponent&lt;/code&gt; does not return a &lt;code class=&quot;code&quot;&gt;JLabel&lt;/code&gt;. Many thanks to Woody Folsom. For more details, including how to provide your own cell reader, please read &quot;&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.CustomCellRenderers&quot; target=&quot;_blank&quot;&gt;Custom Cell Renderers&lt;/a&gt;.&quot;
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=125&quot; target=&quot;_blank&quot;&gt;125&lt;/a&gt;: &lt;code class=&quot;code&quot;&gt;JToolBarFixture&lt;/code&gt; should extend &lt;code class=&quot;code&quot;&gt;ContainerFixture&lt;/code&gt;. Many thanks to Woody Folsom.
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=128&quot; target=&quot;_blank&quot;&gt;128&lt;/a&gt;: Add support for custom cell renderers in &lt;code class=&quot;code&quot;&gt;JComboBox&lt;/code&gt;. For more details, including how to provide your own cell reader, please read &quot;&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.CustomCellRenderers&quot; target=&quot;_blank&quot;&gt;Custom Cell Renderers&lt;/a&gt;.&quot;
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=130&quot; target=&quot;_blank&quot;&gt;130&lt;/a&gt;: Add support for custom cell renderers in &lt;code class=&quot;code&quot;&gt;JTree&lt;/code&gt;. For more details, including how to provide your own cell reader, please read &quot;&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.CustomCellRenderers&quot; target=&quot;_blank&quot;&gt;Custom Cell Renderers&lt;/a&gt;.&quot;
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=131&quot; target=&quot;_blank&quot;&gt;131&lt;/a&gt;: Requiring no selection in combo box. Added method &lt;code class=&quot;code&quot;&gt;requireNoSelection()&lt;/code&gt; to &lt;code class=&quot;code&quot;&gt;JComboBoxFixture&lt;/code&gt;, &lt;code class=&quot;code&quot;&gt;JListFixture&lt;/code&gt;, &lt;code class=&quot;code&quot;&gt;JTableFixture&lt;/code&gt; and &lt;code class=&quot;code&quot;&gt;JTreeFixture&lt;/code&gt;. 
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=133&quot; target=&quot;_blank&quot;&gt;133&lt;/a&gt;: &lt;code class=&quot;code&quot;&gt;JTreeFixture&lt;/code&gt; should scroll to the element to select if it is not visible.
&lt;/li&gt;

&lt;li&gt;
Fixed issue &lt;a href=&quot;http://code.google.com/p/fest/issues/detail?id=135&quot; target=&quot;_blank&quot;&gt;135&lt;/a&gt;: Return and validate contents of a &lt;code class=&quot;code&quot;&gt;JTable&lt;/code&gt;.
&lt;/li&gt;

&lt;li&gt;
Component finders (&lt;code class=&quot;code&quot;&gt;WindowFinder&lt;/code&gt;, &lt;code class=&quot;code&quot;&gt;JFileChooserFinder&lt;/code&gt; and &lt;code class=&quot;code&quot;&gt;JOptionPaneFinder&lt;/code&gt;) can perform lookups using &lt;code class=&quot;code&quot;&gt;GenericTypeMatchers&lt;/code&gt;. Many thanks to Mariusz Saternus. For more information, please read &quot;&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.LongDurationTasks&quot; target=&quot;_blank&quot;&gt;Testing Long-Duration Tasks&lt;/a&gt;&quot;
&lt;/li&gt;

&lt;li&gt;
Added method &lt;code class=&quot;code&quot;&gt;font()&lt;/code&gt; to all component fixtures. This method returns a &lt;code class=&quot;code&quot;&gt;&lt;a href=&quot;http://fest.easytesting.org/swing/apidocs/org/fest/swing/fixture/FontFixture.html&quot; target=&quot;_blank&quot;&gt;FontFixture&lt;/a&gt;&lt;/code&gt;.
&lt;/li&gt;

&lt;li&gt;
Added method &lt;code class=&quot;code&quot;&gt;background()&lt;/code&gt; to all component fixtures. This method returns a &lt;code class=&quot;code&quot;&gt;&lt;a href=&quot;http://fest.easytesting.org/swing/apidocs/org/fest/swing/fixture/ColorFixture.html&quot; target=&quot;_blank&quot;&gt;ColorFixture&lt;/a&gt;&lt;/code&gt;.
&lt;/li&gt;

&lt;li&gt;
Added method &lt;code class=&quot;code&quot;&gt;foreground()&lt;/code&gt; to all component fixtures. This method returns a &lt;code class=&quot;code&quot;&gt;&lt;a href=&quot;http://fest.easytesting.org/swing/apidocs/org/fest/swing/fixture/ColorFixture.html&quot; target=&quot;_blank&quot;&gt;ColorFixture&lt;/a&gt;&lt;/code&gt;.
&lt;/li&gt;

&lt;li&gt;
Renamed method &lt;code class=&quot;code&quot;&gt;selectionContents()&lt;/code&gt; to &lt;code class=&quot;code&quot;&gt;selectionValue()&lt;/code&gt; in &lt;code class=&quot;code&quot;&gt;org.fest.swing.fixtures.JTableFixture&lt;/code&gt;.
&lt;/li&gt;

&lt;li&gt;
Renamed method &lt;code class=&quot;code&quot;&gt;contentAt(TableCell)&lt;/code&gt; to &lt;code class=&quot;code&quot;&gt;valueAt(TableCell)&lt;/code&gt; in &lt;code class=&quot;code&quot;&gt;org.fest.swing.fixtures.JTableFixture&lt;/code&gt;. This change was made to keep name consistency between &lt;code class=&quot;code&quot;&gt;JComboBoxFixture&lt;/code&gt;, &lt;code class=&quot;code&quot;&gt;JListFixture&lt;/code&gt; and &lt;code class=&quot;code&quot;&gt;JTableFixture&lt;/code&gt;.
&lt;/li&gt;

&lt;li&gt;
Added method &lt;code class=&quot;code&quot;&gt;requireValue(String)&lt;/code&gt; to &lt;code class=&quot;code&quot;&gt;org.fest.swing.fixtures.JTableCellFixture&lt;/code&gt;. This method verifies that the value of a cell in a &lt;code class=&quot;code&quot;&gt;JTable&lt;/code&gt; is correct.
&lt;/li&gt;

&lt;li&gt;
Added methods &lt;code class=&quot;code&quot;&gt;showPopupMenuAt(int)&lt;/code&gt; and &lt;code class=&quot;code&quot;&gt;showPopupMenuAt(String)&lt;/code&gt; to &lt;code class=&quot;code&quot;&gt;org.fest.swing.fixtures.JTreeFixture&lt;/code&gt;. These methods show a &lt;code class=&quot;code&quot;&gt;JPopupMenu&lt;/code&gt; in a node located by row index or path, respectively.
&lt;/li&gt;

&lt;li&gt;
Replaced &lt;code class=&quot;code&quot;&gt;TreePath&lt;/code&gt; as method parameter in &lt;code class=&quot;code&quot;&gt;org.fest.swing.fixtures.JTreeFixture&lt;/code&gt; with a &lt;code class=&quot;code&quot;&gt;String&lt;/code&gt; specifying the the node path. For example, instead of:
&lt;pre class=&quot;prettyprint&quot;&gt;dialog.tree(&quot;feeds&quot;).selectPath(new TreePath(new Object[] { &quot;root&quot;, &quot;node1&quot; });
&lt;/pre&gt;
we can write:
&lt;pre class=&quot;prettyprint&quot;&gt;dialog.tree(&quot;feeds&quot;).selectPath(&quot;root/node1&quot;);
&lt;/pre&gt;
where &quot;/&quot; is the default separator. The separator can be changed to any &lt;code class=&quot;code&quot;&gt;String&lt;/code&gt;.
&lt;/li&gt;

&lt;/ol&gt;


&lt;p&gt;
FEST-Swing can be downloaded &lt;a href=&quot;http://code.google.com/p/fest/downloads/list&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; (file  &lt;a href=&quot;http://fest.googlecode.com/files/fest-swing-1.0a2.zip&quot;&gt;fest-swing-1.0a2.zip&lt;/a&gt;.) FEST requires &lt;a href=&quot;http://java.sun.com/javase/downloads/index_jdk5.jsp&quot; target=&quot;_blank&quot;&gt;Java SE 5.0&lt;/a&gt; or later.
&lt;/p&gt;
&lt;p&gt;
Here are some useful links:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fest.easytesting.org/swing/&quot; target=&quot;_blank&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://fest.easytesting.org/swing/changes-report.html&quot; target=&quot;_blank&quot;&gt;Change report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://fest.easytesting.org/swing/apidocs/index.html&quot; target=&quot;_blank&quot;&gt;Javadocs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://fest.easytesting.org/swing/wiki/pmwiki.php?n=FEST-Swing.GettingStarted&quot; target=&quot;_blank&quot;&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/fest/issues/list&quot; target=&quot;_blank&quot;&gt;Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.google.com/group/easytesting&quot; target=&quot;_blank&quot;&gt;Users' Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Feedback is always appreciated &lt;img src=&quot;http://jroller.com/images/smileys/smile.gif&quot; border=&quot;0&quot;&gt;&lt;/img&gt;
&lt;/p&gt;</description>
	<pubDate>Mon, 19 May 2008 12:55:26 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Links for 2008-05-18 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-18</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/293242198/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://nutrun.com/weblog/erlang-eval-and-dynamic-dispatch/&quot;&gt;nutrun » Blog Archive » Erlang eval and dynamic dispatch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developers.facebook.com/thrift/&quot;&gt;Facebook Developers | Thrift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://yarivsblog.com/articles/2008/05/13/erlang-does-have-shared-memory/&quot;&gt;Yariv’s Blog » Blog Archive » Erlang does have shared memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.applematters.com/article/using-ssh-secure-tunnels-for-the-common-man-part-ii/&quot;&gt;Using SSH: Secure Tunnels for the Common Man: Part II - AppleMatters&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Good intro to tunnels.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bbnflstats.com/2008/05/homemade-sagarin-ratings.html&quot;&gt;NFL Stats: Homemade Sagarin Ratings&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Nice overview of using Excel solver to mimic  jeff sagarin ratings.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bbnflstats.com/2008/05/elo-ratings.html&quot;&gt;NFL Stats: Elo Ratings&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
More about sagarin and his ELO rankings.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://swat.cse.lehigh.edu/projects/lubm/&quot;&gt;Lehigh University Benchmark (LUBM)&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Interesting benchmarking for semantic web repositories&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dbpedia.org/About&quot;&gt;wiki.dbpedia.org : About&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Very cool site that is extracting data from wikipedia and making it available as a dataset.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pellet.owldl.org/&quot;&gt;Pellet: The Open Source OWL DL Reasoner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.openrdf.org/&quot;&gt;openRDF.org: Home&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
RDF Parser and more&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/293242198&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 19 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Alex Ruiz: Thanks Andres!</title>
	<guid isPermaLink="true">http://www.jroller.com/alexRuiz/entry/thanks_andres</guid>
	<link>http://www.jroller.com/alexRuiz/entry/thanks_andres</link>
	<description>&lt;p&gt;
My good friend and Groovy guru, &lt;a href=&quot;http://www.jroller.com/aalmiray&quot; target=&quot;_blank&quot;&gt;Andres Almiray&lt;/a&gt;, has written the following excellent articles about using &lt;a href=&quot;http://fest.easytesting.org&quot; target=&quot;_blank&quot;&gt;FEST-Swing&lt;/a&gt; and &lt;a href=&quot;http://groovy.codehaus.org/&quot; target=&quot;_blank&quot;&gt;Groovy&lt;/a&gt;:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jroller.com/aalmiray/entry/testing_groovy_uis_with_fest&quot; target=&quot;_blank&quot;&gt;Testing Groovy UIs with FEST&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jroller.com/aalmiray/entry/fest_easyb_making_ui_testing&quot; target=&quot;_blank&quot;&gt;FEST + Easyb: making UI testing easier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Writing functional GUI tests for Swing applications is pretty easy with FEST-Swing. By using Groovy and &lt;a href=&quot;http://easyb.org/&quot; target=&quot;_blank&quot;&gt;Easyb&lt;/a&gt;, Andres takes GUI testing to a higher level of simplicity!
&lt;/p&gt;
&lt;p&gt;
Andres has been a great supporter of FEST. He has answered every Groovy-related question in the FEST mailing list. He has also helped me understand how Groovy can benefit FEST, by showing me the cool things that Groovy can do and proposing different ways to create a Groovy-based DSL.
&lt;/p&gt;
&lt;p&gt;
Thanks my friend! &lt;img src=&quot;http://jroller.com/images/smileys/smile.gif&quot; border=&quot;0&quot;&gt;&lt;/img&gt;
&lt;/p&gt;</description>
	<pubDate>Mon, 19 May 2008 00:24:56 +0000</pubDate>
</item>
<item>
	<title>Shane Duan: Fix : ERROR:  While executing gem ... (Zlib::BufError)</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6678855.post-8107836092749097331</guid>
	<link>http://agileworks.blogspot.com/2008/05/fix-error-while-executing-gem.html</link>
	<description>All you need to do is&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;blockquote&gt;gem update --system&lt;/blockquote&gt;Thank you &lt;a href=&quot;http://dontrepeatyourself.wordpress.com/2007/05/14/zlibbuferror/&quot;&gt;&lt;span class=&quot;postedby&quot;&gt;dontrepeatyourself&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;filedto&quot;&gt; !!!&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;/span&gt;</description>
	<pubDate>Sun, 18 May 2008 19:00:10 +0000</pubDate>
	<author>noreply@blogger.com (Shane Duan)</author>
</item>
<item>
	<title>Chris McMahon: The Software Artists: Index of Links to All Sections</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20165167.post-7754541796986519519</guid>
	<link>http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-index-of-links-to-all.html</link>
	<description>&lt;a href=&quot;http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-explanation.html&quot;&gt;Explanation&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-introduction.html&quot;&gt;Introduction&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-value-of-software.html&quot;&gt;The Value of Software&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-citations-for-part-one.html&quot;&gt;Citations for Part One&lt;/a&gt;</description>
	<pubDate>Sun, 18 May 2008 17:14:58 +0000</pubDate>
	<author>noreply@blogger.com (Chris McMahon)</author>
</item>
<item>
	<title>Chris McMahon: The Software Artists: The Value of Software</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20165167.post-6220487471099712918</guid>
	<link>http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-value-of-software.html</link>
	<description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br&gt;&lt;/br&gt;&lt;/span&gt;&lt;span&gt;Previous: &lt;a href=&quot;http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-explanation.html&quot;&gt;The Software Artists: Explanation&lt;/a&gt;&lt;br&gt;&lt;/br&gt;Previous: &lt;a href=&quot;http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-introduction.html&quot;&gt;The Software Artists: Introduction&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br&gt;&lt;/br&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/br&gt;Philosophy of Art and the Value of Software&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Manufactured goods generally have a clear relationship between&lt;br&gt;&lt;/br&gt;cost, price, and value.  In software, as in art, the value of the work&lt;br&gt;&lt;/br&gt;is more often completely unrelated to cost and price.  Operating&lt;br&gt;&lt;/br&gt;systems provide a great example:  the Windows audience for the&lt;br&gt;&lt;/br&gt;most part must use Windows regardless of cost or price.  The&lt;br&gt;&lt;/br&gt;Mac OSX audience generally chooses to use OSX regardless of&lt;br&gt;&lt;/br&gt;price, and often explicitly because of the aesthetic experience of&lt;br&gt;&lt;/br&gt;using OSX.  Linux has no cost at all, and a price that varies&lt;br&gt;&lt;/br&gt;wildly, and it also has a dedicated audience.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The value of software, like the value of an artistic performance,&lt;br&gt;&lt;/br&gt;lies in the ability of the software to attract and keep an audience.&lt;br&gt;&lt;/br&gt;The software industry would benefit immensely by turning the&lt;br&gt;&lt;/br&gt;tools of artistic criticism on software.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The 20th century in particular saw a great proliferation of critical&lt;br&gt;&lt;/br&gt;theory of artistic work.  Among the most important ideas were&lt;br&gt;&lt;/br&gt;The New Criticism and Structuralism.   Both provide fine tools&lt;br&gt;&lt;/br&gt;for evaluating software.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The New Criticism: The Intentional Fallacy and Aesthetic Value&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The New Criticism was the most important school of literary&lt;br&gt;&lt;/br&gt;criticism in the middle of the 20th century.  An essay this length&lt;br&gt;&lt;/br&gt;can touch only lightly on some key ideas of New Criticism, but&lt;br&gt;&lt;/br&gt;those ideas turn out to be quite valuable.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The New Critics believe that once the authors finish their works,&lt;br&gt;&lt;/br&gt;they disappear from the milieu in which the work exists.   New&lt;br&gt;&lt;/br&gt;Critics do not involve themselves in what the author intended to&lt;br&gt;&lt;/br&gt;create; they concern themselves only with the work as it exists.&lt;br&gt;&lt;/br&gt;This principle is called the “Intentional Fallacy”:   what the author&lt;br&gt;&lt;/br&gt;intended has no part in the value of the author's work.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Creating software can be seen in a similar light.  Once the&lt;br&gt;&lt;/br&gt;software is released, the team that created it cannot control how&lt;br&gt;&lt;/br&gt;the software is used, nor who uses it, nor what it is used for.   The&lt;br&gt;&lt;/br&gt;value of the software must lie in the software itself and in how it&lt;br&gt;&lt;/br&gt;is used, not in how it was created or in what it was intended to do.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The most important tool of the New Critics is a technique called&lt;br&gt;&lt;/br&gt;“close reading”.  From Wikipedia:  “close reading describes the&lt;br&gt;&lt;/br&gt;careful, sustained interpretation of a brief passage of text. Such a&lt;br&gt;&lt;/br&gt;reading places great emphasis on the particular over the general,&lt;br&gt;&lt;/br&gt;paying close attention to individual words, syntax, and the order&lt;br&gt;&lt;/br&gt;in which sentences and ideas unfold as they are read.”&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Creating software has its own kinds of close reading:  code&lt;br&gt;&lt;/br&gt;review, unit tests, and feature tests are all ways in which software&lt;br&gt;&lt;/br&gt;creators emphasize the particular over the general.  But one of the&lt;br&gt;&lt;/br&gt;most important results of close reading, and one of the most&lt;br&gt;&lt;/br&gt;important aspects of value to New Critics, is to identify and&lt;br&gt;&lt;/br&gt;examine the works for ambiguity.   These ambiguities are&lt;br&gt;&lt;/br&gt;examined for their value:  some kinds of ambiguity add to the&lt;br&gt;&lt;/br&gt;value of the work; some kinds of ambiguity detract from the&lt;br&gt;&lt;/br&gt;value of the work.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Software whose ambiguous features allow the user to do more&lt;br&gt;&lt;/br&gt;than the developers intended will be more valuable-- think of a&lt;br&gt;&lt;/br&gt;wiki.  Software whose ambiguous features stop the user in his&lt;br&gt;&lt;/br&gt;tracks has much less value-- think of the Windows Vista security&lt;br&gt;&lt;/br&gt;regimen.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Aesthetic Value: Unity, Complexity, Intensity &lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Monroe Beardsley, who wrote “The Intentional Fallacy” along&lt;br&gt;&lt;/br&gt;with William K. Wimsatt, also proposed a way to measure the&lt;br&gt;&lt;/br&gt;value of a particular work.  Beardsley states that the value of the&lt;br&gt;&lt;/br&gt;work resides in three criteria:  unity, variety, and intensity.&lt;br&gt;&lt;/br&gt;Applying these criteria to software is an interesting exercise.&lt;br&gt;&lt;/br&gt;Software may be unified if all of its features support a central&lt;br&gt;&lt;/br&gt;activity or theme.  Software may have variety if the features cover&lt;br&gt;&lt;/br&gt;a wide range of activity.  Software may be intense if using the&lt;br&gt;&lt;/br&gt;software is a compelling experience.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Periodically examining a software project  throughout  the&lt;br&gt;&lt;/br&gt;development process using these criteria is a fascinating exercise.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Structuralism: Signs and Myths&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Structuralism became popular later in the 20th century.  Where&lt;br&gt;&lt;/br&gt;New Criticism seeks to examine particular works disconnected&lt;br&gt;&lt;/br&gt;from intent or affect, Structuralism is rooted in linguistics and&lt;br&gt;&lt;/br&gt;anthropology, and seeks to examine works in the context of their&lt;br&gt;&lt;/br&gt;language and of their culture.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Two  aspects of Structuralism are of particular interest:  the idea&lt;br&gt;&lt;/br&gt;that linguistic signs can be decomposed into the signifier and the&lt;br&gt;&lt;/br&gt;signified; and that works can have deep structures that reflect&lt;br&gt;&lt;/br&gt;cultural values that can be represented as myths.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Signs: Signifier and Signified&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;A linguistic sign is a speech act:  a word, a sentence, a poem, a&lt;br&gt;&lt;/br&gt;book.  It is not at all unreasonable to treat the use of a software&lt;br&gt;&lt;/br&gt;feature or a software user interface as a sign.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The signifier is the “sound pattern” of the sign.  It is what&lt;br&gt;&lt;/br&gt;happens in the physical act of speaking, or in the personal act of&lt;br&gt;&lt;/br&gt;reciting to ourselves.   Furthermore, signifiers are the tokens by&lt;br&gt;&lt;/br&gt;which people communicate.  Signifiers are what people send each&lt;br&gt;&lt;/br&gt;other as they participate in culture.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The signified is the “concept or meaning” of the signifier.  The&lt;br&gt;&lt;/br&gt;signified  is  the  true  act  or  true  feeling  or&lt;br&gt;&lt;/br&gt;physical/emotional/apprehended manifestation  of the signifier.&lt;br&gt;&lt;/br&gt;With the ability to separate signifier and signified,  the&lt;br&gt;&lt;/br&gt;Structuralists look for common deep elements and mythological&lt;br&gt;&lt;/br&gt;underpinnings of artistic and cultural works.&lt;br&gt;&lt;/br&gt;The value of any particular work, then, can be evaluated in&lt;br&gt;&lt;/br&gt;several ways.  A work might have value to a Structuralist if:&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Signs are rich and easily available &lt;/li&gt;&lt;li&gt;Signifiers in the work are rich and pleasant &lt;/li&gt;&lt;li&gt;Signified are deep and clearly delineated by their&lt;/li&gt;&lt;li&gt;The work reflects a rich understanding of the cultural mythology and milieu&lt;br&gt;&lt;/br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Exercise: New Critical and Structuralist Evaluation of Browser Behavior&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;New Critics contribute the idea of close reading in order to&lt;br&gt;&lt;/br&gt;evaluate unity, variety, and complexity of a work, looking for&lt;br&gt;&lt;/br&gt;ambiguity in the service of a rich aesthetic experience.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Structuralists contribute the ability to separate signifier and&lt;br&gt;&lt;/br&gt;signified within a work, in order to evaluate the richness of both&lt;br&gt;&lt;/br&gt;the experience of the work itself and the extent to which the work&lt;br&gt;&lt;/br&gt;relates cultural mythology, either that of the work itself or that of&lt;br&gt;&lt;/br&gt;the consumer of the work.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;As a thought experiment, use these tools to measure the value of&lt;br&gt;&lt;/br&gt;this behavior:&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;When Internet Explorer opens a web page that contains MPEG3&lt;br&gt;&lt;/br&gt;files  (for  instance&lt;br&gt;&lt;/br&gt;http://www.drummingstyles.com/Genres/Latin/Bossa-&lt;br&gt;&lt;/br&gt;Nova/index.html), it by default prevents the user from loading the&lt;br&gt;&lt;/br&gt;page, and pops up a warning message that reads&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;blockquote style=&quot;font-style: italic;&quot;&gt;(IE6 and IE7) Do you want to allow software such as&lt;br&gt;&lt;/br&gt;ActiveX controls and plugins to run?&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;(IE6) A script is accessing some software (an ActiveX&lt;br&gt;&lt;/br&gt;control) on this page which has been marked safe for scripting.&lt;br&gt;&lt;/br&gt;Do you want to allow this?&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;(IE7) This website wants to run the following add-on:&lt;br&gt;&lt;/br&gt;'Windows Media Player' from 'Microsoft Corporation'.  If you&lt;br&gt;&lt;/br&gt;trust the website and the add-on and want to allow it to run,&lt;br&gt;&lt;/br&gt;click here... &lt;/blockquote&gt;A New Critic can use close reading on this behavior to see if it&lt;br&gt;&lt;/br&gt;exposes any ambiguities.  If those ambiguities contribute to the&lt;br&gt;&lt;/br&gt;unity, intensity, and variety of the experience, then the behavior is&lt;br&gt;&lt;/br&gt;valuable.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Since the only executable files on the page are mp3, the false&lt;br&gt;&lt;/br&gt;reference to ActiveX sends the reader down a false path.  Since&lt;br&gt;&lt;/br&gt;there is no explanation for why an mp3 is considered to be&lt;br&gt;&lt;/br&gt;ActiveX, this falseness only detracts from both the unity and the&lt;br&gt;&lt;/br&gt;intensity of the experience.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Furthermore, since the software requires validation of behavior&lt;br&gt;&lt;/br&gt;that the reader requested anyway (the false “ActiveX control” is&lt;br&gt;&lt;/br&gt;in fact “safe for scripting”) this behavior can only detract from&lt;br&gt;&lt;/br&gt;the whole point of the work, which is to play the mp3 file while&lt;br&gt;&lt;/br&gt;reading the text of the page.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;So a close reading of the the behavior in question in a New&lt;br&gt;&lt;/br&gt;Critical sense shows that the software reports false information.&lt;br&gt;&lt;/br&gt;Although the behavior could be construed as adding variety, it&lt;br&gt;&lt;/br&gt;does so for no good reason, and prevents the experience of the&lt;br&gt;&lt;/br&gt;work itself, which is to play the mp3 files while reading the page.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;A Structuralist would have a different interpretation.   The&lt;br&gt;&lt;/br&gt;references to ActiveX are a signifier, but it is unclear exactly what&lt;br&gt;&lt;/br&gt;is being signified, since the obvious signified (a real ActiveX&lt;br&gt;&lt;/br&gt;control) does not actually exist.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The Structuralist finds a clue in IE7,  where under some&lt;br&gt;&lt;/br&gt;circumstances, when loading a page with mp3 files, warns “This&lt;br&gt;&lt;/br&gt;website wants to run the following add-on: 'Windows Media&lt;br&gt;&lt;/br&gt;Player' from 'Microsoft Corporation'.  If you trust the website and&lt;br&gt;&lt;/br&gt;the add-on and want to allow it to run, click here...”&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Microsoft itself is concerned about security, or at least about the&lt;br&gt;&lt;/br&gt;appearance of security.  Perhaps the false warnings are intended&lt;br&gt;&lt;/br&gt;to warn about the possible insecurity of the Microsoft Windows&lt;br&gt;&lt;/br&gt;Media Player itself.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Looking at the wider culture, everywhere from airports to banks&lt;br&gt;&lt;/br&gt;to offices, there is a demonstrable trend toward what Bruce&lt;br&gt;&lt;/br&gt;Schneier  calls  “security theater”.   Security theater  is&lt;br&gt;&lt;/br&gt;“countermeasures that provide the feeling of security while doing&lt;br&gt;&lt;/br&gt;little or nothing to actually improve security”.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;A Structuralist will see that the culture that produced this work&lt;br&gt;&lt;/br&gt;values “security theater” while providing only the appearance of&lt;br&gt;&lt;/br&gt;security, so the Structuralist will concede a certain value to this&lt;br&gt;&lt;/br&gt;Internet Explorer behavior that a New Critic would not.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-citations-for-part-one.html&quot;&gt;Citations for part one&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 18 May 2008 17:09:13 +0000</pubDate>
	<author>noreply@blogger.com (Chris McMahon)</author>
</item>
<item>
	<title>Chris McMahon: The Software Artists: Citations for Part One</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20165167.post-308392922271439802</guid>
	<link>http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-citations-for-part-one.html</link>
	<description>Many of the ideas in this paper were first presented at the Austin&lt;br&gt;&lt;/br&gt;Workshop on Test Automation in early 2007.  The substance of&lt;br&gt;&lt;/br&gt;the talks appeared on the author's blog shortly afterward:&lt;br&gt;&lt;/br&gt;http://chrismcmahonsblog.blogspot.com/2007/01/craft-and- discipline-larks-tongues-in.html&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Most of the New Criticism and Structuralist citations are from&lt;br&gt;&lt;/br&gt;Wikipedia, except:&lt;br&gt;&lt;/br&gt;Child Jr., William C. 2000 Monroe Beardsley's Three Criteria for&lt;br&gt;&lt;/br&gt;Aesthetic Value: A Neglected Resource in the Evaluation of&lt;br&gt;&lt;/br&gt;Recent Music.  Journal of Aesthetic Education, Vol 34, No. 2&lt;br&gt;&lt;/br&gt;(Summer 2000), pp 49-63  doi:10.2307/3333576&lt;br&gt;&lt;/br&gt;The author did not know that unity/variety/intensity had been first&lt;br&gt;&lt;/br&gt;presented in music criticism until reading this article.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The author  also referred to&lt;br&gt;&lt;/br&gt;Adams, Hazard, Searle, Leroy (eds.) 1986 Critical Theory Since&lt;br&gt;&lt;/br&gt;1965 University Presses of Florida/Florida State University Press&lt;br&gt;&lt;/br&gt;for background information.  &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Bruce Schneier on “security theater”:&lt;br&gt;&lt;/br&gt;http://www.schneier.com/blog/archives/2006/08/terrorism_secur. html</description>
	<pubDate>Sun, 18 May 2008 17:06:48 +0000</pubDate>
	<author>noreply@blogger.com (Chris McMahon)</author>
</item>
<item>
	<title>Steve Freeman: Doubtful metaphors (i)</title>
	<guid isPermaLink="true">http://www.m3p.co.uk/blog/2008/05/18/doubtful-metaphors-i/</guid>
	<link>http://www.m3p.co.uk/blog/2008/05/18/doubtful-metaphors-i/</link>
	<description>&lt;h3&gt;&lt;span class=&quot;caps&quot;&gt;TDD &lt;/span&gt;is Keyhole surgery for software&lt;/h3&gt;

&lt;p&gt;Whilst writing up an extended example of &lt;span class=&quot;caps&quot;&gt;TDD,&lt;/span&gt; I was trying to be as incremental as possible, adding tiny little slices of behaviour all the way through the system: replace one component, get that working; show a connection established, get that working; show one field on the &lt;span class=&quot;caps&quot;&gt;UI, &lt;/span&gt;get that working. I took the trouble to structure the changes so that the application was working nearly all the time, rather than having to rip it apart.&lt;/p&gt;

&lt;p&gt;Before I learned how to make progress is such fine slices, I would have cracked open the whole codebase and made the changes in one sustained effort. That would have meant that I couldn’t stop until I finished, I couldn’t check in without branching, and that merging with rest of the team would be unpleasant. Lots of coders talk about this in terms of “open-heart surgery”.&lt;/p&gt;

&lt;p&gt;So maybe &lt;a href=&quot;http://en.wikipedia.org/wiki/Laparoscopic_surgery&quot;&gt;keyhole surgery&lt;/a&gt; is a better ambition as a metaphor. All the invasive work is focussed on the part that actually matters, rather than having to open up a route to get there. It takes a little more effort, but it’s less damaging to the patients who recover much more quickly, so the procedure as a whole is safer &lt;em&gt;and&lt;/em&gt; cheaper.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;hr&gt;&lt;/hr&gt;

&lt;p&gt;Jerry Weinberg has a &lt;a href=&quot;http://secretsofconsulting.blogspot.com/2007/03/innocent-but-dangerous-language.html&quot;&gt;post&lt;/a&gt;, where he writes about how “surgery” may a better term for what many software teams do than “maintenance”. It gives a better sense of the risks involved and why quick solutions implemented by juniors may not be the best approach.&lt;/p&gt;

&lt;p&gt;Medical joke from when I shared a house with a medic. “How can you spot the laparoscopists at the pub?”, “They drink their beer through a straw.”&lt;/p&gt;</description>
	<pubDate>Sun, 18 May 2008 10:49:24 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Links for 2008-05-17 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-17</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/292657757/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.onlamp.com/pub/a/onlamp/2008/05/13/creating-applications-with-amazon-ec2-and-s3.html&quot;&gt;ONLamp.com -- Creating Applications with Amazon EC2 and S3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://cworth.org/hgbook-git/tour/&quot;&gt;A tour of git: the basics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/292657757&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Sun, 18 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Steve Freeman</title>
	<guid isPermaLink="true">http://www.m3p.co.uk/blog/2008/05/17/166/</guid>
	<link>http://www.m3p.co.uk/blog/2008/05/17/166/</link>
	<description>&lt;p&gt;Robert X. Cringley has another &lt;a href=&quot;http://www.pbs.org/cringely/pulpit/2008/pulpit_20080516_004925.html&quot;&gt;entertaining rant&lt;/a&gt; about whatever turned up this week. Two quotations:&lt;/p&gt;

&lt;p&gt;First, while ranting about the IT research consultancies.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;There are themes at Gartner and its competitors — ideas that are presented on an almost seasonal basis like adding fins to change a 1956 Chrysler New Yorker into a 1957 Chrysler New Yorker. Two such themes that are popular with such consultants right now are offshoring/outsourcing and getting rid of legacy applications to gain agility, whatever that is.&lt;/p&gt;

&lt;p&gt;Outsourcing, while a very popular recommendation to improve &lt;span class=&quot;caps&quot;&gt;IT, &lt;/span&gt;is treating the symptom and not the problem. The problem is IT applications require lots of ongoing maintenance and that costs labor, meaning &lt;span class=&quot;caps&quot;&gt;REAL MONEY.&lt;/span&gt; Rather than make applications more reliable and reduce problems, IT managers seem to prefer shopping for cheaper labor. The problems are still there. It is cheaper to fix them with offshoring and outsourcing, true, but it often takes longer. If the end users — the people who actually make &lt;span class=&quot;caps&quot;&gt;MONEY &lt;/span&gt;for the company (IT doesn’t, Lord knows) — are unable to work from time to time, this is okay because IT is spending less money.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Second, on the acquisition of &lt;span class=&quot;caps&quot;&gt;EDS &lt;/span&gt;by HP&lt;/p&gt;

&lt;blockquote&gt;I wonder what would happen to an outfit like HP Services if the company just decided to forget about acquisitions and simply invest $12+ billion in their current operation? Heck, half the people working right now in HP Services probably worked at some point in their careers for &lt;span class=&quot;caps&quot;&gt;EDS &lt;/span&gt;(or &lt;span class=&quot;caps&quot;&gt;IBM&lt;/span&gt;). What &lt;span class=&quot;caps&quot;&gt;DNA &lt;/span&gt;is HP acquiring here that they don’t have already?&lt;/blockquote&gt;</description>
	<pubDate>Sat, 17 May 2008 10:23:12 +0000</pubDate>
</item>
<item>
	<title>Mike Melia: growth@gigantiq</title>
	<guid isPermaLink="true">http://www.gigantiq.com/blogs/mike/?p=11</guid>
	<link>http://www.gigantiq.com/blogs/mike/?p=11</link>
	<description>&lt;p&gt;Over the past couple of months we’ve had the good fortune to welcome James Pott and Cory Prowse to Gigantiq. Both are fantastic additions and have already been busy with ideas to develop the company.&lt;br&gt;&lt;/br&gt;
At the moment, I’m lucky enough to be on the same team as James and Cory and I’m really enjoying the experience. Their passion for software development has certainly reinvigorated me; I’ve been on a podcast mega-marathon this week in an effort to keep up with some of their technology discussions.&lt;/p&gt;
&lt;p&gt;It’s quite amusing that the group of us at the same client are popping to the gym next door on a regular basis. It may even realise Andy’s bizarre dream of having a team of Gigantic Software Developers at Gigantiq. I’ll have to order a few more of those 5XL corporate polos. &lt;img src=&quot;http://www.gigantiq.com/blogs/mike/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot;&gt;&lt;/img&gt; &lt;/p&gt;</description>
	<pubDate>Sat, 17 May 2008 05:48:25 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Links for 2008-05-16 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-16</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/292095652/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://thoughtbot.com/projects/shoulda&quot;&gt;thoughtbot: Shoulda testing plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.powerset.com/&quot;&gt;Powerset&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Nice, semantics based wikipedia search engine.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.potionfactory.com/blog/2008/05/15/i-love-stars&quot;&gt;I Love Stars | Potion Factory&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Very nice, low friction iTunes ratings apps.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://codebetter.com/blogs/matthew.podwysocki/archive/2008/05/15/concurrency-with-mpi-in-net.aspx&quot;&gt;Concurrency with MPI in .NET - Matthew Podwysocki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://balthamos.awardspace.com/downloads.php&quot;&gt;Alloc Init | Downloads&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Nice iTunes helper app for laptops&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/292095652&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Sat, 17 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Twitter</title>
	<guid isPermaLink="false">tag:typepad.com,2003:post-49985544</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/292059338/twitter.html</link>
	<description>&lt;p&gt;A little over a &lt;a href=&quot;http://blog.1530technologies.com/2007/02/playing_with_tw.html&quot; title=&quot;Twitter&quot;&gt;year ago&lt;/a&gt;, I decided to start using &lt;a href=&quot;http://twitter.com/&quot;&gt;twitter&lt;/a&gt; to see what all the fuss was about. I quickly bagged it because I just did not see the benefit of subscribing to the itty-bitty thoughts of a large group of people and I quickly was forgetting to tweet myself. The whole thing stagnated.&lt;/p&gt;
&lt;p&gt;However, about a week ago, I decided that maybe it might be time to give twitter another shot. I did so for one particular reason. While I still don't think that &lt;a href=&quot;http://twitter.com/&quot;&gt;twitter&lt;/a&gt; is compelling as a desktop app, what is making me come back is the mobile and local component. A &lt;a href=&quot;http://twitter.com/&quot;&gt;twitter&lt;/a&gt; client on my iPod Touch could be a compelling view into what's happening locally, either here in Chicago or wherever I am. So, I reactivated my account and began to set things up on my laptop / desktop. I started by downloading my old favorite client, &lt;a href=&quot;http://iconfactory.com/software/twitterrific&quot; title=&quot;Twitterrific&quot;&gt;Twitterrific&lt;/a&gt; and setting it up on my computers.&lt;/p&gt;
&lt;p&gt;That was three days ago. Below are photos documenting my entire &lt;a href=&quot;http://twitter.com/&quot;&gt;twitter&lt;/a&gt; experience over the past three days:&lt;/p&gt;
&lt;p&gt;First up, shots of my OS X client Twitterrific:&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/br&gt;
&lt;img src=&quot;http://blog.1530technologies.com/Picture 1.jpg&quot; alt=&quot;Picture 1.png&quot; height=&quot;351&quot; width=&quot;286&quot;&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/br&gt;
&lt;img src=&quot;http://blog.1530technologies.com/Picture 2.jpg&quot; alt=&quot;Picture 2.png&quot; height=&quot;347&quot; width=&quot;279&quot;&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p&gt;Those photos have been constant. &quot;No problem&quot; I say, i'll just use the site for a little bit. Well this is an example of what i've gotten from their site:&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/br&gt;
&lt;img src=&quot;http://blog.1530technologies.com/Server.jpg&quot; alt=&quot;Server.png&quot; height=&quot;398&quot; width=&quot;480&quot;&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p&gt;Now, I don't care what technology they're using or how many users they have, this is just a joke. You're sending small pieces of text across the internet. This shouldn't be this hard right? I mean how many IM services stay up with no problems? Granted, this is a little different, but not my much. We're talking YEARS that twitter has been out and they're still having these problems.&lt;/p&gt;
&lt;p&gt;Geez....&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?a=1sWrXH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?i=1sWrXH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/292059338&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Sat, 17 May 2008 03:33:43 +0000</pubDate>
</item>
<item>
	<title>Mike Melia: AmbiguousTableNameException with DBUnit</title>
	<guid isPermaLink="true">http://www.gigantiq.com/blogs/mike/?p=10</guid>
	<link>http://www.gigantiq.com/blogs/mike/?p=10</link>
	<description>&lt;p&gt;We had a problem this week whilst using &lt;a href=&quot;http://www.dbunit.org/&quot;&gt;DBUnit&lt;/a&gt; to set up some test data. A quick google didn’t really reveal much so I’ve included a (snipped) stacktrace to help anyone who also encounters this problem:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br&gt;&lt;/br&gt;
Caused by: org.dbunit.database.AmbiguousTableNameException:&lt;br&gt;&lt;/br&gt;
BIN$S/1W2ofvNM7gQAB/AQEkDA==$0&lt;br&gt;&lt;/br&gt;
	at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:140)&lt;br&gt;&lt;/br&gt;
	at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:186)&lt;br&gt;&lt;/br&gt;
	at org.dbunit.operation.AbstractOperation.getOperationMetaData(AbstractOperation.java:59)&lt;br&gt;&lt;/br&gt;
	at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:130)&lt;br&gt;&lt;/br&gt;
	at ...&lt;br&gt;&lt;/br&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Our quick fix (based on a hunch) was to ensure that the database user did not have DBA privileges. We’re using Oracle 10g XE and this privilege change was easy to make using Oracle APEX. As soon as we’d changed the user privileges, the exception went away.&lt;/p&gt;
&lt;p&gt;Now that the weekend is here I have a little more time to investigate the cause of the problem and the (potentially) correct fix. &lt;/p&gt;
&lt;p&gt;It looks as though this problem is caused by the Oracle’s use of a recycle bin to hold deleted objects. The objects in this recycle bin are still accessible as schema MetaData if you issue a &lt;code&gt;jdbcConnection.getMetaData().getTables(..)&lt;/code&gt;.&lt;br&gt;&lt;/br&gt;
As DBUnit uses the schema MetaData to build up a map of tables in the schema, the duplicates in the recycle bin will result in the AmbiguousTableNameException.&lt;/p&gt;
&lt;p&gt;Fortunately, DBUnit offers a means to ignore these recycled tables. I haven’t tried it yet (I’ll give it a go on Monday) but it looks as though you can set a property &lt;code&gt;DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES&lt;/code&gt; on the connection and all should be fixed.&lt;/p&gt;
&lt;p&gt;I’ll update the post on Monday to let you know if it worked.&lt;/p&gt;</description>
	<pubDate>Sat, 17 May 2008 01:43:09 +0000</pubDate>
</item>
<item>
	<title>Chris Matts: Feature Injection</title>
	<guid isPermaLink="true">http://abc.truemesh.com/archives/000735.html</guid>
	<link>http://abc.truemesh.com/archives/000735.html</link>
	<description>I met up with Romilly Cockling and Liz Keogh at XTC this week. Romilly encouraged me to write something on Feature Injection. When I got home, I remembered that I had already written most of the Feature Injection stuff down...</description>
	<pubDate>Fri, 16 May 2008 10:22:04 +0000</pubDate>
</item>
<item>
	<title>Alex Ruiz: FEST-Swing got a really cool NetBeans plug-in!</title>
	<guid isPermaLink="true">http://www.jroller.com/alexRuiz/entry/fest_swing_got_a_really</guid>
	<link>http://www.jroller.com/alexRuiz/entry/fest_swing_got_a_really</link>
	<description>&lt;p&gt;
Not long ago, &lt;a href=&quot;http://blogs.sun.com/geertjan/&quot; target=&quot;_blank&quot;&gt;Geertjan Wielenga&lt;/a&gt; wrote the article &quot;&lt;a href=&quot;http://java.dzone.com/news/festive-functional-tests-swing&quot; target=&quot;_blank&quot;&gt;Festive Functional Tests for Swing GUIs&lt;/a&gt;.&quot; In the article, Geertjan describes the features that &lt;a href=&quot;http://fest.easytesting.org/swing&quot; target=&quot;_blank&quot;&gt;FEST-Swing&lt;/a&gt; provides, with examples showing how easy it is to test Swing GUIs with FEST-Swing. 
&lt;/p&gt;
&lt;p&gt;
On top of that, Geertjan wrote a &lt;a href=&quot;http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=7964&quot; target=&quot;_blank&quot;&gt;NetBeans plug-in for FEST-Swing&lt;/a&gt;! The plug-in makes creation of GUI tests with FEST-Swing very easy. It provides the latest FEST-Swing libraries, Javadoc documentation and a test template. Installing the plug-in is very easy (Geertjan provided detailed instructions on how to install and use the FEST-Swing plug-in.) I tried it with &lt;a href=&quot;http://www.netbeans.org/index.html&quot; target=&quot;_blank&quot;&gt;NetBeans 6.1&lt;/a&gt; and I can say that both, the plug-in and the IDE, are really impressive. Here is an image taken from the plug-in page:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://www.jroller.com/alexRuiz/resource/fest-cc.png&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/center&gt;

&lt;p&gt;
&lt;strong&gt;Note:&lt;/strong&gt; for some reason, the link to the plug-in needs to be clicked twice, the first time goes to the NetBeans plug-in main web page.
&lt;/p&gt;
&lt;p&gt;
We had the pleasure and honor to meet Geertjan at JavaOne. He is such a cool, nice and humble guy!
&lt;/p&gt;
&lt;p&gt;
Geertjan, we don't have enough words to thank you! &lt;img src=&quot;http://jroller.com/images/smileys/smile.gif&quot; border=&quot;0&quot;&gt;&lt;/img&gt;
&lt;/p&gt;</description>
	<pubDate>Fri, 16 May 2008 06:13:47 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Links for 2008-05-15 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/www_build_doctor_com#2008-05-15</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/291413444/www_build_doctor_com</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://thediscoblog.com/2008/05/15/gant-with-hudson-in-5-steps/&quot;&gt;The Disco Blog » Blog Archive » Gant with Hudson in 5 steps&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
So now I need to reserch Phing and Gant.  Probably Gant first as there's no freaking XML.&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Fri, 16 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Mike Melia: Read my mind not my code</title>
	<guid isPermaLink="true">http://www.gigantiq.com/blogs/mike/?p=9</guid>
	<link>http://www.gigantiq.com/blogs/mike/?p=9</link>
	<description>&lt;p&gt;I was pairing with James Pott the other day (welcome to Gigantiq, James) when we had an interesting mini-squabble.&lt;/p&gt;
&lt;p&gt;We were writing a test to state that we expected a class at a layer boundary to catch a SQLException and wrap it in a LayerException.&lt;br&gt;&lt;/br&gt;
I was at the keyboard and started typing something like this&lt;br&gt;&lt;/br&gt;
&lt;code&gt;&lt;br&gt;&lt;/br&gt;
SQLMapClient sqlMapclient = EasyMock.creatNiceMock(SQLMapClient.class);&lt;br&gt;&lt;/br&gt;
EasyMock.expect(sqlMapClient.blah()).andThrow(new SQLException(&quot;bad things happened&quot;));&lt;br&gt;&lt;/br&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;At this point James stopped me and the conversation went something like this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;James&lt;/strong&gt;: “we should be using a stub. We are not stating that we expect the SQLMapClient to be called; we are only stating that we expect the exception to be wrapped”.&lt;br&gt;&lt;/br&gt;
&lt;strong&gt;Mike&lt;/strong&gt;: “I’m not stating any expectations on the SQLMapClient being called” (at this point I may have crossed my arms).&lt;br&gt;&lt;/br&gt;
&lt;strong&gt;James&lt;/strong&gt;: “but you’re writing a Mock”&lt;br&gt;&lt;/br&gt;
&lt;strong&gt;Mike&lt;/strong&gt;: “no, I’m writing a stub” (my eyebrows had now become knitted)&lt;br&gt;&lt;/br&gt;
&lt;strong&gt;James&lt;/strong&gt;: “look at what you just typed”&lt;br&gt;&lt;/br&gt;
&lt;strong&gt;Mike&lt;/strong&gt;: “I used EasyMock to create a stub”&lt;br&gt;&lt;/br&gt;
&lt;strong&gt;James&lt;/strong&gt;: “look at what you just typed”&lt;br&gt;&lt;/br&gt;
&lt;strong&gt;Mike&lt;/strong&gt;: “EasyMock.expect… oh yeah. That should be EasyStub.when(..) shouldn’t it?”&lt;/p&gt;
&lt;p&gt;I’ve spent so long enjoying that I could use EasyMock to knock up a quick and easy Stub that I stopped paying attention to how it reads. If I am using a Stub then it should be clear that I am using a Stub.&lt;/p&gt;</description>
	<pubDate>Fri, 16 May 2008 02:04:01 +0000</pubDate>
</item>
<item>
	<title>Jonathan Rasmusson: The Toyota Way - Long-term philosophy</title>
	<guid isPermaLink="false">http://rasmusson.wordpress.com/?p=61</guid>
	<link>http://rasmusson.wordpress.com/2008/04/27/the-toyota-way-long-term-philosophy/</link>
	<description>Section I: Long-Term Philosophy
Principle 1. Base your management decisions on a long-term philosophy, even at the expense of short-term financial goals.
■ Have a philosophical sense of purpose that supersedes any short-term decision making. Work, grow, and align the whole organization toward a common purpose that is bigger than making money. Understand your place in the [...]</description>
	<pubDate>Thu, 15 May 2008 13:16:45 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Links for 2008-05-14 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/www_build_doctor_com#2008-05-14</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/290672507/www_build_doctor_com</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://redsolo.blogspot.com/2008/04/guide-to-building-net-projects-using.html&quot;&gt;Guide to building .NET projects using Hudson&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
It's all the rage to demonstrate that your Java CI server can build .NET projects.  All a good thing.  CruiseControl.NET was written because someone refused to have the java version installed on their estate.  Not all all insecure.&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Thu, 15 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Joe O'Brien: Teaching with Jim Again</title>
	<guid isPermaLink="false">tag:objo.com,2008-05-15:76</guid>
	<link>http://objo.com/2008/5/15/teaching-with-jim-again</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://objo.com/assets/2007/9/5/studio-samall.jpg&quot; alt=&quot;&quot;&gt;&lt;/img&gt;&lt;/p&gt;


	&lt;p&gt;I’m getting to teach the &lt;a href=&quot;http://pragmaticstudio.com/testing-rails/&quot;&gt;Test Driven Development with Rails&lt;/a&gt; studio with &lt;a href=&quot;http://onestepback.org&quot;&gt;JIm&lt;/a&gt; again this month and next.  We are doing two, one private studio in Los Angeles and then another public studio in Denver June.  We still have seats left for the June studio, so come on out and join us.&lt;/p&gt;


	&lt;p&gt;Teaching with Jim is awesome.  I’ve never had someone infect me with positive energy as much as he has.  We’ve tweaked some of the material recently (as I reluctantly switch over to git) and are very excited about it.  One of the best parts of this studio when we did it in Columbus was the discussion.  I’ve never had more interaction with an audience as I did in Denver and I’m hoping it gets repeated.  I love nothing more than getting on a soap box about testing and Ruby :-).&lt;/p&gt;


	&lt;p&gt;Come on out and join us, it’s going to be a good time.&lt;/p&gt;</description>
	<pubDate>Thu, 15 May 2008 02:57:06 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Unclean.  (does your CI server have an IDE installed on it?)</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6500374844252313496.post-7952133083453237827</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/290415577/unclean-does-your-ci-server-have-ide.html</link>
	<description>&lt;a href=&quot;http://bp1.blogger.com/_-rlZcQ-7nAM/SCtF0NXoo5I/AAAAAAAAAEI/IePBdGVLp3s/s1600-h/291408024_26fbf43fa3_o.png&quot;&gt;&lt;img src=&quot;http://bp1.blogger.com/_-rlZcQ-7nAM/SCtF0NXoo5I/AAAAAAAAAEI/IePBdGVLp3s/s400/291408024_26fbf43fa3_o.png&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5200326957973676946&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;div style=&quot;text-align: center;&quot;&gt;(image taken from &lt;a href=&quot;http://flickr.com/photos/subflux/archives/date-posted/2006/11/07/&quot;&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;SubFlux's photostream&lt;/span&gt;&lt;/a&gt;)&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Your build shouldn't depend on an IDE.  I've been saying that for a long time.  It doesn't matter that all the developers use the same IDE on your project.  At least in the Java world that I have inhabited for most of the past 8 years, you absolutely should not need an IDE installed on your build server.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Yesterday I installed an IDE on the build server.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://blog.goinsane.co.uk/2008/01/28/TeamCityOnACleanBuildCIServer.aspx&quot;&gt;Casey Charlton&lt;/a&gt; and I both agree that in an ideal world, there's no connection between the build and the IDE.  I've been trying to find a reference to the &quot;thou shalt not install an IDE on the damn build server&quot; rule.  I've found a pretty authoritative quote from &lt;a href=&quot;http://www.amazon.com/Continuous-Integration-Improving-Addison-Wesley-Signature/dp/0321336380&quot;&gt;Paul Duvall's book&lt;/a&gt;:&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;blockquote&gt;You should avoid coupling your build scripts with an IDE.  An IDE may be dependent on a build script, but &lt;span style=&quot;font-style: italic;&quot;&gt;a build script shouldn't be dependent on your IDE&lt;/span&gt;.  ....  Creating a seperate build script is important for two reasons:&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;1. Each developer may be using a different IDE, and it can be difficult to to account for configuration differences in each IDE.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;2. A CI server must execute an automated build without human intervention.  Therefore, the same automated build script used by developers can and should be used by the CI server...&lt;/blockquote&gt;As usual, Paul is bang on.  But my issue at the moment is Visual Studio.  Not that I can't write code in it (I haven't really tried), but the fact that it's actually more than an IDE in the traditional sense.  It's also the container for the testing framework.  It's almost the entire stack.  It comes with Crystal Reports (which I'm happy to say I didn't install), and other stacks of middleware.  Which you need to build your app.  Ever tried to build a VSTO app?  You need Visual Studio.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;In theory, you don't need it, because the build tool for Microsoft Products (MSBuild) comes with the .NET framework.  But it seems like in practice, you do.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;So I installed it.  And the build works, without me fiddling with the GAC.  I can live with that. What works for you?&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=WyBH8H&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=WyBH8H&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=KsAJHh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=KsAJHh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=gTn7gh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=gTn7gh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=e7Vtfh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=e7Vtfh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
	<pubDate>Wed, 14 May 2008 20:08:20 +0000</pubDate>
	<author>noreply@blogger.com (Julian)</author>
</item>
<item>
	<title>Paul Holser: Jaggregate with BGGA closures</title>
	<guid isPermaLink="true">http://cleveralias.blogs.com/thought_spearmints/2008/05/jaggregate-with.html</guid>
	<link>http://cleveralias.blogs.com/thought_spearmints/2008/05/jaggregate-with.html</link>
	<description>&lt;p&gt;The latest snapshots of &lt;a href=&quot;http://jaggregate.sourceforge.net&quot;&gt;Jaggregate&lt;/a&gt; seem to work well with &lt;a href=&quot;http://javac.info&quot;&gt;BGGA closures&lt;/a&gt; converted to functors and predicates. I had to extract one-method interfaces from the abstract *Function and *Predicate classes (the interfaces are &quot;*Functor&quot; and &quot;*Condition&quot;) -- they basically correspond to the single abstract evaluate() and matches() methods -- and to change method signatures to accept the interface types rather than the abstract class types. This was to allow closure conversion to occur -- if the parameters remained of types corresponding to abstract classes, the conversions would be rejected.&lt;/p&gt;

&lt;p&gt;The one tweak needed was that initially, the BGGA prototype (dated Apr 27 2008) was rejecting calls such as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
    Interval.fromTo(1, 4).forEachDo(System.out#println(int));
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;where the closure (here, a method reference) passed as a UnaryFunctor had return type &lt;code&gt;void&lt;/code&gt;, and the signature of &lt;code&gt;forEachDo()&lt;/code&gt; was:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
    void forEachDo(UnaryFunctor&amp;lt;? super Integer, ?&amp;gt;);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If I changed the signature to:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
    &amp;lt;R&amp;gt; void forEachDo(UnaryFunctor&amp;lt;? super Integer, ? extends R&amp;gt;);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;things were fine, but I wasn't sure why the change would be necessary.&lt;/p&gt;

&lt;p&gt;I mailed &lt;a href=&quot;http://gafter.blogspot.com&quot;&gt;Neal Gafter&lt;/a&gt; about this, and seemingly within hours he'd fixed the issue and released a new cut of the prototype (dated May 11 2008). Many thanks to Neal for the quick turnaround and for fighting through my silly questions. :)&lt;/p&gt;</description>
	<pubDate>Wed, 14 May 2008 14:46:31 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Links for 2008-05-13 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/www_build_doctor_com#2008-05-13</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/289929855/www_build_doctor_com</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/rjacobs/archive/2008/05/12/living-through-the-change.aspx?CommentPosted=true#commentmessage&quot;&gt;Ron Jacobs : Living through &quot;The Change&quot;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Dealing with change.  Planning for it, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://channel9.msdn.com/wiki/default.aspx/MSBuild.EquivalentTasks&quot;&gt;Channel9 Wiki: EquivalentTasks&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
nant vs. msbuild:&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://msbuildtasks.tigris.org/&quot;&gt;MSBuild Community Tasks&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
The MSBuild  tasks that Microsoft didn't make.&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Wed, 14 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Links for 2008-05-13 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-13</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/289929056/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://tryingthisagain.com/2008/05/07/building-an-f-powered-indexing-system/&quot;&gt;Building an F# powered indexing system &amp;lt; Trying This Again&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jungerl.sourceforge.net/&quot;&gt;Jungerl - a dense and chaotic Jungle of Erlang code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jungerl.cvs.sourceforge.net/jungerl/jungerl/lib/otp.net/&quot;&gt;SourceForge.net Repository - [jungerl] Index of /jungerl/lib/otp.net&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
.NET &amp;amp; Erlang integration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://weblogs.asp.net/nleghari/archive/2008/01/08/integrating-net-and-erlang-using-otp-net.aspx&quot;&gt;Integrating .NET and Erlang using OTP.NET - Nauman Leghari's Blog&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Howto integrate .NET &amp;amp; Erlang.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tryingthisagain.com/2008/05/12/building-an-f-powered-indexing-system-part-2/&quot;&gt;Building an F# powered indexing system (part 2) &amp;lt; Trying This Again&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.37signals.com/svn/posts/1022-you-dont-create-a-culture&quot;&gt;You don't create a culture - (37signals)&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
So many don't 'get' this.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://citeseer.ist.psu.edu/giacomo96tbox.html&quot;&gt;TBox and ABox Reasoning in Expressive Description Logics - De Giacomo, Lenzerini (ResearchIndex)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/289929056&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 14 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Greg Luck: Ehcache-1.5.0-beta1 Released</title>
	<guid isPermaLink="false">tag:gregluck.com,2008:/blog/1.150</guid>
	<link>http://gregluck.com/blog/archives/2008/05/ehcache150beta1.html</link>
	<description>&lt;p&gt;I have released a new version of Ehcache,  1.5.0-beta1, which  provides a host of new features and a few bug fixes. Some of the features are up to a year old, so this pretty large release is a chance to clear the decks ahead of some exciting new work coming in 1.6, such as the ehcache Cache Server.&lt;/p&gt;

&lt;p&gt;Please dive into this version and let me know if you find any issues. I am hoping the tyres will be kicked by enough people to do a final release in 3-4 weeks' time.&lt;/p&gt;

&lt;p&gt;New Features&lt;br&gt;&lt;/br&gt;
Added JGroups Implementation. Thanks to Pierre Monestie for the patch(es) for this. Though new to the core distribution JGroups replication has been in production use in a large cluster for the last year. This does not create a dependency on JGroups unless you want to use this replicator. That will be made clearer when it is moved to a separate module before final release.&lt;br&gt;&lt;/br&gt;
CachingFilter performance improvements,&lt;br&gt;&lt;/br&gt;
Constructs performance improvements&lt;br&gt;&lt;/br&gt;
added loadAll() to the loader implementation to enable preload without specifying keys.&lt;br&gt;&lt;/br&gt;
diskPersistent now can be used with caches that use only MemoryStore in normal use but want to persist to disk&lt;br&gt;&lt;/br&gt;
DiskStores are now optional. The element is now non-mandatory. This will simplify configurations particularly where multiple CacheManagers are being used. If one or more caches requires a DiskStore, and none is configured, java.io.tmpdir will be used and a warning message will be logged to encourage explicity configuration of the diskStore path.&lt;br&gt;&lt;/br&gt;
The default RMI based cache replication can now configure a RemoteObject port so that it can be easily configured to work through firewalls. This is done by adding a new property remoteListenerPort to RMICacheManagerPeerListenerFactory to enable it to be specified.&lt;br&gt;&lt;/br&gt;
Added a new system property expansion token &quot;ehcache.disk.store.dir&quot; to DiskStore configuration which can be used to specify the DiskStore directory on the command line or in an environment variable.&lt;br&gt;&lt;/br&gt;
    e.g. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ...&lt;br&gt;&lt;/br&gt;
Added the ability to specify system property tokens using $tokenname in ehcache.xml which are then replaced when the configuration is loaded.&lt;br&gt;&lt;/br&gt;
Updated the remote debugger with enhanced reporting and better documentation (See Logging page in the documentation).&lt;br&gt;&lt;/br&gt;
The new version prints a list of caches with replication configured, prints notifications as they happen, and periodically prints the cache name, size and total events received.&lt;/p&gt;

&lt;p&gt;Summary of Bug Fixes&lt;br&gt;&lt;/br&gt;
CachingFilter bug fixes for various rare edge conditions&lt;br&gt;&lt;/br&gt;
Major speed up to shutdown process when diskPersistent is not being used&lt;br&gt;&lt;/br&gt;
Fixed various shutdown exception when both Hibernate and Spring both try to destroy caches&lt;/p&gt;</description>
	<pubDate>Wed, 14 May 2008 04:05:03 +0000</pubDate>
	<author>gluck@gregluck.com (gluck)</author>
</item>
<item>
	<title>Julian Simpson: Links for 2008-05-12 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/www_build_doctor_com#2008-05-12</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/289187937/www_build_doctor_com</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.thecrumb.com/wiki/Ant&quot;&gt;ant [thecrumb wiki]&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Jim Priest's collection of Ant resources, including his own blog posts.&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Tue, 13 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Links for 2008-05-12 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-12</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/289184508/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://thinkexist.com/quotation/nothing_in_this_world_can_take_the_place_of/201002.html&quot;&gt;Calvin Coolidge quotes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.glennjones.net/Post/836/Microformatstest-suiteconcept.htm&quot;&gt;Microformats test-suite concept&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Interesting.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sonivis.org/&quot;&gt;Home&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
KM Tools&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.crayonroom.com/moody&quot;&gt;Moody - Mac OS X / Windows app to mood tag your music in iTunes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://esw.w3.org/topic/Rdb2RdfXG/StateOfTheArt&quot;&gt;Rdb2RdfXG/StateOfTheArt - ESW Wiki&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
State of RDF &amp;lt;-&amp;gt; Relational mapping.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.langdale.com.au/GraphPath/&quot;&gt;GraphPath Language&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Graphing processing language&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sw.joanneum.at/scovo/schema.html&quot;&gt;Describing statistical data on the Web - The Statistical Core Vocabulary (scovo)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/photos/factoryjoe/2464790975/&quot;&gt;Twitterverse Quartz Composer on Flickr - Photo Sharing!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dotnethitman.spaces.live.com/blog/cns!E149A8B1E1C25B14!131.entry&quot;&gt;.NET HITMAN: Exception Handling - Do's and Dont's&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Nice list of exception best practices.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smashingmagazine.com/2008/04/24/5-more-principles-of-effective-web-design/&quot;&gt;Five More Principles Of Effective Web Design | How-To | Smashing Magazine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smashingmagazine.com/2008/01/31/10-principles-of-effective-web-design/&quot;&gt;10 Principles Of Effective Web Design | How-To | Smashing Magazine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://preseason.stassen.com/&quot;&gt;College Football Preseason Magazines&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
TONS of machine ready stats.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.xml.com/pub/a/2008/05/07/under-the-hood-oracle-berkeley-db-xml.html&quot;&gt;XML.com: Under the Hood: Oracle Berkeley DB XML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.sontek.net/2008/05/11/python-with-a-modular-ide-vim/&quot;&gt;sontek ( John M. Anderson ) » Python with a modular IDE (Vim)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/289184508&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 13 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Paul Holser: Props for JOptSimple</title>
	<guid isPermaLink="true">http://cleveralias.blogs.com/thought_spearmints/2008/05/props-for-jopts.html</guid>
	<link>http://cleveralias.blogs.com/thought_spearmints/2008/05/props-for-jopts.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://novelang.blogspot.com/2008/05/command-line-arguments.html&quot;&gt;Yay&lt;/a&gt;!&lt;/p&gt;</description>
	<pubDate>Mon, 12 May 2008 23:21:38 +0000</pubDate>
</item>
<item>
	<title>Paul Holser: JavaOne 2008, Day 4</title>
	<guid isPermaLink="true">http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008--2.html</guid>
	<link>http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008--2.html</link>
	<description>&lt;p&gt;&quot;The Layperson's Guide to Building a Better User Experience&quot; -- in short, you are a user experience designer; take interaction design, user experience, and user personae seriously; and read up.&lt;/p&gt;

&lt;p&gt;&quot;Semantic Web for the Working Ontologist&quot; -- Interesting discussion from the chief scientist of TopQuadrant.  Interesting mention of D2RQ, a library to expose relational stores as stores of RDF triples; though to hear Dean Allemang tell it, there isn't much of a community forming around D2RQ.&lt;/p&gt;

&lt;p&gt;Neat presentation from two Jython commiters about the challenges involved in compiling Jython code down to JVM bytecode.&lt;/p&gt;

&lt;p&gt;Two Selenium cognoscenti, Dan Fabulich and Patrick Lightbody, gave a decent account of Selenium for web testing.  Apparently the XPath support library that Selenium uses has been tuned quite a bit and should be faster in the new 1.0 beta.  Still holding out hope that it can handle non-trivial (and even some trivial) XPath expressions on IE.&lt;/p&gt;</description>
	<pubDate>Mon, 12 May 2008 23:19:36 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: The Ant Best Practices Series</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6500374844252313496.post-9093523526769747588</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/263366059/ant-best-practices-series.html</link>
	<description>&lt;a href=&quot;http://bp0.blogger.com/_-rlZcQ-7nAM/R_Pzf4PocoI/AAAAAAAAADA/fhvzKclQbyM/s1600-h/16449595_361f189688.jpg&quot;&gt;&lt;img src=&quot;http://bp0.blogger.com/_-rlZcQ-7nAM/R_Pzf4PocoI/AAAAAAAAADA/fhvzKclQbyM/s320/16449595_361f189688.jpg&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5184755325033017986&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;(Photo taken from &lt;a href=&quot;http://flickr.com/photos/33mhz/&quot;&gt;33mhz's photostream&lt;/a&gt;)&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;br&gt;&lt;/br&gt;In 2003, Eric M. Burke published an article at &lt;a href=&quot;http://www.onjava.com/&quot;&gt;OnJava&lt;/a&gt; called &lt;a href=&quot;http://www.onjava.com/pub/a/onjava/2003/12/17/ant_bestpractices.html&quot;&gt;Top 15 Ant Best Practices&lt;/a&gt;. Are the practices still relevant?  What has changed in the last 4 years?  In this series I'll be reviewing each one and trying to find out.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/03/ant-best-practices-adopt-consistent.html&quot;&gt;1 of 15: Adopt consistent style&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/02/put-build-file-at-root-of-your-project.html&quot;&gt;2 of 15: Put the build file at the root of your project&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/03/ant-best-practices-prefer-single.html&quot;&gt;3 of 15: Prefer a single buildfile&lt;/a&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/03/ant-best-practices-provide-good-help.html&quot;&gt;&lt;br&gt;&lt;/br&gt;4 of 15: Provide good help&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/04/ant-best-practices-provide-clean-target.html&quot;&gt;5 of 15: Provide a clean target&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/04/ant-best-practices-manage-dependencies.html&quot;&gt;6 of 15: Manage dependencies with Ant&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/05/ant-best-practices-define-and-reuse.html&quot;&gt;7 of 15: Define and reuse paths&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.build-doctor.com/2008/05/ant-best-practices-define-proper-target.html&quot;&gt;8 of 15: Define Proper Target Dependencies&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;This page is updated every time there's a new article.&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=yJnSm4G&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=yJnSm4G&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=HoGA95g&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=HoGA95g&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=YCm68ng&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=YCm68ng&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=zVrr30g&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=zVrr30g&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
	<pubDate>Mon, 12 May 2008 22:12:06 +0000</pubDate>
	<author>noreply@blogger.com (Julian)</author>
</item>
<item>
	<title>Julian Simpson: Ant Best Practices: Define Proper Target Dependencies</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6500374844252313496.post-535294612067962429</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/288993275/ant-best-practices-define-proper-target.html</link>
	<description>&lt;a href=&quot;http://bp0.blogger.com/_-rlZcQ-7nAM/SCi_WtXoo4I/AAAAAAAAAEA/cdu6IrGdfDA/s1600-h/280662707_5d335ac808.jpg&quot;&gt;&lt;img src=&quot;http://bp0.blogger.com/_-rlZcQ-7nAM/SCi_WtXoo4I/AAAAAAAAAEA/cdu6IrGdfDA/s320/280662707_5d335ac808.jpg&quot; alt=&quot;&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5199616166655992706&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;(Image taken from &lt;a href=&quot;http://flickr.com/photos/nicksieger/&quot;&gt;Nick Sieger's Photostream&lt;/a&gt;)&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;/div&gt;Wondering what this post is about?  Have a look &lt;a href=&quot;http://www.build-doctor.com/2008/04/ant-best-practices-series.html&quot;&gt;here&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Last time I wrote, it was about &lt;a href=&quot;http://www.build-doctor.com/2008/05/ant-best-practices-define-and-reuse.html&quot;&gt;reusing paths&lt;/a&gt;.  Tonight, it's about the dependency graph. My &lt;a href=&quot;http://www.build-doctor.com/2008/02/antcall-is-evil.html&quot;&gt;[N]Antcall is evil&lt;/a&gt; post goes into some detail about dependency graphs.  Let's just agree here that Ant targets tend to accumulate dependencies.  The point that Eric makes is that the dependency graph (otherwise known as the dependency tree) grows over time as you add targets.  Being a thing that accumulates over time, the graph can get crufty.  That target that was just a short term thing while Bob worked on a refactoring exercise (oh, the irony) is now central to your build.  So from time to time you need to clean the dependencies out, like that burned cheese that melts off of pizzas and sticks to the bottom of the oven.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Some projects seem to run into trouble and throw dependencies out completely.  Umm, good luck with that.  Eric suggests a half-way house approach: a few well known targets that contain dependencies on lesser known but functional targets for the more experienced to use at their own risk.  I can go along with that.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;My last thought is this: your default build should never depend on a &lt;a href=&quot;http://www.build-doctor.com/2008/04/ant-best-practices-provide-clean-target.html&quot;&gt;clean target&lt;/a&gt;.  Leave it to the compiler to have a go at working out what it should do.  If you use Continuous Integration, you can make a little target that depends on clean just for that case.  Your fellow developers will thank you.&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=wU6THH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=wU6THH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=GAfWPh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=GAfWPh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=VvwFGh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=VvwFGh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?a=EqHQYh&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TheBuildDoctor?i=EqHQYh&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
	<pubDate>Mon, 12 May 2008 22:10:00 +0000</pubDate>
	<author>noreply@blogger.com (Julian)</author>
</item>
<item>
	<title>Griffin Caprio: Persistence</title>
	<guid isPermaLink="false">tag:typepad.com,2003:post-49714772</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/288445833/persistence.html</link>
	<description>&lt;p&gt;Whew....I'm going to start off my first blog post in 7.5 months with a quote from Calvin Coolidge:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;“Nothing in this world can take the place of persistence. Talent will not; nothing is more common than unsuccessful people with talent. Genius will not; unrewarded genius is almost a proverb. Education will not; the world is full of educated derelicts. Persistence and determination alone are omnipotent. The slogan &quot;press on&quot; has solved and always will solve the problems of the human race&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It's with that that I explain my absence a bit. About 2 years ago, when I first started working for &lt;a href=&quot;http://corp.trackabout.com/index.aspx&quot; title=&quot;TrackAbout&quot;&gt;TrackAbout&lt;/a&gt;, I made the decision that I would use the opportunity of working from home to the fullest extent. That meant I would go back to school and finish the bachelors that I had been working on for the better part of a decade. My new bosses were on board with the idea, as long as it didn't hamper my ability to deliver at work. After transferring from &lt;a href=&quot;http://www.aurora.edu/&quot; title=&quot;Aurora University&quot;&gt;Aurora University&lt;/a&gt;, where I was double majoring in Mathematics and Computer science, in the spring of 2001, I enrolled at the &lt;a href=&quot;http://tigger.uic.edu/index.html/&quot; title=&quot;University of Illinois at Chicago&quot;&gt;University of Illinois at Chicago&lt;/a&gt; ( UIC ), with a declared major of Statistics and Operations Research. I spent a year at UIC, going to school full time. In the Summer of '02, I decided that I would work full-time instead of going back to school. I made the decision that I wanted experience over education. Over the next few years, I took a class here and there, but nothing major.&lt;/p&gt;
&lt;p&gt;Finally, after leaving Mobitrac and starting at TrackAbout, my decision was made. I was going back. I decided I would get it done as quickly as I could, while still fulfilling my duties at TrackAbout. Since I had ~30 hours left, that meant taking ~10 a semester for 3 semesters. Because of a scheduling goof, I actually didn't enroll in classes until the Spring of '07.&lt;/p&gt;
&lt;p&gt;When explaining my decision to people, they often ask &quot;Why go back?&quot;. After all, I have a good job &amp;amp; a pretty successful career which hasn't been hindered by a lack of a degree. So why do it? Well, I bounced things around in my head until I came to this final conclusion:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the end, the degree was something big in my life that I started and I wanted to finish it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's not to say that every person needs to get a degree to be successful. Far from it. If I never started college, I doubt I would have gone through it all. I know several very successful people who are 10x smarter than some college graduates I know. Life is all about what you make of it and a college degree is just one optional component. In the end, I didn't want to look back at my life and see something I quit at. Especially something so big. That's why I went back.&lt;/p&gt;
&lt;p&gt;Well, after 1.5 years of intense studying, I am happy to say that I am now a &lt;strong&gt;college graduate&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That's where the quote comes in.&lt;/p&gt;
&lt;p&gt;Going back to school while maintaining a normal, 50-hr a week full time job was going to be tough. Unfortunately, around Nov '07, the TrackAbout engineering team lost a team member and our head count went from 4 down to 3. As if that wasn't bad enough, we were staring down the barrel of a Jan 1st deadline for not one but TWO very large, company changing projects. They were:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;The roll out of a new order integration system for one of pilot customers. This is an end-to-end, completely paperless system of placing and delivering orders.&lt;/li&gt;

  &lt;li&gt;The first customer of our brand new &lt;a href=&quot;http://corp.trackabout.com/partners.aspx&quot; title=&quot;TrackAbout TECSYS partnership&quot;&gt;partnership&lt;/a&gt; with &lt;a href=&quot;http://www.tecsys.com/&quot; title=&quot;TECSYS Supply Chain Management &quot;&gt;TECSYS&lt;/a&gt;, a supply chain management software company, was going live on Jan 1st. They were going live with our standard tracking solution, rental bill generation module and the TECSYS EliteSeries Distribution Management Systems (DMS) offering. We, TrackAbout and TECSYS, were completely replacing their exiting system(s). Needless to say, a sizable chunk of our targeted vertical was going to be watching the rollout and we needed to impress.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Whew....there was a lot to do and I had to balance work and a school &lt;span&gt;curriculum&lt;/span&gt; that included classes like:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Applied Statistics for Engineers&lt;/li&gt;

  &lt;li&gt;Intro to Mathematical Probability&lt;br&gt;&lt;/br&gt;&lt;/li&gt;

  &lt;li&gt;Nonparametric Statistical Methods&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Needless to say, I felt like quitting SEVERAL times. I tried to come up with every excuse I could think of. &quot;I didn't need the degree&quot;, &quot;I could finish up next semester&quot;, &quot;I can go back another time&quot;, etc....&lt;/p&gt;
&lt;p&gt;But I didn't quit. I sucked it up, quit my whining and pushed through. Which brings me to the quote I started this post with. Looking back at the past 5-10 years of my life, the one thing I can point to that made me successful isn't intelligence, upbringing, luck or chance.&lt;/p&gt;
&lt;p&gt;It's &lt;strong&gt;perseverance&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I succeeded simply because I didn't let myself fail. Initiative and hard work will get you ahead of 70% of the people out there. A lot of people are plagued by procrastination, laziness or simply a reluctance to sacrifice. I meet lots of people in my life who think I'm lucky or that I am in a good field and being in computers makes it easy to be successful. However, people don't see the hard work that goes into being employed in the tech industry. Sure, they see the cool toys or the nice paycheck, but they don't see the support phone that you have to sometimes carry. Nor do they when you have to cancel plans because of some problem with work. Or how about the difficulty in scheduling a vacation? People don't realize that when tech people go on vacation or take days off, our work doesn't go away. It's there for us when we get back. Only now, we've shortened the time we have to get it done :)&lt;/p&gt;
&lt;p&gt;In the end, I'm extremely happy I went back and finished. I'm also extremely happy I am done now. I now have free time again and just in time for the summer. Especially since I hear the Cubs are &lt;a href=&quot;http://sports.espn.go.com/mlb/news/story?id=3244658&quot;&gt;winning&lt;/a&gt; the &lt;a href=&quot;http://thebiglead.com/?p=5613&quot;&gt;world&lt;/a&gt; &lt;a href=&quot;http://www.suntimes.com/sports/baseball/cubs/921638,sicover042908.article&quot;&gt;series&lt;/a&gt; :)&lt;/p&gt;
&lt;p&gt;Well, I can dream, can't I ?&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?a=Ni5IXH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/MemoirsOfABystander?i=Ni5IXH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/288445833&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 12 May 2008 16:29:32 +0000</pubDate>
</item>
<item>
	<title>Chris McMahon: The Software Artists:  Introduction</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20165167.post-7534737865675859069</guid>
	<link>http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-introduction.html</link>
	<description>The people who create software are not factory workers.  Nor are they engineers, in the sense that engineering is the “practical application of the knowledge of pure sciences, as physics or chemistry”.  But the software industry continues to treat software workers as if they were factory workers or construction workers.  The software industry also attempts to value software as if it were a manufactured product. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;But making software is a fundamentally creative process, more similar to performance than to manufacturing.  Like art and music, software has an audience that is involved in a personal way with the software.  And the people who create software are much more like performers than they are like construction workers. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;If it is true that software is much more like art than it is like manufacturing, then the tools of artistic criticism should be useful for evaluating software.  &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;It should also be possible to apply successful approaches to art or music pedagogy to software pedagogy. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Furthermore, it should be possible to manage software projects in the same way that artists manage performances, with better results than if the software projects were managed like manufacturing or engineering projects.</description>
	<pubDate>Sun, 11 May 2008 22:08:00 +0000</pubDate>
	<author>noreply@blogger.com (Chris McMahon)</author>
</item>
<item>
	<title>Chris McMahon: The Software Artists: Explanation</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20165167.post-3646838273792138490</guid>
	<link>http://chrismcmahonsblog.blogspot.com/2008/05/software-artists-explanation.html</link>
	<description>I wrote a paper some time ago to submit to the &lt;a href=&quot;http://www.associationforsoftwaretesting.org/drupal/CAST2008&quot;&gt;Conference of the Association for Software Testing&lt;/a&gt;, but the paper was not accepted for the program.  I'm on the waiting list if another presenter drops out, which seems unlikely at this point. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I think it is likely that my paper was not accepted at CAST was because it is somewhat similar to a &lt;a href=&quot;http://www.associationforsoftwaretesting.org/drupal/cast2008/Program/TrackSessions#bolton&quot;&gt;presentation&lt;/a&gt; from &lt;a href=&quot;http://www.kohl.ca/&quot;&gt;Jonathan Kohl&lt;/a&gt; and &lt;a href=&quot;http://developsense.com/&quot;&gt;Michael Bolton&lt;/a&gt;, two of the best testers in the universe.   I intend to publish my paper here on my blog in the hopes that Jonathan and Michael and other Software Artists will have access to as much relevant information as possible to support their position.   &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I think that one enormous reason that few people take software-as-artistic-practice seriously is because of a perceived lack of practical application:  manufacturing and engineering provide venerable examples of measurement tools, education curricula, and market strategy-- assuming that you believe that software is an engineered and manufactured product.  Those of us who believe that software is an artistic process have failed to provide compelling alternatives to the tools provided by engineering and manufacturing.  &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I set out to start to remedy that situation with this paper. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;It is a long piece, so I'll publish it in several sections in the coming days, as I have time to get it right and looking good.  I have extensive references also.  My plan is to publish references as separate blog posts after each section, so that people who don't care can skip them and people who do care can relate them to recent posts.</description>
	<pubDate>Sun, 11 May 2008 22:05:35 +0000</pubDate>
	<author>noreply@blogger.com (Chris McMahon)</author>
</item>
<item>
	<title>Paul Holser: JavaOne 2008, Day 3</title>
	<guid isPermaLink="true">http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008--1.html</guid>
	<link>http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008--1.html</link>
	<description>&lt;p&gt;&quot;Using FindBugs in Anger&quot;, with the great Bill Pugh -- nice summary of a great tool.  I liked the slide listing some common (but incorrect) wisdom about bugs and static analysis: programmers are smart, and smart programmers don't make dumb mistakes.  We all make dumb mistakes.  I really like FindBugs, and use it on my open-source projects.  Interesting to learn that there is commercial support for it via Fortify Software.  Pugh described how large organizations such as Google use FindBugs on large code bases, strategies for prioritizing resolutions to issues FindBugs detects, tracking issues historically over time and adding issues to bug databases, etc.&lt;/p&gt;

&lt;p&gt;This is the second time this conference I've seen or heard &quot;Q &amp;amp; A&quot; and QA (as in quality assurance) confused.  Hm.&lt;/p&gt;

&lt;p&gt;&quot;Writing Your Own JSR-Compliant Scripting Language&quot; was a good overview of the new Java 6 API for launching scripts that can interact with the calling Java program.&lt;/p&gt;

&lt;p&gt;&quot;Pimp My Build&quot; offered some very Ant-specific hints for maintaining build scripts -- it all pretty much boiled down to refactoring out common bits and treating your build scripting with the same refactoring and coding care you would afford your production code.&lt;/p&gt;

&lt;p&gt;&quot;The Future of Guice&quot; from &quot;Crazy Bob&quot; Lee and a couple of other Googlers -- &quot;Types are the currency of Java&quot; -- nice mantra, and it clearly informs the decisions the Guice crew made regarding how to indicated injections, etc.  Came with a promo code for an ebook version of the aPress title on Guice.  Bonus!&lt;/p&gt;</description>
	<pubDate>Sun, 11 May 2008 18:22:49 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Links for 2008-05-10 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/www_build_doctor_com#2008-05-10</guid>
	<link>http://feeds.feedburner.com/~r/TheBuildDoctor/~3/287870592/www_build_doctor_com</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://testerbydaydeveloperbynight.blogspot.com/2008/05/automated-deployment-why-it-is-good.html&quot;&gt;I've come up with a quick test you can do to see if you should automate your deployment process.&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
Cautionary tales&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Sun, 11 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Griffin Caprio: Links for 2008-05-09 [del.icio.us]</title>
	<guid isPermaLink="false">http://del.icio.us/gcaprio#2008-05-09</guid>
	<link>http://feeds.feedburner.com/~r/MemoirsOfABystander/~3/287299738/gcaprio</link>
	<description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://flimflan.com/blog/ReadableRegularExpressions.aspx&quot;&gt;Joshua Flanagan - Readable Regular Expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://weblogs.asp.net/rosherove/archive/2008/05/06/introducing-linq-to-regex.aspx&quot;&gt;Introducing LINQ To Regex - ISerializable - Roy Osherove's Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.useit.com/&quot;&gt;useit.com: Jakob Nielsen on Usability and Web Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.tuaw.com/2008/05/07/indigo-3-0-increased-geekiness-for-your-home/&quot;&gt;Indigo 3.0, increased geekiness for your home - The Unofficial Apple Weblog (TUAW)&lt;/a&gt;&lt;br&gt;&lt;/br&gt;
The new ParentDish: helping raise kids of all ages

TUAW PHOTO GALLERY
ENGADGETDOWNLOAD SQUADJOYSTIQBLOGGINGSTOCKSGREENDAILY

TUAWWEB

SEND US TIPSRSS FEEDSMACWORLD COVERAGE 
Indigo 3.0, increased geekiness for your home
Posted May 7th 2008 6:00PM by Bret&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MemoirsOfABystander/~4/287299738&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Sat, 10 May 2008 05:00:00 +0000</pubDate>
</item>
<item>
	<title>Steve Freeman: Glass Virtuoso, remarkable</title>
	<guid isPermaLink="true">http://www.m3p.co.uk/blog/2008/05/09/glass-virtuoso-remarkable/</guid>
	<link>http://www.m3p.co.uk/blog/2008/05/09/glass-virtuoso-remarkable/</link>
	<description>&lt;p&gt;Wait for a minute in. &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This requires a &lt;em&gt;lot&lt;/em&gt; of practice.&lt;/p&gt;


&lt;p&gt;&lt;em&gt;via &lt;a href=&quot;http://centripetalnotion.com/&quot;&gt;http://centripetalnotion.com/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 09 May 2008 22:49:08 +0000</pubDate>
</item>
<item>
	<title>Paul Holser: JavaOne 2008, Day 2</title>
	<guid isPermaLink="true">http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008-da.html</guid>
	<link>http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008-da.html</link>
	<description>&lt;p&gt;On Day One, I picked Josh Bloch's brain for a bit about whether the BGGA closures proposal was redeemable if the gnarlier bits might be removed, leaving it basically with function types.  It was cool to mingle with the Java &quot;rock stars&quot;, if only for a moment.&lt;/p&gt;

&lt;p&gt;I enjoyed Neal Gafter's Day Two talk &quot;Closures Cookbook&quot; immensely.  He gave a very clear exposition of the BGGA proposal and the use cases propelling it.&lt;/p&gt;

&lt;p&gt;Right out of the gate, he started with a disclaimer: Google is open to multiple parallel investigations of closures but is not currently prepared to commit to any particular proposal.&lt;/p&gt;

&lt;p&gt;The cool bit is that closure literals can be used as instances of one-method interface types whose method parms and return type are compatible with those of the closure:&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;
    Runnable r = { =&amp;gt; doWhatever(); }
    r.run();

    Callable&amp;lt;String&amp;gt; cs = { =&amp;gt; &quot;result&quot;; }

    Comparator&amp;lt;String&amp;gt; reverse = { String s1, String s2 =&amp;gt; s2.compareTo(s1); }

    ItemSelectable is = ...;&lt;br&gt;&lt;/br&gt;    is.addItemListener( { ItemEvent ev =&amp;gt; doSomething(ev, is); } );&lt;br&gt;&lt;/br&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;

Apparently there are technical reasons why this couldn't be done for abstract classes with one abstract method, didn't quite get the picture...

&lt;/p&gt;

&lt;p&gt;Also considered were aggregrate operations,  &lt;a href=&quot;http://jaggregate.sourceforge.net&quot;&gt;near and dear to my heart&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
double highestGPA = Double.MIN_VALUE;
for (Student s: students) {
  if ( s.graduationYear == THIS_YEAR ) {
     int gpa = s.getGPA();
     if ( highestGPA &amp;lt; gpa )
       highestGPA = gpa;
  }
}

double highestGPA =
    students.filter( { Student s =&amp;gt; s.graduationYear == THIS_YEAR } )
            .map( { Student s =&amp;gt; s.getGPA(); } )
            .max();
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I just love how the second reads -- nothing like method names to make intent clearer.&lt;/p&gt;

&lt;p&gt;An extended example involving an API for timing units of code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
interface Block&amp;lt;R, throws X&amp;gt; {
    R execute() throws X;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;
public &amp;lt;R, throws X&amp;gt; R time(String opName, Block&amp;lt;R, X&amp;gt; block) throws X {
  long startTime = System.nanoTime();
  boolean success = true;
  try {
    return block.execute();
  }
  catch (final Throwable ex) {
    success = false;
    throw ex;
  }
  finally {
    recordTiming(opName, System.nanoTime() - startTime, success);
  }
}

int f() {
  time( &quot;opName&quot;, { =&amp;gt; someStatements } );
  time( &quot;opName&quot;, { =&amp;gt; return computeResult; } )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Yowza.  Nice how it genericizes over whatever exceptions the block may raise (including none), and whatever the block might return (including nothing).  Note the use of &quot;safe re-throw&quot; by marking a catch parameter final (proposed for JDK7).&lt;/p&gt;

&lt;p&gt;Alex Buckley and Stanley Ho gave a nice summary of the first-class language and tooling support for modularity in Java (JSR 277).  Seems a JAM module would be able to leverage OSGi bundles and repositories?  Nice.&lt;/p&gt;

&lt;p&gt;The Java Persistence API 2.0 talk was packed.  Ridiculously packed.  Fire marshal, anyone?  People continued to stream in well into the presentation.  One guy ended up accidentally kicking separating my MacBook power supply from the pluggable portion of it.  Not so much as a &quot;sorry, my bad&quot; -- never looked back.  I understand there's a certain amount of Asperger-style intense focus at a geeky conference, but come on.  Sorry if I seemed a bit peevish, but several hot buttons were hit in this one: overcrowded room, disregard for personal space, cell phones ringing after several admonishments to silence them, relatively shrill speaker a bit trigger-happy on the slide flipper ... I guess my bitching about it was way more annoying to the guy in front of me, as when I uttered the line, &quot;As a courtesy to others, please silence your cell phones&quot;, he shot back with the timeless classic, &quot;Why don't you silence yourself, dude?&quot;  Cue the slow clap.&lt;/p&gt;

&lt;p&gt;Anyway, I didn't get that much out of the JPA talk.  I'm not doing much RDBMS work these days, but at least I have a sense of where to look for JPA info.&lt;/p&gt;

&lt;p&gt;I bailed out of the talk &quot;Unit Testing DB Operations with DBUnit&quot; a shade early to catch a power nap -- I had no idea how exhausted I'd be after 1.5 days at the conference.  That said, I scheduled a number of sessions and BOFs -- perhaps next time I'll pace myself a bit better.  Besides, I've used DBUnit before, and it it quite nice -- not much new ground covered for me.&lt;/p&gt;

&lt;p&gt;&quot;Boldly Go Where the Java Programming Language Has Never Gone Before&quot; -- Geert Bevin's talk's premise was that &quot;You don't have to master new languages, tools, or libraries to deliver applications that go much further than what the standard Java platform provides.&quot;  He gave compelling demonstrations of Terracotta, an OSS clustering solution for the Java platform; RIFE, a component-based web framework featuring continuations; GWT; and Google Android.  Very nice stuff!&lt;/p&gt;

&lt;p&gt;&quot;Building RESTful Clients with JavaScript, Ruby, and JavaFX&quot; -- not much here you couldn't get from an introductory article on REST.&lt;/p&gt;

&lt;p&gt;Ola Bini of ThoughtWorks gave a talk about TW's use of JRuby.  As an ex-ThoughtWorker I was eager to hear about what TW's been up to in the Ruby world -- clearly, quite a lot.  I left TW just as it was beginning to pursue and land Ruby/Rails work.  Right now, 40% of its US revenue comes form Ruby/Rails work.  Surprising to learn that test suites run more slowly often in JRuby than in MRI -- less opportunity for JIT leverage, it seems.  Often they run test suites in MRI pre-commit, then with JRuby in CI build.&lt;/p&gt;

&lt;p&gt;&quot;Cooking Your Own Groovy Builder: A Step Forward into Domain-Specific Languages&quot; -- nice exposition of the Builder support for languages that describe hierarchical structures such as XML documents and Swing widgetry.&lt;/p&gt;</description>
	<pubDate>Thu, 08 May 2008 22:27:17 +0000</pubDate>
</item>
<item>
	<title>Julian Simpson: Last chance to sponsor us before the Woking bikeathon.</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-30889085.post-5468118384769189747</guid>
	<link>http://www.juliansimpson.org/2008/05/last-chance-to-sponsor-us-before-woking.html</link>
	<description>&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;Leukemia is horrid.  Riding bikes is good.  That's why we are riding in the 2008 Woking Bikeathon for Leukaemia Research.  More info: &lt;a href=&quot;http://justgiving.com/lesleyandjules&quot;&gt;Link&lt;/a&gt;</description>
	<pubDate>Thu, 08 May 2008 21:46:29 +0000</pubDate>
	<author>noreply@blogger.com (Julian)</author>
</item>
<item>
	<title>Paul Holser: JavaOne 2008: more from Day 1</title>
	<guid isPermaLink="true">http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008-mo.html</guid>
	<link>http://cleveralias.blogs.com/thought_spearmints/2008/05/javaone-2008-mo.h