Bookmarks

My own little curated list of links to creative works, news articles, software tools and other resources I've found on the web. This is a mixture of things I've found useful, or thought-provoking, or fun, or that maybe hold some kind of special meaning to me.

Help tech employees secure collective agreements

Love this advocacy network initiative from Unionen. The very clear "union organiser" tone of voice in the text is cool as hell.

This is no small request we’re making of you. We will face attacks and strong opposition claiming we’re wrong.

You should go sign up. You give them your email address and they'll keep you up to date as the campaign progresses.

avdi.codes

So obsessed with decentralization (we’ll get it right this time!) that when centralization inevitably builds up no one knows how to manage it healthily, or even that it needs to be managed. And then a Matt Mullenweg happens and everyone is like “oh no, I have learned nothing from this other than that centralization is bad, we’ll get it right this time!”. Rinse, repeat.

Yep.

Greppability is an underrated code metric

This article focuses on back end development but the same principle also applies to front end. It's why I recommend avoiding Sass's parent selector in many cases.

It's really common to see Sass written like this.

.Card {
  display: flex;

  &__heading {
    font-family: bold;
  }
}

That parent selector saves one engineer one or two seconds of typing work. The trade-off is that it makes Card__heading impossible to find via code search. So I think the above is better written like this.

.Card {
  display: flex;
}

.Card__heading {
  font-family: bold;
}

The initial work of typing in the code takes a moment or two longer. In exchange for that, anyone who works on the application in future can copypaste any element class like Card__heading into a code search tool and immediately find its CSS source code.

Why Playwright is less flaky than Selenium

Playwright is so fast that it forces you to write UI tests correctly on day one. Selenium isn't.

Interesting!!! I've done a bunch of work with both of these over the years and I gotta admit I've found Playwright less flaky.

The Balkanized Internet: Role of Big Cloud Providers

I am disabling AWS access to my on-prem servers (at least mostly). This is partly an experiment and partly an expediency, as I will explain. (As a technical side note, I'm mostly concerned with TCP traffic and it is possible to distinguish which is the client and which is the server from the initial handshake. I'm blocking connection attempts to my services from clients in AWS. Clients on my network can still establish connections to services hosted in AWS.)

What a concept. It's got me rethinking abuse problems I've dealt with over the years and whether just blocking us-east-1 might have been a quicker way to fix them. Would've definitely tidied up the UX analytics for one site I've worked on.

Varför är techbolagen så rädda för facken?

Kim Öberg said something that stuck with me during Arbetsvärlden's panel discussion on the Swedish tech industry's anti-union stance at this year's Almedalsveckan.

The first two years in Sweden, your work visa is linked to your employer. That means if you lose your job in those first two years you have two months to find a new job with an employer who'll sponsor your visa, otherwise you have to leave Sweden. It raises the stakes a lot if you're thinking of “irritating” your employer. So that's one factor. I decided I'd worked at Klarna a few years, I'd done a good job, people were happy with my work, so I figured OK, I have enough “points” to get involved with unionising, because my technical work is appreciated enough.

The “points” thing! It's real! I made a similar calculation before the Spotify campaign!

This entire event was wonderfully insightful. Well worth a look if your Swedish skills are up to the challenge.

Ethicswishing

The amazing feeling when someone puts words to something and you immediately recognise it a dozen times over in your own memories.

Ethicswishing (in tech) is the belief that if you are committed to being ethical and understand technology, then you are well-equipped to build technology for social good. But the truth is that building tech for social good is a lot like having sex in a bathtub: if you don't understand the first thing about sex, it won't help that you're a world-class expert in bathtubs.

The Most Important Decisions are Non-Technical

While it's fun to discuss whether an application should be implemented in Ruby or Clojure, to write beautiful and succinct code, to see how far purely functional programming can be taken, these are all secondary to defining the user experience, to designing a comfortable interface, to keeping things simple and understandable, to making sure you're building something that's actually usable by the people you're designing it for. Those are more important decisions.

Facts. Same thing applies when choosing what problems to solve and how to solve them. Ever see a team rush to add a new bit of tech to their process, hoping it'll solve a collaboration problem for them without anyone needing to have any difficult conversations with anyone? Mmhmmm.

Should I remove this blog from Google Search?・The Jolly Teapot

Keeping an eye on the backlash against some of the tech world's latest abuses. This is an interesting example.

Google is not a huge source of traffic and visibility. I get most of my visits from RSS readers, other people’s links including fellow bloggers, or websites like Hacker News

Hadn't thought about this at all but it's actually an interesting idea. I'm probably not going to copy this, at least not right now, but it's fascinating how many of the old assumptions are being reevaluated lately.

Manifesto for a Humane Web

Especially liked this bit from the intro.

If what we don’t want from the web is increasingly clear, perhaps it’s time to identify what kind of web we do want.

Love anything about reclaiming wasted effort from reacting to the outrages of the business world and focusing it on a positive agenda of our own. Seeing more and more of it now too.

A Guide To Designing For Older Adults — Smashing Magazine

One of those things where I'm chucking this on here as a bookmark so I'll remember it exists and find it easier when I need it. Unlabeled icons and disappearing text continuing their winning streak in the league of inaccessible designs.

Opinions for Writing Good CSS

Agree with about most of these. Especially the part about formulating a complete understanding of a responsive layout before trying to code it. Would add that coding it is a valid way of building that understanding. Just gotta be a little bit present in the creative process, notice when it's time to cut your losses on that first draft, and try again from scratch.

The Network State as An Investment Product — Shanley

This line in particular caught my eye.

This is gonna make the Bahamas look like a hostile regulatory environment.

Been thinking about this a bit for a while. When you see these market fundamentalist types critique a given regulation, or a jurisdiction they feel is over-regulated, there's a temptation to read that critique in a generous way. Business talk about creating favourable conditions for entrepreneurs can be really compelling.

But then if you zoom out and look at the wider context, there's basically no jurisdiction deregulated enough to satisfy this worldview.

Elon Musk orders the Swedish Tesla subsidiary not to sign a union deal with its workforce under any circumstances, and you instinctively try to adopt a middle-ground perspective on his stance. "Well", you think, "I suppose Sweden is a bit of an outlier in terms of trade unionism and its impact on society. It's understandable for an American business to be hesitant".

Then you find out he's also a key player in a legal campaign to destroy the precious few labour rights American workers still enjoy, and you realise "Aha, so there's… no satisfactorily large amount of unilateral power for this person?"

If you're not convinced this is a serious problem, I'd suggest reading Marc Andreessen's Techno-Optimist Manifesto for yourself in full. My personal favourite aspect of it is how the section entitled "The Enemy" begins with a disclaimer that "Our enemies are not bad people – but rather bad ideas", and then with each passing sentence becomes more and more clear it's referring to some very specific people the author considers bad. Count how many times he refers to a movement you're a member of as his enemy, then think about how influential his VC firm is in the industry you depend on to make a living.

I think it might be a bit of a strategic booboo to let these wannabe Bond villains actually build their own volcano lairs.

Being a dick

In this post Johan has touched on something very powerful. In allowing reactionaries to frame the debate about inclusive language, we’ve empowered them to portray themselves as the committed realists and us as the sheltered crybabies.

Johan turns this on its head.

if you have no gay friends, if you don’t know any parents with a disabled kid, then who’s really in that cotton-ball cocoon?

I think this reframing is very exciting.

Gay people are being beaten up and murdered every day with nobody reporting on it, while every single instance of someone walking up to a professor and being “triggered” has been quickly snatched up and reported to absolute death by the ever-present modern outrage industry because the story is just too good to pass up. If you’ve fallen for that… well, again, I have to ask: who has the soft and overprotected mind here? Who’s too quick to take offense?

You can see little instances of this kind of idea here and there in all kinds of progressive spaces. For whatever reason this one has caught my attention in a new way.

I’m very interested in all the various ways the reactionary right has succeeded at promoting itself as the assertive, positive freedom-fighter, and all the ways the progressive left has conceded that ground and retreated into passive critique and negativity.

This right here is a piece of the puzzle.

About Arbetsmiljöverket's New Webdiarium

Got a bit of a shock this week when I logged into the admin panel for 666a and noticed it hadn't send a single email alert in over a week. Glad it's become so hands-off that I can go this long without checking in from time to time but it's given me some new ideas about monitoring and alerting for sure.

Generative AI is for the idea guys

Love the feeling of stumbling on a new blog and finding out it’s someone with a vast back catalogue of interesting writing. Got that with this one.

It’s a fun post. I think I agree with the main point it makes too. Bit concerned about the material damage being inflicted on peoples lives by this phenomenon though.

Thinking a lot about the old quote “The market can stay irrational longer than you can stay solvent” a lot lately. What do all these people do whose industries are going through a demand slump while the market experiments with not buying human labour? I don’t reckon their landlords will accept “the VC firm whose portfolio AI company is currently half-assing my old job has a post on their blog about UBI” as a rent payment.

Using Simple Tools as a Radical Act of Independence

Stuff like this is why I still think there’s some magic left in tech.

This is why the simplicity of HTML and CSS now feels like a radical act. To build a website with just these tools is a small protest against platform capitalism: a way to assert sustainability, independence, longevity.

How I Read Rails Source Code

Worth bookmarking just for the bundle open gem tip. But also full of other little bits of wisdom.

The obvious benefit of a test is to make sure that the code still works after making a change. However, another hidden benefit is that a test can help us get familiar with the codebase quickly. You can execute the code without launching the application in the browser or running the complete program.

This is an underrated upside of having lots of unit tests and it's an onboarding hack I use a lot myself for learning new codebases quickly.

The UX of UUIDs | Unkey

Love anything about UUIDs and ULIDs. The base58 stuff here was a new one on me.

Base58 encoding uses a larger character set and avoids ambiguous characters, such as upper case I and lower case l resulting in shorter identifier strings without compromising readability.

Genius. Love it.

Learning to code with and without AI

This paragraph really jumped out at me here.

Additionally, students in the Codex group were more eager and excited to continue learning about programming, and felt much less stressed and discouraged during the training.

There’s a lot to think about in the overall issue of the role of LLMs in education. This factor is easy to miss.

The hardest thing with learning to code is persevering through all the constant getting stuck. If you’re young, childless and have lots of time and computer access, it’s always been easier to overcome.

The equation’s changed I guess.

DB Indexes Do Not Magically Compose

Sometimes you stumble on something that seems to be written to call you out personally somehow. This is one of those things. I have definitely been doing an awful lot of magical thinking when working with database indexes and this post is my intervention.

Old CSS, new CSS

Quite a comprehensive historical perspective. I remember this!

My guess, then, is that the push for CSS 3 really began when Firefox took off and designers discovered -moz-border-radius. Suddenly, built-in rounded corners were available! No more fucking around in Photoshop; you only needed to write a single line! Practically overnight, everything everywhere had its corners filed down.

On Developer Fetishes

We use tmux. Mainly so we can see a big clock. We have a custom prompt. It tells us how many minutes until our JavaScript framework becomes obsolete.

💀💀💀💀💀💀

<css-doodle />

Wish I would do more with this. Bookmarking it in case doing so helps me remember to make some time to do so.

Latest News

Heartbroken about this. Been expecting it for a while, but it makes no difference. Jane's work has had a profound influence on me. The world will be a darker place without her.

The LLMentalist Effect: how chat-based Large Language Models rep…

Very compelling LLM critique based on a comparison with how psychics operate.

Taken together, these flaws make LLMs look less like an information technology and more like a modern mechanisation of the psychic hotline.

Delegating your decision-making, ranking, assessment, strategising, analysis, or any other form of reasoning to a chatbot becomes the functional equivalent to phoning a psychic for advice.

The impact of the technology is undeniable in my opinion but there’s also an alarming golden hammer syndrome associated with it and I think this is a good mental model for that.

Im finding there’s a strong correlation with how prominent the AI contribution to something is and the likelihood of it being crappy. I think it’s at its best when used as a very effective new form of autocomplete, and I personally see a lot of emperor’s new clothes hype about what it achieves when it takes centre stage.

Engineer Showboating

There’s more of me in this post than I’d prefer.

The reason I learned vim wasn't because I felt particularly inhibited by my editing speed in graphical environments, it's because it conferred authority.

There’s a truth to this. I do also definitely think there’s a magic in injecting meaning into the boring mechanical aspects of your work but it’s undeniable that these tool choices are also at least partly social.

Demystifying the Shadow DOM

It’s time I looked into this again. Wonder if they made any progress on the accessibility problems yet.

I am not a supplier

Compelling argument!

There is a small problem here. We are not suppliers. All the people writing and maintaining these projects, we are not suppliers. We do not have a business relationship with all these organisations. We are volunteers, writing code and putting it online under these Licenses. And yes, we put it online for people to use them. But we do not get anything from it.

Fuck trees, use tags | Garrit's Notes

As a certified trees-disliker I loved to stumble on this. I don't even bother with tags though. Chronological order is plenty. My ~/Documents folder is 5GB and contains zero folders. Sort by date. It's plenty.

10 Years of Hacker News "Ask HN: Who is hiring" Trends

Surprised by some of this. The location stuff in particular.

The remote work trends definitely have effected where jobs are located. The term "San Francisco" fell off a cliff in 2020. The term "New York" fell off too, but a little less. It looks like "Europe" and "European" have been steadily increasing over time.

Optimizing SQLite for servers

Will always bookmark a SQLite in production post. Learned something I didn't love in this one!

SQLite doesn't keep statistics about its indexes, unlike PostgreSQL, so COUNT queries are slow, even when using a WHERE clause on an indexed field: SQLite has to scan for all the matching records.

Bloody hell, SQLite.

Planet B

Enjoyed this a lot. Very fun mix of different media.

Moving Abroad (Pt.2)

Nice sentence here that perfectly captures early days immigrant alienation.

My sensation after spending almost eight months here is that everyone is invited to a party that you are not.

Vim: Seven habits of effective text editing

Rest in peace Bram lad. This article stuck with me from early on and had a big impact on my approch to the everyday labour of coding.

There's something magic in injecting meaning into the boring mechanical aspects of your work. Since reading this post I've lost count of how many times I've heard "But the typing isn't the bottleneck" from people who get less than half as much work done as I do.

Fidinpamp

Love a good conspiracy theory. This one feels mundane enough to be credible.

The one about the web developer job market

Very interesting perspective. Some of the pessimism is a little bit undermined by the software quality crisis stuff in my opinion (I simply don't buy that premise at all), but I found this an insightful piece all the same.

This paragraph in particular will stick with me I think.

Historically, whenever management adopts an adversarial attitude towards labour, the only recourse labour has is to unionise. Collective action limits the abuses of management and unionised industries tend to be more stable. This might have been a detriment to the sharply growing tech industry of a decade ago (if you believe anti-union messaging, that is), but today we are facing being outright cut out of the success of the industry. Why should we care if unionising hypothetically dampens the overall growth of the industry? It definitely dampens the downturns and since we are being cut out of the upside anyway, we might as well take measures to increase our job security.

Why We're Dropping Basecamp

Enjoyed reading a critique like this from outside the software industry.

When we enter into business with a company whose boss takes delight in the mass layoffs of tech workers because it disempowers those who might speak out against their company keeping a list of non-Anglophone names that some members of the team find hilarious, we have a decent sense of who we’re dealing with.

Can’t help wondering if their much-publicized “cloud exit” cost-cutting exercise might have been related to lost business like this.

Ask HN: I'm a software engineer going blind, how should I prepare?

Fascinating discussion initiated by an engineer preparing for vision loss resulting from an Usher syndrome diagnosis. This reply has stuck with me:

You'll become the fastest and most proficient proof reader on your team. Typos will be easily spotted as they just won't "sound right". It will be like listening to a familiar song and then hitting an off note in the melody. And this includes code. Also, because code is no longer represented visually as blocks, you'll find you're building an increasingly detailed memory model of your code. Sighted people do this, too, but they tend to visualize in their mind. When you abandon this two dimensional representation, your non-visual mental map suffers no spatial limits. You'll be amazed how good your memory will get without the crutch of sight. Good luck.

WebAIM: History of the browser user-agent string

In the beginning there was NCSA Mosaic, and Mosaic called itself NCSA_Mosaic/2.0 (Windows 3.1), and Mosaic displayed pictures along with text, and there was much rejoicing.

Adore this post.

Picotron by Lexaloffle

Ridiculously excited about this. From a quick glance at the Picotron BBS, the community is already in full flow porting coreutils etc to this.

Text analysis of Trump's tweets confirms he writes only the (angrier) Android half

Absolute classic piece of data journalism.

Words like "join" and "tomorrow", and times like "7pm", also came only from the iPhone. The iPhone is clearly responsible for event announcements like this one ("Join me in Houston, Texas tomorrow night at 7pm!")

A lot of "emotionally charged" words, like "badly", "crazy", "weak", and "dumb", were overwhelmingly more common on Android. This supports the original hypothesis that this is the "angrier" or more hyperbolic account.

timelines:protect_and_survive [alternatehistory.com wiki]

Haunting alternative history fiction about a nuclear war in the 1980s.

The Controller was trying to avoid the Food Officer as much as possible - yes, he was a bit abrasive, but who wasn't after a week in a shoebox? The more pressing reason was the fact that both men had signed the order denying food stocks to Category 2 and 3 survivors (i.e those who can't work). The Controller had almost been able to keep it together after telling the Food Officer, and the rest of the bunker, that 'babies can't work'. The words had echoed in the silence yesterday and they echoed in his head every single second today.

