Programming Projects

This is kept up to date by some code here

exobrain

GitHub | GitLab | HTML/Bash

external brain – uses pandoc to generate my blog/brain dump. See here for more info.

ffexport

GitHub | GitLab | PyPi | Python

export and interface with firefox history/visits and site metadata. Ensures I don’t ever lose any of my browsing history, and lets me do larger analysis on my behaviours, though HPI.

autotui

GitHub | GitLab | PyPi | Python

helpers to prompt, validate, and persist python objects to and from disk using type hints

glue

GitHub | GitLab | Elixir/TypeScript

Used to glue all of my web applications together. Simulates an old GUI interface, with desktop icons and draggable windows. Located at sean.fish.

HPI

GitHub | Python

Human Programming Interface. A way to unify, access and interact with all my personal data. It hides the gory details of locating data, parsing, error handling and caching. You simply ‘import’ your data and get to work with familiar Python types and data structures.

darker_errors

GitHub | GitLab | Go

A minimal dark-themed HTTP error page generator. Implements a basic template language, to allow interpolation based on HTTP status codes.

no-db-static-shorturl

GitHub | GitLab | Go

File based single-binary URL shortener server. Has no dependencies; doesn’t require you to setup a database.

plaintext-playlist

GitHub | GitLab | Bash

Interactive terminal playlist manager, storing contents in readable text files. Was my first attempt at creating a relatively large bash application. Seems that most people tend to use spotify/apple music nowadays, but I still like having music locally. This lets me manage playlists locally without having to use one of the bulky GUI applications.

bgproc

GitHub | GitLab | Shell

bash loop to run tasks in the background. I use this instead of anacron/cron. uses a lockfile to make sure duplicate processes aren’t running, and evry to schedule tasks periodically.

raspi-backup

GitHub | GitLab | Shell

script to periodically back up my machine to my raspberry pi. Is pretty minimal, just uses headless raspbian with an external 4TB that gets mounted on boot.

mpvf

GitHub | GitLab | Shell

Interface to select youtube-dl format for streaming videos with mpv

subpath-serve

GitHub | GitLab | Go

Serves text files from a directory by matching subpaths. I use this to serve my dotfiles here. It also allows me to quickly send someone one of my scripts/configuration files from my dotfiles using this script

xkcd-favorites

GitHub | GitLab | HTML

A list of my favorite xkcd’s. Was initially rendered client-side with some JS, but I now use a bash script to convert it to a static site. Hosted here

evry

GitHub | GitLab | crates.io | Rust

A shell-script-centric task scheduler; uses exit codes to determine control flow.

dotfiles

GitHub | GitLab | Shell

My dotfiles; using yadm. Includes lots of my scripts, and my configuration files for everything. See here for an index.

Works on both Mac/Linux(Arch)

ipgeocache

GitHub | GitLab | PyPi | Python

A small cache layer for IP geolocation info

url_metadata

GitHub | GitLab | PyPi | Python

A cache which saves URL metadata and summarizes content. Acts as an abstraction layer for fetching youtube subtitles, a summary of the HTML, opengraph information, links to images/videos.

mpv-sockets

GitHub | GitLab | Shell/Python

A collection of scripts to allow flexible and easier interaction with mpv sockets. Also contains a daemon, which connects to any active mpv instances, collecting metadata so I have a history of what movies/music I’m watching.

aw-watcher-window

GitHub | Python

Cross-platform window watcher. This is a daemon that sits in the background, and logs what window I’m currently using, and for how long. Forked from ActivityWatch to log to a file instead

ttt

GitHub | GitLab | Go

Logs metadata for shell commands; an extension to my shell history.

havecmd

GitHub | GitLab | Shell

A template for my bash scripts, to provide a nicer interface to check for the presence of external commands on the users $PATH

mint

GitHub | GitLab | Python/Shell

Wrapper script/code to interact with mintable; to keep track of my accounts/transactions and create a personal budget.

calories-fzf

GitHub | GitLab | Shell

A fzf interface to calories, to add something you’ve eaten in the past again.

mal-unapproved

GitHub | GitLab | Ruby

website that displays unapproved MAL (MyAnimeList) entries. MAL doesn’t provide this functionality on their website, so its not easy to know if you’re submitting a duplicate entry to the database.

discord-countdown-bot

GitHub | GitLab | Python

