The World’s Most Expensive Popup Blocker

25. February, 2008

What interest does a company that makes most of its money with advertising might have in the moon?

I dunno … but I remember this old joke about the Russians painting the moon red. The crew of Skylab watches them and when the paint job is done, they are ordered to use white paint to write “Coca Cola” over it.

Maybe we’re all gonna need a really expensive pop-up blocker in a few years …


The Top 50 Proprietary Programs that Drive You Crazy — and Their Open Source Alternatives

13. February, 2008

If you ever wondered whether you can do what do everyday on Windows with Open Source Software (OSS), here is a list of 50 common, proprietary applications and their OSS alternatives:

The Top 50 Proprietary Programs that Drive You Crazy — and Their Open Source Alternatives


Wrapping Reflection with FEST-Reflect

6. February, 2008

Tired of handling all those pesky exceptions in Java Reflection? I’ve patched commons-beanutils to convert them into RuntimeExceptions but the patch was rejected because it’s a breaking change. Now, you can try FEST Reflection.

FEST Reflection has a nice and small API with an emphasis on making it easy to produce readable code.

Links: Found on DZone Javalobby


Safer Java: Think Positive

2. February, 2008

If you’ve ever developed software for X11, you probably stumbled over “unmap”. For everyone else: If you wanted to make something in a X11 user interface visible, you’d set “unmap” to “false”. A great way to interrupt work because we’re not used to negative thinking. If I want to make something visible, I think “I set some attribute to true” not the other way round.

In Java, we have learned but some API still smells. Collection.isEmpty(), for example. With positive thinking, I think of collections with elements as “better” than one without, so I’d prefer Collection.hasElements() even though it’s longer and boolean properties should use “is” instead of “has”. Oh well. But it’s simple to fall for the negative trap in your daily work as well.

If you find yourself stumble mentally when using a boolean API, refactor and turn it positive. Modern IDEs make this simple and you’ll write more error-free code in less time. commons-lang offers isBlank() and isNotBlank for Strings which is a good example because you don’t have to put a “!” negator in your if’s no matter if blank is good or bad in your specific case and the JIT will inline the code anyway, so there isn’t even a speed penalty (only a LOC penalty).


Are You OSS? Why?

2. February, 2008

If you ever wondered why you’re using Linux while everyone in the office uses Windows at home, fret no more and read here.


Why You Should Bother About 2°

26. January, 2008

So the long term prediction for the climate is that it’ll become 2°C hotter worldwide – on average. “Big deal”, I hear the sceptics say, “between January and Juli, we get 30°C difference. How much is 2°C is going to add to that? A mere 6%!”

Wrong.

If the climate was a linear system, the 6% would be correct. But the climate is not a car which accelerates smoothly. It’s a complex system. Let’s look at a really simple complex system, called the Lorentz attractor:

Example of the Lorentz attractor
This is a file from the Wikimedia Commons which I got from the Wikipedia article mentioned above.

The Lorentz attractor is not a perfect example because it’s not actually a system that flips rarely (if you follow the curves, you’ll see that they go back and forth between the two points all the time instead of staying with one side for some time as our climate does).

Still, it’s a good way to visualize what is going on. Imagine that the lower disc with the fat red circle in the middle is the current weather. Temperature is pretty stable around one spot. Now the system gets jolt and starts to move out of the current equilibrum.

Instead of just dropping into the next equilibrum 2°C away, it starts to move in strange patterns. Instead of the temperature simply raising until it’s 2°C hotter, it’s sometimes much colder, sometimes much hotter. And the change is also not a smooth one. The farther the curve is from the two stable points, the faster it travels. Which means that within a few days, the temperature can drop and raise sharply.

Last week, we had temperatures at 900 in the morning between -1°C and 7°C, a delta of 8°C withing a week. And that’s not the lowest and highest overall temperature, it’s the temperature measured at the same time in the morning.

You should start to worry about the 2°C because they mean we’ll see natural disasters like man has never known before while the climate adjusts to the new average.

Or to put it another way: 2°C means that the earth becomes more hot. It means, if the earth was on a stove, someone is adding more heat or energy to the stovetop. If the earth was a pot with water, that energy would amount to 10.471 zettajoules (one zettajoule is 1 times 10 to the power of 21J) which is roughly the same as the energy the whole earth receives from the sun every day. As a number:

10’471’032’000’000’000’000’000J

The energy released by an average hurricane in one second is a meager 6 terajoule which is a billion times less. Imagine what power a hurricane could get from an athmosphere which has so much more energy to lay waste to our civilization?

