

Remember how you could play this on the local network with anyone who had a Nintendo DS? Only one person needed the game cartridge. So fucking cool.
Professional software engineer, musician, gamer, stoic, democratic socialist


Remember how you could play this on the local network with anyone who had a Nintendo DS? Only one person needed the game cartridge. So fucking cool.
You have no idea what you’re talking about. Stop spreading dangerous misinformation.
Honestly, delete this comment.


Ha. I’d expect nothing less from Theo.


Didn’t Firefox just release a new feature that prevents fingerprinting? Hard to get a reading on Mozilla these days.
My driving instructor said the airbag could rip the skin off your arms lol


I suspect every language does this to some extent. Some good examples from Japanese:
靴 = shoes 下 = under 靴下 = socks
手 = hand 紙 = paper 手紙 = letter
歯 = teeth 車 = wheel 歯車 = cog / gear
火 = fire 山 = mountain 火山 = volcano
Sadly (?) the Japanese compounds are often only compounds of the symbols, not the spoken words.
I think you’re right. An UPDATE would fail, but not an INSERT.


Skyrim came out 14 years ago.
I believe both SERIALIZABLE and REPEATABLE READ isolation levels would raise an error for this example.
And I looked this up: Postgres won’t retry the transaction for you either. Though ultimately I think this a good default behavior.
Sqlite does not have a SELECT ... FOR UPDATE feature. The alternative is BEGIN IMMEDIATE.
There is a subtle scenario with read-modify-write transactions in MVCC where SQLite lacks some grace (in my opinion).
In MVCC, transactions work with a point-in-time (read “between atomic transactions”) consistent “read snapshot” of the database.
Consider this example:
foo.foo.There is no conflict here because these transactions are isolated from each other via the snapshot mechanism. Transaction A’s read snapshot is immutable and will not see any writes from transaction B, even if they are happening concurrently.
Now what happens in this example (from the OP):
foo.foo.foo.This is a true conflict because both transactions are trying to write to foo, and transaction A’s writes might be based on what it just read. There is no consistent way for A to proceed, because B already wrote to foo, invalidating A’s read snapshot.
So SQLite handles this by returning an error to A, effectively requiring A to restart the transaction.
There are other ways this could be handled though. The DB could optimistically retry the transaction for you. There is even a special BEGIN IMMEDIATE; statement that it could use to proactively take a write lock on foo so that the transaction doesn’t get starved by other writers. But SQLite puts all of the responsibility on users to handle this.
I’m not an expert, so there could be a very good reason that SQLite works this way, but it feels a bit annoying as a user.
I don’t actually know off the top of my head how PostgresQL handles this particular scenario.


Probably won’t solve all of your problems, but I like to at least change git’s default pager to delta.


I agree with the article’s ideas, but certain things about the execution bother me.
calculate_order_total_for_customer. I’d just call it calculate_order_total. It’s clear than any order will have a customer, it’s in the type signature.is_user_eligible_for_discount. I’d call it user_is_eligible_for_discount. Because inevitably that function is getting called in an if statement, and you’d rather it read closer to proper English: if user_is_eligible_for_discount: ....

As for actual coding, I use ChatGPT sometimes to write SDK glue boilerplate or learn about API semantics. For this kind of stuff it can be much more productive than scanning API docs trying to piece together how to write something simple. Like for example, writing a function to check if an S3 bucket is publicly accessible. That would have taken me a lot longer without ChatGPT.
In short: it basically replaced google and stack overflow in my workflow, at least as my first information source. I still have to fall back to a real search engine sometimes.
I do not give LLMs access to my source code tree.
Sometimes I’ll use it for ideas on how to write specific SQL queries, but I’ve found you have to be extremely careful with this use case because ChatGPT hallucinates some pretty bad SQL sometimes.
That does not look like steak.
If your health check is broken, then you might not notice that a service is down and you’ll fail to deploy a replacement. Or the opposite, and you end up constantly replacing it, creating a “flapping” service.
Pretty sure my journey looked something like:
So I think the graph is actually pretty reflective of my own experience, aside from some of the specific distro choices during my peak ignorance phase, and obviously I ended up at NixOS which isn’t even on here.
I currently have more audio issues on my MacBook Pro than my Linux desktop. The Mac will sometimes just fail to recognize headphones plugged into the 3.5mm TRS port. NixOS desktop w/ pipewire has no audio problems whatsoever.


An issue which I aim to resolve using a self-hosted VPN.
One Piece is best enjoyed as a manga. Reading it goes much faster and loses a bit of the anime character tropes.