⁉️
Hello, excuse the dust. I’m a software engineer who likes to find intersections and weird cross-niches and turn them into something useful.
Recent Posts
-
Comparison of Stacking Tools
…
read article -
Underusing Snapshot Testing
∞I’m a huge fan of snapshot testing, especially in JavaScript/TypeScript where types often lie, ane especially in backend. This article was a good reminder to me why I think it’s such a powerful tool in the arsenal.
-
Bulk suppressions, native in eslint
∞At Pallet I found these to be an essential part of allowing our eslint rules to change. Essentially bulk suppressions allow you to keep a file tracking everywhere the code violates existing lint rules because the code predates the new lint rules. This is cleaner than using
// eslint-diableeverywhere and prevent normalizing disabling lint rules all the time, since all the disables are separate.Yes, ideally, when you introduce a new rule (like
no-floating-promises, a literal savior of sanity in the cruel world of JavaScript race conditions), it would be way better to go and fix all the instances. But that can change behaviors you don’t always expect. Or, more plainly, it’s just a lot of work to be able to take advantage of a new rule. So rather than try to go strive for perfection in your code base you can make things better, right now, and eventually get everything into compliance (if ever).This capability has existed for a long time in the patch package
eslint-bulk, but seeing it native in eslint means it’ll be less finicky to work with (the package above takes a bit of finesse to work correctly since it overrides eslint’s suppression system). -
Announcing the Agent2Agent Protocol
∞A2A is an open protocol that […] empowers developers to build agents capable of connecting with any other agent built using the protocol and offers users the flexibility to combine agents from various providers. Critically, businesses benefit from a standardized method for managing their agents across diverse platforms and cloud environments. We believe this universal interoperability is essential for fully realizing the potential of collaborative AI agents.
I think it’d be nice if this worked, but I’m certainly skeptical right now. One of the big things about how agents are supposed to do better than a standard worfklow is that they can work with highly ambiguous APIs (a.k.a., no API), so whether working against that talent will help improve accuracy or stall adoption remains to be seen.
Put another way, it would be nice if we had a standard way to communicate, but we all know these systems don’t talk to each other well for a reason. This may well be just another standard if there isn’t significant resources behind its adoption, and that part I certainly can’t tell.
-
The Region-Beta Paradox
∞You’ve probably seen this phenomenon before, where it’s easier to cope with a subpar situation rather than fix it or pick an alternative? Region-beta paradox. I wish there was a better name.
There’s a lot of places this shows up in a software team:
- Using shitty software because it’s not worth switching off (looking at you, Jira).
- A teammate who everyone knows is painful to work with, but not so bad that anyone thinks to tell them.
- Not complaining about mildly bad situations, allowing them to fester over time.
Some solutions:
- Complain loudly. (Biggest red flag to me in an organization is when people praise each other for not complaining.)
- Trying new things, for their own sake. Make people feel like change is normal rather than bullshit.
- Valuing improvement. (This is a hard one, and I still haven’t mastered it. But I know it’s possible.)
-
To Help Others Go Further
∞Brendan is an old friend from my time at Backbone, and someone I really admire for the journey he’s taken through both design and engineering. So when I saw he posted a personal manifesto, I had to read it. This is my favorite line in this piece:
The best feedback I get isn’t praise. It’s momentum. When someone says, “Oh, this makes sense,” and they keep going.
-
Screen Capture Nag Remover
∞This has been bothering me because I use Bartender pretty heavily. If you’ve ever been bothered by prompts that “X app is accesisng your screen” in Sonoma, this should work.
A small side rant: Apple, you’re training users to ignore warnings when they’re so naggy like this. Maybe this will cover your ass, but it’s certainly not good security.
-
Cloudflare turns AI against itself with endless maze of irrelevant facts
∞Instead of simply blocking bots, Cloudflare’s new system lures them into a “maze” of realistic-looking but irrelevant pages, wasting the crawler’s computing resources. The approach is a notable shift from the standard block-and-defend strategy used by most website protection services. Cloudflare says blocking bots sometimes backfires because it alerts the crawler’s operators that they’ve been detected.
One question that’s been crossing my mind lately–what will this do? A couple years ago, we worried about model collapse, but if anything, it’s gone the other way now. Claude is trained on its own data, modulated by researchers, for example.
The effect may be that it just separates out the shops that can afford advanced scrapers and inefficient compute versus the ones that can’t, and the veterans (who have already built up their datasets) versus the newcomers.
So continues the training data arms race, I suppose.
-
Cloudflare Workflows
∞If you know trigger.dev, this is essentially Cloudflare’s version of Trigger, a technology I haven’t personally used but really want to. These two products are runtimes similar to Temporal, but with much simpler ergonomics.
I haven’t given much thought to the differences between these platforms, to be honest. However, one thing stands out: Trigger aims to run your existing Node.js codebase in its serverless runtime, while Cloudflare Workflows integrates with the Cloudflare V8 isolate system, which has some incompatibilities and does not support external API calls like napi. (Inversely, this can be a blessing because the Cloudflare Workers is sooo much simpler.)
Additionally, Cloudflare Workers provide about 60% of the value of something like Trigger because Workers’ pricing is based on CPU time rather than wall time. This means if you spend 2 ms making a call and wait a minute for it to return, you’re only billed for 2 ms of compute. The reliability and observability aspects are where workflows win out.
-
typia
∞I’ve seen a lot of traction from this library lately, and compared to the juggernauts like zod, it leverages some of the newer technologies available to the ecosystem:
//---- // examples/checkString.ts //---- import typia, { tags } from "typia"; export const checkString = typia.createIs<string>(); //---- // examples/checkUUID.js //---- import typia from "typia"; export const checkString = (() => { return (input) => "string" === typeof input; })();Zod would instead be using runtime types to generate static types, but here typia is creating runtime types from static types, using a TypeScript transformer.
Super neat, and I certainly did not realize how ready the TypeScript plugin ecosystem was for prime time until seeing this.