Much ado about scripting, Linux & Eclipse: card subject to change


Behaviour Modification

Dave Carver's been talking a lot about Scrum, XP, and the EDP and where the suck is.

His latest post contains "in Pictures" in the title, but contains no pictures. So, with tongue planted firmly in cheek, here's one:

Image borrowed from


Vacation Planning / Process Modeling

This summer I'm attending the wedding of two friends in Victoria, BC. So, since we're travelling across the country anyway, we're going to take some time to explore Vancouver Island a little.

And because I'm a total Eclipse fanboy (despite the fact that certain people tell me Eclipse is dead), I thought it was time to play with the BPMN Modeler again. Version 1.0.2 (for Eclipse 3.4 / Ganymede) just came out today (update site).

So here's me planning the trip:

Aside: Wondering what's in Telegraph Cove? Check this out.

It may not have the same graphical wow factor as, say, Google Maps' "My Maps" feature...

... but it does clearly show two things:

a) the BPMN Modeler is stable and works great for modeling my workflows, regardless of whether I intend to do anything programmatic w/ the resulting diagram, and

b) air fare and car rentals cost too much. :)

I also tried out the in-progress BPMN Modeler 1.1M6, and while it adds some cool features to help align items in your swimlanes, it's also not quite ready for prime-time use. Looking forward to 1.1M7 next month.

Who says modeling can't be fun?


All I really want is builds

With April 20 just around the corner, it's time to get ill... but first, something completely different.

Builds, all I really want is builds
And in the morning it's builds
'Cause in the evening it's builds

I like the way that they run
And when they're green they're so much fun
And I can always make 'em smile
Fetch all their sources and compile

Back in the day
There was this project 'round the way
It had no build system per se
But they kept codin', come what may

I asked them, "Please?" they said, "You may."
Their code was tight and that's ok
If they would code I'd be R.E.
And now it runs on build-dot-E

I hope you'll say, "Hey, me and you should try Athe-
na, more to come, but under way!"
We really need a website, eh?
For now slides, code, and the wi-kay

We'll move to Git when it's read-ay
But that won't be before this May
So get yourself a build today
Without the ol' P-D-E dismay

Builds - to do the fetchin'
Builds - do the compilin'
Builds - to do the testin'
Builds - and zipped-up filin'
Builds, that's all I really want is builds
Early adopters they want builds
In next-gen Hudson they want builds
Signed, packed, p2 repos...
Builds, builds, builds, builds, builds!

NOTE: Normally the artist name below links to the video on YouTube, but there's no official one, and everything else I found (school projects, Lego animation, stick figures, slideshows) were either incomplete, incorrect, or potentially NSFW. YMMV.

Beastie Boys - Girls


Flex + RSS + Onion = FAIL