Links:

Orders of magnitude (energy)
Thermal energy
Global warming
A Java applet where you can play with the Lorentz attractor


Safer Java: No Pseudo Constants

24. January, 2008

Even the pros do it: String “constants” i.e. a string literal (that is something between ” quotes) used as a “constant”.

That’s almost as bad as using integer values as arguments instead of defining symbolic names for them! I mean, the values passed into this API are defined by the standard, aren’t they? Sure, you can pass additional feature names as well but that doesn’t stop anyone from defining those which the standard defines somewhere! So what that not all of them must be supported!

There are several reasons why you should always define string constants when your API need strings as parts of it’s “configuration”:

  1. It makes it much more simple to find possible values for your API.
  2. Auto completion in an IDE is possible and helps to avoid typos.
  3. You can add JavaDoc to your strings explaining what they do.
  4. Modern IDEs can find out where your strings are being used in the project.
  5. You can rename the constant and change the string value, even if you have several constants with the same value!
  6. Even if the literals are read from a file, still define a constant for the string and map the raw string to the constant as soon as possible. It makes it so much more simple to track!

Tip: If you still use Java 1.4, define your string constants in an interface (without any other methods). That allows you to use “implements” anywhere where you want to use the constant names without having to prefix them with the name of the interface:

public interface Constants {
    public final static String A = "a";
}

class Demo implements Constants {
    private String value = A;
}

With Java 5, you’ll use enum, of course (especially because you can then use these “strings” in switch statements.


Laughed Today?

23. January, 2008

Often, something is seriously funny. The world’s best joke, for example, as researched by psychologist Dr Richard Wiseman:

Two hunters are out in the woods when one of them collapses. He doesn’t seem to be breathing and his eyes are glazed. The other guy whips out his phone and calls the emergency services. He gasps: “My friend is dead! What can I do?” The operator says: “Calm down, I can help. First, let’s make sure he’s dead.” There is a silence, then a shot is heard. Back on the phone, the guy says: “OK, now what?”

I also like the European favorite a lot:

An Alsatian went to a telegram office, took out a blank form and wrote: “Woof. Woof. Woof. Woof. Woof. Woof. Woof. Woof. Woof.” The clerk examined the paper and politely told the dog: “There are only nine words here. You could send another Woof for the same price.” “But,” the dog replied, “that would make no sense at all.”

From this article, after reading about it in the Tages-Anzeiger.


Safer Java: Constants First

22. January, 2008

Here is a simple change in your Java development style that will save you a lot of time: When comparing something against a constant, always put the constant first. Examples:

    if (0 == x)...

    public final static String RUN = "run";
    if (RUN.equals (mode))...

That will look strange at first because we’re used to have the constants on the right hand side (from assigns). So what’s the advantage of this? There are three:

  1. It will save you a lot of NullPointerException when using equals().
  2. It’s more readable in big if/else “switch-alikes”, when you compare a variable against a lot of values.
  3. It avoids the accidental assignment as in if (x = 0) (which should have been if (x == 0) … and if you can’t see the difference between the two, you really should always do it this way!) because if (0 = x) generates a compile time error.

The Dreaming Void

22. January, 2008

The Dreaming Void is not an insult but the latest book of Peter F. Hamilton. It’s been sitting in my shelf for quite some time, now, and since I’m sick with the flu, I had a couple of hours between fever attacks to read.

I’m again impressed how Peter can flesh out characters with a few sentences. As an aspiring writer, it’s always both intimidating and relieving to read a good book. On one hand, it shows how much more one has to travel, on the other hand, it shows it’s an effort well spent.

All in all, a good story, maybe a bit confusing because the author skips back and forth between so many characters, storylines and timelines which makes it hard to track what happened in which order and why something is important. It shows Peters talent as a writer how he can manage all these details without ever stumbling. He’s also probably the only SciFi author who can get away at writing a couple of pages how to renovate a flat including buying a new kitchen and a bathroom for it. 🙂

There is one sore spot, though. In one scene, Aaron breaks into a high-security memory-cell vault and gets pummeled by two heavily armed guards. In the process, a lot of damage is dealt to the environment, especially the racks with the memory cells and their valuable content.

Peter, please. No one in their right mind allows heavy arms near valuable, delicate stuff. Next time, put these guards in the corridor before the vault, so they can hammer away at any intruder with a fat, reliable forcefield between them and the cells with takes the excess damage. That would make it a bit more realistic.

Other than that, a great book. Recommendation: Buy.