These are a bunch of public personal projects in various mediums that I’ve dabbled with over the years.
I was really irritated that Microsoft OneDrive didn’t support Linux, and all of the existing OneDrive clients were kind of bad at the time (you want to download my entire OneDrive account to my local computer? Yuck.). This was my first golang project and has kind of taken on a life of its own with several tens of thousands of users. I attribute a lot of this success to it being easy to use and install compared to the existing alternatives.
- Github repository: https://github.com/jstaf/onedriver
- Fedora COPR .rpm repos: https://copr.fedorainfracloud.org/coprs/jstaf/onedriver/
- OpenSUSE Build Service .deb repos: https://software.opensuse.org/download.html?project=home%3Ajstaf&package=onedriver
- AUR: https://aur.archlinux.org/packages/onedriver
This was probably my first real coding project. I was really into this videogame called Starfarer many years ago (now Starsector), and decided to make a mod for it. Though I don’t really actively play Starsector anymore, I occasionally like to update the mod to work with the latest version of the game and boot things up again for old times’ sake.
This project was very important to me because it was what made me realize that computing was easy and more importantly, I enjoyed it. It was basically the start of what would later be a career. (This was in contrast to science, which I actually hated working on and really just liked playing with the computers.)
- Github repository: https://github.com/jstaf/mayorate
- Forum thread: https://fractalsoftworks.com/forum/index.php?topic=7372.0
- Starsector website (you need to buy a copy if you want to try this out): https://fractalsoftworks.com/
An early rigging of the largest capital ship in the mod, along with several of its fighters.
The hellish surface of the Mayorate mining planet of Inir. Probably my favorite digital painting I did for this project.
I used to work at a supercomputing facility that used OpenLDAP as an identity provider
for its compute clusters. If you’ve ever used OpenLDAP, you’ll know it’s a royal pain
to work with and you basically have to come up with your own tooling and
directory structure, which is a TON of work compared to Active Directory or FreeIPA.
ezldap was a set of Python scripts and clever templating used to make managing users,
groups, etc. much easier than it otherwise was using stuff like
I stopped working on this project after rolling out FreeIPA and/or IAM-based access at subsequent places of employment. FreeIPA does everything ezldap did for OpenLDAP, but better.
- Official documentation: https://ezldap.readthedocs.io/en/latest/
- Github repository: https://github.com/jstaf/ezldap
While working at the supercomputing facility, like half of my job was not just maintaining our compute clusters and running analyses, but teaching scientists and doctors how to use our systems. I wrote a lot of teaching materials and did a ton of workshops on various computing topics including teaching as part of some for-credit graduate courses at Queen’s University. Though I don’t really teach these types of workshops anymore, a lot of my teaching materials have been adopted by the community and now see widespread use across the world (the “Intro to HPC” and Snakemake courses I wrote for Software Carpentry are extremely popular).
“Write a genomics pipeline for a scientist and you can frustrate them for a day.”
“Teach a scientist how to program and you can frustrate them for a lifetime.”
- Intro to High-Performance Computing*: https://carpentries-incubator.github.io/hpc-intro/
- Intro to High-Performance Computing in Python (Snakemake): http://www.hpc-carpentry.org/hpc-python/
- Data Science with R: https://jstaf.github.io/r-data-science/
- HPC R: https://jstaf.github.io/hpc-r/
- R Package Development: https://github.com/jstaf/r-package-devel
- BioMaRt: https://github.com/jstaf/biomaRt_tutorial
Before I discovered programming, my hobby was writing music. I was never particularly good at it. I would spend all my time playing with synthesizers (all time favorite is Audjoo Helix) and mixing the tracks so they sounded perfect, but writing a melody and the actual music composition part was always a massive struggle and it was agony writing songs from start to finish and keeping the style consistent the whole way through.
I was a giant purist who thought that using any kind of drum loops, sampling from existing songs, or even using pre-existing synthesizer presets was cheating so most of my time was spent tweaking knobs to generate my instruments before I ever even got started. Obviously, I got very little done. Most of the time I would write something, come back the next morning, decided I hated it, and discard what I had before starting over. Even though I wrote a lot of different stuff, generally the only songs that I could reliably complete were soundtracks: I had a direct use for them (I was playing around with creating videogames at the time) and they also required genuine recorded instruments like strings so I would spend less time tweaking knobs and more time on music. (There’s probably a lesson to be learned here somewhere…)
I’ve mostly stopped writing music now (gave myself tinnitus and decided I had to stop if I didn’t want it to get worse), but these are a selection of my fully completed tracks I like the most.
This track never really got a title beyond the original filename (
when I created it. It was supposed to be ambient background music
for while you’re flying around space in one of my videogame projects, but it
ended up as probably my best track and somewhat dominates the mood whenever this
song would play in-game. (This sounds like a failure for what’s supposed to be
“background music”, but it actually works really well.)
I was actively trying to avoid using drums here as I didn’t think I was capable
of writing a song without a heavy drums all over the place at the time.
Fortunately, I was wrong. This is probably the only track I am 100% pleased with
from start to finish.
One of very few tracks I finished that qualifies as anything close to normal music. I wasted a ton of time with synthesizers here, every non-piano/drum instrument in this one was synthesized by hand by me again. The middle bit beginning at 2:00 is probably the closest I’ve gotten to releasing a professional-grade trance track.
This is a weird one. It doesn’t lend itself well to use in soundtracks (the whole song is a giant crescendo) or as normal music and there is a lot of odd stuff going on. The weird pulsing sound at 1:37 is actually a kick drum resampled in a horrible way and an ungodly amount of FX plugins mashing up what remains. I synthesized virtually all sounds in this track from scratch aside from the opening pad and guitars (even those got pretty warped though).
Steel Rain was probably my most popular song because it works perfectly for what it was meant to be (videogame battle soundtrack) and also evokes the same feeling as the classic game Homeworld (notable for having lots of very atmospheric and space-y sound to it). This was the easiest of the tracks to write. I found some exceptional taiko samples on a random corner of the internet, added in an African drum set, and then just went to town with them and a couple of very menacing soundfonts and pads. Basically wrote itself once I had the right sounds to start with.
This was a R package I wrote during grad school to compute statistics on Drosophila melanogaster behavior as measured by Trikinetics’ Drosophila *Activity Monitor. The one and only R package I’ve released to date.
- Github repository: https://github.com/jstaf/actmon
This was a MATLAB GUI application I wrote to better measure changes in neuronal activity over time when using GCaMP (a phosphorescent protein used to measure neuron activity) and a very specific imaging setup on a confocal laser microscope. I can’t imagine anyone outside of my old lab using this, but it made some pretty sweet 3D images of neurons over time.
- Github repository: https://github.com/jstaf/GCaMP_4D
Two neurons imaged in-vivo activating in response to a stimuli.