thirty things tagged “tech hell”

The Des Moines Register’s Website is a Crock of Shit

This is what it takes to view a read a bloody article with a PiHole to block ads. I don’t even want to get started on the AMP nonsense. First, a focus-stealing popup asking if you’d like to subscribe to some bullshit.

Followed by another popup asking you’d subscribe to more bullshit.

After which you can finally see what you came for… which helpfully occupies the bottom 20% of the viewport 💯

See also: Every Website in 2019. Nothing will change.

Disposable Software

The software industry is currently going through the “disposable plastic” crisis the physical world went through in the mid-20th century (and is still paying down the debt for). You can run software from 1980 or 2005 on a modern desktop without too much hassle, but anything between there and 2-3 years ago? Black hole of fad frameworks and brittle dependencies. Computer Archaeology is going to become a full-time job.


Always be leveraging

On tech culture’s obsession with quantifying and optimizing every single moment of one’s existence1:

I hate this framing. It is pressuring, dehumanizing as it contextualizes human endeavor in transactional terms, usually in a market.

I know this goes against the ethos of high-tech, but humans don’t have an imperative to be as productive as possible. They don’t have to make the most use of their time. They don’t have to get as efficient as they could. These are metrics that work fine for our machines, our code. But humans are not machines. Sure, we shepherd the machines, and sure sometimes we are in rivalrous dynamics that increasing efficiency has a payoff, but it is never the goal in itself.

The real “currency” we have, if we are using the term in the sense of denoting essentialness, is our humanness, our mortality, our psyches, our connection with other people and seemingly mundane but meaningful parts of our lives. I mean, look how many of us started baking their breads and enjoying it. It is not a wise use of the “currency of time”, but it is part of life very well spent, as our internal reward mechanisms have been telling us.

@acituan on HackerNews, commenting on this article

  1. With corroboration via sophomoric interpretations of stoicism and objectivism, all aimed at summoning this latent, dispassionate übermensch whose sole purpose is to “leverage” and deliver value. ↩︎

On De-Duplication

I’ve usually heard this phenomenon called “incidental duplication”, and it’s something I find myself teaching junior engineers about quite often.

There are a lot of situations where 3-5 lines of many methods follow basically the same pattern, and it can be aggravating to look at. “Don’t repeat yourself!” Right?

So you try to extract that boilerplate into a method, and it’s fine until the very next change. Then you need to start passing options and configuration into your helper method… and before long your helper method is extremely difficult to reason about, because it’s actually handling a dozen cases that are superficially similar but full of important differences in the details.

I encourage my devs to follow a rule of thumb: don’t extract repetitive code right away, try and build the feature you’re working on with the duplication in place first. Let the code go through a few evolutions and waves of change. Then one of two things are likely to happen:

  1. you find that the code doesn’t look so repetitive anymore, or,
  2. you hit a bug where you needed to make the same change to the boilerplate in six places and you missed one.

In scenario 1, you can sigh and say “yeah it turned out to be incidental duplication, it’s not bothering me anymore.” In scenario 2, it’s probably time for a careful refactoring to pull out the bits that have proven to be identical (and, importantly, must be identical across all of the instances of the code).

@burlesona on HackerNews (emphasis and formatting mine.)

Whatever. I say we continue to abstract away and make better and better hammer factories and beam at our sophistication in creating unnecessary complexity #jobsecurity

The AppleTV Remote Sucks

Dec 9 It’s so bad a Swiss company made a much saner substitute that sells for ~$20.

Nov 16 Looks like you can use the old remote with the new AppleTV.

I’m annoyed every time I have to use the infernal thing.

  • It tries (poorly) to be something other than a damn TV remote1.
  • There’s no way to tell which end is up.
  • There’s no accidental tap detection when you pick it up.
  • It’s way too small.
  • It’s way too slippery.
  • I use Siri to skip forward and backward because the edge clicks are unmemorable and dysfunctional.

I use the iPhone app when I can and, while I can’t stand the terribly implemented inertial scroll, still find it better than the hardware.

Inertial scrolling does in fact exist on the Siri remote, but the effect is muted. The on-screen movement doesn’t accurately reflect your swiping — scrolling is staggered and it often stops abruptly, when you don’t intend to stop. This makes aspects of navigation, like manual search or entering your email address or password, extremely cumbersome.

– Dave Smith, “My biggest problem with the new Apple TV remote

See also: Steve Brykman of ArsTechnica’s thoughts on “the nightmare horrorshow” that’s the remote.

  1. “You’re basically getting a giant iPad game that you have to play with a tiny remote” ↩︎

Because God Can See

When I was little — and by the way, I was little once — my father told me a story about an 18th century watchmaker. And what this guy had done: he used to produce these fabulously beautiful watches.

And one day, one of his customers came into his workshop and asked him to clean the watch that he’d bought. And the guy took it apart, and one of the things he pulled out was one of the balance wheels. And as he did so, his customer noticed that on the back side of the balance wheel was an engraving, were words.

And he said to the guy, “Why have you put stuff on the back that no one will ever see?” And the watchmaker turned around and said, “God can see it.”

Now I’m not in the least bit religious, neither was my father, but at that point, I noticed something happening here. I felt something in this plexus of blood vessels and nerves, and there must be some muscles in there as well somewhere, I guess. But I felt something. And it was a physiological response. And from that point on, from my age at the time, I began to think of things in a different way. And as I took on my career as a designer, I began to ask myself the simple question: Do we actually think beauty, or do we feel it?

Richard Seymour, How Beauty Feels

I want it to be as beautiful as possible, even if it’s inside the box. A great carpenter isn’t going to use lousy wood for the back of a cabinet, even though nobody’s going to see it. When you’re a carpenter making a beautiful chest of drawers, you’re not going to use a piece of plywood on the back, even though it faces the wall and nobody will ever see it. You’ll know it’s there, so you’re going to use a beautiful piece of wood on the back. For you to sleep well at night, the aesthetic, the quality, has to be carried all the way through.

Steve Jobs

Do quite a bit more, good and invisible things, than required for the MVP for the bloody “sprint”. You will then smile a lot and sleep quite well indeed. Excellence is a habit.

Saved here via Stephanie Harcrow’s post.

Two Levels of Not Giving a Fuck

No Code is the best way to write secure and reliable applications. Write nothing; deploy nowhere.

Start by not writing any code.

Brilliant. I love both the presence and contents of the Dockerfile in that repo. As is always the case with such projects, the issues and pull requests are 💯

And if one is tempted to go against the tenets of No Code, there’s always my beloved fuckitpy, a (strangely well-thought-out) “Python error steamroller”1:

def buggy_function():

class BuggyClass(object):
    def __init__(self):


This module is like violence: if it doesn’t work, you just need more of it.

  1. Inspired by FuckitJS. ↩︎

JavaScript Delenda Est

Back in the second century BC, Cato the Elder ended his speeches with the phrase ‘Carthago delenda est,’ which is to say, ‘Carthage must be destroyed.’ It didn’t matter what the ostensible topic of the speech was: above all, Carthage must be destroyed.

My opinion towards JavaScript is much like Cato’s towards Carthage: it must be rooted out, eliminated and destroyed entirely. I don’t know if I’d go quite so far as to say that the fundamental challenge of mass computing is the final destruction of JavaScript — but I want to say it, even though it’s false.

JavaScript is a pox, a disaster, a shame. It is the most embarrassingly bad thing to become popular in computing since Windows 3.1. Its one virtue (that it’s on every client device) is outshone by its plethora of flaws in much the same way that a matchstick is outshone by the sun, the stars and the primordial energy of the Big Bang added together.

JavaScript is the XML, the Yugo, the Therac-25 of programming languages. The sheer amount of human effort which has been expended working around its fundamental flaws instead of advancing the development of mankind is astounding. The fact that people would take this paragon of wasted opportunity and use it on the server side, where there are so many better alternatives (to a first approximation, every other programming language ever used), is utterly appalling.

JavaScript delenda est.

I don’t know what my newfound affection for it says about me. Via HackerNews.

Gandhi the Annihilator

At least in Civilization:

[. . .] Gandhi tends to be the first to use nuclear weapons, and spares no expense on wiping your civilization off the map. You probably always thought you were crazy — how could a series that prides itself on historical accuracy portray Gandhi so wrong? Well, you’ll be happy to know that both your sanity and Civilization’s historical integrity aren’t at fault. Instead, a bug’s to blame.

In the earlier Civs, leaders are given a set of attributes that dictate their behavior. One such attribute is a number scale associated with aggressiveness. Gandhi was given the lowest number possible, a rating of 1. However, when a civilization adopted democracy, it granted a civilization -2 to opponent aggression levels. This sent Gandhi’s rating of 1 into the negative, which swung it back around to 255 — the highest possible rating available, and thus, the infamous warmonger Gandhi was born., What caused Gandhi’s insatiable bloodlust in Civilization

And they just left it in there as an homage:

This cyclical aggression scale was fixed in later versions of the game, but Gandhi wasn’t totally cured of his bloodlust. The team fixed Gandhi’s aggression rating, but as an Easter egg paying homage to the earlier aggressive versions of Gandhi, ramped his nuke rating through the roof. So, while it may be difficult to push Gandhi over the edge, he goes from zero to nuclear option once you do.

Via MS.

Alan Kay on OOP

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I’m not aware of them.

Dr. Alan Kay on the Meaning of “Object-Oriented Programming”

So… Erlang? (RIP Joe Armstrong 🙏) And that was before this

(I’m not against types, but I don’t know of any type systems that aren’t a complete pain, so I still like dynamic typing.)

Indeed, Dr. Kay.

The Inventor: Out for Blood in Silicon Valley (2019) · IMDb · B+

A great complement to the book.

When I think of Theranos, I really think that there were two entirely different worlds. There was the carpeted world and there was the tiled world. In the carpeted world where Elizabeth was a goddess. Everyone, you know, almost worshipped the ground she walked on. She could do no wrong. She was the next Steve Jobs. Theranos was changing the world. And then you go into the tiled side and nothing works. We’re on a sinking ship. Everything is a lie. Reconciling the differences between those two worlds was really hard for me to do.

[…] I would leave the tiled world thinking, ‘Oh man, sinking ship.’ And I would go have one conversation with Elizabeth. And I would be so motivated to go back and work and I felt like I was changing the world again. And I would go back into the tiled world and I would go, ‘Wait, what just happened?’ You want it to be true so badly and even for me, I was working with these devices every single day and she could still kind of convince me. When I think back on those conversations, I just think ‘How did she do that?’

Tyler Schulz

The “Not Invented Here Syndrome”

In programming, it is also common to refer to the “NIH syndrome” as the tendency towards reinventing the wheel (reimplementing something that is already available) based on the belief that in-house developments are inherently better suited, more secure, more controlled, quicker to develop, and incur lower overall cost (including maintenance cost) than using existing implementations. In-house developments are often collaborative with each other. When two in-house developments come together, it is informally known as “computer incest.”


Found when I was looking for a dependency-free XML-to-JSON parser wherein the author notes the “fine NIH tradition of JavaScript developers everywhere.” Reminded me of this


11th Hour Panic

Shturmovshchina was a common Soviet work practice of frantic and overtime work at the end of a planning period in order to fulfill the planned production target. The practice usually gave rise to products of poor quality at the end of a planning cycle.

It has three very, very familiar stages

  • Spiachka (hibernation) – this is the first third of the planned period. Nobody’s doing anything, mostly because there are no orders to do anything
  • Raskachka (buildup) – at this stage it is more or less known what should be done, but there is too much time ahead, and during that time the requirements may change, as well as the management;
  • Goriachka (fever) – this is the last stage of the planned period; by the end of this stage the product is supposed to be ready, or the management may be reprimanded; everybody works like crazy, with the bright future being so near.

Node Modules

For a single project I made the mistake of working on in my Dropbox folder:

Wonder what the downsides are to hardlinking by default. And, fundamentally, why creating an amazing, Python-like standard library is such an intractable problem in the first place.

[. . .] core-js is also utils library, quite a big one honestly! It has so many functions inside I bet a lot of other packages will be using it!

Not really. Only babel-runtime has it in its deps. Oopsie.
And returning to the starting point, cli uses only 3 (trivial) methods from common-tags — stripIndents, stripIndent, oneLine. Oopsie daisy.

In order to use these 3 methods node_modules needs 1826 files. And that’s just 4 of mentioned 976 installed packages.

– Mateusz Morszczyzna, What’s really wrong with node_modules and why this is your fault

🤦‍♂️ The portion of the article that listed functionally similar packages and is-* packages was particularly dismaying. As he points out, there’s a good reason why jQuery and lodash are as immensely popular as they are1.

  1. Was wondering if we’ll ever get back to the magic of hand-crafted web pages and found this article which led me to this modern Geocities clone 💖 ↩︎

It’s what they do at Google

In addition, engineers have commoditized many technical solutions that used to be challenging in the past 15 years. Scaling used to be a tough challenge, not any more for many companies. In fact, part of my daily job is to prevent passionate engineers from reinventing wheels in the name of achieving scalability. It’s not because we don’t need to solve scalability problems, but because the infrastructure is good enough for most of companies. Building and operating so called “big data platform” used to be hard, not that hard any more. Building machine learning pipeline used to be hard, not that hard any more for many companies. Of course, it’s still challenging to build a highly flexible and automated machine learning pipeline with full support of closed feedback loop, but many companies can get by without that level of maturity.

– via Hacker News (emphasis mine)

Telling People Things

What’s going on is that without some kind of direct experience to use as a touchstone, people don’t have the context that gives them a place in their minds to put the things you are telling them. The things you say often don’t stick, and the few things that do stick are often distorted. Also, most people aren’t very good at visualizing hypotheticals, at imagining what something they haven’t experienced might be like, or even what something they have experienced might be like if it were somewhat different.


When people ask me about my life’s ambitions, I often joke that my goal is to become independently wealthy so that I can afford to get some work done. Mainly that’s about being able to do things without having to explain them first, so that the finished product can be the explanation. I think this will be a major labor saving improvement.

Chip Morningstar, “You can’t tell people anything