Recent Projects
I have a tendency to start a lot of projects. I open source most of them. This list is meant to highlight some of the more interesting ones.
rp2040_hal
Open source, usable, but incomplete.
https://github.com/JeremyGrosser/rp2040_hal
Hardware Abstraction Layer for the Raspberry Pi RP2040 SoC, written in Ada.
fanctl
Closed source, complete.
This board does level shifting of the +12V and TACH signals from three pin PC
fans to allow a 3.3V microcontroller to sense and PWM modulate the fan speed.
This was mostly a learning experience. I learned that you should just spend a
little more money on four pin fans.
breakouts
Open source, complete.
https://github.com/JeremyGrosser/breakouts
A friend needed a breakout board to supply power for an odd USB-C connector.
notcursesada
Open source, incomplete.
https://github.com/JeremyGrosser/notcursesada
Ada bindings for the excellent notcurses library.
freqcount
Closed source, incomplete.
A frequency counter meant to replicate the functionality of the Tektronix
DC501 module. Project mostly abandoned
because I bought a decent oscilloscope with frequency counting abilities.
tiny_text
Open source, complete.
https://github.com/JeremyGrosser/tiny_text
A 5x3 bitmap font for use with small LCD screens. Emphasis on code and memory size.
PCD8544 driver
Open source, complete.
https://github.com/AdaCore/Ada_Drivers_Library/pull/364
Just a little SPI LCD.
gcs-env
Open source, complete.
https://github.com/JeremyGrosser/gcs-env
A small node.js library that populates environment variables from blobs in
Google Cloud Storage. Useful for eliminating .env files.
comp.lang.ada archive
Open data, complete.
archive.legitdata.co
I collected every post for the comp.lang.ada usenet group and imported them
into a public-inbox repository. Very early posts were delivered via UUCP and
needed to be reformatted. I also built spamassassin filters and removed quite a
bit of nonsense. A cron keeps the archive up to date with new posts.
openbsd-ami-builder
Open source, abandoned.
https://github.com/JeremyGrosser/openbsd-ami-builder
Scripted unattended install of OpenBSD to a block or loopback device. This is
intended to be used to build Amazon EC2 AMI images, but could work for other
cloud providers with some modification. I gave up trying to run OpenBSD on EC2
as the new Graviton 2 instances need to boot from NVMe, which is not supported
in OpenBSD. Graviton 2 instances use a custom “Elastic Network Adapter” that
does not have a driver in OpenBSD. Support for NVMe boot and the ENA have been
added to FreeBSD and are under active development, so this may be possible to
port over eventually, but I have decided that this isn’t how I want to spend my
time.
retry
Open source, complete.
https://github.com/JeremyGrosser/retry
A command line tool that runs a command repeatedly until it completes. Supports
speculative backoff. Built for an abandoned branch of diskprices that
decomposed the data import and filtering tasks into simple commands that
followed the UNIX philosophy. I might try this again someday, but the Python
task runner works well enough for now.
diskprices.com
Closed source, complete.
diskprices.com
Spoiled by engineering catalogs like Digi-Key and McMaster, I noticed a lack of
such a price list for storage devices. I wrote a tool to query Amazon’s Product
Advertising API for relevant products, parse some metadata, filter spam, and
sort the listing by price per terabyte. Affiliate revenue from this site funds
my other projects.
nrfx-blinky-meson
Open source, complete.
https://github.com/JeremyGrosser/nrfx-blinky-meson
The nrfx library contains drivers for Nordic’s NRF5x chips. I wanted to use the
Meson build system to cross-compile this library, rather than Makefiles or
CMake. This repo is a template for future projects.
fah-docker
Open source, complete.
https://github.com/JeremyGrosser/fah-docker
At the beginning of the COVID-19 pandemic, a lot of people started contributing
CPU cycles to the Folding@Home project. I wrote a quick and dirty Dockerfile to
get the Folding@Home client running inside a container, as it was incompatible
with my desktop configuration.
smol
Open source, incomplete.
https://github.com/JeremyGrosser/smol
Simple Microcontroller Operation Library is the best acronym I’ve ever come up
with. This is a HAL and drivers for ARM Cortex-M chips. Currently, the ATSAMD21
and NRF51 are supported. This library was born out of my frustration with the
poor quality of vendor HAL and Arduino libraries. The libopencm3 project has
done a better job of this than I ever could, so I wouldn’t recommend using
smol, but it does serve as a useful reference on occasion.
kicad-synack-common
Open source, incomplete.
https://github.com/JeremyGrosser/kicad-synack-common
Random symbols and footprints I’ve created for KiCAD. I should do a better job
of maintaining this.
feather51
Open source, abandoned.
https://github.com/JeremyGrosser/feather51
An Adafruit Feather compatible board for the EFM8 8051 microcontroller. I had
planned to build an Arduino-like IDE to introduce people to writing assembly. I
ran into obstacles with the EFM8’s poorly documented flash protocol and
ultimately decided that this project is bigger than I thought it was when I
started. I might come back to it someday, but it’s getting hard to justify
writing assembly when we have such good compilers for ARM microcontrollers that
keep getting cheaper.
Yocto on GameShell
Open source, complete.
The GameShell is a handheld game console with an ARM Cortex-A7 SoC. The
manufacturer provides schematics and Linux kernel patches, but not u-boot
patches. I re-did the u-boot port by modifying similar board definitions,
reading the Linux patches and making educated guesses about the hardware. I
released this work as a standalone patch on the
Clockwork Pi forum
to enable others to build fully open source firmware for this device. I also
built the meta-clockwork
layer to make it easy to target this device with Yocto.
Yocto on Lego Mindstorms EV3
Open source, incomplete.
https://github.com/JeremyGrosser/meta-brick
I submitted a pull request and got the machine definition for lego-ev3 merged
into the upstream meta-ti layer, so it’s marginally vendor supported now. The
EV3 uses a rather old ARM926EJ-S chip. Linux kernel patches exist for most of
the motor and sensor interfaces, but I think most of what they do is better off
in userspace these days. I hear the newer Lego electronics use STM32 chips,
which seems like a better fit for the application. Sometimes I take this off
the shelf and poke at it, but I think I’m more likely to wire up the Lego
motors to a modern microcontroller than try to fight with this thing again.
kama
Open source, complete.
https://github.com/OakLabsInc/kama
A reimagining of Clusto, but with access controls, auditing, and gRPC
interfaces. It worked well for managing a bunch of remote devices. It could do
much more. I have no idea if anybody still uses it.
tablesnap
Open source, complete.
https://github.com/JeremyGrosser/tablesnap
All databases need backups. Cassandra clusters are tricky to backup. Tablesnap
uses inotify to watch a directory tree for new SSTables and uploads them to S3.
This means you get a point-in-time snapshot every time a major compaction
happens. This worked well with Cassandra 2.x. I’m told that SSTables are no
longer immutable in Cassandra 3.x, so I have no idea what kind of consistency
you get if you run tablesnap on those clusters. I’ve successfully avoided being
in charge of any Cassandra clusters since 3.x was released, so I don’t really
maintain this anymore. There are a few commercial forks of tablesnap that
probably work better.
osmnano
Open source, incomplete.
https://github.com/JeremyGrosser/osmnano
I just wanted to see how fast I could parse OSM planet files using nanopb. It’s
pretty quick, but performance really depends on what you do with the data after
you parse the file.
codenames
Open source, complete.
https://github.com/JeremyGrosser/codenames
The DoD solved one of the biggest problems in computer science decades ago:
Naming things. This is a silly and rather inefficient bash script that spits
out a random combination of code words. Name your projects! Confuse your
friends and enemies alike!
meta-nvidia
Open source, complete, unmaintained.
https://github.com/OakLabsInc/meta-nvidia
I was building Yocto images for some machines that needed to use nVidia’s
binary graphics drivers. This was a huge pain to get working. Do yourself a
favor and don’t buy another nVidia chip until they start releasing open source
drivers.
noaaport
Open source, complete.
https://github.com/JeremyGrosser/noaaport
If you have a C-band satellite dish or can find a server on the internet with
the right port open, you can receive a packetized stream of weather data from
NOAA. This Python library parses that stream without too much fuss.
fett
Open source, complete.
https://github.com/JeremyGrosser/fett
It does container-like things using the clone(2) syscall. This project was
meant to demonstrate that not everything needs to be as complicated as Docker.
statsrelay
Open source, complete.
https://github.com/JeremyGrosser/statsrelay
When this was written, Graphite was falling over under the load of trying to
ingest millions of metrics on a single machine and everybody was mad about it.
statsrelay is a consistent hashing proxy for statsd events. This way, you can
shard your metrics across a large number of backends and keep your job. This is
not an ideal solution, but it’s what I could come up with at the time. I’m told
that some companies still run it. Lyft has forked it and rewritten it in Rust
for some reason.