Recent Posts
How good are the latest and greatest LLM agents?
September 20, 2025 | ~1600 words | 8 min read
I built a simple Streamlit web app for a DIY electrolyte mix recipe. Embracing the "vibe coding" lifestyle, I decided to let a Claude agent do most of the work for me. Here's how it went. (Spoiler: pretty good but far from perfect)
Quick wins
September 2, 2025 | ~1600 words | 8 min read
Now that we've identified some common problems, let's make the first steps toward solving them.
First we'll focus on small, simple changes that will have an immediate impact.
Identifying the problem(s)
June 26, 2025 | ~1800 words | 9 min read
An overview of the Circulate app and common problems with its search functionality.
Not talking solutions yet, just seeing what types of problems exist.
Plus, some constraints and limitations of a volunteer project with a shoestring budget.
Running the numbers to see if it's worth it
February 1, 2025 | ~1200 words | 6 min read
My previous job gave me a free Kroger Boost membership. Now that membership is expiring. Is it worth renewing for $59?
Analyzing potential changes to fantasy football's least important position
September 1, 2024 | ~1400 words | 7 min read
Another year, another request for fantasy football rule changes. This time some people want to use a new scoring system for kickers. Let's (over)analyze how it would impact scoring.
I couldn't pass up an opportunity for some Streamlit swag!
August 3, 2023 | ~800 words | 4 min read
Streamlit is hosting a hackathon to show off their new connections functionality. I built a simple app implementing semantic search to explore public datasets in the city of Chicago's Socrata open data platform.
Are SUVs and trucks more likely to kill pedestrians?
January 10, 2023 | ~2000 words | 10 min read
Traffic deaths in the US are increasing, and big SUVs and trucks seem to be taking over the roads everywhere. Are those things related? I analyzed publicly available traffic crash data and found that yes, bigger cars are statistically more likely to injure or kill pedestrians.
Messing around with Kalman filters to fix noisy Strava activities
September 26, 2022 | ~2500 words | 12 min read
I use Strava to track my runs, and sometimes I'm annoyed with how noisy the GPS tracks are.
I recently learned about Kalman filtering, a methodology for smoothing noisy data.
Let's see if it can solve my Strava problem.
Plus, a small Flask app that integrates with the Strava API.
Analyzing the impact of possible changes
September 6, 2022 | ~1000 words | 5 min read
Some of my fantasy football league members want to make changes to defense scoring settings. I'm not sure it's a good idea, or if it even matters at all. Let's find out! Featuring a Streamlit web app and the (ugly) Yahoo Fantasy Sports API.
Manage both ARM64 and x86 Python environments using conda
May 23, 2022 | ~1100 words | 6 min read
A basic tutorial for managing Python environments using conda (for those who don't like pyenv, or when pyenv isn't sufficient).
Install both ARM64 and x86 Python versions and seamlessly switch between them using pyenv
February 17, 2022 | ~1300 words | 7 min read
A basic tutorial for managing Python environments using my preferred tool, pyenv.
Benchmark tests and other considerations to help you decide between the latest and greatest Apple laptops
November 28, 2021 | ~3400 words | 16 min read
I recently replaced my old laptop. Despite looking forward to the release of the new MacBook Pro for years, I opted for the MacBook Air instead. Why? It offers good performance and much better value. Most people (but not everyone) should probably make the same choice.
November 8, 2021 | ~1100 words | 6 min read
I wanted to try out the popular FastAPI framework. As a learning exercise, I reproduced a simple Flask tutorial using FastAPI.
And using it to prove that I’m a terrible poker player
September 26, 2021 | ~2700 words | 13 min read
Elo is a rating system for two-player games, such as chess. I developed a Python implementation of a generalized Elo system that works for multiplayer games. Then I built a web app to track the Elo ratings of my friend group's poker games. At the risk of personal embarrassment, I'm publishing the results.
Blending fantasy football expert rankings with rank aggregation methods
September 3, 2019 | ~900 words | 5 min read
Exploring how rank aggregation methods can be applied to fantasy football. Sometimes the consensus is more accurate than the predictions from any individual expert.
Maybe a little bit, according to text analysis of YouTube comments
August 16, 2019 | ~2900 words | 14 min read
I analyzed the comments from episodes of the popular YouTube series "Hot Ones" and found some differences between episodes with male and female guests.