Sensible Firefox Setup

There's a few things in here I'm installing right away and a few I'm bookmarking this so that I can revisit it later to try them out when I'm less busy. Embarassed I didn't already know about the I still don't care about cookies extension.

lua-users wiki: Lua Power Patches

These patches are kind of my fav thing about Lua. Like the fact that this thing exists in this form where it can have these little patches in this way.

LinuxCzar: My Philosophy On Alerting

Fantastic post. Alerting is such a delicate balance. You start to involuntarily develop Opinions about it once you've been paged in the night a few times due to some bullshit like Googlebot indexing the site and tipping CPU usage just above the alerting threshold. Or for downtime on an unimportant page that could realistically have stayed down until morning without consequence.

They're Made out of Meat

I'm always sending people this. Permanently stuck in my head since whenever I first read it.

Churn

A surprising statistic about Hotwire's bundle size, a fun what-if scenario about React, a refreshing sociotechnical perspective on why the frontend JS ecosystem looks the way it does, and some good old fashioned cautious optimism about web components. Lovely post.

The quiet, pervasive devaluation of frontend

Nothing but stone cold facts here.

Design itself is typically conflated with frontend, and design has long been colored as a “feminine” pursuit. The deep technical challenges of frontend functionality are often mistakenly regarded more as a sort of painting with pixels; making things look right, rather than work correctly.

Incidentally, folks involved in UI and design tend to be hit harder in layoffs than their peers, who are perceived as “more technical.” Women, too, are often laid off in greater numbers than men. So it’s hard not to see frontend devaluation and sexism as intertwined. (If they’re even separate things at all, that is.)

Goodbye, Clean Code

I read Clean Code myself sometime in the early 2010s. It kicked off a years-long phase of obsessing over things like DRY and refactoring methods into shorter and shorter pieces.

It took until around 2017 for it to wear off and it harmed my career along the way. I was always very grateful to Dan for writing this post. It explains the problem with Clean Code so clearly, and his reputation gives the words a lot of power.

The phenomemon of Clean Code was a net negative for the software industry and the cleanup work is still ongoing.

I Love Ruby

I love Ruby, and I love this post. Very happy 666a returned this language and its community to my everyday life.

Skit in ger skit ut, också med AI och polariseringen förstärks

Martin's been doing some excellent writing since stepping down as president of Unionen. Lately he's been focusing on AI and it's warmed my heart to see someone with his level of influence digging so deep into this issue. He's correct to describe the discourse around the topic within Sweden as naive and I'm glad someone like him is going deeper than the listicle clickbait angle.

On "owning" software

Thoughtfully written piece by Avdi exploring the trade-offs of various software licensing models.

No, Utility Classes Aren't the Same As Inline Styles

The controversy around Tailwind in the front-end community is a personal fixation of mine. Personally I have a foot in both camps and I'm not realy rooting for either side to win. It's just a super interesting debate to follow.

A One Handed Accessible Keyboard, Inspired by FrogPad

I've often daydreamed about how typing would work for me if I lost mobility in one of my arms. This article is a fun exploration of a variant of that scenario where the author had several months of advance warning and was able to prepare.

You can't parse [X]HTML with regex

The infamous Zalgo answer about parsing HTML with regex on Stack Overflow. I'm decently sure this answer was how I first discovered Zalgo.

WebAIM: Contrast Checker

One of the easiest contrast accessibility checker tools out there. This is a great option if you can't or don't want to install something on your computer. My favourite thing about this one is how pedagogical it is. If you spot a problematic use of colour and then stick the hex values into this thing and take a screenshot of it, that screenshot contains everything you need to make your point to whatever colleagues and stakeholders need convincing.

Abuse as DDoS | Julie Pagano

A post from nearly 10 years ago about abuse and harassment in the tech industry. 2014 was more or less when started learning about things like capitalism and misogyny. This post is a good representative example of the kind of stuff I was reading at the time.

Flexbox Froggy

An old favourite and still a valuable learning resource nearly a decade later. Learned some of my first ever flexbox skills here and still find myself sharing this link frequently today.

Accessibility Support

An accessibility-oriented reimagining of caniuse.com providing information about which browser semantics are supported by which assistive technologies.

Routing: Parallel Routes | Next.js

Came across this Next.js functionality while trying to get something else working. I'd never heard of it before but could immediately think of a bunch of different examples where it would've been useful. Bookmarking so that I remember to come back and try it out.

Enhancing your Rails app with SQLite

The blog post that inspired me and showed me how to use ULIDs with SQLite in a Rails app. I shipped ULID primary keys in 666a because of this post.

Night Work, Tech, And Swedish Labour Law

To agree to be randomly awoken in the night to urgently defend your employer's business is to take a level of responsibility more commonly associated with a parent of a newborn baby. It's fair for workers willing to invest this much of themselves in a business to expect their employer to respect them as an equal counterpart in negotiations about working conditions and the like.

Incident Report

A quick incident write-up about a mistake I made that caused 666a to over-alert for a day or so.

I take operating this service really seriously and wanted to get in touch and explain. I’ve been tweaking the diarium update algorithm this week to try to avoid missing documents if they’re filed late and then backdated to earlier in the week. While doing so I made a small coding mistake that turned on email notifications for all documents.

English translations of Swedish laws

Announcing a linkable web-based version of the unofficial English translations of Swedish laws that the Swedish government sometimes produce.

The data entry work that's gone into creating this resource was gruelling. The reason it was worth the trouble is simple. I saw first-hand during the Spotify campaign how the absence of this kind of resource is a strategic weakness for Sweden's labour movement, with its dreams of organising the country's influential tech immigrant workforce.

Announcing 666a

Launch announcement for my new work environment email alerts service.

The idea for this tool comes from personal experience with union involvement in the workplace. As a union representative at Spotify, a problem I often encountered in my work was the difficulty of keeping up to date with public filings at the Work Environment Authority, which was information that was crucial to our campaign to secure a collective bargaining agreement.

“Spotify is going to find that a union deal is a competitive advantage”

"Fair play to them on this, they stayed out of it. They left it to us, which I think is the right thing to do," Catalini Smith recalls. "They haven't tried to stop us. You hear about in America, these meetings they have, these consultants they bring in. They play these silly games. And it's not really the way things are done in Sweden. They've become a bit of an American company in some ways over the years, but they've held on to some core Swedish values."

Unionen begär förhandling om kollektivavtal på Spotify

Ingen förstår arbetstagarna bättre än vi själva och vi vill ta plats vid bordet där beslut som påverkar vår arbetsvardag fattas. Vi ser en enorm möjlighet både för oss själva och för arbetsgivaren. Facket gör företag bättre, säger Henry Catalini Smith.

Spotify och Klarna vill bana väg för fler klubbar

Det är otroligt skrämmande att få erbjudande om att bli utköpt. Men Sen Kanner, klubbordföranden på Klarna tackade nej till sitt erbjudande och därför gör jag det också. Jag vill inte vara sämre.