Screenshot All The Links

I’ve talked about this before, but to recap: As someone who does quite a bit of research into somewhat obscure topics on the web, there’s nothing as annoying as when you read an old web page that says something like “and you can read that really interesting interview on this page“, and then you follow that link, and discover that that site disappeared a decade ago.

And the Wayback Machine didn’t archive it.

So, ideally, whenever you link to something, a copy of what you’re linking to should be stored on your own site — so what you’re writing and what you’re linking to has the same lifespan. That’s kinda difficult to do, though — lots of issues with “safely” mirroring a site in a useful manner. But what’s trivial is to do is to screenshot what you’re linking to.

It’s a 90% solution: No, it’s not ideal to read a screenshot of a page instead of the page itself, but it’s a lot better than nothing:

But… Actually taking a screenshot of a web page and then manually uploading it to your blog site would be an insane amount of work. But computers are pretty good at automating stuff, so my Emacs-based WordPress interface does this automatically… as well as it can, because even screenshotting things from your own machine is getting to be pretty hard.

Because not only are there cookie banners and various other blockers, but even “nice” sites like the above somehow feel the need to plaster some modal over the page contents. *sigh* And that’s not the worst, really — there’s so many “anti scraper” tools that trigger for even the most innocent of automatic usages like the above that you may end up being permanently banned if you try to use anything other than the newest of the newest actual real browsers to visit a web site.

It’s not that I blame them — it’s an arms race against out-of-control AI scrapers, but the use cases that are most affected by all of this are use cases like this — the AI scrapers have infinite resources and use residential VPNs and heavy automation to seem like real people, and don’t care one whit one way or the other.

[Slight digression: While typing this blog post, it occurred to me that Cloudflare had announced APIs for doing stuff like screenshots, so I wondered whether they’d come up with something fun in this area. So I pointed that API at an imdb page and viola:

A big fat nothing, because imdb uses the Big Amazon Firewall to block everything from data center IPs and browsers that don’t pass a human-like check.]

So I don’t really have a solution here for all of that. I just wanted to mention that I’ve cleaned up the code to actually display the linked screenshots and made it into a WordPress plugin. (Hover over that Microsoft Github link to see the plugin in action. And possibly click on that thumbnail you get when hovering, too.)

(Note that this isn’t one of those annoying “preview” things that some web sites put on URLs — I find that to be the most annoying thing ever, and totally useless. What you’re seeing here is a screen capture of the linked site taken the same date I posted this post — so you’re seeing exactly what I linked to when I linked to it.)

Unfortunately, there is no way to do automatic screenshots from the server — Cloudflare blocks/challenges all access from known data center IPs, so that’s just not feasible. So if you want to do something like this, you have to find your own way to get the screenshots of what you’re linking to.

The Best Linux Configuration Syntax Ever

I’ve been scanning a bunch of magazines for kwakk.info over the last few months, and I’ve got a pretty efficient setup — I’ve got an A3 Epson 50000XL scanner, so I can scan a double page spread in a couple seconds. I use a pedal (USB HID) to trigger the scan with my foot so that I have both hands free to press the magazine down, and with that setup I get a throughput of about 16 pages per minute. (I could use the scanner’s lid instead of my hands, but that would cut the throughput seriously.)

And I can do scanning “on autopilot” while watching TV, so it’s like knitting for me, basically.

But sometimes I make mistakes, and I have to redo a page. And sometimes the mag switches between black and white and colour, and I have to tell the laptop that somehow.

So my solution was to lean over to the laptop and hit the right key there, but… that’s so inefficient! So I decided to buy this little beauty:

It’s a three-key keyboard, which is just perfect — one key for “go back and redo”, one for “now it’s colour” and one for “now it’s black and white”. (OK, I could have used a two key keyboard, but a B&W toggle wouldn’t be very user friendly, especially since scanning is usually accompanied by this user with beer usage.)

This is also a USB HID and works out of the box in Linux. The keys output a, b and c. Why not? As good as anything else.

But the problem is now that pedal I use to trigger the scans with my foot. It outputs b. WHAT ARE THE ODDS!!!!

So I wondered how you remap a specific key from a specific device to something else these days. Under X, that would have been easy enough, but my laptop is running Wayland, and… well you know Wayland.

Instead of researching this problem, I just asked an LLM, and gave it the debug output from evtest. It said I should do this:

root@up:~# cat /etc/udev/hwdb.d/99-pedal.hwdb
evdev:input:b0003v1A86pE026e0111*
  KEYBOARD_KEY_70005=d

This should remap my pedal USB device to output d instead of b.

# systemd-hwdb update; udevadm trigger

And what do you know! It’s works!!!!

But… that configuration syntax? Seriously?

I guess this is a perfect time for systemd-based configuration — impossible for human beans to deal with, but perfect for LLMs? I guess Poettering was some kinda visionary after all.

Looking at the USB subsystem, I think 1A86 is the vendor ID and E026 is the product ID… but I don’t really know what the rest of those numbers are supposed to be, and I don’t have to know, do I?