Discord bot to use for countdowns. I use this as an alternative to syncplay – to make sure everyone in a discord channel are all hitting play at the same time when watching movies/TV shows together.

pushshift_comment_export

GitHub | GitLab | PyPi | Python

Exports all accessible reddit comments for an account using pushshift.

spkglist

GitHub | GitLab | Go

A simple package list parser. Used to clean up comments/newlines/spaces from a list of packages when installing packages in shell scripts.

pmark

GitHub | GitLab | Perl

A hacky, markdown pre-processor. Uses code blocks to generate markdown, from within the markdown itself.

tts

GitHub | GitLab | Shell

CLI tool to convert text to speech using the StreamLabs API

mal-id-cache

GitHub | Python

An cache of MAL IDs updated whenever something is added to the database. See here for more info.

lolexport

GitHub | GitLab | Python

Exports League of Legends Match History metadata using the RiotGames API. I don’t play league of legends that often anymore, this is to export my entire match history so I can do some analysis as part of HPI.

calcurse-load

GitHub | GitLab | Python

Personal hooks/scripts for calcurse. Sources events for calcurse from Google Calendar and todo.txt

greasyfork_archive

GitHub | GitLab | PyPi | Python

Scrapes data and code from a users Greasyfork account.

vps

GitHub | GitLab | Shell

Scripts used for installing/managing/restarting/monitoring processes on my server (and my server). Wraps supervisor to handle process crashing. Includes other misc scripts (mediaproxy/remsync) to provide FTP/Proxy-like functionality.

jikan_ex

GitHub | GitLab | Hex | Elixir

An elixir wrapper for the Jikan API.

shortcuts

GitHub | GitLab | Ruby

Converts a toml file into shell scripts. I use this to convert short/one-liner shell commands into individual files. This makes my scripts easier to share with others, not dependent on shell-specific syntax (e.g. exported bash functions), and makes scripts accessible to other scripts/launchers like rofi/dmenu.

albums

GitHub | GitLab | Python/SQL

An amalgamation of acclaimed album lists. This is my replacement for RateYourMusic.

This was started years ago, before I knew how databases worked, so my database is a google sheet. I then learnt SQL, so it also has code to convert the google sheet to a MySQL schema

Also includes an API that lets me list recently listened albums on my media feed

keepassxc-pwned

GitHub | GitLab | PyPi | Python

Checks a keepassxc database against previously breached haveibeenpwned passwords.

wca_userinfo

GitHub | GitLab | Rust

A tiny web server that scrapes information for a user from worldcubeassosiation.org. Web scraping in rust is a bit cumbersome, but it was some nice exposure to using Results and error handling. I scrape my page from the WCA website once per week, and use it to generate this page on my website.

xqc-dvd

GitHub | GitLab | Elm

A browser DVD logo animation/game. Was a project for learning Elm; Hosted here

tinspire

GitHub | GitLab | TI-BASIC

programs I wrote on my ti-nspire cx back in the day

animeshorts

GitHub | GitLab | Python

Code for generating and maintaining my (static) site for anime short films/series. Generates the html with the generic yattag package, doesn’t use a full SSG framework.

steamscraper

GitHub | GitLab | Python

Scrapes personal game/achievement data from steams website.

blizzard_gdpr_parser

GitHub | GitLab | Python

Parses date-related information from my blizzard GDPR export.

forum_parser

GitHub | GitLab | Python

Parses post/metadata from random forums I used in the past

bootstrap

GitHub | GitLab | Shell

A script to setup a new bash VPS/servers with defaults I like. This is one of the first things I do whenever I setup a new server, so I have all my vi bindings and aliases.

cube-scramble-cli

GitHub | GitLab | PyPi | Python

A CLI for pyTwistyScrambler, to generate random states for twisty puzzles.

docker-jikan

GitHub | GitLab | Dockerfile

Personal Jikan setup; so I don’t have to compile PHP 7.3 on new servers.

dotfiles-index

GitHub | GitLab | TypeScript

SSG to display my scripts/configuration files from my dotfiles. I replaced this with subpath-serve, next.js’s core is great, but its missing some of the auxiliary tooling (specifying a different base path easily) to let me host this on my site easily.

exists

GitHub | GitLab | C

Pipe to test if files exist. Got tired of doing the unreadable: xargs -I {} sh -c "[ -e \"{}\" ] && echo \"{}\"" when doing shell one-liners, so this simplifies that.

foreverjs-list

GitHub | GitLab | JavaScript

Express API to get information about forever.js processes. I used to use this to ping my server every 10 minutes to make sure my processes were still running. I use my fork of superhooks to do that now.

superhooks

GitHub | GitLab | Python

Posts supervisor event data as an embed to a discord server. This sends me notifications whenever some process on my server crashes/restarts.

genpasswd

GitHub | GitLab | C++

Yet another Password Generator. Theres lots of these out there, but writing my own means the flags match exactly what I want.

greasyfork_repo_generator

GitHub | GitLab | Elixir

Archives a users Greasyfork account and creates a Github repo from the information. Uses my greasyfork_archive package.

keyvol

GitHub | GitLab | Go

An interactive terminal interface for pamixer/pactl to control system volume. I use this on my laptop when I’m using my external keyboard to change volume so I don’t have to reach to the volume keys. Also means I don’t have to leave home row to change my volume.

largechar

GitHub | GitLab | JavaScript

Displays large characters on your screen. Was a replacement for this Alfred feature, and an excuse to do some GUI programming with electron (if one can call it that)

mal-notify-bot

GitHub | GitLab | Python

Discord bot that checks the MAL (MyAnimeList) “Just Added” page, reporting newly added entries.

poly-project-euler

GitHub | GitLab | ???

Solutions to Project Euler, using distinct languages. I really like learning new languages, so this was an excuse to do that.

proxy-jikan

GitHub | GitLab | Python

Self-signed (HTTPS) token-authenticated proxy for Jikan. Used so I quell my paranoia of being IP banned. Can also act as a generic proxy.

mac-dotfiles

GitHub | GitLab | Shell

My old dotfiles for Mac. Has now been combined into my single dotfiles repo

pythonanywhere-3-months

GitHub | GitLab | Python

Clicks the ‘Run until 3 months from today’ button on pythonanywhere, so your website doesn’t deactivate automatically.

MALUserVsAverage

GitHub | GitLab | Python

generate a graph that shows correlation between the user and average score on MyAnimeList

reddit-wallpaper-scraper

GitHub | GitLab | Python

Scrapes the top posts from wallpaper subreddits. I’m not huge into collecting wallpapers, but I wanted to have a couple hundred in my rotation. This scraped and classified ~7500 images in about 15 hours.

random_shmup

GitHub | GitLab | Python

An old pygame shoot ’em up space game

selenium-shutterfly-scraper

GitHub | GitLab | Python

(At least when I did this), there was no way to download all of your images off of a shutterfly account. This used a combination of selenium and pyautogui to do that.

full_todotxt

GitHub | GitLab | Python

A todotxt interactive interface that forces you to specify certain attributes. Used in combination with todotxt_deadline_notify, to allow me to quickly create todos and have notifications to remind me to do them!

todotxt_deadline_notify

GitHub | GitLab | Elixir

Sends me reminders in discord when deadlines for my todos are approaching. Syncs from my list of local todos (a text file, following the todo.txt standard) up to my server.

twitchlive

GitHub | GitLab | Go

A CLI tool to list which Twitch channels you follow are currently live.

wait-for-internet

GitHub | GitLab | Rust

Command line utility that waits till you have an internet connection. I use this multiple times daily since the I have multiple routers at my house depending on whether or not I’m connecting to my NAS/am upstairs or downstairs. Often like wait-for-internet && <some command that requires an external connection>

fuji

GitHub | GitLab | Python

When it was still allowed, automated the process of creating an free trial account on ForJoyTV using selenium, to watch Japanese TV.

cookiecutter-template

GitHub | GitLab | Python

cookiecutter template for new python projects, using pipenv, pytest, and mypy

cookiecutter-lib

GitHub | GitLab | Python

Cookiecutter template for a basic python library. Is meant for packages I don’t intend to push to pypi, includes seutptools to install some python code I want to have globally installed, and basic installation method to install from my github.

vimbuffer

GitHub | GitLab | PyPi | Python

Lets me edit files and strings in temporary vim (or some other console editor) buffers. I’ve mostly replaced this with my heavy use of a customized ranger

oh-my-stars

GitHub | Python

An offline CLI tool to search your GitHub Stars. Forked from here to have a simpler interface and also index all of my repositories, in addition to any stars.

sonic_pi_music

GitHub | Ruby

some music created using sonic pi