Open-source work & personal projects.
Most of my work is done on web applications and some code libraries/packages, but also occasionally some things related to electrical engineering.
I've written about some of my work here, in order of how I important I find the project or how much I worked on it. First one is a music player named Diffuse, and following are: a local-first toolkit ODD SDK, a “static-site-generator” library Shikensu, an electrical-wave analyser Waves, and more …
I've been working on this personal project on and off since 2012. Started out when some of my favourite music got removed from Spotify. Decided then and there that I'd start buying music and build my own music player. I uploaded my bought music to Amazon S3 and connected it to my app. Since then it's evolved into a decentralised local-first app. It's got two layers of data storage, (1) the user-data layer with your favourites, playlists, etc, and (2) the music layer. Both layers can have separate remote storages, for example, user data on Dropbox and music on Amazon S3.
Open Distributed Data
The ODD SDK is a local-first toolkit that helps developers build systems that store data in a secure, reliable, and decentralised way. The focus is on the user, providing them with sufficient authority while still being convenient.
We want our data accessible from anywhere and distributed, meaning it can live partially or fully in multiple places. Ideally, as much of this data as possible lives on user owned devices and communication of this data will be done in a decentralised, peer-to-peer fashion.
I was tired of always keeping up with the latest static site generators, so instead I built a library that's one level down of a static-site generator. It's sort of a static-site generator in library format, you write code to generate your website. For example, say you have a folder of markdown articles and you want to generate HTML pages for each of them. You tell Shikensu, through code, to look at your folder that contains the markdown. Then Shikensu scans the entire folder structure and you end up with a data structure that can be manipulated and then optionally written back to disk to, for example, get your HTML pages. You would then instruct Shikensu in code to render markdown, change the extension, wrap the file in a folder, etc.
Through the years I've written various iterations of this, but the basic idea is still the same. The latest iteration is written in Gren (Elm fork/dialect). The one before that was written in Haskell.
main : Shikensu.Program
Shikensu.program sequence CurrentDirectory
sequence : Shikensu.Task -> Shikensu.Task
sequence task =
|> Task.map (Shikensu.withExtension "md")
|> Task.andThen Shikensu.read
|> Shikensu.renameExtension "md" "html"
|> Shikensu.permalink "index"
|> Shikensu.renderContent renderMarkdown
|> Task.andThen (Shikensu.write destination)
destination : Shikensu.Focus
Relative (Path.directory [ "build" ])
Electrical circuits explained.
A tiny app that shows a random quote from a given collection. This app will be made local-first somewhere in the future.