Phil Holmes's Software Page

I spend far too much of my time writing software. I now use C#/.Net almost exclusively, but before that used a combination of C++ and Visual Basic.  I spent a while using COM to drive Microsoft Office programs - especially Outlook combined with the WinInet interface to send stuff to the Web.  The main output of this is an Outlook add-in that allows Microsoft Outlook users to manage attachments better, thus reducing (a) the size of your inbox and (b) the number of hassling notes from IT support.

My most recent addition to the page is a Noteworthy User Tool that lets you export Noteworthy files to LilyPond.

I've also written a brief tutorial on how to use WinInet from Visual Basic and adapted some information on how to get Exif data from JPEGs from digital cameras using C#.

Finally, my weather software can output data in XML format, so I've written a brief introduction on how to format this using XSL stylesheets.

Noteworthy to LilyPond converter (NWCTXT2Ly)

I have now put my converter (plus some reasonably lengthy notes on how to use it) on its own page. This can also serve as a replacement for NWC2Ly. Please let me know of bugs/enhancement requests at the Noteworthy Forum.

FTP Client

I run a weather site, and wrote this so that I can retrieve images that have been uploaded to the site, for the sake of backup. Its main feature for this purpose is that it can be configured not to download files that are already in the target directory. Download the executable (called HolmesFTP.exe) here.

I run it from a batchfile using a line typically looking like the one below:

"c:\Program Files\HolmesSoft\Holmesftp">ftpgif.log -d -s username password "C:\FileDownload\gifs" "htdocs/HomePage/Weather" "*.gif"

If you run the program with no parameters, you will get the following information:

usage is -u/-d -o/-s server username password "localdir" "remotedir" "filename"

-u for upload to server, -d for download from server
-o to overwrite existing files, -s to skip copying existing files
localdir\file must be in inverted commas
filename is used for local or remote file, depending on upload or download
use * for wildcards

In the batch file, the >ftpgif.log redirects output to a log file, so I can check what has gone on later.

In this example, I am downloading all gif files from the remote directory htdocs/HomePage/Weather on the server to the local directory C:\FileDownload\gifs, and only downloading files that I don't already have.

Outlook Attachment Exporter

Controlling the size of your Outlook message store can be a pain - you need to delete attachments from messages you've sent, and file attachments from messages you've received. However, doing that always used to cause me 2 problems - 1) it was a hassle and 2) I lost the little "paper clip" icon in Outlook which showed that those mails had attachments - and I tend to remember which mail I'm looking for with reference to that. So I've written a program that can either delete an attachment and replace it with a much smaller icon which tells you the name of the file you sent before it was deleted, or can save the file to your hard disk and replace it with a shortcut. In both of these cases the paper clip stays, and in the case of the shortcut, you can double click the shortcut and load the file up, just as before. Except the file only occupies space on your disk, not in your mail store. As a final productivity tool, the Outlook Attachment Exporter will even expand .zip files into their constituent files, at the click of a button.

When it's installed, it adds a button to the Outlook main screen so all you need to do is select a message and click the button. It will also navigate up and down your messages, so you can export a number in one go. It remembers where each type of attachment (.doc, .xls, etc.) was last stored and offers that as first choice to store the current attachment. It can be made to be friendly with the current Outlook 2002 security model, thus obviating the need to keep clicking the Outlook dialog box. (If this is still a hassle, an ex-colleague at BT has suggested installing the software from MAPIlab. I've not personally done this so can't recommend it, but it may be of use to you.

This is what the thing looks like:

To install it, download the setup program (2.6 Meg) and run it from wherever you have saved it. If you do find this useful, please email me and let me know - if I enhance it I can then tell you of any improvements.