The Blogroll

Chris’ Corner: There is a Turtle at the Bottom

If you were in charge of the curriculum at a college teaching web development, would you ensure the curriculum was regularly updated with bleeding edge technology? Or would you establish a slower moving curriculum with tried and true technologies? That’s tough. You can’t just flip a coin. It may be impractical to re-invent the curriculum […]

Train coding

When I went up to London for the State of the Browser conference last month, I shared the train journey with Remy.

I always like getting together with Remy. We usually end up discussing sci-fi books we’re reading, commiserating with one another about conference-organising, discussing the minutiae of browser APIs, or talking about the big-picture vision of the World Wide Web.

On this train ride we ended up talking about the march of time and how death comes for us all …and our websites.

Take The Session, for example. It’s been running for two and a half decades in one form or another. I plan to keep it running for many more decades to come. But I’m the weak link in that plan.

If I get hit by a bus tomorrow, The Session will keep running. The hosting is paid up for a while. The domain name is registered for as long as possible. But inevitably things will need to be updated. Even if no new features get added to the site, someone’s got to install updates to keep the underlying software safe and secure.

Remy and I discussed the long-term prospects for widening out the admin work to more people. But we also discussed smaller steps I could take in the meantime.

Like, there’s the actual content of the website. Now, I currently share exports from the database every week in JSON, CSV, and SQLite. That’s good. But you need to be tech nerd to do anything useful with that data.

The more I talked about it with Remy, the more I realised that HTML would be the most useful format for the most people.

There’s a cute acronym in the world of digital preservation: LOCKSS. Lots Of Copies Keep Stuff Safe. If there were multiple copies of The Session’s content out there in the world, then I’d have a nice little insurance policy against some future catastrophe befalling the live site.

With the seed of the idea planted in my head, I waited until I had some time to dive in and see if this was doable.

Fortunately I had plenty of opportunity to do just that on some other train rides. When I was in Spain and France recently, I spent hours and hours on trains. For some reason, I find train journeys very conducive to coding, especially if you don’t need an internet connection.

By the time I was back home, the code was done. Here’s the result:

The Session archive: a static copy of the content on thesession.org.

If you want to grab a copy for yourself, go ahead and download this .zip file. Be warned that it’s quite large! The .zip file is over two gigabytes in size and the unzipped collection of web pages is almost ten gigabytes. I plan to update the content every week or so.

I’ve put a copy up on Netlify and I’m serving it from the subdomain archive.thesession.org if you want to check out the results without downloading the whole thing.

Because this is a collection of static files, there’s no search. But you can use your browser’s “Find in Page” feature to search within the (very long) index pages of each section of the site.

You don’t need to a web server to click around between the pages: they should all work straight from your file system. Double-clicking any HTML file should give a starting point.

I wanted to reduce the dependencies on each page to as close to zero as I could. All the CSS is embedded in the the page. Likewise with most of the JavaScript (you’ll still need an internet connection to get audio playback and dynamic maps). This keeps the individual pages nice and self-contained. That means they can be shared around (as an email attachment, for example).

I’ve shared this project with the community on The Session and people are into it. If nothing else, it could be handy to have an offline copy of the site’s content on your hard drive for those situations when you can’t access the site itself.

Travels in Europe

One of the perks of speaking at conferences is that I get to travel to new and interesting places. I’d say that most of my travel over the past couple of decades was thanks to conferences. Recently though, I’ve been going places for non-work related reasons.

A couple of weeks ago I was in Spain, making my way to the beautiful medieval town of Cáceres for a traditional Irish music festival there. This was the second year that Jessica have been.

It’s kind of perfect. Not only is it a beautiful location—the stand-in for King’s Landing in House Of The Dragon—but there are non-stop sessions late into night, often outdoors. And of course the food is great.

A flute player and a fiddle player have their backs to us; between them we can see a woman playing fiddle on the other side of the table. A group of musicians playing bodhrán, fiddle, concertina and flute playing at a table outside a bar. A hand holding a fiddle in front of a young woman playing fiddle and another woman playing tin whistle. Loads of musicians playing around a table in a medieval courtyard.

It’s not easy to get to though. Last year we flew into Madrid and then took the train to Cáceres the next day. This year we did it slightly differently and flew into Seville instead. Then we took the four-hour train journey the next day. After the festival, we did it all in reverse.

That meant we had two evenings in Seville to sample its many tapas. On our last night in Seville, we had local guides. Blogger Dirk Hesse and his parter took us to all the best places. Dirk had seen that I was going to be in town and very kindly got in touch with an offer to meet up. I’m very glad we took him up on the offer!

Going to Spain in mid September felt like getting a last blast of Summer sun before returning to Autumn in England. The only downside was that the trip involved flying. But we’ve been on one more journey since then and that was done the civilised way, by train.

Jessica went to a translator’s conference in Strasbourg. I tagged along. We got the train from Brighton straight to Saint Pancras, where we got the Eurostar to Paris. From there it was a super fast connection straight to Strasbourg.

While Jessica was at her event all day, I was swanning around the beautiful streets, sampling the local wine and taking plenty of time to admire the details of Strasbourg’s awesome cathedral.

Looking up at the intricately detailed carvings on the main door of a cathedral. A cathedral door surrounded by intricate carvings of statues. Looking down the aisle of a cathedral at a magnificent rose window flanked by towering columns. An astronomical clock in a cathedral with vertical layers of circular mechanisms piled up in a tower.

Vibe Check №35

School is back in session, sports are in full swing, we’re tossed and turned by the weekly routine. This past month has been a season of fixing and repair and I’m thankful everything went well and we’re (hopefully) through the hard parts.

Fixing electrical problems

Ramping up to Spooky Month, the lights in our house were acting up. We’ve always had the occasional power problem; lights dimming, oven clocks resetting, but they were random and isolated. But around the beginning of September our lights would flicker for a solid minute every time the A/C kicked on. I was getting concerned about a potential fire – and no matter what anyone says, I was not concerned about a ghost, ghoul, specter, gremlin, dracula or otherwise – so I scheduled a bunch of maintenance calls:

  • An electrician - He didn’t see any ghosts red flags, but a bar in our main breaker panel was a little loose and possibly shaking when the A/C kicked on, causing the flicker. He also swapped out a non-LED dimmer for an LED dimmer and that seems to have fixed the extra-spooky dining room.
  • A dryer vent cleaner - Thanks to a D80 code on our LG dryer, I got suspicious that a clogged dryer vent was causing extra draw on electrical system. An older gentleman who liked to talk helped us clean out the 7ft pipe that shoots hot air and lint out of our roof. Works great now and no gremlins.
  • A refrigerator repair man - The stainless steel column in the middle of our side-by-side fridge was hot to the touch. Heat means energy. Heat is also not what you want in a fridge. Our fridge was over-working to keep itself cool but also freezing our groceries in the non-freezer side. A repair man pulled the fridge out and vacuumed the condenser unit like Luigi’s mansion. Easy enough and cool to the touch again.
  • A new garage door opener - The electrical surges in our house fried the motherboard in our garage door opener, so we replaced the unit and now it has Wi-Fi, an app, and other features I don’t need. It’s so much quieter now and does not sounds like a T-Rex or a howling wolf man anymore.

The flickering lights seem to have resolved. All ghosts busted.

Fixing a knee

It wouldn’t be a year at the Ruperts house without maxing out our deductible. This time my wife’s tennis habit got the best of her and she needed to undergo laparoscopic surgery to repair a torn meniscus. Surgery went fine, she was walking the same day and (even in bandages) was walking better than before. Surgeries are no fun, but necessary at times.

Fixing the dogs

The week after my wife’s surgery our two new adopted pups had their scheduled appointment from the adoption center to get spayed. A non-event except that two young dogs in two cones is an absolute ruckus. Days and days of bonking into doors and knees (some of which had surgery the week before).

After a week the cones were off and they’re back to themselves; eating rocks, wrassling, and digging holes in my yard and whatnot.

Fixes on the horizon

Thousands of dollars and a handful of stressful weeks later we’re on a path to recovery. Shaking off the stress of the last six weeks is yet another thing to fix. And the fixes don’t stop. The near future is going to be figuring out our next major family expense. We need to update both our cars, the kids want a camper again, and almost all the rooms in our house need updating. I also made an enormous mess decanting all our hoarding piles while trying to clean the garage and need new shelving and storage. Oops, will fix.

Stats

🧠 Learning

  • Went on a deep dive about Kowloon Walled City, the densest city in the world renown for its lawlessness, crime, and poverty. Kowloon has a deep history under Chinese and British occupation in Hong Kong. A Chinese settlement within Hong Kong territory, Kowloon self-regulated. While I knew about pre-modern China’s opiod crisis, I didn’t understand England’s role and learned how they were the drug dealers in this situation, trading opium from (occupied) India so they could get cheap tea and dinnerware. Fast-forward a few wars, opium dens and organized crime play a prominent role in the story of Kowloon but somehow the urban maze of dystopian unregulated buildings has a charming sense of community to it.

📖 Reading

