Skip to main content
Pharos

Fun stuff

Here are some examples of projects I coded in my free time. Most of them were built to make my life and work easier, some just for fun and learning.

Quick navigation: Python Rust Go

Python.

Judy - voice assistant.

My favorite project so far - imagine J.A.R.V.I.S. had the voice of Judy Alvarez from the Cyberpunk 2077 game. Because the default voices suck (too robot-like) while Cyberpunk and Judy rock.

I'm using offline speech recognition to have Judy passively listen to keywords. She will respond verbally and execute some action - start software, execute scripts, play music.

She will later be connected to hardware and handle lights, curtains, windows, Wi-Fi, and the like. This also means she'll move from my local machine to a Raspberry Pi.

For verbal feedback I currently use short audio files that I extracted from the game. There are many different ways to respond for yes/no/confirmation etc. so she'll pick a random one for a more realistic feeling.

A voice assistant is not that special, so I am figuring out how to synthesize a complete voice model. With around 1.500 audio files from the game it should be possible to get some results. I think there are not so many people who have done that :)

jitsilinker - Generate online meeting links.

Dead simple yet useful script that saves a little time whenever I have a meeting. It works like this:

  1. Execute the program.
  2. It will randomly choose three words (adjective, location, and creature)...
  3. ...and assemble a link which looks like this:
    https://myjitsi.xzy/curious-shire-bantha
  4. ... and open it in a new browser tab.

Assuming it took two hours to build (most of that to come up with 3x 24 (from A to Z) words - has to be fun!) and I save 15 seconds compared to manually creating these links it will pay off after approximately 480 meetings!

Web scrapers.

I have a couple of scripts which collect different kinds of information. The most frequently used ones are these:

  • Weather - gets the data for the next seven days and displays it in a table with colored ASCII graphics for the different conditons.
  • Books - checks the availability and the current price for each book on my wish list so I can buy them when they are on sale.
  • Pantry restock - similar to the previous one but for each of my staples, compares the current total cost to the sum of their regular prices. I use it time my re-stocking orders.

Website status checker.

Pings websites and returns any status code other than 200. It ran regularly as cron job and notified me if any site couldn't be reached so I could take a look and act accordingly. I have a better solution for status monitoring now but it was a fun thing to do in the beginning.

File sorter.

Tiny script using tkinter for GUI. Lets the user choose source and target directory. When the "Move" button is clicked, all files newer than 24 hours will be transferred to the target directory. Use case: automate the sorting after creating or downloading lots of files (mostly images; think screenshots or wallpapers) - automatically sorting based on file extension wouldn't work here.

Rust.

Potpourri - project setup wizard.

My first project written in Rust. It's a CLI tool to easily set up different development projects. It works like this:

  1. Run the program and provide the name of the project as argument.
  2. Choose desired stack. screenshot of potpourri
  3. A new directory will be created:
    ../development/chosen_stack/project_name/
  4. The corresponding boilerplate will be cloned into this directory...
  5. ...which will then be opened in VS Codium.

Go.

pdir - project directory scaffolding tool.

My first steps with Go. It's a simple CLI tool that will create the directory structure for different kinds of projects. Easy as 1 2 3:

  1. Run the program.
  2. Choose desired stack. screenshot of potpourri
  3. The corresponding directory structure will be created.
    cwd/projectname/etc/etc/

I could have integrated this in potpourri (see above) but 1) projects can start yet the stack has still to be decided and 2) I wanted to tap into Go anyways (and brag about it ¯\_(ツ)_/¯).