On the topic of assertions

Every assertion should be thought from the standpoint of

  1. What was expected
  2. What actually happened

Translation: assertTrue should always, always have a message.

Consider the following:

  1.  
  2. assertTrue(mv.getViewName()
  3. .startsWith(myController.getSuccessView()));
  4.  

This will only return "assertion failed". Which is great, but how do we know what happened? If this is buried on one of the lunt automated remote builds, how am I supposed to know what is going wrong? Which is the expected? What actually happened?

A much better version of the same looks like this:

  1.  
  2. assertTrue(
  3. "Was expecting something like "
  4. + myController.getSuccessView() + " but was "
  5. + mv.getViewName(),
  6. mv.getViewName()
  7. .startsWith(myController.getSuccessView()));
  8.  

Same assertion, but now it tells me more specifically what's going on and I can fix bugs with it. Once I set this on the test, it becomes easy to see what was going on.

I recently had a Saturday with some other Bay Area developers where we did a lot of thinking about testing, so expect some more advice in the future as I collect my notes.

Remember the goal of unit tests is to "find bugs" (thanks Harry!). An assertion without an associated message merely notifies you that a bug occurred but doesn't actually "find it". As you are writing your unit tests, make sure you find it as well.

technorati tags:, , ,

Getting OS X Terminal to behave

Last time I didn't write this down and this time I'm blogging about it so I don't forget it. OSX Hints has a good guide on how to set Terminal.app to work the way God Intended (great command line user that He is).

I am handy around the Terminal.app, but for me the main thing that I kept forgetting (and hurts me a lot since my muscle memory depends on it) is moving forward and backwards full word:

"\e[5C": forward-word
"\e[5D": backward-word

By the way, have I mentioned I no longer have to use PCs? Woot!

Update: Here is another guide you may want to take a look at. And another

technorati tags:, ,

Planning Poker Cards

Graeme over at Contrado Solutions has put together some Scrum Poker Cards. These are good for Poker Estimation.

technorati tags:,

Hunting vs. Gathering – our cavemen brain

I've spent the last few months implementing GTD and I'm still getting used to it, although I feel I'm achieving a comfortable rythm. One of the big "ah-hah" moments in this process however is the difference between our "hunting" and our "gathering" brains. The basic premise of dividing your time in "collecting without doing" and then "doing without collecting" is what makes you feel like you're "in the zone" when you're doing stuff and gives you a relaxed feeling when you're done collecting your stuff.

After doing this for a little bit and then having a small crisis on a Scrum project (where requirements for the current sprint kept changing during the sprint). I realized that one of the big sources of mental stress is precisely trying to do both at once. Our brains just don't seem to be able to handle it.

The way I see it, our brains are pretty much still cavemen brains, used to running out and hunting deer for a very long period of time, and then going out and foraging for food for another long period of time. If you get into a "chase" mode when you're foraging, it means you're the one being chased, and it automatically fires our stressors.

technorati tags:

Agile Videos Roundup

Here are some funny/interesting Scrum related videos:

technorati tags:,

Wazaabi – XUL for RCP.

This opens pretty interesting possibilities:

Via TheServerSide:

Wazaabi includes a GUI framework that brings XUL to Eclipse RCP plugin developers and a set of components that link the client-side XUL based viewers and forms to server-side business components. Thus, rich client developers can use XUL to code a GUI, rather than using SWT.

Wazaabi brings XUL to Eclipse RCP based rich client applications

This is an actual XUL viewer, not a similar syntax like XSWT or similar attempts. They use servlets to communicate between the XUL side and your application, to keep the flexibility of sending the XUL to a mozilla browser. Very interesting.

technorati tags:, ,

Cheatsheet: Favorite Eclipse Plugins

This is a quick little cheatsheet with my favorite eclipse plugins and the locations of their update sites. It's so I can get back up and running quickly when reinstalling eclipse from scratch.

  • Eclipse Checkstyle - http://eclipse-cs.sourceforge.net/update
  • Spring IDE - http://springide.org/updatesite/
  • Fitnesse by Band XI - http://www.bandxi.com/fitnesse/
  • Subversion for Eclipse - http://subclipse.tigris.org/update_1.0.x
  • Memory Monitor - http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-ui-home/updates
  • Mylar - http://download.eclipse.org/technology/mylar/update-site/e3.2 (or e3.3)

Also, here's some stuff that I like to install manually:

  • JSEclipse - no offense to the WTP folks, but their JS editor is not that great. This one can understand OO javascript, common ajax libraries, JSDoc and more.

technorati tags:, ,

Graphical Modeling Framework

Boy don't I know this - in a prior life I wrote a GEF editor for a workflow engine.

Let me be blunt: In the past, creating graphical editors within Eclipse using the Graphical Editor Framework (GEF) was slow and painful. It involved understanding a complex framework and quite a bit of redundant code. That said, GEF is an excellent framework for creating graphical editors because it is model-agnostic. On the other hand, being model-agnostic creates its own problems.

Learn Eclipse GMF in 15 minutes

Coders: Living on the Edge

Fun and entertaining early Linux History, from Lars Wirzenius:

At one point, Linus had implemented device files in /dev, and wanted to dial up the university computer and debug his terminal emulation code again. So he starts his terminal emulator program and tells it to use /dev/hda. That should have been /dev/ttyS1. Oops. Now his master boot record started with "ATDT" and the university modem pool phone number. I think he implemented permission checking the following day.

Linux Anecdotes

technorati tags:,

History of the OSX Screen of Death – and make your own

If you've followed this for a while you probably know I love emulation and retrocomputing. I'm a big time history geek. Which is why I found this history of the OSX Screen of death entry I found on OSNews pretty cool. And of course I also love when I can tweak things:

Mac OS X allows a custom panic image to be loaded into the kernel from user space. This can be useful in certain circumstances—for example, if it is desired that the user of a managed system notify the administrator in the case of a panic, a custom image can be used to instruct the user.

A New Screen of Death for Mac OS X

It's almost too bad I have only seen the screen once ever on the Mac OS (knock on wood). How would you test this? Parallels for mac, when are you going to run OS X?

technorati tags: