sethserver.com

All Posts

AI

Why Old-School ML Models Still Win in Production: Naive Bayes, Logistic Regression & Decision Trees

Updated: September 17, 2026

Shipping "modern AI" inside a $200 gadget is a fast way to learn that benchmarks don’t answer support tickets. If your backend lags, customers don’t blame latency - they blame your device, then they ask for a refund. This post is a tour of the boring models that still survive production: Naive Bayes, logistic regression, trees, random forests, and even HMMs. They’re fast, cheap, debuggable, and they fail in ways you can actually explain. read on »

Programming

Docker for Python Web Apps: From Flask Hello World to Production Deployment | Complete Guide

Updated: March 18, 2026

Docker turns "mystery meat environments" into something you can point at and trust. This post shows how containers cut down "works on my machine" bugs, how to ship a tiny Flask app with a clean Dockerfile, and how Compose makes the stack (Flask + Postgres) reproducible with one command. You'll also get the practical gotchas: caching layers, binding to 0.0.0.0, deps like psycopg2, and why "depends_on" doesn't mean "ready." read on »

Startups

How to Not Waste Time in a Programmer Interview

Updated: September 17, 2026

I stopped trusting coding quizzes after hiring someone who aced ours and then couldn't write a single function. Brainteasers and LeetCode screens reward practice, not real work. Here's the hiring setup I use instead: a simple competency scorecard plus a short, realistic code review that shows whether someone can actually ship Python. read on »

Startups

Stop Calling Every Mess Technical Debt: A Narrow Definition That Actually Works

Updated: September 17, 2026

"Technical debt" has become the excuse for everything: slow features, bad deploys, even the broken coffee machine. Most of the time it's not debt. It's a mess. Real debt is a deliberate shortcut with known costs, written down at the time, plus a payback plan. If you can't point to the note and the date, you didn't take on debt. You just made a mess and gave it a fancy name. read on »

AI

The Third AI Future: Boring, Practical, and Quietly Useful | Small Models That Actually Work

Updated: March 18, 2026

Most AI futures are either killer robots or hoverboards. The one that shows up at work is boring: small models doing narrow jobs, under real constraints, and quietly cutting errors. This post is about the "third AI future" I keep betting on-tiny chips, local inference, measurable wins, and fewer wizard tricks (plus a confession about the ad tech era I'm not proud of). read on »

Python

Python is Slow? Here's Why That Doesn't Matter (And How Python 3.11-3.14 Got Faster Anyway)

Updated: September 17, 2026

"Python is slow" is a lazy diagnosis. If your app spends its time waiting on Postgres, the network, or S3, the interpreter isn't the bottleneck-your queries and indexes are. CPython also got a lot faster in 3.11–3.14, often with zero code changes, and 3.14 makes the GIL optional for real parallel threads. Stop chanting. Profile first. Upgrade second. Rewrite in Rust only if the numbers force you. read on »

MySQL

MySQL User Creation: Stop Using Root and Set Passwords Correctly

Updated: March 18, 2026

Stop using MySQL <code>root</code> the moment setup is done. Create dedicated users, lock them to the right host, and grant only the permissions your app really needs. The easy mistake: <code>CREATE USER 'app'@'%';</code> without <code>IDENTIFIED BY</code>-which can leave you with a user that connects without a password. Boring work, fewer 3am disasters. read on »

Newsletter

One email, once a week.

Notes on databases, systems, and the occasional strong opinion about Python. No spam, unsubscribe anytime.