On Caching

Have you ever thought about caching? I mean, for web pages?

This isn’t going to be a rant, and there’s certainly not going to be a “call to action” here, but this is just something I’ve been going “*sigh*” about for decades, and I thought perhaps it might be time to ruminate a bit. Don’t feel obligated to read this! If this is an area you work in, you already know all this, and if you don’t, it’s not going to be of interest.

OK?

OK.

Since the beginning of time (i.e., the mid 90s) web browsers have been caching data to make web page rendering faster. (And in those days, to keep your modem bill down, I guess.) Caching is a good idea, but it makes development slightly more complex.

Let’s take an example web page, index.html, from my web site Mrs. Kwakk Wakk, purveyor of purported particulars to prince & proletarian:

<html>
  <head>
    <meta charset='utf-8'>
    <link rel='stylesheet' type='text/css' href='kwakk.css'>
    <script type='text/javascript' src='kwakk.js'></script>
    <link rel="shortcut icon" type="image/png" href="favicon.png">
  </head>
  ...

After loading this page, your browser (and any caches in between, like Cloudflare) will cache the kwakk.css and kwakk.js files. If I do any changes to these files, a normal reload of the site won’t reload them — you’ll still be using the old versions of these files. Some browsers have a “hard reload” function (in Firefox, it’s Shift-Control-R), but some don’t (mostly mobile phone browsers). And if you have Cloudflare in front of the site, that won’t help: I’d have to empty the Cloudflare cache before you’d see any changes.

“*gasp*”, I’m guessing you’re saying ironically now. “How does the web even survive with those shortcomings!”; laying it on really quick, aren’t you.

Well, things fix themselves after a while — these resources are usually only cached for a couple of hours, so “eh, whatevs” is the approach taken by most people who make simple web pages.

People who make “real” sites don’t have these problems, because they have a build step somewhere in their deployment scripts: They probably have a Javascript minifier, and they generate the CSS from whatever, and the HTML (if it’s even a static file) is generated from something else again, and the build script takes care to name each resource with a unique name, so that you get all the resources at the same time. This is why if you look at a major site, you’ll find that it loads Javascript files called things like u8bp0J-3GNE.js

But! I still stumble upon web shops here and there where I go “well, that looks odd”, and then I hit Shift-Control-R and everything magically looks better. Admittedly, a lot less often than I used to in the olden days (a lot!), but it happens, and then you know that they don’t have a deployment script that takes care of these things.

And this stuff is confusing to people who are just tinkering with their own little sites, and it makes for a frustrating development situation. I’ve seen people actually do things like this manually:

<link rel='stylesheet' href='kwakk.css?ver=1034'>

That is, they bump a number in their HTML files when they push a new version. That’s a miserable thing to have to do, and it’s error-prone, and it makes your VC history sad.

So what most people end up with (except for the majority that just ignore the thing, thinking “well, I don’t update my hobby site that often anyway”), is some sort of deployment script that does this automatically. For instance, just a simple sed script that replaces ?ver= with a timestamp or something. And that’s OK, except for Cloudflare not wanting to cache URLs that have query parameters (at least not on the free plan), so you have to put the versioning string somewhere else, but if you put it somewhere else, you have to keep changing the file name, or… you have to do some URL rewriting on your web site.

As an example, the kwakk.info site has:

<link href='/res/0/kwakk.css' rel='stylesheet'>

See that /res/0/? It’s rewritten by the deployment script to have a timestamp, and then I have an .htaccess file that says:

RewriteEngine On
# Versioned versions of JSON/JS/CSS.
RewriteRule res/([0-9]+)/([^.]+[.](json|js|css)) /$2 [L]

Now Cloudflare caches the files properly, and users get the proper versions of all the resource files.

So why am I writing this blog post anyway? This caching behaviour has been a problem for almost three decades, and nobody has come up with anything better than to make each individual web tinkerer come up with their own hacked-up solution. Would it be possible to come up with something that would just, like, work?

Probably not. But here’s a thought I had while trying to fall asleep the other day — what if the web server and the browser could cooperate a bit more?

OK, back to the original HTML:

<html>
  <head>
    <meta charset='utf-8'>
    <link rel='stylesheet' type='text/css' href='kwakk.css'>
    <script type='text/javascript' src='kwakk.js'></script>
    <link rel="shortcut icon" type="image/png" href="favicon.png">
  </head>
  ...

Now, the web server could parse this HTML and check the timestamp of the included files. I mean, I say “could” in a kinda hand-wavy way — there are problems if the HTML is generated on-the-fly: The server would then have to do some caching before parsing, and… But if it’s an actual file, then certainly convenient, efficient parsers exist, so…

Anyway, my sleepy-time idea would then be to output the information as a series of HTTP response headers. Perhaps something like:

Resource-Last-Modified: kwakk.css;Sat, 16 Dec 2023 17:58:38 GMT
Resource-Last-Modified: kwakk.js;Sat, 16 Dec 2023 12:52:45 GMT

Or whatever. And then the browser (and Cloudflare) could use this information to decide whether to reload the resource or not? And for other resources that may be loaded later dynamically, you could declare them like:

<meta rel="resource" "menu.svg">

And they’d get the same treatment…

I dunno. There’s probably a reason somebody hasn’t developed something like during the previous 30 years. I’m just typing this here so I don’t start thinking about it again the next time I go to bed.

And like I said, it’s a problem only for those people who like to tinker with their personal sites: People that have a build step somewhere (writing their entire site in Typescript with Tailwind, for instance) don’t have these issues that much. (Although I saw a newspaper site with an image of odd proportions the other week, due to somebody cropping an image after it was published or something… (Which reminds me of a thing I was thinking back in the 90s — why don’t web servers include the sizes of included images automatically somehow, and that could basically use the same mechanism as the one I sketched out here — but it would be more resource intensive. But just imagine: No more web pages where everything moves around after the browser loaded the images! (Yes, yes, I know about height and width in image tags, but that’s apparently still too hard for about half the web sites out there to include…)))

All computer stuff consists of cobbled together things, and things still somehow kinda work.

But in annoying ways.

Anyway. There you go.

So here’s a GIF of a cat.

Sony’s Passion is App Development

So — I use an Android phone for most stuff, but I use an Iphone Max for Duolingoing (because of reasons), and I was wondering whether I could listen to music from my Android phone as the same time that I was listening to the French-ey voices from the Doulingo app on the Iphone. There’s something in Bluetooth called “multipoint”, but it wasn’t clear whether that would give me what I wanted, but in any case, I’d have to install the Sony Headphone Connect app to enable it on my WH-1000XM5 headphones.

Gadget makers are notoriously bad at programming, so I wasn’t expecting this to be pleasant, but… oh lard.

I have indeed read the above (it was just a couple of sentences, after all), so I agree and “Start”.

I’m not reading all that. I’m happy for you though. Or sorry that happened. But I “Next”

“Disagree and proceed.”

Hey, didn’t I just disagree? OK, disagree with this second thing…

WTF?!? Another one?! Are these the same or different? I DISAGREE! START USING!

OK, I guess that’s fine.

No that’s not fucking fine! Notifications from this app? ICON BADGES? “Don’t allow”

Why not GET THE FUCK OUT

OK, now I’m “registered”… I hit “OK”

What?! Argh. “Later”

Er ok, I have nothing to restore?

Er, ok, “next”.

“LATER”

YES! LAST STEP! “NEXT”.

“LATERS!!!!”

AAARGH. And er… Cancel or OK? “OK”

YES!! Complete! Just a few steps after the final step!

And that’s a pretty minimal screen, but nothing’s happening. I wait a while, but nothing. So I exit the app and start again. Surely now I’ll be able to twiddle the setting.

Er… this apparently took so long time that it lost connection to the headphones.

And now… it wants to run me through the setup again!? NOOO

*phew* It’s not the same setup; it’s something else… So “LATER”

WHAT?! Complete!?!

Oh, except for this very informative grey box of information. I did wait for a while, but nothing happened. “Close”

OOOH! I have a menu.

YES! There’s the “Connect to 2 devices simultaneously” button I wanted to enable.

This is surely the best app you could conceive of to allow you to change the settings on your Sony WH-1000XM5 headphones.

And, no, it doesn’t actually seem to help with my use case. “Multipoint” seems to deal with having two phones connected to the headphones at the same time, so that you can switch between different sources rapidly. But it doesn’t actually allow playing audio from two sources at the same time? I just want some background music while Duolinging…

I’m not at all sure — this apparently is a totally unheard of use case or something, but perhaps there’s a way anyway? I don’t know.

There you go. Sony wasted my time, and now I wasted your time.

Paying it forward like a champ. I’m pretty sure that’s what it means.

(But to be serious for a second, I do realise that the app isn’t as horrible as it is just because it’s made by programmers who couldn’t program their way out of a moist paper towel. (Although that’s true, too.) All the “data usage” stuff they want people to agree with is so that they can sell the data about what you’re playing to whichever bottom-feeding ad agency bids the most — not so much that when you’re listening to Talking Heads that you get ads for really big suits, but so that when you’re listening to a Joe Rogan podcast, they’ll know to spray you with Ivermectin commercials on all platforms. And all the pointless “features” they want you to enable are presented as a gauntlet like this because they’ve found that when they let people enable them “by hand”, people don’t, and whichever VP in charge of whatever feature has a bonus that depends on metrics that say how “useful” that feature is. So you’ve gotta brow-beat people into enabling this stuff — somebody’s pay depends on it!

If you were really suspicious, you could suspect Sony of leaving the multipoint stuff disabled by default just so that people have to install the app — there aren’t any downsides to enabling it by default, after all: It just allows people to switch between connected devices faster.

Some people at Sony want this app to look like it does, and are rewarded for it, and they will have metrics to show how successful it is. But you have to ask — how many people go through this shit show and go “fuck this! Next time I’ll buy headphones from Apple: they just work”. But there’s no easy metrics for that tied to this app, is there? So it is what it is. At least it’s easy enough to uninstall the app after switching multipoint on.)

The Best Comics of 2023

Wow, it’s been a really strong year for comics!

OK, so here’s the deal: I read a whole lot of comics, and the very few that are super duper awesome move to a special book-case where I can gaze upon them, lovingly, while vast majority move into some cupboard or other. And at the end of the year, I tell you what these special comics were? OK? Here we go.

In no particular order:

Escape from the Great American Novel by Drew Lerman (Radiator Comics)

Parc by Jul Gordon (2d cloud)

Danger and Other Unknown Risks by Ryan North & Erica Henderson (Penguin)

We’re All Just Fine by Ana Penyas (Fantagraphics)

Running Numbers by Frank Santoro

The Stoneware Jug by Stefan Lorenzutti/John Porcellino

Boat Life 1 by Tsuge Tadao (Floating World Comics)

Bloodlines by Rob Walton

Hvis det ikke brenner by Ronja R. S. Berge (Gyldendal)

Sunday by Olivier Schrauwen (Colorama)

Where Have You Been? by Ivana Filipovich (Toxic Ink)

It Hurts Until It Doesn’t by Kahil Kasir

The Second Fake Death of Eddie Campbell by Eddie Campbell (Top Shelf)

Trigger Shot by Tal Brosh

Gordita: Built Like This by Daisy Ruiz (Black Josei Press)

Travel Diary by Scott Finch

New Pets by Jesse Jacobs (Hollow Press)

Social Fiction by Chantal Montellier (New York Review Comics)

Offshore Lightning by Saito Nazuna (Drawn & Quarterly)

You Are Not A Guest by Leela Corman (Fieldmouse Press)

Restless by Joseph Kai (Street Noise Books)

Roaming by Jillian Tamaki/Mariko Tamaki (Drawn & Quarterly)

This Country by Navied Mahdavian (Princeton Architectural Press)

Are You Willing To Die For The Cause? by Chris Oliveros (Drawn & Quarterly)

Time Under Tension by M.S. Harkness (Fantagraphics)

Love and Rockets #14 by Gilbert & Jaime Hernandez (Fantagraphics)

Fielder #2 by Kevin Huizenga

*phew* That was a lot of comics, but if you think I’ve gotten soft-hearted or something and just listed everything I’ve read, then prepare to be stunned! So… many… comics… (And I write more about each book in the “Comics Daze” articles…)

