In the true spirit of scratching my own itch, I started to work on a simple note-keeping application. After noodling around a bit with some ideas, I did some more research (basically, because I was afraid that this new app would be as much work as Timesheet) and stumpled upon Notational Velocity, a simple and surprisingly effective note-keeping app.
NV has only three user interface elements, two of which are used for creation/editing of notes, as well as searching/displaying notes.
Looks very promising, and if I can use it, it will save me a lot of time, and you the frustration of having to deal with yet another app by that guy.
I’m a big fan of applications that try to do things differently, and NV does that. I’m also a fan of strange readme-texts, and NV beats everything I’ve ever read before:
Follow these steps to add a new note:
1. In the Search/Description area, begin typing the description of the note (e.g. “Television celebrities I plan to assassinate”).
2. Hit return or tab to move to the data entry area.
3. Type or paste the actual contents of the note.
Aha.
A really funny and clever Flash animation that gives classic GUI metaphors a new meaning (and use).
(Found at Annablume)
If somebody would actually have the nerve to compile a list of all technologies that most likely have been created simply to annoy people, I’d like to suggest Swing to be somewhere in there. Maybe Number 1 or 2, but definitely in the Top 5.
And I’m not even talking about the LayoutManager from Hell (also known as GridBoxLayout to its more intimate enemies), but just those little quirks that make working with Swing so difficult.
It took me the better part of two afternoons to figure out the answer to this question:
What do you do when you want to replace a component in a Window with another one?
Answer 1
Use component.repaint() on the parent of the changed component. After all, the component should be repainted as soon as possible after this call. Of course, this is a rhetorical entry, because I have to build up some drama.
Answer 2
Use component.invalidate() on the parent of the changed component.
This should also invalidate all parents of the component, so everyone should repaint itself. Sounds fine, but it’s also not working.
Answer 3
Both of them. Use repaint() and invalidate() liberally in the method that changes the component. Change the sequence of the calls, mix and shake it. Set this or that to null, just in case.
As you might have guessed by now, after I arrived at answer 3 (which, of course, is not the correct answer), I was rather furious. More or less by accident I discovered
Answer 4
Use component.revalidate().
As everyone will have guessed by now, Answer 4 is correct. I don’t know why, but I’m sure there is a very plausible explanation for it.
Ceterum censeo LayoutManager esse delendam!
I like data visualisations. And even more so when they are pretty.

Although the image cannot compete with these graphs, I still like it.
You can see more of these at the sixdegrees gallery. And if you like, download Walrus, because the graphs are even prettier in 3D.