2,850 tweets, and 5,568 including replies.
2023
June
- Huge. If the lender stops operating, there will be ~no retail left along this corridor. If IKEA opens, it's the lone ant being cooked by magnifying glass and sun. It won't last a year.SF voters won their war on business & tech. Now, we see what's next.twitter.com/sfstandard/sta…
- San Francisco, BART, and Muni are running titanic deficits of their own making, and every one has _increased_ expenditures on their latest budgets.
Continued, indefinite bailouts are just assumed. (On top of those already received — $1.6B for BART.)May
- Staying in a £30/night 6-bed/room hostel because my conscience prevents me from paying $250/night for garbage 6/10 London hotels on general principle.
- Did what I thought I'd never do again, and started draining structured logs to Postgres.Precautions: (1) canonical lines only, (2) ephemeral database, (3) partitioned tables, and (4) efficient, batch upserts. With those in place, reasonable operational insight without Splunk. twitter.com/craigkerstiens…
- The next time a British person gives you a hard time about queueing in your country, ask them what side of the sidewalk one should walk on.
Never before seen such grossly unnecessary confusion and chaos as on UK footpaths, and in the ostensible cradle of civilization no less.April
- A whale shark at the Georgia Aquarium. In landlocked Atlanta, but the world's largest aquarium until 2012. Cool place.brandur.org/sequences/046
- RT @craigkerstiens: .@brandur has done a bit of talking about our team, stack, practices. This summarizes well...
When asked how we can compete with a big cloud or others, really comes down to execution and this is part.- California sure as hell won't offer its residents health care, but it'll definitely offer them a 2.5% gross income tax penalty in case they don't pay for their own. Like banning algebra, "progressive" policy at work.
The most regressive state in the union. It's not close.- The Apple Card is a bit of a gimmick, but the new 4.15% account is a good reminder to check rates.
I keep some cash for liquidity, and was amazed to find my credit union's "high-yield savings account" is paying a magnanimous 0.02% APY as of April 2023.apple.com/newsroom/2023/…- When I look at the price of a modest hotel room in a European capital like London and compare it to the average European salary, I'm left with serious questions on how society is still even functioning.
Ten years ago I was getting like 50€ rooms in nice cities. A different era.- My reaction to someone saying they'll use GPT to write a book: so, I'll use GPT to summarize your book?
Generative AI has changed the world to make the supply of derivative content infinite. The inevitable result will be be more of it than anyone can, or would care to, consume.- California to introduce fixed income-tiered energy bills. Tech workers in studio apartments paying 50% income tax will subsidize the landed gentry in big houses bought in the 70s who pay ~$0.
CA is the most regressive state in the union. It's not close.12ft.io/proxy?q=https%…- Finally a good running week after many, many bad ones.
I keep having to relearn the hard way (usually after gradually gaining 30 lbs. lol) that unless exercise is baked right into the schedule, it's not going to reliably happen.March
- And amusingly, an incident caused by the unassailable gravity of Hyrum's Law. Deployed a fix for a bug, but since its inception our Frontend had started using a related API parameter in a way that was allowed, but not intended, breaking integration.twitter.com/craigkerstiens…
- Install a solid framework for producing distributed traces, and you never get tired of looking at these things.
Auth/ACL -> procure temp SSH key -> SSH -> connect Postgres via SSH channel -> execute remote query on Postgres. Operations that can be parallelized are parallelized.- RT @pganalyze: E59 of ”5mins of Postgres” is about UUIDs vs Serial for Primary Keys. We explore reasons for using random keys and reasons for using sequential keys. We also show hybrid approaches and discuss the UUIDv7 standard. We feature @Xof and @brandur: hubs.li/Q01G5R_n0
- This is cool: `CL.THROTTLE` (easy rate limiting) given a permanent home in DragonflyDB.
And I can't believe I'm saying this, but C++ actually doesn't look all that terrible to write anymore!github.com/dragonflydb/dr…- Amazing. "Journalists" lie gleefully, not having a shred of internal morality, and knowing their audience doesn't care about truth even by one iota.
@elonmusk Removing those legacy bluechecks that imply non-existent legitimacy cannot happen soon enough.February
- Hip Seattle-themed store at the airport sells cassette tapes, apparently unironically.I sort of love it, but important question, does the technology to play these even exist anymore?
- SF report: 60% of DT jobs and $1.2B/y gone.
Confirms forecasts showing "only" a $728M deficit over 2y were fantasy. Property taxes $82M/y and business tax $139M/y lower than projected.$1B deficit wasn't expected until 2026. It'll be here by 2024 or 25.sfbos.org/sites/default/…- It is quite ironic that elite coastal journalists, who've spent the last 10 years sneering at a suffering middle America, discontent due to hollowing out and job loss from globalism, will see their own jobs amongst the first and hardest hit by the coming wave of generative AI.
- Follow up: it pays to install Signal via Homebrew (`brew install --cask signal`).
Signal's download page will direct you to the universal Mac binary, but brew will know how to find an Apple Silicon-only version, light-as-a-feather at a mere 379 MB.twitter.com/brandur/status…- Every time I try to scp a file with a space in the name, I fall a little more out of love with command line interfaces.
- Notes on automated `govulncheck`.
Benefits: vulnerabilities patched in < 24 hours.Costs: Occasional broken builds, some of which you can't do anything about until new patch versions are available on GitHub Actions. Occasional confused contributors. twitter.com/GoDiscussions/…- Made a little bug in the new billing module. Results only off by two orders of magnitude.
- And follow up from yesterday — Shopify was a near miss from being a Postgres stack too.
twitter.com/tobi/status/16…- Nice historical tidbit on GitHub + Postgres.
Imagine the counterfactual where reengineering of Postgres was necessary for GitHub's scale. We might have only gotten a K/V store on RDMS like at Uber, but we might've gotten a Vitess-like layer for Postgrestwitter.com/defunkt/status…- Derangement from the usual crowd over retiring SMS 2FA—which for ten years has been a well-documented liability that no one should use—is a new level. Jack himself was simjacked as recently as 2019 because he used this garbage.
Scary to think what they'll come up with next TBH.- Honestly, even as bad as all this JavaScript stuff has gotten, I can barely believe this. Bigger than my first computer's entire hard drive.
- Password hashing follow up. @PredragGruevski brought to my attention that although you can't rehash original passwords for existing hashes, you _can_ wrap them in a stronger hash.
AKA banish all weak password hashes forever using this one weird trick.brandur.org/fragments/pass…- A little dev log of reexamining our password hashing strategy. We inherited PBKDF2 @ 27,500 iterations from Keycloak, jumped it to 600,000 iterations, and then moved to Argon2id.
After LastPass, it's a good time to double-check your hashes are strong.brandur.org/fragments/pass…- The "True Faith" (New Order) cover from the end of Last of Us e04 is the Lotte Kestner cover which also makes an appearance in the second game.
Great cover of one of the greatest songs of all time.youtube.com/watch?v=27ZMHU…- Wrote about a Go test assertion we've been playing around with called `PartialEqual` meant to solve long blocks of ugly one-off asserts. Not a strong recommendation, but rationale for the pattern here: brandur.org/fragments/part…
Prototype implementation: gist.github.com/brandur/7b459a…- Never trust anything written about Leica that contains a referral link.
They're good cameras, but there's a whole cottage industry of people who romanticize these things for a living.- Dear media/podcasters/newsletters:
Yes, ChatGPT exists. You asked it to do things like every other person on the internet. I'm sure the results were delightful. Now, please stop acting like you discovered the f*ing atom by using a product made by somebody else.Kind regards,January
- Wrote a Friday whine-piece on data loading in Go.The ORM + object dynamism and its near-infinite flexibility has to be one of the most powerful developments in the last decades for building things fast. What are all you people doing in Go??brandur.org/atoms/gj7keok
- Today, saw a person sit at a table in a cafe and read a book for three hours. Didn't pull out their phone or laptop or distract themselves in any other way.
Practically a superhuman feat in the contemporary age. I bet < 1% of humanity still has the capacity to do this.- Recommend _Triangle of Sadness_ as an artsy, black comedy that's actually good.
Better to not even read any synopses. some have too many spoilers. Better to not even know where it's going.brandur.org/atoms/gizqz5c- My old man programmer take of the day: any metaprogramming DSL can be replaced with an API involving normal function calls and closures which might be maybe 10% less fluid to read, but is 10x more obvious and 10x as LSP friendly.
- Love this.
Apps that scale horizontally on commodity hardware are the obvious present and future of instrastructure. But even so, who among us _doesn't_ love the idea of a mainframe? So cool.And Fermi estimates galore. Great example of showing work.thume.ca/2023/01/02/one…- A ChatGPT-generated article hit the front page of HN this morning. Some notes.
AI is scary as hell, just not in the way that we thought it would be. Very soon we're going to be drowning in the empty calories of AI-recycled content.brandur.org/fragments/chat…- In coding, resist the lowest common denominator.
e.g. If you happen upon someone else's crappy codebase with no comments or testing, you don't have to copy the bad convention, it's still okay to add your own comments and testing, even if 95% of programmers won't.- Benioff's an opportunist who makes claims he knows play well with "progressive" outlets that'll write nice things about him. Later, when he does the opposite, it'll barely make the press cycle. Applies to layoffs, "committing to" San Francisco, Prop C, etc.
Smart. Very cynical.- Once in a very long while, the stars align and there's a perfect confluence between technology, culture, and art. This meme is it.
twitter.com/memenetes/stat…- It's fun looking at old snapshots of some great web design of the 2000s era.
An irony is that people used to put text in images to look better than crappy browser-rendered text, but now that font rendering is so good, the text images now look much worse.brandur.org/atoms/gitc3ts- CSS TIL, a non-block element like a <span> will silently ignore a `line-height` like it never happened.
20 years of CSS and I'm still running into these gotchas. I can all but guarantee the spec authors themselves spend significant chunks of time googling how to do things.2022
December
- Notably, my need for multiple accounts on Heroku ended before Heroku ever properly supported multiple accounts.
- A few notes on publishing iPhone live photos through ffmpeg to WebM/VP9 and HEVC in `<video>`.(AKA how to do the work that Twitter and YouTube do automatically so no one ever has to learn anything or understand how any of this tech works.)brandur.org/fragments/ios-…
- Much deferred visit to the Calgary Zoo, and a little experimentation on exporting iOS live photos as `.webm`/VP9 for use in a `<video>` tag, transcoded and cut for brevity with ffmpeg (details on that later). Komodo dragons. Amazing penguin exhibit.
brandur.org/atoms/girm632- Nice trick with `math/big` for base62 encoding in Go without bringing in an external dependency.
Base62 is nice compared to base64 because it omits hyphen (`-`) which isn't always copy/paste friendly. Great for generating secrets like API keys.ucarion.com/go-base62- Custom linters are such a good way to sustainably keep code quality high. Wrote this one to detect user-facing messages not following convention and autocorrect.
Declarative S-expressions for matching keep lints maintainable. This would otherwise be like ten ugly conditionals.- The problem isn't that they took anything, it's that they left San Francisco _with_ its culture — one of profound obstructionism and regressivism, cynically masqueraded as "progressive".
And now without the added tax to support it.twitter.com/HankPlante/sta…- Bankman-Fried's written testimony is a fascinating read. This is a serial liar of the highest order so don't believe a word of it, but still interesting.
One avenue he tried was to try and cancel the chapter 11 team. Good luck with that.assets.bwbx.io/documents/user…- End of an era: $1.99 Shonen Jump.
Seriously though, I wish more subscriptions would make carrying costs small enough that you don't have to think about carrying cost. I only read One Piece and OPM, so if this was a more typical $9.99 / $14.99, I would've dropped it years ago.- Does your Go codebase use the "leading name" comment convention?
// DoStuff does some stuff.func DoStuff() {}I've written thousands of these over the years, but even with automated tooling, they still feel like a net negative. Thinking about not doing it anymore.- Comcast + San Francisco are the infernal match made in literal fucking hell.
Comcast, a monopoly, jacks prices every year while continuing to be the worst telco in the world. "Progressive" SF runs interference by keeping microtrenching illegal to ensure no competition.- Don't use C# much anymore, but I love that it keeps plugging away with meaningful features. .NET 7 has improved perf, `required` keyword, raw string literals, and containers.
The more modern and maintained stacks that we have to choose from, the better.November
- Usenet was the old frontier of the internet, and is still the new one too.As of this weekend, up four providers on different backbones (previously: one). Partly because the Black Friday deals were good beyond refusal, partly to help keep this crazy machine going.
- T minus 10 hours to Heroku d-day.
• Deleted 42 apps that were broken or doing nothing.• Captured three Ruby apps as static HTML and moved to GitHub Pages.• Two dynamic apps went to Google Cloud Run and one hobby Bridge instance with multiple DBs.Later Heroku — it was fun.- Unit tests aren't a bad thing — Postgres and the kernel get away without them (and arguably shouldn't) by deep code review and extensive community testing.
Your project doesn't have that. Write low-mock, right-size-of-unit tests — for you, and the person who comes after.- Go package of the day, which verifies no goroutines are still running after a test case:
github.com/uber-go/goleakPut it in sooner rather than later because it just gets harder. It's _really_ easy for tests to accidentally leave goroutines running that no one would ever notice.- Been keeping an eye out since reading this great article on the truffle industry (and how it's BS).
So far, 1 for 1. Here's a premium truffle product at an expensive SF boutique. Inspect tin, and it's tuber indicum, a cheap, tasteless truffle from China.tasteatlas.com/truffle-indust…- Went to take a look at San Francisco's new Central Subway today. Never thought I'd actually see this thing.
Nice to finally have it though. Futuristic design, nice decor. And only a half decade behind schedule (fully open 2023) and $375M over budget, so not so bad for SF really.- Making my way through God of War Ragnarok, and damn, I'd forgotten how good the 2018 game was (which carries over as the gameplay is very similar).
This is a must play for anyone into Norse mythology. Everywhere you go is so beautiful, and every character is fleshed out so well.- AppImage claims on the tin vs. AppImage IRL.
So happy we have this now instead of static binaries.- Heuristic for a well run project: be able to come back to a computer you haven't used in months, pull origin, and run 1-2 commands to get the build, test suite, and everything to just work™.
Our is `make db/test && go test ./...`. No Docker containers harmed in the process.- Anecdote from Amazon.
My last BigCo, ~40% of time wrestling with internal tooling is about right. (Add 10% arguing with true believers making contra-reality claims that this stack from hell was good, actually.) - T minus 10 hours to Heroku d-day.
- Much deferred visit to the Calgary Zoo, and a little experimentation on exporting iOS live photos as `.webm`/VP9 for use in a `<video>` tag, transcoded and cut for brevity with ffmpeg (details on that later). Komodo dragons. Amazing penguin exhibit.
- Today, saw a person sit at a table in a cafe and read a book for three hours. Didn't pull out their phone or laptop or distract themselves in any other way.
- SF report: 60% of DT jobs and $1.2B/y gone.
- Install a solid framework for producing distributed traces, and you never get tired of looking at these things.
- RT @craigkerstiens: .@brandur has done a bit of talking about our team, stack, practices. This summarizes well...
- The next time a British person gives you a hard time about queueing in your country, ask them what side of the sidewalk one should walk on.
- San Francisco, BART, and Muni are running titanic deficits of their own making, and every one has _increased_ expenditures on their latest budgets.