Uhm… any trends? Well, I thought that Fantagraphics had a suspiciously low number of books on this list, but there’s three, which isn’t too bad. It’s the same number as Drawn & Quarterly. But it’s somewhat striking how many different publishers there are these days — it’s not just one company pushing out one banger after another (like 2d cloud in 2016 or Picturebox in 2008), but instead it’s micro publishers with one book each (Fieldmouse, Radiator, Floating World, etc). I’m not sure what this means, though — is there even less money in comics these days? There’s only one book from a major book publisher (Penguin) on the list, for instance. On the other hand, I have read a huge number of comics from major book publishers this year — it’s just that they didn’t make My Special Bookcase. (To put it politely. There have been quite a few horrendous books from major publishers this year.)

I’m also a bit surprised at how my list skews towards heavily narrative works — I’m usually quite enthusiastic about more abstract comics, but almost none of them made it to the Special Bookcase. I guess perhaps more narrative works stick more in the mind?

Anyway, I’ve also read comics published before 2023 this year, and here’s the best of those:

Together & Apart by Andrew White (Fieldmouse Press)

In by Will McPhail (Hodder & Stoughton)

In His Time by Jason Novak (Fantagraphics)

A Frog In Fall (And Later On) by Linnea Sterte (Peow)

Parenthesis by Élodie Durand (Top Shelf)

True Friends by David Collier (Spare Parts Press)

Girls Steal by Ingrid Pierre

Baby Boom by Yokoyama Yuichi (Breakdown Press)

And that’s it! Best year for comics, ever.

Comics Daze

Eep! I got a bunch more comics, so lets start reading.

Test Card: Patterns

12:46: Monica by Daniel Clowes (Fantagraphics)

This is, of course, the Major Publishing Event of the year, but for some reason or other, I didn’t get a copy until now from DCBS…

Like everybody else, I was a big Clowes fan in the early 90s, but unlike most people (I think), I grew disenchanted with his comics pretty soon after Eightball #10. Not that they were actually bad, or something, but I found them to be kinda … not as good as everybody were still saying that they were? And that’s continued until this day, really. So I’m not sure what my expectations for this book is: Everybody’s saying it’s the best Clowes has been since ever, which makes me even more dubious, I guess? But on the other hand, I wouldn’t really be surprised if it’s actually good?

Let’s find out.

Hey, sharp artwork. But as is often the case with Clowes, the faces are drawn so similarly that it’s hard to tell who’s who, and there’s about seven trillion characters in this book. But then again, confusion comes in handy in a book like this.

It’s basically a story about a woman trying to find her long-lost mother; slowly piecing together her past. So it’s structurally in very familiar territory — we’ve all read beaucoup de books like this. And there’s, of course, plenty of mysterious happenings and stuff.

The problem with these things is that the author has to make the reader sure that it’s worth paying attention to all the different twists and mysteries — because these narratives usually work by teasing the reader with a bunch of things that connect, and those connections make the reader go “aha!” and that’s all very satisfying, but the payoff is usually not very interesting, because the author just has a bunch of mysteries but nothing much else to say.

Bill Callahan & Bonnie Prince Billy: Blind Date Party (2)

And we get these seemingly totally unconnected shorter stories sprinkled here and there in the book. What’s the connection!11!1

I’m happy to report that Clowes nails the ending of the book — it’s a hoot and a half, and everything is made clear. The ending is so satisfying that I laughed out loud. But on the other hand, he takes his sweet time getting there, and much of the book reads like a shaggy dog story: Several chapters are just plain boring. Basically everything to do with the cult, but perhaps that’s just me — I just find cults tedious, and Clowes’ cult isn’t particularly original.

So — is this book gonna end up on all the “best of” lists this month? My guess is yes, if Fantagraphics’ publicity dept managed to place it with all the magazines… let’s see. The Guardian, of course. WashPo, yes.

Whut?

So, feeling a bit confused i went looking for answers. First i watched the cartoonist Kafabe review of the work. And though they gushed over its pages and gave glowing reviews neither of those guys seem to understand the book any better than i did. They kinda of left it at, “this book needs several more read throughs”.

