Computer programming work in Natural Language Processing
A chronic health problem keeps me from spending long periods of time away from the house, so I would expect to telecommute.
My voice is quite weak, so while the occasional short telephone conversation is OK, I prefer to communicate by email.
None. Everything I ever learned, I learned by reading and doing. I don't think I missed out on anything by going that route. As the source code examples below demonstrate, my programming is solid, effective, careful, and clean.
Advance the Auton project to v1.0; it is currently at version 0.0
This project required
FUF is a sophisticated natural language generation program, using functional unification grammar. It requires an init file that redefines cd, load, require, probe-file for each LISP system it works on. No-one had written written this stuff for FUF+CLISP, so I did.
This project required
This project required
rtest (124 K), a regression-testing package. This package includes many features that make tests easier to write and run, including a powerful pattern-matching facility. It runs in Elisp, and nearly runs in Common Lisp.
The pattern-matching facility would make a great package on its own. It gives Lisp a missing piece that languages such as Prolog, Haskell, and ML take for granted. It proved very useful in conjunction with testing.
I bundled pattern and rtest together only because the pattern-matching and the regression testing use each other.
Also included in the ancillary directory are a number of generally-useful support packages:
The rtest project required:
A previous version of rtest was called regress.el and was adapted from a package by Wayne Mesard, who gets full credit for initiating the regress/rtest project.
tehom-cl, cl extras for Elisp.
arrange, arrange and cull lists.
encap, encapsulate list-forms.
safe-equal, safely compare circular structures.
tehom-inflisp, code to automatically interact with an inferior lisp
local-vars, Macros to allow just-in-time local variables.
caselet, variant cond/case
handhold, for building sexps for specific uses. It's like what `customize' does, but it puts the built expression on top of the kill ring for easy yanking into your code.
This is a very indirect utility: You include it and write widget-forms for it, so that your user needs to do less programming, because handhold "holds their hand" in constructing data of a specific type.
sandbox.el lets you run untrusted code safely.
However, it's far less than an ideal solution. It's
fairly slow, and it has 2 modes: One mode
sbx-with-sandbox
excludes too many functions, the other
sbx-with-excluding-sandbox
excludes too few. Feel free to pitch in and help define
a better list of safe functions. Here are my
dev notes
to help.
write-subdirs-el.el writes a subdirs.el file, guessing the purposes of directories from file extensions and canonical names.
It is primarily intended for developers to make their packages easier to install. It is secondarily for users whose developers didn't do that.
To use it, you should also have new-subdirs-el.el, which is a replacement for site-lisp/subdirs.el. You may also want to look at how-to-use-subdirs-el.txt, which describes in more details what this file is and what it does.
rambledocs, a documentation helper. I find that I am far and away most likely to document design decisions when I am looking at my code, the very issue laid out visibly in front of me. That's when I see the issue the clearest, so that's a good time to document it.
What rambledocs allows me to do is to go directly from an Elisp function to a section of the doc file with the same name. If there isn't already a doc file, rambledocs will start one.
A typical rambledocs document looks like this. You will need an XML viewer to view it - psgml will do - and these dtds:
This project required:
If you want to test it, you will need this test file. Some browsers may want to render it, because it's HTML. If your browser does that, just save it as HTML source.
This project required:
This project required
If you want to test it, you will need this test file. Some browsers may want to render it, because it's HTML. If your browser does that, just save it as HTML source.
This is useful in conjunction with my outline.dtd, but it will work with any other dtd that uses the "keys" attribute the same way.
When writing an XML or SGML document, using a dtd that supports keywords, you can add keywords describing what its part talk about. (That's always been part of psgml)
Then you can interactively hide or show sections of the document according to keywords. They don't have to be contiguous or in any special relation to each other, and you don't have to find them manually. This package finds them according to keywords.
This allows you to focus on the sections that interest you at the moment, without worrying about where you put them.
This code requires the current versions of arrange and tehom-psgml .
Minor enhancements to picture-mode for editing map files for roguelike games, especially Omega.
This project required
This package is specific to the GEOS site. It allows emacs/gnus users to answer GEOS ballots in a few keystrokes.
This is obsolete now that GEOS no longer sends email ballots.
This project required
This project required
This is a patch for Angband and its variants which adds the ability to move around the map more easily. See the documentation for a detailed explanation.
This project required
This is a little package to format prolog structures, like
[a,b,[C,d]]
as Lisp structures, like
(a b (C d))
for interfacing prolog and Lisp.
This works under SWI prolog and will probably work with Quintus prolog. It will probably not work under any strictly Edinburgh prolog, because it uses sformat, not swritef.
This project required
Twotris C++ Tetris variant, blocks fall from 2 directions. (Very old. On disk if I still have it)
This project required
Contributor to Shawn Hargreaves' Allegro library. Allegro was originally Shawn's project alone, but because of its high quality and open source it has attracted many collaborators including myself.
I have coded projects using
I am also familiar with, but have not used for significant projects: