Nicholas Riley

 

       

Older software I've written

This page is a catalog of older free software I've written or worked on. Most of it is only useful under older operating systems or with legacy hardware. Some of this software is licensed under the GPL; other software is provided with no included license. For the latter set of programs, I would ask that you credit me when you make use of or incorporate my software into another product; and that you send along any improvements you might make. Bug reports are also welcome.

Go back to main software page.

KeyboardRemap 1.0.1

I have been using a now-discontinued IBM split keyboard for about a year and a half, which has made a gigantic difference in my ability to type without pain (along with better posture, exercise, etc.) The closest keyboard to its layout that is now sold is the Goldtouch adjustable keyboard.

This keyboard was manufactured in 1995; it has a PS/2 connection, no Windows key, and no numeric keypad. I use it with a PS/2-USB adapter from Belkin (who repackaged P.I. Engineering's Y-Mouse adapter). Under Mac OS 8.6 on my PowerBook G3, I modified Apple's example USB keyboard driver to remap keys to make the keyboard more comfortable. The changes I made were:

Mac OS X uses a completely different driver architecture, and there wasn't any easy way to change this. So, I had to endure problems like the command and option keys not being pressable with the same hand, until iJect was released, and I had a way to remap most of the keys as above. The only difference in the Mac OS X version is that I was unable to distinguish left from right, so both Control keys are mapped to Option and Caps Lock is no longer available. (If for some reason you want a copy of the Mac OS 8/9 USB driver I used to use, I can certainly send you a copy, just email me.)

I don't imagine that many other people will be using this keyboard with their Macs, but this code demonstrates how to remap the Caps Lock key, not entirely trivial, so I hope it will be of use to others.

Warning: KeyboardRemap 1.0 (like all iJect derivatives) is not compatible with Mac OS X 10.1.5, or the special version of 10.1.4 for the PowerBook G4: you'll get a kernel panic on startup. (Start up in single-user mode, or under Mac OS 9, and delete the KeyboardRemap folder to continue.) KeyboardRemap 1.0.1 works only on Mac OS X 10.1.5.

WebDAV tool for Frontier/Radio 1.1b1

This plugin allows Frontier's Website Framework and Manila static rendering output, and Radio UserLand upstreaming via WebDAV. It provides limited support for WebDAV as specified by RFC 2518. The PUT, DELETE and MKCOL methods, and basic HTTP authentication only are supported. (That means: use it on a secure network or wrap it securely).

Installation: Uncompress the archive. Place WebDAV.root in the Tools folder (for Frontier, it's Guest Databases: apps: Tools; for Radio, the Tools folder is at the top level).

For static rendering: Find an existing site with a #ftpSite directive or table. Choose "Edit FTP Site..." from the WebDAV submenu of the Tools menu. Once you've set up the site table, just render as usual.

For Radio upstreaming: Documentation is available by clicking Tools, then WebDAV, in the Radio desktop Web site. This link may take you there.

s.t.o.3, a sawfish theme

Sawfish is a very cool window manager for X11. Unfortunately, 99% of the themes for Sawfish are unusable, ugly, black messes. I found a theme called 's.t.o' which was patterned after the look of themes.org, and liked it quite a lot. It was rather unfinished, though, and had the close box where I wasn't expecting it. So I made some modifications, and released the theme. Later, I updated it for Sawfish 0.30, doing a big code cleanup, fixing a bug, adding a configuration interface, the rest of the frame styles, and live configuration updating (which was harder than it looked, thanks to Sawfish's policy of only permitting thunks in certain places).

clean 1.0.9, an irssi theme

irssi is a very nice, stable, full-featured and elegant console IRC client. Unfortunately, 99% of the themes for irssi are unusable, ugly, black messes. (See a pattern here? :-) This is my attempt at a theme I can actually use. One nice feature, which turned out unintentionally, is that it looks fine with the terminal window set to black-on-white or white-on-black.

LispMe Importer for Macintosh 1.0.2, an AppleScript droplet

LispMe is a Scheme interpreter for Palm handhelds. It comes with a bunch of scripts to import into the Memo Pad of your Palm, but Palm Desktop for the Mac (nèe Claris Organizer) doesn't understand .csv files, nor can it import a folder full of text files. So I wrote this Importer; it converts any text files dropped on it into notes in Palm Desktop, which become memos on your Palm device. Following the Palm standard, the first line of each text file becomes the title of the corresponding memo. Even if you don't use LispMe, it may provide some insight into scripting Palm Desktop.

Version 1.0.2 updates the script for compatibility with Palm Desktop 4.1 (it is no longer compatible with older versions).

Learning Cocoa examples, enhanced

Learning Cocoa was the first tutorial book on Apple's Cocoa frameworks to become available (May, 2001). The book is not very well-written or comprehensive, but it's mostly accurate and serves as a reasonable jumping-off point for programmers who, like me, are new to Cocoa. As I was working through the book's tutorials, I made a number of changes to extend and rewrite the code - a great way to explore Cocoa. I realize the code could be a lot better in places: the blame is partially Apple's, partially mine as a beginner. Given the current lack of good documentation on Cocoa, having this working code would have been a help to me, and I hope it can be of help to others. If you find any outright bugs, please let me know so I can fix them. Also, if you can send me a list of the enhancements I've made (I've honestly forgotten!) that would be great too.

