I've been working on this with Seb and it's crazy how many bugs we flushed out. He didn't mention in the article but we were also super inspired by the Tigerbeetle team's writing on deterministic simulation testing.
I'd really like my cursor to kind of glow but my graphics programming skills are not at that level yet.
For editing, a block has more potential than a vertical bar because you always have context of a selected character to perform operations on (e.g. `x` to delete current char in vim). You can also do operations before and after that character (e.g. `i` vs `a` in vim).
I actually used this pattern as well and I really like it. I store another property called `mark_idx`. When `cursor_idx` and `mark_idx` are the same then it's just a cursor. When they differ, the range between them is the selection.
Implicit in this article is the idea that security posturing is a zero-sum game for many companies on the dimensions of both software complexity and time.
Adding full disk encryption takes time from other projects and makes the system more complex. That equation needs to pay out. In all likelihood, the reason your data is going to get stolen is a privilege escalation in your app code or a bad actor on your team. Rogue AWS employee swiping your particular hard drive in us-east-1 is way down the list. Full disk encryption does nothing for the first two vectors.
I think compliance programs are oriented around pushing companies into complex/expensive system designs thinking that is a proxy for a secure system.