Useful Tools
Lightning is one of the most powerful extensions for Mozilla Thunderbird. The standard calendar and task list are handy enough, but with a little bit of tweaking it can sync with a number of online services which makes it even more powerful.
There are a handful of tutorials for syncing with Remember the Milk, but the extension listed is no longer maintained and is unavailable on the Thunderbird extensions site (the old cache is available here).
Thankfully there is a slightly updated version of the plugin that works with the latest version of Thunderbird.
Please note: I didn’t write this plugin, but found it on the cached page and am sharing it here as I found it useful.
Install the extensions
Before you can start you’ll need to install Lightning and the updated sync plugin which can be downloaded here (mirror).
Once it’s installed, setting everything up is a breeze.
Subscribing to the calendar
Open a calendar tab in Thunderbird and add a new calendar (right click on the sidebar and select “new calendar”). Add a network calendar, select the “Remember The Milk” provider, and enter a few details.


Once this is set up, you’ll have a single task that contains details on how to authorize the plugin. Go to the URL in this message and allow the plugin to access your account. Once you see the confirmation screen, head back to Thunderbird and mark the task as complete.

If everything worked, you’ll receive a welcome popup in Thunderbird and your tasks will start to sync!
Related posts:
There was a thread on Hacker News lately from someone that made their first sale. I mentioned that my email client was set up to play a sound when a sale is made. This was easy to set up in Outlook 2007, but the default installation of Mozilla Thunderbird doesn’t support playing sounds for filters.
All is not lost though. There’s an addon called “ToneQuilla” which fixes this problem, so you can play all the sounds you want!
Here’s an example of how to set up a simple filter that plays a custom sound when a BMT Micro affiliate sale is made.
Creating the filter
Look under Tools -> Message Filters. Click “New” button to open the filter creation dialog.

Click image to view full size
Set the filter to run on messages that have a subject with “BMT Micro Affiliate Order” in them. You can also add extra conditions for other sales emails, depending on who emails you.
Under “Perform these actions”, add a “Play Sound” action and link to your favourite sound. There’s plenty of cash register sounds at freesound.org, although personally I prefer the cash register noise from Sonic the Hedgehog :)
Related posts:
Even though hard drives are getting bigger and Internet connection speeds are increasing at a dizzying rate, not everyone has access to the latest technology. The smaller you can make your software, the more you increase the amount of people that can play it – thus increasing downloads.
Use the Right Tool for the Right Job
If you’re compressing images, choose the right format for the right job. PNG is a lossless format that is much better at compressing pixel art images than photographs. JPG can leave a lot of “artifacts” on these kinds of images, and is better suited for compressing photos or painted artwork. Choosing the right format not only shrinks the size of your application, but helps to maintain the quality of the final product.
Shrink Executables and Libraries
You can generally shrink you .exe and .dll files by around 50% by using UPX, with no discernible change in performance.
Note: Always compress executables after icons and resources have been added, as adding resources to a compressed executable can result in programs working strangely (or not at all).
» Get UPX
Shrink Images
If you’re using PNG images, pngcrush is an essential application to have installed. It has many different levels of compression available and can generate considerable space savings. Perhaps the most useful feature is the “brute force” option, which will try over 100 different combinations to create the smallest possible image file.
» Get pngcrush
Shrink Music and Audio
Using OGG or OXM for music can generate large savings when compared to raw formats such as WAV and XM. OGG is well suited to sound samples and music, and can make a huge difference if the correct quality settings are chosen. It’s usually best to try a few settings and listen to the results to see which quality to use, as some qualities work better for different kinds of sounds.
OXM is a compressed version of the XM music format, a MIDI like format that uses its own samples. The OXM format compresses the samples using the OGG codec, and can easily shrink a track by 70% or more with virtually no audible differences.
OggEnc is a command line tool for encoding OGG files, whereas OggDrop is a GUI application that supports drag and drop. OggMod is a tool for compressing XM files into OXM.
» Get OggEnc / OggDrop | OggMod
Pack Your Data
If your game uses any kind of custom data definitions, such as text or xml level definitions, you can generate extra savings by compressing them. There are many different compression algorithms, and some are more suited than others. Run Length Encoding (RLE) works well for data that has large areas of sequential data values, but isn’t as effective for other formats such as XML. There are plenty of freely available compression libraries, and including zlib and unrar, and most languages have a wealth of examples to look at.
Automate the Process
Manually compressing all of your media can be a slow and tedious process, and can generally be left until the game’s release. At the simplest level, you can place all of the commands into a Windows batch file and run it once you’ve compiled your software. Other options include using build software, which is covered in more detail in the recent build tools article.
Related posts:
This is a simple change that can make using the Windows command line much easier. Adding a directory to the Windows PATH will mean Windows will search the directory when a command is entered. The main reason for doing this is that it acts as a shortcut for common applications you may run.
For example, instead of typing : "C:\Program Files\SomeProgram\Bin\MyProg.exe" --some-arg to launch an application, you can type MyProg.exe –some-arg. This has three main advantages:
- Looks Neater – This can be important if you’re using batch files. Long lines are hard to read, so shortening things is a good idea.
- Less Typing – Speaks for itself. If you use the command line or batch files for any amount of time, you’ll appreciate how much easier it is to use if you’re not typing full paths for your tools.
- Portable – Perhaps the most important detail. Not using hard-coded paths makes it easier to port your batch files to other machines.
Note: Be careful when editing your path variable, as you could render some programs unusable if you make a mistake. Also remember that changes won’t take effect until you restart the console.
Editing the Windows Path Variable
1) Right click “My Computer” and select “Properties” OR goto Control Panel and select “System”. This will open the “System Properties” window.
2) Switch to the “Advanced” tab, and select “Environment Variables”.
3) There are now two options. You can modify the global path variable, or add your own to your personal profile. If you want all users on the machine to have the same shortcut, add it to the global path, otherwise use the local one.
a. To modify the global path variable – Find “Path” or “PATH” in the lower window (marked Global variables). Select Edit. Add the path to your application. Separate paths with a semi-colon (;). Add trailing slashes if you wish.
b. Either modify an existing one using the tutorial above, or select “new”, then enter “PATH” as the name of the variable and enter the path value in the environment value section.

