Software I Use (and why)

Sometimes people ask me what application I use for some task and usually my answers raises a few more questions — some of them also raises eyebrows. This text lists some of my favorite applications and why I chose them. I listed only broad use applications, since rarely someone ask me for specific ones. Last update: 05.Sep.2015

Operating system

Some kind of Linux. I started using Linux in 1998/99 with Conectiva, a Brazilian distro of the time, and since mid 2000 it is my primary operating system. Currently I use Ubuntu in my laptop and Debian in other two other machines at home (one of them turned into a mix of server and media center). Almost all applications listed in this page are available from these and (possibly) any other general purpose distribution. I also have a Windows XP license that came with a laptop bought some years ago that I run confined in a virtual machine when I need to test software or when I really need some application that have no Linux equivalent.

E-mail client

Sylpheed. I usually keep a safe distance from webmails — they are too cumbersome, impractical, slow, bandwidth hungry, and terribly unsafe to be used on a daily basis. I also do not like to trust a remote server to store the single copy of my messages. Despite this, I access my Gmail or Google Apps accounts through the webmail interface (mostly from work, other people's box, or for maintenance reasons) but, thanks to IMAP, I always store the messages locally and delete them from server after a few weeks — a procedure intended to limit the damages in the event of my account being compromised.

Feed reader, RSS/Atom aggregator, etc.

For some of the same reasons I do not use webmails I also avoid online feed readers, so I chose Newsbeuter, a text terminal application which calls itself "the Mutt of newsreaders" and have a lot of reasons to deserve such title — no other news reader matches its configurability and naturality for keyboard freaks like me. I also used Liferea for some years.

Instant Messaging

Pidgin. I tried to give Empathy a chance, but the lack of OTR and other features keeps me from using it.

Text editor (for programming)

For text editing I use Geany, with the Lua scripting plug-in, chosen as a compromise between features, usability, speed, and extensibility, and Vim (specially when editing server configuration files over SSH). Despite this, I am an atheist and do not attend to the Cult of Vi nor the Church of Emacs :)

Calendar, schedule, and appointments

Sked. I always had some troubles with standard software in this area, so I wrote one that works for me. Sked is a mix of a calendar, schedule, braindump, activity journal, and a desktop wiki and brings the bare minimum amount of features I need.

Web browser

Mozilla Firefox with a few extensions like uBlock Origin, FlashBlock, HTTPS Everywhere, and GreaseMonkey. I also run Opera, Chromium, Midori, and Epiphany for testing and experimentation when needed.

I'm a bit strict with my browser privacy configuration. For example, I set Firefox to not use DOM storage, block third-party cookies and clear standard cookies on closing and added some domains to the cookie blacklist — these settings avoids a lot of garbage in my browser and spoils tracking without preventing the session handling. To prevent Flash cookies from being saved I removed the write permissions of the directory ~/.macromedia/Flash_Player. A lot of irrelevant content is also blocked with ad-blocking filters (not just ads, but boring and useless bits too) and I use FlashBlock to restrict the Flash objects loaded by my browser.

MUD client

KildClient of course. If you do not know what is a MUD, look this (in Portuguese).

Office suite

LibreOffice, as it just works.

Version control

The system is, of course, project-dependent but whenever possible I use Git; Almost all of my personal project are now in this system, except the very few ones that still in Subversion waiting an opportunity to be converted and one project which does not fit well in the Git model. My preference for Git comes from its features and excellent technical properties but I have no bias towards other versioning systems nor any problem in mixing several VCS for daily use.

Email and data encryption

GnuPG, just grab my key.

Disk encryption

Currently I use a standard LUKS/dm-crypt to encrypt all the volumes of all my Linux systems, including the root and swap ones, with the sole exception of the very small boot partition. All these tools are pretty fast, natively available in modern Linux distros, and needs (relatively) few configuration. I use this same approach in some of my USB flash drives, but the ones which I may need to use in Windows are encrypted with TrueCrypt. This setup is mainly intended to prevent data leak in the event of a hardware robbery (this never happened to me, but better safe than sorry).

Backup

I have two concurrent backup strategies: the first is to use rsync and some scripts to trivially take snapshots of my data to LUKS-encrypted external disk units and rotate them (the daily copy is kept for a week, the weekly copy for a month and the monthly one for three months); another disk is kept geographically apart from the first two and also gets periodic snapshots. This is a simple system intended to protect me from catastrophic hardware failures and easily detectable accidental file deletions.

A more advanced strategy is required to the long-term backups which protect me from silent data corruption and accidental file deletions that go unnoticed for a long time. It requires ye olde GNU Tar, GnuPG, genisoimage, wodim, and dvdisaster, all wired together with a few scripts, and provides me off-site encrypted redundant backups of all my data. Since this strategy is somewhat more complex and time consuming, it is fully automated with scripts that I run once a month (but the code is too ugly for public disclosure *shame*). For the curious, follows the procedure:

  1. Backup everything in my $HOME to a tar file split in chunks of 64MiB. It is done by piping "tar" to "split", with the right options (ex. "tar -c /home/username/ | split -d -a4 -b64M - backup.tar.part", the manpages have all the details);
  2. Generate a temporary key pair in GnuPG; This key is protected by a passphrase;
  3. Encrypt every chunk of data with the temporary key and my standard GPG key;
  4. Generate a restore script;
  5. Dump the temporary backup key pair to the file "KEY" (the key stills protected by the password);
  6. Generate MD5 hashes for every encrypted chunk, the restore script, and the key file and store them in a "MD5SUMS" file;
  7. Generate a set ISO images with the encrypted chunks, limited to 3 GiB (not 4.2 GiB!) each. The key file, the restore script, and MD5 hashes are included in every image;
  8. Extend the ISO images with error recovering information using dvdisaster. The augmented images will have 4.2 GiB each;
  9. Burn every image to two DVDs and use the MD5 checksums to ensure that the disc was correctly recorded;
  10. Store one set of DVDs in an adamantium safe in a very very deep mine shaft guarded by a fully armed Klingon squad. The other set is kept inside a Mithril container in the Mount Doom surrounded by orcs (ok, this last step stills unimplemented).

The restoration procedure that I (luckly) only executed in tests and simulations implies in individually decrypt each file, concatenating its output back into a giant tar archive that is later passed to GNU Tar to restore the original data. This procedure is automated with a script generated by the backup script.

This approach has several advantages:

The drawbacks are that this procedure takes a long time to run and needs some DVDs. A compromise between security and time, I execute it only once a month leaving some responsibility to the first backup system. To minimize the effort, I run the script at night and burn the generated ISO images to DVDs in the following morning. Some people will call me paranoid after reading this, but I understand =)

Music and video related programs

I usually listen to music in Rhythmbox and watch movies with MPlayer, VLC, and Totem. For music files tagging and organization, I use Easytag (it is a bit outdated, but works well).