Finished

  • The Adventure Zone Vol. 6 by McElroy, Pietsch, McElroy - My annual reading of tres horny boys. Its been long enough I forget moments from the original podcast so it’s fun to relive them in graphic novel form.
  • Awe by Dacher Keltner - I love the notion of “micromoments of awe” and consider myself an awe-seeker, but I don’t think I’m new age enough for this book.
  • The Anxious Generation by Jonathan Haidt - Phones and access to social media are harming our children. As a parent, I think there are valid concerns about device usage but I don’t think you can take this book as gospel. There’s a If Books Could Kill episode on Anxious Generation that makes for a good pairing.
  • Coda: False Dawns by Spurrier & Bergara - A continuation of the super good Coda post-apocalyptic fantasy universe. This time a preacher comes to town.
  • Where Good Ideas Come From by Stephen Johnson - A recommendation from a coworker and probably my favorite book of the past two months. Validates a lot of how my own brain works by making connections in adjacent ideas and technologies.

Started

📝 Blogging

📺 Media

Movies

  • Beetlejuice, Beetlejuice (2024) - A more surreal sequel. Perhaps too many plot lines crammed into one 90 minute film but a fun addition to the series with most of the original cast plus some welcome additions.

Podcasts

  • Scene on Radio S7: Capitalism - An in-depth examination on the origins of capitalism and its impact on democracy. A MUST LISTEN!
  • Living Planet - An environmentalist podcast that seeks to answer questions like: What’s better: coffee or tea? What’s better: dairy vs plant-based milk? I think about these dichotomies a lot so this feels like a podcast engineered in a lab for me.
  • The Adventure Zone Versus Dracula - Finished this actual play arc. Not my favorite but still fun.
  • The Adventure Zone: Abnimals - New season, I’m a bit lost.

🎙 Recording

Some great guests talking about everything from game dev, to AI, to WordPress, to bespoke apps for adding multimedia experiences to live music.

ShopTalk

🤖 Gunpla

⌨️ Open source

  • Been active in the Web Components Community Group for { reasons }

👾 Video games

  • Brawl Stars - Got roped into playing this with my son and his friends again. There was a Spongebob Squarepants even and that was fun but I’m maxed out and am not picking it up much anymore. It’s a repetitive game but they do good to make it seem different (daily map rotations and updates, etc).
  • Bought the new Zelda, haven’t played it but my son is almost done.

Design for Real Life: Online for Free AND On Sale for Money

Design for Real Life is now available, for free, in its entirety, at dfrlbook.com. And is also for sale!

I’m certainly not above government criticism nor do I think lying for political gain is a new trick. I am bummed that a website needs to exist called Hurricane Rumor Response from FEMA in order to combat a barrage of lies accusing them of everything stealing donations to literally preventing aid. Hey, I’m not on […]

October 10, 2024, 12:34 pm >>

Mismatch

This seems to be the attitude of many of my fellow nerds—designers and developers—when presented with tools based on large language models that produce dubious outputs based on the unethical harvesting of other people’s work and requiring staggering amounts of energy to run:

This is the future! I need to start using these tools now, even if they’re flawed, because otherwise I’ll be left behind. They’ll only get better. It’s inevitable.

Whereas this seems to be the attitude of those same designers and developers when faced with stable browser features that can be safely used today without frameworks or libraries:

I’m sceptical.

Chris Corner: View Transition Performance

I was mystified the other day about why some navigational View Transitions weren’t working for me. It was just a demo thing, so it wasn’t a big deal, not to mention this API is Chrome-only and just a progressive enhancement anyway. But I did learn why! The way I understand it now is that navigation […]

I stayed.

My insight into corporate legal disputes is as meaningful as my opinion on Quantum Mechanics. What I do know is that, when given the chance this week to leave my job with half a year’s salary paid in advance, I chose to stay at Automattic. Listen, I’m struggling with medical debts and financial obligations incurred […]

The post I stayed. appeared first on Zeldman on Web and Interaction Design.

Boost Client Trust and Team Performance with an Agency Playbook

Learn how creating an agency playbook can enhance your team's efficiency, improve client relationships, and drive continuous improvement.

Chris’ Corner: Web Combinements

A little bit ago David Darnes made a <code-pen> web component that you’d chuck HTML, CSS, and JS inside of and it would show the code and give you an “Open in CodePen” button. That’s enabled by our Prefill API. Miriam Suzanne has played with web components making an <embed-pen> that is like a replacement […]

Preventing automated sign-ups

The Session goes through periods of getting spammed with automated sign-ups. I’m not sure why. It’s not like they do anything with the accounts. They’re just created and then they sit there (until I delete them).

In the past I’ve dealt with them in an ad-hoc way. If the sign-ups were all coming from the same IP addresses, I could block them. If the sign-ups showed some pattern in the usernames or emails, I could use that to block them.

Recently though, there was a spate of sign-ups that didn’t have any patterns, all coming from different IP addresses.

I decided it was time to knuckle down and figure out a way to prevent automated sign-ups.

I knew what I didn’t want to do. I didn’t want to put any obstacles in the way of genuine sign-ups. There’d be no CAPTCHAs or other “prove you’re a human” shite. That’s the airport security model: inconvenience everyone to stop a tiny number of bad actors.

The first step I took was the bare minimum. I added two form fields—called “wheat” and “chaff”—that are randomly generated every time the sign-up form is loaded. There’s a connection between those two fields that I can check on the server.

Here’s how I’m generating the fields in PHP:

$saltstring = 'A string known only to me.';
$wheat = base64_encode(openssl_random_pseudo_bytes(16));
$chaff = password_hash($saltstring.$wheat, PASSWORD_BCRYPT);

See how the fields are generated from a combination of random bytes and a string of characters never revealed on the client? To keep it from goint stale, this string—the salt—includes something related to the current date.

Now when the form is submitted, I can check to see if the relationship holds true:

if (!password_verify($saltstring.$_POST['wheat'], $_POST['chaff'])) {
    // Spammer!
}

That’s just the first line of defence. After thinking about it for a while, I came to conclusion that it wasn’t enough to just generate some random form field values; I needed to generate random form field names.

Previously, the names for the form fields were easily-guessable: “username”, “password”, “email”. What I needed to do was generate unique form field names every time the sign-up page was loaded.

First of all, I create a one-time password:

$otp = base64_encode(openssl_random_pseudo_bytes(16));

Now I generate form field names by hashing that random value with known strings (“username”, “password”, “email”) together with a salt string known only to me.

$otp_hashed_for_username = md5($saltstring.'username'.$otp);
$otp_hashed_for_password = md5($saltstring.'password'.$otp);
$otp_hashed_for_email = md5($saltstring.'email'.$otp);

Those are all used for form field names on the client, like this:

<input type="text" name="<?php echo $otp_hashed_for_username; ?>">
<input type="password" name="<?php echo $otp_hashed_for_password; ?>">
<input type="email" name="<?php echo $otp_hashed_for_email; ?>">

(Remember, the name—or the ID—of the form field makes no difference to semantics or accessibility; the accessible name is derived from the associated label element.)

The one-time password also becomes a form field on the client:

<input type="hidden" name="otp" value="<?php echo $otp; ?>">

When the form is submitted, I use the value of that form field along with the salt string to recreate the field names:

$otp_hashed_for_username = md5($saltstring.'username'.$_POST['otp']);
$otp_hashed_for_password = md5($saltstring.'password'.$_POST['otp']);
$otp_hashed_for_email = md5($saltstring.'email'.$_POST['otp']);

If those form fields don’t exist, the sign-up is rejected.

As an added extra, I leave honeypot hidden forms named “username”, “password”, and “email”. If any of those fields are filled out, the sign-up is rejected.

I put that code live and the automated sign-ups stopped straight away.

It’s not entirely foolproof. It would be possible to create an automated sign-up system that grabs the names of the form fields from the sign-up form each time. But this puts enough friction in the way to make automated sign-ups a pain.

You can view source on the sign-up page to see what the form fields are like.

I used the same technique on the contact page to prevent automated spam there too.

The datalist element on iOS

The datalist element is good. It was a bit bumpy there for a while, but browser implementations have improved over time. Now it’s by far the simplest and most robust way to create an autocompleting combobox widget.

Hook up an input element with a datalist element using the list and id attributes and you’re done. You can even use a bit of Ajax to dynamically update the option elements inside the datalist in response to the user’s input. The browser takes care of all the interaction. If you try to roll your own combobox implementation, it’s almost certainly going to involve a lot of JavaScript and still probably won’t account for all use cases.

Safari on iOS—and therefore all browsers on iOS—didn’t support datalist for quite a while. But once it finally shipped, it worked really nicely. The options showed up just like automplete suggestions above the keyboard.

But that broke a while back.

The suggestions still appeared, but if you tapped on one of them, nothing happened. The input element didn’t get updated. You had to tap on a little downward arrow inside the input in order to see the list of options.

That was really frustrating for anybody on iOS using The Session. By far the most common task on the site is searching for a tune, something that’s greatly (progressively) enhanced with a dynamically-updating datalist.

I just updated to iOS 18 specifically to see if this bug has been fixed, and it has:

Fixed updating the input value when selecting an option from a datalist element.

Hallelujah!

But now there’s some additional behaviour that’s a little weird.

As well as showing the options in the autocomplete list above the keyboard, Safari on iOS—and therefore all browsers on iOS—also pops up the options as a list (as if you had tapped on that downward arrow). If the list is more than a few options long, it completely obscures the input element you’re typing into!

I’m not sure if this is a bug or if it’s the intended behaviour. It feels like a bug, but I don’t know if I should file something.

For now, I’ve updated the datalist elements on The Session to only ever hold three option elements in order to minimise the problem. Seeing as the autosuggest list above the keyboard only ever shows a maximum of three suggestions anyway, this feels like a reasonable compromise.

Chris’ Corner: It DOM Matter

