Devoxx 09 Schedule Overview

If, like me, you’re attending the Devoxx ’09 conference next week and are preparing your personal schedule, you might need a consolidated overview over what’s happening where at any given time.

Although the sessions and talks are listed on the Devoxx 09 website, it lacks such a bird’s-eye view IMHO. I created an Excel sheet containing everything you need to plan your week so you don’t miss any talk you’re interested in.

The file can be downloaded here:

See ya @ Dexovv 09! 🙂

Advertisements

Trouble with Java invocations using reflection

The WTF

In a mocked UnitTest, I created a mock on a logger interface to control its invocations. However, in addition to that, I wanted to reach every invocation through to a _real_ log4j backend of that logger interface since those log messages could contain information needed to find errors…

The idea is to lookup the invoked methods on the _real_ logger using reflection, so I don’t have to adapt the testCase whenever I change the log interface, it is just passing through anyway, right? I left polymorphism out of the mix to simplify the code (I don’t use polymorphism in log interfaces anyway).

Compilation is absolutely fine but at rumtime I got:

java.lang.IllegalArgumentException: argument type mismatch

Can you spot the error?

public Object execute(String invokedMethod, List parameterValues) throws Exception {
    // Invoke the method on the real logger
    MyLogger realLogger = new MyLoggerLog4jBackend();
    Method[] methods = realLogger.getClass().getMethods();

    // Ignore polymorphism in method lookup for now...
    Method method = null;
    for (int i = 0; i < methods.length && method == null; i++) {
        if (methods[i].getName().equals(invokedMethod)) {
            method = methods[i];
        }
    }

    if (method != null) {
        method.invoke(realLogger, parameterValues);
    }
}

Oh yes, the parameter of the invocation at runtime is actually a java.lang.IllegalArgumentException and MyLogger looks something like:

public interface MyLogger {

    [.. other irrelevant methods...]

    void fatalError(Exception e);

}

The Solution

It’s the invocation in itself:

method.invoke(realLogger, parameterValues);

If you take a close look at the invoke method’s declaration, you’ll see it’s:

public Object invoke(Object obj, Object... args);

But since parameterValues is a java.util.List, it used that list as a parameter in itself instead of unwrapping it! And since java.util.List and java.lang.Exception are not type compatible, boom!

5 things 4 Things

incomplete_things_logoAs mentioned in my previous posts, I chose Cultured Code’s Things as my GTD tool. The Mac / iPhone combination makes it really versatile and after about a month of using it, I’m still loving it. Therer are, however, a bunch of improvements required for Things to become truly great. These are the 5 features I consider “must have”s. Everything else would just be “nice to have”s to me as of writing.

I proposed these features directly to Cultured Code. Since I want to share the ideas with you and maybe even get some reader feedback (a man can dream, can’t he?), here’s a copy of the eMails I sent to them (most important first). Continue reading

Finding the right GTD app

It’s been about three weeks since I decided to use Cultured Code’s “Things” solution to get my things done.

But before I eventually spent the money on Things, I took a deeper look at it, together with two other GTD apps: the Omni Group’s “OmniFocus” and Potionfactory’s “The Hit List”.

OmniFocusOmniFocus icon

While it is certainly the most precise implementation of Allen’s GTD Methodology, it didn’t “feel right” for me. Its look and feel are just not as simple and fun to use as Things’. However, OmniFocus also has a couple of advantages over Things.

  • Most importantly, the ability to embed files into the tool db
  • Location-based contexts are a killer feature on the iPhone client
  • The clipping (it’s kind of a luxurious copy & paste to create new tasks) flexibility and options are a little bit better than Things’
  • The View Bar and Perspective features. The customization and fine-tuning of almost any part of the GUI to get a precise “view” on the data and the ability to store and recall these so called “perspectives” anytime is a really powerful feature that stands out when compared to other task management applications
  • Especially compared to Things, having a granularity at minute level is way more flexible than a day granularity

The Hit ListThe Hit List icon

While The Hit List’s GUI looks very promising at first glance, it turned out to me that the application is missing some serious power. Note though that, as of writing, the current version is only the first public beta and that the lack of functionality might be addressed in future versions.

What really hit me was the effort they put into making the whole application navigable and controllable from the keyboard. There’s a key combination for virtually anything and it really seems like they’ve put a lot of effort into designing that. Shortcuts are often elegantly displayed next to GUI elements (yes, you can turn that off) in order to familiarize the user with the equivalent keyboard shortcut. It’s so omnipresent that it might even be a little bit too much, but hey, props to them for putting the effort in!

The most annoying thing about The Hit List to me were the tabs. They show them off very prominently on all screen shots so you’d expect it to be a killer feature, right? Well actually it isn’t: tabs are really just a duplication of the menu on the left, except that you can select which of the menu items get turned into tabs.

