Luke Turner

Welcome to my homepage. I'm a software developer who enjoys Web service development, high availability clusters, and languages that transpile to Javascript, like: Clojurescript, Nim.

One might ask, why bother to have a static homepage in the era of LinkedIn, Facebook, Medium, and Twitter? For me, homepages are a reminder of what the Web was first meant to be. A blank slate for expressing yourself. An emphasis on content over form. A network of links that let you dig deeper into interesting topics. Pages emphasizing ideas, individualism, creations, and projects — not firehose news feeds or auto-tagged vacation photos. It also doesn't hurt that this page is simple HTML, that can be viewed and downloaded anywhere. This site looks great on Lynx. Facebook, of course... not so much.

I graduated Gonzaga University in 2013 with a B.S. in Math and Computer Science.

I'm currently employed at Redox, working on a unified platform for health data. At Redox, I do infra/DevOps projects, front-end development, and everything in between. My current focus is building our next-generation healthcare data storage services.

If you want to read more, you can check out my blog, or visit my profile on Github or sourcehut.

Websites

Dust (desktop and mobile) • source
Screenshot of Dust's daily agenda page with some example tasks. A Web app for managing tasks. Add all your tasks and forget about them. Every day, visit the app to get a list of 3 daily tasks, picked for you automatically. Flag tasks as Important, Urgent, or Someday/Maybe to influence which tasks are picked first. Tasks can be backed up to a Git repo for safekeeping. Built with Next.js, Prisma, and Postgres. Deployed on Fly.
PaaS Price Estimator (desktop and mobile) • source
Screenshot of PaaS Price Estimator comparing Fly.io and AWS Fargate pricing. Perform back-of-the-napkin price comparisons between PaaS (Platform as a Service) providers, e.g. Fly, Render, Fargate, etc. Can estimate prices for compute, network egress, block storage and IPs/endpoints. Built using SolidJS, Vite, and Tailwind. Prerendered using vite-plugin-ssr so you can read the pricing tables without JS.
Perspective Toy (desktop only) • source
Screenshot of Perspective Toy showing cubes in 1P and 2P perspective. A little Canvas applet that illustrates how vanishing points are used to draw cubes in perspective. Supports 1P and 2P perspective. Built with Vite, no run-time dependencies.
Factor (desktop only) • sourcealt. source
Screenshot of Factor showing a production graph A Web-based tool for calculating production rates and ratios in factory games. If you've ever played Factorio and found yourself spending more hours on making spreadsheets than playing the game, you understand the use-case for Factor! Built using Clojurescript and re-frame.
G.O.L.EM. (desktop and mobile) • source
Screenshot of Golem showing the acorn pattern Interactive Conway's Game of Life implemented with Clojurescript and HTML Canvas. Supports importing/exporting RLE-formatted patterns and creating your own patterns in a point-and-click manner.
sµdoku (desktop and mobile) • source
Screenshot of a Sudoku game being played Lightweight (<100 kb) yet feature-rich Sudoku game for desktop and mobile. Includes puzzle solving, configurable puzzle generation, and quick notes. Built using starter-kit (see Libraries).
PersonalPVT (desktop and mobile) • source
Screenshot of PersonalPVT's homepage A psychomotor vigilance testing application. Runs fully client-side using in-browser data stores. Built with Angular 1.3.
Context Commander source
Screenshot of Context Commander A Web app that allows you to install custom context menu entries for Windows Explorer. Unlike similar tools, it requires no registry access or special permissions. Instead, it generates a .reg file that you can download and run.

Libraries

cli-of-mine
A library for creating CLI applications with Node.js. Supports automatic helptext, arguments, options, subcommands, "verb-noun" commands (a la kubectl), and more. Provides an unopinionated API that can be easily bolted onto any codebase to add CLI support. Written in Typescript.
starter-kit
Scaffold for getting up and running quickly with client-side Javascript development. Includes build tooling with webpack, and self-documenting Flux-inspired modules written in Literate CoffeeScript. (Outdated)
contextext.py
A Python library for generating .reg files that can be executed to add context menu entries to Windows Explorer. Deprecated by Context Commander (see Websites).

Utilities

gitea-fly-connector
A tiny, self-hostable server that runs in Fly.io and automates GitOps-style deployments with Gitea-compatible webhooks. Intended to bridge the gap between Gitea and Fly without adding the overhead of a full CD tool. Written in Clojure for the babashka runtime.
repost
CLI tool for testing HTTP requests, designed to work alongside other tools in a Unix pipeline. Supports EJS templating, JS hook files, environment files, etc. Written using Typescript and my cli-of-mine library.
tag
Utility for organizing files non-hierarchically with... you guessed it... tags! Tags are stored in SQLite database(s), so even large tagsets are very performant. Can be used as a CLI tool or as a Python library.
shboard
Terminal-based dashboard for AWS servers. Designed for rapid access to important information. Can integrate with New Relic Servers for inline metrics. Built with Blessed + CLJS.
fitocracy-export
Python utility for exporting personal exercise history from Fitocracy. Uses undocumented Fitocracy.com XHR APIs since no official method was available.
flymirror.py
Tiny, multithreaded, rule-based mirroring script (for bulk downloads or hypermedia traversal). Contained in a single .py file.
apns-testing-server
A simple Python implementation of an APNS v2 server, for use in APNS client debugging.
mkjunk
A CLI tool that outputs a specified amount of meaningless, but safe (non-random) data. Useful for generating requests for API stress testing.
lpass-add / lpass-env
A pair of lightweight scripts for managing operational secrets (SSH keys and environment variables, respectively) in LastPass.

IPython Notebooks

n-gram tutorialsource
Tutorial on writing an n-gram model in Python.