Tags: j



Saturday, September 23rd, 2023

Musicians playing lined up on a pedestrian street, including two box players in the foreground—one of them smiling at the camera. Three fiddlers, a woman and two men, playing a tune sitting on a pedestrian street with people gathered around.

Session on the street.

Friday, September 22nd, 2023

Jessica in full flow on the fiddle playing at a session outdoors.

Playing tunes with Jessica.

Three men playing fiddle, box, and flute together under a gazebo in a town square.

Session in the sun. 🎶 ☀️

A white cat snoozing on the sunny window ledge of a medieval building while a guitarist plays around the corner.

Flamenco y gato.

Thursday, September 21st, 2023

A group of musicians—fiddles, flute, bodhrán, concertina, and more—sitting in a circle round a table outdoors playing and smiling.

Getting stuck in!

Checked in at Asador Carlos V. Lunch on the square — with Jessica map

Checked in at Asador Carlos V. Lunch on the square — with Jessica

Wednesday, September 20th, 2023

Musicians gathered outside on the steps of a tapas bar.

The Cáceres sessions begin.

Checked in at Taberna El Rincón. Croquetas y vino — with Jessica map

Checked in at Taberna El Rincón. Croquetas y vino — with Jessica

Jessica at the entrance of the restaurant Atrio. Jessica in the main square where letters spell out: C A C E R E S. Jessica in front of a beautiful old medieval tower.

Jessica around town.

Checked in at La Minerva. Pulpo! — with Jessica map

Checked in at La Minerva. Pulpo! — with Jessica

Tuesday, September 19th, 2023

Looking up at the corners of old rooftops under a blue sky with clouds. Looking up at blue sky and clouds in the gap between two medieval buildings.

Look to the skies!

Checked in at almagesto. Lunch on the square—mogote de cerdo Ibérico — with Jessica map

Checked in at almagesto. Lunch on the square—mogote de cerdo Ibérico — with Jessica

Monday, September 18th, 2023

Lush trees beside stone steps leading up to an old building. A medieval building in a spacious square. A beautiful old building in an old square. Old buildings stacked behind one another on the edge of the main square.

Exploring Cáceres.

A statue of two hooded figures, one ringing a bell, the other—an inquisitor—is holding a cross.

Well, I wasn’t expecting…

Sunday, September 17th, 2023

Checked in at Mercado de San Fernando. Vermut! — with Jessica map

Checked in at Mercado de San Fernando. Vermut! — with Jessica

Friday, September 15th, 2023

Speedy tunes

Performance is a high priority for me with The Session. It needs to work for people all over the world using all kinds of devices.

My main strategy for ensuring good performance is to diligently apply progressive enhancement. The core content is available to any device that can render HTML.

To keep things performant, I’ve avoided as many assets (or, more accurately, liabilities) as possible. No uneccessary images. No superfluous JavaScript libraries. Not even any web fonts (gasp!). And definitely no third-party resources.

The pay-off is a speedy site. If you want to see lab data, run a page from The Session through lighthouse. To see field data, take a look at data from Chrome UX Report (Crux).

But the devil is in the details. Even though most pages on The Session are speedy, the outliers have bothered me for a while.

Take a typical tune page on the site. The data is delivered from the server as HTML, which loads nice and quick. That data includes the notes for the tune settings, written in ABC notation, a nice lightweight text format.

Then the enhancement happens. Using Paul Rosen’s brilliant abcjs JavaScript library, those ABCs are converted into SVG sheetmusic.

So on tune pages there’s an additional download for that JavaScript library. That’s not so bad though—I’m using a service worker to cache that file so there’ll only ever be one initial network request.

If a tune has just a few different versions, the page remains nice and zippy. But if a tune has lots of settings, the computation starts to add up. Converting all those settings from ABC to SVG starts to take a cumulative toll on the main thread.

I pondered ways to avoid that conversion step. Was there some way of pre-generating the SVGs on the server rather than doing it all on the client?

In theory, yes. I could spin up a headless browser, run the JavaScript and take a snapshot. But that’s a bit beyond my backend programming skills, so I’ve taken a slightly different approach.

The first time anyone hits a tune page, the ABCs getting converted to SVGs as usual. But now there’s one additional step. I grab the generated markup and send it as an Ajax payload to an endpoint on my server. That endpoint stores the sheetmusic as a file in a cache.

