These are projects I'm working on now or have worked on in the past and am still involved in.

I work for iSource WorldWide on PrintSites, an software-as-a-service product which provides high-quality Web sites to the print industry.

I helped transition our systems to a cloud architecture hosted on Amazon Web Services, preparing it to scale for a large customer base.  I also helped create our software development infrastructure, including implementing version control, bug tracking, and a project Wiki.



I work at Locomatix, where we work on developing next-generation location based services.  We have released the Locomatix cloud api as well as a mobile social networking platform, My Locomatix, with versions for iPhone and BlackBerry.



Genesee Free-Net

The Genesee Free-Net is a community networking nonprofit based in Flint, Michigan.  We've been operating since 1995, making the Internet more accessible to area citizens and nonprofits.

When GFN first started up, I was our programmer and systems administrator.  Now I am on the board.

We are currently working on offering high-quality Web sites to nonprofits, community organizations, and individuals.


Whereabouts Project at UMich (Location and RFID)

I developed the Whereabouts system while working at the University of Michigan.  We were just breaking ground on our new computer science building when I completed my master's degree, and we wanted the building to have location awareness capabilities.  I stayed on for a few more years as a research programmer, where I led the project to select and implement location awareness technology, and build an infrastructure for using it in a way that protects user privacy.

While working on Whereabouts, I worked with the Accessible Technologies Computing Site to create Talking Points, a navigation system for blind and visually impaired users.  The system is now maintained by some very smart and energetic students.

I also worked with using RFID for location awareness.  I released the code I used to do this as rfid-perl.


Home Search Software

I worked with the Flint Area Association of Realtors to create a home search system for their Web site.  We spun this work off into HomeSurfUSA, which uses my software to power real estate Web sites for a variety of clients.



What is UCSPI-TLS?

UCSPI-TLS is a protocol extension to the Unix Client/Server Protocol Interface, or UCSPI, adding "delayed encryption". "Delayed encryption" means a session starts off in plaintext, then a command is issued to turn on encryption, encryption is negotiated, and the session restart. This has become a very common way to handle encryption, because it simplifies client configuration and requires only one TCP port.

Why would I want UCSPI-TLS?

These are the goals of the UCSPI-TLS protocol:

Additionally, a specific goal of this implementation is

I believe the privilege separation feature increases your system's security significantly. It creates a dedicated process to handle each encrypted connection, and this process can change its root directory and switch to a low-privilege user and group. Because of its complexity, OpenSSL has had its share of security bugs. Doing encryption in a low-privilege process ensures that the impact of any security bugs is minimized.

How do I use UCSPI-TLS?

All of the UCSPI-TLS implementations here are patches to existing programs.

For more detailed instructions on using UCSPI-TLS with ucspi-ssl and netqmail, see the UCSPI-TLS on netqmail HOWTO.

There are also other files and versions of the patches.

Who's behind UCSPI-TLS?

Scott Gifford helped design the UCSPI-TLS protocol, and wrote most of the code here. Charlie Brady also helped design the UCSPI-TLS protocol.

qmail patches

I've been hacking on qmail for quite a few years now.  I've written a few patches which I hope others will find useful.

The qmail patch teaches qmail to recognize as an address that will connect back to itself.  Many operating systems use this alias, which is recommended by RFC 1122.  Without it, mail sent to an address that resolves to may loop.  This patch is recommended by, and is included in netqmail.  Download qmail-

The qmail moreipme patch allows qmail to recognize other IP addresses as its own.  You'll want this patch if you run behind any kind of NAT, port forwarder, or load balancer.  Download qmail-1.03-moreipme-0.6.patchnetqmail-1.05-moreipme-0.6.patchqmail-1.03-moreipme-0.6.README.

The qmail wireformat patch stores messages on the disk in the same format they are transferred over the network, saving translation back and forth.  For a site whose users only read their mail over POP and IMAP, it offers a significant performance boost.  Browse qmail_wireformat patches.

There are a few other odds and ends, and previous versions of some of these patches, which you can see if you browse sgifford's qmail patches.

Resource Genesee

I worked at Resource Genesee in 2001, on a one-year grant to get their technology up to speed and create an online volunteer match,  They are a great organization, and I still volunteer there from time to time, helping solve technology problems.


interceptty (interceptty 0.6)

Copyright (c) 2000-2009 Scott W. Gifford <>

interceptty is a program that can sit between a real (or fake!) serial port and an application, recording any communications between the application and the device. It can also be used as a network serial server or client, to provide an emulated serial port connected to a program, and for various other tasks.

It was written by Scott Gifford.

Getting it

Download the most recent tarfile (interceptty-0.6.tar.gz). 95911 bytes.

Release Notes