TreeWidget.py, a hierarchical data browser for Python/Tkinter

IDLE, the Python IDE, comes with a tree browser widget. It works reasonably well, but needed polish and fixes for some particularly annoying display bugs. I've done enough to make it usable for my purposes, which also improves its usability with IDLE. Guido wanted a complete overhaul, which I'll do when I get a chance! Problems I fixed were:

bookmarks.py, a sample drag and drop tree widget for Python/Tkinter

After TreeWidget, I found Gene Cash's tree.py. It is both simpler and more efficient than TreeWidget, although it doesn't support as many features. Gene and I worked on drag and drop support - he did an initial version, and I rewrote almost all of it, adding drag feedback and Unix compatibility. Assuming our plans go ahead as intended, the next step is to support rearranging the tree through drag and drop, so it can be used as a mini-outliner.

Outline.py, a Python version of Frontier's outline processor verbs

One of my first projects in Python was ZopeFish, a Zope Product for interfacing with UserLand Pike (now Radio UserLand) using XML-RPC and the ManilaRPC API.

When used with Pike, Manila can be configured to render outlines on the server side. In order to easily port outline renderers from Frontier to ZopeFish, I wrote an implementation of Frontier's op (outline processor) verbs in Python. It was an instructive experience - outline manipulation isn't as simple as it might initially seem. It gave me additional respect for the efficiency of MORE - so sad that development was never continued.

cvsmailer.pl, a front-end to cvs loginfo

Ever noticed how incredibly ugly and user-unfriendly the default cvs loginfo and notify output is? I did, and I declared that I'd do something about it. I wrote a Perl script that processes the output produced from cvs loginfo: put "ALL /usr/local/bin/cvsmailer.pl %{sVv}" into $CVSROOT/CVSROOT/loginfo. You need to edit the script in a couple of places for your site's configuration. Known bug: the script doesn't handle directories created in the archive properly.

ldappasswd.pl, a Web interface to changing LDAP passwords

pam_ldap's password changing support is really broken, and also some people don't have login access, so I wrote a small Perl CGI for changing users' passwords. It relies on the ldappasswd command to perform the action. The script doesn't do any authentication on its own; you need to protect the script.

SplitManagement for VisualWorks

VisualWorks provides a user interface framework with a reasonable amount of flexibility, but is severely lacking in available components. Aragon does a lot to remedy this, but one thing it doesn't provide is a robust adjustable split bar component. SplitManagement fills this gap.

MindTerm for the Mac, a Java SSHv1 client

MindTerm is a very well-written, mature Java SSH client. Like many Java applications, it wasn't terribly Mac-friendly. I added a number of features, and Mac-specific support such as icons, resources, support for the Apple and Help menus, and Apple Event support. Of the projects on this page, this is the one I've by far spent the most time on; YA-FileDuck is a close second. Some of my more trivial changes are incorporated in the official MindTerm release. My changes are based on an old version of MindTerm - if I have some free time, I plan to update to the latest MindTerm.

suites.slurpee, an outline exchanger for Frontier and the Newton

Frontier uses outlines. A lot. Its outline processor is also internally scriptable. An outliner is built into the Newton's Notepad, but there was no desktop equivalent. suites.slurpee automates transferring outlines between the two.

I hadn't learned how to program for the Newton's desktop integration libraries, so I used Chris Swan's Black Night, a great scriptable telecom program (which I beta tested, look for my name in the credits :-), and Steve Weyer's Sloup (formerly Slurpee, hence the name of this suite). This suite should work with Frontier 4.2.3 and later; or try Radio UserLand which is based on Frontier 7.0's kernel, and would certainly be capable enough for suites.slurpee. This only works on the Mac, because Black Night (and Apple Events) are Mac only.

