When to use log.isDebugEnabled?

One of the first coding-related question my partner asked me when I joined my current project: do you use log.isDebugEnabled()? This is a recurring question, and my answer is generally the same: “No.” Still, there is some nuance in this no. I will try to get to the point today and forget my usual digressions.

Better comparison of Java implementations

I already posted a class to enable the comparison of Java method implementations. However, this was a draft method rather than a true solution.

Today, I come back with a(n almost) valid solution. You can get it on my Github repository: labs-java, implementation-comparer branch.

Basically, it will be able to compare several implementations of any class within its context, rather than the previous solution which forced you to rewrite the methods within the comparer.

Let us imagine you have a Foo class with a bar(String arg), but you suspect this method can be written in a better and more efficient way, but you want to ensure both methods return the same results and make sure which methods is the most efficient.

You will have to write the variants for your method, and suffix them with an incremental index (bar1(String arg), bar2(String arg), …). Then, you will call the implementation comparer with some arguments you wish to test:

This will output something like this:

The time checks are performed only if the info log level is above INFO, and the result comparison displays the details only on debug level, but the compare method returns true if all methods return the same result, and false otherwise.

This comparer can be really useful when you are refactoring or even included in unit testing if you find a use for it.

For more details, you can have a look at the class itself. It is really not that complicated and I made it an obligation to have documented code nonetheless.

As a reminder, you can also have a look at my my previous draft version, which came with more explanations. The main principle remains the same, only with more freedom.

And if you need help, you can always ask below, as I will not go further into details right now.

For the logging of tables, I used Alcibiade’s asciiart library.

All this just in preparation of my next post… And yet, I am quite satisfied with myself and feels this will come in handy next time I refactor…

Comparing multiple directories (Java)

Several tools enable the recursive comparison of directories, but most of them allow for the comparison of only two directories (like my favorite, WinMerge). KDiff3 goes as far as comparing three files or directories.

As for me, I needed to compare up to five directories. As a consequence, I implemented my own algorithm. Read for more information.

ASETNIOP, the next step of Dvorak keyboards?

The first Dvorak keyboard (and all the variants that appeared afterwise) were designed to avoid wrist injuries by reducing the distance your fingers have to move when typing. Still, movements were still required.

ASETNIOP might be the same philosophy, just one step further: when using it for typing, you do not need to move your fingers anymore.

Localization in Java

Localization, or internationalization, is important in most languages. What good is an application if it is restricted to your own country because you speak a far from widespread language? And as most languages, Java offers a mechanism to implement it quite easily. I will review here the basics, using Daily Tasks as an example.

Minuum is a tiny predictive keyboard for Android

Are you tired of losing half of your smartphone’s screen to the keyboard? Well, here comes Minuum.

Minuum shrinks the keyboard down to no more than a near-single line, and use a predictive algorithm to ease the text input. If the tiny version is just too tiny, the latest update lets you come back to a full-sized version.

Minuum on Google Play (\$4 or €2.90)
Via Lifehacker

Simplify boolean expressions using WolframAlpha

When browsing through legacy code, or even when writing my own, I sometimes come across tests which seem uselessly elaborated, and in those occasion, I cannot resist the temptation: I grab a paper and draft some boolean algebra. The most time-consuming part is usually drawing my truth table to make sure I made no mistake while simplifying my tests…

A draft of boolean algebra simplification I wrote two years ago…

I just thought I would write a program to perform those simplifications. Coding basic simplification rules from boolean algebra seemed quite simple if I used Tom, for instance. Never found the time though. Luckily, if you wish to skip the paper part and get quicker results, you can use WolframAlpha