“Regardless of where it is in the DOM.” That’s a phrase that goes through my mind in regard to a number of new CSS features and it’s so cool. I certainly spent most of my formative HTML & CSSin’ years being very careful about where things needed to go in the DOM specifically because CSS […]

Announcing BCD Watch

A new service to help you keep up to date with changes in browser support.

Media Diet

Masonry and good defaults

I’ve been writing about and teaching people CSS layout for a very long time. People sometimes call me an expert in CSS. I don’t know about that, but I’m confident in claiming expertise in teaching and writing about CSS. I’ve been doing this for a long time, about 25 years. Over that time I’ve learned […]

How they have failed us

It is as if the editorial department at The Washington Post woke up one morning asking, in headlines I will quote below, “What are we doing wrong?” I will start by trying to answer the question for them, The New York Times, CNN, and the rest of incumbent journalism: You have refused to recognize fascism […]

The post How they have failed us appeared first on BuzzMachine.

Last Minute

I went along to this year’s State Of The Browser conference on Saturday. It was great!

Technically I wasn’t just an attendee. I was on the substitution bench. Dave asked if I’d be able to jump in and give my talk on declarative design should any of the speakers have to drop out. “No problem!”, I said. If everything went according to plan, I wouldn’t have to do anything. And if someone did have to pull out, I’d be the hero that sweeps in to save the day. Win-win.

As it turned out, everything went smoothly. All the speakers delivered their talks impeccably and the vibes were good.

Dave very kindly gave shout-outs to lots of other web conferences. Quite a few of the organisers were in the audience too. That offered me a nice opportunity to catch up with some of them, swap notes, and commiserate on how tough it is running an event these days.

Believe me, it’s tough.

Something that I confirmed that other conference organisers are also experiencing is last-minute ticket sales. This is something that happened with UX London this year. For most of the year, ticket sales were trickling along. Then in the last few weeks before the event we sold more tickets than we had sold in the six months previously.

Don’t get me wrong: I’m very happy we sold those tickets. But it was a very stressful few months before that. It felt like playing poker, holding on in the belief that those ticket sales would materialise.

Lots of other conferences are experiencing this. Front Conference had to cancel this year’s event because of the lack of ticket sales in advance. I know for a fact that some upcoming events are feeling the same squeeze.

When I was in Ireland I had a chat with a friend of mine who works at the Everyman Theatre in Cork. They’re experiencing something similar. So maybe it’s not related to the tech industry specifically.

Anyway, all that is to say that I echo Sophie’s entreaty: you should go to conferences. And buy your tickets early.

Soon I’ll be gearing up to start curating the line up for next year’s UX London (I’m very proud of this year’s event and it’s going to be tough to top it). I hope I won’t have to deal with the stress of late ticket sales, but I’m mentally preparing for it.

Jeff Bridgforth: A front-end developer is the one that makes the design come alive. He or she is the person responsible for bringing the creative vision of the designer into being through code and can even push the design further by adding the interactivity or animation layer that the designer may not have even thought […]

September 16, 2024, 4:57 pm >>

Hibiclens

Every two-to-four years my body chemistry changes and my armpits start to reject my deodorant with an intense itch. All that aluminum has gunked up the works I guess. Usually cycling out deodorants works fine, but this time it didn’t work because my armpits were overpowering all the other deodorants.

I tried a tactical reset and took the “No deodorant challenge”, the legend –which I remember my hippie step-brother Nik telling me about thirty years ago– that if you stop using deodorant for two weeks the oils in your body naturally recalibrate and you stops smelling… but this urban legend very much did not work. I smelled horrible all the time.

I casually mentioned this issue to my dermatologist and he was quick to recommend this homely teal bottle of over-the-counter 1970s logotype, Hibiclens.

A teal blue bottle of medicinal looking antiseptic cleaner

I like to think the “hibi” part of Hibiclens stands for “hibiscus” because it’s a pink liquid (or foam) that you apply like soap and rinse off. It’s colored pink because it’s an anti-septic and hospitals like to color their liquids, but the reason it works –as my dermatologist explained– is that bacteria creates the odor in your armpits. That was news to me. My prior understanding was that puberty causes teenagers to grow green stink lines that shoot out from their bodies. Guess the science there has evolved.

I’m happy to report that Hibiclens works wonderfully and I’m pleased with the results. I don’t wear deodorant everyday anymore, my armpits aren’t irritated, and I only need to apply a squeeze of Hibiclens every three days or so (but even that timeline appears to be stretching out). I do sometimes wear deodorant when the stakes are high, but day-to-day working form home is au naturale. There’s a small satisfaction that the answer to my fragile-masculine deodorant FOR MEN problems is a pink liquid in a Tiffany blue teal bottle. Time will tell, however, if it really does solve my problems. I’ll follow up in two-to-four years to see if it still works.

Good forms

Brian LeRoux posted a few thoughts about forms and the idea of a “good form” resonated with me so I dogpiled some of my own thoughts and experiences on it. Here’s a compilation of those ideas. I’m sure this is incomplete and would love to see your list.

  • Good forms work without client JavaScript (Brian LeRoux)
  • Good forms always submit (Brian LeRoux)
  • Good forms remember values and display problems inline (Brian LeRoux)
  • Good login forms work with password managers (Mingo Hogan)
  • Good forms use a <form> tag
  • Good forms use appropriate input types
  • Good forms have clear labelled inputs and buttons
  • Good forms have focus states
  • Good forms have logical tab order
  • Good forms allow paste
  • Good form elements leverage the inputmode attribute
  • Good form elements leverage the autocomplete attribute
  • Good search forms wrap the <form> tag in a <search> element
  • Good forms can be reset with a <button type=reset>
  • Good forms participate in formData
  • Good forms don’t use placeholder as a label
  • Good forms work on phones
  • Good forms don’t popup and ask for personal information
  • Good forms only ask for what is necessary and aren’t too long
  • Good forms use HTTPS
  • Good forms use the proper HTTP verbs
  • Good forms validate on the client AND on the server
  • Good forms have been driven with a screen reader before going to production
  • Good forms clearly denote required attributes
  • Good forms warn about costly or destructive actions
  • Good forms make the baby Jesus smile
  • Good authenticated forms should have a server-generated nonce value
  • Good forms should do a pre-flight check for navigator.onLine before attempting a submit
  • Good forms start with accent-color for styling and only get more complex if necessary
  • Good forms see custom controls as a radioactive asset that must be removed at the earliest opportunity

Anyways. People should talk about forms more. Here’s some more resources on good form design.

Finding questions and answers about why I like books

I saw a tweet awhile back that sent my brain to a far off galaxy…

Of all the injustices happening in the world… you know who needs to be taken down a peg? The Book-a-Week People. Fuck those guys. With their books in their Zoom backgrounds. That bothers me. Fuck them.

I know the original post is part of some weird hustle culture subgenre, but it’s probably no surprise to folks reading that I like books and fit this targeted demographic. After pondering whether I’m “finding answers to questions or questions to answer” my answer is a resounding, “…I guess?”

A lot of why I read is about juxtaposition. I read business books to juxtapose my experience against the Platonic ideal of “good business”. I read about social justice to juxtapose my lived experience against others lived experience. I read science fiction to juxtapose the present against futures I haven’t imagined. I read non-fiction airport books because I like facts and social science garbage. I read books on topics I’m already an expert in to see if there’s information that further informs my perspective. I read to teleport to different places, minds, times, and rooms where it happened.

I read to escape. I read to find myself. I read because I like facts. I read because I like fiction. I read for entertainment. I read to fall asleep. I listen to books to help me finish mundane tasks like doing the dishes every night. And I listen to books because there’s a slight communistic thrill of getting them from the library.

There’s a widely accepted idea out there that “the best way to become a better writer is to become a better reader.” I think Stephen King said it, but I can’t find the quote. Either way, I want to become a better writer. Whether fact or fiction, I want the ability to not struggle when putting thoughts on the page. Oh to partake in this magical osmosis! The transitive impartation of skills! Let me flex the language encoding and decoding synapses in my 40-watt brain.

And sometimes reading is out of due diligence. Like… if you’re going to start a job as a manager… read a book on management? Or ten? You’re dealing with people’s lives and careers, seems like the least you could do. If you’re going to talk or blog on a topic and there’s a relevant book… read that before showing your ass? A thought backed by some literature seems better than regurgitating TikToks.

Books are strange objects. Chapters and chapters of coherent research and lived experiences assembled by people who wanted to put it all down in one place. Edited by actual editors who like editing. Designed— down to the weight of the paper, the typography, and the illustration on the cover— to make the experience of reading it enjoyable. Books are uncanny and impractical objects. A terribly inefficient way to encode information from one brain to another, but an excellent way to tell a story.

You can also just like books for no reason.

Anyways, books. Check ‘em out.

The West Just Burns Now

It really wasn’t that long ago when the Western U.S. wasn’t absolutely guaranteed to be on fire every summer and into the fall. Now, it’s just what happens. August and September? That’s “smoke season”. What should be absolutely beautiful months to enjoy the outdoors are now when it rains ash, the sky is a deep […]

9/13/01

“I’m reassuring myself that New York City is still here.”

The post 9/13/01 appeared first on Zeldman on Web and Interaction Design.

What’s become of The Times & Co.?

As often as I am disappointed in and critical of them lately, I will not cancel my subscriptions to The New York Times or The Washington Post. They should be so lucky, for I will stay on their cases. I also wish to support the good reporting that still comes from them. I’ve been thinking […]

