Michael Bailey .Net

About

Hello world

Hi there, I'm Michael. I'm a software engineer with a deep interest in user-focused, technology and engineering. I enjoy building tools to assist myself, and others, with my other hobbies and interests.

This site is a place for me to share projects I'm working on, write about technologies I 'm learning, and put into practice my learnings .

Projects

Gym Log Book

Gym Log Book is a full native Android app I built to help log my strength training progress. It features structured navigation, local data persistence, with plans to display graphs and support more exercise types.

When I started at the gym, I wanted a way of logging my progress. Whist I found lots of apps that could help with this, I found most of them to have complex functionality or had lacking UX. So I decided to create my own app.

After starting with some Apple shortcuts, I got the basic idea of what I wanted to include. Settings for free weights, or machines; Auto complete for sets; a list and possibly graphs for progress. All of which expanded my knowledge of Android app development.

Bramble Pi

This is my personal kubernetes cluster. It is a setup of 5 Raspberry Pi 5's, using K3s to create a 'simple' kubernetes cluster. This has been a big learning driver for me, as I've not had much experience with setting up deployment environments, managing compute resources, or setting up scalable software.

The core use cases for this is hosting my own projects, with cross-platform ones taking priority. In fact, this very website is hosted on it at this moment! the gym log book back and front end is hosted on here as well, as its current evolution requires a central server, although it is not set up to be the most scalable service in the world.

There are other project being hosted on this. one is a kind of service provisioner, a kind of kubernetes, but only for deploying docker based services, this runs on the control plane Pi, as it currently hosts a Minecraft server for myself.

Technologies

Kotlin

kotlin is my primary programming language. This is due to its flexibility between working on backend, frontend, and native applications. Whilst i have experience using industry standard frameworks, such as spring boot, i prefer to use Ktor and kotlin multiplatform.

Ktor

Ktor is a client and server http toolset for kotlin. it is written in kotlin almost entirely, with native parts to match platform specifics. This means i can have a kotlin backend, with a compose and Ktor website, desktop, and native frontends.

I am a fairly big proponent of the mono-repo. One repo with code, config, tooling and CI/CD. Ktor allows me to achieve this. In fact this website is written using Ktor. It has a familioar functional api like express, allowing easy extensibility, and readibility

Kotlin Multi-Platform

Kotlin multiplatform is the base for end-to-end kotlin applications. I use it for almost all my applications, when i need a native application. When combined with Ktor and Kotlin compose, it provides the most complete toolset for building full stack applications. An example of this is my gym log book app, where the fromtend is a desktop and a web application combined into one.

Rust

Rust is my current go to for projects that have well defined states. This is because of a number of it's features. Firstly, as a system language, it doesnt try to hide the inner workings of operations. Secondly its algebraic type system, i find to be the best for describing application state. allowing me to eliminate invalid states for my work, whilst forcing states from other frameworks to be reasoned into valid states for my use. Finally, The compiler (in general) is able to pinpoint where an error is, and often provides fixes where possible. This along with tools like clippy, allows correct and clean code (not the OOP clean).

Elixir

kotlin is my primary programming language. This is due to its flexibility between working on backend, frontend, and native applications. Whilst i have experience using industry standard frameworks, such as spring boot, i prefer to use Ktor and kotlin multiplatform.

Hobbies