A small Ruby script for helping deal with cruft on
pkgng-based systems like FreeBSD.
Perhaps most interesting is the implementation of
checkrestart, a feature similar to the Debian-goodies
program of the same name, which can find running processes
which may need restarting following an upgrade.
# pkg-cruft checkrestart
[MISSING EXECUTABLE] (tmux-2.7)? running as 17319 (tmux)
[MISSING EXECUTABLE] (zsh-5.5.1)? running as 20115 (zsh)
[MISSING EXECUTABLE] (weechat-2.2)? running as 36747 (weechat)
/usr/local/bin/mosh-server (mosh-1.3.2_4) running as 53815 (mosh-server)
rtss annotates its output with relative durations between consecutive lines
and since program start.
Inspired by Kevin Burke's Golang tss,
I thought it would be a fun exercise and a nice bit of Rust practice to
implement something similar.
I'm fairly pleased with the result - it's considerably faster, running at hundreds
of MB per second in my tests - and somewhat more featureful, including pty support,
allowing it to work similarly to expect's unbuffer command.
Similar to Bloom Filters, Golomb Compressed sets allow for space-efficient
probablistic storage of sets. In other words, you can ask a GCS if it's seen
an object, and retrieve either "absolutely not" or "probably not" in response.
gcstool was my first Rust project, developed primarily to play about with
the haveibeenpwned.compwned-passwords-2.0.txt database. It can store all
half a billion items with a false-positive rate of 1-in-50 million in just 1.6GB,
importing them in just a few minutes, though with fairly high memory requirements.
Bloom filters are one of my favourite data structures,
in no small part because of just how simple they are.
I first encountered them when I worked at Newzbin, when we needed
a way of quickly determining if we'd seen a Usenet Message-ID before.
Their simplicity meant we were very quickly able to go from concept
to a stable general-purpose microservice which served us well for many
One of the trickier aspects is knowing how to size one - typically
you know how many items and what sort of false-positive rate you can
stand, but how do you translate that to how many bits you need and
how many hash functions to use?
Well, bam. The latest iteration of my calculator can calculate almost
any valid set of parameters, and give you pretty graphs in real time,
while offering server-side fallback. I hope you find it useful.
pqsort is the sorting library I wrote for Newzbin's custom search engine - it's
a lightly modified quicksort capable of partitioning and sorting only part of
Quicksort lends itself very well to this kind of use due to how it works - it
naturally partitions the list based on a pivot, and so it's trivial to simply
ignore any pivot side which cannot contain the desired results.
A search engine/viewer for source code commits, focused on projects of interest
to the BSD community.
Currently into its fourth rewrite, backed by Elasticsearch, PostgreSQL and Redis, with the site itself
running on JRuby and Roda, making use of concurrent-ruby to parallelise
data retrieval and inserts.
Previous versions have used Rails, Sinatra, Padrino, Solr, MySQL, and memcached.
Many, many years ago, I wrote this for unclear reasons. I don't think I actually
used it for anything. It implements the PHP serialize() and unserialize()
functions in Ruby, allowing you to read/write PHP sessions and otherwise share
objects between the two.
Now the various forks of it have nearly half a million downloads between
them. php-serialize is the "official" version, with nearly half of those.
The exact incept date is uncertain, the earliest mention of it a quick search finds
is ruby-talk:73669, 2003-06-16.