The post What’s become of The Times & Co.? appeared first on BuzzMachine.

What price?

I’ve noticed a really strange justification from people when I ask them about their use of generative tools that use large language models (colloquially and inaccurately labelled as artificial intelligence).

I’ll point out that the training data requires the wholesale harvesting of creative works without compensation. I’ll also point out the ludicrously profligate energy use required not just for the training, but for the subsequent queries.

And here’s the thing: people will acknowledge those harms but they will justify their actions by saying “these things will get better!”

First of all, there’s no evidence to back that up.

If anything, as the well gets poisoned by their own outputs, large language models may well end up eating their own slop and getting their own version of mad cow disease. So this might be as good as they’re ever going to get.

And when it comes to energy usage, all the signals from NVIDIA, OpenAI, and others are that power usage is going to increase, not decrease.

But secondly, what the hell kind of logic is that?

It’s like saying “It’s okay for me to drive my gas-guzzling SUV now, because in the future I’ll be driving an electric vehicle.”

The logic is completely backwards! If large language models are going to improve their ethical shortcomings (which is debatable, but let’s be generous), then that’s all the more reason to avoid using the current crop of egregiously damaging tools.

You don’t get companies to change their behaviour by rewarding them for it. If you really want better behaviour from the purveyors of generative tools, you should be boycotting the current offerings.

I suspect that most people know full well that the “they’ll get better!” defence doesn’t hold water. But you can convince yourself of anything when everyone around is telling you that this is the future baby, and you’d better get on board or you’ll be left behind.

Baldur reminds us that this is how people talked about asbestos:

Every time you had an industry campaign against an asbestos ban, they used the same rhetoric. They focused on the potential benefits – cheaper spare parts for cars, cheaper water purification – and doing so implicitly assumed that deaths and destroyed lives, were a low price to pay.

This is the same strategy that’s being used by those who today talk about finding productive uses for generative models without even so much as gesturing towards mitigating or preventing the societal or environmental harms.

It reminds me of the classic Ursula Le Guin short story, The Ones Who Walk Away from Omelas that depicts:

…the utopian city of Omelas, whose prosperity depends on the perpetual misery of a single child.

Once citizens are old enough to know the truth, most, though initially shocked and disgusted, ultimately acquiesce to this one injustice that secures the happiness of the rest of the city.

It turns out that most people will blithely accept injustice and suffering not for a utopia, but just for some bland hallucinated slop.

Don’t get me wrong: I’m not saying large language models aren’t without their uses. I love seeing what Simon and Matt are doing when it comes to coding. And large language models can be great for transforming content from one format to another, like transcribing speech into text. But the balance sheet just doesn’t add up.

As Molly White put it: AI isn’t useless. But is it worth it?:

Even as someone who has used them and found them helpful, it’s remarkable to see the gap between what they can do and what their promoters promise they will someday be able to do. The benefits, though extant, seem to pale in comparison to the costs.

Chris’ Corner: Open Sniped

Recently Heikki Lotvonen cooked up a very cool idea: what if the colorization of code output on the web could be handled by the font itself. Syntax highlighting, as it were. So rather than accomplish this with a heaping pile of <span>s with classes to colorize the text, the font file knows how to apply […]

Broken Blossoms

“Raising loved children is the only consistent and lasting healing some will know.”

The post Broken Blossoms appeared first on Zeldman on Web and Interaction Design.

Manual ’till it hurts

I’ve been going buildless—or as Brad crudely puts it, raw-dogging websites on a few projects recently. Not just obviously simple things like Clearleft’s Browser Support page, but sites like:

They also have 0 dependencies.

Like Max says:

Funnily enough, many build tools advertise their superior “Developer Experience” (DX). For my money, there’s no better DX than shipping code straight to the browser and not having to worry about some cryptic node_modules error in between.

Making websites without a build step is a gift to your future self. When you open that project six months or a year or two years later, there’ll be no faffing about with npm updates, installs, or vulnerabilities.

Need to edit the CSS? You edit the CSS. Need to change the markup? You change the markup.

It’s remarkably freeing. It’s also very, very performant.

If you’re thinking that your next project couldn’t possibly be made without a build step, let me tell you about a phrase I first heard in the indie web community: “Manual ‘till it hurts”. It’s basically a two-step process:

  1. Start doing what you need to do by hand.
  2. When that becomes unworkable, introduce some kind of automation.

It’s remarkable how often you never reach step two.

I’m not saying premature optimisation is the root of all evil. I’m just saying it’s premature.

Start simple. Get more complex if and when you need to.

You might never need to.

The unprecedented grand coalition

As Nicolle Wallace exclaimed on her show Friday, Liz Cheney and Dick Cheney, Alexandria Ocasio-Cortez and Bernie Sanders have all gathered together around a cause. That cause is democracy and its standard bearer is Kamala Harris. This is a momentous time in the United States, unprecedented at least in this century and likely since long […]

The post The unprecedented grand coalition appeared first on BuzzMachine.

TowWhee

I love the product name. Ruby has just learned two-wheel bike riding and is loving it. But we live in a very hilly area. This little tow strap thing is very easy to pop on and off so I can tug her up hills when she needs it, then remove when she doesn’t (it’s kind […]

How to Download a YouTube Video or Channel

The ability to download media on the internet almost feels like a lost art. When I was in my teens, piracy of mp3s, movies, and just about everything else via torrents and apps like Kazaa, LimeWire, Napster, etc. was in full swing. These days sites use blob URLs and other means to prevent downloads. Luckily […]

The post How to Download a YouTube Video or Channel appeared first on David Walsh Blog.

The Dev Tools Performance Monitor Panel

Weeks ago I was looking in to a performance issue for our animated spinner component and stumbled across a tool in DevTools I hadn’t used before: The Performance Monitor Panel. In you open Dev Tools > More Tools > Performance Monitor you’ll see some helpful high-level charts and graphs of the realtime performance data of your UI.

The Figma.com homepage with the performance panel open to the side showing 120 style recalcs per second

The Performance Monitor collects performance data in realtime and puts it on a graph. It’s handy for detecting performance problems at a high-level. If your CPU, memory, DOM node count, or event listeners only go up while clicking around, you probably have a leak in your code. The part I was most interested in were style recalculations per second and layouts per second. Our spinner component was triggering style recalculations and layout calls at a rate of 120 per second. Yikes! That’s a lot of extra work on the CPU.

Next I turned on Dev Tools > More Tools > Rendering > Show Paint Flashes and I could immediately see the tactile feedback of green boxes thrashing around as the browser repainted the component hundreds of times per second. The green paint boxes confirmed that this UI work was happening on the main thread instead of the compositor thread. The Performance Monitor showed my CPU usage at 5-9% of my Mackbook Pro. Double Yikes.

The Performance Monitor panel pairs nicely with the top-level Performance panel. While the Performance Monitor panel is very high-level, the Performance panel is an in-depth debugging tool where you can inspect a snapshot of your app down to each function and render call.

A flame graph inside the Performance Panel in dev tools

Capturing a snapshot in the Performance panel confirmed what I was now seeing. I could see the “red line of death” of dropped frames where I locked the main thread. The remediation steps were pretty simple but I did need to strip down and recode how our animation worked.

  1. Avoid properties that trigger paint or layout
  2. Tamp down layout recalcs with contain
  3. Use overflow: hidden instead of CSS masks

It took a couple of prototypes to shop around a workable solution. The good news is our animation is off-loaded to the compositor instead of the main thread now. CPU use is now at 0.2% (down from 5-9%) and our recalcs and layouts are down to 0 but the animation still chugs along. Truth be told, a loading spinner is a pretty insignificant component and is only temporary, but reducing CPU usage by 10% here makes room for other JavaScript activities… like… y’know… fetching and parsing data.

Belfast, Brighton, Cork, Boston, Pittsburgh, Saint Augustine

I’ve been on a sabbatical from work for the past six weeks.

At Clearleft, you’re eligible for a sabbatical after five years. For some reason I haven’t taken one until now, 19 years into my tenure at the agency. I am an idiot.

My six-week sabbatical has been lovely, alternating between travel and homebodying.

Belfast

The first week was spent in Belfast at the excellent Belfast Trad Fest. There were workshops in the morning, sessions in the afternoon, and concerts in the evening. Non-stop music!

This year’s event was a little bit special for me. The festival runs an excellent bursary sponsorship programme for young people who otherwise wouldn’t be able to attend:

The bursary secures a place for a young musician to attend and experience a week-long intensive and immersive summertime learning course of traditional music, song and dance and can be transformative.

Back in April, I did a month-long funding drive on The Session:

Starting from today, and for the whole month of April, any donations made to The Session, which normally go towards covering the costs of running the site, will instead go towards sponsoring bursary places for this year’s Belfast Summer school.

I was really hoping to hit £1000, which would cover bursary sponsorship for eight students. In the end though, the members of The Session contributed a whopping £3000!

Needless to say, I was thrilled! The Trad Fest team were very happy too—they very kindly gave me a media pass for the duration of the event, which meant I could go to any of the concerts for free. I made full use of this.

That said, one of the absolute highlights of the week wasn’t a concert, but a session. Piper Mick O’Connor and fiddler Sean Smyth led a session out at the American Bar one evening that was absolutely sublime. There was a deep respect for the music combined with a lovely laidback vibe.

Brighton

There were no shortage of sessions once Jessica returned from Belfast to Brighton. In fact, when we got the train back from Gatwick we hopped in a cab straight to a session instead of going home first. Can’t stop, won’t stop.

The weather hadn’t been great in Belfast, which was fine because we were mostly indoors. But once we got back to Brighton we were treated to a week of glorious sunshine.

Needless to say, Jessica did plenty of swimming. I even went in the ocean myself on one of the hottest days.

I also went into the air. Andy took me up in a light aircraft for a jolly jaunt over the south of England. We flew from Goodwood over the New Forest, and around the Isle of Wight where we landed for lunch. Literally a flying visit.

I can attest that Andy is an excellent pilot. No bumpy landings.

Cork

Our next sojourn took us back to the island of Ireland, but this time we were visiting the Republic. We spent a week in the mightiest of all the Irish counties, Cork.

Our friends Dan and Sue came over from the States and a whole bunch of us went on a road trip down to west Cork, a beautiful part of the country that I shamefully hadn’t visited before. Sue did a magnificent job navigating the sometimes tiny roads in a rental car, despite Dan being a nervous Nellie in the passenger seat.

We had a lovely couple of days in Glengarriff, even though the weather wasn’t great. On the way back to Cork city, we just had to stop off in Baltimore—Dan and Sue live in the other Baltimore. I wasn’t prepared for the magnificent and rugged coastline (quite different to its Maryland counterpart).

Boston

We were back in Brighton for just one day before it was time for us to head to our next destination. We flew to Boston and spent a few days hanging around in Cambridge with our dear friends Ethan and Liz. It was a real treat to just pass the time with good people. It had been far too long.

I did manage to squeeze in an Irish music session in the legendary Druid pub. ’Twas a good night.

Pittsburgh

From Boston we went on to Pittsburgh for Frostapalooza. I’ve already told you all about how great that was:

It was joyous!

Saint Augustine

After all the excitement of Frostapalooza, Jessica and I went on to spend a week decompressing in Saint Augustine, Florida.

We went down to the beach every day. We went in the water most days. Sometimes the water was a bit too choppy for a proper swim, but it was still lovely and warm. And there was one day when the water was just perfectly calm.

When we weren’t on the beach, we were probably eating shrimp.

It was all very relaxing.

Brighton

I’ve spent the sixth and final week of my sabbatical back in Brighton. The weather has remained good so there’s been plenty of outdoor activities, including a kayaking trip down the river Medway in Kent. I may have done some involuntary wild swimming at one point.

I have very much enjoyed these past six weeks. Music. Travel. Friends. It’s all been quite lovely.

Me dressed in denim playing my red mandolin in a pub flanked by two women playing fiddle. A selfie of me in a cockpit with a headset on sitting next to Andy Budd who is flying, complete with aviator sunglasses. Me standing near a sign in the woods with a robin redbreast perched on it. Tiny figures in the distance at the bottom of a tapered tower on a cliff top. Checked in at Harvard Yard. Parkin the cah* in the Hahvahd Yahd (* butt) — with Jessica A man playing banjo and a woman playing bass ukulele on lawn furniture outdoors. A profile shot of me on stage with my mandolin singing with one arm extended. A woman stands holding her shoes on a sandy beach under a dramatic cloudy sky.

How Murdoch makes a meme

I’ve long said that Rupert Murdoch is the single most malign influence in English-speaking democracy. He executes his strategy in small ways that add up. Here is an example: how a trope is born across Murdoch’s worldwide empire. Here is the editorial board of #MurdochJournal with its paternalistic, patronizing, sexist, diminishing take on the Harris/Walz […]

The post How Murdoch makes a meme appeared first on BuzzMachine.

Chris’ Corner: Gold Star CSS Bloggers

CSS still gives me the warm fuzzies sometimes. We’ve gotten so many amazing CSS features the past few years, that each alone makes me happy. But when those features are combined, I’m often stunned and get thinking about how we’re only scratching the surface of what is to come. Take a new demo by Adam […]

Vibe Check №34

The temperatures soared over 100ºF and the yard is dead and everything smells roasted. But the ten day forecast shows a ten degree dip and that is cause for celebration. Another school year has started. My son has started middle school and my daughter is now in third grade. It’s shocking how fast life goes. And on the workfront, the pace is picking up now that everyone has come back from summer vacation.

A lot has transpired since the previous vibe check (vacations, new pets, rock shows). To start it off, my family escaped the heat and went to San Diego (as is the custom) for one good week and one awful week…

San Diego: The First Good Week

Left: a pink beach drink. Right a dark sunset over Mission Bay San Diego

We flew out to Phoenix to join up with my wife’s family and caravan out to San Diego. We had a family dinner the night before and got to see my one year old grandnephew for the first time in a long while. He’s a sweet kid but does not want his Granduncle Dave holding him yet.

The next day we loaded up the beach gear and drove to a resort in Mission Beach in San Diego for a four day stay. We had a great time with my wife’s family letting the cousins run loose while grown-ups played tennis, pickleball, and I played my annual round of golf with my male in-laws. After four days of big family time we scooted up to Encinitas to stay for two nights with our Austin friends whose summer rental had a guest house.

Encinitas was super charming. We stayed near Beacons Beach which is one of those cool beaches at the bottom of a cliffside. We beached pretty hard. My daughter and her oldest bestie pranced up and down the shoreline for hours and she even learned to surf. The contrast between Mission and Encinitas couldn’t be more stark. The trip could have ended there and would have been one of the best vacations in the books. But we weren’t done! We planned to extend the trip with a one-week rental in Mission Bay.

San Diego: The Second Awful Week

The minute we checked into our beachside rental the whole vibe shifted. From tranquil Encinitas to getting blasted with the sounds (and smells) of Mission Beach. Honking, motorcycles, bottles clanking, fighting, garbage trucks, neighbors blasting bad music, and smells drifting up from the alleyway. It felt like going from a yoga retreat to a frat house. Then it got worse. That night our daughter said she didn’t feel well and the next day my wife started going downhill.

A week of beach fun turned into spending thousands of dollars to be sick inside a beach-adjacent summer rental watching SpongeBob Squarepants on repeat. After three urgent care visits over two days the sick members of our party had the required antibiotics to start feeling better. The next day, we went home.

And –as if it couldn’t get any better– I got COVID on the plane ride back. Ughck.

We adopted two new pups

One black dog with one brown eye and one blue eye and a black and white dog with pointy ears and two blue eyes, both staring at the camera

  • Laneige (aka “Laney”) - A black lab mix with one brown eye and one blue eye. She’s an attention thief who is not shy about demanding pets.
  • Rosebud - A lab mix with expressive pointy ears and two blue eyes (some heeler in there?). She’s the more anxious of the two, but once befriended will roll over for belly rubs.

Our kids have been asking for a new dog for over a year. Every day this summer I’d step into the house and my daughter would spin a laptop around to show me the new dogs she found on the Austin Pets Alive! website. She even wrote a song to try to convince me to get a dog. 🥺 They were dead set on a pup named “Laneige” (named by the shelter after a Korean lip balm).

After dropping the kids off at grandma’s house for a long weekend, we set our plan into action: adopt a dog and surprise the kids. But our plans changed when the shelter brought out Laneige’s sister Rosebud (also named after a lip balm) to our meet and greet. Her pointy ears and blue eyes were too cute. We tend to play it more conservative when it comes to big life choices but we decided to go full stupid for once and surprise the kids with not one dog, but two dogs!

Names may change and we daily ask ourselves “Did we overdo it?” but generally we’re happy with the new additions.

Frostapalooza

Me playing bass guitar drowned in moody green and purple rock show lighting

Photo by Will Brower

A year ago Brad Frost called my wife and I to share a wild idea for his 40th birthday party: get all his musician friends from all over the world together on one stage for one night of rocking out. Over the course of the next year we picked songs, learned parts, recorded tracks, hoping –but never knowing– how it would all turn out when we assembled in Pittsburgh for one night of rock.

It. Was. Phenomenal.

Nothing could have prepared me for the blast from the five piece horn section. It sounded perfect. It felt big. Dozens of people on stage playing together for the first time, but you wouldn’t know it. Music –good music– filling the halls of an old church. I’m a foot away from a bass guitar amp but I can’t hear the bass because there’s so much music happening. In the crowd I see people listening to my wife sing –they’re singing along– and it takes me back to when I first heard her sing at a karaoke bar in Los Angeles when I fell in love with her.

Twenty or so web luminaries (most named below)

Photo from Brad Frost

Outside the main event, it felt good to put kindling on some friendships. I got to see Chris, which is always pleasant to see the one person I’m guaranteed to have an hour long conversation every week. Zach & Danh (my co-hosts from Aside Quest) flew up on the same flight. But I got to see and chat with new and old friends as well; Ian, Dan, Ben, Phil, Mike, Jina, Burton, Adekunle, Kevin, Brian, Scott, Josh, Veronika, Ryan, Joshua, Jeff & Jenn & Arlo, Jeremy & Jessica, Daniel & Jessi, Rebecca & Ryan, and countless more folks. Since the US web development conference scene has more or less imploded since the pandemic, this felt a bit like a family reunion with some of my favorite people from around the world.

In the end, Frostapalooza was a magical night celebrating the power of music and friendship. It feels a bit like a dream now and when I explain it to people my words fall short. An ephemeral joyous moment and I have no idea if I’ll do anything like that in my life again. That’s special. The biggest thanks to Brad, Melissa, and Ella who sacrificed a lot of time, money, and life-force to pull it off.

The stats, o the stats.

Okay, quantifiers. Calm down. Here’s your beefsteak of itemized inputs and outputs.

🧠 Learning

  • When I got sick I did a deep dive in playing with Obsidian and building a vault. I’m still on Notion (for now) but the jump is less intimidating. I like the indie/privacy angle of Obsidian a lot but from a UX perspective it feels “finicky” when mousing over content in a way that Notion doesn’t. The level of customization is also nicer in Obsidian, but also a potential endless rabbit hole for my distracted brain. Moving my “second brain” is not a task I want to take lightly.
  • Watching countless Obsidian videos exposed me to a new organization system: August Bradley’s “Pillars, Pipelines, and Vaults” (PPV) system. I’m not ready to ditch my Notion PARA setup, but the idea PPV introduces that I’m gravitating towards is that my brain is a system of “Inputs” (links, books, and notes vaults) and “Outputs” (blog posts, side projects, and task pipelines) and those exist across “Areas” (pillars) in my life. Inputs need organization (e.g. folders and/or tags) and outputs need a process (e.g. a kanban). I think Obsidian fits this paradigm better than Notion.

📖 Reading

Not my best summer of reading but I’m enjoying the slower pace.

Finished

  • Like, Comment, Subscribe by Mark Bergen - The history of YouTube. A great look into how this product which changed the world evolved (and also failed to evolve).
  • Read Write Own by Chris Dixon - On a recommendation I read a book about crypto. Shockingly, I didn’t disagree with much here… except that crypto is the solution to the problems outlined in the book. He spent chapters pitching ideas that crypto could solve (decentralized social networks, carrying over video game assets, etc) and those have since been debunked. There’s still no job that crypto does better than a database. Ultimately I think it’s a question of “Who benefits?” when it comes to this technology and I think the answer is: the people who already own a lot of it.
  • Humankind by Rutger Bregman - I’ve read this book before but it’s a pleasant little dose of positivity. Are we humans that trample each other while leaving a burning plane? Or are we humans that help each other get off the plane? The answer might surprise you.
  • Slow Productivity by Cal Newport - I liked this book better than the last but I think it suffers from the same problems all his books do… he’s shielded by academia and not that busy of a person. I laughed out loud when he used Jane Austen as an example of Slow Productivity (paraphrasing) “After her father sold the farm and the school and they moved to a beach town, she was able to slow down.” Like, yeah dude, I could slow down too if my dad retired and sold the literal farm.

In Progress

  • A Wizard of Earthsea by Ursula K. Le Guin
  • The Adventure Zone Vol. 6 by McElroy, Pietsch, McElroy
  • Awe by Dacher Keltner

📝 Blogging

Not my best summer of blogging. But the drafts folder is going wild. Trust me. Lol.

📺 Media

Not my best summer of media consumption. But I’m back on Dropout which is nice.

TV

  • Wimbledon 2024 - Watched a lot of the Wimbledon finals with my wife.

Streaming

Anime

  • Goldenboy (1995) - Full of fan service but has a main character that flips the genre on its head a bit.
  • Mob Psycho 100 S2 (2019) - Mob is at it again. Such a weird, fun series.
  • Gundam Breaker Battlogue (2021) - A short web series to promote a new line of Gundam models. Not my favorite “Builder” series nor is it my favorite line of Gundam models. Battlogue on all fronts feels rushed and cheap.

🧶 Crafts

  • Tamiya Mini 4WD Blast Arrow Starter Pack - I got into watching min-cars race around a track. I bought one for me and one for my son. I finished mine. My son didn’t finish his. But we don’t have a track to race on… so I either need to pony up cash or figure out another way to race.

🤖 Gunpla

Left: the black inner frame of the 12 inch tall perfect grade gundam model. Right: the completed gundam model classic red white and blue armor applied. Smaller model of same mech included for scale in both photos.

I built the Perfect Grade Unleashed RX-78-2 Gundam - The granddaddy of all granddaddies. This was an incredible build start to finish. I stalled out for two weeks over adhering some metal etching parts but I tried out different glues and cements and ended up using a Scotch Restickable Glue Stick (the same glue for Post-it Notes) and it worked great.

From the inner frame to the outer shell of the body armor, this model is jaw dropping. It has heft, but not too heavy. It poses but feels sturdy. Bandai nestled in gimmicks everywhere but also so subtle you’d never know they were there from a distance. I need to finish putting on all the stickers, but it’s already so incredible to look at that I fear over-decorating.

⌨️ Open source

Nothing official. Except for my job I guess which is technically open source.

👾 Video games

XOXO

A wide dark painting from the 15th century, recognizably European in style and content. It depicts a confused welter of sight-hounds, human hunters both mounted and on foot, and deer, all rushing toward a vanishing point in the far back of a dark forest at night. Paulo Uccello’s The Hunt in the Forest, c. 1465–1470

This post is a set of notes to accompany a talk I gave on August 24, 2024 at the final XOXO Festival in Portland, Oregon. You can watch it on YouTube now.

The talk

The talk was about why I left the internet, how the Covid Tracking Project got me back online, and most of all how the work we did at CTP led to me to believe that we—the weirdos of internet-making and online life—have to not merely retreat from the big-world social internet, but fix it.

Andys Baio and McMillan made the festival and conference such an intensely sweet, thoughtful, and welcoming place for digging all the way down into what the past several years have done to us, and I feel wildly fortunate that they brought me along for the final round.

Slide notes

The paintings and illustrations in the talk are from Lawrence Alma-Tadema’s beautiful and deeply hilarious Spring, Hieronymus Bosch’s Hell panel in his famous triptych, the Passionary of Weissenau (Weißenauer Passionale), an illuminated 12th century life of the Christian saints known in manuscript-nerd land as Cod. Bodmer 127, and Paulo Uccello’s hypnotic The Hunt in the Forest. The Bodmer manuscript illumination depicts the illuminator himself, and I think it’s especially charming.

The photograph at the end was taken by me and shows the Astoria-Meglar bridge, a steel cantilever through-truss bridge that spans the Columbia River a few miles inland from its egress into the Pacific. I don’t actually love being on that bridge, but I love looking at it from below.

More words

On the subject of the bad bargain we’ve made with the social internet and its entanglement with broader systems of surveillance and hyper-financialization, I super-highly recommend Kieran Healy and Marion Fourcade’s wonderful book, The Ordinal Society, which is so clearly and tightly written that it feels like a beautiful knife; this effect is softened only slightly by the inclusion of so many load-bearing puns. (It’s funny and important, everyone should read it.)

Those curious about The Covid Tracking Project will find lots of documentation here, and the recently updated podcast about the project—and the broader failures of public health data during the pandemic—from Reveal is very good and features a lot of audio from inside the project as we worked in 2020 and 2021.

Errata

Just one correction for now, which is that pretender technologies” is at best a paraphrase of Kuhn, and not remotely an accurate quote. It’s inscribed on my soul because of a great philosophy of science lecture I attended as an undergrad after first reading Kuhn.

The actual source is not clear to me thanks to the passage of time, and it’s obviously closely related to Kuhn’s pre-paradigm,” but isn’t actually in The Structure of Scientific Revolutions as such, which as I realized in the middle of the night following the talk, when I woke from a deep sleep and was like, oh no.” Brains! Why.

Frostapalooza

Maybe you knew Brad Frost played the bass? What you might not know is Brad is a monster on the bass. His love for performing music is off the charts. So for Brad’s 40th birthday he had an idea: throw a concert. It came fully named: Frostapalooza. The way Brad envisioned it, it was a […]

Web Unleashed — Front-End Developer Conference in Toronto in October

WEB UNLEASHED is the ultimate front-end developer conference. Here’s the important details: I’ll be there to give a talk and be around. I’ve decided that it would be fun to talk about DX, Developer Experience that is, as a general topic. I have the pleasure of getting to care about it as a developer myself, one […]

California’s Deal for News

A deal has just been struck in California by Assembly member Buffy Wicks that averts what could have been, in my opinion, disastrous legislation written by lobbyists to benefit primarily incumbent, investor- and hedge-fund-controlled news media in and out of the state.  I am gratified that the outline of the announcement approaches what I had […]

The post California’s Deal for News appeared first on BuzzMachine.

Objection Handling: The Secret to Improving Your Website Conversion Rate

Learn how to boost website conversion rates through effective objection handling. Identify concerns, address them proactively, and implement strategies to build trust and drive sales.

Strange Beliefs of Childhood № 99

My Glamorous Life: late to the pubescence party.

The post Strange Beliefs of Childhood № 99 appeared first on Zeldman on Web and Interaction Design.

Frostapalooza

So Frostapalooza happened on Saturday.

It was joyous!

It all started back in July of last year when I got an email from Brad:

Next summer I’m turning 40, and I’m going to use that milestone as an excuse to play a big concert with and for all of my friends and family. It’ll sorta be like The Last Waltz, but with way more web nerds involved.

Originally it was slated for July of 2024, which was kind of awkward for me because it would clash with Belfast Trad Fest but I said to mark me down as interested. Then when the date got moved to August of 2024, it became more doable. I knew that Jessica and I would be making a transatlantic trip at some point anyway to see her parents, so we could try to combine the two.

In fact, the tentative plans we had to travel to the States in April of 2024 for the total solar eclipse ended up getting scrapped in favour of Brad’s shindig. That’s right—we chose rock’n’roll over the cosmic ballet.

Over the course of the last year, things began to shape up. There were playlists. There were spreadsheets. Dot voting was involved.

Anyone with any experience of playing live music was getting nervous. It’s hard enough to rehearse and soundcheck for a four piece, but Brad was planning to have over 40 musicians taking part!

We did what we could from afar, choosing which songs to play on, recording our parts and sending them onto Brad. Meanwhile Brad was practicing like hell with the core band. With Brad on bass and his brother Ian on drums for the whole night, we knew that the rhythm section would be tight.

A few months ago we booked our flights. We’d fly into to Boston first to hang out with Ethan and Liz (it had been too long!), then head down to Pittsburgh for Frostapalooza before heading on to Florida to meet up with Jessica’s parents.

When we got to Pittsburgh, we immediately met up with Chris and together we headed over to Brad’s for a rehearsal. We’d end up spending a lot of time playing music with Chris over the next couple of days. I loved every minute of it.

The evening before Frostapalooza, Brad threw a party at his place. It was great to meet so many of the other musicians he’d roped into this.

Then it was time for the big day. We had a whole afternoon to soundcheck, but we needed it. Drums, a percussion station, a horn section …not to mention all the people coming and going on different songs. Fortunately the tech folks at the venue were fantastic and handled it all with aplomb.

We finished soundchecking around 5:30pm. Doors were at 7pm. Time to change into our rock’n’roll outfits and hang out backstage getting nervous and excited.

Right before showtime, Brad gave a heartfelt little speech.

Then the fun really began.

I wasn’t playing on the first few songs so I got to watch the audience’s reaction as they realised what was in store. Maybe they thought this would be a cute gathering of Brad and his buddies jamming through some stuff. What they got was an incredibly tight powerhouse of energy from a seriously awesome collection of musicians.

I had the honour of playing on five songs over the course of the night. I had an absolute blast! But to be honest, I had just as much fun being in the audience dancing my ass off.

Oh, I was playing mandolin. I probably should’ve mentioned that.

Me on stage with my mandolin.

The first song I played on was The Weight by The Band. There was a real Last Waltz vibe as Brad’s extended family joined him on stage, along with me and and Chris.

The Band - The Weight Later I hopped on stage as one excellent song segued into another—Maps by Yeah Yeah Yeahs.

Yeah Yeah Yeahs - Maps (Official Music Video)

I’ve loved this song since the first time I heard it. In the dot-voting rounds to figure out the set list, this was my super vote.

You know the way it starts with that single note tremelo on the guitar? I figured that would work on the mandolin. And I know how to tremelo.

Jessica was on bass. Jessi Hall was on vocals. It. Rocked.

I stayed on stage for Radiohead’s The National Anthem complete with horns, musical saw, and two basses played by Brad and Jessica absolutely killing it. I added a little texture over the singing with some picked notes on the mandolin.

The National Anthem

Then it got truly epic. We played Wake Up by Arcade Fire. So. Much. Fun! Again, I laid down some tremelo over the rousing chorus. I’m sure no one could hear it but it didn’t matter. Everyone was just lifted along by the sheer scale of the thing.

Arcade Fire - Wake Up (Official Audio)

That was supposed to be it for me. But during the rehearsal the day before, I played a little bit on Fleetwood Mac’s The Chain and Brad said, “You should do that!”

The Chain (2004 Remaster)

So I did. I think it worked. I certainly enjoyed it!

With that, my musical duties were done and I just danced and danced, singing along to everything.

At the end of the night, everyone got back on stage. It was a tight fit. We then attempted to sing Bohemian Rhapsody together. It was a recipe for disaster …but amazingly, it worked!

That could describe the whole evening. It shouldn’t have worked. It was far too ambitious. But not only did it work, it absolutely rocked!

What really stood out for me was how nice and kind everyone was. There was nary an ego to be found. I had never met most of these people before but we all came together and bonded over this shared creation. It was genuinely special.

Days later I’m still buzzing from it all. I’m so, so grateful to Brad and Melissa for pulling off this incredible feat, and for allowing me to be a part of it.

They’ve had a shitty few years. I know we all had a shitty time over the past few years, but the shit kept on coming for them:

And then in the middle of this traumatic medical emergency, our mentally-unstable neighbor across the street began accosting my family, flipping off our toddler and nanny, racially harassing my wife, and making violent threats. We fled our home for fear of our safety because he was out in the street exposing himself, shouting belligerence, and threatening violence.

After that, Brad started working with Project Healthy Minds. In fact, all the proceeds from Frostapalooza go to that organisation along with NextStep Pittsburgh.

Just think about that. Confronted with intimidation and racism, Brad and Melissa still managed to see the underlying systemic inequality, and work towards making things better for the person who drove them out of their home.

Good people, man. Good people.

I sincererly hope they got some catharsis from Frostapalooza. I can tell you that I felt frickin’ great after being part of an incredible event filled with joy and love and some of the best music I’ve ever heard.

There’s a write-up of Frostapalooza on CSS Tricks and Will Browar has posted his incredible photographs from the night—some seriously superb photography!

Fediverse Governance Drop

Labors of the months of April, May, and June as represented in an illustrated ninth-century manuscript produced in Salzburg from a French original. The fediverse governance processes of moderation, server leadership, and federated diplomacy. (Courtesy Bayerische Staatsbibliothek)

Back in the fall, I wrote about a research project I was diving into with Darius Kazemi. Now, after a few months of prepping and conducting interviews with people who run Mastodon and Hometown servers about how they govern their parts of the network and then many more months of analyzing and writing up what we found, we’re releasing our findings. We found so much.

The main report is a little over 40,000 words and 110 pages long, and includes dozens of excerpts from interviews with our extremely generous research participants, who spoke with us for many hours back in the spring. There’s a lot there. Much of it will be familiar to veteran fedi mods and admins, but I suspect most people will encounter at least a few things they haven’t encountered before.

In the findings, we get into…

  • Why we think the fediverse’s structure can allow for particularly humane and high-context moderation—and which of the cultural, technical, and financial gaps that our participants identified must be filled before the network can achieve its potential.
  • The interrelated governance configurations that make a server more or less manageable, and the different ways servers in our sample approached those configurations to serve their various communities.
  • The biggest gaps and annoyances in available governance tooling—spoiler, it’s mostly moderation stuff, but it also includes some fascinating things related to shared/coalitional moderation and better communication between servers.
  • What kinds of future threats are most on server operators’ minds, and which things they’re not particularly concerned about.
  • The things that keep volunteer server runners on the fediverse, give them hope, and make them feel excited about possible futures.

And so much other stuff, too.

The two satellite documents we made—Fediverse Governance Opportunities for Funders and Developers (PDF) and the Quick Start Guide to Fediverse Governance Decisions (PDF)—are essentially alternate ways into the knowledge collected in the full findings report. Choose your own adventure!

Content stuff

I wouldn’t have guessed, going in, that we’d end up with the major structural categories we landed on—moderation, server leadership, and federated diplomacy—but after spending so much time eyeball-deep in interview transcripts, I think it’s a pretty reasonable structure for discussing the big picture of governance. (The real gold is of course in the excerpts and summaries from our participants, who continuously challenged and surprised us.)

There are no manifestos to be found here, except in that our participants often eloquently and sometimes passionately express their hopes for the fediverse. There are a lot of assumptions, most of which we’ve tried to be pretty scrupulous about calling out in the text, but anything this chunky contains plentiful grist for both principled disagreement and the other kind. Our aim is to describe and convey the knowledge inherent in fediverse server teams, so we’ve really stuck close to the kinds of problems, risks, needs, and challenges those folks expressed.

I have a lot of sympathy for journalists and other professional explainers who are trying to make sense of new networks without themselves being deep in the networks’ development or maintenance ecosystems. Partly because of that sympathy, I threw in some basic theory about the fediverse in the plainest, least dashing way I could. I think talking about the fediverse as a social component of the open web, with all the joys and horrors that entails, is useful in helping non-fedi people understand that a.) it’s not a platform at all, and b.) that this genuinely does confer benefits for people who want to build communities that interconnect—carefully—with other communities. I don’t think the fediverse is fully equipped for that use, yet, but it’s my hope that the experiences, insights, and recommendations we’ve collected will help the network move in the right direction(s).

Process stuff

Although we intentionally limited our research sample to servers of a given size and with a fairly strong public commitment to intentional governance, our findings reflect a pretty high degree of heterogeneity in the specifics, which I’m really happy about. I don’t myself think that there’s a right way to approach the fediverse—some ways are obviously bad and destructive to people and communities I care about, but there are a lot of paths toward being together in better ways. I also think, even more now more than before we did this work, that the relatively subtle differences in the way our participants run medium-sized fedi servers are actually extremely meaningful for the shape of the community they end up hosting.

A brief word about how this came together: Darius and I pitched the project last fall, designed the interviews in the winter, and conducted the interviews over the spring and into early summer. When analysis and writing time arrived, Darius crunched through endless hours of transcript corrections and built out the tooling, legal, and financial findings and recs, and I wrote up the other sections of the report and the introductory analysis. Darius also built a great mini-site for the main report, which you can also read as a PDF if you’re into that.

Gratitude

Huge thanks to our participants, to Katharina Meyer and the other folks at DIIF, to the many kind experts who read early drafts and offered generous suggestions, and to my partner and kid, who cleared a lot of time and offered a lot of support so I could hole up and write yet another giant crunchy thing about the internet.

Chris’ Corner: Filtering

We updated the Your Work section of CodePen recently. See, it used to have a dropdown menu like this that we labelled “View”: This allowed you to scope down the Pens you were looking at below (in a Grid or List view). A single <select> element like that started to feel a little awkward. Especially […]