The book is totally clear… there’s no mystery, is there?

Heh heh:

I’m probably going to be in the minority on this, but I’m tired of books that prioritize a clever and groundbreaking message over readers actually understanding the message. I did like that the book challenged me to think through how all the chapters were related. Up until the last chapter, I thought I was making progress, chipping away at those connections. But then the end blew up all of those hypothesis, leaving me feeling frustrated and dumb.

There are 18 one-starred ratings on Bookreads! That’s even funnier.

Anyway, I think it’s a pretty good book — Clowes’ best since the 90s. But it’s not fantastic. It’s OK.

Mourning [A] BLKstar: Reflections on the Passing ID (ep-secret tapes)

15:07: Wipeout and stuff

I got all these from the Wipeout store.

The largest anthology (spiral-bound; I really like the format) has all these people…

It’s good.

There’s a few illustrations, but it’s mostly shorter (jokey) narratives. It’s a good read, but the anthology doesn’t seem very… ambitious?

This book is by Walker Mettling, and it’s one of those fun books where the pages are sliced in two and you can construct your own monsters. Hours of fun for the entire family.

And this one folds out into one very rad sheet…

The magazine-sized Wipeout also has these fun printing flourishes, like this band thing here…

OH MY GOD HOW HORRIBLE Not Pink Floyd

And a little comic insert…

Oh, is this a Corben sci fi thing that’s been re-edited?

And one thing that folds out into a very tall comic.

Wipeout books are fun.

Mourning [A] BLKstar: The Possible

15:34: One In A Million by Claire Lordon (Candlewick Press)

This seems like it’s becoming a mini-genre — it’s about having some obscure disease while in high school.

But this one is different — some of these books feel like they’ve been really heavily edited for maximum pedagoguery (that’s a word), possibly in the hopes that they’ll end up on the curriculum somewhere? This feels very unmediated.

It really feels like we’re hearing directly from a 17-year-old, and it’s a very moving book. It’s also unexpectedly sort of a mystery, since we don’t know what’s wrong with her at the start, or what’s going to happen to her.

It’s really good.

Shopping: Why Choose

16:16: The Sparkle by Walker Mettling

Oh, here’s another one of the Wipeout books…

OK, so this book has little stories improvised by kids, but drawn by Mettling from his notebooks.

They’re very kid-like stories. It’s fun.

Fontaines D.C.: Dogrel

16:35: Silence, Full Stop by Karina Shor (Street Noise Books)

Really attractive artwork.

This book starts off pretty oddly — the family moves from Moldova to Israel, and Moldova is portrayed as a pretty backwards country, and Israel not, and still there’s this rage against having to move to Israel anyway. As if it’s unfair that her schoolmates look upon her as a weirdo for having garlic in her school bag to ward off demons? It’s just an odd approach.

And much of the material feels very processed — the opposite of the One in a Million book — but there’s bits that feel very true, like the above, where she’s angry at a guy for insinuating that she’s a good kid and would never take drugs. That’s the worst thing ever!

Then halfway through, the book spirals into a maeltrom of abuse and horror, and it’s just a lot.

I don’t know. It feels very inspired by Ulli Lust? But it’s not carrying it off — it’s both too distanced and too personal at the same time, for some reason or other. It’s like… AAAAAH.

Black Dice: Mod Prog Sic

17:39: The Audra Show by Audra Stang

Hey! Nice sketch!

I think colours are on their way back? There’s been a trend towards desaturating comics (after Nick Drnaso) over the past half decade, but hopefully it’s tapering off now…

Anyway, I’ve read most of this before, but it’s nice re-reading these comics in this collection. But the confusing thing is that it’s more confusing reading them all in one go than reading them over a few years!

But it’s a pleasant confusion. I like it.

Dry Cleaning: Boundary Road Snacks and Drinks EP

18:22: Nap Time

I think I need a nap, though.

Max Tundra: Remixtape

21:20: Cuckoo by Joe Sparrow (Shortbox)

I’m awake! I’m awake!

