Fragments
Stream of consciousness notes that don't merit a more dedicated write-up.
2023
- Meta layoffs
- Policy on util packages
- `CL.THROTTLE` implemented in DragonflyDB
- RFCs and review councils
- Findings from six months of running `govulncheck` in CI
- Honest health checks that hit the database
- Migrating weaker password hashes by nesting them in an outer hash
- Adventures in password hashing + migrating to Argon2id
- PartialEqual
- Revisiting my two-year SF predictions
- Content authored by ChatGPT front pages
- The static rip cord
2022
- Notes on iOS live photos with ffmpeg and <video>
- Short, friendly base32 slugs from timestamps
- Easy, alternative soft deletion: `deleted_record_insert`
- The unpursuit of clout
- The Way of Water
- Habitually testing for goroutine leaks
- Sequences, rebooted
- Ephemeral DB, a sacrificial database line for high-throughput data
- Postgres: Safely renaming a table with no downtime using updatable views
- Partitioning in Postgres, 2022 edition
- Go wishlist (2022)
- READMEs are a great idea, still
- Operational convergence, for REPL-less languages like Go
- The disproportionate influence of early tech decisions
- Idempotency: The `is_transient` property
- Code in database vs. code in application
- Spring '83
- Mostly automatic Go dependency updates with GitHub Actions
- Generating a random `float64` with `crypto/rand`
- There's always an events table
- Sorbet + 100% cov makes Ruby refactoring possible
- UUID code stanzas in Ruby
- Reservation-style rate limiting APIs
- iOS Shortcuts: Appending dictated memos to Notes
- Does laptop weight matter?
- Filtering Sentry spans no one looks at
- Single dependency stacks
- A retina asset shortcode for Hugo
2021
- The Wheel of Time S1
- Can Slack-mania be cured with systemized discipline?
- WaniKani midway check in
- The Bay Area as a declining tech company
- On the unreasonable effectiveness of streak tracking
- Idempotency keys @ Crunchy
- Implementing a random by ID flag type
- Netflix's Cowboy Bebop
- Flags v. gates
- The 16" MacBook Pro (late 2021)
- Dropbox alternatives
- Calgary in the spotlight
- Simple internal idempotency by ID
- Program start check
- AirPods Max
- Tightening the bolts with golangci-lint
- go:embed in prod, serve-from-disk in development
- No Medium
- Important (but not required) parameters to include when connecting to Postgres
- Write -> publish pipeline
- It's time to stop truncating RSS content
- Haruki Murakami interviewed by Paris Review
- HTTP API design: 204 "No content" mildly harmful
- K-sorted ID algorithms
- Accidentally walkable
- Go: Number of days in month
- Error stack traces in Go with x/xerrors
- Why form encoding in web APIs is an anti-pattern
- API design showcase: OpenAI
- Considerations for event APIs (versus webhooks)
- Retry-friendly idempotent delete in web APIs
- `Idempotency-Key` IETF standards draft
- The Heroku HTTP API Design Guide, revisited
- The state of Stripe API library codegen
- Joining Crunchy Data
- The Leica Q2 Monochrom, or why not to get into Leica
- The girl next door
- Predictions for San Francisco over two years
- Engineering blog posts: Apply healthy skepticism
- Blog with Markdown + Git, and degrade gracefully through time
- Large asset management in a Git-based static site
- RSS, why didth I abandon ye?
- The great Signal migration
- Roderick, canceled
- A WaniKani API Go package
- Cross-posting to Mastodon
- The Engelmann Spruce plaque, Sulphur Mountain
- Homebrew on M1 is a go
- Building Ruby 3 on Mac M1 ARM
- Development log: Rescuing history
- What to do in 2021
- What's good about offset pagination; designing parallel cursor-based web APIs
- Development log: Moving to flat files
2020
- The Sopranos
- Tenet
- The .org armageddon staved off, for now
- Japanese: Why does the は particle sound like "wa"?
- 350 MB
- WaniKani level 10
- Cookies vs. local storage
- Apple M1: First impressions
- GitHub Actions: Setting env vars with other env vars
- Aurora Babelfish
- On the cruelty of kanji
- Meditations on the impermanence of wireless earphones
- SF go/no-go decision framework
- Building a self-updating GitHub README
- A simple HTTP retry and backoff loop in Go
- TTL indexes in Mongo
- Beginner Japanese
- Development log: Turning on DMARC for sending email
- Development log: libjpeg / MozJPEG optimization shootout
- Development log: Minimizing S3 transfer during sync
- Development log: Deploying Google Cloud Run from GitHub Actions
2019
- Slack, and the case for bar-raising (instead of lowering)
- AirPods Pro
- The steady march of complexity
- Encoding H.265/HEVC for QuickTime with FFmpeg
- False positives in UI design: when small buttons are better than big ones
- 1,000 days of counting Calories
- Karl Lagerfeld (and dieting)
2018
- Simple and stateless CSRF protection with the `Origin` header
- OLAP, OLTP, Zheap, and tradeoffs in Postgres MVCC
- The subtleties of API contracts, or how enabling HTTP/2 broke Go clients
- Caffeine
- Reflections on Rust, and the sand castle metaphor
- The 500 test
- 100 days with Rust, or, a series of brick walls
2017
- Mindfulness
- Changing a universal constant: How 280-character tweets break an API
- The city that tried to buy itself
- Depickling, gadgets, and chains: The class of exploit that unraveled Equifax
- Unsubscribe: The noisy death of email marketing
- Patronage in the age of free
- A year of counting Calories
- Headspace
- The long road to Mongo's durability
- All wires
- Partitioning in MongoDB (or lack thereof)
- GraphQL APIs and performance
- Your Name
- Shopify scripts, MRuby, and the $500,000 release
- Sharing with iCloud Drive and iBooks
- The rise of the smartphone's eye
- AirPods
- GitLab, and centrally hosted platforms
- Learning about language safety from Zcoin
- Alan Kay on Apple and iOS
- Chrome
- Marginal security
- Understand deeply
- The state of messaging
- Journaling (revisited)
- Amazon Prime
2016
- Zombified
- Exporting Flickr
- The last AirBnB
- Apple 2016
- Turn off your cellphone
- No escape
- Fixing a slow git $PS1 prompt
- Apple Bedtime
- Deep work & concentration
- OpenAPI 2.0
- Postgres 9.5 on Travis CI
- PAX 2016
- Courage
- Splunk
- Podcasts 2016
- 4 A.M.
- Ivy
- Retina check
- The cost of manga
- The steel man
- Journaling
- Gh-ost
- Perpetual cookies
- OSX and entropy
- Verified env vars
- Where are all the new great companies?
- Asturias check-in
- Hype trains
- us-east-1
- CloudFront indexes
- Six weeks
- Testing Go packages from project root
- Going static
- H&M sportswear
- Week three
- _Do_ debug
- Week two
- The zero-sum treadmill
- One week of nutritional rigor
- The iPad Mini
- PAX 2016 ticket royale
- Calorie counting
- On brevity
- Life without mediators
- Not hosted here
- Traffic
- A glance at Kubernetes
- Codeword
- Timing the guitar
- Avast
- Digital natives
- Accumulation
- Testing a Kafka connection
- Google engineering principles
- Naked DNS
- The bear
- Burn parties
- Heavy complexity
- MonkeyBrains
- Fast OSX screen lock
- AWS Certificate Manager
- Turning points
- Safety razors
- Notification hell
- An AWS static hosting workaround
- AWS static hosting
- Do one thing and do it well?
- The sprawl blues
- Game of Thrones pessimism
2015
- SF housing and activism
- Insecurity by instinct
- Cineplex Odeon
- Star Wars VII: The Force Awakens
- Plex for PS4
- Starbucks growth
- Spectre
- Showing Redshift distkey & sortkey
- GPG at Stripe
- Safeway justice
- 2015 resolutions (update)
- Entropy
- The End of the Tour
- Legacy projects & the maintainer
- Whiplash
- The Everything Store
- The 12" MacBook revisited
- The guitar
- WGT 2015 abstract
- WGT 2015 brain dump
- Notes on the new 12" MacBook
- Google Domains
- Paper books
- Infinite Jest
- 2015 resolutions
- Inventory ephemeralization
2014
- GPG + the Heroku CLI
- GPG + HTTP git
- The Cubano
- CloudFlare Universal SSL
- GPG + s3cmd
- GPG + cURL
- Yosemite & progress bars
- Anki's .apkg
- Global recovery in Go with defer
- iBooks & Dropbox
- PAX
- Major buys
- New York
- WGT
- Yosemite & Linux
- Go relax
- Two stars
- Bicycles
- Swift: day one
- json_ schema
- Gossip from across the world
- X-Forwarded-Proto
- Square cash & e-mail as a platform