Chosen links

Links - 13th October 2024

Visual guide to SSH tunneling and port forwarding

To make it quick, I wish I had known about port forwarding and tunneling earlier. With this blog post, I try to understand it better myself and share some experiences and tips with you.

Vector math library codegen in Debug

Debug build (no optimizations at all) performance of any C++ code style is really bad. The only way I could make it acceptable, while still being C++, is by specializing code for common cases, which I achieved by… using C preprocessor macros 🤦.

Queering design systems thinking

Cis-heteronormativity is a product of design, which Viktor Papanek defines, in his 1971 book, Design for the Real World, as “the conscious effort to impose a meaningful order”. To, again, make over our experiences in the image of the system.

Stanford professor and journalist Fred Turner describes design as “the process by which the politics of one world become the constraints on another”.

Our design systems are both an outcome of and acts of social construction.

“Socially constructed” is not the same as “not real” Or “bad”. The way in which these norms shape our work and the ways in which our work shapes the experience of our users is very real — and can even be beneficial.

But what I hope we, as a professional community, can learn from queerness is the ability to see the invisible mechanisms of our systems for what they are, and the nerve to question if they really are benefitting us.

Intuitively, I think the design systems community understands the power of language, especially naming. Language has the power to shape the things that it describes. The chronically online among us may already recognize this process as “discourse”.

Discourse is the mechanism by which labeling a set of behaviors homosexual actually helped create a cultural identity around which a community can form.

Discourse is also what’s transformed a collection of technical artifacts and collaborative processes into a unique discipline called design systems.

And discourse is how we draw the boundaries of what a design system is, and isn’t, and who is and isn’t part of this professional community.

How many times have you been at a design systems event and heard a speaker say something to the effect of, “Your Figma library is not a design system”, when a Figma library happens to be what your team is organizing collaboration around?

It’s like, “fuck my drag, right?”

We talk like Figma is drag to Code’s gender. Like it’s a performative copy of something “real”. But really good drag isn’t about the imitation of gender, it’s about exposing the performative nature of all gender. Even cisgender women and men are performing against gendered ideals that, like Quetelet’s measurements of the average man, no one really fulfills. (We just don’t recognize it as easily because gender explodes more quietly than a fighter jet.)

The coded component library is also a copy of a copy of an ideal you won’t find out in the world. There is no single, “true” product for our systems to document because the product experience is created in relationship to each individual user in the context in which they use it.

Neither Figma nor code libraries are your design system. They are both affordances of the larger systems through which design work happens. They signify to the user what’s possible through and prohibited by the system.

Liskov’s Gun: The parallel evolution of React and Web Components

Unless you’re like me — an “extremely online” kind of web developer – you probably don’t notice the dramas and brouhahas that erupt in the web developer community with regularity. Most of the time these flame-wars offer little of value or less in terms of technical insight and the patter of angry voices fades away before it reaches the ears of the less online.

But a recent one, which began when the maintainer of the SolidJS web development framework wrote a long and very angry-sounding blog post outlining why he didn’t think web components represented the future of web development, is a little bit less usual. Not because it has staying power. It’s fading away at the same steady pace as these things usually do.

It’s interesting because it touches on what I think is a genuinely interesting technical issue, but in a way that pretty much forces every reader to ignore it.

Described this way, you might wonder how an otherwise innocuous set of web APIs, designed to aid in the making of reusable widgets, so consistently cause tension and conflict among web developers. So much so that it’s almost certainly a very bad idea for me to wade into it with this essay.

Why do Web Components cause online web developer communities to erupt in anger and argument?

To answer that, we need to go back over a decade, at least thirteen years, all the way back to 2011.

But, sure, the data only flows one way. You just need to have curious definitions of the words “flow”, “one”, “way”, and “data”.

A compleat History of the Magic: the Gathering Metagame, Supplemental: Commander’s Road to Hell

Commander being so unlike the regular game probably contributed to its rapid growth. It tapped an untapped market; if you din’t like Magic, you might very well still like Commander. Commander is so different, and it appeals to such a different audience from the rest of Magic, that it’s almost its own game that just happens to use the same game pieces.

Because Commander is its own thing, it has no off-ramp to the rest of Magic. People who came into the game through Commander largely stayed in Commander. But Wizards saw the incredible growth, and it saw Commander as the casual format that they could market and promote and control. So increasingly Commander was the entry point into the game – because Wizards had long struggled to find a product line that could act as that entry point.

When the main point of entry into the game’s ecosystem is a tar pit, the whole thing becomes cannibalistic. Commander’s popularity didn’t help eight-player drafts fire at your local game store, it didn’t help the tournament scene. I’ve described the experience of playing Magic on and off during in this period a bit like having an old friend who’s slowly being taken over by a brain parasite. Every time I checked in on Magic, Commander had overriden a little more of its original personality.

In the end, I think the way Wizards treated Commander kind of destroyed the identity of both Commander and Magic. Commander was born as a way of playing cards that nobody cared about; increasingly, the cards only cared about Commander.

How to recalculate a spreadsheet

We’ve now more or less reached the algorithms used in modern-day spreadsheet recalculation. Unfortunately, I suspect there is basically no business case to be made for ever improving it further. The few people with the problem “my Excel spreadsheet is too slow” have already written enough Excel formulas that migration to any other platform is impossible. Fortunately, I have no understanding of business, and so we’re going to look at further improvements anyway.

Seven implementations of Incremental

A talk about the history of Incremental, a library that makes it easier to build efficient on-line algorithms. This is based on the idea of self-adjusting computations, introduced by Umut Acar et al. This talk describes the work required to take these ideas from their form in the academic literature to a useful tool in a practical setting.

Get me out of data hell

At two of the four businesses I’ve worked at, the most highly-performing engineers have resorted to something that I think of as Pain Zone navigation. It’s the practice of never working unless pair programming simply to have someone next to you, bolstering your resolve, so that you can gaze upon the horrors of the Pain Zone without immediately losing your mind. Of course, no code alone can make people this afraid of work. Code is, ultimately, characters on a screen, and software engineers do nothing but hammer that code into shapes that spark Joy and Money. The fear and dread comes from a culture where people feel bad that they can’t work quickly enough in the terrible codebase, where they feel judged for slowing down to hammer the code into better shapes that sadly aren’t on the Jira board, and where management looks down on people who practice craftsmanship.

The last doesn’t even require malicious management — it just needs people that don’t respect how deep craftsmanship can go.

Management is blissfully unaware that this force of camaraderie and mutual psychotherapy is the only way that things continue to limp along.