And it’s annoying that this bit of user configuration lives under /etc instead of /home, but…

So now I can just continue scanning. Even faster than before! Vroom vroom!

(“noooo” I can hear my RSI softly yelling.)

Comics Daze

My god, it’s been two months since I last had a comics daze. I guess I’ve just been busy with stuff or something? And I’ve got so many unread comics now, so let’s get started.

And what about… music from 1977? Sure, why not.

Kate Bush: The Kick Inside

13:04: Love and Rockets #17 by Gilbert & Jaime Hernandez (Fantagraphics)

Jaime continues the Ray/Maggie storyline (or whatever you want to call it), but this time around takes a dip back into Ray’s childhood. It’s fun.

I’ve seem several people on the intertubes the past few years complain about how embarassing it is that one of the most acclaimed works in American comics is about women with huge boobs. I wonder whether Gilbert’s responding to that with these strange “censorship” boxes he’s sprinkling in his comics these days.

Anyway, it’s a very meandering sort of Fritz story this time around — it feels 100% like he’s just spinning his wheels by depicting random permutations of possible Fritz relationships. And I’m not even sure whether the characters he’s telling us have been dating Fritz for decades have ever been in the series before, or whether he’s just throwing them in to fuck with the readers.

13:29: Faster by Jesse Lonergan (Bulgihan Press)

I think I’ve read this book before in an earlier edition…

It’s still really cool.

David Bowie: Low

13:36: A Billy The Kid Alphabet by Rick Geary

I got this from here.

Hey! I comes with a drawing and a mini-comic. Love the sketch.

So this book tells you a lot of stuff about Billy The Kid in non-sequential order.

I’m not really that interested in Billy The Kid, but it’s pretty interesting anyway. The attraction here is the artwork, though. Cool book.

David Bowie: “Heroes”

13:46: The Pass by Katriona Chapman (Fantagraphics)

I kinda like the colours here, which is odd since I usually don’t like this much brown…

But, oy, the dialogues are so unnatural.

So this is a book about a couple of friends running a restaurant, and what I was asking myself why reading this is: Why on Earth should anybody care? It’s not that there aren’t stakes, or plot things happening, or stabs at characterisation — it’s just… I’m not quite sure at what I’m getting at here, but this whole book just feels so unnecessary? It feels like it’s made in response to all those cookery shows on tv. Not necessarily in a mercenary way, but in a “I have no idea what I’m going to make for my next comic book, so, er… I like watching cookery shows? Perhaps I can make a book about a restaurant?” That is, nothing about this book feels necessary or even interesting.

14:43: All The Living by Roman Muradov (Fantagraphics)

Fantagraphics has been in serious doldrums for, like, the past half year or so. I was starting to wonder whether they were going under as a result of the Diamond bankruptcy, but they are starting to pick up again, so I guess we can draw sighs of relief.

This book is both funny and endearing.

Muradov’s vague artwork makes you work a bit harder as a reader, and that suits this book well.

It’s really good — I’m not quite sure I understood the ending, but that’s fine.

Peter Gabriel: Peter Gabriel 1

15:00: Š! #58 (Kuš)

I got this from here.

This is a special sex issue (to celebrate 18 years of this magazine).

Heh heh.

It’s a very good issue.

Talking Heads: 77 (Sire)

15:20: A Star Called The Sun by Simon Roy (Image Comics)

This is a collection of short stories that have (mostly) appeared somewhere else before.

And it’s a delight — so many very inventive science fiction milieus, and also affecting little stories and characters.

Some of the stories feel more like vignettes, but that’s fine — it’s a really compelling collection. Gorgeous artwork, too.

Joni Mitchell: Don Juan’s Reckless Daughter

16:13: The Girl Who Raised The Dead by Kawashima Norikazu (Living the Line Books)

I’ve been really disappointed by the line of Japanese comics from Living the Line, and had decided to stop buying them, I think? But look — I bought this one anyway, for some reason or other.

This is better than the previous books, though — it’s about a teenage girl that’s killed by lightning and then turns into a super-hero. Yes, yes, but the mood is really creepy and unnerving, and you never know where the plot is going.

It’s really odd in a good way, and the storytelling works.

16:34: Radically Rearranged Ronin Ragdolls #100 by Troy Little and others (Image Comics)

I’m pretty sure I didn’t buy this. Perhaps Midtown Comics just put this into my shipment as a gift? Or by mistake?

Well, this is very lively…

More jokes would have been better — this goes more for a “total chaos” sort of overload thing, and it’s OK. Would I have enjoyed it when I was twelve? I think I still would have liked more jokes.

Kraftwerk: Trans-Europe Express

16:46: Les vieux forneaux 8: Graines de voyons by Lupano/Cauuet (Zoom)

This is a series about a group of anarchist 80-year old people. Typical scene above: Rebellion against QR codes.

It’s a really sweet series — it’s funny and wistful at the same time; it’s the kind of thing the French do very well. I think this is probably my favourite current French commercial album series? There’s a new album about once a year, and they’re always a delight.

As is this one — very funny and has an over the top maudlin plot, just like we like.

And now I think I have to run some errands; be back in a while.

Sandy Denny: Rendezvous

18:11: Fielder #4 by Kevin Huizenga

What? Another issue of Fielder? Did we get one just the other month? Or did I read this issue already?

Nope, this is new! Or at least — I haven’t read it before.

It’s fantastic. It’s perhaps the most Huizenga book Huizenga has made — it sort of distils his method of storytelling. That is, it’s not exactly stream of consciousness — it’s more like a meandering stream of distractions. It’s hypnotic.

18:35: My Dog Ivy by Gabrielle Bell (Uncivilized Books)

I know I read this before, but I got a new copy in the mail, so I might as well read it again.

Oh, this one comes with a nice postcard.

Ah, this is just lovely.

I love these diary strips.

And speaking of Maggie Umber…

19:02: The Gok Specials, So Many Ways & Strange Star by Maggie Umber

I got these from here.

Three books with different dimensions — the first one is slightly narrative, and is about Georgia O’Keeffe.

And then one is just a single folded sheet, but it’s very lovely.

And then there’s one that folds out very wide — it’s about Mary Shelley?

Love it.

19:10: Two Snakes by Suerynn Lee

Oh, this is a great little book — I really like the artwork, and the story is very wistful indeed.

19:14: The Doctor Is In by Christina Lee

This is fun — I like reading about these characters, and I hope there’ll be more issues, because the story stops way too soon.

19:18: The Connoisseurs by Alex Swift (Frog Farm)

I guess I got these from here.

This little book is totally absurd and very funny — I laughed out loud a couple times.

I’m not giving away the plot twists!

Pink Floyd: Animals

19:26: Valley Valley by Audra Stang (Frog Farm)

This is a surprising book — it starts off as a pretty normal (but very funny) send-up of the comics “industry” and people in it…

But then we get to the halfway point and it turns out to be a flip book. And the other half deals with the same time period, but seem from the other person’s point of view, and it’s kinda heartbreaking.

Really good stuff. I wonder what it would have read like if I’d read it in the opposite order.

Supertramp: Even in the Quietest Moments

19:41: Miss Ruki by Fumiko Takano (New York Review Comics)

This book was on a lot of people’s “best of” lists last year, but I somehow missed it the first time around.

Oh, I was sceptical when I started reading this, but this is delightful.

These strips originally ran in a women’s weekly magazine in the late 80s, and they’re so… refreshing? And unusual. The storytelling is kinda ruminative — these are (almost) all two-page humorous strips about the same two characters, and while you could say that they have punchlines, that’s not really the point, I feel.

It’s got some kind of magic going on — I love this book. It’s so romantic, and the romance it’s selling is the romance of being two single women living in Tokyo, having slightly ditsy adventures.

Devo: Satisfaction (I Can’t Get Me No)

20:46: Adventure Time #1 by Caroline Cash (Oni Press)

Caroline Cash doing Adventure Time!?!?

I don’t think I’ve ever read any Adventure Time… I think I’ve seen about five minutes of it on TV and it seemed kinda repulsive.

This is the third printing of this thing, so I guess it’s a huge success?

It’s OK, I guess, but obviously the worst thing Caroline Cash has made. Which (I’m guessing) makes it the best Adventure Time thing ever published?

That’s just my prejudices speaking.

Aksak Maboul: Onze danses pour combattre la migraine

20:56: Crossing the Empty Quarter by Carol Swain (Dark Horse)

This was originally published way back in 2009, but I missed it back then.

It’s a collection of short pieces, mostly published before, so I guess I’ve read almost all of this before, but I’m always up for re-reading Carol Swain.

Oh, it’s so good. I love Swain’s storytelling and all those angles and that style and everything. It’s just got such a distinctive mood — it’s irresistible.

Hey! I’ve got the original pages for that strip!

Suicide: Suicide

21:46: The End

OK, I think that’s enough comics for one day. But man, that was a lot of great books! Hardly a dud among them, and some really fantastic ones.

Innovations In Personal Monitoring

I’ve had this vague desire for yonks to (sometimes) know how long I’ve been out of the apartment. Well, OK, only when doing “exercise”; fair enough, because I’m trying to be more active, but I’m horrible at actually noticing how long I’ve been at something.

But last night it occurred to me that I could get this data for free! Because whenever I leave the apt. I already hit the “pause music” button next to the front door, and whenever I get back, I hit the “resume music” button. So I could just hook something into that, and fifteen minutes later, I had what you see at the top of this blog post.

(It works in a totally non-hacky way — hitting the buttons triggers bash scripts that record the leave/arrive times to a file, and then the screensaver that’s running on the machine in the hall (which is Emacs based, of course) notices that that file has changed (*cough* NFS attribute caching *cough*), creates an SVG file of the time period, converts to jpeg, passes it to the screensaver (for ten seconds), and Bob’s your mother’s brother.)

(HOW DARE YOU.)

Anyway.