SQL Tribbles ]|[

When good conference sites go bad.


Using EasyAnt with Ivy to fetch latest compile-time and run-time dependencies

Just started playing with Ivy and EasyAnt today.

Here's a quick guide to getting started with multi-module Ant builds (because the EasyAnt Examples documentation is incomplete). This also demonstrates Ivy's ability to pull the latest version of a dependency from a repository. (And I get to finally try out Alex Gorbatchev's SyntaxHighlighter.)

1. Download:

wget -O /tmp/

2. Install as root, usable by all:

sudo su; 
unzip /tmp/ -d /opt/easyant-0.5-beta1; \
cd /opt/easyant-0.5-beta1; \
mkdir modules repository cache; \
chmod -R g+rw *; chgrp -R users *; \

3. Compile multi-module example's core jar:

export EASYANT_HOME=/opt/easyant-0.5-beta1; \
cd /opt/easyant-0.5-beta1/example/example-multimodule/example-core; \
$EASYANT_HOME/bin/easyant -p; \

4. Verify compiled jar:

unzip -l /opt/easyant-0.5-beta1/example/example-multimodule/example-core/target/artifacts/example-core.jar

5. Publish jar:

$EASYANT_HOME/bin/easyant repo-management:install-artifact -Dorg=org.apache.easyant \
  -Dmodule=example-core -Drev=0.1 -Dartifact=target/artifacts/example-core.jar \
  -Dinstall.override=true -Dto.resolver=local

6. Verify published:

unzip -l /opt/easyant-0.5-beta1/repository/org.apache.easyant/example-core/0.1/example-core.jar; \
cat /opt/easyant-0.5-beta1/repository/org.apache.easyant/example-core/0.1/example-core.ivy
<ivy-module version="1.0">
    <info organisation="org.apache.easyant" module="example-core" revision="0.1"/>

7. Compile multi-module example's Hello World jar:

cd /opt/easyant-0.5-beta1/example/example-multimodule/example-hello-world; $EASYANT_HOME/bin/easyant

8. Verify compiled jar:

unzip -l /opt/easyant-0.5-beta1/example/example-multimodule/example-hello-world/target/artifacts/example-hello-world.jar

8. Run Hello World app:

cd /opt/easyant-0.5-beta1/example/example-multimodule/example-hello-world; $EASYANT_HOME/bin/easyant run:run
     [java] Hello World !

Total time: 2 seconds

9. Now, recompile the core jar, republish it as 0.2, then recompile the Hello World jar. Verify that the Hello World compilation used the newer 0.2 version instead.

cd /opt/easyant-0.5-beta1/example/example-multimodule/example-core; $EASYANT_HOME/bin/easyant; \
$EASYANT_HOME/bin/easyant repo-management:install-artifact -Dorg=org.apache.easyant \
  -Dmodule=example-core -Drev=0.2 -Dartifact=target/artifacts/example-core.jar \
  -Dinstall.override=true -Dto.resolver=local; unzip -l \
/opt/easyant-0.5-beta1/repository/org.apache.easyant/example-core/0.2/example-core.jar; \
cat /opt/easyant-0.5-beta1/repository/org.apache.easyant/example-core/0.2/example-core.ivy; \
cd /opt/easyant-0.5-beta1/example/example-multimodule/example-hello-world; \
$EASYANT_HOME/bin/easyant; $EASYANT_HOME/bin/easyant run:run
:: loading settings :: file = /opt/easyant-0.5-beta1/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: org.apache.easyant#example-hello-world;working@x2lappy
[ivy:resolve]  confs: [default, test]
[ivy:resolve]  found org.apache.easyant#example-core;0.2 in local
[ivy:resolve]  [0.2] org.apache.easyant#example-core;latest.revision
[ivy:resolve] :: resolution report :: resolve 30ms :: artifacts dl 1ms

PocketMac Runs IIS?

Apparently PocketMac, a sync tool for Mac / BlackBerry users, runs IIS for its website. Just not very well.


Dash Athena: Epic Fail

Damn airport scanners.

On Sunday while I was flying home from EclipseCon, I decided to try out Git, and migrated the whole Dash CVS tree into a local Git repo. Then, I deleted the CVS stuff in because Git is so much better and DVCS is the Way of the Future.

Unfortunately, somewhere between Calgary and Toronto, my hard drive died, taking with it the whole repo.

Since we now have to start over completely from scratch, Andrew and I have decided to take this opportunity to re-architect a few things:

  1. Instead of Ant scripts which wrap & simplify PDE, we're going to use perl scripts which wrap ant4eclipse. No one really cares about OSGi anymore anyway.

  2. Instead of being able to run a build in Eclipse, we're going to support running on MIDP devices only (smartphones) and older hardware (bug 260000). This will make builds much smaller and more portable for everyone.

  3. We're dropping the built-in support for running JUnit tests as part of an automated build, because the Agile way is to do Build Breakage Driven Development (BBDD) rather than TDD.

  4. Because the Hudson instance on is only accessible to an elite few (bug 270633), we're dropping that too, in favour of Cruise Control, much lauded by the WTP and Orbit dev teams for its friendly user interface and many extensible configuration options.

Should you have any concerns with this new plan, don't hesitate to post your comments here. We value the community's input, and will take your thoughts under advisement. Then ignore them and do what we want.