Software | Software projects |
Documents | Documents and articles |
Contact | Contact information for the author |
PGP | PGP information |
Public Domain | Public domain dedications |
Links | Links to important third parties |
Software projects of which I am (or have been) the primary author and/or maintainer:
Project | Description |
---|---|
anethum | Generic parser API specification |
audiobook-android | The NYPL audio book player API |
blackthorne | Functional streaming XML data extraction |
bodyrecomp | Body recomposition tools |
boxwood | EPUB parser |
brooklime | Nexus Pro staging repository API and command-line tool |
calino | Strongly-specified 3D texture file format |
canonmill | Directory-based Java Keystore |
cedarbridge | Generic, strongly-typed, versioned message protocol compiler |
certusine | ACME client |
changelog | Software changelogs |
checkstyle_rules | Common Checkstyle rules for io7m projects |
chione | Opinionated builds of Apache Artemis for small-scale deployments |
coffeepick | Java runtime retrieval API and shell |
coffeepick-gui | CoffeePick GUI |
cxbutton | Customizable embossed CSS buttons |
datepicker | Minimalist Android date picker |
digal | Java FX rotary dials |
dixmont | Dixmont Jackson extensions |
epubsquash | Java EPUB size reduction API and tools |
ervilla | JUnit 5 Podman container creation. |
ethermaker | Ethernet MAC address generator |
fieldrush | High-performance, low-allocation, type-safe, recovering stream JSON parser |
flail | DNS server stress testing tool |
gatwick | BOSS GT-1000 controller |
genevan | Generic protocol negotiation algorithm |
gtyrell | Git repository mirroring tool |
halite | Maven plugin to accumulate dependencies and artifacts |
hibiscus | RPC Client API Specification |
http | Tiny HTTP interface |
idstore | Identity server |
idstore_gui | GUI for idstore. |
idstore_trafficgen | Traffic generator for idstore. |
ieee754b16 | Functions for converting to/from IEEE754 binary16 values |
immutables-vavr | A set of Immutables encodings for Vavr |
jaccord | Java library to assist with musical analysis |
jade | Java application directory etiquette |
jaffirm | Simple and fast contract checking |
jarabica | Type-safe OpenAL wrapper |
jattribute | Observable, functional, mutable variables |
jbssio | Java bytestream structural I/O |
jcalcium | 3D realtime skeletal animation package |
jcamera | Camera implementations for 3D simulations |
jcathinone | Apache Artemis message directory spooler |
jcolorspace | Color space conversions |
jcoords | Functions for specifying and converting between coordinate spaces |
jcoronado | Type-safe Vulkan wrapper |
jdae | JAXB COLLADA bindings |
jdeferthrow | Defer and combine exceptions |
jdownload | Resumable HTTP downloader library |
jequality | Equality handling |
jeucreader | Unicode codepoint reader |
jfsm | Finite state machines |
jintegers | Integer handling |
jinterp | Interpolation functions |
jlexing | Lexer types |
jmulticlose | Collective try-with-resources |
jmurmur | Java implementation of the Murmur hash function |
jmutnum | Trivial mutable numbers |
jnfp | Normalized fixed-point value functions |
jnoisetype | SoundFontⓡ I/O |
jobj | Java Wavefront OBJ parser |
jorchard | Mutable rose-tree types |
jpismo | OpenGL text renderer |
jpita | Simple text alignment algorithms |
jpplib | An improved fork of the unmaintained jpplib package |
jpra | Fast, mutable, packed records for Java |
jproperties | Typed property handling |
jptbox | Unicode box drawing |
jpuddle | Trivial object pooling |
jqpage | SQL pagination functions |
jrai | Apache Artemis → IRC relay bot |
jranges | Range handling |
jregions | Immutable area types |
jsamplebuffer | Audio sample buffer types |
jsay | Tiny JMS text message sender |
jserial | Serial number arithmetic |
jspatial | Spatial data structures |
jspiel | Java RIFF I/O |
jstructural | Java implementation of the structural document language |
jsx | S-expression parser |
jsycamore | OpenGL GUI library |
jtensors | Vector/matrix math package |
junreachable | Exception types for marking unreachable/unimplemented code |
junsigned | Missing unsigned value conversions |
jvindicator | Type-safe HTTP servlet parameter validation |
jwheatsheaf | JavaFX file chooser |
jwhere | Disk cataloguing tool |
jxe | Hardened, boilerplate-free XML parsers |
jxtrand | Utility classes for XML string resources |
kstructural | Kotlin implementation of the structural document language |
lanark | Restricted dotted name specification |
lfa-launcher | LFA Android launcher application |
looseleaf | Minimalist transactional HTTP key/value store |
lwjgl3-osgi | LWJGL OSGi packages |
medrina | Role-based mandatory access control |
mime | RFC2045 MIME type parsing |
mime2045 | RFC 2045 MIME type parsing |
minisite | Tiny software project static site generator |
modulechaser | Maven plugin for reporting on the modularization status of dependencies |
oakleaf | Minimalist article schema and stylesheet |
oatfield | OSGi bundle I/O and analysis |
oci-images | OCI images for various projects |
opds1_2 | OPDS 1.2 parser |
opds2_0 | OPDS 2.0 parser |
opdsget | OPDS feed retrieval tool |
openjdk-api-java-client | Java client for the AdoptOpenJDK API |
oxicoco | Embeddable Java IRC server component |
pallene | An ultra-minimal single-file static web server |
percentpass | Percent-passing extension for JUnit 5 tests |
portero | Matrix Homeserver invitation token service |
primogenitor | Ancestor POM for io7m projects |
quarrel | Strict, opinionated, typed command-line argument parser. |
r2 | Aggressively minimalist second-generation deferred rendering system |
readme | Tiny README generator |
repetoir | Service directory |
scando | Tiny japicmp command-line wrapper |
seltzer | A specification for structured, user-facing error values. |
servitor | Static podman/systemd service generator. |
sigiltron | Mysterious symbol generator |
simplified | The Android client for Library Simplified |
smfj | Minimalist sequential mesh format |
streamtime | Input/output stream progress tracking. |
sunburst | Asset package system |
tabla | Plain text table rendering. |
tavella | Podman Java interface. |
thoth | Experimental, extensible OSGi-based IRC bot |
timehack6435126 | JVM high-resolution timer bug workaround |
trasco | SQL database schema revision system |
verdant | Binary protocol for HTTP endpoint version announcements |
verona | Semantic versioning types |
waxmill | FreeBSD BHyve manager |
wendover | Java NIO channel tools |
xoanon | JUnit 5 JavaFX test harness. |
xstructural | XSLT implementation of the structural document language |
zelador | JUnit 5 cleaning service. |
zeptoblog | Tiny, modular, static blog generator |
The following software packages will no longer be receiving updates:
Project | Description |
---|---|
blueberry | End-user automated junit test runner |
cantoria | Java 9+ API analysis tool |
claypot | JCommander conventions for io7m projects |
ftgr | Fossil → Git replayer |
jareas | Area types |
jaux | Auxiliary library |
jboxes | Box types |
jcache | Generic cache algorithms |
jcage | Run-time configurable JVM sandboxing |
jcanephora | OpenGL plus static safety |
jfppg | Java fixed-point code generator |
jfprop | Server for synchronizing Fossil repositories |
jfunctional | Functional types |
jguard | FreeBSD jail management tools |
jjacob | High-performance, memory and type-safe bindings to the JACK API |
jlog | Hierarchical logging |
jnull | Null pointer handling |
jparasol | Minimalist, pure functional shading language |
jrcl | Restricted class loader |
jrpack | Rectangle packing algorithms |
jtimeline | Generic timeline package |
jvvfs | Virtual filesystem |
plain-site-skin | Boring Maven site skin |
r1 | Aggressively minimalist deferred rendering system |
saxon-plugin | Simple XSLT processing with Saxon |
servicedirectory | Android-oriented lazy application service directory |
sombrero | Shader management and preprocessing system |
All packages on the site use semantic versioning. Please consult the referenced site for the exact rules. Informally, this means that backwards-incompatible changes, new functionality, and bug fixes are unambiguously indicated by version number changes.
Date | Title |
---|---|
2012-01-19 | A Brief History Of Vertex Specification In OpenGL |
2012-04-25 | 2D GPU Displacement Mapping |
2012-04-26 | Lightweight Static Exceptions |
2012-06-18 | Type Tricks 0 - Propositions In Constructors Of Immutable Objects |
2012-06-19 | Type Tricks 1 - Phantom Types |
2012-07-29 | Crash Course In Algebraic Types |
2012-07-30 | Glow Maps |
2013-07-24 | Type Tricks 2 - Interfaces As Capabilities |
2014-06-28 | Fragment Shader Outputs - Through The Ages |
2015-06-03 | Type Tricks 3 - Generic Visitors |
2016-01-19 | Algebraic Types On The JVM |
2016-08-20 | Reliable UDP Algorithms |
2016-09-03 | A Brutal Approach To Logging In An Embedded Apache Felix |
2018-09-11 | Aeron For The Working Programmer |
2021-08-29 | The ATMega328P From (Almost) Nothing |
2022-10-30 | Simple GPU Outline Shaders |
Using PGP (and therefore, the email addresses contained within the PGP keys) is preferable. But if this is not an option, the author can be contacted at:
All packages released on Maven Central are signed by the current release key. Personal correspondence is signed by the current personal key. The current key policy is yearly-expiring keys, with each new set of keys being signed by the previous set. Expired/revoked keys are archived here in order to allow for the verification of old releases.
Key | Comment |
---|---|
567B 7EA4 703E D530 5B73 3FBC 10C3 9A85 438F 996F | 2023 jenkins-maven-rsa-key |
62AB 091D 563E 51BE 9E54 B680 7E20 DC73 5505 FE84 | 2023 maven-rsa-key (RSA key to sign Maven Central releases) |
B61D 1DAE 9E4D B4B7 B575 7356 EFBD C8D0 6064 EF5C | 2023 personal |
The following keys have either expired or have been revoked:
This section records public domain dedications as they occur.
Date | Name | File |
---|---|---|
2014-12-23 | jspatial | jspatial.asc |
2015-08-23 | jrpack | jrpack.asc |
2016-04-27 | timehack6435126 | timehack6435126.asc |
2019-03-21 | unbolted_frontiers | unbolted_frontiers.asc |