See the file NEWS, included with this distribution.


Using it

You can build interceptty with

	make install

Once you have done that, run 'interceptty' with no arguments for help.

Further documentation is included in the README and the manpage.


interceptty is copyrighted by Scott Gifford and is licensed through the GNU General Public License. Read the COPYING file for the complete license.


cgiburn (cgiburn 0.4.2)

Copyright (c) 2000-2009 Scott W. Gifford <>

CGIBurn is a Web-based front end for burning CDs.

Out of the box, it knows how to copy from one data CD to another, from a directory of files onto a CD, from a CD into a directory of files, and some other, less useful options (See SETUP below for the less useful options).

It is written in Perl for use under Unix. See the section on Requirements for more details about exactly what is required.

CGIBurn is written by Scott Gifford. Please report any questions, problems, complaints, or praise to me at the email address above.

Getting it

Release Notes

See the file NEWS, included with this distribution.


CGIBurn requires a computer which is fast enough to keep up with the burning process. Nearly any modern computer will do; it was originally developed on a Pentium 133 and ran with no problems.

CGIBurn is a front-end to other CD burning and copying programs, such as cdrecord and mkisofs. As such, it requires that copies of these programs be available and working. It also requires the Perl CGI module, which comes standard with modern versions of Perl.

CGIBurn is written as a series of CGI scripts that run backend libraries and driver programs. In order to run the CGI scripts, you'll need a Web server that supports CGI scripts written in Perl. Any version of Apache will do.

Using it

The installation process is thoroughly documented in the README file.


cgiburn is copyrighted by Scott Gifford and is licensed through the GNU General Public License. Read the COPYING file for the complete license.


startalk (startalk 0.4)

Copyright (c) 2000-2009 Scott W. Gifford <>

StarTalk is a program that lets you read and write the entries in your digital Motorola StarTac phonebook.

It was written by Scott Gifford.

Note that StarTalk is beta software, and is not covered by anything resembling a warranty. You probably shouldn't use it on a phone that you would be upset if all data were lost.

Getting it

Download the most recent tarfile (startalk-0.4.tar.gz). 109,022 bytes.

Release Notes

See the file NEWS, included with this distribution.


Using it

You can build startalk with

	make install

Once you have done that, run 'startalk' with no arguments for help.

Further documentation is included in the README.

The Cable

The cable I use to connect my phone to my computer is the Data Connectivity Kit. One end of the phone connects into the bottom of the phone, and the other end is a 9-pin female serial connector that plugs into the back of my computer.

The cable is sold by itself as a Motorola SYN7464 or SYN7465B Data TrueSync Connectivity Cable, or as part of the Motorola 98193 CDMA Data Connectivity Kit with Truesync Software. Searching for these on the Internet, I was able to easily find several places which sell them.

This cable says it is compatible with the following phones:

* The P8767 apparently requires a firmware upgrade from the dealer to work with this cable and software.

I suspect that this software will work with any of these phones, but I've only tried it on my own. If StarTalk works for you, please check the Web page, and if your phone model is not listed there, email me with the model number so I can add it as confirmed working.

I've gotten numerous requests for information on how to make your own cable. I haven't been able to find any information about this; if you have some please send it my way. From what others have told me, I understand that the cable contains a microchip, and doesn't simply connect pins on the phone to pins on the serial port, so it is more difficult than it seems like it should be.

Related Projects

Transfers entries from a Palm device to a StarTAC phone.
StarTAC AT Commands
StarTAC Software Revisions
StarTAC Hardware
These are for GSM phones, but they mention that the other StarTAC phones are very similar.
a Java version of StarTalk
like StarTalk for Qualcomm phones
like StarTalk for Nokia phones


Thanks to:

Jason White <>
for his help with testing and debugging the new-style phonebooks and email addresses.
Jeffrey C. Honig <>
for his help and his code to support special characters in phone numbers and to make StarTalk simpler and faster.
Gilbert Raymond <>
contributed ideas and code for supporting special characters in phone numbers, and feedback on the documentation.
David Kirk
contributed a Verizon 7867W phone, which will let me continue support for the newer-firmware phones. Thanks David!


StarTalk is copyrighted by Scott Gifford and is licensed through the GNU General Public License. Read the COPYING file for the complete license.

Pro Forma

Pro Forma (proforma 0.2.1)

Copyright (c) 2001-2003 Scott W. Gifford<>

Pro Forma is a GUI tool that lets you fill out forms on your computer like you would with a typewriter. It's a little bit cleverer than that, though; it can look at the document, find blank spaces where you're likely to type, and put a textbox there for you to type in, sitting right on top of the line. It's quick to learn and easy to use, and produces nice looking output.