Modifying the Path Using the Command Line
If you’d like to do this using the command line, you can use the “setx” command included with Windows XP service pack two. To add the directory “c:\program files\SomeProgram\Bin” to your path, use the following:
setx path "%PATH%;C:\Program Files\SomeProgram\Bin"
Remember to include the %PATH% variable at the start of your setx command so that you’ll keep existing path names.
Related posts:
Creating software is a time consuming business, and it’s important to always be on the lookout for ways to reduce the amount of time spent on less important tasks. The process of actually building software (creating the finished distributable binary) is one such area that can be optimised. Opening up your IDE and hitting “compile” might not seem particularly time consuming, but it’s only one part of the build process.
To get you started, here’s a short list of tasks that can be automated:
- Compiling the executables and dependent libraries
- Packing media
- Creating an installer
- Uploading files to an FTP site
- Checking out files from a repository to be built
- Sending an email about a finished build to other developers
- Creating the application documentation / Converting it to HTML
- Testing the software
The benefits of using an automated build system include:
- Saves time – Run a build and leave the computer to do the work whilst you take care of other tasks.
- Documents the build process – If a build requires several steps before being completed, a build file will document this process for you. This is useful if templates need to be generated or options need to be set before a build is ready.
- Improves quality – As well as automating the creation of a binary package, tests can be automated. This saves a lot of time on the development end, as tests can be constantly run so you’ll quickly find out if the software’s behaviour has changed.
Simple Automation – Batch Files
The simplest way to automate many of these tasks is to use batch files. A batch file is a list of tasks to be run, usually in the form of a list of applications with some command line parameters. Using a few simple commands it’s possible to run many tasks in succession without any user input, leaving you to do more important things. Microsoft.com has a is a simple guide to batch files which is a good place to start.
As useful as batch files are, there is only so much they can accomplish, and there may come a time when something more complex is required for your project. Thankfully there are many build systems available
Build Tools
There are plenty of build systems available, and several of them are targeted at certain platforms or languages. It may take a while to become comfortable with a platform, but the savings are worth it.
- GNU make – A standard system used by many Linux projects. It consists of a plain text file that lists targets and dependencies, and features many advanced features such as automatically determining which files require rebuilding.
- Apache Ant – Ant is designed as a replacement for make, and uses XML files to describe the build process instead of text files. It’s written in JAVA, and is completely portable.
- nAnt – nAnt is a .NET based version of Ant, and although it is not exclusively for .NET developers it has many features that make it useful for building .NET apps.
- A-A-P – A-A-P is a portable build tool that uses text-based “recipes” to compile and distribute software, but it can also be used for other tasks such as publishing websites and generating files from templates.
- Visual Build Professional – VBP is a commercial build tool that takes a more visual approach to creating build scripts. It integrates well into many Microsoft IDEs, but also supports other languages such as Delphi and Java.
- BlitzBuild – A free build tool aimed at BlitzPlus and Blitz3D developers.
Breaking the Task Down
Most build scripts will contain more than a single command, so it is useful to break the build script into different groups or “targets” that can be executed individually. This is particularly useful if building of data files is included, as it can be used for art or music to be built independently of the main application. Many build platforms also allow targets to be called from other targets, which effectively breaks a build script into a set of functions that can be executed in any order.
Common targets include compilation, installation and cleanup, but the choice is entirely up to the developer. It may also prove beneficial to include a separate target for generating debug versions of the application which can be distributed as a troubleshooting option.
Related posts: