Jeremy Keith's Avatar

Jeremy Keith

@adactio.com.web.brid.gy

Making websites. Writing books. Hosting a podcast. Speaking at events. Living in Brighton. Working at Clearleft. Playing music. Taking photos. Answering email.

61
Followers
0
Following
701
Posts
18.07.2024
Joined
Posts Following

Latest posts by Jeremy Keith @adactio.com.web.brid.gy

Thursday session

05.03.2026 22:10 👍 0 🔁 0 💬 0 📌 0

Wednesday session

04.03.2026 20:36 👍 0 🔁 0 💬 0 📌 0
Feedback If you wanted to make a really crude approximation of project management, you could say there are two main styles: waterfall and agile. It’s not as simple as that by any means. And the two aren’t really separate things; agile came about as a response to the failures of waterfall. But if we’re going to stick with crude approximations, here we go: * In a waterfall process, you define everything up front and then execute. * In an agile process, you start executing and then adjust based on what you learn. So crude! Much approximation! It only recently struck me that the agile approach is basically a cybernetic system. Cybernetics is pretty much anything that involves feedback. If it’s got inputs and outputs that are connected in some way, it’s probably cybernetic. Politics. Finance. Your YouTube recommendations. Every video game you’ve ever played. You. Every living thing on the planet. That’s cybernetics. Fun fact: early on in the history of cybernetics, a bunch of folks wanted to get together at an event to geek about this stuff. But they knew that if they used the word “cybernetics” to describe the event, Norbert Wiener would show up and completely dominate proceedings. So they invented a new alias for the same thing. They coined the term “artificial intelligence”, or AI for short. Yes, ironically the term “AI” was invented in order to _repel_ a Reply Guy. Now it’s Reply Guy catnip. In today’s AI world, everyone’s a Norbert Wiener. The thing that has the Wieners really excited right now in the world of programming is the idea of agentic AI. In this set-up, you don’t do any of the actual coding. Instead you specify everything up front and then have a team of artificial agents execute your plan. That’s right; it’s a return to waterfall. But that’s not as crazy as it sounds. Waterfall was wasteful because execution was expensive and time-consuming. Now that execution is relatively cheap (you pay a bit of money to line the pockets of the worst people in exchange for literal tokens), you can afford to throw some spaghetti at the wall and see if it sticks. But you lose the learning. The idea of a cybernetic system like, say, agile development, is that you try something, _learn from it_ , and adjust accordingly. You remember what worked. You remember what didn’t. That’s learning. Outsourcing execution to machines makes a lot of sense. I’m not so sure it makes sense to outsource learning.
04.03.2026 16:33 👍 0 🔁 0 💬 0 📌 0

Tuesday session

04.03.2026 08:31 👍 0 🔁 0 💬 0 📌 0
Will There Ever Be Another You by Patricia Lockwood Patricia Lockwood’s No One Is Talking About This knocked me for six when I read it back in 2022: > It’s like a slow-building sucker punch. Like my other favourite book of that year—A Ghost In The Throat by Doireann Ní Ghríofa—it’s hard to classify. I _think_ it’s autofiction. Not quite autobiography. Not quite fiction. Will There Ever Be Another You is also autofiction. I think. It might also be poetry (which shouldn’t be surprising as Patricia Lockwood is a poet after all). I can’t say that this one had the same emotional impact of No One Is Talking About This for me but then again, very little could. The writing feels very impressionistic, with each chapter trying on a different mode. It’s kinda Joyceian …if James Joyce was stuck indoors during a global pandemic. The narrative—such as it is—revolves around The Situation from 2020 onwards. That was a surreal bizarre time so it makes sense that this is a surreal bizarre book. I think I liked it. I can’t quite tell. I just let the language wash over me.
03.03.2026 08:19 👍 0 🔁 0 💬 0 📌 0

Monday session

02.03.2026 22:26 👍 0 🔁 0 💬 0 📌 0
The state of State Of The Browser I went to State Of The Browser in London on the weekend. It was great! I mean, it’s always great but this year the standard felt really high. All the talks were top quality. I’ve been at events with ticket prices a literal order of magnitude greater but with quality nowhere near this level. Bramus got the ball rolling with an excellent presentation on CSS anchor positioning. Cassie closed the day with a great fun talk, making a game in the browser. In between we had accessibility, progressive enhancement, and other favourite topics of mine. State Of The Browser isn’t just about the talks though. It’s very much a community event. For me, it’s like an annual get-together with some lovely people that I only get to see once a year. But it’s not just a bunch of people who already know each other. Dave got a show of hands from people attending for the first time and it looked to me like around half the audience. That’s what you want at an event—a mix of the old and the new, the familiar and the exciting. A personal highlight for me was spending lunchtime talking in Irish with my friend Paul from Ti.to. Bhain mé an-taitneamh as an deis Gaeilge a labhairt! Dave handed over MC duties to Jake this year but he did do the opening and closing remarks. He’s always really, really supportive of other community events and encouraged everyone to go to Web Day Out. He also pleads with people to buy their conference tickets early (it really does help us conference organisers sleep better) but if you’ve left it this late, you’re lucky that tickets are still available. If you liked State Of The Browser, you’re going to like Web Day Out. And if you missed State Of The Browser and you wished you could’ve been there, you can make up for it by coming to Web Day Out. The two events have a lot in common. Great talks, great people, and no mention of large language models. I don’t know if it was a deliberate policy by Dave, but it felt _so_ good to spend a day at a technology conference that wasn’t dominated by The Hype. There were a few bits of slop in the slides of the first two talks (which always makes me cringe and wince—I crince) and Cassie threw some subtly hilarious shade during her presentation, but apart from that, the day was gloriously free of the A and the I. No doubt some people will think that’s little more than sticking our collective head in the sand, but when the sand is this lovely, I’m okay with it. Tickets for State Of The Browser 2027 are already on sale. Do what Uncle Dave says and get your ticket nice and early.
02.03.2026 11:19 👍 0 🔁 0 💬 0 📌 0

Reading A Fisherman of the Inland Sea by Ursula K. Le Guin.

02.03.2026 10:53 👍 0 🔁 0 💬 0 📌 0

Curse you, Betteridge’s Law!

https://www.bbc.co.uk/weather/articles/c1d6q1l5r6do

01.03.2026 18:27 👍 0 🔁 0 💬 0 📌 0

> But the soul is a floor. It is there to bear us up and keep us standing, not merely to be clean.

— Patricia Lockwood, Will There Ever Be Another You

27.02.2026 15:24 👍 0 🔁 0 💬 0 📌 0

Birthday session

25.02.2026 20:45 👍 0 🔁 0 💬 0 📌 0
A nice day It’s the 25th of February and it’s a beautiful day here in Brighton. I had lunch sitting outside—that’s how unseasonably warm it is. Like a little whiff of Summer to remind us of what’s yet to come. It’s also my birthday. The beautiful weather is an auspicious augery. Mozilla also released a new version of Firefox. I was hoping for cross-document view transitions and scroll-driven animations for my birthday, but alas I may have to wait another year. Later, Jessica is going to take me out for some excellent Japanese food before we head on to a session in a cosy pub. I can think of no better way to celebrate my birthday than playing a rake of jigs and reels. I’m 55 now. It feels like a meaningful number. I think I’ve moved down an `option` in the `select` menus that ask for your age range. I got letters in the post from my pension provider reminding me that 55 is the age when you can technically start taking money out of your pension. Something that retired people do. I have to admit, this birthday has me entertaining retirement options. I’m already down to just three days a week. It wouldn’t take much to wind that down over the next few years. There’d be even more opportunities to savour the sunshine on a sunny day. Anyway. Just pondering. You know, the kind of thoughts a 55-year old has.
25.02.2026 16:09 👍 0 🔁 0 💬 0 📌 0

Streetwise

22.02.2026 17:56 👍 0 🔁 0 💬 0 📌 0

Thursday session

19.02.2026 23:19 👍 0 🔁 0 💬 0 📌 0

Wednesday session

18.02.2026 20:49 👍 0 🔁 0 💬 0 📌 0
Preview
The Web Is Agreement The Web Is Agreement * Download the audio. * Download the slides. * Watch the video. Web standards don’t exist. At least, they don’t physically exist. They are intangible. They’re in good company. Feelings are intangible, but real. Hope. Despair. Ideas are intangible: liberty, justice, socialism, capitalism. The economy. Currency. All intangible. I’m sure we’ve all had those “college thoughts”: > Money isn’t real, man! They’re just bits of metal and pieces of paper ! Wake up, sheeple! Nations are intangible. Geographically, France is a tangible, physical place. But France, the Republic, is an idea. Geographically, North America is a real, tangible, physical land mass. But ideas like “Canada” and “The United States” only exist in our minds. Faith—the feeling—is intangible. God—the idea—is intangible. Art—the concept—is intangible. A piece of art is an insantiation of the intangible concept of what art is. Incidentally, I quite like Brian Eno’s working definition of what art is. Art is anything we don’t _have to_ do. We don’t _have to_ make paintings, or sculptures, or films, or music. We have to clothe ourselves for practical reasons, but we don’t _have to_ make clothes beautiful. We have to prepare food to eat it, but don’t _have to_ make it a joyous event. By this definition, sports are also art. We don’t _have to_ play football. Sports are also intangible. A game of football is an instantiation of the intangible idea of what football is. Football, chess, rugby, quiditch and rollerball are equally (in)tangible. But football, chess and rugby have more consensus. (Christianity, Islam, Judaism, and The Force are equally intangible, but Christianity, Islam, and Judaism have a bit more consensus than The Force). HTML is intangible. A web page is an instantiation of the intangible idea of what HTML is. But we can document our shared consensus. A rule book for football is like a web standard specification. A documentation of consensus. By the way, economics, religions, sports and laws are all examples of intangibles that can’t be _proven_ , because they all rely on their own internal logic—there is no outside data that can prove football or Hinduism or capitalism to be “true”. That’s very different to ideas like gravity, evolution, relativity, or germ theory—they are all intangible but provable. They are discovered, rather than created. They are part of **objective reality**. **Consensus reality** is the collection of intangibles that we collectively agree to be true: economy, religion, law, web standards. We treat consensus reality much the same as we treat objective reality: in our minds, football, capitalism, and Christianity are just as real as buildings, trees, and stars. Sometimes consensus reality and objective reality get into fights. Some people have tried to make a consensus reality around the accuracy of astrology or the efficacy of homeopathy, or ideas like the Earth being flat, 9-11 being an inside job, the moon landings being faked, the holocaust never having happened, or vaccines causing autism. These people are unfazed by objective reality, which disproves each one of these ideas. For a long time, the consensus reality was that the sun revolved around the Earth. Copernicus and Galileo demonstrated that the objective reality was that the Earth (and all the other planets in our solar system) revolve around the sun. After the dust settled on that particular punch-up, we switched up our consensus reality. We changed the story. That’s another way of thinking about consensus reality: our currencies, our religions, our sports and our laws are stories that we collectively choose to believe. Web standards are a collection of intangibles that we collectively agree to be true. They’re our stories. They’re our collective consensus reality. They are what web browsers agree to implement, and what we agree to use. The web is agreement. For human beings to collaborate together, they need a shared **purpose**. They must have a shared consensus reality—a shared story. Once a group of people share a purpose, they can work together to establish **principles**. Design principles are points of agreement. There are design principles underlying every human endeavour. Sometimes they are tacit. Sometimes they are written down. **Patterns** emerge from principles. Here’s an example of a human endeavour: the creation of a nation state, like the United States of America. 1. The purpose is agreed in the declaration of independence. 2. The principles are documented in the constitution. 3. The patterns emerge in the form of laws. HTML elements, CSS features, and JavaScript APIs are all patterns (that we agree upon). Those patterns are informed by design principles. I’ve been collecting design principles of varying quality at principles.adactio.com. Here’s one of the design principles behind HTML5. It’s my personal favourite—the priority of constituencies: > In case of conflict, consider users over authors over implementors over specifiers over theoretical purity. “In case of conflict”—that’s exactly what a good design principle does! It establishes the boundaries of agreement. If you disagree with the design principles of a project, there probably isn’t much point contributing to that project. Also, it’s reversible. You could imagine a different project that favoured theoretical purity above all else. In fact, that’s pretty much what XHTML 2 was all about. XHTML 1 was simply HTML reformulated with the _syntax_ of XML: lowercase tags, lowercase attributes, always quoting attribute values. Remember HTML doesn’t care whether tags and attributes are uppercase or lowercase, or whether you put quotes around your attribute values. You can even leave out some closing tags. So XHTML 1 was actually kind of a nice bit of agreement: professional web developers agreed on using lowercase tags and attributes, and we agreed to quote our attributes. Browsers didn’t care one way or the other. But XHTML 2 was going to take the error-handling model of XML and apply it to HTML. This is the error handling model of XML: if the parser encounters a single error, don’t render the document. Of course nobody agreed to this. Browsers didn’t agree to implement XHTML 2. Developers didn’t agree to use it. It ceased to exist. It turns out that _creating_ a format is relatively straightforward. But how do you turn something into a standard? The really hard part is getting agreement. Sturgeon’s Law states: > 90% of everything is crap. Coincidentally, 90% is also the percentage of the world’s crap that gets transported by ocean. Your clothes, your food, your furniture, your electronics …chances are that at some point they were transported within an intermodal container. These shipping containers are probably the most visible—and certainly one of the most important—standards in the physical world. Before the use of intermodal containers, loading and unloading cargo from ships was a long, laborious, and dangerous task. Along came Malcom McLean who realised that the whole process could be made an order of magnitude more efficient if the cargo were stored in containers that could be moved from ship to truck to train. But he wasn’t the only one. The movement towards containerisation was already happening independently around the world. But everyone was using different sized containers with different kinds of fittings. If this continued, the result would be a tower of Babel instead of smoothly running global logistics. Malcolm McLean and his engineer Keith Tantlinger designed two crate sizes—20ft and 40ft—that would work for ships, trucks, and trains. Their design also incorporated an ingenious twistlock mechanism to secure containers together. But the extra step that would ensure that their design would win out was this: Tantlinger convinced McLean to give up the patent rights. This wasn’t done out of any hippy-dippy ideology. These were hard-nosed businessmen. But they understood that a rising tide raises all boats, and they wanted all boats to be carrying the same kind of containers. Without the threat of a patent lurking beneath the surface, ready to torpedo the potential benefits, the intermodal container went on to change the world economy. (The world economy is very large and intangible.) The World Wide Web also ended up changing the world economy, and much more besides. And like the intermodal container, the World Wide Web is patent-free. Again, this was a pragmatic choice to help foster adoption. When Tim Berners-Lee and his colleague Robert Cailleau were trying to get people to use their World Wide Web project they faced some stiff competition. Lots of people were already using Gopher. Anyone remember Gopher? The seemingly unstoppable growth of the Gopher protocol was somewhat hobbled in the early ’90s when the University of Minnesota announced that it was going to start charging fees for using it. This was a cautionary lesson for Berners-Lee and Cailleau. They wanted to make sure that CERN didn’t make the same mistake. On April 30th, 1993, the code for the World Wide Project was made freely available. This is for everyone. If you’re trying to get people to adopt a standard or use a new hypertext system, the biggest obstacle you’re going to face is inertia. As the brilliant computer scientist Grace Hopper used to say: > The most dangerous phrase in the English language is “We’ve always done it this way.” Rear Admiral Grace Hopper waged war on business as usual. She was well aware how abritrary business as usual is. Business as usual is simply the current state of our consensus reality. She said: > Humans are allergic to change. > > I try to fight that. > > That’s why I have a clock on my wall that runs counter‐clockwise. Our clocks are a perfect example of a ubiquitous but arbitrary convention. Why should clocks run clockwise rather than counter-clockwise? One neat explanation is that clocks are mimicing the movement of a shadow across the face of a sundial …in the Northern hemisphere. Had clocks been invented in the Southern hemisphere, they would indeed run counter-clockwise. But on the clock face itself, why do we carve up time into 24 hours? Why are there 60 minutes in an hour? Why are there are 60 seconds in a minute? It probably all goes back to Babylonian accountants. Early cuneiform tablets show that they used a sexagecimal system for counting—that’s because 60 is the lowest number that can be divided evenly by 6, 5, 4, 3, 2, and 1. But we don’t count in base 60; we count in base 10. That in itself is arbitrary—we just happen to have a total of ten digits on our hands. So if the sexagesimal system of telling time is an accident of accounting, and base ten is more widespread, why don’t we switch to a decimal timekeeping system? It has been tried. The French revolution introduced not just a new decimal calendar—much neater than our base 12 calendar—but also decimal time. Each day had ten hours. Each hour had 100 minutes. Each minute had 100 seconds. So much better! It didn’t take. Humans are allergic to change. Sexagesimal time may be arbitrary and messy but …we’ve always done it this way. Incidentally, this is also why I’m not holding my breath in anticipation of the USA ever switching to the metric system. Instead of trying to completely change people’s behaviour, you’re likely to have more success by incrementally and subtly altering what people are used to. That was certainly the case with the World Wide Web. The Hypertext Transfer Protocol sits on top of the existing TCP/IP stack. The key building block of the web is the URL. But instead of creating an entirely new addressing scheme, the web uses the existing Domain Name System. Then there’s the lingua franca of the World Wide Web. These elements probably look familiar to you: `<body>` `<title>` `<p>` `<h1>` `<h2>` `<h3>` `<ol>` `<ul>` `<li>` `<dl>` `<dt>` `<dd>` You recognise this language, right? That’s right—it’s SGML. Standard Generalised Markup Language. Specifically, it’s CERN SGML—a flavour of SGML that was already popular at CERN when Tim Berners-Lee was working on the World Wide Project. He used this vocabulary as the basis for the HyperText Markup Language. Because this vocabulary was already familiar to people at CERN, convincing them to use HTML wasn’t too much of a hard sell. They could take an existing SGML document, change the file extension to `.htm` and it would work in one of those new fangled web browsers. In fact, HTML worked better than expected. The initial idea was that HTML pages would be little more than indices that pointed to other files containing the real meat and potatoes of content—spreadsheets, word processing documents, whatever. But to everyone’s surprise, people started writing and publishing content in HTML. Was HTML the best format? Far from it. But it was just good enough and easy enough to get the job done. It has since changed, but that change has happened according to another design principle: > Evolution, not revolution From its humble beginnings with the handful of elements borrowed from CERN SGML, HTML has grown to encompass an additional 100 elements over its lifespan. And yet, it’s still technically the same format! This is a classic example of the paradox called the Ship Of Theseus, also known as Trigger’s Broom. You can take an HTML document written over two decades ago, and open it in a browser today. Even more astonishing, you can take an HTML document written today and open it in a browser from two decades ago. That’s because the error-handling model of HTML has always been to simply ignore any tags it doesn’t recognise and render the content inside them. That pattern of behaviour is a direct result of the design principle: > Degrade Gracefully > > …document conformance requirements should be designed so that Web content can degrade gracefully in older or less capable user agents, even when making use of new elements, attributes, APIs and content models. Here’s a picture from 2006. That’s me in the cowboy hat—the picture was taken in Austin, Texas. This is an impromptu gathering of people involved in the microformats community. Microformats, like any other standards, are sets of agreements. In this case, they’re agreements on which class values to use to mark up some of the missing elements from HTML—people, places, and events. That’s pretty much it. And yes, they do have design principles—some very good ones—but that’s not why I’m showing this picture. Some of the people in this picture—Tantek Çelik, Ryan King, and Chris Messina—were involved in the creation of BarCamp, a series of grassroots geek gatherings. BarCamps sound like they shouldn’t work, but they do. The schedule for the event is arrived at collectively at the beginning of the gathering. It’s kind of amazing how the agreement emerges—rough consensus and running events. In the run-up to a BarCamp in 2007, Chris Messina posted this message to the fledgeling social networking site, twitter.com: > how do you feel about using # (pound) for groups. As in #barcamp [msg]? This was when tagging was all the rage. We were all about folksonomies back then. Chris proposed that we would call this a “hashtag”. I wasn’t a fan: > Thinking that hashtags disrupt the reading flow of natural language. Sorry @factoryjoe But it didn’t matter what I thought. People agreed to this convention, and after a while Twitter began turning the hashtagged words into links. In doing so, they were following another HTML design principle: > Pave the cowpaths It sounds like advice for agrarian architects, but its meaning is clarified: > When a practice is already widespread among authors, consider adopting it rather than forbidding it or inventing something new. Twitter had previously paved a cowpath when people started prefacing usernames with the @ symbol. That convention didn’t come from Twitter, but they didn’t try to stop it. They rolled with it, and turned any username prefaced with an @ symbol into a link. The @ symbol made sense because people were used to using it from email. The choice to use that symbol in email addresses was made by Ray Tomlinson. He needed a symbol to separate the person and the domain, looked down at his keyboard, saw the @ symbol, and thought “that’ll do.” Perhaps Chris followed a similar process when he proposed the symbol for the hashtag. It could have just as easily been called a “number tag” or “octothorpe tag” or “pound tag”. This symbol started life as a shortcut for “pound”, or more specifically “libra pondo”, meaning a pound in weight. Libra pondo was abbreviated to lb when written. That got turned into a ligature ℔ when written hastily. That shape was the common ancestor of two symbols we use today: £ and #. The eight-pointed symbol was (perhaps jokingly) renamed the octothorpe in the 1960s when it was added to telephone keypads. It’s still there on the digital keypad of your mobile phone. If you were to ask someone born in this millenium what that key is called, they would probably tell you it’s the hashtag key. And if they’re learning to read sheet music, I’ve heard tell that they refer to the sharp notes as hashtag notes. If this upsets you, you might be the kind of person who rages at the word “literally” being used to mean “figuratively” or supermarkets with aisles for “10 items or less” instead of “10 items or fewer”. Tough luck. The English language is agreement. That’s why English dictionaries exist not to _dictate_ usage of the language, but to _document_ usage. It’s much the same with web standards bodies. They don’t carve the standards into tablets of stone and then come down the mountain to distribute them amongst the browsers. No, it’s what the browsers implement that gets carved in stone. That’s why it’s so important that browsers are in agreement. In the bad old days of the browser wars of the late 90s, we saw what happened when browsers implemented their own proprietary features. Standards require interoperability. Interoperability requires agreement. So what we can learn from the history of standardisation? Well, there are some direct lessons from the HTML design principles. ### The priority of constituencies > Consider users over authors… Listen, I want developer convenience as much as the next developer. But never at the expense of user needs. I’ve often said that if I have the choice between making something my problem, and making it the user’s problem, I’ll make it _my_ problem every time. That’s the job. I worry that these days developer convenience is sometimes prized more highly than user needs. I think we could all use a priority of constituencies on every project we work on, and I would hope that we would prioritise users over authors. ### Degrade gracefully > Web content can degrade gracefully in older or less capable user agents… I know that I go on about progressive enhancement a lot. Sometimes I make it sound like a silver bullet. Well, it kinda is. I mean, you can’t just buy a bullet made of silver—you have to make it yourself. If you’re not used to crafting bullets from silver, it will take some getting used to. Again, if developer convenience is your priority, silver bullets are hard to justify. But if you’re prioritising users over authors, progressive enhancement is the logical methodology to use. ### Evolution, not revolution It’s a testament to the power and flexibility of the web that we don’t _have to_ build with progressive enhancement. We don’t _have to_ build with a separation of concerns like structure, presentation, and behaviour. We don’t _have to_ use what the browser gives us: buttons, dropdowns, hyperlinks. If we want to, we can make these things from scratch using JavaScript, `div`s and ARIA attributes. But why do that? Is it because those native buttons and dropdowns might be inconsistent from browser to browser. Consistency is not the _purpose_ of the world wide web. _Universality_ is the key principle underlying the web. Our patterns should reflect the intent of the medium. Use what the browser gives you—build on top of those agreements. Because that’s the bigger lesson to be learned from the history of web standards, clocks, containers, and hashtags. Our world is made up of incremental improvements to what has come before. And that’s how we will push forward to a better tomorrow: By building on top of what we already have instead of trying to create something entirely from scratch. And by working together to get agreement instead of going it alone. The future can be a frightening prospect, and I often get people asking me for advice on how they should prepare for the web’s future. Usually they’re thinking about which programming language or framework or library they should be investing their time in. But these specific patterns matter much less than the broader principles of working together, collaborating and coming to agreement. It’s kind of insulting that we refer to these as “soft skills”—they couldn’t be more important. Working on the web, it’s easy to get downhearted by the seemingly ephemeral nature of what we build. None of it is “real”; none of it is tangible. And yet, looking at the history of civilisation, it’s the intangibles that survive: ideas, philosophies, culture and concepts. The future can be frightening because it is intangible and unknown. But like all the intangible pieces of our consensus reality, the future is something we construct …through agreement. Now let’s _agree_ to go forward _together_ to build the future web!

Looking forward to going to State Of The Browser in ten days.

I spoke at it eight years ago and I still like what I said then:

https://adactio.com/articles/14321

18.02.2026 16:34 👍 0 🔁 0 💬 0 📌 0
Counting down to Web Day Out Not long now ’till Web Day Out — just three weeks! It’s also not that long until the start of a new financial year so if you’ve got training budget that needs to be used _this_ year, send your team to Web Day Out. Not only is it excellent value for money, it’s also going to have an incredibly high density of knowledge bombs per talk. CSS! Progressive web apps! Web typography! Browser support! And much more. If you like the sound of Web Day Out, you’ll also like State Of The Browser, which is just ten days away. In-person tickets for that event are now sold out, but online streaming tickets are still available. Better yet, if you buy a ticket to Web Day Out, you automatically get a free online streaming ticket for State Of The Browser! So get your ticket in the next ten days, enjoy State Of The Browser from the comfort of your own home, and then enjoy a trip to Brighton for Web Day Out on Thursday, 12 March. See you there!
18.02.2026 15:35 👍 0 🔁 0 💬 0 📌 0
Magic I don’t like magic. I’m not talking about acts of prestidigitation and illusion. I mean the kind of magic that’s used to market technologies. It’s magic. It just works. Don’t think about it. I’ve written about seamless and seamful design before. Seamlessness is often touted as the ultimate goal of UX—“don’t make me think!”—but it comes with a price. That price is the reduction of agency. When it comes to front-end development, my distrust of magic tips over into being a complete control freak. I don’t like using code that I haven’t written and understood myself. Sometimes its unavoidable. I use two JavaScript libraries on The Session. One for displaying interactive maps and another for generating sheet music. As dependencies go, they’re very good but I still don’t like the feeling of being dependant on anything I don’t fully understand. I can’t stomach the idea of using npm to install client-side JavaScript (which then installs more JavaScript, which in turn is dependant on even more JavaScript). It gives me the heebie-jeebies. I’m kind of astonished that most front-end developers have normalised doing daily trust falls with their codebases. While I’m mistrustful of libraries, I’m completely allergic to frameworks. Often I don’t distinguish between libraries and frameworks but the distinction matters here. Libraries are bits of other people’s code that I call from my code. Frameworks are other people’s code that call bits of my code. Think of React. In order to use it, you basically have to adopt its idioms, its approach, its syntax. It’s a deeper level of dependency than just dropping in a regular piece of JavaScript. I’ve always avoided client-side React because of its direct harm to end users (over-engineered bloated sites that take way longer to load than they need to). But the truth is that I also really dislike the extra layer of abstraction it puts between me and the browser. Now, whenever there’s any talk about abstractions someone inevitably points out that, when it comes to computers, there’s always _some_ layer of abstraction. If you’re not writing in binary, you don’t get to complain about an extra layer of abstraction making you uncomfortable. I get that. But I still draw a line. When it comes to front-end development, that line is for me to stay as close as I can to raw HTML, CSS, and JavaScript. After all, that’s what users are going to get in their browsers. My control freakery is not typical. It’s also not a very commercial or pragmatic attitude. Over the years, I’ve stopped doing front-end development for client projects at work. Partly that’s because I’m pretty slow; it makes more sense to give the work to a better, faster developer. But it’s also because of my aversion to React. Projects came in where usage of React was a foregone conclusion. I wouldn’t work on those projects. I mention this to point out that you probably shouldn’t adopt my inflexible mistrustful attitude if you want a career in front-end development. Fortunately for me, front-end development still exists outside of client work. I get to have fun with my own website and with The Session. Heck, they even let me build the occasional hand-crafted website for a Clearleft event. I get to do all that the long, hard stupid way. Meanwhile in the real world, the abstractions are piling up. Developers can now use large language models to generate code. Sometimes the code is good. Sometimes its not. You should probably check it before using it. But some developers just YOLO it straight to production. That gives me the heebie-jeebies, but then again, so did npm. Is it really all that different? With npm you dialled up other people’s code directly. With large language models, they first slurp up everyone’s code (like, the whole World Wide Web), run a computationally expensive process of tokenisation, and then give you the bit you need when you need it. In a way, large language model coding tools are like a turbo-charged npm with even more layers of abstraction. It’s not for me but I absolutely understand why it can work in a pragmatic commercial environment. Like Alice said: > Knitting is the future of coding. Nobody knits because they want a quick or cheap jumper, they knit because they love the craft. This is the future of writing code by hand. You will do it because you find it satisfying but it will be neither the cheapest or quickest way to write software. But as Dave points out: > And so now we have these “magic words” in our codebases. Spells, essentially. Spells that work sometimes. Spells that we cast with no practical way to measure their effectiveness. They are prayers as much as they are instructions. I shudder! But again, this too is nothing new. We’ve all seen those codebases that contain mysterious arcane parts that nobody dares touch. _cough_ Webpack _cough_. The issue isn’t with the code itself, but with the _understanding_ of the code. If the understanding of the code was in one developer’s head, and that person has since left, the code is dangerous and best left untouched. This, as you can imagine, is a maintenance nightmare. That’s where I’ve seen the real cost of abstractions. Abstractions often really do speed up _production_ , but you pay the price in maintenance later on. If you want to understand the codebase, you must first understand the abstractions used in the codebase. That’s a lot to document, and let’s face it, documentation is the first casuality of almost every project. So perhaps my aversion to abstraction in general—and large language models in particular—is because I tend to work on long-term projects. This website and The Session have lifespans measured in decades. For these kinds of projects, maintenance is a top priority. Large language model coding tools truly are magic. I don’t like magic.
17.02.2026 10:06 👍 1 🔁 0 💬 0 📌 0

Sunday session

15.02.2026 18:45 👍 0 🔁 0 💬 0 📌 0

> Knitting is the future of coding. Nobody knits because they want a quick or cheap jumper, they knit because they love the craft. This is the future of writing code by hand.

— Alice Bartlett

15.02.2026 17:15 👍 0 🔁 0 💬 0 📌 0

Reading Will There Ever Be Another You by Patricia Lockwood.

12.02.2026 15:43 👍 0 🔁 0 💬 0 📌 0
The Morrigan by Kim Curran Every culture has its myths and legends. Greece has its gods and warriors. England has its stories of Arthur. Ireland has the Tuatha Dé Danann, The Ulster Cycle, and more. But while the Arthurian legends and the Greek myths have been retold many times, the stories of ancient Ireland have remained largely untouched. Kim Curran’s book The Morrigan takes on this challenge. The blurb for the book compares it Madeline Miller’s Circe, which is a bold comparison. The writing in The Morrigan isn’t in the same league as Circe, but then again, very little is. Structurally, the comparison makes complete sense. Circe starts with the titular nymph in the world of the gods of Olympus before moving on to more mortal affairs, coming to a head with the events of The Odyssey, when Odysseus’s story dominates. The Morrigan starts with the titular goddess in the world of the gods of the Túatha Dé before moving on to more mortal affairs, coming to a head with the events of The Táin, when Cú Chulainn’s story dominates. I took me a little while to adjust to the tone, but once I did, I thoroughly enjoyed this retelling. It manages to simultaneously capture the bloody, over-the-top feeling of The Táin while also having a distinctly modern twist. By the last third, I was completely engrossed. After finishing Circe I went on a spree of reading many, many modern retellings of Greek myths. Now that I’ve finished The Morrigan I want to do the same for the Irish legends. But I can’t. Apart from re-reading a translation of The Táin, there’s not much else out there for me. Kim Curran does have another book that’s just been released; Brigid (the goddess? the saint? both?). If it’s anything like The Morrigan, it’s going to be a must-read. I hope these books are the first of many.
12.02.2026 15:39 👍 0 🔁 0 💬 0 📌 0
NetNewsWire Lite If you’re using OS X on a Mac, you should check out this great new application from Ranchero. NetNewsWire Lite is an RSS aggregator for the desktop. It has a very nice interface and allows you to subscribe to, and unsubscribe from, RSS feeds easily. It’s stuff like this that gets me all excited about the possibilites of XML/RSS. Incidentally, if you do install it and you’d like to get the latest headlines from adactio, here’s my RSS feed.