Next time someone hits that page, there’s a server-side check to see if the sheetmusic has been cached. If it has, send that down the wire embedded directly in the HTML.

The idea is that over time, most of the sheetmusic on the site will transition from being generated in the browser to being stored on the server.

So far it’s working out well.

Take a really popular tune like The Lark In The Morning. There are twenty settings, and each one has four parts. Previously that would have resulted in a few seconds of parsing and rendering time on the main thread. Now everything is delivered up-front.

I’m not out of the woods. A page like that with lots of sheetmusic and plenty of comments is going to have a hefty page weight and a large DOM size. I’ve still got a fair bit of main-thread work happening, but now the bulk of it is style and layout, whereas previously I had the JavaScript overhead on top of that.

I’ll keep working on it. But overall, the speed improvement is great. A typical tune page is now very speedy indeed.

It’s like a microcosm of web performance in general: respect your users’ time, network connection and battery life. If that means shifting the work from the browser to the server, do it!

Thursday, September 14th, 2023

Two men, a whistler and a fiddler, playing side by side at a pub table. A woman playing fiddle and a man playing button accordion in the corner of a pub.

This week’s sessions.

Wednesday, September 13th, 2023

Multi-page web apps

I received this email recently:

Subject: multi-page web apps

Hi Jeremy,

lately I’ve been following you through videos and texts and I’m curious as to why you advocate the use of multi-page web apps and not single-page ones.

Perhaps you can refer me to some sources where your position and reasoning is evident?

Here’s the response I sent…


You can find a lot of my reasoning laid out in this (short and free) online book I wrote called Resilient Web Design:


The short answer to your question is this: user experience.

The slightly longer answer…

For most use cases, a website (or multi-page app if you prefer) is going to provide the most robust experience for the most number of users. That’s because a user’s web browser takes care of most of the heavy lifting.

Navigating from one page to another? That’s taken care of with links.

Gathering information from a user to process on a server? That’s taken care of with forms.

This frees me up to concentrate on the content and the design without having to reinvent the wheels of links and form fields.

These (let’s call them) multi-page apps are stateless, and for most use cases that’s absolutely fine.

There are some cases where you’d want a state to persist across pages. Let’s say you’re playing a song, or a podcast episode. Ideally you’d want that player to continue seamlessly playing even as the user navigates around the site. In that situation, a single-page app would be a suitable architecture.

But that architecture comes at a cost. Now you’ve got stop the browser doing what it would normally do with links and forms. It’s up to you to recreate that functionality. And you can’t do it with HTML, a robust fault-tolerant declarative language. You need to reimplement all that functionality in JavaScript, a less tolerant, more brittle language.

Then you’ve got to ship all that code to the user before they can use your site. It might be JavaScript code you’ve written yourself or it might be a third-party library designed for building single-page apps. Either way, the user pays a download tax (and a parsing tax, and an execution tax). Whereas with links and forms, all of that functionality is pre-bundled into the user’s web browser.

So that’s my reasoning. At least nine times out of ten, a multi-page approach is leaner, more robust, and simpler.

Like I said, there are times when a single-page approach makes sense—it all comes down to whether state needs to be constantly preserved. But these use cases are the exceptions, not the rule.

That’s why I find the framing of your question a little concerning. It should be inverted. The default approach should be to assume a multi-page approach (which is the way the web works by default). Deciding to take a JavaScript-driven single-page approach should be the exception.

It’s kind of like when people ask, “Why don’t you have children?” Surely the decision to have a child should require deliberation and commitment, rather than the other way around.

When it comes to front-end development, I’m worried that we’ve reached a state where the more complex over-engineered approach is viewed as the default.

I may be committing a fundamental attribution error here, but I think that we’ve reached this point not because of any consideration for users, but rather because of how it makes us developers feel. Perhaps building an old-fashioned website that uses HTML for navigations feels too easy, like it’s beneath us. But building an “app” that requires JavaScript just to render text on a screen feels like real programming.

I hope I’m wrong. I hope that other developers will start to consider user experience first and foremost when making architectural decisions.

Anyway. That’s my answer. User experience.



Tuesday, September 12th, 2023

Checked in at Dover Castle. Tuesday night session — with Jessica map

Checked in at Dover Castle. Tuesday night session — with Jessica

Thursday, September 7th, 2023

A flute player and two fiddlers all in a row playing away.

Enjoyed some lovely tunes tonight!