Some programs I have made

Note. Things here are in transition from GitHub. Some links in the documentation may still point back to the GitHub versions. I am creating tarballs of things as they get updated, so not everything has one yet.

Source links here are to bare git repos: you will need to clone them to see the sources1. Releases have signed tags which look like vm.n.p, with something approximating to semantic versioning. All these repos are ‘publication repos’: they have pretty much only the publication history of the programs, not their internal history which is often a lot more gory (and entangled with other programs in most cases). There is no bug tracking: if you find problems please send me email, perhaps with patches.

Larger things

Some of which are merely piles of smaller things, related largely by their shared history and authorship. There should generally be some documentation and infrastructure to build and install things here. Some notes on what goes where, probably only interesting to me.

xkcd–936: random passphrases

Based on xkcd 936. Python 2.7 or 3.

Documentation / git repo / tarball

Warranted commands

MacOS now has protections which are completely orthogonal to the traditional Unix file access controls. These can make running unattended periodic tasks difficult. A solution is to have a single program which you ‘bless’ with full disk access and which can then run other things. To make this not insanely dangerous that program should allow you to specify what it will, and won’t run. That’s what warranted is: a tool like sudo but without the implication of access as another user, and with a better (I think) configuration syntax. It’s written in Racket, and you’ll need a Racket installation to build it.

Documentation / git repo / tarball

Conduit packages for Common Lisp

Conduit packages are packages which serve as conduits for one or more underlying packages: they let you make a system which consists of several implementation packages available through one package, or to provide packages which extend other packages, or replace some symbols they export with symbols from a different package.

Documentation / git repo

Destructuring match for Common Lisp

destructuring-match is a construct which is like a combination of case and a slightly extended destructuring-bind. It is extremely useful for writing macros.

Documentation / git repo / tarball

Štar: an iteration construct for Common Lisp

Štar is a concise and extensible iteration construct for Common Lisp which aims to be pleasant to use, easy to understand, fast if needed, general, and not to look like Fortran.

Documentation / git repo / tarball

Some Common Lisp tools

A collection of fairly miscellaneous Common Lisp tools which I use to help with program construction and management, which I have written over the years in order to generally get stuff done. Slowly growing as I unearth things and publish them.

Documentation / git repo

Some Common Lisp hacks

A collection of small Common Lisp hacks, which may be useful in programs, and which I’ve written over the last thirty-odd years. Some of them are genuinely useful, some of them are little more than toys written long ago to prove a point on comp.lang.lisp. They are largely independent of each other.

Documentation / git repo / tarball

Symbol nicknames

Symbol nicknames is a toy which allows you to have multiple names resolving to the same symbol, which may or may not be useful. This is implementation-specific as it requires hooking symbol lookup: it is fully supported in LispWorks and SBCL, while the core should be portable CL. It’s never going to be more than a toy.

Documentation / git repo

Some Common Lisp implementation-specific hacks

Some things which I’ve written which depend on specific implementations of CL that I use or have used. Currently not much has been added but I will probably add more over time. Some of this code may work, some of it may once have worked, some of it may never have worked: caveat emptor.

Documentation / git repo / tarball

Smaller things

Shards and fragments which may be interesting to someone.

Some Common Lisp toys

A collection of Common Lisp toys: some may work, some may not work, some may never have worked.

Documentation / git repo

A toy Lisp reader: reeder

Reeder is a toy table-driven Lisp reader, written in Common Lisp. I wrote it mostly to see how hard it would be. It is a toy, it probably has bugs and it may be hard to build if you are not me. But it is extensible and configurable.

Documentation / git repo

A toy for playing with λ-calculus: oa

Oa – one argument – is a toy Racket language for playing with λ-calculus. In fact there are a total of four languages:

  • a pure single-argument normal-order language where functions are written as, for instance (λ x x);
  • a fancy version of the above language where you can write (λ (x y) x) which is turned into (λ x (λ y x)), and where (f a b) is turned into ((f a) b);
  • a pure single-argument applicative-order language;
  • a fancy version of the applicative language.

I wrote oa to learn about implementing languages in Racket, and to play with λ-calculus. I am not convinced the normal-order languages are correct – they certainly used not to be although they seem to be working now.

Documentation / git repo

Relics

Artifacts from a past I am forgetting.

(None yet.)


Some other things I have made.


  1. Previously the public versions of these repos lived on GitHub: there are still frozen, archived versions of them there, but they will never change again.