Personal Health Dashboard

At the time of writing (2024), this is my main personal project. I’m trying to track all the data related to personal health - particularly sleep and energy - as possible, and try to find patterns and correlations between them. I’d like to optimise my energy levels as much as possible, and am solving that in the most Me way possible - by throwing inordinate amounts of time and software engineering at the problem :)

Web

Undiscovered Guide Undiscovered Guide is a travel website I created with my partner while we were travelling, to help others explore our favourite parts of the world. It’s pretty popular, getting over 30,000 monthly page views. It’s a completely custom web platform (no Wordpress or similar) which allowed us to create more useful travel guides than traditional blogs, and there’s a lot going on under the hood: The frontend is written in Scala, transpiled to Javascript with ScalaJS.

Languages

JVM I’ve written several projects related to the low-level JVM internals, which has been a great learning experience. These are all written in Scala: JOak JVM: a basic, but functioning, JVM. Includes an optional debugger/visualiser UI (written with ScalaFX) for stepping through the opcodes while viewing the stack operands, local variables, and classfile constants, which makes for a great learning exercise for those wanting to know how the JVM works. JOak Analyser: a command-line tool for debugging & analysing JVM .

Android

Split the Bill is an Android app, written in Scala and published on the Google Play Store (have now removed as I lacked time to keep it maintained). This app’s not going to win any design or complexity awards, and was more of a successful hobby project to learn Android development and publish an app in a few days. It’s also a useful example of a Scala Android app. Scala adds wrinkles to the Android setup, as its standard library is so large that it breaks Android’s method limits, and needs to be tree-shaken with Proguard before deploying.

Desktop

MiniPlay The web-based Google Play Music (update: now dead :( ) is was great, but I was forever having to find the right browser tab just to change or like a song. So I wrote this desktop widget to be able to control my music easily without needing to go to the browser. It has two parts: Chrome extension: Written in Javascript, this is what interfaces with the Google Play Music tab.

30 Day Typing Challenge

I have a confession to make. I’m a professional software developer and have been for many years, and have spent much of my life in front of a keyboard. But my typing absolutely sucks. From a distance it sort of looks like I touch type. My hands certainly move fast enough. But instead of my fingers remaining nicely glued to the home row, where they belong, my left hand will unexpectedly dart over to the right side of the keyboard.

3D

I’ve always been interested in 3D, and this is the start of an attempt to write a 3D engine in Java for learning purposes, based on OpenGL and ideally in an immutable function-programming style. So far I’ve developed a basic-but-functioning 3D renderer, including support for shadows, lighting (directional & point-based), textures and models. Like any renderer, it has help: it uses JAssimp for model loading, OpenGL via the LWJGL bindings for the drawcalls, and an image library for loading textures.

First!

Hey :) So… Don’t really have a clue what to put here yet! Gonna fill this up… I promise.

Games

Nonograms Nonograms! I’m absurdly addicted to these. It’s written in Scala, compiled to JS with ScalaJS so it can be embedded here. The engine is almost completely pure/immutable, and all components are nicely separated with no strong binding between UI and game logic. It includes an AI capable of solving most Nonograms. The source is on Github. How to play: Left-click to mark a block, right-click to delete empty ones (and you can click-drag ranges too).

Tools for Bloggers

SEO Flow SEO Flow is a plugin for the Wordpress website platform, that lets users search for common search terms put into Google, optimise their articles to rank well for those terms, and then track those rankings. The UI is integrated into Wordpress, and is Scala transpiled to ScalaJS, and skinned with CSS to look very close to the Wordpress admin theme. The backend is in Scala. The backend is designed to handle plenty of users at scale.

The Best Garmin Fitness Watch (For Me)

Fitness watches are electronic watches that monitor health and fitness related metrics throughout the day. Depending on the watch these can range from simple heartbeat measures, to semi-sophisticated sleep analysis, and even full navigational maps. In typical Graham fashion, my feelings about them have gone from ‘couldn’t care less’ through ‘I must have one immediately’ to ‘I own one’ in about 4 days. I’ve chosen the Garmin Vivoactive 4S (£230), for these reasons: