CCCB: Downriver

For the baking today, I’m going to do a slight re-run: A few weeks ago I did a knead-free pan bread. Which turned out delicious. But it seemed to me that the recipe just had a few more complicated steps than seems necessary: You’re supposed to fold the dough a few times before doing the second proofing (but why?) and pre-heat the pot to 250C, which makes transferring the dough to the pot kinda on the eek side.

So let’s try to just skip those two steps.

So mix flour, salt and dry yeast, add water, and mix until it’s, well, mixed. Then let stand for 18 hours.

I floured up the pan…

Beat the dough down a bit…

Beat beat!

Transferred to the pan and let it proof there for 90 minutes.

There.

Then into the oven for 30 minutes at 250C with a lid on and then 15 minutes at 200C without.

Still not very dark… I think 200C is too low temperature…

Then catastrophe! The bread sticks to the pan! On the sides! Where the flour wouldn’t stick! Gah.

Let’s taste it anyway…

It’s very nice! There’s less of a crust at the bottom, which is both nice and less nice, since there’s little crust at the top, either. So if you hate crust, this is perfect, but who does that? Let’s try it again…

Once more, let the dough rise for 18 hours.

Then… tada! Put some baking paper into the pot. I wondered whether this would inhibit contact with the metal to the point that there wouldn’t be any crust on the bottom, but we’ll see…

Beat the dough down a bit and then scoop into the pan. Put the lid on and let it proof for an hour and a half in the pan.

Then into the oven at 250C for half an hour (with the lid on). Then take the lid off, turn the temperature down to 220C, and bake for 20 minutes more. (I shifted it up in the oven to give it a chance to get some crust going…

And yes! It’s almost perfect! I could have given it five minutes more for more crustiness, but it’s nice and fluffy, and still chewy and glutenous and very satisfying.

Hah! I knew those complicated steps in the middle were totally superfluous!

I should write this up properly as a recipe blog post some day with proper instructions, because the NY Times recipe is way too complicated, and doesn’t give a better result, in my opinion. The only difference is that there’s more of a crust on the bottom of the bread, but whatevs. Totally not worth the bother.

And now I have to pick a book from among the remaining eight unread-since-1992 books to read while eating some bread.

And the winner is… Downriver by Iain Sinclair!

Now, why haven’t I read this one? Or perhaps a better question is: Why have I bought it?

I think the answer to the second question is “it was on sale” and “I was thinking of Iain Banks”.

One is an SF author and the other in Iain Sinclair.

I love shopping at book sales, but I have noticed that that seems to make them less of a priority to actually read. And couple with the Iain/Ian sitch, it’s probably not anything I would ever have worked up the enthusiasm to try reading. And I don’t seem to have made the effort; the book has that “never been opened” feel.

Let’s read the first two pages together.

The most striking thing here is, of course, that the margins are tiny. Especially the bottom margin, which makes it physically unpleasant to read the book, because my fingers are constantly getting in the way of the text while reading.

I’ve got plenty of other books by Paladin (the literary but cheap imprint of HarperCollins, kinda like Picador (which is… Penguin?)), and they’re usually set better than this. Did they do it to keep the page count down? If there’d been normal margins this would probably have been a 500 page paperback instead of a 400 page one. Or did they just keep the typesetting from the hardback but cut down the paper size?

ANYWAY!

The other thing you noticed is that this is a very, very early-90s British novel. Very literate and excruciatingly erudite. Post-modernism was over, so we’re back to modernism, I guess?

But how’s the bread with the book? Well, if probably would have made sense with a darker, more complex bread, but this is a quite satisfying combination. The full-on sweet wheat experience coupled with random acts of bizarre violence and even weirder exigesises (that’s a word) on the meaning of each London neighbourhood complement each other well.

Downriver is very much a product of its time. Sinclair, for instance, predictably rails against nouvelle cuisine, as did all other older authors at the time, it seemed like. And the writing style is what I remember as being diagnosed at the time as “word processing novels”: It’s not that authors didn’t write long books filled with convoluted sentences before; it’s just that the word processor made it so easy to go over and over the text, revising sentences into maximum cleverness. And “[…] a side of bloody Aberdeen Angus, with all the coronary trimmings” is witty — but there’s just so much of this stuff. Everything is tortured into a kind of samey, erudite mush.

On the other hand, there’s amusing dog hatred like this (“the first bite is on the house”), so who am I to complain?

Hey! I know what he’s talking about here: Railway Time. Before railways were a thing in the UK, towns didn’t really feel the need to remain synchronised, so everybody just set their watches by whatever means were agreed-upon in that hamlet. But when railroads were introduced, you had to have a way to write accurate time tables, which led to the railways being the ones who standardised the time (i.e., Greenwich Standard).

So here Sinclair is taking that bit of trivia and using it as a starting point for imagining what perhaps could result in rebelling against that standard. Sounds cool, right? But as with any springboard in this novel, nothing leads anywhere: It all ends in some inconsequential petit guignol or other, and at this point I’m losing faith that Sinclair knowing what he’s doing.

Is it coked-up épater la bourgeoisie all the way through?

I guess this particular bit disappointed me more than all the other disappointing bits in this book because it reminded me of what Thomas Pynchon did with something not altogether dissimilar in one of his books (Mason & Dixon, I think?): The shift from Julian to Georgian calendars. Pynchon takes the factoid and really builds something on it; making it into this entire paranoid What Happened To Those Lost Eleven Days mystery, making the reader care because we trust that it’s going somewhere. And it kinda did!

It was thrilling.

This book isn’t. There’s plenty of funny bits (like Sinclair making a movie with The Corporation (i.e., BBC)), but it’s all so inconsequential.

And I can’t really imagine anybody wanting to read this at all in a few decades, because most of the references (and it’s a book that’s 75% reference) will be completely incomprehensible by then.

Let’s see what contemporary readers think! Let’s try Amazon, because that’s where people people hang out. (Let eye rolling commence.)

:

He’s not good at plot, satire, character, or structure in a work this length, but Downriver is still conventional enough in style (realism punctuated by historical visions) that it isn’t really a formal experiment, or a Thomas Bernhard-style dynamic rant either.

The highest-rated review here is a two-star review, which is pretty unique. It means that people really loathe this book.

This one’s pretty amusing, too:

Neither I nor anyone in my book-group liked this book, in fact I was the only one to finish it. I should explain that I downloaded the book so my husband, whose sight is not good could read it in enlarged type from my computer, I had the Penguin print copy. My husband read the first chapter and abandoned it. This was pretty well what the rest of the group did. I should say that there are ten of us and all have either a degree or a professional qualification, reasonably intelligent, well read people – all equally baffled. I realise the book has been well received and has won prizes but I think I can honestly say it is the only book that I have read and resented the time wasted in reading.

Yeah, I know, most of the other reviews are favourable, but then they usually are on Amazon.

Sinclair has a flair for doing very vivid descriptions (“The furniture was impregnated with ancestral flatulence (bad meat, verruca’d potatoes, cabbage boiled to a nappy-like consistency)”), and while you immediately get it, I started wondering whether some of the most imaginative things are standing expressions or what. I mean, “verruca’d potatoes”? While on one level obvious, on another… what would that really be? Warty potatoes? Is that a thing?

Nope: It’s a Sinclair Original. Or is he thinking of a different… dish… called something similar? The expression seems annoyingly familiar in a way.

The cover blurb on this edition is by Michael Moorcock, and the quote from Angela Carter is on the back. In the latest edition, Carter’s quote is on the front. It’s not surprising, but it’s kinda amusing.

I may have mentioned this before, but Sinclair’s go-to literary device is list-making. In this little paragraph I count… five?… lists of things. And there are chapters in this novel (or “tales” as Sinclair calls them for some reason or other; they’re definitely more chapter-ey than tale-ey) that have a surfeit of these paragraphs.

I say “I may have”, because it’s taken me a month to read the first half of this book, so the first bits I wrote in this blog post have been lost in the mists of my bad memory. I decided that enough was enough and forced myself to read the last two hundred pages over two evenings.

And either that helped a lot, or Sinclair changed tack for the last hundred or so pages completely. I mean, that’s what I expected him to do, sort of, so I’m not that surprised, but I acknowledge that the difference may be in the reader and not in the book.

I’ve read more than a handful of books where the author pummels the reader at the start of the book, and then eases up in the last bit, and then we all enjoy ourselves. It’s a Stockholm Syndrome thing combined with a masochistic streak in the reader: It feels so great when the tiresome bits of the novel are over.

Because the last hundred pages or so are a hoot. Sinclair goes all pomo and includes a section of (supposed) notes from the (perhaps imaginary) editor of the first chapter of this novel. Now we’re talking!

In the last chapter, Sinclair sends a letter to one of the characters in the novel and asks him to finish the book. Sinclair’s typewriter, you see, has broken down and he can’t find anybody to repair it.

So now “I” is a different person, which is a callback to the notes from that editor up there. It all ties together!

I’m so enthused by the ending (not shown above; that’s a few pages before it ends) that I contemplated starting to read the novel from the start again. But, by Emacs, no! No!

Bad book!

Bad!

A New Eval Server For Emacs

Emacs has a mechanism for client/server communication (and remote eval) that’s simultaneously too insecure and too secure at the same time.

Here’s the extremely convenient way to start a server:

(setq server-use-tcp t
      server-host (system-name)
      server-name (concat "foo-" (system-name)))
(server-start)

This will create a file (if called on a machine named “stories”)
called ~/.emacs.d/server/foo-stories with the following content:

192.168.1.53:41929 4021
fH?D+M=u=r@N1O^L-`c"c_GYUj%zj,,hc&9QGF+0}0;c}M3>Evc2SdH_N\`SSV\t

If you then say (on the command line)

$ emacsclient --server-file=foo-stories --eval "(tellstick-switch 0)"

the emacsclient binary will read that file, find the IP address and port number there, connect to that address, output the second line (which is a security cookie), and then the form to be evalled. The server will check that the cookie is what it’s expecting, and then eval whatever it’s asked to eval, and will return the result.

Now, for this to work, the host that you’re running the emacsclient on has to have access to that file, which means that (in practice) the entire thing is based on a shared NFS or sshfs setup, which makes it impossible (or at least extremely awkward) to use in many situations. So it’s too secure.

On the other hand, if you do have that cookie, you can make the server eval anything. And the communication is in clear text, so you can man-in-the-middle as much as you’d like. So it’s really very insecure and can’t be used any other place other than a totally locked-down, trusted network.

So Emacs should have a different way to do an eval server. Specs:

  • Don’t rely on a shared file system
  • Communication should be encrypted
  • The server should be able to limit the number of exposed endpoints

      So, ideally starting the server should look something like:

      (start-eval-server "lights" 8100 '(turn-on-lights turn-off-lights))

      where the first parameter is the name of the service, the second is the port number it should listen to, and the third parameter is a list of functions it will allow the caller to have evaluated.

      The client will typically look like:

      (eval-at "lights" "stories" 8100 '(turn-on-lights kitchen))

      For encryption, we could either do TLS or something home-brewed. And as all crypto experts tell us: Always roll your own crypto, so we’ll go with the latter one. But most of all because we’d really only be doing self-signed certificates, so TLS gives us a lot a problems without giving us security.

      But we could rely on an ssh-like setup with pinned self-signed certificates to give the client security, and client certificates to give the server security, but it’s… difficult to see how that could be made to work without a lot of handholding. And Emacs doesn’t have built-in tools to create certificates, anyway…

      Instead we’ll do symmetric encryption with a shared key. We’ll have ~/.authinfo entries like:

      machine lights port 8100 password s0pers3cret

      So… we’re not relying on a shared file system, but we are relying on pre-shared keys.

      I’ve put the results on github, and in addition to the Emacs client/server bits, I’ve also added a shell script that relies on openssh to do the encryption.

      $ ./eval-client lights stories 8710 '(+ 5 4)'
      9
      $ ./eval-client lights stories 8710 '(+ f 4)'
      Error: Got error message from server:
      (number-or-marker-p f)

      Seems to work!

      The client-server communication is plist-based, so they pass around things like:

      I think AES-256-CBC with PKCS#7 padding is a reasonable cipher to use for this type of thing, but I’m not an encryption expert. Does anybody have any input on that bit?

      The sexp specifies what cipher we’re using, so the protocol should be backwards/forwards compatible if we move to a different cipher in the future. The server should use the same cipher the client used, or if that’s not supportet any more, return an error.

      The error message is also encrypted, of course.

      Another design niggle: I’ve made the eval-at function throw errors when the server says an error has occurred, and if the error occurred when evalling the form, eval-at will throw the same error. Like:

      (eval-at "lights" "stories" 8710 '(+ t 2))
      -> (wrong-type-argument . "(number-or-marker-p t)")

      Does that make sense? I mean, eval-at itself didn’t have a wrong-type argument: It made a network connection, squirted some data over, and got some data back. So it was a success! But…

      What do you think?

      When I find some time (and after using this for a while to see whether it makes sense), I’ll probably propose adding this to Emacs and deprecate the old emacsclient stuff.

4AD 1993

Listen to 4AD 1993 on Spotify.

1992/1993 sealed 4AD’s fate: They had two major hits in the US college market with Belly’s Feed the Tree and The Breeders’ Cannonball; both going into heavy rotation on MTV (back when that meant something). Major label Warner Bros came sniffing seeking grunge acts, and Ivo Watts-Russell signed a distribution deal with them that, to me, seems totally ridiculous and set any band on 4AD up to fail: Warner would start furnishing the advances to the bands 4AD signed, and for every album a band released, the advance would be doubled.

This, of course, meant that any reasonable band that kept releasing stuff would soon be completely unprofitable for the labels, so they would have to be let go, right? We’ll come back to that in a few years. I mean weeks.

But other than those blockbuster hits (both singles and albums from Belly and The Breeders), there was a pretty nice album by His Name is Alive; two good albums from Red House Painters; a really good album by Heidi Berry; Dead Can Dance’s probably best album; and the brilliant album by Insides (on Guernica).

And the Spoonfed Hybrid album which I think is very spiffy. And there’s a story behind why it’s on Guernica:

CT: I never knew until I read Martin Aston’s Facing The Other Way a couple of years ago that Ivo had refused to release Spoonfed Hybrid on 4AD proper because he didn’t like my singing on A Pocketful Of Dust. I don’t like it much either, to be honest, it was much better on the demo. So it goes.

IM: Ivo said he didn’t like Chris’ voice, but I don’t think there was ever a “Lose Chris’s voice and I’ll release it on 4AD” conversation.

A certain lack of communication, I guess.

But, hey, not a bad year at all: Most of the albums 4AD released in 1993 are albums I like a lot, but there’s one that’s pretty bad. (It rhymes with “Rank Black”.)

And then!

There was the Thirteen Year Itch week-long music festival in London! Which I attended! It was fabulous! There was a nice showcase of 4AD artwork (mostly focusing on the CD designs) and a cinema that showed the videos you can see above (I made a playlist; it’s missing the Ultra Vivid Scene video which isn’t at Youtube). And, of course, the venue, which was… pretty intimate, as I recall?

Strangely enough, the concert that made the greatest impression on me was Brendan Perry’s solo show. He premiered all the songs that would end up on his sole solo album, and I loved them to bits. Even more strangely, when the album was finally released, I was totally underwhelmed…

I couldn’t find the That Dog. album on Spotify, so I guess whoever owns the rights (I think 4AD just licensed the album for the UK?) hasn’t made it available.

1993

 BAD3001
Belly — Feed The Tree

Feed The Tree, Dream On Me, Trust In Me, Star

 CAD3002
Belly — Star

Someone To Die For, Angel, Dusted (rerecorded), Every Word, Gepetto, Witch, Slow Dog (rerecorded), Low Red Moon (rerecorded), Feed The Tree, Full Moon, Empty Heart, White Belly, Untogether, Star (rerecorded), Sad Dress, Stay

 BAD3003
Ultra Vivid Scene — Blood and Thunder

Blood and Thunder (radio edit), Don’t Look Now (Now!), Candida (theme from Red Pressure Mounting), Winter Song

 CAD3004
Frank Black — Frank Black

Los Angeles, I Heard Ramona Sing, Hang on to Your Ego, Fu Manchu, Places Named After Numbers, Czar, Old Black Dawning, Ten Percenter, Brackish Boy, Two Spaces, Tossed (Instumental version), Parry the Wind High, Low, Adda Lee, Every Time I Go Around Here, Don’t Ya Rile Them

 BAD3005
Frank Black — Hang On To Your Ego

Hang On To Your Ego, The Ballad Of Johnny Horton, Surf Epic

 cd box set45135
This Mortal Coil — 1983-1991

All the other This Mortal Coil albums, and: Another Day (Roy Harper), Mr. Somewhere (The Apartments), With Tomorrow (Gene Clark), Holocaust (Big Star), Kangaroo (Big Star), Carolyn’s Song (Rain Parade), I Want To Live (Gary Ogan & Bill Lamb), Alone (Colin Newman), Drugs (Talking Heads), Help Me Lift You Up (Mary Margaret O’Hara), Song To The Siren (Tim Buckley), Morning Glory (Tim Buckley), I Must Have Been Blind (Tim Buckley), Several Times I, The Jeweller (Pearls Before Swine), I Come And Stand At Every Door (The Byrds), I Am The Cosmos (Chris Bell), You And Your Sister (Chris Bell), ‘Til I Gain Control Again (Emmylou Harris), Nature’s Way (Spirit), Strength Of Strings (Gene Clark)

 CAD3006
His Name Is Alive — Mouth by Mouth

Baby Fish Mouth, Lip, Cornfield, In Every Ford, Lord, Make Me A Channel Of Your Peace, Drink, Dress and Ink, Where Knock Is Open Wide, Can’t Go Wrong Without You, Jack Rabbits, Sort Of, Sick, Blue Moon, Ear, Lemon Ocean, The Torso, The Dirt Eaters (mbm), The Homsick Waltz

 BAD3007
Unrest — Isabel Bishop e.p.

Isabel (single), Teenage Suicide, Love To Know (originally performed by The Marine Girls.), Nation Writer, Wharton Hockey Club

 DAD3008
Red House Painters — Red House Painters

Grace Cathedral Park, Down Through, Katy Song, Mistress, Things Mean A Lot, Fun House, Take Me Out, Rollercoaster, New Jersey, Dragon Flies, Mistress (piano version), Mother, Strawberry Hill, Brown Eyes

 CAD3009
Heidi Berry — Heidi Berry

Mercury, Little Fox, The Moon And The Sun, One-String Violin, Darling Companion, Distant Thunder, Heart Like A Wheel, For The Rose, Follow, Ariel, Dawn

 BAD3010
Heidi Berry — The Moon And The Sun

The Moon And The Sun, Unholy Light, Zither Song, You Upset The Grace Of Living When You Lie

 (shuffle)
Various — 4AD Presents The 13 Year Itch

Lush / Desire Lines (demo), Kristin Hersh / Your Ghost (demo), Mistress (itch), Underground Lovers / Your Eyes (rerecorded), The Wolfgang Press / Peace On Fire, Unrest / Where Are All Those Puerto Rican Boys?, The Breeders / Invisible Man (demo), Bettie Serveert / Totally Freaked Out, Brendan Perry|R / Happy Time, Firefly (rerecorded), Pale Saints / One Blue Hill (demo), His Name Is Alive / The Time Falling Bodies Take To Light, This Is The Way (part 2)

 (shuffle)
Various — 4AD Presents The 13 Year Itch

The Breeders / Cannonball, Isabel (single), Dig For Fire (single), Pixies / Allison (Peter Scammell), Frank Black / Los Angeles (John Flansburgh), Bettie Serveert / Tom Boy (Jesse Peretz), The Wolfgang Press / Kansas, His Name Is Alive / Are We Still Married? (The Brothers Quay), His Name Is Alive / Lip (itch), His Name Is Alive / Can’t Go Wrong Without You (The Brothers Quay), This Mortal Coil / Late Night (Alexander Spaszt), Michael Brook / Breakdown (Miles Aldridge), Heidi Berry / The Moon And The Sun (Angela Conway), Red House Painters / 24 (Mark Taylor), Throwing Muses / Counting Backwards (Katherine Beickmann), Pale Saints / Blue Flower (Peter Scammell), Swallow / Oceans And Blue Skies, Lush / Superblast (Brett Turnbull), Ultra Vivid Scene / Blood And Thunder (Miles Aldridge)

 BAD3011
The Breeders — Cannonball

Cannonball, Cro-Aloha (rerecorded), Lord Of The Thighs, 900

 CAD3012
Unrest — Perfect Teeth

Angel I’ll Walk You Home, Cath Carroll, So Sick, Light Command, Food & Drink Synthesizer, Soon It Is Going To Rain, Make Out Club, Breather x.o.x.o., West Coast Love Affair, Six Layer Lake, Stylized Ampersand

 CAD3014
The Breeders — Last Splash

New Year, Cannonball, Invisible Man, No Aloha, Roi, Do You Love Me Now? (rerecorded), Flipside, I Just Wanna Get Along (rerecorded), Mad Lucas, Divine Hammer, S. O. S., Hag, Saints, Drivin’ On 9, Roi (reprise)

 BREED 2
The Breeders — untitled

Grungé (demo), New Year (demo)

 CAD C3013
Dead Can Dance — Into the Labyrinth

Yulunga, The Ubiquitous Mr. Lovegrove, The Wind That Shakes The Barley, The Carnival Is Over, Ariadne, Saldek, Toward The Within, Tell Me About The Forest, The Spider’s Strategem, Emmeleia, How Fortunate The Man With None

 BAD3015
Unrest — Cath Carroll

Cath Carroll (10 cc mix), Vibe Out!, Goodbye, Hydro

 CAD3016
Red House Painters — Red House Painters

Evil, Bubble, I am a Rock, Helicopter, New Jersey (remix), Uncle Joe (remix), Blindfold, Star Spangled Banner

 BADD3017
The Breeders — Divine Hammer

Divine Hammer (remix), Hoverin’, I Can’t Help It (If I’m Still In Love With You), Do You Love Me Now? (jr?)

 GU4
Insides — Euphoria

Walking in Straight Lines, Bent Double, Darling Effect, Distractions, Relentless, Skin Divers, Carly Simon, Yes, Skykicking

 GU4S
Insides — untitled

Further Distractions*, Turning Absentmindedly*

 GU5
Spoonfed Hybrid — Spoonfed Hybrid

Heaven’s Knot, Naturally Occurring Anchors, Tiny Planes, Stolen Clothes, Lynched, 1936, Getting Not to Know, Somehow Some Other Life, A Pocketful of Dust, Ecnalubma, Boys in Zinc

 GU5S
Spoonfed Hybrid — untitled

Bullet and Bees*, Messrs. Hyde*

 GU6
That Dog. — That Dog.

Old Timer*, Jump*, Punk Rock Girl*, Zodiac*, You are Here*, She*, Angel*, Westside Angst*, She Looks at Me*, Family Functions*, Ralna*, She Looks at Me (reprise)*, Just Like Me*, Paid Programming*, This Boy*

 GU6S
That Dog. — untitled

Buy Me Flowers*, Untitled*

This post is part of the chronological look at all 4AD releases, year by year.

*) Missing from Spotify.

Adventures in Netflix

I’ve been watching a buttload of 40s movies over the past few months, and I was thinking about watching something really modern next.

And then it occurred to me: How about if I watch all “Netflix Original” movies released in 2019? Sizzling fresh movies!

And if you’ve ever read this blog before, you’ll know there’ll be complications, right? Prepare to scroll for days!

According to Wikipedia, there were about 70? 80s? of these movies in 2018, so presumably there’ll be a similar amount this year.

What counts as a “Netflix Original” varies a bit, apparently. Some of these are produced (i.e., financed) by Netflix directly, and others are picked up for exclusive distribution by Netflix after it’s already been made, apparently. So perhaps I’ll be adjusting the criteria after having watched a few of the movies… or not? We’ll see.

But how to watch these movies? I have an Apple laptop now, so I could plug the laptop into the TV and watch it that way, but it turns out that Netflix limits the resolution on real computers to 1.4K (or, as some people quaintly call it, “720p”). That’s annoying, because the majority of Netflix Originals are available in 4K. I’d be getting, what, 15% of the pixels I could be getting?

(/ (* 4000 2000) (* 1400 720))
=> 7

Sad.

My TV is “smart”, but I’m not insane enough to ever let it go on the interwebs. I don’t want to 30kg brick in my TV room after an update or virus has had its fun with it.

But! I have a Chromecast Ultra! And Netflix allows 4K media on the Chromecast!

And I mean, I have to blog this thing, so I have to screenshot, right?

Right.

And you’re not supposed to be allowed to do that because that’s the whole point of Netflix limiting the resolution to devices that they control, and the HDCP 2.2 line to the TV is supposed to be unhackable OOOH DRM WOO WOO.

But of course people have been making devices to defeat all this nonsense.

First of all, I got an Ezcoo 4K HDMI splitter. It promises to be able to take a 4K input source and pass the HDCP 2.2 woo from a 4K TV to the device, thereby fooling it into thinking that it has a secure line.

Meanwhile, there’s another output on the splitter (that can either be 4K or 2K (some people quaintly call this “1080p”)) and you can put an HDMI recording device there.

I got an HDML Cloner Box Evolve, which promises to take a 2K input and has a remote that you can screenshot with. It can also record the entire video, but that’s not really what I’m interested in… And it’s probably called “HDML” to avoid having the HDMI people sue them? I’m just guessing.

Let’s plug all this in!

So pretty.

And the Chromecast is apparently satisfied: It allows 4K to pass to the TV, according to the TV.

But!

When looking at the output from the HDML Cloner Box Evolve, all the screenshots just said “INVALID FORMAT”.

And so the passthrough HDMI output on the Cloner Box says.

Is that coming from… the Cloner Box, the Ezcoo HDMI splitter, or from the Chromecast? And what’s invalid? The format on the SD card it’s writing to? The … HDMI format? What!??!!

But then I noticed this dip switch on the Ezcoo splitter. Downscaling to 2K is apparently not the default setting. The Cloner Box claims to be able to take a 4K signal (even if it only records in 2K), but perhaps this is the problem anyway?

Yes! Now it’s screenshotting!

OK, now I have a 4K path from the Chromecast to the TV, while being able to screenshot in 2K. Let’s see what the Netflix app thinks about all this!

As the control device, I’m using an Android tablet, and as the test movie, let’s go with Okja, because it’s in 4K and I’ve already seen it.

Let’s see… there it is…

I tap the Chromecast icon, and it offers to connect to it and stream from it.

Yes! On the TV!

Aha! Once I tapped the screencast logo, the “Ultra HD” (code word for 4K) popped up in the Netflix app.

And there’s Okja! Well, that’s not actually Okja but it’s Jake Gyllenhaal and that’s close enough.

And there’s Okja! On the screenshot from the Cloner Box. The image looks quite nice… The screenshot is 2K, of course, but whatevs.

And the TV says that whatever it’s getting from the Chromecast is still in 4K. But… is it?

Apparently, there’s no way to make the Netflix app say what resolution it’s streaming in, or what the bitrate is. Both are important for the video quality, of course: If you have a 4K video with a bitrate of nothing, you’ll get a really ugly picture. (I’m looking at you, Amazon Prime Video!) This looks pretty fine, I think? No obvious issues? And it’s at least 2K, I think.

Telling the difference between 2K and 4K can be pretty difficult. It’s just that when you’re watching in 4K you go “whoa” a lot more, but a lack of “whoa” doesn’t necessarily mean that it’s not 4K: It might just be the director not going for “whoa”.

(Cue Dear Reader going “if you can’t tell the difference, whyyyy!” and to you I just have to say: Phooey.)

What does the firewall say?

Hm…

It seems to vary between 3MB/s and 60MB/s? Oh, yeah, it’s buffering and then playing, so it’ll vary a lot… And I’m usually used to thinking about this a bitrates, not byte rates…

OK, let’s write a simple script:

#!/bin/bash

duration=$1
device=enp1s0
direction=TX
times=0

start=$(ifconfig $device | grep "$direction packets" | awk '{ print $5; }')
while [ $times -lt $duration ]; do
    sleep 1
    times=$(( $times + 1 ))
    end=$(ifconfig $device | grep "$direction packets" | awk '{ print $5; }')
    echo $(( (($end - $start) / 1000 / $times) * 8 ))
done

And then compare a “HD” thing to a “Ultra HD” thing. As the “HD” thing I chose the Teen Titans TV show.

Ermagerd. I’ve never used the Chromecast before… why is everything so washed out? The blacks are supposed to be black, not totally gray.

Oh, well, I’ll have to investigate that too, but not while doing the bitrate thing.

Ok, I got 778… er… so that’s less than 1MB/s?

Let’s try it again but multiply by 8 to get bitrate.

OK, now it says 24560, which means that it’s a bitrate of 24Mbps? Hm. Perhaps one minute is just too short a time to measure, what with all the buffering. Let’s give it ten minutes.

And while I’m waiting I can try to investigate the washed out/low saturation thing going on. Apparently there’s a lot of people on Google having the problem… Hm… One internet says that it’s a problem with TVs and Chromecast not managing to convey to each other what HDR format to use. OK, on my Sony A1E OLED TV I switched HDR from “auto” to “HDR10”, aaaand…

Yowza! That’s some black blackness and some super-saturated colours. But… is it right? The colours are way crazy…

Aaand… it says “5088”, so I guess 5Mbps. That sounds about like what I expected.

Let’s try with some “Ultra HD”. Like the Punisher TV series.

HDR10 seems to do the right thing there too. But is that 4K grain?

The script says that it’s streaming in 9064, i.e., 9Mbps. That’s not a lot for 4K media: A 4K bluray is about 35-50Mbps.

Let’s try to reproduce our findings!

  • Okja (UHD): 9.5Mbps
  • Men in Tights (HD): 7.6Mbps
  • Police Academy (HD): 7.6Mbps
  • Ready Player One (HD): 5.7Mbps
  • Bird Box (UHD): 6.6Mbps
  • Okja (again) (UHD): 6.1Mbps

Well… that was… inconclusive? When the bitrate varies by 50% on the same movie when playing at different times, that’s not very… helpful.

Perhaps I should have a device other than a Chromecast to do this. Or… perhaps the Chromecast should use ethernet and not wifi? The wifi network should do 30Mbps easily (and does when I test with a laptop), but who knows what the Chromecast is able to do?

Unfortunately the Chromecast can’t be on ethernet and wifi at the same time, and the wifi is on a separate “secure” network.

Everything is so complicated!

OK… what I should do is something I’ve wanted to do for years: Get some VLAN switches and create two separate wired networks, too.

I’ve had these dumb HP Procurve 1400-8G switches for more than a decade (as you can tell by the dust), and they’ve worked flawlessly. And I’ve had some flaky ones before that…

So what to buy? I’m extremely satisfied with the Procurve switches, so getting similar ones, but managed (i.e., with VLAN) instead would be an idea.

My additional requirements: The absolutely have to be fanless, and it would be nice if the power supply was internal, or at least small. I’ve had some HP switches where the power adapter is a huge monster, bigger than the switch, and that’s… just so… cumbersome? I mean, my network isn’t physically star-shaped, and involves three switches in series, and they’re all placed in pretty small spaces, so small and uncomplicated is better than big and complicated.

The first requirement should be a no-brainer: Virtually all of these small switches are fanless. But! HPE has this weird tendency to create lineups of switches with the same model name, and then there’s 8 port, 24 port, 48 port versions (in different form factors). And the larger ones have fans. So just going through all the spec sheets (because HPE helpfully just does one per series) is a hassle. And some of the models don’t explicitly say “no fan”, while other says “fan”, so…

And determining whether they have internal power supplies is impossible. There’s no pictures of the backs of the switches, and absolutely no pictures of the (possible) adapters.

But then I stumbled on this Netgear 8-Port Gigabit Web Managed Click Switch With 4-Port PoE+ (phew). The specs say that it has an internal power supply! The specs say “fanless”! *click* *buy*

See what doing proper specs do for sales, HP? SEE?!?!?!

So now I have three of these Netgears. I’m not sure whether Netgear makes good net gear or not, but I guess we’ll see.

Look! I’m being all proper and stuff and labelling the ports!

Setting up the VLAN stuff is really nice and trivial:

Couldn’t be simpler: The switch responds to a static IP address, so it’s easy to find, and has a built-in web server (which is nice and fast). Setting up a VLAN has never been this easy. Perfect.

The only thing that seems a bit janky here are the actual power connectors. They feel rubbery and don’t “click” in place, so it feels like they could, like, slide out without wanting to. It’s probably not a problem in practice, but that could have an improved feel to it.

Anyway! Chromecast now plugged into the “wifi” VLAN, so it can stream via ethernet while I control it from a WIFI tablet. Let’s see what bandwidth it uses now…

  • Okja (UHD) 17Mbps:
  • Men in Tights (HD): 7.8Mbps
  • Police Academy (HD): 8Mbps
  • Ready Player One (HD): 8.1Mbps
  • Bird Box (UHD): 16Mbps

Well, that’s better! The highest I had with WIFI was 9Mbps, so using ethernet it’s almost doubled. That’s a lot more bits to look at!

Meanwhile!

I bought an Apple TV because I just don’t trust Google not to fuck up. Especially since the Chromecast doesn’t seem to want to switch HDR on on my Sony A1E TV. Let’s see whether the Apple TV manages…

Hey, the Apple TV 4K isn’t as small at the first-generation Apple TVs used to be…

Let’s see whether it’s easy to set up…

Er… what? Uhm. *five minutes pass* Oh, you can click the top of the remote control! Apple UX discoverability is on point: Unless you know what you’re supposed to do, there’s absolutely no hint about how these devices are supposed to work…

Oh, never mind. There’s a manual included here. Oops. Yet another anti-Apple rant derailed by facts!

Uhm… it wanted to use an existing device to get the WIFI parameters etc, so I pulled out my Ipod Touch, which helpfully just said the above. Do you think “OK” takes you to the passcode setting? No? Correct.

After some googling I found out where it was hiding (in the obvious place), and we’re off!

And after getting the credentials transferred, I could switch the passcode on the Ipod Touch off again. So UX!

Hm… when it switches HDR on, the TV goes black? That’s not good…

As with the Chromecast, on “HDR Auto” everything is super-washed out, and when I switch HDR10 on, the blacks become properly black, but the colours are…. too much…

Hm… Oh! If I try to do 4K @ 60Hz HDR via the Ezcoo splitter box, it complains that the cable doesn’t have sufficient bandwidth. But if I do 4K @ 30Hz HDR, then it works fine, and the TV automatically detects the HDR and everything. Nice!

The Apple TV is certainly easier to deal with than the Chromecast which is extremely

But let’s do some benchmarking! Let’s do some of the same UHD movies and add some new ones:

  • Okja (UHD): 15Mbps:
  • Bird Box (UHD): 18Mbps
  • Alex Strangelove (UHD): 18Mbps

Well, that’s not too bad. A normal 4K Bluray usually is somewhere around 40-50Mbps, and taking into account that Netflix is probably using a slightly more efficient codec, I’m getting an acceptable product.

Well, OK, this seems to be the way to go: Apple TV 4K @ 30Hz HDR. See, it simple!

So now I just have to have a convenient way to get the screenshots onto the computer. I mean, I don’t want to have to futz around with an SD card that I have to plug into the HDML Cloner Box and then transfer to the laptop…

I mean, I’m bone lazy.

I thought I had a solution here: Use a Flashair SD card. I use them in my cameras, and I’ve set it up so that I snap a picture and then the picture is pulled down into this Emacs buffer I’m typing in now. It’s great.

But unfortunately, I can’t use that with the HDLM Cloner Box: First of all, the cards use the exfat file system, and the box only understands FAT and VFAT. And I can’t reformat the Flashair card, because then the OS on the card goes AWOL and there’s no longer any WIFI on it.

The second problem is that there’s a partition table on Flashair cards, and the Cloner Box wants to write to it partitionless (i.e., the difference between /dev/sda1 and /dev/sda).

So that’s no go.

I was momentarily excited about the Sandisk Connect Wireless Stick, but it turns out that you can’t talk to it wirelessly while it’s plugged in as a USB memory stick, so that’s a pretty useless thing.

Other WIFI SD cards exist, and I guess I could give them a go, but during my last investigation into those, I all the non-Flashair ones to suck in one way or another.

So I started thinking about whether Linux can emulate a USB mass storage device via a USB-A to USB-A cable somehow.

And the answer is… sort of? Normal USB chipsets in normal computers do not support this kind of tomfoolery, but the Raspberry Pi Zero W does via its USB on-the-go (OTG) port, which is wired directly to the CPU, so it can do whatever it wants. Or something.

So I’ve got a USB-A to USB-OTG adapter cable…

And the Zero W.

It’s so tiny! (Grapes for scale.)

And I got a case for it, and a mini-HDMI to HDMI adapter

The problem is that the case makes the mini-HDMI too recessed, so I can’t get any HDMI signals out of it. I wondered whether the Zero was broken or something, but…

So then I got HDMI and could see what I was doing. The HDMI seems to drop out whenever it’s doing something strenuous, but it’s good enough to do some setup stuff, at least.

Getting the thing to speak wifi took me hours and hours. I followed all of the how-tos on the net, but no matter how I tweaked the wpa_supplicant.conf file, iwconfig said that it hadn’t tried to connect to the access point.

Finally, I tried to do the simplest thing possible:

# wpa_supplicant -i wlan0 -c <(wpa_passphrase Beige PASSWORD)

And then it paired and got DHCP and everything!

So I just

# wpa_passphrase Beige PASSWORD > /etc/wpa_supplicant/wpa_supplicant.conf

and then it works after reboot.

This is with Debian Jessie Raspbian, because one of the million discussion threads about wifi not working on Raspberry Pis said that it was marginally less non-working.

So, after all that wasted time, it’s time to get USB gadget mode working! Should be a breeze!

I’m using this guide.

Let’s see… this isn’t, like, working…

But then a wise person on irc asked me “why are you using an OTG adapter if the Pi has an OTG port?” That was a very good question. I switched to a normal USB-A to Micro-USB cable, and immediately:

Feb 14 14:26:25 marnie kernel: [1271626.095533] usb 1-2: New USB device found, i
dVendor=0525, idProduct=a4a5
Feb 14 14:26:25 marnie kernel: [1271626.095540] usb 1-2: New USB device strings:
 Mfr=3, Product=4, SerialNumber=5
Feb 14 14:26:25 marnie kernel: [1271626.095545] usb 1-2: Product: Mass Storage G
adget
Feb 14 14:26:25 marnie kernel: [1271626.095549] usb 1-2: Manufacturer: Linux 4.9
.35+ with 20980000.usb
Feb 14 14:26:25 marnie kernel: [1271626.095553] usb 1-2: SerialNumber: deadbeef
Feb 14 14:26:25 marnie kernel: [1271626.096757] usb-storage 1-2:1.0: USB Mass St
orage device detected
Feb 14 14:26:25 marnie kernel: [1271626.097256] usb-storage 1-2:1.0: Quirks matc
h for vid 0525 pid a4a5: 10000
Feb 14 14:26:25 marnie kernel: [1271626.097412] scsi host1: usb-storage 1-2:1.0
Feb 14 14:26:26 marnie kernel: [1271627.123226] scsi 1:0:0:0: Direct-Access     
Linux    File-Stor Gadget 0409 PQ: 0 ANSI: 2
Feb 14 14:26:26 marnie kernel: [1271627.124775] sd 1:0:0:0: Attached scsi generi
c sg1 type 0
Feb 14 14:26:26 marnie kernel: [1271627.125370] sd 1:0:0:0: [sdb] 4194304 512-byte logical blocks: (2.15 GB/2.00 GiB)

Success! The Pi shows up as a mass storage device.

But having the file system open on the Pi while the other host is writing to the backing file isn’t a good idea: Things get very confused. So only one thing that writes should have it open at a time.

So let’s try it with the HDML Cloner Box:

You can clearly see the USB-A cable from the Cloner Box going to the Pi Zero, right? Right.

And… it works! I got two screenshots over!

Uhm… I hope that status line goes away…

So my script is basically:

ssh $host mount /mnt/usb
rsync -av $host:/mnt/usb/ ~/films/"$film"/
ssh $host umount /mnt/usb

And that seems to work pretty reliably? At least during the ten minutes I’ve been testing.

Let’s see… Click on the remote, run the script and then this is here:

But… that looks really, really washed-out? Hm… Oh, yeah. It’s HDR? So I should probably run it through something to get to a better colour space?

Perhaps if I do

convert -contrast-stretch 0.20x0.10% IMG_53.JPG norm.jpg

Well, that’s better! But is that the right transform for HDR-screenshot-to-8bit? Probably not? I tried googling this pressing, universal problem, but didn’t find any ready-made solutions…

Excuse me?

Well, that went well! See how easy it is to watch 4K content from Netflix?

I mean, if you’re me?

Anyway, in conclusion:

I’m looking forward to watching some new movies, and I think it’s annoying that Netflix makes it so difficult to see if you’re getting what you pay for.

I realise that this makes things much easier for customer support: They don’t have to field calls from customers saying “I’m on the 4K plan, and I’m watching a Star Wars movie, but the bitrate says 6Mbps”. Understandable! But if you sold a product in a different arena, and made it virtually impossible for any normal customers to check whether you get what you’re paying for, then there’s be consequences. Perhaps?

Perhaps not.

[Edit several months later: Somebody wondered whether I went on to actually watch Netflix and write about them? I did, and you can read about it here! I’ve suffered through all 2019 “Netflix Originals”. When the year is over I’ll even write a recap, but SPOILERS: It doesn’t turn out well for Netflix.]