Exploring 21 Unique Custom Cursors for Your Site

Microinteractions play an role in creating engaging and intuitive user experiences. These subtle animations and feedback can guide users, provide valuable information, and make interactions more enjoyable and generally look cool! One often overlooked yet super powerful micro-interaction is the use of custom cursors. Custom cursors can add a unique touch to your site, making navigation […]

Media Diet

Could a new day dawn at The Times?

Since I’ve been constantly criticial of The Times and its coverage of the election, here is a thread from the socials in which I note a Sunday morning of positive coverage of Kamala Harris leading the paper online: Well knock me over with a bald eagle feather: The Times leads today with positive coverage of Kamala Harris. […]

The post Could a new day dawn at The Times? appeared first on BuzzMachine.

There are two kinds of advertising

Not to bury my point: contextual is the normal, good, fair, effective type of advertising. Targeted is the creepy, resource intensive, privacy invading, and, (?!?!?!!) not particularly effective type of advertising. We’ll get there. A billboard is contextual advertising. You’re driving on the highway and are told there is a McDonalds in 7 miles. The […]

What ‘Press’?

Margaret Sullivan — whom I greatly respect and with whom I almost always agree — wrote a Guardian column asserting that “Kamala Harris must speak to the press.” Go read it first.  I disagree. That resulted in a thread on the socials I duplicate (with mended typos) here: What “press”? The broken and vindictive Times? The newly Murdochian Post? […]

