A Bug and a Fix

Today, a short tale of fun mystery-solving. I’ve been working on a project that involves a server dynamically generating audio files and streaming them to a client via a WebRTC session. The dynamic audio generation process works like this: first run a program that generates a wav file. Then compress the .wav to an .ogg which contains an Opus audio stream and deliver it over the network. The WebRTC portion is handled by the awesome Pion library, a pure Golang implementation which makes customizing WebRTC (for example by streaming a dynamically generated audio file) super easy. [Read More]

SQLite Is Dynamically Typed

A small, cool fact about SQLite is that its columns are flexibly typed. You can store any value in any column! Try it out: sqlite> create table t1 (v1 int, v2 varchar(10)); sqlite> insert into t1 values ("abc", "this string is longer than 10 characters!"); sqlite> select * from t1; abc|this string is longer than 10 characters! sqlite> select typeof(v1), typeof(v2) from t1; text|text The null type is still special: [Read More]

Credit Without Risk: An Anti-Cancel Publishing Model

My friend was canceled recently. He’s a writer who published an article which was critical of the work of a beloved figure in the field. Hundreds of people responded to him over the internet, criticizing his intelligence and his appearance and saying that he should never work again. Cancel-Free Writing Getting canceled doesn’t seem like much fun at all. How might you, a writer on the internet, avoid it? One option is to never publish anything. [Read More]

A Fast and Simple Geohash Decoder

I knocked out a tiny website that I’ve craved while working on geospatial projects. It’s an interactive tool that transforms between geohash and latitude/longitude pairs. It supports direct geohash links and direct lat/lng links. It displays the bounding box of the geohash, unlike geohash.org, which only marks the hash center (and seems to have fallen victim to Google’s gross watermarking of their free Maps tiles.) The entire project is maybe 50 lines of code including markup, but UI actually feels pretty slick thanks to the awesomeness of Mapbox. [Read More]

[Draft] Audio Shortlinks

Note: this post is a work-in-progress. There are about a zillion ways to quickly create a shortlink to any piece of content on the web. But if I wanted to quickly link to an audio clip which may or may not live on the internet? Not so easy! The workflow probably looks like: Acquire the audio file Crop it down to what you want to share in Garageband or whatever Upload it to a filesharing service that can host audio files Shortlink to the hosted file Kind of a pain! [Read More]

Zen And The Art of Fixing My Sink

I might have thought this was just a peculiar attitude of theirs about motorcycles but discovered later that it extended to other things … Waiting for them to get going one morning in the kitchen I noticed the sink faucet was dripping and remembered that it was dripping the last time I was there before and that in fact it had been dripping as long as I could remember. I commented on it and John said he had tried to fix it with a new faucet washer but it hadn’t worked. [Read More]

Remote Workers Should Move to College Towns

Three months ago, the college fiscal crisis was a fringe issue. Enrollment was already dropping, sure; but the brand-name schools didn’t seem to be affected and the colleges that had to shut their doors were either tiny, mostly-unknown liberal arts colleges or for-profits. No worries; Pura Vida. Three months ago, there were plenty of remote workers. Remote work grew steadily, but mostly at the margins of corporate culture: some corporate success stories, a few vocal advocates, but no widespread corporate acceptance. [Read More]

Code Readings: Douglas Crockford's secret to software teams that punch above their weight

I recently came across a gem of an idea in a Douglas Crockford interview with Peter Seibel, from Seibel’s Coders at Work. The idea is that of a code reading: a public presentation of code that’s a sort of cross between a code review and a tech talk and a whiteboard session. As Crockford tells it, code readings sound pretty awesome: the mentorship effect of a great code review, multiplied across all involved team members, at cost of maybe a half-hour or an hour per week. [Read More]

Two Simple Pandas Recipes

What follows are two common data analysis tasks using the popular pandas Python library, recorded for personal posterity. Enjoy! Situation number one: you’ve just loaded a DataFrame and are poking about. You have some categorical columns and you want to graphically understand the distribution. You can plot it easily with the following: df.groupby("col_name").count().<another_col>.plot(kind="barh") which yields, for example: Alternatively, if the categorical column you’re trying to understand has high cardinality, you might want a histogram rather than a value for each category: [Read More]

Mini-review: After the Education Wars by Andrea Gabor

Andrea Gabor’s 2018 educational case study argues for a set of reforms that are a far cry from the approaches of most big-money charter schools. She advocates for schools driven by “small-d democracy”—low-level reforms driven by students, parents, and teachers on a classroom’s front lines, enabled by schools that are granted a high of independence by governing bodies in exchange for increased accountability. To make this argument, she takes us on a national tour through four exemplar approaches: To New York City, where MacArthur Genius Debbie Meier founded the small schools movement that transformed behemoth school buildings into amalgams of schools-within-schools designed to have less bureaucracy and more flexibility; to Brockton, Massachusetts, where a languishing school district is revived via process iteration by local reformers; to the Leander School District outside of Austin where a superintendent studies W. [Read More]