Various Rants

= File Managers =

I wonder what is wrong with the developers of open-source file managers. Most of them neglect the basics.

When evaluating a file manager, my checklist is as follows:


 * It should be able to display 2 directories on the same window, like Norton Commander did.
 * Compressing and decompressing zip files should be easy.
 * Whether it is portable (Linux, Windows, Mac).
 * It should not litter visited directories with automatically-created files. For example, Microsoft Windows tends to create thumbnail cache files named thumbs.db, and KDE's Dolphin creates little .directory files.
 * Ctrl+L should take you to the text field where you type the current path. Every body follows this convention: Dolphin, Firefox, Google Chrome, even Microsoft Internet Explorer.
 * The text field with the current path should implement autocompletion. Instead of offering just the one closest file or directory name, all possible names should be presented in a drop-down list, like Firefox does. The offered items should be matched in a case-insensitive fashion.
 * You should be able to search for files recursively with a case-insensitive text filter.
 * There should be a way to define your own commands (calling shell scripts on selected files or directories) without manually editing configuration files.
 * It should scale cleanly on HiDPI displays.
 * I just want a file manager. It should not take over repainting my desktop icons, and it should not require big dependencies from some desktop environment I do not want.
 * It should be properly maintained and have a working mailing list and bug tracker. As a bonus, the project should list its more prominent shortcomings. I don't see why my users should have to learn about long-known problems themselves.
 * It should not be developed in a multithreaded manner. It is very hard to get multithreading right, so you end up with occasional hangs and crashes. Besides, maintaining such software is very hard. A file manager should not need much CPU performance, so a single thread should suffice. If a remote PC becomes unresponsive, the file manager should not hang until the connection times out, but this should be coded as asynchronous operations on the main thread. At the very least, interaction with the UI toolkit should be single threaded. Most UI toolkits are not thread safe. For example, GTK+3 is no longer thread safe, so anybody porting a multithreaded application from GTK+2 has a problem.

All file managers I know not only fail several of these criteria, but they also come with weird quirks. And I have tried many of them: Nemo, Caja, Xfe, Double Commander, muCommander, trolcommander, GNOME Files / Nautilus, GNOME Commander, Krusader, Tux Commander, Worker, Thunar, SpaceFM, PCManFM, Gentoo File manager and even rox-filer.

= Mozilla Thunderbird =

On one side, I am grateful to Mozilla for developing and maintaining Thunderbird, the e-mail client I normally suggest, as free software.

On the other side, I said 'suggest', and not 'recommend', because it is not quality software. It is full of quirks and problems.

Most of the issues I have encountered have been there for many years. Every time I find a new quirk, somebody has already reported it like 12 years ago.

Mozilla is not interested in fixing Thunderbird to please their users. In fact, they have tried to get rid of it a few times. Mozilla's bosses seem to be more interested in Firefox, because it brings money, and in some cool and morally sound projects that come and fade. Mozilla's developers seem to be more interested in developing Rust, yet another programming language. OK, I am probably not being fair here, but this page is titled "Rants" and not "Serious Journalism".

I suspect that Mozilla is short of money, and I can understand it. I am prepared to donate, but only towards fixing these bugs. However, there does not seem to be a bug bounty program to that effect.

I am not the only one that has noticed. For example, this guy describes the same situation in his blog article IMAP4 NOTIFY addon for Thunderbird!. But he also highlights another reason behind this state of affairs: "Webmail is good enough for most users and many people don't appreciate the advantages of downloading email to the safety of your own computer, the convenience of being able to work offline and the speed of local operations."

I found many issues with Thunderbird over many years. These are the most prominent ones that keep bugging me:


 * Mozilla is not honest about Thunderbird's shortcomings. If they were, there would be a long list of known problems (a prominent Caveats section in the user documentation), so that users do not have to learn about long-known problems themselves the hard way.


 * It crashes occasionally under Ubuntu MATE and Xfce. I think it has to do with waking the laptop up while Thunderbird is minimised, but I am not sure.


 * The e-mail search feature stops working properly every now and then. The sole existence of a dedicated support article titled Rebuilding the Global Database is a strong indication that this is a common problem. However, the article's title does not reflect the problem in a way that most common users would understand, and the manual workaround is also not suitable for most laymen. An honest title would be "When the E-mail Search Feature Stops Working Properly", and an acceptable workaround would be a "reindex now" button on the user interface. In any case, the search indexes should not corrupt so easily, and even if they get corrupted, Thunderbird should realise automatically and prompt for a reindex.


 * The plain text e-mail editor is quirky. It is quite annoying. The '>' quotation marks confuse the editor, and you have to jump around in order to delete such lines. Line break handling is defective too, text lines do not flow properly and you are forced to scroll sometimes. E-mails are often sent with line breaks in the wrong places.


 * No mail database encryption. I guess Mozilla is going to wait until all devices have encryption at file-system level. But there still are many scenarios where a password protection would be desirable. For example, on shared computers used by IT laymen, or on the Microsoft Windows Home edition, which lacks built-in encryption. Microsoft Outlook has offered password protection on local PST files many years earlier than file-system encryption became common.


 * Sometimes it is not easy to delete big embedded images from an e-mail. There is an uncomfortable workaround with option "Show all body parts".


 * Sometimes sending an e-mail does not timeout, or you lose a sent e-mail. It may be that my e-mail provider is not behaving properly, but Thunderbird is not completely robust in the face or network or protocol problems.


 * The underlying e-mail database is probably not robust and I fear losing e-mails. Thunderbird uses the Mbox format, which does not inspire confidence in the face of a system crash, and does not shrink automatically (it needs a manual 'Compact' every now and then).


 * Multilanguage support is quirky.
 * You need an extension called "Automatic Dictionary" to maintain sanity.
 * If you want to switch language manually, you have like 21 variants of Spanish in the pop-up menu.
 * I did not find an easy way to export any words I added to my personal dictionary (for backup purposes), or to delete some I added by mistake.
 * You cannot change the date format in Thunderbird. You have to change it system wide, which may not be what you want. In the integrated Lightning calendar, you cannot select another date format you like in a particular view.


 * Deleted e-mails are only marked as deleted and hidden. The corresponding expunge comes later, at some point in time, so you can still see the deleted e-mails with a web interface like Roundcube. This may not trouble most users, but has created some problems for me. I fail to see why a normal user has to learn what an expunge means. If deleting an e-mail is supposed to move it to the trash folder, I do not understand why a further hidden copy must be kept around.


 * There is no easy button to backup the e-mail database. This is a basic function, and you are forced to search for an extension that works with the latest Thunderbird version, which is sometimes not as easy as it sounds. Most users need help to do a simple backup.


 * Support for IMAP NOTIFY is not implemented yet, so Thunderbird only picks new e-mails up instantly if they land on the "inbox" folder. Should the e-mail server missclassify an e-mail as spam, or should you have any server-side filters in place that redirect e-mails to other folders, then you will not see those new e-mails until the next poll interval, or until you click on the appropriate folder (like the "spam" folder).

