Self-dual

Quebec City, Quebec, Canada
Replying to @HostOfMeta
Need more tools to bind all these feature together:
What happens when you combine Emacs with gaming? You get an environment in which any panel can display any visualization for any data type. And if it's not there, you just develop it right there, live. Coded support for multiple viewports as it draws 60fps :) #gamedev
4
45
12,623
There are now two rules of cryptography: - Don't roll your own (unless you know how) - Don't let AI write it (unless you don't know how)
3
195
The old tricks still work! Hacker: "Hello service, I am the admin, let me in" Service: "Oh, hello admin, here you go, have fun"
‼️ BREAKING: A 16-year-old hacker broke into an internal Microsoft analytics service with a forged, unsigned login token and ran SQL as admin, reaching databases that held over 17 trillion rows, including Bing search analytics and 17,990 employee email records. The service, called Titan, checked every field on the token except its signature, so just claiming to be "admin" got him in, writes the researcher, who goes by Faav. He says he only pulled metadata and two single rows of Bing data, never touched customer data, and reported the flaw to Microsoft the same night. Microsoft locked the endpoint four days later, paid him $5,000, and had editorial control over his write-up, cutting sections and figures and reshaping how the impact was described before it went public.
1
119
Spent half the day writing code by hand, so much fun! Doing something new (might share later) and writing throwaway code just to learn how an existing domain works. Same reason why calculus got invented centuries ago, yet we still learn and practice it in school: to understand.
6
301
The hidden power of games and video games comes from asking silent questions then answering them through our own actions. "What happens if I jump on this enemy in that way?" "Why put a platform over there, where does it lead?" "Can I go through this locked door without the key?"
1
6
412
Watching streamers can expose this thought process. "Why don't they get angry at failing over and over?" Then we hear them asking questions on how to improve to themselves, because they learned to think out loud :) Games teach us to turn failures into success stories with fun.
1
3
49
Game design makes a subtle approach to teaching. We know the answers, the solutions, and must place elements in such a way as making their rediscovery fun. When done right, players even figure out new solutions. Everyone wins.
1
2
35
"This is a high-performance library!" Then looking under the hood: "Its memory model is fundamentally built around reference counting, not pipeline-scoped bump/reset allocation" Friends don't let friends use smart pointers! Also we need a name for "above high-performance" now.
18
5
202
8,556
This took an unexpected turn.
It was the worst mistake of my coding career. The boss called me into the office. He said "Hillel, did you commit this code?" It was my first job after college. I knew all the patterns, the big O notation, the UMLs. I knew my SOLID and my clean code. I knew I wrote good software The boss was angry. He said "take a close look at what you did". And I saw my mistake. I had forgotten to ask for code review, which means nobody noticed these lines of code: ``` user = UserFactory.createUser(); user.add_to_group(group); 𓄂𓂝𓅓𓂋𓏤𓈓𓏌𓏤𓉐𓂋𓏏𓂻𓅓𓉔𓂋𓇳𓅱𓏤𓊃𓎀𓊃𓍞𓀁𓈓𓊃𓅜𓐍𓏲 𓀁𓈓𓉐𓂋𓂻𓉔𓄿𓇋𓏏𓇋𓂻𓅓𓊻𓅜𓐍𓏏𓏝𓈓𓐝𓋀𓏏𓏏𓈉𓄤𓆑𓂋𓏏𓏝𓆓𓂧𓏏𓈓 ``` I had accidentally committed the entire Egyptian Book of the Dead! We tried to roll it back, but it was too late. Anubis had risen from the underworld to weigh our codebase against his feather. Our codebase was too sinful (no GDPR-compliance) and so the crocodile goddess Ammut devoured the souls of all 1,000 of our production servers. I paid dearly for this mistake. I had to buy the devops team donuts for a whole month. And those donuts taught me a lesson I would never forget: always get a code review before committing, even if you use SOLID and clean code. Because the real world is not school. In the real world, Anubis is real.
3
602
If software got solved, why do we reinvent the wheel so much in every single project? Has anyone measured the costs of doing so, at scale? Even with AI automating writing the wheel in code now, that seems to only make long term costs more hidden.
3
2
159
I believe we need something more than what we have now in tech to solve this. It takes time to research, prototype and experiment around new ideas, no matter how much everything else accelerates. Science accelerated for millennia, new discoveries keep happening at the same rate.
1
10
"Less is exponentially more" Always ends with a paradox
1
1
19
Jeremie Pelletier retweeted
I'm seeing a lot of euphoria about how Opus 5.5 is good at TLA+, and this means that all software will soon be formally verified. As a person who loves TLA+ so much he wrote a book on it, I want to throw a particular cold shower on people's enthusiasm by talking about the limits of what you can actually verified with it. The high level simplification is that TLA+ sees a system as a set of "behaviors", or possible sequences of states. For example, the pseudocode "pick a random number from 1-3 and decrement it to 1" has three behaviors: `{3 -> 2 -> 1, 2 -> 1, 1}`. From here, there are two basic kinds of TLA+ properties: - `[]P` means that `P` is true in *all states* of *every behavior*. - `<>P` means that `P` is true in *at least one state* of *every behavior*. `[]P` is immediately useful as an **invariant**, or something that always be true of your system. This is things like "your data is never corrupt" or "there's always at least one server online." `<>P` is a little more abstract, but for technical math reasons I won't get into here, can be stacked with `[]` to create really complex and useful properties. `<>[]P` represents things like "the algorithm eventually converges on the right answer", `[]<>P` things like "if two data stores desync, they will eventually resync", and `[](P => <>Q)` things like "If a message is put on the queue, it's eventually processed by a worker". Really cool stuff! These primitives were chosen to make a wide array of properties useful. And if we're clever, we can do all sorts of more complex properties, like bounded time constraints and history properties. But we're always constrained to 1) define a logical formula 2) over individual behaviors, and 3) check that all behaviors satisfy that formula. So some things that we *cannot* express in TLA+: - Possibility and reachability properties: that it's always possible to *make* P true, even if you don't actually decide to. Things like "I can always shut down the computer" or "A user can always change their password". These can't be expressed with `<>P` because that's "for all behaviors, P happens at least once", we actually want "for all behavior prefixes, there is at least one behavior where P happens at least once". - Hyperproperties: properties that are defined over two or more traces. These are things like "painting a car red doesn't make it faster" or "users cannot infer secret data by observing public data". We can't do these because TLA+ only looks at one behavior at a time. - Statistical properties: 95% latency is 1ms. Impossible because most of these are hyperproperties. - Properties about if a system is robust against code changes. Impossible because, uh, you have new behaviors now. Some of these are solvable in different logical formalisms. CTL can do reachability, PRISM can do statistical properties, etc. Those have their own tradeoffs and limitations, though, and no system can do everything. Others are solvable with a lot of cleverness tailored to the specific spec, like lifting a model into a hypermodel. But these are insanely inefficient and make your "clever spec" diverge significantly from the real world system, so introduce a lot more opportunity for things to go wrong. The core problem, though, is (1): properties are logical formula. If we don't know how to express a system property as a logical formula, we can't verify it. 99% of the properties we care about fall under this. The information on the site is easy for a user to find. Our LLMs behave as we expect them to. Our application can't be used to break the law. TLA+ (and Quint and Lean and Rocq) are near-useless here, no matter how clever you are. Don't get me wrong: `[]P` and `<>P` represent a huge range of useful properties and TLA+ is incredible at finding awful concurrency bugs. But there's a lot it fundamentally can't do and we shouldn't believe that it will solve all our worries about software bugs. And the same goes for all other formal verification languages, too.
32
98
785
99,174
Questions make powerful ideas, because they invite both the questioner and the questioned to think about possible answers. Then it depends whether they optimize for the least or greatest fixed point in answering a question. One stops at the first answer, the other keeps looking.
1
89
Sometimes it takes 20+ years in software to learn this: In the end, the hardware always wins.
1
1
10
451
Took me a few seconds to understand the trick, then 🤯 Clever ternary trick indeed, zero runtime cost, small compile time overhead, type safety gained, worth adding to your C toolbelt
My C generics trick got approval from the legendary Sean Barrett!
5
253
They say if you reread your old writings and cringe, you’ve grown. It gets funny how what looked good then looks novice now, both in speech and in techs, languages do keep on evolving in a fascinating way. As if we only tag along for a ride, as an observer of a great unfolding.
1
70