It was written by Scott Gifford. It is currently very beta software, and I haven't worked on it in awhile, so please use at your own risk.

Pro Forma uses GNOME and the GTK+ library for its user interface, and was built in part with the Glade interface builder .

Screen Shot

Last time I wrote a GUI program, nobody would download it until I had a screenshot.

Getting it

Download the most recent tarfile (proforma-0.2.1.tar.gz). 594392 bytes.

Release Notes

See the file NEWS, included with this distribution.



Download and gunzip/untar a copy of proforma, then do the usual

     make install

described (generically) in INSTALL. When it looks like everything is working, you can test by going into the "examples" subdirectory, and running:

    ../src/proforma example.form

You should see a properly completed City of Flint tax form for Joe Blow. If you don't, something went wrong; you should fix that before trying to work on any of your own forms.


If you followed the installation instructions, proforma will be installed in your $PATH. So just type "proforma" to run it.

When it starts up, you'll just have an empty window with a menu in it. To create a new form, select the File menu, then select New. It will prompt you for an image containing the form to fill out. Any image format supported by both gdk_pixbuf and gnome-print will work; I usually use an 8-bit png.

If the form you want to fill out is a PostScript or PDF file, you'll need to convert it into something that gdk_pixbuf and gnome-print can handle. The easiest way to do this is with GhostScript:

    gs -dNOPAUSE -dBATCH -r300 -sDEVICE=epswrite \
       -sOutputFile=form.%d.eps form.pdf

will create a series of EPS files called "form.x.eps", from the PDF file in "form.pdf", with x going from 1 to the number of pages in the PDF file.

When you've succesfully opened the image file, Pro Forma will display the image in its window. You can scroll around using the scrollbars attached to it; you may find it more convenient if you make the window very large or maximized. You can change the size of the image with the View|DPI menu.

When you've got an area of the form you'd like to type on viewable in the window, you can create an area to type in two ways. If the place you'd like to type is on top of a line or inside a box, just double-click reasonably close to the top of the line or the inside-bottom of the box, and Pro Forma will figure out a reasonable size to make a textbox, and put your cursor there to start typing. If you'd like to type someplace that isn't on top of a line, right-click and select "Add new field". This will draw a one-inch long box to type in.

Once the box is on the screen, you can just start typing. You don't need to do anything when you're done; just continue creating the next field, or save or print if you are finished.

If the box isn't the size you want, you can move it by right-clicking inside the box, and selecting "Move/resize textbox". That will draw four handles in the corners of the textbox for moving any of the four corners, and will allow you to move the entire textbox by clicking somewhere in the middle and dragging. While you are dragging the corners to resize, the cursor will "snap" to any black spots it sees on the page (unless you turn this feature off with the Edit|Snap menu). Pro Forma doesn't currently support multi-line textboxes, so if you want to type a lot, you'll have to make several textboxes on top of each other. When you've got it the size you want, you can right-click in the textbox again, and select "Done with move/resize textbox" to remove the resizing handles, and set the behavior back to a normal textbox.

If you're working with a scanned document and you find that Pro Forma can't follow the lines, try turning up the fuzziness factor with the Edit|Fuzziness menu; the higher the fuzziness, the more slanted lines and glitches will be tolerated. Similarly, if it's being too tolerating, turn fuzziness down. For a document that isn't scanned, it should be fine to set Fuzziness to 0.

If you decide you don't need a particular textbox any more, or if a textbox is created accidentally, just right-click in it, and select "Remove textbox".

When you have created a few fields, you will probably want to save the form (especially since there are still a few crashes left in Pro Forma). To save a file which hasn't yet been named, go to the File menu and select "Save As". You will be prompted to enter a filename to save as, and the locations and contents of the textboxes will be saved, along with the path of the base image for the form. Once Pro Forma knows the name of the file, you can just use File|Save to save it again in the same location.

To open up a form you have previously saved, just use File|Open.

Undo is currently not supported, but if you have saved the file recently, you can go back to your last saved version by selecting File|Revert.

To see what your form will look like printed out, select File|Print Preview. This will bring up a Print Preview application (gv by default, but see the README for how to change that); you should be able to save the final PostScript file here, as well as print it.

When you are done, select File|Close or File|Exit.


Features that I'd like to include in a future release of Pro Forma are in the TODO file. If you have any suggestions that aren't in that file, please email me and let me know. Bugs that should be fixed are in the BUGS file.


Pro Forma is Copyright 2001-2009 Scott Gifford and is licensed through the GNU General Public License. Read the COPYING file for the complete license.

Old Projects

 Here is a dumping ground for various old projects I've stopped working on, or that never really made it off the ground.  Feel free to browse around.

Browse Old Projects