My name isTom Punihaole.
Software EngineerI started my professional coding career contributing to open source projects in geosciences, operating systems and mesh networking. In my first job I learned how to write C++ apps that could scale up from ordinary desktop computers all the way to massive and interconnected super compute clusters.
Recently I've been building web apps and backend infrastructure, mostly in Python.
00. About
Playing around with websites.
This site is built using Django, PostgreSQL and TailwindCSS. I used to host the site on a home server running FreeBSD, but recently switch to Docker to deploy and manage the website and database in the cloud. Feel free to poke around!
I try to stay up-to-date in these technologies:
- Python
- Javascript (ES6+)
- C++
- Elasticsearch
- PostgreSQL
- Typescript
01. Projects
Random projects I've hosted here for playing around with.
Weaver is a cool web game for Lewis Carroll's Word Ladder. I decided to build a simple program that solves word ladders. There's probably a leetcode question for implementing this already.
My approach is pretty straightforward. The general idea is you take the starting word and get the list of words that differ by one letter (hamming distance 1) and greedily pick the one with the lowest hamming distance from the goal word. You keep doing this until you reach the goal word -- in other words, Dijkstra's algorithm.
We all know about Wordle by now. If not, check it out!
Sometimes the Wordle is too hard, so I built a tool that lets you input your current game state and it will suggest the next legal word you can play. The algorithm doesn't do anything particularly smart. It just finds the words that don't break the rules and picks one at random. Usually this helps me get my next guess on the board if I'm stuck.
You could take the guesses the program spits out, input them into wordle, and enter the feedback into the program to get the next guess until you win the game, but where's the fun in that?
Farberisms
Collection of Dave Farber quotes.
This isn't my concept. Years ago (probably 15+) when I was playing around with cgi scripts I decided to smoke test my website by rendering a page that connected to a database, queried from a table of these quotes at random and then displayed it to a page. It was a quick and dirty way to test the webserver, database, and cgi gateway were working correctly.
Microphone Tester
Ever tried to troubleshoot a microphone and felt frustrated?
This app lets you double-check your audio setup with the simplest configuration possible. It's purely audio input/output with nothing fancy that could be interfering with the setup.
Sometimes your audio setup doesn't work with a specific app because the app is buggy; or maybe its noise cancelation "AI" is working a little too well; or maybe its just slow, inefficient and bogging down your CPU.
This app is coded in clean, efficient javascript that wont get in the way. If your audio isn't working you know its a hardware or driver issue. If it works in this app but not other apps, you know those other apps are buggy or misconfigured.
Morse Code
Want to learn morse code?
Archive
There's a bunch of stuff in the archive. You might be able to find documentation on github, IRC and other random corners of the net to help you get these things working...
02. Contact
Contact info is available in the links to the left.