Various packages...
A few bits of work that may be of some use to others.
I also do consulting on LaTeX
packages and BibTeX style files, and on Arduino work.
Current
The software below is in distributed under either the
2-clause BSD licence,
or the GPLv2 (mostly older projects).
I don't, however, have particularly strong
commitments to either licence, ideological or otherwise,
and if you have some need for a distribution under another licence,
I might not take much persuading.
I (now) tend to host projects at
heptapod
(I'm rather a partisan of Mercurial),
and you might find other useful material there.
Right now things are rather in transition (I'm a bitbucket
refugee), so the links below don't always point here.
All the projects below are ‘stable’, except where I've noted
otherwise. That means that I believe they work pretty reliably, and
I'm interested in bug-reports (a code repository issues list is best,
or just email me), without necessarily making promises about timescales.
Other packages are ‘experimental’ – I'm interested
in talking about these, but you shouldn't expect too much.
- exam-n
LaTeX support for exams
- LaTeX class file for exams, focused on the careful collaborative
process of assembling an exam. Many of the features are to do with
checks to avoid mistakes.
I also provide commercial support
for this class.
- versonotes
place notes on the verso page of a document
LPPL
- This package allows you to place notes on the verso pages of an
otherwise single-sided document.
If, in the run of text, you include a call to the macro
\versonote{This is a remark}
, then that text will be
placed on the opposite (ie, ‘verso’) page, lined up with the macro
call.
- showlabels
show labels in a document
LPPL
- Put the names of
\label
and other commands into the
margins of a draft document.
- textpos
position text on the page
LPPL
- Lay out text and graphics at arbitrary positions on the LaTeX page.
This helps when producing a large-format conference poster, or when placing
material within, say, figures.
- feyn
Feynman diagram font
- A package of fonts for producing relatively simple Feynman
diagrams, primarily for use within equations. The diagrams are
generated using a font, rather than by generating images.
- urlbst
Add webpage fields to .bst files
- A script to edit BibTeX
.bst
files, to add support for
general url
and lastchecked
fields.
Optionally adds basic support for eprint
,
doi
and pubmed
fields, and hypertex/hyperref support.
- supplements
Split a complex LaTeX document into separate
pieces
showing its age; use thoughtfully
- This allows a possibly complex LaTeX document to be split amongst
several input files, which are LaTeXed independently,
whilst still synchronising counters, cross-references, and so on.
- bibhtml
HTML bibliographies from BibTeX
- A set of BibTeX styles, for generating bibliographies as HTML.
- squicky
parse wiki syntax
BSD 2-clause licence
- Squicky is a Racket package
which parses the ‘consensus wiki’ syntax described by the
WikiCreole people,
and turns it into more manageable xexprs.
(v1.0 of this was also available
on PLaneT)
- racket-librdf
Redland RDF libraries in Racket
functional, but still experimental
- A Racket extension which wraps the
Redland RDF library.
- bibulous
A BibTeX parser for Racket
experimental
- A fairly robust BibTeX parser, plus the beginnings of a BibTeX
replacement in Racket.
- Assorted scheme scripts
- Various R5RS Scheme scripts, for writing XML, design-by-contract and
decoding DER-encoded byte arrays. They should be portable to R5RS
implementations, but they're otherwise pretty random.
- dtmfx
generate and interpret DTMF tones
beta quality; needs more pushing around; BSD 2-clause licence
This is a kit for generating and interpreting audio containing
DTMF tones.
Given a sequence of hex digits, this will generate audio containing
the corresponding DTMF tones, and given audio containing such tones,
this will recover the hex digits.
The 'message', which may be a sequence of hex digits, or JSON.
The library includes the facility to encode JSON in the audio output,
encoded as DER-encoded ASN.1 (using the Jason library, below).
- mp3x
scan an MP3 file
BSD 2-clause licence
- A lightweight scanner for MP3 files, which reports length and
other metadata in an easily parsed way (I was surprised such a thing
didn't already exist, when I needed one). The program is intended to
be similar in style to the wc(1) program, in that it displays
information about the input file in a format which is
intended to be stable and parseable. To download, see the released packages.
- aiff-grokker
scan an AIFF file
BSD 2-clause licence
- A basic utility to examine the structure of, and minimally edit, AIFF audio files.
- audiotag
tagging and podcasting audio
experimental; 2-clause BSD licence
- This is an application for podcasting audio files, tagging
(instants within) audio files, and liking and sharing those tags.
The application was deployed and in regular use, but is still somewhat
experimental (or, in other terms, it's a rolling beta); I've stopped
working on this, but I remain
very interested in talking about this application and the
ideas behind it, so please get in touch if you're interested in this
from a technical or a pedagogical point of view.
- Xoxa
XML normaliser, in Java and C
still experimental
- Xoxa is a prescription for normalising XML, and signing and verifying
it using GPG signatures. It acts as an alternative to the
standardised, but undeniably intricate
W3C XML Signature
standard. It's still rather experimental, and currently
under-documented, but more details should appear here soon.
- pqrst
Priority Queue for Running Simple Tasks
BSD 2-clause licence; actively maintained
- A library, initially targeted at the Arduino,
to provide simple ‘thread’ support (very much in scare-quotes).
- unittests
A very simple C++ unit test framework
BSD 2-clause licence; actively maintained
- There are various simple unit test frameworks for C++, and a
variety of complicated ones, too (I’m sure). The following works for
me. It is intended to disappear into your source tree, rather than be
a complicated auxiliary framework. It can be compiled in such a way
that it can also support on-device unit tests for the Arduino.
See downloads.
- Jason
a JSON to ASN.1/DER encoder/decoder, in C.
still experimental; BSD 2-clause licence
The libjason library is able to parse JSON, and encode it to ASN.1
using the Distinguished Encoding Rules (DER) of ITU-T X.690.
The library parses JSON as specified in RFC 4627, with no
extensions. However the string parser cannot at present handle Unicode
strings (which also means it doesn't respect the JSON \uXXXX escape);
all strings must be ASCII.
The DER decoder can handle some BER-encoded objects, but not all,
and it doesn't attempt to handle ASN.1 types other than the subset
which it generates. In that encoding, JSON primitive types – integers, floats,
booleans, and null – are encoded to their DER analogues. A JSON array is
encoded to a DER SEQUENCE, an object to a SET OF two-element
sequences, and strings to DER ia5string objects.
- Unity
unit parsing
BSD 2-clause licence
- The unity library is able to parse scientific unit
specifications using a variety of syntaxes.
- listxml
an unpythonic Python XML writer
BSD 2-clause licence
Python provides the DOM and ElementTree interfaces for creating an XML
tree, and serialising it for output.
These work well, but can hardly be called lightweight; it can be
wearisome to programmatically assemble an XML document, and because the
document is assembled from a multitude of method calls, it's easy to
lose the wood amongst the trees.
The Listxml package provides a different way of creating a data
structure which can be serialised into XML. That structure might represent an
(X)HTML file, or something like an RSS feed. It's easy to generate
programmatically, and, because it's compact, you can see more of it on
the screen at once.
See also:
source repo at heptapod,
and
on PyPY.
- Quaestor
generic triplestore and SPARQL endpoint
Academic Free Licence; no longer actively maintained
- Quaestor is a generic triplestore and SPARQL endpoint, which
allows you to upload ontology and instance data, and query the result
through a RESTful interface. It's built on top of Jena, and uses
SISC (a Java Scheme implementation).
Since it was first developed under the aegis of
AstroGrid,
it's distributed under the terms of the
AFL.
- uk.me.nxg.lx
Lx is a compact syntax for XML.
GPLv2
- This is useful for XML files
which have sufficiently more markup than text – such as XSLT
stylesheets or RDF files – where the content is
quite difficult to see amidst the forest of
angle-brackets. It's effectively a sexp-to-SAX parser for
Java.
- libsigwatch
signal watching for Fortran
GPLv2
- libsigwatch.a is a tiny library of routines to provide simple
signal watching for Fortran programs. This allows a minimal
level of control of a running program from outside it, for
example to tell it to checkpoint itself on receipt of a signal.
Signal handling is rather tricky in Fortran (because the
function that is registered as a signal handler is later called
by value rather than by reference), so this library provides
functions to make it easier.
- devrandom
read and format
/dev/random
BSD 2-clause licence.
devrandom
reads a number of bytes from the random device
(typically /dev/random
) and prints them in a variety of
formats. This provides a convenient source of randomness for scripts
and the like, as well as an easy way of generating secure passwords.
- ttl-mode.el
an emacs mode for Turtle
- This is an Emacs mode for editing Turtle (RDF) files (also known as N3 or Notation3).
It's based on
an excellent start made by Hugo Haas.
I've extended it to support indentation, some electric punctuation,
and hungry delete.
- dvi2bitmap
generate bitmaps from DVI files
GPLv2
- a DVI reader, which converts DVI files to bitmaps.
- GU styles
- I maintain a couple of LaTeX style files of interest to members of
Glasgow University.
Assorted
The following are projects which might be of some use to
others, but which I've now essentially abandoned.
- Jade LaTeX back-end
- a patch to OpenJade 1.3.2
(DSSSL implementation)
which adds a simple back-end to help generate LaTeX.
- minutes.dtd
- a DTD and DSSSL stylesheet for processing meeting
minutes.
By now, I think the documentation is more fun than the package.
- [Ancient] Kept LSE
- VMS's LSE
editor was wonderful, except that it used to take ages
to start up. This little bundle allowed you to keep an LSE
process going as a subprocess, cunningly suspended. I don't
suppose many people still use dear old LSE, but if they do, here's
an example of doing odd things with TPU, as well as using more
languages to solve a problem than you'd reasonably expect to
have to.