The post What ‘Press’? appeared first on BuzzMachine.

Frostapalooza Visualizations

A week from today is Frostapalooza, Brad’s big show he’s throwing incorporating a ton of friends and family. In addition to the 40 musicians rotating on stage, now there will be visual artists showing off their work as well. Brad writes: Jeff Robbins makes some really amazing music software called Visibox that helps bands easily create, manage, and […]

The cost of fueling my body

I’ve become a bit obsessed with how much it costs to fuel my body during the working hours.

Item Cost/Serving Qty/Day Cost/Day Qty/Month Cost/Month
Snap Kitchen 500cal meal $10.00 1 $10.00 22 $220
Fairlife 42g Protein Shake $3.50 1 $3.50 22 $77
Liquid Death $1.75 1 $1.75 22 $38.50
Ruta Maya Dark Roast $0.25 3 $0.75 66 $16.50
Califia Farms Café Oat $0.11 3 $0.33 66 $7.26
Total $16.33 $359.26

To keep me and my brain running during working hours costs me ~$359.26/month. Not much to say beyond that –no grand epiphanies– except that I think it’s too expensive. Sitting in an office by myself costs me $16.33/day (or $2/hour). This budget doesn’t include breakfast, dinner, exercise, healthcare, transit, internet, electricity, or office supplies… all necessities that enable the work. This is just the daily cost of caloric fuel to keep my body going during the nine-to-five. My family has three other humans in it too, so this seems collossaly expensive.

If I wanted to save money (I sort of do), here’s what I’d could try to optimize from top to bottom:

  • I could make my own pre-made meals for about ~$2/meal. I’ve had success with this but it requires a lot of weekend logistics to execute properly. This would be the most significant cost reduction, costing only $44/month and saving $176/month.
  • I could buy whey protein in bulk. A 5 lb bag of Muscle Milk (nearest approximate flavor) is $72/bag and contains 68 servings for a reduced costs of $1.05/serving. However, one serving only has 25g of protein, so if I’d need to double the scoops. The total cost would then be $2.11/serving or $46.42/month. Buying bulk powder makes fiscal sense, but $30/month to not have to deal with drinking clumpy protein shakes and washing crusted stinky shakers seems almost worth it.
  • I considered eggs as an alternate source of protein instead. A single egg has ~6g of protein and costs about 50¢. The cost could potentially come down but the bigger issue is to get the same 42g of protein I’d need to eat 7 eggs. I don’t know if you’ve eaten eggs before but 7 eggs is a lot of eggs. Imagine woofing down 7 sweaty hard-boiled orbs a couple times a day, yikes.
  • I could brew my own agave-sweetened tea. I’ve done this once, but the crisp flavor profile wasn’t the same so I wouldn’t call it a success. Needs more experimentation.
  • Thanks to Costco selling our favorite local coffee roaster in bulk, we have caffeine ritual costs dialed down about as low as they can go. Feel comfortable there.

Lowering my lunch costs stands out as the best candidate for improvement. But as I noted before, adding even a small pile of extra duties risks toppling the wagon and I’m back to eating emergency $14 Spicy Chicken Sando Combos to quench my hunger. I wonder where my daily costs fit on a graph of national statistics. Is this average? Is this Bidenomic inflation? Am I making myself poor with my avocado toast? Someone who understands finances help me budget! Ack!

Chris’ Corner: Here’s some things you should know

Fine fine fine, here’s some things you could know if you were hip and into knowing things about building websites well.

How to Add a Header to a curl Request

curl is one of those great utilities that’s been around seemingly forever and has endless use cases. These days I find myself using curl to batch download files and test APIs. Sometimes my testing leads me to using different HTTP headers in my requests. To add a header to a curl request, use the -H […]

The post How to Add a Header to a curl Request appeared first on David Walsh Blog.

102 days

I’ve abstained from alcohol for 102 consecutive days. This is the longest streak I’ve had in my life other than from the ages of 0 to 19. The previous high was 100 days, but I quit after that because I thought, “Hey, I can do this.” Why the change? The person I could become under […]

Chris’ Corner: Variables

CSS has a feature called Custom Properties. You know this. People also — somewhat interchangeably — refer to these as CSS variables. Somehow, that doesn’t bother me, even though I tend to be a stickler about naming things. For instance, there is no such thing as a frontend developer. There are front-end developers who focus […]

Coding a Timezone Conversion Plugin for WordPress Using AI

There are a lot of claims that AI can replace developers, and so I wanted to see exactly what it was capable of. Based on my experiment, it is not there yet, but it is damn handy.

Shows

Over the last few months I watched… They were all kinda dark. I’m starting the Bear Season 3 now and we’ll see if I can take it. I might need something a little funnier or lighter or something for a while.

White voters heard here

On MSNBC this morning, I watched Elise Jordan’s focus groups from Green Bay, Wisconsin — the first after the nomination of Kamala Harris. I was honestly shocked that, after the start of this unprecedented presidential campaign by a Black and Asian-American woman, the first voices we’d hear would be from Trump voters. The next group […]

The post White voters heard here appeared first on BuzzMachine.

Practical SVG is Now Free to Read Online

Back in 2016 I wrote a book called Practical SVG. Recently, the publisher, A Book Apart, closed shop. Now you can Read Practical SVG on the web, here on this site, for free. I always like how Mat’s book was online so now mine can join that cool club. I’ll echo what I say on […]

Design for Real Life News!

Design for Real Life’s rights have been returned to Sara and me, and we’ve cut the price by about half (or more in some regions).

Summer rental

4:05am
The windows are open, hoping to capture the faint winds and convert them into a mythical cooling cross-breeze. A gust passes through vacuuming all the doors shut, cancelling hope for a miracle.
I’m awake. It’s cool but I’m on top of the covers and not cool enough.
The plastic thump-thump-thump of the oscillating fan reaching the end of its arc is rhythmic yet not. After three-to-six attempts, it yields to the resistance and heads the other way. It will be back soon.
Another fan in the room sounds like a far off propeller plane looping around the property. I await its arrival at each approach.
The alleyway ebbs and flows throughout the night with the smell of marijuana smoke, teens cussing, and the clinking of bottles as passers-by rummage through recycling bins.
There’s a sick child in the other room. My child. Been sick for days, poor thing. On antibiotics now. Spit the first dose on the floor because she didn’t like the taste.
I can hear her labored breath as different subconscious systems battle for what they deem as comfortable. Warm, yet shivering. Cold, yet burning up. Asleep, yet aware.
My wife is there next to her. Also sick with a persistent unspecified cough.
Since arriving at the rental three days ago, I have only left the house to buy medicine and wine.

7:23am
Scuttling in the alleyway. Two voices. A truck starts. A woman pleads, “I’m sorry, I fucked up.” The truck drives off.
I put on a pot of coffee.

9:15am
Left the rental to walk and pick up breakfast. Peeked at the ocean to remind myself of the magnitude. I’m a block away but hadn’t seen it in days.
I got a breakfast burrito. The potatoes were a little al dente, but it had black beans and wasn’t a soupy mess so I call that a win.
PCR tests came back and it’s not Covid and it’s not strep, but we don’t have any answer for what sickness(es?) our family is dealing with.
I’m on vacation but it’s not quite vacation anymore.
I’m working a bit. Dysfunctional but I appreciate a place to channel anxiety.
Caretaking is much harder than computer work.

4:46pm
We made it to the beach. Wife and son thought it was too windy for my solar shade —and it was— but I persevered. After naysaying me they had the audacity to want to join me in my solar fortress. Haha. Nice try.
My congested little one made me pretend food with wet sand. She’s allowed to join me in my fortress.
We left as the tide came in and ordered pizza. The pizza was just okay.

9:44pm
A good day. A long day.
Another member of the family is reporting a sore throat, so that’s less than ideal.
“When this vacation is over I’m going to need another vacation,” the protagonist says looking directly through the fourth wall. The canned laughter erupts.
Do wells of rage fill up faster than waters of peace? Am I broken or is the underlying system broken?

5:32am
Awakened by two crows squawking at each other.
I went to bed after midnight. A new day begins.