Well, this art style isn’t really my thing — the closer something looks like modern animation, the sooner my brain goes “eh nah”. But that’s just me! Billions of people prefer animation-a-like drawrings.

The plot, though — this girl gets Jean Gray’s powers from an alien, and her first thought isn’t “oo! I’ve got X-Men powers now!” but instead gets all angsty about it. I think I can speak for everybody when I say that everybody’s checked whether they have telekinesis at multiple points in their lives. But perhaps this takes place in an alternate universe where Marvel Comics never happened?

Various: Muggy vol.1

Then we get to the normal super-hero training scenes and then Cosmic Revelations. The End.

I don’t think it works, but what do I know.

22:07: Majnun and Layla by Yann Damezin (Humanoids)

Oh deer. I there’s one genre I find unbearably tedious, it’s fairy tales, and if there’s another that’s even more unbearable, it’s “myths”, so here we have a fairy-tale kind of myth? What on Earth compelled me to buy this?

It looks kinda pretty, though.

And I gave it a fair go, but it’s indeed not my thing, and I bailed after about 30 pages.

Brigitte Fontaine: Comme à la radio

22:22: Pebbels & The Shriekers by Moly Colleen O’Connell

This is very funny.

And it’s got an easy flow — from one absurd situation to another. It’s a good read.

And pleasantly insane. Class stuff.

22:32: Chicken Scratch by J.M.K.E. (Breakdown Press)

So this is a sketchbook collection…

It’s cool.

Billie Eilish: When we all fall asleep where do we go?

22:33: Red Harvest by Michael Cherkas (NBM)

Cherkas? Is that the guy who did the Silent Invasion comics etc back in the 80s? Indeed it is.

And I guess this is another comic book about the Holdor, so I’m setting my expectations to Be Depressed.

He’s developed a scratchier style over the years — it used to be really stylised. Looks pretty good. The dialogues though… nobody talks this way.

Cherkas leans into the melodrama, and if there’s something that shouldn’t need that, it’s something like the horror what’s going to happen here.

Instead Cherkas chooses to depict scenes like this — where a (Communist) father objects to a priest sneakily baptising his child in secret. It’s like… what? In comparison, the later scenes of people dying from starvation seem less dramatic, really. It’s an odd choice.

But the book’s OK, I guess.

23:25: Striking a Pose by Anita Kunz (Fantagraphics)

This is a collection of male nudes. It’s pretty straightforward…

… but she gets some jokes in.

And it even ties in with the previous book!

The Cure: Bloodflowers

23:37: Curses by George Wylesol (Avery Hill)

This is a collection of shorter pieces.

Done in a range of different styles.

It’s good stuff.

00:11: The End

But now I think it’s time to consider going to bed.

Even More Comics Magazines Courtesy of Mrs. Kwakk Wakk

I was poking around on the torrentses when I happened upon something called simply “Fanzine Torrent” (with no further information), and it had a single seeder, but I set it to download anyway.

One week later:

It’s a 120GB ball of various fanzines — but virtually all of them are sci-fi/horror/movie fanzines, which isn’t very interesting for my kwakk.info search engine (which is just for magazines about comics).

But there was one thing in there that seems kinda interesting — something called Cartoonist PROfile, so I went ahead and ran that through OCR etc, and it’s now here. I’ve only had a cursory look at it, but it has stuff like:

So there you are. (I’ve also added the Squa Tront and Cascade Comix Monthly fanzines.)

I’m not sure whether I mentioned this before, but I also reorganised the site a bit, so that there’s a separate section for more “pure” fanzines:

Mostly because there were getting to be too many magazines to list conveniently on the front page, but also to have a place to put stuff that only has a handful of issues.

Again, if anybody has a collection of scans of comics magazines/fanzines, drop me a note (or leave a comment here), and I can incorporate the mags into the search engine. The only things I can’t carry are mags that are currently otherwise for sale (like all the TwoMorrows magazines) — I don’t want to step on anybody’s commercial toes.

(But then again, if TwoMorrows wants their mags to be incorporated, that would be nice, too. I could do the same as I do for The Comics Journal — only five pages are available for reading per search result, and then the site links to where you can buy the issue. kwakk.info is meant for research, not for reading, after all…)