The trouble is, I found no good replacement for Thunderbird yet. I have looked at many other mail clients: Claws Mail, Evolution, KMail, Geary, Sylpheed, and a few others, but all of them seem to have obvious issues too.

= NetBeans =

I like Java in general. It is a dangerous statement to make nowadays, because all kind of language fanboys will immediately ridicule or badmouth me for such a candid opinion. But I am not going the let the usual hordes make me hide my honest opinions.

Yes, Java has issues. And Oracle some more. I'll write a rant about it some other day. But today's rant is solely for NetBeans.

Apache NetBeans deserves to die. It has made me waste too much time and emotion. NetBeans has already lost most of the sizeable mind share it used to have, and will probably slowly fade into oblivion.

Having said that, it is a contradiction that I am still using it to develop a couple of disk test tools that I constantly use. I even enjoy programming with NetBeans. Compared to writing C++ or Perl in Emacs, such a comfortable IDE is a great step forwards.

If you are old enough, you may remember Borland Delphi or Microsoft Visual Basic. They were ahead of their time, especially Delphi, and they still are in many aspects. We are talking year 1995 here.

The only chance for Java to succeed on the desktop is to have some IDE that 1) offers the same level of comfort and productivity to the casual programmer as Delphi, and 2) is free of licensing costs. Even 25 years later. For us humans, easy of use is paramount, closely followed by the magical incantation "free of charge". If something is easy, actual quality does not matter much: success is guaranteed. And success on the desktop is a good start for success all over the place.

NetBeans could have achieved that goal. But the NetBeans community has lost the bearing.

Say you want to write a desktop application. The combination Java + NetBeans sounds appealing: write once, run everywhere. Design your application forms simply with the mouse. The result is a single, small JAR file that fits in an e-mail. And you can also generate a smallish Java runtime bundled with your application that will run on Microsoft Windows PCs, which still are the majority in the business world, without having to install Java first.

But this simple idea does not work in practice. And NetBeans bears a lot of the blame.

If you used an older NetBeans version, it went like this: create a new Java Swing application, and then click a button to debug it. So far so good. But then, there is no way to create a single JAR file. You have to start searching the Internet and manually modifying some Ant XML file. Generating a bundled Java runtime did not work well either.

Say you have to write an application that supports 2 languages, like English and German. There is no tool to help you keep the translation resources in sync. And loading resources in general is not straightforward. You will have to deal with resources anyway, because your application surely needs at least some icon or picture. And so on. It's death from a thousand cuts.

But say you have survived this long. Say now you have 2 applications instead of just 1. Surely you want to share some code between them, so you move some .java files to a common library, which is then a separate project. And that common library needs perhaps a precompiled library, like JNA. Because your application needs to access a serial port, and Java cannot do that directly still in this day and age. That would be cut number 1001.

No problem, you just add the JAR dependency to the shared code project, and be done with it. But such dependencies are not transitive, so all other projects that depend on your shared code project need to explicitly add that precompiled JAR to their own direct dependencies. And that does not scale.

Surely that is all old stuff. So let's jump forwards to NetBeans 12, and create a new Java Swing application. But now the old Ant-projects are no longer recommended. The new recommendation is to use Maven.

Maven definitely needs a rant of its own, so watch this space. But let's carry on with NetBeans.

The first thing you will notice is that starting your project under the debugger is even slower than before. And you thought that could not be possible. Of course, there is still no way to generate a single JAR file, so this time you will be searching the Internet again and hacking not Ant, but Maven XML files. A great improvement indeed. If you want to bundle a Java runtime, you'll need to write your own scripts.

Fine, I'll try something that not many other languages can do: profiling. After all, we are running managed code on a JVM. Click on the "Profile" tool bar button to start. Nope. You need to configure first. Click around, try the most obvious ways to get profiling started. Nothing, it just does not work. I could search the Internet again, but I cannot take this anymore.

This no path to world domination, guys.

I think that is enough for you to get the picture. I could go on and on. Delphi was blazingly fast, both the IDE and the generated application. Delphi had a two way editor, so manual edits in the generated code were reflected on the visual designer. And you could add new visual controls to the toolbar with plug-ins. Etc., etc.

NetBeans hasn't improved the visual designer for years, or any of the tools to develop standard desktop applications. It's all the way it was back then, when those tools were introduced many many years ago.

You may be tempted to ditch Java Swing and switch to JavaFX/OpenJFX. But I wouldn't, if I were you. Just wait for my next rant on JavaFX.