There were only 3 outstanding features in The Hit List:

  • The aforementioned keyboard controls
  • GUI animations are geniously designed! The GUI is really responsive and dynamic, but not too much, just the perfect amount of it.
  • Data selection is well designed. For example, filing a task into a project happens through a very responsive, intelligent and nice looking input box. Typing a few letters of any part of the project or tag is enough for the hit list to find what you’re looking for.

Things was the winner for me. But…Things icon

…although it was my first choice, I took the opportunity of gained experience and recent tool comparisons to point out 5 of the most important features / improvements yet missing within Things to become _my_ perfect GTD application. I will feature those in an upcoming blog post, so stay tuned!

Getting Things Done using Things

Uuh… what?

For those who are new to the subject, “Getting Things Done” (or GTD) is a task management methodology created by David Allen and described in his book “Getting Things Done – The Art of Stress-Free Productivity”. To be honest, I didn’t read that book, I read the corresponding Wikipedia article, in fact, let’s quote it:

GTD rests on the principle that a person needs to move tasks out of the mind by recording them externally. That way, the mind is freed from the job of remembering everything that needs to be done, and can concentrate on actually performing those tasks.

How I got into it

First off, I have a sh*t ton of information to manage at any given time. I have my job, a bunch of internet stuff going on and I’m part of multiple musical formations, so needless to say it rarely gets boring. I used to be able to manage all my tasks in-brain. However, seems I’ve hit a critical mass these days. Phone didn’t stop ringing, eMails were making my inbox explode and I kinda had the time for none of it that day. When the information rush finally ended, I was sitting there thinking “Hmm.. out of all that mess, what were those 2 things I wanted to do immediately?” — no clue! That’s when I decided I’d need a tool to manage my stuff.

Why Things?

After fiddling around a bit, I stumbled upon a Mac OS Application labeled “Things“, by a small company named Cultured Code. It looked pretty much exactly like my always-wanted-to-have task-management-application. Only downside (at the time) I thought was the price. I didn’t really want to spend $40 for it, +$10 for the iPhone version to sync tasks and take them with me on-the-go, which makes us $50 for a task management solution. But maaaan did that application look great.

So I decided to let my colleague take a look. He’s the “king of tools” at work and he actually read David Allen’s GTD book, so he was the perfect judge for a first-impression. After watching the “Things” screencast, he was like “Yep, that’s it, it’s almost perfect… If I had a Mac I’d go out and buy it”. After that, I spent several hours browsing through articles and forum posts. I ruled out any solution that would make me send my task data to a third party server like Remember The Milk, I just hate that thought! In the end, the only serious (Mac) alternative to Things seemed to be The Omni Group’s OmniFocus. But supposedly, that one would be less flexible by being bound too tightly to the GTD principles or at least less fun to use than Things. On a side note, OmniFocus is also twice as expensive. That made me reconsider Things’ price as not being too expensive after all.

I downloaded the Things for Mac demo and bought the Things iPhone application to be able to test the syncronization, which is epic btw. I’m 5 days into using it and applying general GTD principles now and I really feel like staying on top of my tasks a lot better than before.

I have yet to buy the full Mac application of things but before, I’d like to see if I have the courage continuing to apply GTD in my everyday life. I’ll try to report back as the experience goes on…

To be continued…

Recovering lost photos

photorecEver heard about those incredibly expensive file recovery tools? For recovering photos, documents and all kinda stuff? Since I run Time Machine on my Mac and since I do full backups of my valuable stuff regularly, I was pretty sure I’d never need one of those… until today!

Yesterday evening, I took some amazing photos with my Pentax DSLR. The lighting was absolutely perfect and I was looking forward to importing them in iPhoto today. I don’t sync my SD card with iPhoto every time I take a bunch of pictures. I generally wait until I need some pics immediately to copy all the previous ones over to my Mac. So this morning, I wanted to import the current batch of photos from my SD card into iPhoto. Worked as always, except for the photos I took yesterday evening. Out of the dozen or so I took, there was only one left. And that one was corrupted (a bunch of weird horizontal lines within the pic). ALL the others from yesterday were gone. And since I selected “Delete Originals after import”, the SD card was…. empty!

Having the exact same conditions as yesterday is unlikely, especially with the f’d up weather here in Belgium. Therefor, I decided to take a look at the file recovery tools out there.

Being on a Mac doesn’t help when it comes to finding free niche products. That narrowed down the available tool palette. I ended up taking a look at two tools: LC-Tech’s Photorecovery and Christophe Gernier’s photorec. The former being a commercial tool, I used the demo. The latter is an open source command line tool.

Continue reading