Portrait of William via Gravatar

William Huster

A Small Time CTO Near You

All Posts


Exploring Battle Outcome Probabilities in War Room by Larry Harris

(22 min read) Using Python to explore the probabilities of battle outcomes in War Room, a grand strategy board game similar to Axis and Allies.


How to Use a Bash Script to Count Your Heroku Releases

(6 min read) I asked ChatGPT to help me write a bash script to count the total number of production releases our company has made to Heroku.

Automatically Caption Your Videos with Whisper and ffmpeg

(5 min read) A quick tutorial on how to use OpenAI's WhisperAI library to automatically generate high-quality closed captions for your videos and attach them to your videos using ffmpeg. This process is entirely offline, meaning it's efficient and safe from prying eyes!

I Support Your Dark Mode Preference

(1 min read) I finally updated my blog (williamhuster.com) to respect the dark mode / light mode preferences of the user's browser. It was surprisingly easy!

'Weighed Down' - How I Made an AI Music Video with Mighty Brother

(6 min read) We told an AI the story of this song, and fed it some lyrics, and here is the result.


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.


String Matching with Levenshtein Distance

A demonstration of a case where I cleaned up messy, mismatched data using Levenshtein distance to find and rank likely matches.


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.


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.

InfoDots [Codepen]

(4 min read) 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.


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.

Basic JavaScript Game Engine [Codepen]

(4 min read) 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.

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.


Packen Heat, Private Eye

(10 min read) Back in 2006, my friend Eva d'Ambrosio and I wrote and performed a 'Global Warming Cabaret'.

Intermedia Festival, IUPUI

(2 min read) A digital art festival that I participated in.

'Gas Mask' Breath Detector

(2 min read) Sharing progress on a new interactive media piece I'm working on.

The FOUND Art Show

On September 23rd, 2009, Youngsuk Altieri and I showed our 'Connections' piece at the FOUND art show at The Lodge in downtown Bloomington.

Interactive Design for 'Nachi'

(2 min read) In December 2009, I collaborated with digital artist Arthur Liou on the interactive design for his piece 'Nachi'.

'Salvation' Interactive 3D Environment

(2 min read) An interactive 3D environment inspired by the time I spent in El Salvador.


Travel Update #12: Low-Def Photos

Busy times in Berlin. Yesterday I handed in fourteen pages of pure German text for my two literature courses.

Travel Update #11: Gahaaa!

Busy times in Berlin. Yesterday I handed in fourteen pages of pure German text for my two literature courses.

On the Art Front

Berkeley Student Yotam Mann created this multi-touch instrument with some cardboard, a couple of lasers, and a webcam.

Wolfram Alpha Computational Search Engine

Is computational search the future of the Internet and a threat to Google's dominance?

Travel Update #10: Part II of the Oberschule Saga

Okay, I owe you the rest of the story about what I observed in the classroom at the Oberschule.

Travel Update #9: Some Observations from the Oberschule

Well, I'm feeling a little productive, so I decided to write another little post. A little more about my experience at the Oberschule.

Travel Update #8: Midterms, Internship

As the final exams fly by in the US (for most of you they are already done), I'm taking a little break from studying for my midterms, which are coming up this week.

Travel Update #7: Some Images from Walpurgisnacht

Some images from Walpurgisnacht in Kreuzberg, Berlin.

Travel Update #6: Walpurgisnacht - Wal-Mart-Begone-Night

I know you're thinking, "What does William do all the live-long day, and has he turned German yet?" Let's talk about recent developments.

Despicable: Iran Death Penalty for Bloggers

I came across this video report about Iran considering the death penalty for bloggers.

Travel Update #5: Warnemuende

My host mother earned a Stipendium to do art in a little house in Warnemuende on the Ostsee (Baltic Sea).

Travel Update #4: Prague

A brief note about my travels in Germany from the great city of Prague.

Germany Photo Album - 2009 Study Abroad

I finally got around to uploading some pictures. It's been a grueling process, but I think it was worth it!

It's not what it looks like!

I did a double-take when I saw it, and then I saw the advertisement below for The Producers.

Travel Update #3: Arrived in Berlin

Well, here I am in Berlin two weeks before the IES Program officially begins with nothing much to do!

Travel Update #2: Ready to Go

My bags are neatly packed, and tonight I'll drive to Indianapolis to spend the last couple days with my family before I fly to Germany on Sunday.

Why is Google so Brilliant?

So, while I was in DC, my friend Neil turned me on to the divine radiance that is Gmail....

Two Great Things I Just Found

(1 min read) I'm about to drive back to Indianapolis, but before I go, check these out...

Val's Art Diary

(1 min read) A recent feature on Youtube, and how interesting! Val has turned her paintings into a digital brand.

Inauguration Fever

(1 min read) A brief recap of my experience at Obama's first inauguration as President of the US.

Travel Update #1

(1 min read) My plans are set for the next month, so here they are!

Handy Speed Painting

(3 min read) I found a post over at Gizmodo about speed painting on the iPhone.


Improve Your Writing

(3 min read) Since keeping a blog consists mainly of writing, and I haven't studied writing for some years, I definitely needed a refresher. So I took some time today to search online for some writing style tips.

Making the Habit

(1 min read) In my quest to gain some support for my new writing habit, I convinced some friends to start blogs, too.

First Post - Merry Christmas

(1 min read) Starting my public blog. Originally posted on Blogger.