I never finished this suite - my Newton's Ethernet card dongle broke, and I didn't get it fixed. (If I wanted to pursue this further, I'd go here.) There were some seemingly insurmountable problems with line lengths in Frontier 4.2.3, but now Frontier 6 and later support unlimited line length and wrapping in outlines, finishing the suite should be feasible.

MOSXS Switch, an AppleScript applet suite

Switching back and forth between Mac OS X Server 1.x and classic Mac OS is a bit more difficult than it needs to be; you have to time your option keystroke at startup very carefully. Until you reset the NVRAM settings, you need to do this at every startup; and it's annoying to have to remember to do so via System Disk. I wrote a set of AppleScript applets which will switch to Mac OS X Server with a double-click, and place another applet in the Startup Items folder which will reset the NVRAM settings on the first subsequent startup in classic Mac OS.

How to use: Unstuff the archive; place the folder "Configuration" in the Documents folder of your startup disk. Save your preferred Mac OS X Server configuration with System Disk 2.x in the Configuration folder, replacing the example document. Then, use the "Mac OS X" and "Mac OS" AppleScript applets (with custom icons) to switch back and forth. The "Mac OS once" AppleScript applet is similar to "Mac OS" except it deletes itself after execution; if you alter one, make sure to change the other.

This method doesn't work with prerelease Mac OS X, because 3.x versions of System Disk don't support loading configurations from files. In the release version, the Startup Disk control panel in Mac OS 9.1 is scriptable, so you can use this method.

Create Tabbed Folders 2.0, an AppleScript applet

I love the Finder's tabbed windows, especially with the newer smaller tabs and icon proxies in Mac OS 8.5 and later, but the folder names use a lot of space in the tabs on the bottom of the screen, restricting the number of tabs you can make. It's possible to make the tabs smaller, and eliminate the text, if you know what to do; I wrote an AppleScript to automate this process.

How to use: Create a folder "Tabbed Folders" in the Preferences folder of your System folder. Place folders, or aliases to folders, that you want to make into tabs, in that folder. Then you need to choose at what horizontal position you want your tabs to begin. Eventually I plan to allow you to specify this by example; for now, edit the "hPosInit" property of the script. Then double-click the applet, click Run, and watch your tabbed folders be created.

Since tabbed windows no longer exist in Mac OS X's Finder, I suggest taking a look at Drop Drawers, which is much more powerful, and has already been Carbonized. (It doesn't permit marking a drawer tab with text to the right of an icon, though.) If you have any suggestions, email them to the author - he has been very responsive to mine.

BulkRate Exchange 1.0.2, a OneClick palette

BulkRate Exchange is a small, single-visible-button OneClick palette that performs a single task. The palette appears over the top of BulkRate's Service window. If you use the command key or button to start a mail exchange, depending on the status of your PPP connection (under Open Transport/PPP or ARA 3.x or later), it will automatically select TCP/IP or Modem before beginning the exchange. This makes the necessity of remembering "did I do a TCP or modem exchange last?" a thing of the past.

MacNav Configurations 1.0, a OneClick palette

MacNav Configurations is a small OneClick palette which makes CompuServe session parameters accessible from a pop-up menu. Each configuration consists of settings for connection, network, and (where applicable) phone set. Just select from the pop-up menu to choose all of these settings at once. Optionally, if you use the command key or button to start a connection, and depending on the status of your PPP connection (under Open Transport/PPP or ARA 3.x or later), this palette will automatically select an Internet or modem configuration before instructing MacNav to connect.

Please note: I don't use CompuServe or MacNav any more, so my ability to provide support for this palette will be limited. The palette uses some (IMO) pretty cool resource manipulation tricks, so even if you don't use MacNav, examining the source might give you some ideas.

YA-FileDuck 1.0, a OneClick palette

YA-FileDuck is a general-purpose file management palette for OneClick. It has the same layout as the File Duck 2.0 palette, but with interface and significant functional improvements. It can be used to perform many file-related tasks such as copying, moving, renaming, or changing type and creator, when any application (not just the Finder) is in front. However, it's also useful as a floating Get Info-style palette while you're using the Finder.

If you've used Bobby Saha's File Duck 2.0 palette or the corresponding buttons on Barry Fass-Holmes' Vertical File Duck (version 1.0), you may have found it extremely useful but noticed several "problems" with the buttons. For example, after choosing Rename File and entering a new name, you would need to close and reopen the window for the name to appear-if the file in question was on the Desktop of the startup disk, you would have to restart the Finder. Or, after changing the type and/or creator of a file, the File Duck display wouldn't update to show the new codes; you would need to re-select the files and click the exclamation point button.

These problems led me to make the revisions present in this palette...

Other OneClick palettes

Mainly as a reminder for me to dig them up:

Go back to main software page.


Last updated on 15 May 2002.