I’ve been using (and enjoying) NetNewsWire for quite a while now…

https://adactio.com/journal/350

12.02.2026 09:40 👍 0 🔁 0 💬 0 📌 0
Concertina I watched a good film last night. Tornado from the same writer and director of the also-excellent Slow West. Tornado is a Scottish Samurai Western set in the 1790s. Although it’s not likely that many Samurai would’ve been in Scotland during the sakoku period, I was willingly able to suspend my disbelief …until something quite minor happened on screen. One of the characters is seen playing a concertina. “Hang on”, I thought, “1790s? That’s not right!” And indeed, once the film was over I reached for my laptop and confirmed that the concertina is very much a 19th century invention. Look, it’s not that I know when most musical instruments were invented, but I happened to know about the concertina’s origin because of a different technology. See, the concertina was invented by one Charles Wheatsone. He invented quite a few things. He, along with William Cooke, more or less created the electric telegraph, around the same time as Samuel Morse. I only know this because of the excellent book by Tom Standage called The Victorian Internet: > The remarkable story of the telegraph and the nineteenth century’s online pioneers. Prompted by that book, I found out more about Wheatstone, including the fact that he invented the concertina. So that’s why I found myself slightly taken out of the action when watching that film last night. In the 1790s, nobody was playing the concertina in Scotland or anywhere else. Today, though, the concertina is thriving, especially in Ireland. It’s particularly popular in County Clare. Though, as I’m writing this, I’m listening to the playing of a Kerryman, Cormac Begley. I’ll be seeing him play tonight in the Brighton Dome where he’ll be providing the music for the superb Teaċ Damhsa production, MÁM. This’ll be my second time experiencing it. _Táim ar bís!_
10.02.2026 16:16 👍 0 🔁 0 💬 0 📌 0

Thursday session

05.02.2026 20:39 👍 0 🔁 0 💬 0 📌 0

Wednesday session

04.02.2026 20:25 👍 0 🔁 0 💬 0 📌 0

Tuesday session

03.02.2026 20:39 👍 0 🔁 0 💬 0 📌 0

Carlingford mussels and oysters

02.02.2026 12:46 👍 0 🔁 0 💬 0 📌 0

Carlingford

01.02.2026 12:30 👍 0 🔁 0 💬 0 📌 0

Going to Carlingford. brb

30.01.2026 10:00 👍 0 🔁 0 💬 0 📌 0