Bio
I'm an internet pinkliom with a fondness for types. Find me at the local coffee shop
writing #rust and sometimes
#elm. I also enjoy single-board
computers. I run my services on a small cluster of boards from
#pine64 out of my apartment over a
residential internet connection. If this page took a while to load, that might be why.
I have many characters, most of whom are some kind of cat. Because of this, I have many
names as well. People call me asonix (my username on most platforms), Aode (the pinkliom
himself), Tavi, and Arlo, although there's more names that are less common.
Notable Projects
pict-rs
pict-rs on Forgejo
pict-rs is a simple image hosting service. It started in 2020 as a replacement for
#pictshare in
#Lemmy, a federated
reddit alternative. While I have contributed to Lemmy in the past, and pict-rs grew out of
a need for a better image hosting solution, pict-rs is an independent project that I
maintain for use outside of Lemmy. One of my goals is to build a federated art gallery
platform, and having solid image hosting is an important part of that goal.
The current stable series for pict-rs is 0.5, and I plan on supporting this release for
the forseeable future. I'm going to try to add additional features in future 0.5.x
releases, rather than publishing a new breaking release. 0.5 has gotten pict-rs to a
point where I'm pretty happy both with the design and the functionality, which might
mean that the next release could be a 1.0. We'll find out if and when it happens.
AodeRelay
AodeRelay on Forgejo
AodeRelay was my first real fediverse project. It's an
#ActivityPub server whose
purpose is to forward posts between other subscribed servers. I built this initially to
learn more about ActivityPub, while also contributing to the greater ActivityPub
ecosystem. My own instance of this relay forwards about 7 messages every minute, which
doesn't seem like much, but it translates to 700 outbound requests per minute (one for
each subscribed server for each message), totalling around 1 million outbound requests per
day. It does this with a limit of two CPUs on one of my single-board computers.
Safe Async
Safe Async on Forgejo
Safe Async is a collection of components that make up a full asynchronous runtime for
rust, made without any unsafe code. This is more a demonstration of possibility rather
than an attempt to build a real production-grade runtime. Safe Async achieves this by
relying on
#rustix, a
library that provides safe bindings to posix APIs like poll
.
Safe Async is made of multiple components. At the lowest level, the polldance
library provides an abstraction for registering and deregistering IO sources and Timers
from an underlying polling mechanism. Next up from that is foxtrot
, a library
that uses polldance to create and wake IO futures with polldance. Up from there are
jitterbug
and bachata
, which are multithreaded and
single-threaded async executors that can be driven as futures on another runtime. And
finally, there's jive
. A full async runtime that combines the above libraries
to provide a unified API for spawning and running tasks with IO.
Safe Async also provides a number of utilities that are useful for working in async rust,
like an implementation of select, join, join-all, notify, and mpsc. Simple integrations
are provided with trust-dns (jive-dns) for asynchronous DNS resolution and hyper
(hyperjive) for asynchronous HTTP clients and servers.
VectorDB
VectorDB on Forgejo
VectorDB is a simple database for storing and searching vectors in Rust, backed by
#redb, an embedded key-value store for
rust (similar to sled). My goal in building VectorDB was to implement reverse image search
functionality for pict-rs, or maybe as a standalone application that works with pict-rs.
While the database itself is pretty quick for finding similar vectors, actually computing
those vectors using imagemagick takes a while. For this reason I am not currently pursuing
reverse image search.
Various Libraries
In addition to the applications mentioned above, I maintain a few notable libraries:
-
activitystreams,
a library for parsing and generating valid ActivityStreams JSON objects
-
actix-form-data,
a library for handling uploaded
multipart/formdata
in actix-web
-
actix-webfinger,
a library for making and serving requests for webfinger in actix-web
-
actix-ws,
a library for managing websocket connections in actix-web without the actix actor framework
-
background-jobs,
a library for managing retryable tasks that run in the background of an application
-
http-signature-normalization,
a library implementing the HTTP Signatures IETF draft
-
tracing-awc, a
library for adding traces to the awc HTTP client library
These libraries are mostly in service of building federated web applications, although the
actix-ws
library was created just to see if I could.