My favorite applications (for Windows)

02 April 2010

For the last ten years, I was continuously looking for applications helping me to efficiently get things done on my computer. I find it difficult to find applications that really please me, as there are so many of them. I found out that the best way for finding good, user friendly and often free apps is by reading favorite applications listings. Those helped me a lot, so I thought it might be helpful to publish my own. I've included only the applications of which I am 100% happy, and I did my utmost to avoid excessive use of superlatives.

Note that I'm working on Windows (currently Windows Vista), so most of the software listed below will only run on Microsoft Windows.


  • jEdit (free), a text editor with support for a multitude of text formats (such as HTML, XML, C++, etc.). There are two essential plugins: RecentBufferSwitcher allows you to switch easily between the most recently used files (think of Windows' alt-tab functionality), and OpenIt allows you to rapidly open a file by name. Together with these two plugins, I use it for editing my task lists.
  • Firefox (free), a simple and lightweight web browser.
  • Autohotkey (free), a tool for remapping keyboard commands. I use it for example to disable the capslock key, to look up a selected text in Google, for quick-lauch shortcuts for applications I frequently use, for quickly writing the current date, etc...
  • MediaCoder (free), an audio and video transcoder application that has support for virtually every multimedia file format.
  • IrfanView (free), a fast and lightweight image viewer that can read almost every file format.
  • IZArc (free), a file compression tool that supports virtually every file archive format.
  • Comodo Firewall (free), a simple but powerful Firewall.
  • WinSplit (free), a tool to quickly move and resize windows on screen. This is very handy to ensure texts are never displayed with too much words per line.
  • SMPlayer (free), a video player that supports almost every file format.
  • Autoruns (free), a tool that shows a comprehensive list of all applications that are started upon Windows startup.
  • MediaMonkey (free), a user friendly audio player. Its number one feature is that it makes the file system transparent: when you move a song from one folder to another in the song catalog, it is also moved on the underlying file system.
  • Visual Studio (expensive, but there is a free edition), a software development IDE for ao. C++ and C#.
  • Exact Audio Copy (free), an audio CD copier.
  • TTCalc (free), a lightweight calculator application.
  • FeedDemon (free), an RSS newsreader application.
  • Open Office (free), a free alternative to Microsoft's office.
  • WinAlarm (free), an alarm and reminder application.
  • Duplicate Cleaner (free), finds duplicate files on your hard drive and lets you easily remove them.
  • ExactFile (free) calculates hash values of your files. This is very helpful for checking the integrity of backups.
  • Lingoes (free), a multi-language dictionary application.
  • John’s Background Switcher (free) changes your desktop background image every now and then.
  • VirtualBox (free), a virtual machine controller.
  • Wireshark (free), a network packet sniffer.


  • XYplorer (50€), a replacement for Windows Explorer. It is fast, extensive and has user friendly search functionality. It has very good "favorite directories" features, remembers a lot of "recently used" things, is very customizable. It even has timestamps that can be expressed as age (for example "3 days old").
  • Second copy 2000 (30$), a reliable, simple and yet versatile backup tool.
  • Fineprint 2000 5.31 (50$), a print preview application, which makes sure you know in advance what your printer will output.
  • Beyond Compare (50$), a file and directory comparison tool.

Two fundamental user interface guidelines

12 March 2010

(1) Common actions should require as little effort as possible and should be obvious; on the other hand, actions that are rarely needed can require a lot of steps and can be hidden behind menus and dialogs. To be able to do so, you should always describe what the user will want to do with the application by listing use cases.

(2) A user interface should be self-documenting. The manual should be integrated in the application's dialogs and menu's, as users don't read separate manuals. For example, the keyboard shortcut should be shown in the menu item representing the action it is associated with.

Disadvantages of code reuse

23 December 2009

Code reuse sounds good in theory, because people don't want to reinvent the wheel. The modern line of thought is that it is always a Bad Thing to write a custom implementation of a component that is supposedly available as a ready-made product. However, writing your own implementation has big advantages over reusing a ready made third party module:

  • The features match your need exactly.
  • You have full control over the roadmap. Bugfixes and extensions can be done immediately if necessary.
  • Evaluating a ready made module is very time consuming. Furthermore, some shortcomings will surface only after extensive use, when it is too late to switch to another product.
  • There is as little code to understand as possible, as the implementation matches your case exactly. This is a large benefit when you need to write an extension, as there is less code to understand and to modify.
  • Extending a ready made module causes a big communication overhead (discussions with the developers maintaining the ready made module). On the other hand, branching the code is untempting because you won't be able to reap benefits from bugfixes and extensions.
  • All previous remarks assume the ready made module is open source. In most cases, when using a closed source module there is far too little documentation available. This is especially true with frameworks.
  • Also in the case of closed source, you are fully dependent on the third party supplier. If the manufacturer goes bankrupt, or simply stops support and updates, you'll be forced to find another component, probably breaking backward compatibility.
  • The license agreement may be too strict.

There certainly are situations in which code reuse is the best option, but it is not always the best choice. Reuse in software development is certainly different from the reuse of bricks when building a wall, for example; or from reinventing the wheel when designing a car.

Coding with performance in mind

03 December 2009

Premature optimization is a pure waste of time. However, it is wise to think about performance with every line of code you write, because a lot of performance gains come at almost no cost. Furthermore, performance tuning is very time consuming.

Silverlight's second mover advantage

20 November 2009

In Silverlight vs. Flex, Jon Galloway talks about Silverlight's second mover advantage:

"Just as Microsoft built a "better Java" with .NET, they're able to look at how you'd design a rich internet application framework from scratch. They have the advantage of knowing how people use the web today, something the inventors of Flash could never have accurately guessed. Flash can add features, but they can't realistically chuck the platform and start over."

This is indeed a very big advantage, and Microsoft certainly knows how to market a new product. Therefore, I wouldn't be surprised that Silverlight will overtake Flex, just as their .NET framework did with Java.

A small scale backup strategy

18 November 2009

Everybody knows that making backups is very important; imagine for example loosing your entire archive of family photos. Regrettably, coming up with a good backup solution is rather difficult. For example, when you make sure you've got every piece of valuable data backupped to a CD or a DVD, you might be surpised to find that your DVD went corrupt by the time you need it. Or when you make backups to an external hard drive which is permanently attached to you computer might be partially deleted by a computer virus. Also, as both your hard drive containing the original data an the one holding the backup are connected to the same machine, chances are they are both destroyed when a lightning stroke hits your house. Or what will happen if a burglar takes your PC?

These are only a few examples of what can happen with your precious data. I have always tried to secure my personal data, but it took me a long time to come up with solution I find exceptable. I didn't find much good solutions on the internet, so I decided to publish my personal backup strategy.


In short, it comes down to copying your original hard disk to two external disks alternatingly. One of both disks must be stored in a different building than your original data; in other words: it must be taken "off-site". MD5 checksums of all files are stored, so you can be warned when files are changed unwantedly, for example because of degradation of your backup medium.

Some rules to follow

  • Use 3 hard disks: 1 original and 2 backups. The disk holding the original can be built into the system; the two backups must be external hard drives that can easily be taken off-site. Use the smallest disk as the original.
  • Keep all data that needs to be backed up on a single disk (the "original"). This simplifies the configuration of the backup system.
  • Only connect the backup disks to the system to make backups. Keep them disconnected the rest of the time.
  • Always keep one of both backup disks off-site. Make sure you never have both disks in the same building at the same time.
  • If necessary, encrypt both backup disks using TrueCrypt. This makes it easier to store them off-site.
  • Make a backup every once in a while; for example each month.

Backup steps

The following steps have to be repeated every time you want to make a backup:

  • Check the MD5 checksums of both the original and the backup disk (for example using ExactFile). This detects medium degeneration.
  • Use a backup tool to copy the files from the original to the backup disk (for example using Second Copy). Make sure old versions of changed files are kept for a while.
  • Eliminate duplicates of big files between the backed up latest version and the older versions (for example using Duplicate Cleaner). Only delete from the older versions directory.
  • Create MD5 checksums for both the original and the backup disk. Store the checksum file on the disk they describe. Only include the newest versions of the files.
  • Compare the newly generated checksum files between the original and the backup (for example using Beyond Compare). This ensures the backup was made correctly.
  • Take the fresh backup off-site and bring the other backup disk back home. This way, there is a new version on-site (on the original disk) and one off-site.

Which problems does this solve?

  • Current hard drives should provide sufficient storage space to store all valuable data. Only movies can fill this amount of disk space.
  • As all data is stored on a single disk, there is no need for maintaining an index of what is stored where. The directory structure serves as documentation.
  • The backup process requires only little effort, and it can be run at night.
  • If one of the hard disks crashes, there are still 2 other copies.
  • If one of the disks slowly degenerates, you are warned because some MD5 checksums failures will occur. When this happens, it is time to replace the disk.
  • If a large file has small errors on all 3 copies, it might still be possible to reconstruct the original file (unless the errors are at the same location in the file).
  • In case of location dependent storage medium loss (fire, flood, loss, theft, electrical surge, ...), there is always a copy on the other location.
  • In case of softwarematic modification and deletion (files modified/deleted by mistake, computer virus,
    ...), the file can be recovered from the backup disks. Because the disks are disconnected, the virus cannot mess up the backups.
  • Bugs or malconfiguration of backup software will be detected when comparing the MD5 checksum files.
  • Because previous versions of the files are stored, deleted files can still be recovered, even if the deletion went unnoticed for a long time.
  • Because the backup disks are encrypted, they can be safely stored at the office.
  • When the password of the backup disks is forgotten, there is always the original copy. However, this situation should be avoided.
  • The disk to be used for the next backup is always ready at hand (that is not off-site), so it is possible to immediately start making the backup when it springs to mind. The freshly made backup disk needs to be taken off-site only afterwards, so it requires no planning.

My favorite books on software development

13 November 2009

I like favorite book lists, as it helps me to discover interesting stuff to read. Therefore I'd like to publish my own list:

  • The Pragmatic Programmer (Andrew Hunt & David Thomas) gives a very good list of guidelines that apply to software development in general.
  • Code Complete (Steve McConnell) provides a very good list of tips on how to write program code, without focussing on a specific programming language.
  • Getting Things Done (David Allen) teaches you how to deal with the thousands of small tasks you need to accomplish in your day-to-day job as a software developer. Although it is not specifically geared towards developers, it is definitely an invaluable aid, as software development typically involves a very lare number of small tasks that need to be done in a prioritized fashion. For example: which new features to implement, which bugs to fix, which parts of the code to refactor, which parts of the code to rest or retest, etc...

Making cross-platform web applications will remain hard forever

In his article, Bruce Eckel states that "CSS, HTML and JavaScript will never work without a lot of cross-platform pain". I fear he is right, especially when trying to accomplish a GUI, which HTML nor CSS where ever intended for.

A new blog is born

This is my first post on my sparkling new blog on computer related topics. I don't intend to post frequently, I just needed a place to ventilate my opinion and post an article every now and then. So for what it is worth: happy reading!

Dimitri On Software Development is powered by Template by Templates para novo blogger.