Portrait of William via Gravatar

William Huster

A Small Time CTO Near You

Latest Posts

Fun with Stable Diffusion and Dreambooth

(4 min read) Today I played around with Stable Diffusion and Dreambooth to make a bunch of silly pictures of myself and friends.

Focus Stacking is My New Favorite Photo Thing

(4 min read) It's my first time owning a camera with a focus stacking / bracketing feature - and it's awesome!

How I extract Metadata from Photos for My Blog

(4 min read) This is how I use exiftool to extract the metadata from my photos to markdown.

I Built an Ortholinear Keyboard

(5 min read) I built an ortholinear keybaord and retrained my brain!

State of JS 2021 Thoughts

(5 min read) The 'State of JS' survey results are always an interesting and informative read - my observations and TILs.

Explore JavaScript with Axis & Allies

(30 min read) Use JavaScript to write a Monte Carlo simulation to estimate the probabilities of winning combat scenarios in Axis & Allies.

Fly Me to the Moon

(1 min read) Wherein I compare product dev to moon landings.

Practice Command Line Programming with wtf.py

(7 min read) Let's write a command line tool in Python to record WTF moments during code reviews.

Create Radar Charts with Python and matplotlib

(5 min read) Radar charts are a great way to visually compare sets of numbers. They also help us gain an intuitive understanding of the data structures and pattern matching processes that underpin almost all automated matching, pattern recognition, and machine learning algorithms.

VueJS Radio Buttons, v-model, and the name Attribute

(2 min read) I just ran into an annoying issue with the `name` attribute while using radio buttons with VueJS.

A Pattern for Live Form Validation

(12 min read) Use JavaScript to validate user input in real time without a framework.

A Simple VueJS Currency Filter

(2 min read) Unlike other front-end frameworks, VueJS does not provide any filters out of the box. Here's what to do if you need to display formatted currency amounts in your Vue project.

Presenting Alert! Alert!

(2 min read) Alert! Alert! is dependency-free JavaScript library to easily add UI notifications to any web project.

Writing Plain Text Templates for Email in Django

(1 min read) The short answer is *don't*. Here's how to use the html2text library to auto-generate plaintext emails.

Easily Advance a Python datetime.date by One Month with Arrow

(1 min read) Here’s a nice one-liner using the Arrow library to advance a Python datetime.date object by one month.

Python Code Style Linting with SublimeText

(2 min read) PEP 8 sets out some style guidelines for Python. Rather than commit these to memory, use a linter! Here's how to do it in SublimeText.

Popular Work

AngularJS TimePicker [Codepen]

This is a timepicker component partly inspired by the Google Calendar timepicker. It allows for flexible time entry by typing or by selecting a time from a dropdown menu. It also works with the AngularJS ng-model and form validation.

Alert! Alert! [Codepen|Github]

Alert! Alert! is a tiny, dependency-free JavaScript library to add UI notifications to any web project. The notifications stack on the side of the screen and can be dismissed with a click or configured to disappear after a pre-set time.

InfoDots [Codepen]

Info Dots are a dependency-free UI Component you can use to annotate bits of your web site or web app interface. They appear as small, pulsing anchors that you can attach to practically any DOM Element. Hovering over an info-dot reveals a tooltip.

Basic JavaScript Game Engine [Codepen]

An experimental game engine from scratch, written in JavaScript. The engine provides components for building game objects, handling keyboard input, and rendering to a canvas using SVG. This demo also features "Player" and "Enemy" classes with composable mix-ins for movement and basic AI.