Restaurant preferences mapped [Published articles]

Simon Rogers, a data journalist and data editor at Google, created a series of maps showing the regional popularity of certain kinds of restaurant.

Our Favorite Groundhog Day Time Loops in SFF [Published articles]

The now-classic Groundhog Day flirts with (and breaks) the rules of multiple movie genres: romantic comedy, time travel narrative, small town dramedy, spiritual redemption tale—and it’s also given birth to an entire subgenre of its own. The “Groundhog Day episode” is a mainstay of many television series, and the plot even pops up in films, novels, and short fiction. It’s a fun way to play with established characters, putting your faves through the emotional wringer while trying to solve a murder or stop a crime. And it can be an equally effective tool for riffing on entire genre tropes; mixing in high school drama, slasher horror, or other well-worn genres can lead to some fascinating mashups. And in (almost) all cases, the protagonist stuck in the time loop comes out on the other side all the better.

We’ve compiled a list of our favorite Groundhog Day riffs and the most memorable time loops in SFF. Take a break from listening to “I Got You Babe” for the nth time and instead check out these 14 recursive tales.

 

Farscape: “Back and Back and Back to the Future”

Farscape "Back and Back to the Future" time loops SFF Groundhog Day

It takes guts to do a Groundhog Day episode at the start of your run, but that’s exactly what Farscape did in their fifth episode. When new guests appear on Moya, blood cousins of D’Argo’s species, John begins having flashes of the future where different sets of people wind up dead. He finds it difficult to explain to most of the crew members—they are still reticent to trust him as an odd, volatile species that they know nothing about—but eventually settles on trying to communicate this strange occurrence to Zhaan. From that point on, John finds himself trapped in a loop where he begins by telling Zhaan what he believes is wrong, then drops a precious glass mask that belongs to her, and afterwards fails to prevent the deaths of his shipmates. Eventually John learns that he’s suffering temporal dislocation as a result of the black hole weapon their guests have brought onto Moya without the crew’s knowledge. After a few runarounds with different permutations of the scenario, John finally figures out how to convince his friends of what’s happening, and they Starburst away before the black hole weapon can destabilize and kill them all. —Emily Asher-Perrin

 

Happy Death Day

Happy Death Day Groundhog Day SFF time loops

Blumhouse Productions’ 2017 Halloween offering has a pretty unbeatable premise: Groundhog Day crossed with a slasher film, in which co-ed Tree (short for Theresa) is endlessly chased and killed by a psycho with a knife wearing a nightmare-fodder cartoon baby mask on her birthday. Every time she gets murdered, she wakes up on her birthday again. Happy Death Day refreshes the time loop premise by making the archetype who would usually bite the dust early in the movie—that is, the clueless sorority girl—self-aware and active in her own fate; as she retains memories of the previous days, she’s able to begin anticipating the killer’s approach to try and evade her own murder. As Tree learns to pay attention to her sorority sisters and the sweet underclassman trying to help her stay alive, as she investigates red herrings and reconciles with estranged family on what is already an emotional bulldozer of a day, she slowly transforms herself into a Final Girl.

Now, the movie doesn’t quite deliver on its excellent trailer, as there’s too much bloat in the middle while Tree is still figuring out how to break free of her time loop and not enough subterfuge surrounding the identity of her killer. But lead actress Jessica Rote is a snarky, gutsy comic gem and should totally be cast in more trope-defying movies. While you’ll probably guess Happy Death Day’s ending a mile away, as we’ve learned from these types of stories, the fun is in the journey, not the destination. —Natalie Zutter

 

The Good Place

The Good Place

There’s no way to talk about this without spoilers for season one, so skip ahead if you’re not caught up!

In its first season, The Good Place trundled along disguised as a brilliant fish-out-of-water sitcom in which deceased human trashfire Eleanor Shellstrop is sent to “The Good Place” by mistake and has to pretend to belong. In the season finale, it pulled all the rugs out from everyone when Eleanor realized that “The Good Place” was actually “The Bad Place”—an afterlife of unending psychological torture. And froyo.

The second season blew the concept open, running through a montage of scenarios in which one of the four main characters figured the twist out within months, days, or even minutes of being introduced to the “Good” Place. Finally, in “Dance Dance Resolution,” they learn that they’ve gone through over 800 iterations of their life in The “Good” Place, and decide to team up with Michael, the demon who has been tormenting them. The show stops being a simple riff on a time loop story, and instead digs into the emotional underpinnings of Groundhog Day: Michael, formerly self-assured and happily evil, is going through one humdinger of an existential crisis. The second half of season 2 has focused on Michael’s quest to be “good”—all while trying to keep his boss from finding out. —Leah Schnelbach

 

The Vampire Diaries

There are worse times to be stuck in than 1994. But there’s always a catch, right? And in The Vampire Diaries’ sixth season, the catch is that Bonnie Bennett (sans her magical powers) and Damon Salvatore (still a vampire) are trapped in a prison world that was meant to hold a really irritating serial killer. At first, reliving May 10, 1994 isn’t that bad: they camp out in the Salvatore house, the grocery store seems to restock itself, and Damon gets pretty decent at making waffles. (Why they’re there is just too much to get into; have you watched this show? Summarizing it in a way that makes sense is a highly specialized art form.) After four months, someone else fills in a clue on their crossword puzzle. When they meet this someone—Kai, played by Chris Wood (you may know him as Supergirl’s Mon-El)—he’s spiked the bourbon in the grocery store with toxic-to-vampires vervain, rendering Damon helpless. It’s all a big ploy to motivate Bonnie to get her magic back, and did I mention this show is convoluted? I shan’t get into the drama that getting out of the prison world entails, as we’d be here all day. This plotline subjected us to way too much of Kai’s murdery annoyingness, but at least it also gave Bonnie and Damon’s friendship a chance to develop further. He’s a semi-reformed jerk and she’s a witch who’s been put through the wringer and then some; 1994 is hardly the worst thing they’ve faced. —Molly Templeton

 

The Sandman: Endless Nights by Neil Gaiman and Dave McKean

Sandman: Endless Nights by Neil Gaiman, art by Frank Quietly

Art by Frank Quitely

Endless Nights is a collection of graphic vignettes about Neil Gaiman’s Endless, the seven siblings who are—in a sense—the building blocks of our universe. The final story of these is concerned with Destiny, its title eponymous with the title of the whole tome. In it, Destiny walks through his garden, his book chained to his wrist. The narrative addresses the reader in second person, and “you” are informed that Destiny’s book contains between its pages every moment of your life, and every moment of every other life. Everything you know and do not know. Everything you believe and do not believe. Every other person who will live and die in this universe. The story tells you that one day the book will be over and no one knows what will come after it is finished. But Destiny turns the page of his book… and walks through the garden, his book chained to his wrist… —EAP

 

Lost in a Good Book by Jasper Fforde

Cover art by Mark Thomas (Hodder & Stoughton, 2002)

In an alternate 1985 where computers haven’t been invented but literature is protected at Fort Knox and time travel is de rigeur, one of the cruelest and most unusual forms of punishment is Closed Loop Temporal Field Containment: Pop a criminal into the same eight-minute time loop on repeat for anywhere from five to twenty years, and by the time they’re freed, they won’t know heads or tails enough to want to return to that life. Literary detective Thursday Next acknowledges the brutality of this warped form of justice, yet its true effect doesn’t really sink in until she gets in the middle of a fight between the ChronoGuard and her target:

I yelled, “NO!” and pulled out my gun and aimed it at the man who held Billden.

I yelled, “NO!” and pulled out my gun and aimed it at the man who held Billden.

I yelled, “NO!” and pulled out my gun and aimed it at the man who held Billden.

I yelled, “NO!” and pulled out my gun and aimed it at the man who held Billden.

I yelled, “NO!” and pulled out my gun and aimed it at the man who held Billden.

I yelled, “NO!” and pulled out my gun and aimed it at the man who held Billden.

And so forth for about a page until she suddenly comes to, disarmed and disoriented. In the case of Jasper Fforde’s novel, the time loop is an obstacle, not an aid, to Thursday ensuring that her husband is born, instead of erased from this timeline. But it does change her outlook on the punishment itself. —NZ

 

Stargate SG-1, “Window of Opportunity”

Stargate SG-1 "Window of Opportunity" time loops SFF Groundhog Day

On a mission to a planet experiencing strange solar activity, the SG-1 team has a run-in with an archaeologist who seems a tad unbalanced. Following a geomagnetic disturbance, Jack O’Neill and Teal’c both find themselves trapped in a time loop of this day over and over. They attempt to explain this to Daniel Jackson, Sam Carter, and General Hammond with varying levels of success as the loop plays out, but fail to prevent numerous iterations over the course of many months. Because Daniel (their resident linguist, archaeologist, and anthropologist) is not a part of the time loop, Jack and Teal’c are forced to learn and memorize the alien language on the solar-wobbly planet in an effort to break the loop. Daniel also points out that a time loop allows them to do what they want without consequences, however, which leads to a series of antics on their part—they play golf through the Stargate, Jack rides a bike through the SGC, they both learn to juggle. Eventually they find out that the archaeologist they encountered on their mission is attempting to use incomplete time travel technology of the Ancients, trying to get more time with his dead wife. Jack, who lost his son some years back, appeals to the man to get him to shut down the loop. —EAP

 

The Tunnel Under the World” by Frederik Pohl

In Pohl’s disturbing short story (the only tale on the list that actually predates Groundhog Day), Guy Burckhardt wakes up on June 15 screaming from a nightmare of an explosion. As he goes about his normal day in Tylerton, he can’t shake the oddness of certain details being off, primarily all of life’s little annoyances—a stuck door latch, a loose floorboard—suddenly smoothed over. Then there’s the matter of all of the goods and services being hawked at him, from a blaring truck advertising freezers at 6 a.m., to the newspaper stand guy basically paying him to try a new brand of cigarettes, to the most unpleasant, jingle-laden elevator ride to his job. But weirdest of all is when he goes to sleep, and wakes up the next morning—on June 15, except he’s the only one who realizes he’s living the same day, albeit with a whole new set of carefully curated advertisements, over again. As Guy struggles to escape this seeming time loop, he discovers the true purpose of Tylerton and his own fate. —NZ

 

The Dark Tower Series by Stephen King

The Dark Tower, Idris Elba

Though it took some time to reveal the truth (an entire series of books, when all was said and done), the Dark Tower series is perhaps the greatest Groundhog Day story arc in all of genre fiction—though it’s more like a Groundhog Quest than one simple day repeating. The tale follows the Gunslinger Roland on his journey to the Dark Tower and the people he brings with him… and often loses along the way. But after who-knows-how-many cycles of this tale, Roland finally learns that he has reached the Dark Tower before, many times, and that he keeps having to repeat this quest, presumably in order to get it right. At the end of The Dark Tower VII, Roland is sent back to the beginning yet again, but with something that he lacked in his previous journeys: the Horn of Eld. Stephen King himself said that the Dark Tower film of 2017 was meant to be Roland’s final run to the Tower, and true to the book series finale, Idris Elba’s Roland has the Horn of Eld when he begins his journey. With the end of the film seeing Roland and Jake head off on a brand-new adventure, it would seem that the cycle is finally broken, 35 years after the first book appeared on shelves. —EAP

 

The X-Files, “Monday”

The X-Files, Monday

The episode opens with the shocking image of Mulder bleeding out from a gunshot wound. He and Scully have been caught in a bank robbery, and when Scully tries to reason with the gunman, he reveals a homemade bomb, and detonates it rather than surrendering to the police. And thus the show ended in its sixth season without ever solving… oh, wait. In the next scene Mulder wakes up to discover that his waterbed has sprung a leak (because of course Mulder has a waterbed) and for a few minutes it seems like the bank robbery was a nightmare—until he ends up back in the bank with Scully, and the same bomber walks in. It soon becomes clear to the audience that the agents are trapped in a loop that always ends in the same horrific explosion. It also becomes clear that the only one aware of what’s happening is the bomber’s girlfriend, Pam, at one point telling Mulder that she’s spoken to him over fifty times—and of course she’s the only one who can break the cycle.

The episode is a perfect riff on Groundhog Day because it plays with the idea of time itself getting stuck. This isn’t just Mulder or Pam living this day over and over, it’s every single person in the bank, and everyone affected by their deaths. Plus it makes for a particularly great X-File because it implies that giant, horrifying mysteries are unfolding around Mulder and Scully all the time, without their knowledge. How long have they been trapped in this loop? How many other loops have they stumbled into and escaped, without ever knowing it? —LS

 

Supernatural, “Mystery Spot”

Supernatural, Mystery Spot

Poor Sam Winchester can’t catch a break. His brother Dean is already running on borrowed time (after signing over his soul to a demon to bring Sam back from the dead), with only a year left to live. Then one day Dean bites the dust ahead of schedule—but Sam wakes up to the exact same day all over again. Except this time he tries to change things, and Dean just dies a different way. And then he wakes up to the same day, and Dean dies again. And again. What’s worse, every morning Sam wakes up to Asia’s “Heat of the Moment,” which Dean dances along to vigorously. It’s a very peculiar version of hell, which Sam eventually learns is being run by a Trickster (who is later revealed to be the archangel Gabriel… yeah, it’s a long story) he and his brother had a run-in with a year ago. When Sam commands that they are released from the time loop, Dean dies again, but this time he stays dead and leaves his little brother cradling his body, whispering “I’m supposed to wake up…” Sam goes a bit dark-side trying to hunt down the Trickster and force him to fix this rotten timeline. The Trickster later explains that in a way, he’s trying to help; he wants Sam to learn how to cope without his big brother. But it undoubtedly leaves little Sammy scarred after countless days watching his brother get murdered in increasingly creative (though sometimes hilarious) ways. —EAP

 

Before I Fall by Lauren Oliver

Before I Fall movie poster Lauren Oliver book Groundhog Day time loops SFF

Before Tree was outwitting a serial killer in Happy Death Day, another vapid bitch was confronting her own mortality in a time loop: Oliver’s 2010 YA novel has beta mean girl Sam reliving “Cupid Day” (a.k.a. February 12) over and over after her first go-round ends with her dying in a grisly car accident driving with queen bee Lindsay. At first thinking that she’s been granted a second chance without strings, Sam soon comes to realize that the only reason she hasn’t passed on is because she must change something about her fate—not her death, but someone else’s. Playing out different iterations of Cupid Day also allows Sam to grapple with the stages of grief: denial that the day will end her life; anger at Lindsay for bullying her before she joined their clique, spurring her on to hang out with other students she had written off; bargaining to save her own life; depression, which manifests in uncharacteristic recklessness; and, finally, acceptance. —NZ

 

Doctor Who, “Heaven Sent”

Doctor Who "Heaven Sent" time loops SFF Groundhog Day

Doctor Who takes on this plot by refusing to let you in on the time loop secret during your first go-round. Following Clara Oswald’s seeming death, the Doctor finds himself in an empty castle where a mysterious creature known as the Veil stalks him as he tries to makes sense of the place. Clues in the castle direct him to room 12, where there is a wall of Azbantium, a substance 400 times harder than diamonds. It is eventually revealed that the Doctor has left a message for himself in this maze; the word “bird” drawn in the sand next to the teleportation chamber he arrived in, a reference to the Brothers Grimm tale “The Shepherd Boy,” where a bird wears down a mountain with its beak. The Doctor keeps dying after being touched by the Veil, only to reconstitute himself via the teleportation chamber, make his way back to room 12, and continue punching his way through the Azbantium wall over the course of several billion years. After all that time, he breaks through the wall and finally emerges on Gallifrey, having taken “the long way around” to find his way home. —EAP

 

Heir Apparent by Vivian Vande Velde

After marrying virtual reality with Dungeons & Dragons-esque fantasy in User Unfriendly, Vivian Vande Velde throws in a dash of video game commentary in this 2002 book set in the same universe and starring Giannine, one of the members of the prior book’s Rasmussem, Inc. campaign. This time, she’s been gifted a certificate to try out a single-player VR experience at one of Rasmussem’s gaming centers, instead of in the comfort of her own basement. In the game Heir Apparent, she is the illegitimate heir of a dead king, who has left her the throne over her three half-brothers. As Janine de St. Jehan, she must survive three days of game time to make it to her coronation. Giannine promptly starts the game and gets cut down.

Heir Apparent is a cheeky riff on video games with infinite lives, where the player must retread the same digital ground over and over, learning the quirks of cliff jumps or nabbing power-ups, where death is simply one step backward. Until, that is, a well-meaning group of “concerned citizens” breaks into the Rasmussem center and destroys the game’s failsafe… meaning that Giannine, neurally hooked up to the game, will suffer brain damage if she disconnects or if she doesn’t solve the game quickly enough. Suddenly, she doesn’t have the safety net of dying every time she crosses paths with a werewolf prince or fails to recite a poem that fails to satisfy the the saint statue guarding a powerful ring.

The definition of insanity is doing the same thing over and over again expecting a different outcome. In that case, you could call Giannine and her fellow gamers insane—until, that is, they hit upon that one little change that restores their sanity. While Giannine’s time loop doesn’t alter her character as drastically as Phil Connors’ or even Tree’s, Heir Apparent still lets her play out real-life frustrations—namely, her strained relationship with her father—in a virtual landscape and work toward mending her actual existence. —NZ

 

What are your favorite time loops in SFF?

As a boy, Ronald Clark literally lived in a New York Public Library [Published articles]

In the 1940s, Ronald Clark's father was a custodian at the New York Public Library's Washington Heights Branch. That meant he and his family lived in an apartment in the library. Here's an animated StoryCorps video about Clark's childhood in "The Temple of Knowledge" and "creeping down to the stacks in the middle of the night when curiosity gripped him."

Can any composer equal Bach? [Published articles]

A skin of Castle Wolfenstein where all you do is pet dogs [Published articles]

In the original 1992 Castle Wolfenstein 3D, you fought off Nazis and their dogs.

Now there's a mod called Woof3D -- also known as "Return to Castle Woofenstein" -- which removes all the nazis and the guns, and all you do is ... pet the dogs.

As the creator explains:

There's a big ol' castle full of dogs wanting pats and you're the one to pet them. Sorry, they jump up on you, I hope you don't mind dog paw prints on your jeans. Just pat them and they'll fall asleep pretty quick.

Windows only! My son installed the game on his Windows PC and we played it, and I was surprised to find that it's actually kind of hard -- I'd expected that the dogs just, y'know, licked you or stuff, but it turns out they also jump on you and deplete your health, so you can be licked to death, I guess. They do seem to fall asleep pretty quickly with a pat or two, though.

There's some fun in-game art, too ...

Facebook fallout: How to protect your data [Published articles]

Is it time to end your Facebook life? At the very least, it's time to check Facebook privacy settings/audit apps/turn off API sharing.

Rapper covers Dr. Seuss' "There's a Wocket in My Pocket!" with a Migos beat [Published articles]

Rapper Win Nevaluze (along with Jay Lava aka ScatterBrains News) rhymed Dr. Seuss' There's a Wocket in My Pocket! over the beat of Migos' and Drake's “Walk It, Talk It”.

How fun!

(Neatorama)

Programmer Unveils OpenGL Bindings for Bash [Published articles]

Slashdot reader silverdirk writes: Compiled languages have long provided access to the OpenGL API, and even most scripting languages have had OpenGL bindings for a decade or more. But, one significant language missing from the list is our old friend/nemesis Bash. But worry no longer! Now you can create your dazzling 3D visuals right from the comfort of your command line! "You'll need a system with both Bash and OpenGL support to experience it firsthand," explains software engineer Michael Conrad, who created the first version 13 years ago as "the sixth in a series of 'Abuse of Technology' projects," after "having my technical sensibilities offended that someone had written a real-time video game in Perl. "Back then, my primary language was C++, and I was studying OpenGL for video game purposes. I declared to my friends that the only thing worse would be if it had been 3D and written in Bash. Having said the idea out loud, it kept prodding me, and I eventually decided to give it a try to one-up the 'awfulness'..."

Share on Google+

Read more of this story at Slashdot.

The Universe Is Not a Simulation, but We Can Now Simulate It [Published articles]

Computer simulations have become so accurate that cosmologists can now use them to study dark matter, supermassive black holes, and other mysteries of the real evolving cosmos.

Fixing bufferbloat on your home network with OpenBSD 6.2 or newer [Published articles]

One word. [Published articles]

Classic Sci-Fi Star Systems Keep Getting Ruined by Science [Published articles]

Having recently discussed some possible SF solutions to the vexing problems posed by red dwarf stars, it makes a certain amount of sense to consider the various star systems that have served as popular settings for some classic science fiction—even if science has more or less put the kibosh on any real hope of finding a habitable planet in the bunch.

In olden days, back before we had anything like the wealth of information about exoplanets we have now1, SF authors playing it safe often decided to exclude the systems of pesky low-mass stars (M class) and short lived high-mass stars (O, B, and A) as potential abodes of life. A list of promising nearby stars might have looked a bit like this2

 

Star System Distance from Sol
(light-years)
Class Notes
Sol 0 G2V
Alpha Centauri A & B 4.3 G2V & K1V We do not speak of C
Epsilon Eridani 10.5 K2V
Procyon A & B 11.4 F5V – IV & DA
61 Cygni A & B 11.4 K5V & K7V
Epsilon Indi 11.8 K5V
Tau Ceti 11.9 G8V

After Tau Ceti, there’s something of a dearth of K to F class stars until one reaches 40 Eridani at about 16 light-years, about which more later. And because it is a named star with which readers might be familiar, sometimes stories were set in the unpromising Sirius system; more about it later, as well.

There are a lot of SF novels, particularly ones of a certain vintage, that feature that particular set of stars. If one is of that vintage (as I am), Alpha Centauri, Epsilon Indi, Epsilon Eridani, Procyon, and Tau Ceti are old friends, familiar faces about whom one might comment favourably when it turns out, for example, that they are orbited by a pair of brown dwarfs or feature an unusually well-stocked Oort cloud. “What splendid asteroid belts Epsilon Eridani has,” one might observe loudly, in the confident tone of a person who never has any trouble finding a seat by themselves on the bus.

In fiction, Procyon is home to L. Sprague de Camp’s Osiris, Larry Niven’s We Made It, and Gordon R. Dickson’s Mara and Kultis, to name just a few planets. Regrettably, Procyon A should never ever have been tagged as “possesses potentially habitable worlds.” Two reasons: solar orbits and Procyon B’s DA classification.

Procyon is a binary star system. The larger star, Procyon A, is a main-sequence white star; its companion, Procyon B, is a faint white dwarf star. The two stars orbit around each other, at a distance that varies between 9 and 21 Astronomical Units (AU).

Procyon A is brighter than the Sun, and its habitable zone may lie at distance between 2 and 4 AU. That is two to four times as far from Procyon A as the Earth is from our Sun.

Procyon B is hilariously dim, but it has a very respectable mass, roughly 60% that of our Sun. If Procyon A were to have a planet, it would be strongly affected by B’s gravitational influence. Perhaps that would put a hypothetical terrestrial world into an eccentric (albeit plot-friendly) orbit…or perhaps it would send a planet careening outside the system entirely.

But of course a hypothetical planet would not be human- or plot-friendly. B is a white dwarf. It may seem like a harmless wee thing3, but its very existence suggests that the whole system has had a tumultuous history. White dwarfs start off as regular medium-mass stars, use up their accessible fusion fuel, expand into red giants, shed a surprisingly large fraction of their mass (B may be less massive than A now but the fact that B and not A is a white dwarf tells us that it used to be far more massive than it is now), and then settle down into a long senility as a slowly-cooling white dwarf.

Buy it Now

None of this would have been good for a terrestrial world. Pre-red giant B would have had an even stronger, less predictable effect on our hypothetical world’s orbit. Even if the world had by some chance survived in a Goldilocks orbit, B would have scorched it.

This makes me sad. Procyon is, as I said, an old friend.

[I’ve thought of a dodge to salvage the notion of a potentially habitable world in the Procyon System. Take a cue from Phobetor and imagine a planet orbiting the white dwarf, rather than orbiting the main(ish) sequence star. We now know that there are worlds orbiting post-stellar remnants. This imaginary world would have to be very close to Procyon B if it is to be warm enough for life, which would mean a fast orbit. It would have a year about 40 hours long. It would be very, very tide-locked and you’d have to terraform it. Not  promising. Still, on the plus side, the planet will be far too tightly
bound to B for A’s mass to perturb it much. Better than nothing—and much better than the clinkers that may orbit A.]

A more reasonable approach might be to abandon Procyon as a bad bet all round and look for a similar system whose history is not quite as apocalyptic.

It’s not Sirius. Everything that is true of Procyon A and B is true for Sirius A and B as well, in spades. Say goodbye to Niven’s Jinx: if Sirius B didn’t flick it into deep space like a bleb of snot, it would have cinderized and evaporated the entire planet.

But…40 Eridani is also comparatively nearby. It is a triple star system, with a K, an M and a DA star. Unlike Procyon, however, B (the white dwarf) and C (the red dwarf) orbit each other 400+ AU from the interesting K class star. Where the presence of nearby Procyon B spells complete annihilation for any world around Procyon A, 40 Eridani B might only have caused a nightmarish apocalypse of sorts. The red giant might have pushed any existing world around A from ice age into a Carnian Pluvial Event, but it would not have gone full Joan of Arc on the planet. The shedding of the red giant’s outer layers might have stripped some of the hypothetical world’s atmosphere…but perhaps not all of it? The planet might have been turned from a volatile rich world into a desert, but life might have survived—it’s the kind of planetary backstory Andre Norton might have used.

 


1: We had Peter Van de Kamp’s claims about planets orbiting Barnard’s Star, Lalande 21185, 61 Cygni, and others but those failed to pan out.

2: With slightly different values for distance and type, but I don’t have any of my outdated texts handy. Also, ha ha, none of the sources I had back then ever mentioned the ages of the various systems, which (as it turns out) matter. Earth, after all, was an uninhabitable armpit for most of its existence, its atmosphere unbreathable by us. The ink is barely dry on Epsilon Indi and Epsilon Eridani. Don’t think Cretaceous Earth: think early Hadean.

3: Unless you know what a Type 1a supernova is.

In the words of Wikipedia editor TexasAndroid, prolific book reviewer and perennial Darwin Award nominee James Davis Nicoll is of “questionable notability.” His work has appeared in Publishers Weekly and Romantic Times as well as on his own websites, James Nicoll Reviewsand Young People Read Old SFF (where he is assisted by editor Karen Lofstrom and web person Adrienne L. Travis). He is surprisingly flammable.

SNES.party lets you play Super Nintendo with your friends [Published articles]

Hot on the heels of the wonderful NES.party comes Haukur Rosinkranz’s SNES.party, a site that lets you play Super Nintendo with all your buds.

Rosinkranz is Icelandic but lives in Berlin now. He made NES.party a year ago while experimenting with WebRTC and WebSockets and he updated his software to support the SNES.

“The reason I made it was simply because I discovered how advanced the RTC implementation in Chrome had become and wanted to do something with it,” he said. “When I discovered that it’s possible to take a video element and stream it over the network I just knew I had to do something cool with this and I came up with the idea of streaming emulators.”

He said it took him six months to build the app and a month to add NES support.

“It’s hard to say how long it took because I basically created my own framework for web applications that need realtime communication between one or more participants,” he said. He is a freelance programmer.

It’s a clever hack that could add a little fun to your otherwise dismal day. Feel like a little Link to the Past? Pop over here and let’s play!

Deploying Kubernetes clusters in increasingly absurd languages [Published articles]

We live in a wonderful time for shitty kitchen appliances. [Published articles]

How The Shining's Camera Creates Constant Unease [Published articles]

The Shining is a brilliant film, and it’s a scary film, and those two things are for the same reason.

Read more...

Snapshot from the heroic era of mobile computing [Published articles]

MJ Carlson calls this photo from a 1980s computer science textbook "the most glorious stock photo of all time." She is correct.

How The Internet Saved the Home of Blogging Pioneer Noah Grey [Published articles]

At the end of the year 2000, Noah Grey created the free and open-source blogging software Greymatter (now maintained by a community of users). Wil Wheaton's new book describes it as "the original, primordial blogging platform. Blogs look like they do... because Noah Grey did it first." Three days ago Noah Grey created a Gofundme campaign headlined "I am losing my home in four days." "I am deeply ashamed and afraid of having to doing this, but I have no choice." My sister and I are about to lose our house. It's being foreclosed next Tuesday (May 3rd)... unless we can pay $35,000 before then. (We could pay $23k and get to keep the house for now, but will be left to pay off the rest over an unknown amount of time....) I don't know who among the few friends I have that will read this can contribute anything at all, and heaven knows I understand.... [T]his was sprung on us with no warning, and having the money ready to go is our only salvation.... Noah's plea was retweeted by long-time geeks who remembered his contribution, including tech entrepreneur Anil Dash as well as the founder of Harvard's Nieman Lab. And a San Antonio newspaper reported on another response from Texas: Alex Mahan, the brand director of Lockheed Martin, wrote on Twitter: "I coded my first blog in 2000 with Greymatter. If it weren't for Noah, I might not have had a career in web development. He was always helpful and patient with my beginner questions back then. Please throw down some $ if you are able." Wil Wheaton himself apparently got involved. (Several people made donations along with the tagline #WilSentMe.) And with an average donation size of $95.87, a total of 1,073 people ultimately donated... $102,873. By the end of the day Friday, wearing a t-shirt that says 127.0.0.1, Noah Grey shared a tearful video on Twitter. "This has been the craziest, most emotionally overwhelming day of — of my life.... Oh my god, thank you. It hardly even feels like enough to say the words. But thank you so much. Everybody, oh my god... It may take me time to respond to all of this, but I will — I will.... I have never felt so seen. I have never felt so — I've never felt embraced by the internet before. "I've seen some say this feels like 'the Old Internet' in action...." Grey posted on Twitter this weekend. "But 20+ years ago I was still a struggling mentally-ill man who wanted to matter... and never dared let himself feel he *might* til now. I am shattered with gratitude."

Read more of this story at Slashdot.

Undone Season 2 Undertakes a Deeply Emotional (But Still Trippy as Hell) Journey [Published articles]

Becca and Alma trip the light fantastic.
Image: Prime Video

Undone—Amazon’s thought-provoking, rotoscope-animated exploration of the limits of reality and possibly sanity, from creators Kate Purdy and Raphael Bob-Waksberg (BoJack Horseman)—is back for a second season, which means that tremendous season one cliffhanger can be finally resolved. So did Alma (Rosa Salazar) find what she was looking for in that cave, or what?

Spoiler warning aside, this review won’t actually be spoiling much about Undone season two. But we do have to address one huge spoiler that’s revealed early in the first episode. Season one of Undone was all about Alma’s quest to find out more about her father, Jacob (Bob Odenkirk)—a scientist who died in a car crash when she was a child, but who suddenly started appearing to her after she herself nearly died in a car crash. With his encouragement—though it was never clear if Jacob was really haunting his daughter, or if Alma was suffering a brain injury or, more likely, mental illness—she became obsessed with piecing together the mystery surrounding his death. Then, despite increasing concerns from her mother, Camila (Constance Marie), and younger sister, Becca (Angelique Cabral), Alma became determined to use her newfound time-travel abilities to reset the timeline so that Jacob could have a second chance.

This quest led her to that cave in Mexico, where we left her anxiously waiting at the end of season one. As season two begins, well... we find out that Alma succeeded! So all of season one really did happen—and Alma really does have some fantastic, reality-bending powers. In this new timeline, Jacob is alive. Alma and Becca have had many more years with their father, and Camila’s had just as many with her husband. Alma’s life is now perfect, right? Well... we wouldn’t have a season two of Undone to work through if that was the case, would we?

He’s aliiiiive!
Image: Prime Video

When Alma (from the season one timeline) enters the new timeline (where Jacob is alive, but remembers the timeline when he died, as well as his interactions with Alma from beyond the grave), she finds her formerly messed-up life is eerily on track. You see, a version of Alma’s been there all along, and now her consciousness retains memories from both lives. “You’re gonna love this life,” Jacob assures her, and for a little while, things do seem great. No longer a boozy ne’er-do-well, Alma is now a successful college professor; she also has two new skills that become important as season two continues: she’s an excellent piano player, and she speaks fluent Spanish. She is still using a cochlear implant to hear in this new timeline, but her deafness barely enters the story like it did in season one.

However, Alma’s been through too much—she’s too aware of how elastic and changeable the universe really is—to settle into a routine. And when she sees a problem that looks like maybe magic can have a hand in solving, she’s eager to become a mystical traveler once again. Jacob disapproves; though he’s the one who tuned Alma into her powers in the first place, he’s desperate to keep his new life intact. But there’s no stopping Alma. Though her time-travel skills don’t quite function in this timeline, she realizes that Becca has an extraordinary gift: she can step inside of another person’s memory. Though it takes a physical toll on Becca—a newlywed who’s trying to figure out if she wants to have kids or not, something not helped by the pressure her husband and family apply to her at every opportunity—Alma pushes her to use her abilities to follow Undone’s new central mystery: what wrenching secret back in her home country of Mexico is their mother, Camila, hiding from the rest of the family? And as that thread unravels, what connection does Jacob’s troubled mother have to the trauma that’s been reverberating across the family (and across timelines) for generations?

Image: Prime Video

Watching Undone season two reminded me quite a bit of Russian Doll season two, another recent series about a sarcastic, extremely determined character who time-travels to try and fix problems in the past—and ends up creating more problems along the way. Undone’s Alma and Russian Doll’s Nadia both believe they’re doing the right thing to help their families, and they both hope to be the “hero” that fixes everything. You almost wish Nadia would pop up and explain to Alma what a “Coney Island” is; in the parlance of Russian Doll, it’s a “what if”—if only this one thing in the past had gone another way, life would be so much different and better. Both shows also feature visits to Jewish ancestors in Eastern Europe during or shortly before World War II, and both shows end with the death of a key character, the acceptance of which becomes a crucial component of the protagonist’s healing process.

But Undone is definitely its own strange concoction. Season two felt a lot more like an emotional drama (with some soap opera elements) than season one’s trippy sci-fi mystery. But it still has all of that weirdness, as Alma flits through time and space, a journey made possible by the gorgeously unique look of the show—directed by Hisko Hulsing, who also handled production design, with animation by the team at Submarine and rotoscoping by the team at Minnow Mountain. Much like season one, Undone season two’s incredibly realistic (particularly when it comes to the actors’ performances) yet surreal surroundings are a perfect backdrop for Alma’s increasingly unhinged pursuit of happiness. Ultimately, Alma does find closure, and Undone ends on a melancholy note that feels like the story’s really over now. But with infinite timelines just waiting to be re-set, who can say?

Undone season two is now streaming on Prime Video.


Want more io9 news? Check out when to expect the latest Marvel and Star Wars releases, what’s next for the DC Universe on film and TV, and everything you need to know about House of the Dragon and Lord of the Rings: The Rings of Power.

Watch the Gorgeous Opening Titles for Star Trek: Strange New Worlds [Published articles]

Next week, we get to head out with Captain Pike and the crew of the USS Enterprise when Star Trek: Strange New Worlds premieres. But Paramount isn’t done offering little teases of the show, the latest of which are the space-tacular opening titles. No cast members are on view here: just the ship, the galaxy, and what looks like a futuristic city. And the voice of Captain Pike (Anson Mount) reciting some familiar words.

Perhaps the greatest honor of my career to date was getting to utter these words: “Space, the final frontier…” I could not be more proud to be a part of the @StarTrekOnPPlus team and I could not be more grateful to the Trek community. From the bottom of my heart, THANK YOU. pic.twitter.com/NgMvUC9nza

— Anson Mount (@ansonmount) April 29, 2022

THAT THEME. The way Jeff Russo’s work plays with the original theme is so good: it’s not exactly the same, but not drastically different. We’re in new but familiar territory, ready to see new stars and maybe just a tiny bit anxious about what we might find there. As the lights come on aboard the Enterprise, the music builds, until the whole ship is lit up, the theme really takes off, and the journey begins. It’s perfect.

Paramount Plus also released a short “Inside the Series” feature with “Ready Room” host Wil Wheaton—that has a new teaser at the end. (Skip ahead to minute 21 if you just want the goods!)

Strange New Worlds follows the adventures of Captain Christopher Pike, Number One (Rebecca Romijn), Spock (Ethan Peck), who we’ve met on Discovery, and the rest of their crew: Celia Rose Gooding as Cadet Nyota Uhura; Jess Bush as Nurse Christine Chapel; Babs Olusanmokun as Doctor M’Benga; Melissa Navia as Erica Ortegas; Bruce Horak as Hemmer; and Christina Chong as La’an Noonien-Singh. When the show gets to its second season, it will also feature Paul Wesley (The Vampire Diaries) as James T. Kirk. But we’ve got plenty of adventures to go on without him first.

Strange New Worlds premieres May 5th on Paramount Plus.


Buy Nona the Ninth from:

'Knotwords' is a crossword-Sudoku hybrid with the power to unseat 'Wordle' [Published articles]


The heady days of Wordle are in the past now; getting acquired by The New York Times will do that to you. And while there are a ton of Wordle replacements out there, I think I’ve finally found my favorite one: Knotwords.

Knotwords, designed by Zach Gage and Jack Schlesinger, is sort of like doing a crossword someone forgot to provide clues for. It also happens to rule.

The grid — The crossword analogy holds up in how you actually play, at least at first. Click into a Knotwords puzzle and you’re immediately confronted with a tiny software keyboard (Knotwords supports hardware keyboards too) and a blank grid waiting for words to be entered into it.

There’s nothing to guide what should go into each little cell other than the knowledge that all lines, — horizontal or vertical — need to spell out actual words, and the little groups of letters included in a different section of the grid.

This is where the Wordle-style guessing comes in. You know the length of a given word, so you just need to figure out which letters from a preselected group go into it while also still working with other words in the grid.

Sudoku-brain — It’s the extra wrinkle of being presented with a set of letters that have to be used, but can only be laid out a certain way, that tickle the Sudoku-loving parts of my brain. Those simple restrictions lead to all sorts of strategies to solve Knotwords’ daily and monthly puzzles.

For example, I like to start with the shortest words first and then work from there. I’ve also noticed that just like The New York Times crossword, there are some words that appear more often than others, just by virtue of how these kinds of puzzles are built. It’s a really satisfying process to solve a Knotwords puzzle, and the beauty of their design is that in general, they get easier to solve the deeper you get into them.

The rabbit — Besides the elegance of the puzzles themselves, the Knotwords app is full of little aesthetic flourishes, from the animations that accompany entering in a valid word in a puzzle, to the adorable rabbit mascot that congratulates you every time you finish.

More amazing still, according to Schlesinger, the bunny was a super late addition to the game.

“The bunny SFX were created and implemented within the last 12 hours before we submitted the builds,” Schlesinger writes.

The animation turned out to be a critical element of the game, at least for me. I don’t want to solve another puzzle that doesn’t end with a rabbit losing it’s mind over my skill.

Knotwords is available to download for free on Android and iOS, with an entirely optional $4.99/year subscription (or a flat fee of $11.99) available for access to additional puzzle types, more hints, and themes.

The Mac and PC versions of Knotwords cost $11.99 and include everything from the jump.

Perhaps the greatest timelapse ever taken. 4 years of an exploding star. [Published articles]

submitted by /u/crgnxn to r/nasa
[comments]

The Digital Gap Between Rich and Poor Kids Is Not What We Expected [Published articles]

Moral Kombat: How Narnia and Harry Potter Wrestle with Death and Rewrite Christianity [Published articles]

Hagrid carries Harry's body

Harry Potter and the Cursed Child has been on Broadway for about six months and collected six Tonys after a successful run in London. I was lucky enough to see the play a few months ago, and while I liked it enormously, I can’t stop thinking about how odd it is. With Cursed Child, Rowling foregoes the possibility of a simple fun adventure and instead adds a coda to the series-long meditation on death, and continues her ongoing tickle fight conversation with the moral fantasy of C.S. Lewis.

Has there ever been a blockbuster/franchise/pop-culture-phenomenon more death-obsessed than Harry Potter? The Narnia books at least give us pages full of whimsy and adventure before cranking the stakes up. Death looms over The Hunger Games, obviously, but the books are also about political strife and governmental overthrow and class warfare. Star Wars tends to sanitize its deaths, with lightsabers cauterizing wounds and Jedi masters literally disappearing so there isn’t any gore to confront. And when you look at The Lord of the Rings? Sure, death is pretty much Mordor’s Big Mood—but Tolkien’s books are as much about hope and battle and honor and gardening and the powerful love between an elf and a dwarf as they are about mortality.

The Harry Potter books are about death in a way that the others are not, and about the different ways of responding to its inevitability: a villain whose entire life revolves around finding immortality no matter the cost; a hero haunted by witnessing his parents’ deaths; a wizard supremacist cult literally called the Death Eaters; the endless speculation that began just before Book 4 came out about WHO WOULD DIE; the dawning realization that at least one beloved character was going to die in each book from #4 onwards; horses that were only visible to people who have lost loved ones; gallows humor throughout; and three magical MacGuffins called The Deathly Hallows.

Rowling begins her story mere minutes after James and Lily’s murders with a focus on Harry’s scar—his death, really, waiting in his head—and ends it with a resurrected hero who goes out of his way to destroy magical access to immortality. And hovering around all of this is the question of what comes after death—whether the ghosts of Lily and James are truly conscious ghosts or just a sort of echo, and what it will mean for Harry to fulfill his destiny and die.

Which makes it all the more interesting that the HP series is resolutely, gloriously secular. The magic the wizards and witches use is hard work, and requires training and homework. There are few miracles, aside from the occasional assist from the Sorting Hat or Fawkes; the students and their teachers have to rely on themselves to defeat evil. Prophecies are potential futures to be dealt with, not Capital-A apocalypses. Where many fantasy series either encode Christianity into their DNA (The Lord of the Rings, Narnia) or create religions for their characters to follow (The Stormlight Archive, Star Wars) the characters of the Potterverse celebrate Christmas and Halloween as cultural holidays with trees for one, pumpkins for the other, and chocolate for both. There is never any sense that the kids practice the Christianity of Christmas or the Celtic Paganism of Samhain. There’s no mention of High Holy Days or Ramadan fasts. There are no non-denominational chapels in Hogwarts. The one wedding we attend is at the Burrow, and someone described only as a “small, tufty-haired wizard” presides over the lone funeral.

But in the midst of this secularism, Rowling uses Christian imagery, returning to them over and over again and infusing them with new meanings each time. She riffs on them in ways that startled me when I read the series the first time, and I was astonished when she returned to them and remixed them again for Cursed Child. When I watched the play I found myself thinking again and again about the stark contrast between Rowling and C.S. Lewis.

Though The Last Battle wasn’t published until 1956, Lewis finished the Chronicles of Narnia before he met, married, and lost Joy Davidman. He explored the liminal time of mourning in A Grief Observed, publishing the book in 1961 under the pseudonym N.W. Clerk—he didn’t want people who read his apologetics or his children’s fantasies stumbling across such a raw, painful work. (It was only after his own death in 1963 that the book was republished under his name.) While I don’t feel that I’m qualified to psychoanalyze Lewis, I do think it’s worth noting that The Last Battle, with its hardline theological attitude toward Susan, and its conception of Tash as simply evil, was written before Lewis’ spirituality was reshaped by grief, whereas Rowling wrote the Harry Potter series largely in direct response to nursing her mother through a long final illness. She was still reeling from that loss (as well as the ending of her first marriage and the birth of her first daughter) when she began writing a series about the consequences of trauma, and the ongoing pain of mourning. So why am I dragging Lewis into this?

He and Rowling each wrote hugely popular—and completely different—rewrites of Christianity.

Rowling has spoken about her uneasiness with the way Lewis encodes a theological agenda into his books. Because Lewis’ books, much like Tolkien’s, don’t just toss in a Nativity or a general idea of sacrificing oneself for the greater good—they entwine hardcore theology and theodicy into the entire series, and create action that hinges on that theology.

Hang on, does everyone know what theodicy is? It’s basically “the problem of evil” or the study of why an omnipotent, omniscient, and benevolent God would allow evil in the world It created. The term was coined by Gottfried Leibniz (one of the two men who invented calculus!) in 1710, in a book helpfully titled Théodicée, but the idea has been around much, much longer. There are many different schools of theodicy and anti-theodicy (some which sprung up as direct responses to the horror of the Holocaust, for instance) and C.S. Lewis dug into it with several books, specifically Mere Christianity, The Problem of Pain, and A Grief Observed. Mere Christianity, for instance, tackles free will by comparing God to a mother who tells her child to clean its room. Sure, this might fail—the child might ignore its mom, leave the room messy and never learn the value of cleanliness—but by offering the child the choice to clean its room or not, the mother is allowing the kid to grow up, determine its own living space, take pride in its cleanliness, and generally become a better, more responsible adult. C.S. Lewis applies the same logic to God, saying: “It is probably the same in the universe. God created things which had free will. That means creatures which can go either wrong or right” and even though humans can do evil things, and create great suffering, having free will is better than the alternative because “free will, though it makes evil possible, is also the only thing that makes possible any love or goodness or joy worth having.”

This idea is baked into every page of the Narnia books.

Narnia is essentially a series explaining free will, the problem of pain, and faith to children through exciting stories and cute animals. The Lion, The Witch and the Wardrobe starts off fun and whimsical: Lucy finds the cupboard! Beautiful snowy woods! Lamppost! Tumnus! But soon it’s revealed that the kids have stumbled onto a cosmic battle. Edmund shows us the dark side of free will (and the need to remain morally vigilant in the face of Turkish Delight) by using his freedom to betray his siblings and Aslan, while the White Witch shows us the evil of ultimate selfishness, and Aslan presents another side of free will. The mighty lion, who has seemed comforting and omnipotent to the abandoned children, hands himself over to the Witch so he can be a willing sacrifice in exchange for the traitorous Edmund. Though he could easily escape, he chooses to be tortured, to allows them to manhandle him and shave his mane. He allows himself to be humiliated.

Susan and Lucy, having followed Aslan, are asked to act as silent, helpless witnesses. Finally, once Aslan is really most sincerely dead, the White Witch and her followers gloat over his corpse, and leave it to rot. Lucy and Susan stand watch over Aslan’s ruined body, and their loyalty is rewarded when they are the first witnesses to his resurrection. This is all, note for note, the arc of Gethsemane, the Crucifixion, and the Resurrection, with Edmund playing the Judas role and the girls standing in for the various Marys and Magdalenes. And as in the Christian story, the important part is the willingness of the sacrifice. Lucy and Susan are seeing someone with enormous power relinquish that power for a larger purpose, but they don’t know that a long-game scenario is playing out, they just know that they love their friend and they’re going to stay with him until he gets a proper burial.

Aslan dead

Then their faith in Aslan is confirmed when he comes back even stronger than before. Death doesn’t win—and Aslan reveals that there is a “deeper magic from before the dawn of time” (a magic the White Witch knows nothing about) which will resurrect an innocent being who has given his life for a traitor. This is only the barest allegorical gloss slapped over Christian theology, with Aslan acting as a stand-in for Christ, and the human race being a big bunch of Edmunds, betraying each other and ignoring moral law in favor of all the Turkish Delight life has to offer.

Aslan is presented as a deity figure who is actually worshipped, not just loved—he appears as a lamb in The Voyage of the Dawn Treader, and is revealed to have created Narnia itself in The Magician’s Nephew. He also appears as a supernatural bogeyman to the followers of Tash—Aslan’s power simply translates into its evil counterpoint for them. When the series culminates in The Last Battle, it’s revealed that faith in Narnia/Aslan has allowed all the “Friends of Narnia” to return (and that Susan’s lack of such faith left her on Earth), and that all “good” followers of Tash get to come along to a Heaven that is sort of a deluxe Narnia: “I take to me the services which thou hast done to Tash… if any man swear by him and keep his oath for the oath’s sake, it is by me that he has truly sworn, though he know it not, and it is I who reward him.”

In this way Lewis creates a stand-in messiah, twines the quasi-Jesus story around the core of his fantasy series, and riffs respectfully on Christian theology. He takes the somewhat liberal (and controversial, in some theological circles) Inclusivist stance that good works can get people into paradise apart from their conscious faith in his specific savior figure. He also obliquely returns to the idea of pain as a force for growth with the character of Susan.

How could Aslan allow Susan to survive the train crash that kills her entire family? Well, if you want to a theodical interpretation, grief will teach her more about the importance of faith in her life, until she’s ready to come back to Aslan, believe in Narnia, and rejoin her family. Unnecessarily harsh for a series of children’s books, you say? Lewis was trying to put forth a very specific theological idea, which was that having free will meant you had the ability to fuck up as Edmund and Susan both do. As a true Friend of Narnia, you need to keep faith with Aslan, and be obedient to him. Lewis’ moral lesson is to trust your elders and your God, and his books are essentially softening his young readers’ hearts for lives spent believing in Christianity.

Sometime early in the writing of her Harry Potter books, Rowling also decided to weave Christian symbolism into the story, but arrived at a very different moral conclusion than Lewis.

Rowling effectively collapses the Nativity and the Crucifixion into one scene: Harry as an infant is helpless in his crib when Voldemort comes to visit. (An inversion of the Three Kings? Or maybe a nod to Maleficent.) James tries to stop him and is easily cast aside (the human father, like Joseph, being a background character compared to the Chosen One’s mother), and it’s Lily who steps up and sacrifices her life for Harry’s. She replaces her son’s death with her own, and invokes a type of love that is a deeper magic than Voldemort can understand. This mirrors the “deeper magic from before the dawn of time” that brings Aslan back to life, to the chagrin of the White Witch.

This is the moment that makes Harry Potter who he is. Not just in the sense that he’s a celebrity orphan, but that he is now on a path created by a sacrifice that will lead to a second sacrifice. It began with a green flash that meant his death, and it ends in facing that death all over again. Rowling seeds this throughout the series: the Mirror of Erised shows him his family, whole and happy. The Dementors force him back into a memory of his last moments with his parents—and in a fantastic twist, he realizes that he almost welcomes the Dementor’s Kiss because it triggers those memories. When Harry faces Voldemort for the first time in Goblet of Fire, the shades of his parents emerge from the wand and protect him.

In almost every book Rowling finds a way to check back in with that origin scene, reworking it from different angles, refracting it through different lenses. Harry’s parents’ deaths are interrogated repeatedly, much as the Nativity is relived through the Peanuts gang, and generations of Sunday School Christmas pageants, and the Crucifixion is reinterpreted through Passion Plays, productions of Jesus Christ Superstar, and the occasional Martin Scorsese film. Just as every Midnight Mass homily revisits the Nativity, so all the major Harry Potter characters find ways to retell stories about The Boy Who Lived. Just as Andrew Lloyd Webber, Tim Rice, and Nikos Kazantzakis each retell Jesus’ crucifixion through the point of view of Judas, so Rowling shows us Harry’s memories of that day, Sirius’ memories of being the Potters’ Secret Keeper, Hagrid’s first moments with Baby Harry, Aunt Petunia’s insistence that her sister died in a car crash. This eternal return begins to feel like an obsession by Prisoner of Azkaban, but Rowling was just getting started.

With Goblet of Fire, Rowling backs off (slightly, temporarily) on reliving That Day, and instead kicks the series into high gear with a remorseless killing spree. Harry watches Cedric die, then Sirius, then Dumbledore, then Dobby, then Snape. Bill Weasley is maimed and George loses an ear in Death Eater attacks. The Ministry falls, and the wizarding world collapses into Magical Fascism. Harry even gets his own Judas figure in Peter Pettigrew, who betrays the Son as he betrayed the Parents. Throughout all of this, with the terrifying wizard of our collective nightmares gaining more and more power, at no point does anyone offer any sort of religious structure, theology, belief system, theodicy, nothing. Or, well, almost nothing.

story of the Deathly Hallows

We get the stories of the Deathly Hallows themselves, in which Rowling teases real magical artifacts in the Tales of Beedle the Bard—which most mature wizards think of as bedtime stories for their children. (This in itself is an interesting twist: the stories Ron dismisses as juvenile fables turn out to not only be true, but vitally important to Voldemort’s defeat.)

Finally, Rowling makes a point of intersecting her Wizarding story with the Muggle world by placing James and Lily’s house in Godric’s Hollow, across the street from a church. She shows us the gravestones of the Dumbledore family and the Potters, which read “Where your treasure is, there will your heart be also,” and “The last enemy that shall be destroyed is death,” respectively. The first is a memorial to Dumbledore’s mother and sister, an acknowledgement of his love for them despite all of his ambition and a life spent at Hogwarts. It’s also a quote from the New Testament: Matthew 2:21. The Potters’ shared stone is a nod to the Deathly Hallows (and a slightly on-the-nose reference to the theme of the entire series) but it’s also 1 Corinthians 15:26. Given that up to this point the series has been resolutely secular, I still remember having to reread that passage a few times. Rowling gave us an unchurched world, without even a perfunctory Church of England Midnight Mass, but suddenly Corinthians is relevant? Albus Dumbledore likes the Gospel According to St. Matthew enough to put it on his family grave? (I mean, unless he’s a Pasolini fan, but there’s no textual evidence for that.)

James Potter Lily Potter grave

Of course the next notable thing to me is that Harry and Hermione seemingly have no idea what these quotes are. Neither of them have been raised with Christianity, or even a passing knowledge of the Hebrew Bible or New Testament, so this whooshes right over their heads. It’s a fascinating choice to create the alternate wizarding world, make it secular, and then, in the last book, imply that at least some people from that world also value one of the religions of the Muggle world. Especially while also making the explicit point that the two quotes are meaningless to the two main characters. Who chose the inscription for the Potters? Was it Dumbledore? The Dursleys? Some rando vicar?

But all of those questions fade into the background as Rowling uses the end of the book to dive into her second great religious remix—in this case, riffing on The Lion, the Witch and the Wardrobe’s version of the Crucifixion. 

Just as Lewis did, Rowling rewrites Jesus’ dilemma at the Garden of Gethsemane. Harry hears Voldemort’s offer—he’ll end the assault on Hogwarts if Harry surrenders—and then he watches Snape’s memories in a Pensieve in Dumbledore’s office. He finally sees Dumbledore’s full plan, and realizes that his mentor had been planning his sacrifice from the beginning. Snape even accuses Dumbledore of fattening him for slaughter like a pig. Harry has to reckon with the fact that, at 17 years old, his life is over. Everything since his first birthday has been borrowed time.

Harry Potter and the Deathly Hallows Dumbledore Pensieve

This digs into an interesting debate about free will. On the one hand, Harry’s fate was sealed when Voldemort cursed him as a baby and locked him into life as the Chosen One. But on the other, Harry has to make the free, unforced choice to walk to his execution. He has to allow Voldemort to torture him, humiliate him, make him beg—no matter what, Harry, like Aslan, has to remain passive for the sacrifice to work. But this is Harry, who runs toward trouble, who jumps into action and looks for danger later, who doesn’t ask permission, who doesn’t consult teachers, who risks his life for his friends every year like it’s nothing. Harry doesn’t do passive. And we, as readers, have been trained to expect last-minute acts of derring-do (or last-minute Hermione-ideas that save the day) so it comes as a bit of a shock when Harry accepts this, works through his anger at Dumbledore, and chooses to die a second time.

Part of the point of Gethsemane is that Jesus explicitly asks to opt out of the sacrifice he’s being asked to make—theologically, this is emphasizing the human side of his nature, and giving the mortals reading/hearing the story a moment to relate to. To make it even worse, he explicitly asks his disciples—his friends—to stay up with him so he doesn’t have to spend his last night alone. They immediately pass out, which serves a ton of narrative purposes: it leaves Jesus even more bereft, demonstrates the weakness of human flesh, foreshadows the betrayals of both Judas and Peter, and serves as a symbolic warning against sleeping through a shot at redemption. (The other fascinating thing here is that you, the reader/hearer, are now essentially put in the place of either a disciple who managed to stay awake, or, if you want to be a bit more pretentious about it, God. After all, you’re the one hearing the request, right? And rest assured Rowling tweaks this element in a fascinating way that I’ll look at in a few paragraphs.)

In The Lion, the Witch and the Wardrobe, Gethsemane is sort folded into the Crucifixion, as Aslan doesn’t have any visible moment of doubt, he simply asks Lucy and Susan to stay quiet and watch his execution. (I’ll risk the assumption that Lewis wasn’t comfortable making his Jesus Lion look weak, even for a larger theological purpose.)

Rowling’s rewrite confronts this scene much more boldly. First, unlike Jesus—but like Aslan—Harry never asks to get out of his sacrifice. He wants to, desperately, but he never quite succumbs to the temptation to ask for help. Part of that could just be that Rowling has created a universe that doesn’t seem to have any sort of deity or ultimate boss to appeal to—Dumbledore is the last authority, and he’s already made it clear that he needs Harry to die. Second, unlike Aslan (and, probably, Jesus) Harry has no guarantee that he’ll be coming back—quite the opposite. He assumes he’s going to die as a Horcrux, that he’ll be completely destroyed. He accepts his own death because it makes narrative sense, basically. By dying, he can fulfill Dumbledore’s plan. Unlike Jesus, Harry at least gets to look through his history in the Pensieve, learn Dumbledore’s entire long game, and see that his loved ones will go on to live their lives free of Voldemort’s evil at last. He can choose to be angry at Dumbledore, or he can rationalize that the Headmaster hid the plan in order to allow Harry seven happy-ish years at Hogwarts—it was the only gift he could offer to make up for Harry’s miserable life with the Dursleys, and the sacrifice that lay ahead.

Harry doesn’t ask any of his friends to stay and keep him company. He explicitly avoids speaking to them because he knows that will destroy his resolve and instead visits them under the invisibility cloak so he can have a last moment of seeing them. He drops the cloak long enough to warn Neville that Nagini must be killed if Voldemort is going to be defeated, knowing that he won’t be there to see the defeat. Then he walks into the forest.

Rowling is nicer than both God and C.S. Lewis, however, because Harry isn’t completely abandoned: once again, the shades of his parents accompany him, as they did during his first real fight with Voldemort. This time they’re joined by Sirius and Lupin. The ghosts assure him that death doesn’t hurt, and that they’re proud of him. I would argue that this is the emotional climax of the series, where Harry gets all the love and validation he’s craved while coming full circle to face Voldemort. This is also a perfect narrative move on Rowling’s part, as it shows Harry in a liminal space between life and death—he makes himself a ghost with the invisibility cloak, then he is guarded by ghosts as he goes to his sacrifice in the forest. He’s being eased into death, which creates a very particular tone to the chapter. For a reader, these pages feel like taking a moment to breathe after the anger and shock of learning Harry’s destiny.

And then Harry faces Voldemort.

Harry reenacts his ancestor Ignotus Peverell’s meeting with Death when he throws the cloak off—but obviously Voldemort, who has spent his unnatural life enacting the follies of the other two brothers, does not meet Harry like an old friend. The calm atmosphere is destroyed, the ghosts are gone, and he is mocked as the Death Eaters hurl abuse at him. Worst of all, Harry sees Hagrid, the man who rescued him from the Dursleys and introduced him to a new life, abused mercilessly. He is powerless to help.

Hagrid tied up

Harry is finally killed—Rowling has Voldemort finish him off with a simple Avada Kedavra, avoiding the protracted torture of Jesus or Aslan.

Of course, it’s possible to see Harry’s torture woven into his life—through Snape’s punishments, through Umbridge’s punishments, through all the painful Horcrux searches—underlining the idea that pain is simply part of life to be dealt with, not a teaching tool or a punishment from On High.

After Harry decides to come back from (ahem) King’s Cross, all the pain of being alive comes back, too; and he has to try to stay calm and play dead as the Death Eaters throw his body around like a toy—again, as with Aslan, the most important element here is humiliation, and Rowling uses this term several times. The only way to break the spirit of Dumbledore’s Army is to show them their leader broken. This was why crucifixion particularly was used on people who broke societal laws or tried to lead uprisings—not just Jesus, obviously, but Spartacus and his followers, Peter, and plenty of other would-be messiahs and revolutionaries—and why similarly horrific tortures were visited on people like civil rights workers in the 1960s, and protesters around the world today.

Simply beheading someone, or hanging them, or standing them before a firing squad isn’t going to break a movement, and martyrs only strengthen movements. You have to show the martyr’s followers that there is no hope. This is what the Romans were doing when they left people hanging on crosses for days in the sun, what kings were doing when they left heads on pikes. This is what the White Witch is doing by leaving Aslan’s body out to decay on the stone tablet. This is what Voldemort is doing when he casts Crucio on Harry’s body and flings it around like a broken doll. Voldemort orders one of the Death Eaters to replace the glasses on Harry’s face so he’ll be recognizable, which, in a single offhand sentence gives us some idea of how battered his body is. Harry can’t just be dead—he has to be desecrated. In a grotesque mirroring of the night Hagrid took Harry from the Nativity/Golgotha of Godric’s Hollow, he is forced to carry what he believes is Harry’s corpse back to Hogwarts.

Rowling has commented that she wanted the man who brought Harry into the Wizarding World to be the one who carries his body back to his true home, Hogwarts. She’s also continuing her Crucifixion imagery by riffing on the Pietá, and of course underscoring the evil of the Death Eaters, that they would make Hagrid do this. She dwells on this section, making it incredibly hard to read, I think to grind it into her young readers’ minds that this is the risk you’re taking when you resist evil. She did, after all, spend her youth working for Amnesty International—she has an intimate knowledge of the sorts of horrors tyrants visit upon dissenters. She’s showing her readers exactly what can happen when you rebel against someone who doesn’t see you as truly human. She stays in this moment far longer than I would expect from what is, essentially, a children’s book, before reassuring her readers that there’s still hope.

Harry had told Neville that someone needed to dispatch Nagini to make Voldemort vulnerable, but Neville himself still has no reason to believe they will win when he draws Gryffindor’s sword. He has every reason to believe that he is dooming himself by attacking—especially seeing what’s been done to Harry. All of them fight together, while Harry, invisible under his cloak, acts as a sort of protective angel during the last battle of Hogwarts. He defeats Voldemort with all of his friends around him, using a disarming spell to the last, and still imploring his nemesis to repent. And this is the last great subtle point Rowling makes with her main series: rather than waiting for a savior or tying everything to one guy, the Wizarding world unites into a collective to fight the Death Eaters, even in the face of impossible odds. Rather than seeking simple vengeance, her hero fights to protect his loved ones, all the while trying to turn his enemies to a better life.

Which is why his side wins.

Hang on, let’s have a brief note about REMORSE, shall we?

Kings Cross afterlife Harry Potter

It’s in King’s Cross that we get the sense of what Rowling means by “remorse.” At first it seems like just a casual phrase. Of course Sirius is filled with remorse over his pact with Pettigrew. Of course Snape is filled with remorse when he learns that it was his intel that led to Lily’s death. But as the references accumulate it becomes clear that “remorse” is a moral, expiatory force in the Potterverse. Albus’ remorse over his mother’s and sister’s deaths is actively repairing the damage that he did to his soul when he dabbled in dark arts with Grindelwald. Snape is repairing the damage done by his Death Eater days, and the fact that he takes the hit by killing Dumbledore so Draco won’t have to probably does more good than harm:

“That boy’s soul is not yet so damaged,” said Dumbledore. “I would not have it ripped apart on my account.”

“And my soul, Dumbledore? Mine?”

“You alone know whether it will harm your soul to help an old man avoid pain and humiliation,” said Dumbledore.

So when Harry gets to King’s Cross and hashes things out with Dumbledore, the tiny mewling creature he sees is what’s left of Tom Riddle’s murderous, furious, Horcrux-bitten soul. Dumbledore explicitly says he can’t do anything for him. But of course this is Harry we’re talking about. So naturally Rowling, unlike Lewis, makes a point of having her Jesus figure reason with the devil. After he sees what becomes of the man’s soul in King’s Cross, Harry faces Voldemort a final time and speaks to him as a person, calling him Tom, and imploring him to think about consequences:

It’s your one last chance, it’s all you’ve got left… I’ve seen what you’ll be otherwise… Be a man… try… Try for some remorse.

And then Harry doesn’t die in battle, and he doesn’t kill Voldemort. The Dark Lord’s own curse rebounds on him, and Rowling again departs from Lewis. Where the Pevensies live in Narnia as kings and queens, and then turn out to be teens in the regular world before the train wreck in The Last Battle, Rowling allows Harry to grow up—or maybe the truer thing to say is that she forces him to grow up. He doesn’t get to die a hero. In the Deathly Hallows epilogue, we see that his life is still largely defined by That Night—his life, and the health of the wizarding world, is characterized not by joy or contentment but by a lack of pain: “The scar had not pained Harry for nineteen years. All was well.”

And now fast forward nine years to the 2016 premiere of Harry Potter and the Cursed Child, and give yourself a moment to think of what the play could have been:

  • The trio needs to reunite to rescue Hagrid!
  • The trolls are having an uprising!
  • Harry’s kid becomes an exchange student at Beauxbatons!
  • There’s a new Death Eater/a Voldemort follower/a Grindelwald follower/a monster of some sort!
  • Something something centaurs!
  • AAARRRGGHHHH!

Do you see what I mean?

It could have been anything. Any plot, any adventure. But instead Rowling and her author, Jack Thorne, choose to revisit her great obsession: death in general, and the moment of Harry’s parents’ deaths in particular—until the play becomes a four-and-a-half-hour-long memento mori. As we hop across timelines, we learn that almost every character we’ve loved has died. Draco Malfoy’s wife dies. Muggles are tortured off-stage. An alternate-universe Snape succumbs to a Dementor’s Kiss. Most interesting, Rowling and Thorne also refract Cedric Diggory’s death in exactly the way Rowling did Harry’s parents’: Now it is Amos Diggory’s grief for his son, and his son’s life and death, that become a crux point for the main plot as Harry and Draco’s sons team up to try to save Cedric’s life, and then have to deal with the consequences of their actions when they screw up their timelines. By the end of the play we seem to be learning a darkly beautiful lesson: Cedric’s death was necessary. Even though Voldemort refers to him as “the spare,” the play shows us that his death was just as vital a sacrifice as Lily’s or Dumbledore’s.

The play is awash in death.

And there’s no relief once we finally come back to the “correct” universe—once Albus and Scorpius are kidnapped, we learn that it’s only a matter of time before Delphini fulfills her own prophecy, and snuffs out an entire timeline.

But this is all child’s play compared to adult Harry’s arc. We watch as The Thirtysomething-Who-Lived reckons yet again with the tragedy that has defined his life. Throughout the play he’s plagued by nightmares of Voldemort. This is an obvious narrative choice, as it leads into the dramatic reveal that his scar is hurting again, but many of the nightmares and flashbacks are not necessary to the story.

Twice, in apparent memories, we go back to Harry’s childhood as a boy under the stairs. In one, a nested-Voldemort-nightmare scares him so badly he wets the bed, which leads to Aunt Petunia screaming at him in disgust while also insisting that the flash of light he’s remembering was the car crash that killed his parents. This deepens our view of Petunia as an abuser—it’s one thing to try to hide magic from a child, especially in light of what a magical life did to your sister, but it’s quite another to gaslight that child about his parents deaths while humiliating him for wetting the bed. (She even makes him wash the sheets. It’s horrific.)

This is followed by an even worse memory: Petunia decides to be just kind enough to take Harry to visit his parents’ grave in Godric’s Hollow. For a second you might feel a bit of warmth toward her, since Vernon certainly wouldn’t approve of this outing. But of course she spends the entire visit sniping about the bohemian town and insisting that the Potters didn’t have any friends despite the piles of flowers on their tombstone. Even something that looks like decency is revealed to be an excuse to alienate Harry, lie to him about his parents, and crush his spirit.

Again, this is a play for kids. It didn’t have to show us the wizarding world’s savior drenched in his own piss. It didn’t have to show us Petunia lying to Harry in order to keep him submissive. It goes to extremely dark places to show us just how abused Harry was, and just how much trauma he still lives with, as a man pushing 40, with a wonderful partner, wonderful children, a better job than he could have dreamed of as a child. Harry’s a broken mess. The greatest dramatic moment in the play is not, I would argue, the battle with Delphi, it’s a much quieter moment in Harry and Ginny’s home. We learn that each year, on that anniversary, he sits with his baby blanket and meditates on his parents, and the life he might have had. When Albus and Scorpius go missing in time, he still tries to honor his tradition, but has reached a breaking point.

Ginny comes in and finds him weeping into the blanket. “How many people have to die for The Boy Who Lived?” he asks her.

It’s a horrifying, dark twist on the opening chapter of the Harry Potter series. It’s a moment that expects people who grew up with Harry to grapple with his entire history, all the people he’s survived, and the pain of being the Chosen One. It expects the younger ones to watch someone who’s maybe more of a parent figure completely break down. This scene highlights Harry’s vulnerability, his fear and guilt that his own life is not worth the ones that were lost. This is an astonishing, raw scene, and Rowling and Thorne allow it to go on for a while. Just like Harry’s protracted walk into the forest, here we sit with him and Ginny for long minutes while he sobs. His breakdown leads directly into the parents’ discovery of Albus and Scorpius’ message written on the baby blanket. Harry’s emotional damage is revealed to be utterly necessary to the play’s plot.

While the play’s narrative climaxes with the Delphi fight, and the moment when Harry chooses, once again, not to kill, the emotional climax is once again his parents’ death. Obviously, inevitably, the big confrontation with Voldemort’s daughter has to come at Godric’s Hollow, on October 31, 1981. After all the years of nightmares and flashbacks, Harry must physically witness the death/rebirth moment with his own adult eyes. The eyes of a father and a son.

I read the play before I got to see it, and I assumed that it would be staged so we, the audience, were behind Harry and his family, kept at a discreet distance, allowing him the privacy of his grief. To complete Rowling’s religious riff, she’d be enacting a medieval-style Mass: Harry as priest observing a holy moment, while the rest of us congregants watched from over his shoulder. Instead, it’s staged like a Passion Play.

For those of you who have never attended—generally, the audience of a Passion Play is cast as the crowd outside of Pontius Pilate’s palace. When Pilate comes out to ask which prisoner should be released, it’s often on the audience to chant “Barabbas”—thus dooming Jesus, and underscoring the idea that human sin is truly responsible for his death—which is a damn sight better than the ancient tradition of blaming the nearest Jewish person. This tactic was employed in NBC’s staging of Jesus Christ Superstar Live in Concert, for instance, where the audience cheered like crazy for Alice Cooper’s fabulous Herod and Ben Daniels’ somehow-even-fabulouser Pilate, only to realize they’ve been cheering for the torture and death of John Legend once he’s dragged out and beaten to a pulp.

In Cursed Child, Harry, Ginny, Draco, Albus, and Scorpius are all staring out into the audience as the lights flicker and we hear the screams of Lily and James, the cackle of Voldemort. They’re staring at us, as we allow it to happen. We are implicated in these deaths. And once again Harry has to live through the worst moments of his life—the difference being that this time he isn’t alone, as he explicitly states in the battle with Delphi. His disciples have never fallen asleep. They help him defeat her, underlining Rowling’s usual theme of friends and found families being stronger than individual posturing. They’re also there to stop him from killing Delphi. Evil is complex. There are reasons for it. Every single person on this earth who has ever had the label “evil” attached to them has been brought to that state by pain. Maybe a few months, maybe a lifetime’s worth, but something hurt them, and they turned that hurt on the rest of the world. Just as in Deathly Hallows when Harry asked Voldemort to “try for some remorse,” so he also speaks to Delphi as a person, orphan to orphan:

You can’t remake your life. You’ll always be an orphan. That never leaves you.

Harry Potter isn’t a symbol of good—he’s a living, breathing human who was saved by love, and he’s doing everything he can to save the rest of the orphans who were ruined by the pain of previous generations. Even though Delphini tried to undo all of his work and sacrifice his children to her plan, he’s still going to reach out to her.

Of course, it doesn’t always work. But there’s hope in the play that Harry and Draco might form some sort of non-hatred-based relationship. There’s certainty that his son will be supported by Draco’s son, just as he was supported by Ron, Hermione, Luna, Neville.

And most crucially, his partner and child hold him up while he has to once again relive the deaths of his parents, the moment that cursed him to a life of trauma and survivor’s guilt.

Rowling revisits the scenes again, collapses the Nativity and Crucifixion into one moment, structures it like a Passion Play, and sets the whole thing in a Muggle’s Christian church. But again, she veers away from Lewis’ authoritarian themes: Harry is no Aslan. He doesn’t lecture, he doesn’t deliver messages from on high. He’s a fucked up, emotionally damaged adult dealing with PTSD, avoiding adult responsibility because he craves adrenaline, alienating his son, compartmentalizing memories and nightmares that would turn most peoples’ hair white. He’s not a savior anymore, he’s part of a family, and he only succeeds by allowing them to hold him up.

After all that, the play ends in a graveyard. Underlining Cedric’s importance, Cursed Child reveals Harry’s other ritual: whenever he can get away from work, he travels to a graveyard on the Hogwarts grounds to visit Cedric’s grave. After all the anger and pain between Harry and Albus, after the fight with Delphi, after witnessing his parent’s deaths again, The Boy Who Lived has a father-son bonding session in a graveyard. And Albus, for the first time in his life, allows himself to bend a little bit toward his famous father:

Albus: Dad? Why are we here?

Harry: This is where I often come.

Albus: But this is a graveyard…

Harry: And here is Cedric’s grave.

Albus: Dad?

Harry: The boy who was killed—Craig Bowker—how well did you know him?

Albus: Not well enough.

Harry: I didn’t know Cedric well enough either. He could have played Quidditch for England. Or been a brilliant Auror. He could have been anything. And Amos is right—he was stolen. So I come here. Just to say sorry. When I can.

Albus: That’s a—good thing to do.

So we learn that Harry’s life isn’t just shot through with PTSD, or a constant longing for his parents—it is, in fact, haunted by death. He doesn’t give himself just one day a year to remember all the people he’s lost—he heads back to alma mater whenever he can to apologize to A Boy He Couldn’t Save.

Harry Potter and Cedric Diggory

Again, we could have gotten a centaur war or something. The Great Wizarding Bake Off films its new season at Honeydukes! Albus and Scorpius fall in love, but they can’t admit it ’cause their dads hate each other? …OK, that one kind of does happen. But instead of going on a more obvious, fun, “Let’s return to Hogwarts!” path, Rowling and Thorne used their story to deal honestly with the legacy of the books, and to keep building the moral framework established with Sorcerer’s Stone.

Rowling’s moral universe doesn’t depend on unwavering faith, nor on the idea that your elders are right. What Dumbledore does to Harry is not OK—and Dumbledore himself isn’t a holy Aslan figure, either. He’s a grief-stricken old man who’s haunted by the death of his sister, and terrified by his own youthful willingness to follow Grindelwald to the brink of evil. He sends a helpless child into the waiting arms of Voldemort without ever giving that boy a real choice. And Rowling makes sure to present us with Harry’s rage at this. She takes us through Harry’s own Gethsemane scenes so we can see the life he’s choosing to walk away from. She shows us all of Dumbledore’s doubt and fear when the two meet in King’s Cross during Harry’s “death.”

And then, 19 years later, we revisit Harry and find that her Boy Who Lived, and died, and lived again fucks up, and it nearly costs him his son. The wizard messiah isn’t a Christ stand-in—he was a frightened boy who did his best, and who grew into a traumatized man. He who needs to reckon with his nightmares and the abuse he suffered, so he can be honest with himself and his kids. Harry’s grief hasn’t made him stronger. It isn’t a thing he needs to endure, so he can join all of his dead friends in Wizard Narnia. His grief he will always carry with him, and he needs to find a way to talk about it, to explore it with his family and friends, so they can all be stronger together.

Leah Schnelbach is so excited she got to explain theodicy! And if you’re still willing to talk to her after that sentence, you can discuss Wizard Death with her over on Twitter!

Nile shipwreck discovery proves Herodotus right [Published articles]

At least the KCMO v KCK dispute would be abruptly ended [Published articles]

François Marier: Secure ssh-agent usage [Published articles]

ssh-agent was in the news recently due to the matrix.org compromise. The main takeaway from that incident was that one should avoid the ForwardAgent (or -A) functionality when ProxyCommand can do and consider multi-factor authentication on the server-side, for example using libpam-google-authenticator or libpam-yubico.

That said, there are also two options to ssh-add that can help reduce the risk of someone else with elevated privileges hijacking your agent to make use of your ssh credentials.

Prompt before each use of a key

The first option is -c which will require you to confirm each use of your ssh key by pressing Enter when a graphical prompt shows up.

Simply install an ssh-askpass frontend like ssh-askpass-gnome:

apt install ssh-askpass-gnome

and then use this to when adding your key to the agent:

ssh-add -c ~/.ssh/key

Automatically removing keys after a timeout

ssh-add -D will remove all identities (i.e. keys) from your ssh agent, but requires that you remember to run it manually once you're done.

That's where the second option comes in. Specifying -t when adding a key will automatically remove that key from the agent after a while.

For example, I have found that this setting works well at work:

ssh-add -t 10h ~/.ssh/key

where I don't want to have to type my ssh password everytime I push a git branch.

At home on the other hand, my use of ssh is more sporadic and so I don't mind a shorter timeout:

ssh-add -t 4h ~/.ssh/key

Making these options the default

I couldn't find a configuration file to make these settings the default and so I ended up putting the following line in my ~/.bash_aliases:

alias ssh-add='ssh-add -c -t 4h'

so that I can continue to use ssh-add as normal and have not remember to include these extra options.

Climate scientists reconsider the meaning and implications of drought in light of a changing world [Published articles]

Maps of the American West have featured ever darker shades of red over the past two decades. The colors illustrate the unprecedented drought blighting the region. In some areas, conditions have blown past severe and extreme drought into exceptional drought. But rather than add more superlatives to our descriptions, one group of scientists believes it's time to reconsider the very definition of drought.

How The Advance Weather Forecast Got Good [Published articles]

NPR notes today's "supercomputer-driven" weather modelling can crunch huge amounts of data to accurately forecast the weather a week in advance -- pointing out that "a six-day weather forecast today is as good as a two-day forecast was in the 1970s." Here's some highlights from their interview with Andrew Blum, author of The Weather Machine: A Journey Inside the Forecast : One of the things that's happened as the scale in the system has shifted to the computers is that it's no longer bound by past experience. It's no longer, the meteorologists say, "Well, this happened in the past, we can expect it to happen again." We're more ready for these new extremes because we're not held down by past expectations... The models are really a kind of ongoing concern. ... They run ahead in time, and then every six hours or every 12 hours, they compare their own forecast with the latest observations. And so the models in reality are ... sort of dancing together, where the model makes a forecast and it's corrected slightly by the observations that are coming in... It's definitely run by individual nations -- but individual nations with their systems tied together... It's a 150-year-old system of governments collaborating with each other as a global public good... The positive example from last month was with Cyclone Fani in India. And this was a very similar storm to one 20 years ago, that tens of thousands of people had died. This time around, the forecast came far enough in advance and with enough confidence that the Indian government was able to move a million people out of the way.

Share on Google+

Read more of this story at Slashdot.

History and Effective Use of Vim [Published articles]

FAA makes it easy for drone hobbyists to fly in controlled airspace [Published articles]

It's now much easier to ask for permission to fly drones in controlled airspace even if you're only doing it for fun. The FAA is giving recreational drone pilots access to the Low Altitude Authorization and Notification Capability (LAANC) system -- t...

QDB - 7634 [Published articles]

<SimonSapin> nox: the history of packaging in python is super complicated
<nox> SimonSapin: All I need to know is, is setuptools old stuff or new stuff?
<SimonSapin> nox: its been both
<SimonSapin> in that order

RSS feeds are available for many U.S. Government collections [Published articles]

Minecraft as a Kubernetes admin tool [Published articles]

The History and Politics of Wuxia [Published articles]

I first fell in love with wuxia when I was around eight or so. I remember running around swinging the bright yellow handle of my toy broom as a sword, calling a sprawling tiger stuffed toy my master and pretending the shower was a waterfall I could learn the secrets of the universe under. I ran on tiptoe because that was somehow more like flying—or “hing gung” 輕功, the art of lightness, as I would eventually become fond of translating it .

But even before then I was deeply familiar with the genre; its many conventions have become baked into the everyday language of the Hong Kong I grew up in. My relatives all played Mahjong and much like with sports, discussions around these games borrowed heavily from the language of sparring martial artists. I’d ask at the end of every Sunday, what are the results of the battles. When asking for a family recipe, someone would joke that they’d have to become the apprentice of this or that auntie. Later, there was the world of study guides and crib sheets, all calling themselves secret martial arts manuals. The conventions around martial artists going into seclusion to perfect their craft and going mad in the pursuit of it take on new meaning as slang around cramming for exams.

Which is all to say, I really love wuxia.

“Wuxia”, literally meaning “martial hero”, is a genre about martially powerful heroes existing in a world parallel to and in the shadows of the Chinese imperial history.

The archetypal wuxia hero is someone carving out his own path in the world of rivers and lakes, cleaving only to their own personal code of honour. These heroes are inevitably embroiled in personal vengeance and familial intrigue, even as they yearn for freedom and seek to better their own skills within the martial arts. What we remember of these stories are the tournaments, the bamboo grove duels and the forbidden love.

Parallels are often drawn to knights errant of medieval romances, with many older translations favouring a chivalric vocabulary. There are also obvious comparisons to be made with the American western, especially with the desperados stumbling into adventures in isolated towns in search for that ever-elusive freedom.

It is easy to think of wuxia in these universal terms with broad themes of freedom, loyalty and justice, but largely divorced from contemporary politics. These are stories, after all, that are about outlaws and outcasts, existing outside of the conventional hierarchies of power. And they certainly do have plenty to say about these big universal themes of freedom, loyalty and justice.

But this is also a genre that has been banned by multiple governments within living memory. Its development continues to happen in the shadows of fickle Chinese censorship and at the heart of it remains a certain defiant cultural and national pride intermingled with nostalgia and diasporic yearning. The vast majority of the most iconic wuxia texts are not written by Chinese authors living comfortably in China, but by a dreaming diaspora amid or in the aftermath of vast political turmoil.

Which is all to say that the world of wuxia is fundamentally bound up with those hierarchies of power it seeks to reject. Much like there is more to superheroes than dorky names, love triangles, and broad universal ideals of justice, wuxia is grounded in the specific time and place of its creation.

Biography of Old Dragon-beard (虯髯客傳) by Du Guangting (杜光庭, 850-933) is commonly cited as the first wuxia novel. It chronicles the adventures of the titular Old Dragon-beard, who along with the lovers, Hongfu 紅拂 and Li Jing 李靖, make up the Three Heroes of the Wind and Dust. But the story isn’t just supernatural adventures; they also help Li Shimin 李世民 found the Tang Dynasty (618–906). The martial prowess and the seemingly eccentric titles of the characters aside, the act of dynastic creation is unavoidably political. 虯髯客傳 pivots around Hongfu’s ability to discern the true worth a man, which leads her to abandon her prior loyalties and cleave her love to Li Jing and his vision for a better empire. Not to mention Du wrote this and many of his other works whilst in exile with the Tang imperial court in the south, after rebels sacked the capital and burnt his books. Knowing this, it is difficult not to see Du as mythologising the past into a parable of personal resonance, that perhaps he too was making decisions about loyalties and legacies, which court or emperor he should stay with, asking himself if the Tang would indeed rise again (as he himself, as a taoist has prophecised).

Other commonly cited antecedents to the modern wuxia genre are the 14th Century classics like Romance of the Three Kingdoms (三國演義) and Outlaws of the Marsh (水滸傳), the former of which is all about the founding of dynasties and gives to Chinese the now ubiquitously cited The empire, long divided, must unite; long united, must divide. Thus it has ever been (话说天下大势.分久必合,合久必分).

 

Revolutionaries, Rebels and Race in the Qing Dynasty

No era of imperial China was in possession of a “free press”, but the literary inquisitions under the Qing Dynasty (1644–1911) were particularly bloody and thorough. The Manchu elite suppressed any openly revolutionary sentiment in fiction, however metaphorical, and what is written instead is a literature that sublimates much of that discontent into historical fiction nostalgic for the eras of Han dominance. Wandering heroes of the past were refashioned into a pariah elite, both marginalised from mainstream society but also superior to it with their taoist-cultivated powers.

Whilst earlier quasi-historical epics and supernatural tales are replete with gods and ghosts, late Qing wuxia begins to shed these entities and instead grounds itself in a world where taoist self-cultivation grants immense personal powers but not divinity itself. In each of the successive reprintings of Three Heroes and Five Gallants (三俠五義), editors pruned the text of anachronisms and supernatural flourishes.

The parallel world of secret societies, foreign cults, bickering merchants and righteous martial clans came to be known as jianghu, literally “rivers and lakes”. As a metaphor, it was first coined by taoist philosopher, Zhuangzi 莊子, to describe a utopian space outside of cutthroat court politics, career ambitions and even human attachments. This inspires subsequent generations of literati in their pursuits of aesthetic hermitism, but the jianghu we know today comes also from the waterways that form the key trade routes during the Ming Dynasty (1368–1644). To the growing mercantile classes, jianghu referred to the actual rivers and canals traversed by barges heavy with goods and tribute, a byname for the prosperous Yangtze delta.

These potent lineages of thought intermingle into what jianghu is within martial arts fiction today, that quasi historical dream time of adventure. But there is also another edge to it. In Stateless Subjects: Chinese Martial Arts History and Postcolonial History, Petrus Liu translates jianghu as “stateless”, which further emphasizes that the hero’s rejection of and by the machineries of government. Jianghu is thus a world that rejects the dictates of the state in favor of divine virtue and reason, but also of a sense of self created through clan and community.

The name of the genre, wuxia (“武俠“) comes from Japanese, where a genre of martially-focused bushido-inspired fiction called bukyō (“武侠”) was flourishing. It was brought into Chinese by Liang Qichao 梁启超, a pamphleteer writing in political exile in Japan, seeking to reawaken what he saw as Han China’s slumbering and forgotten martial spirit. In his political work, he holds up the industrialisation and militarisation of Meiji Japan (and its subsequent victory against Russia) as inspiration and seeks a similar restoration of racial and cultural pride for the Han people to be the “master of the Continent” above the hundred of different races who have settled in Asia.

Wuxia is fundamentally rooted in these fantasies of racial and cultural pride. Liang Qichao’s visions of Han exceptionalism were a response to subjugation under Manchu rule and Western colonialism, a martial rebuttal to the racist rhetoric of China being the “Sick Man of Asia”. But it is still undeniably ethno-nationalism built around the descendants of the Yellow Emperor conquering again the continent that is their birthright. Just as modern western fantasy has as its bones the nostalgia for a pastoral, premodern Europe, wuxia can be seen as a dramatisation of Sinocentric hegemony, where taoist cultivation grants power and stalwart heroes fight against an ever-barbaric, ever-invading Other.

 

Dreams of the Diaspora

Jin Yong 金庸 remains synonymous with the genre of wuxia in Chinese and his foundational mark on it cannot be overstated. His Condor Trilogy (射鵰三部曲) was serialised between 1957-63 and concerns three generations of heroes during the turbulent 12th-13th centuries. The first concerns a pair of sworn brothers, one loyal and righteous, the other clever and treacherous. Their friendship deteriorates as the latter falls into villainy, scheming with the Jin Empire (1115–1234) to conquer his native land. The second in the trilogy follows their respective children repeating and atoning for the mistakes of their parents whilst the Mongols conquer the south. The last charts the internal rivalries within the martial artists fighting over two peerless weapons whilst its hero leads his secret society to overthrow the Yuan Dynasty (1271–1368).

It’s around here that English articles about him start comparing him to Tolkien, and it’s not wholly unjustified, given how both created immensely popular and influential legendaria that draw heavily upon ancient literary forms. Entire genres of work have sprung up around them and even subversions of their work have become themselves iconic. Jin Yong laid down what would become the modern conventions of the genre, from the way fights are imagined with discrete moves, to the secret martial arts manuals and trap-filled tombs.

Buy it Now

Unlike Tolkien, however, Jin Yong’s work is still regularly (even aggressively) adapted. There are in existence nine tv adaptations of each instalment of the Condor Trilogy, for example, as well as a video game and a mobile game. And at time of writing, eight feature films and nine tv series based on his work are in production.

But Jin Yong’s work was not always so beloved by mainland Chinese audiences. For a long time he, along with the rest of wuxia, were banned and the epicentre of the genre was in colonial Hong Kong. It is a detail often overlooked in the grand history of wuxia, so thoroughly has the genre been folded into contemporary Chinese identity. It is hard at times to remember how much of the genre was created by these artists in exile. Or perhaps that is the point, as Hong Kong’s own unique political and cultural identity is being subsumed into that of the People’s Republic, so too is its literary legacy. Literalist readings of his work as being primarily about historical martial artists defang the political metaphors and pointed allegories.

Jin Yong’s work is deeply political. Even in the most superficial sense, his heroes intersect with the politics of their time, joining revolutionary secret societies, negotiating treaties with Russia and fighting against barbarian invaders. They are bound up in the temporal world of hierarchy and power. Legend of the Condor Hero (射鵰英雄傳)’s Guo Jing 郭靖 becomes the sworn brother to Genghis Khan’s son, Tolui, and joins the Mongol campaign against the Khwarezmid Empire. Book and Sword (書劍恩仇錄)’s Chen Jialuo 陳家洛 is secretly the Qianlong Emperor’s half brother. The Deer and the Cauldron (鹿鼎記)’s Wei Xiaobao 韋小寶 is both best friends with the Kangxi Emperor and also heavily involved in a secret society dedicated to overthrowing the aforementioned emperor. Even Return of the Condor Hero (神鵰俠侶)‘s Yang Guo 楊過 ends up fighting to defend the remains of the Song Empire against the Mongols.

But it goes deeper than that. Jin Yong was a vocal critic of the Cultural Revolution, penning polemics against Mao Zedong and the Gang of Four during the late 60s. Beyond the immediate newspaper coverage, Jin Yong edited and published many more works both documenting and dissecting the Cultural Revolution.

Jin Yong described himself as writing every day one novel instalment and one editorial against the Gang of Four. Thus did they bleed together, the villains of Laughing in the Wind (笑傲江湖) becoming recognisable caricatures as it too rejected senseless personality cults.

In this light, his novels seem almost an encyclopaedia of traditional Chinese culture, its values and virtues, a record of it to stand bulwark against the many forces that would consign it all to oblivion. It is a resounding rebuttal to principles of the May Fourth Movement, that modernisation and westernisation are equivalents. To Jin Yong the old and the traditional were valuable, and it is from this we must build our new literature .

Taken together, Jin Yong’s corpus offers an alternate history of the Han people spanning over two thousand years from the Eastern Zhou (771–256 B.C.) to the Qing Dynasty (1644–1911). He fills in the intriguing gaps left in official records with folk heroes, court gossip and conspiracy theories. His text is dense with literary allusions and quotations from old Chinese poems.

His stories are almost all set during times of turmoil when what can be termed “China”, or at least, the Han people are threatened by barbarian invasion and internal corruption; pivotal moments in history that makes heroes and patriots out of ordinary men and women. All this Jin Yong immortalises with a deep yearning for a place and past that never quite was; nostalgia in the oldest sense of the word, with all the pain and pining and illusion that it implies.

It is arguably this very yearning, this conjuring of a real and relevant past from dry history books that makes Jin Yong’s work so endlessly appealing to the Chinese diaspora, as well as the mainland Chinese emerging from the Cultural Revolution. This alternate history dramatises the complexities of Han identity, all the times it has been threatened, disrupted and diluted in history, but at the same time it gave hope and heroics. These were stories as simple or as complex as the reader wanted it to be.

 

Chinese Imperialism and Han Hegemony

It is sometimes hard to remember that Jin Yong and all the rest of wuxia was once banned in the People’s Republic of China, so thoroughly have they now embraced his work. As late as the 1990s was Jin Yong decried as one of the “Four Great Vulgarities of Our Time” (alongside the four heavenly kings of cantopop, Jackie Chan and sappy Qiong Yao romances).

In recent decades, the CCP has rather dramatically changed its relationship with the past. The censorship machine is still very active, but it does not have in its crosshairs the decadent and feudal genre of wuxia (though there have been exceptions, especially during the run up to the Republic’s 70th anniversary when all frivolous dramas were put on pause; it is important to remember that the censors are not always singular or consistent in their opinions). But more importantly, the Party no longer draws power from a radical rejection of the past, instead it is embraces utterly, celebrated at every turn. Traditionalism now forms a core pillar of their legitimacy, with all five thousand years of that history validating their rule. The State now actively promotes all those superstitions and feudal philosophies it once held in contempt.

Along with the shifting use of history to inspire nationalism has Jin Yong been rehabilitated and canonised. It’s arguably that revolutionary traditionalism —that he was preserving history in a time of its destruction—that makes him so easy to rehabilitate. Jin Yong’s work appeals both to the conservative mind with its love of tradition and patriotic themes, but also to rebels in its love of outlaw heroes.

It isn’t that these stories have nothing to say on themes of a more abstract or universal sense of freedom or justice, but that they are also very much about the specifics of Han identity and nationalism. Jin Yong’s heroes often find themselves called to patriotism, even as they navigate their complex or divided loyalties, they must defend “China” in whatever form it exists in at the time against barbaric, alien invaders. Even as they function as straightforward stories of nationalistic defence, they are also dramatising disruptions of a simplistic or pure Chinese identity, foregrounding characters from marginalised (if also often exoticised) ethnicities and religions.

Jin Yong’s hero Guo Jing is Han by birth and Mongol by adoption. He ultimately renounces his loyalty to Genghis Khan and returns to his Han homeland to defend it from Mongol conquest. Whilst one can read Jin Yong’s sympathy and admiration for the Mongols as an attempt to construct an inclusive nationalism for modern China, Guo Jing’s participation as a Han hero in the conquest of Central Asia also functions as a justification of modern Han China’s political claim on that imperial and colonial legacy.

Book and Sword has this even more starkly as it feeds the popular Han fantasy that the Kangxi Emperor is not ethnically Manchu but instead, a Han changeling. He is forced by the hero of the novel Chen Jialuo to swear an oath to acknowledge his Han identity and overthrow the Manchus, but of course, he then betrays them and subjugates not only the Han but also the “Land of Wei” (now known as Xin Jiang, where the genocide is happening). Still there is something to be said about how this secret parentage plot attributes the martial victories of the Qing to Han superiority and justifies the Han inheritance of former Qing colonies.

The Uyghur tribes are portrayed with sympathy in Book and Sword. They are noble and defiant and devout. Instead of savages who need to be brought to heel, they are fellow resistance fighters. It alludes to an inclusive national identity, one in which Han and Uyghur are united by their shared suffering under Manchu rule. It can also be argued that their prominence disrupts the ideal of a pure Han-centric Chineseness. But what good is inclusion and unity to those who do not want to be part of that nation? Uyghurs, being a people suffering occupation, actively reject the label of “Chinese Muslims”.

Furthermore, the character of Kasili in Book and Sword, based on the legend of the Fragrant Concubine, is drenched in orientalist stereotype. Chen first stumbles upon her bathing naked in a river, her erotic and romantic availability uncomfortably paralleling that of her homeland. When the land of Wei falls to the emperor’s sword and Kasili is taken as a concubine, she remains loyal to the Han hero she fell in love with, ultimately killing herself to warn Chen of the emperor’s duplicity. Conquest and imperial legacy is thus dramatised as a love triangle between a Uyghur princess, a Han rebel and a Manchu emperor.

Chen, it should be noted, falls in love and marries a different Uyghur princess for his happy ending.

Amid other far more brutal policies meant to forcibly assimilate and eradicate Uyghur identity, the PRC government encouraged Han men to take Uyghur women as wives. Deeply unpleasant adverts still available online extolled the beauty and availability of Uyghur women, as something and somewhere to be conquered. It is impossible not to be reminded of this when reading about the beautiful and besotted Kasili.

There is no small amount of political allegory to be read between the lines of Jin Yong, something he became increasingly frank about towards the end of his life. Condor Trilogy with its successive waves of northern invaders can be seen as echoing at the Communist takeover of China. The success of Wei Xiaobao’s affable cunning can be a satire on the hollowness materialistic 70s modernity. But Jin Yong himself proved to be far less radical than his books as he sided with the conservative anti-democracy factions within Hong Kong during the Handover.

In an 1994 interview, Jin Yong argues against the idea that China was ever under “foreign rule”, instead proposing that the many ethnic groups within China are simply taking turns on who happens to be in ascendance. All wars are thus civil wars and he neatly aligns his novels with the current Chinese policies that oppress in the name of unity, harmony and assimilation, of “inclusive” nationalism.

The legacy of Jin Yong is a complex one. His work, like all art, contains multitudes and can sustain any number of seemingly contradictory interpretations. It is what is beautiful about art. But I cannot but feel that his rapid canonisation over the last decades in mainland China is a stark demonstration of how easily those yearning dreams of the diaspora can become nationalistic fodder.

 

In Closing

I did not come to bury wuxia, but to praise it. I wanted to show you a little bit of its complexities and history, as well as the ideals and ideologies that simmer under its surface.

For me, I just think it is too easy to see wuxia as a form of salvation. Something to sustain and inspire me in a media landscape hostile to people who look like me. To give me the piece of me that I have felt missing, to heal a deep cultural wound. After all, Hollywood or broader Anglophone media might be reluctant to make stories with Asian protagonists, but I can turn to literally all of wuxia. American TV series won’t make me a fifty episode epic about two pretty men eyefucking each other that also has a happy ending, but I will always have The Untamed.

It’s this insidious feeling of hope. That this genre is somehow wholly “unproblematic” because I am reconnecting with my cultural roots, that it can nourish me. That it can be safe that way. It is, after all, untouched by all the problematic elements in Anglophone mainstream that I have analysed to death and back. That it is some sort of oasis, untouched by colonialism and western imperialism. That it therefore won’t or can’t have that taint of white supremacy; it’s not even made by white people.

Perhaps it is just naive of me to have ever thought these things, however subconsciously. Articulating it now, it’s ridiculous. Han supremacy is a poisonous ideology that is destroying culture, hollowing out communities and actively killing people. In the face of its all-consuming genocide-perpetuating ubiquity, the least I can do is recognise its presence in a silly little genre I love. It just doesn’t seem too much to ask.

Jeannette Ng is originally from Hong Kong but now lives in Durham, UK. Her MA in Medieval and Renaissance Studies fed into an interest in medieval and missionary theology, which in turn spawned her love for writing gothic fantasy with a theological twist. She runs live roleplay games and is active within the costuming community, running a popular blog. Jeannette has been a finalist for the John W. Campbell Award for Best New Writer and the Sydney J Bounds Award (Best Newcomer) in the British Fantasy Awards 2018.

Report Finds Phone Network Encryption Was Deliberately Weakened [Published articles]

A weakness in the algorithm used to encrypt cellphone data in the 1990s and 2000s allowed hackers to spy on some internet traffic, according to a new research paper. Motherboard: The paper has sent shockwaves through the encryption community because of what it implies: The researchers believe that the mathematical probability of the weakness being introduced on accident is extremely low. Thus, they speculate that a weakness was intentionally put into the algorithm. After the paper was published, the group that designed the algorithm confirmed this was the case. Researchers from several universities in Europe found that the encryption algorithm GEA-1, which was used in cellphones when the industry adopted GPRS standards in 2G networks, was intentionally designed to include a weakness that at least one cryptography expert sees as a backdoor. The researchers said they obtained two encryption algorithms, GEA-1 and GEA-2, which are proprietary and thus not public, "from a source." They then analyzed them and realized they were vulnerable to attacks that allowed for decryption of all traffic. When trying to reverse-engineer the algorithm, the researchers wrote that (to simplify), they tried to design a similar encryption algorithm using a random number generator often used in cryptography and never came close to creating an encryption scheme as weak as the one actually used: "In a million tries we never even got close to such a weak instance," they wrote. "This implies that the weakness in GEA-1 is unlikely to occur by chance, indicating that the security level of 40 bits is due to export regulations." Researchers dubbed the attack "divide-and-conquer," and said it was "rather straightforward." In short, the attack allows someone who can intercept cellphone data traffic to recover the key used to encrypt the data and then decrypt all traffic. The weakness in GEA-1, the oldest algorithm developed in 1998, is that it provides only 40-bit security. That's what allows an attacker to get the key and decrypt all traffic, according to the researchers.

Read more of this story at Slashdot.

An Indian art form called Rangoli [Published articles]

Fact or fantasy? Tales from the linguistic fringe [Published articles]

November 2020 SaltStack CVEs: CVE-2020-16846, CVE-2020-17490, CVE-2020-25592 [Published articles]

SaltStack has released a security update to Salt to address three critical vulnerabilities. We strongly recommend that you prioritize this update.

This is a security release. The following CVE’s were fixed as part of this release:

  • CVE-2020-16846
  • CVE-2020-17490
  • CVE-2020-25592

Read more

Sandro Tosi: Multiple git configurations depending on the repository path [Published articles]

For my work on Debian, i want to use my debian.org email address, while for my personal projects i want to use my gmail.com address.

One way to change the user.email git config value is to git config --local in every repo, but that's tedious, error-prone and doesn't scale very well with many repositories (and the chances to forget to set the right one on a new repo are ~100%).

The solution is to use the git-config ability to include extra configuration files, based on the repo path, by using includeIf:

Content of ~/.gitconfig:

[user]
name = Sandro Tosi
email = <personal.address>@gmail.com

[includeIf "gitdir:~/deb/"]
path = ~/.gitconfig-deb

Every time the git path is in ~/deb/ (which is where i have all Debian repos) the file ~/.gitconfig-deb will be included; its content:

[user]
email = morph@debian.org
That results in my personal address being used on all repos not part of Debian, where i use my Debian email address. This approach can be extended to every other git configuration values.

All DuckDuckGo bang operators on one page [Published articles]

Some Countries Reopened Schools. What Did They Learn About Kids and Covid? [Published articles]

Studies from around the world suggest that success depends on class size, distancing, the age of the students, and how prevalent the virus is locally.

An Acceptance, in rough times [Published articles]

Last night, starting at at 1:00 in the morning, my time, was the Nebula Awards ceremony, held by the SFWA, the Science Fiction and Fantasy Writers of America. The first award they gave out was the Ray Bradbury Award for Outstanding Dramatic Presentation, and it meant the world that it went to episode 3 of Good Omens, "Hard Times".

Exactly one year ago, Good Omens was released to the world, on Amazon's Prime Video service. Thirty years ago this month, Good Omens was published as a novel. It seems amazing that it still has so much life, and still feels so relevant to people's own lives. Especially now.

Here's the complete list of all the nominees and of the awards given out at the Nebulas last night. Congratulations to everyone nominated!

The entire proceedings existed in virtual space, via the magic of Zoom and other technological things.
This is what it looked like on my screen, just before we went live...


Here is the speech I gave. I wore a hat, because, even though Terry Pratchett loved pointing out that he was a hat person and I wasn't, not really, I thought it would have amused him.

I didn't intend to write the television adaptation of Good Omens. I did it because as he knew his own immeasurable light was dimming, Terry Pratchett wrote to me, telling me I had to do it. That no-one else had the passion for the “old girl” that the two of us had. And I was the one of us who had to make it happen, so he could see it before the lights went out.

I'm used to dealing with the problems of fictional people.  Now I found myself dealing with much harder problems, of real people and immutable budgets.  But I was even more determined to make something Terry would have been proud of. And I was part of an amazing team – Douglas Mackinnon, our director, Rob Wilkins, Chris Sussman and Simon Winstone and the folk from BBC Studios, the Amazon Studios team, and above us all the cast and the crew, who united and went over and above what anyone asked of them to tell, together, a kind of love story about protecting the world, about an angel who isn't as angelic as he ought to be, and a demon who likes people. And for them, I want to thank Michael Sheen and David Tennant.

Terry and I had written a book about averting the end of the world, about the power of not going to war, about an armageddon that didn't have to happen.

When I was a boy, I was told that there was a curse, “May you live in interesting times”. And that made me sad, because I wanted to live in interesting times. I thought I did.

And now, we are all of us living in Interesting Times. The Horsepeople are riding out, as they have ridden so many times before, and the world still needs saving – from plague, from racism, from foolishness and selfishness and pain. It says in Good Omens that we have to save ourselves, because nobody else is going to sort it out for us. And we do. 

It feels almost indecent to be accepting an award while so many people are hurting, but thank you, from me and from Douglas, who took the words and made them so brilliantly come to life. This is for Terry Pratchett.

You can watch the whole ceremony at: 

https://www.facebook.com/SFWA.org/videos/996082517476423/

or at this YouTube link:
  


(The Good Omens bit starts around 22:30)



My list of underrated movie scores and themes... Part 1 [Published articles]

Been putting this together for a while... more to come.
In no particular order, though grouped by composer.
To be clear, I'm in no way saying these are unknown themes or not loved. In my limited experience, they just don't get the same acclaim as some more well-known scores, and I feel they deserve recognition! These are just pieces of music uncannily suited to their films, and work perfectly in the movie while also standing alone as wonderful pieces of music.

And while I haven't completely steered away from the John Williams' and Jerry Goldsmiths of the world, I have tried to include slightly more off-kilter selections that are truly fantastic.

Basil Poledouris
Klendathu Drop - Starship Troopers

https://www.youtube.com/watch?v=CIGHCoVzqtk&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=2&t=0s

Robocop Theme - Robocop

https://www.youtube.com/watch?v=Kb1_38445vA&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=3&t=0s

Riddle of Steel & Riders of Doom - Conan the Barbarian

https://www.youtube.com/watch?v=EAFtiUoq6TE&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=4&t=0s

Ennio Morricone

Love Theme - Cinema Paradiso

https://www.youtube.com/watch?v=osOE3trekhg&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=9&t=0s

Complete Score - The Thing

https://www.youtube.com/watch?v=zgiSXRoG2tQ

Ecstasy of Gold - The Good, The Bad, and The Ugly

https://www.youtube.com/watch?v=enuOArEfqGo

Bill Conti

Going The Distance & The Final Bell - Rocky

https://www.youtube.com/watch?v=knOrIBEqxYc&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=14&t=0s

Main Theme - The Right Stuff

https://www.youtube.com/watch?v=tCblQ_fnPpc&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=15&t=0s

Jerry Goldsmith

Main Theme - Capricorn One

https://www.youtube.com/watch?v=aXiNHJ5TANs&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=17&t=0s

Main Theme - Gremlins II (and Gremlins... just a great performance of it)

https://www.youtube.com/watch?v=3yxxSU0nw64

Main Title - Planet of the Apes

https://www.youtube.com/watch?v=a1rq6NoddX0

The Enterprise - Star Trek: The Motion Picture

https://www.youtube.com/watch?v=w1Cvyrvxlbk

Erich Wolfgang Korngold

Main Title - Kings Row (also... the inspiration for Star Wars...)

https://www.youtube.com/watch?v=tysCiL1-24w

Main Title - Reunion - The Sea Hawk

https://www.youtube.com/watch?v=hSkA-Ntst5w

John Williams

Main Theme - Seven Years in Tibet (one of his best)

https://www.youtube.com/watch?v=H3--WW2cNYY

Main Theme - Born on the Fourth of July

https://www.youtube.com/watch?v=ELKzmZK5Dec

With Malice Towards None - Lincoln
https://www.youtube.com/watch?v=BqDIgf5THbk&list=PLVWEHrcKGof5WwMraVM42fIVA_vqJd1XH&index=21&t=0s

Alan Silvestri

Main Theme - Predator

https://www.youtube.com/watch?v=9c3biXCLUZY

Main Theme - Contact (Maybe my fav on the list... I'm a sucker for sentimentality... Sue me)

https://www.youtube.com/watch?v=OrqWF2GmXE4

Captain America March - Captain America: The First Avenger

https://www.youtube.com/watch?v=qrXwAeJ87Bk

MISC
Junkie Xl - Mad Max: Fury Road

https://www.youtube.com/watch?v=U3Mg8GJpVfo

Daft Punk - Tron Legacy

https://www.youtube.com/watch?v=qolzPKVQa10

James Horner - Commando

https://www.youtube.com/watch?v=REb3vFSkQEg

submitted by /u/theblackshell to r/moviemusic
[link] [comments]

'How to build a Nintendo Switch' for coronavirus #StayAtHome gaming [Published articles]

Wow, man. Some of us take on more extreme projects during the Great Coronavirus Quarantine than others.

This ambitious fellow shows you how to build a Nintendo Switch, with a beautiful and wholesome purpose: “to Starve Online Price Gougers” who are jacking up the prices because demand is high for Nintendo Switch, and availability is nil.

Here's their introduction to the HOWTO gallery, which is amazing and stupendous.

After playing New Horizons and hyping it up to my friends, they decided they wanted a Switch. They called around to different retailers every day for a week with no luck finding anyone who had one in stock. No one knew when the next shipment would be. This led to an online search like Craigslist, OfferUp, and Ebay.

Unfortunately everyone knows the rest. Upwards of $450 to $600 in the Seattle area for a used Switch. Some with and without all the accessories. This enraged me to the point of telling them I could build one cheaper out of spare parts. So they hired me to do just that. If anyone is interested in doing the same here is my step by step buying guide along with assembly instructions and a pricing guide.

1. Game Cartridge Card Slot Socket Board w/Headphones Port - $15
2. NS Console Micro SD TF Memory Card Slot Port Socket Reader - $5
3. Nintendo Switch HAC-001 CPU Cooling Heatsink - $7
4. Game Cartridge Card Plastic Cover - $1
5. Console Speaker Replacement Parts For Nintendo Switch Built in speaker - $8
6. Wifi Antenna Connecting Cable (Short) $2
7. Wifi Antenna Connecting Cable (Long) $2
8. Internal Cooling Fan - $3
9. Power & Volume Button control flex cable (w/ buttons and rubber conductor) - $4
10. Side Slider Sliding Rail Flex Cable (Left) - $3
11. Side Slider Sliding Rail Flex Cable (Right) - $3
12. Replacement Top Housing Shell Case Face plate -$6
13. Nintendo Switch Console Replacement Battery (New) - $15
14. Replacement Bottom Housing Shell Transparent Case Face plate -$5
15. Touch Screen Digitizer Adhesive - $0.50
16. Touch Screen Digitizer - $9
17. LCD Display Screen Replacement - $12
18. Shield Plate - $2
19. Iron Middle Frame - $6
20. (Not Pictured Here) - 100% WORKING OEM NINTENDO SWITCH REPLACEMENT LOGIC BOARD MOTHERBOARD - $95
21. (Not Pictured Here) - Full Screw Replacement Set - $2
22. (Not Pictured Here) - (Removal of Copper Sicker on CPU)

Grand Total For Used Parts Build: = $199
Ebay Average Price Jan 2020: = (between $175 and $225)
Ebay Average Price April 2020: = (between $300 and $400)

I am sure I made made mistakes in this post so feel free to correct me if I am wrong about anything.

Good Luck!
And screw you if you are one of the bad guys making a buck off of a crisis.

Here you go...

How to Build A Nintendo Switch to Starve Online Price Gougers
by @sarbaaz37

How to Build A Nintendo Switch to Starve Online Price Gougers

Stuck at home? Entertain or educate yourself for free [Published articles]

It used to be that being a couch potato was almost universally deemed a negative—but it’s funny how it only takes a contagious epidemic to turn the normal state of things on its head. Fortunately, nobody with a computer need be without ways to occupy their  time.

Publishers, studios, and other media agencies are providing free offerings to give people plenty to do to ride out the corona lockdowns—as well as tools to assist self-education or learning at home. Here are a few of them I’ve noticed.

Educational/children’s book publisher Scholastic is offering a free 20-day learn-at-home program for grades K-9 via its web site—very handy for those in areas whose schools have closed down.

Would your children like to learn more about whales? Seattle-based research institute Oceans Initiative has launched a free Virtual Marine Biology Camp to teach school-closed children more about aquatic life. They’re holding live sessions every Monday and Thursday at 11 a.m. Pacific (2 p.m. Eastern) to help give those out-of-school children something educational to do.

Audiobook publisher and Amazon subsidiary Audible.com is making hundreds of audiobook titles available for free for the duration of school closures, via stories.audible.com.

NPR, the Sarasota Herald-Tribune, and CNET, among others, have articles collecting a lot of other free entertainment and education sources that weren’t free before the Corona quarantines. (Indeed, all you need do is google “coronavirus free entertainment” to find all the others who had the same idea.) But there are also still plenty of things that were already free and still are.

Baen’s Free Library is, of course, still just as free as it ever was. If you’re a member of a compatible public library, Hoopla Digital will let you borrow a limited number of ebooks, audiobooks, albums, movies, or TV episodes per month for free. And you still have access to Project Gutenberg, Librivox for audiobooks, Archive.org for all sorts of content, and all the other public-domain sites out there.

Online academic database JSTOR has over 6,000 ebooks and 150 journals that are available to the general public, and could also help to fill the education gap with schools closed down.

If you’re looking for something interesting to watch, Open Culture has links to over 200 free documentary films online, on subjects as diverse as Hayao Miyazaki and M.C. Escher. The site also includes links to free ebooks, audiobooks, online courses, and textbooks.

If you’re into anime, most of Crunchyroll‘s anime titles are available to watch for free (save for the very newest episode). Resolution may be limited, and you may have to put up with advertisements—but free is free, right? Pluto TV has over 250 channels of free video content, too, with mobile apps for iOS and Android available. And YouTube has its usual countless hundreds of thousands of hours of enjoyable ways to entertain or improve yourself, including its “Learning” category.

If you’re more into computer games, you could check out the Homecoming City of Heroes servers. Coming up on a full year since the game originally returned, it has thousands of players once again enjoying life in the early-2000s superhero MMO. (I play primarily on the Torchbearer shard, myself, and am always happy to help out new or returning players.)

There are many more free education or entertainment resources than I could even list, and there will doubtless be more the longer this lockdown goes on. How about adding your favorites in the comments?

Photo by Eric Antunes on Pexels.com


If you found this post worth reading and want to kick in a buck or two to the author, click here.

Daniel Lange: Fixing the Nextcloud menu to show more than eight application icons [Published articles]

I have been late to adopt an on-premise cloud solution as the security of Owncloud a few years ago wasn't so stellar (cf. my comment from 2013 in Encryption files ... for synchronization across the Internet). But the follow-up product Nextcloud has matured quite nicely and we use it for collaboration both in the company and in FLOSS related work at multiple nonprofit organizations.

There is a very annoying "feature" in Nextcloud though that the designers think menu items for apps at the top need to be limited to eight or less to prevent information overload in the header. The whole item discussion is worth reading as it it an archetypical example of design prevalence vs. user choice.

And of course designers think they are right. That's a feature of the trade.
And because they know better there is no user configurable option to extend that 8 items to may be 12 or so which would prevent the annoying overflow menu we are seeing with 10 applications in use:

Screenshot of stock Nextcloud menu

Luckily code can be changed and there are many comments floating around the Internet to change const minAppsDesktop = 8. In this case it is slightly complicated by the fact that the javascript code is distributed in compressed form (aka "minified") as core/js/dist/main.js and you probably don't want to build the whole beast locally to change one constant.

Basically

const breakpoint_mobile_width = 1024;

const resizeMenu = () => {
    const appList = $('#appmenu li')
    const rightHeaderWidth = $('.header-right').outerWidth()
    const headerWidth = $('header').outerWidth()
    const usePercentualAppMenuLimit = 0.33
    const minAppsDesktop = 8
    let availableWidth = headerWidth - $('#nextcloud').outerWidth() - (rightHeaderWidth > 210 ? rightHeaderWidth : 210)
    const isMobile = $(window).width() < breakpoint_mobile_width
    if (!isMobile) {
        availableWidth = availableWidth * usePercentualAppMenuLimit
    }
    let appCount = Math.floor((availableWidth / $(appList).width()))
    if (isMobile && appCount > minAppsDesktop) {
        appCount = minAppsDesktop
    }
    if (!isMobile && appCount < minAppsDesktop) {
        appCount = minAppsDesktop
    }

    // show at least 2 apps in the popover
    if (appList.length - 1 - appCount >= 1) {
        appCount--
    }

    $('#more-apps a').removeClass('active')
    let lastShownApp
    for (let k = 0; k < appList.length - 1; k++) {
        const name = $(appList[k]).data('id')
        if (k < appCount) {
            $(appList[k]).removeClass('hidden')
            $('#apps li[data-id=' + name + ']').addClass('in-header')
            lastShownApp = appList[k]
        } else {
            $(appList[k]).addClass('hidden')
            $('#apps li[data-id=' + name + ']').removeClass('in-header')
            // move active app to last position if it is active
            if (appCount > 0 && $(appList[k]).children('a').hasClass('active')) {
                $(lastShownApp).addClass('hidden')
                $('#apps li[data-id=' + $(lastShownApp).data('id') + ']').removeClass('in-header')
                $(appList[k]).removeClass('hidden')
                $('#apps li[data-id=' + name + ']').addClass('in-header')
            }
        }
    }

    // show/hide more apps icon
    if ($('#apps li:not(.in-header)').length === 0) {
        $('#more-apps').hide()
        $('#navigation').hide()
    } else {
        $('#more-apps').show()
    }
}

gets compressed during build time to become part of one 15,000+ character line. The relevant portion reads:

var f=function(){var e=s()("#appmenu li"),t=s()(".header-right").outerWidth(),n=s()("header").outerWidth()-s()("#nextcloud").outerWidth()-(t>210?t:210),i=s()(window).width()<1024;i||(n*=.33);var r,o=Math.floor(n/s()(e).width());i&&o>8&&(o=8),!i&&o<8&&(o=8),e.length-1-o>=1&&o--,s()("#more-apps a").removeClass("active");for(var a=0;a<e.length-1;a++){var l=s()(e[a]).data("id");a<o?(s()(e[a]).removeClass("hidden"),s()("#apps li[data-id="+l+"]").addClass("in-header"),r=e[a]):(s()(e[a]).addClass("hidden"),s()("#apps li[data-id="+l+"]").removeClass("in-header"),o>0&&s()(e[a]).children("a").hasClass("active")&&(s()(r).addClass("hidden"),s()("#apps li[data-id="+s()(r).data("id")+"]").removeClass("in-header"),s()(e[a]).removeClass("hidden"),s()("#apps li[data-id="+l+"]").addClass("in-header")))}0===s()("#apps li:not(.in-header)").length?(s()("#more-apps").hide(),s()("#navigation").hide()):s()("#more-apps").show()}

Well, we can still patch that, can we?

Continue reading "Fixing the Nextcloud menu to show more than eight application icons"

Terrier: An Open-Source Tool for Identifying and Analyzing Container and Image Components [Published articles]

As part of our Blackhat Europe talk “Reverse Engineering and Exploiting Builds in the Cloud” we publicly released a new tool called Terrier.

Announcing Terrier: An open-source tool for identifying and analysing container and image components.

In this blog post, I am going to show you how Terrier can help you identify and verify container and image components for a wide variety of use-cases, be it from a supply-chain perspective or forensics perspective. Terrier can be found on Github https://github.com/heroku/terrier.

Containers and images

In this blog post, I am not going to go into too much detail about containers and images (you can learn more here) however it is important to highlight a few characteristics of containers and images that make them interesting in terms of Terrier. Containers are run from images and currently the Open Containers Initiative (OCI) is the most popular format for images. The remainder of this blog post refers to OCI images as images.

Essentially images are tar archives that container multiple tar archives and meta-information that represent the “layers” of an image. The OCI format of images makes images relatively simple to work with which makes analysis relatively simple. If you only had access to a terminal and the tar command, you could pretty much get what you need from the image’s tar archive.

When images are utilised at runtime for a container, their contents become the contents of the running container and the layers are essentially extracted to a location on the container’s runtime host. The container runtime host is the host that is running and maintaining the containers. This location is typically /var/lib/docker/overlay2/<containerID>/. This location contains a few folders of interest, particularly the "merged" folder. The "merged" folder contains the contents of the image and any changes that have occurred in the container since its creation. For example, if the image contained a location such as /usr/chris/stuff and after creating a container from this image I created a file called helloworld.txt at the location /usr/chris/stuff. This would result in the following valid path on the container runtime host /var/lib/docker/overlay2/<containerID>/merged/usr/chris/stuff/helloworld.txt.

What does Terrier do?

Now that we have a brief understanding of images and containers, we can look at what Terrier does. Often it is the case that you would like to determine if an image or container contains a specific file. This requirement may be due to a forensic analysis need or to identify and prevent a certain supply-chain attack vector. Regardless of the requirement, having the ability to determine the presence of a specific file in an image or container is useful.

Identifying files in OCI images

Terrier can be used to determine if a specific image contains a specific file. In order to do this, you need the following:

  1. An OCI Image i.e TAR archive
  2. A SHA256 hash of a specific file/s

The first point can be easily achieved with Docker by using the following command:

$ docker save imageid -o myImage.tar

The command above uses a Docker image ID which can be obtained using the following command:

$ docker images

Once you have your image exported as a tar archive, you will then need to establish the SHA256 hash of the particular file you would like to identify in the image. There are multiple ways to achieve this but in this example, we are going to use the hash of the Golang binary go1.13.4 linux/amd64 which can be achieved with following command on a Linux host:

$ cat /usr/local/go/bin/go | sha256sum

The command above should result in the following SHA256 hash: 82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd

Now that we have a hash, we can use this hash to determine if the Golang binary is in the image myImage.tar. To achieve this, we need to populate a configuration file for Terrier. Terrier makes use of YAML configuration files and below is our config file that we save as cfg.yml:

mode: image
image: myImage.tar

hashes:
    - hash: '82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'

The config file above has multiple entries which allow us to specify the mode that Terrier will operate in and in this case, we are working with an image file (tar archive) so the mode is image. The image file we are working with is myImage.tar and the hash we are looking to identify is in the hashes list.

We are now ready to run Terrier and this can be done with the following command:

$ ./terrier

The command above should result in output similar to the following:

$ ./terrier 
[+] Loading config:  cfg.yml
[+] Analysing Image
[+] Docker Image Source:  myImage.tar
[*] Inspecting Layer:  34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
[*] Inspecting Layer:  6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
[*] Inspecting Layer:  6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
[!] Found file '6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759/usr/local/go/bin/go' with hash: 82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd
[*] Inspecting Layer:  a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
[*] Inspecting Layer:  aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
[*] Inspecting Layer:  d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
[*] Inspecting Layer:  dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c

We have identified a file /usr/local/go/bin/go located at layer 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759 that has the same SHA256 hash as the one we provided. We now have verification that the image “myImage.tar” contains a file with the SHA256 hash we provided.

This example can be extended upon and you can instruct Terrier to search for multiple hashes. In this case, we are going to search for a malicious file. Recently a malicious Python library was identified in the wild and went by the name “Jeilyfish”. Terrier could be used to check if a Docker image of yours contained this malicious package. To do this, we can determine the SHA256 of one of the malicious Python files that contains the backdoor:

$ cat jeIlyfish-0.7.1/jeIlyfish/_jellyfish.py | sha256sum
cf734865dd344cd9b0b349cdcecd83f79a751150b5fd4926f976adddb93d902c

We then update our Terrier config to include the hash calculated above.

mode: image
image: myImage.tar

hashes:
    - hash: '82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'
    - hash: 'cf734865dd344cd9b0b349cdcecd83f79a751150b5fd4926f976adddb93d902c'

We then run Terrier against and analyse the results:

$ ./terrier 
[+] Loading config:  cfg.yml
[+] Analysing Image
[+] Docker Image Source:  myImage.tar
[*] Inspecting Layer:  34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
[*] Inspecting Layer:  6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
[*] Inspecting Layer:  6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
[!] Found file '6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759/usr/local/go/bin/go' with hash: 82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd
[*] Inspecting Layer:  a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
[*] Inspecting Layer:  aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
[*] Inspecting Layer:  d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
[*] Inspecting Layer:  dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c

The results above indicate that our image did not contain the malicious Python package.

There is no limit as to how many hashes you can search for however it should be noted that Terrier performs all its actions in-memory for performance reasons so you might hit certain limits if you do not have enough accessible memory.

Identifying and verifying specific files in OCI images

Terrier can also be used to determine if a specific image contains a specific file at a specific location. This can be useful to ensure that an image is using a specific component i.e binary, shared object or dependency. This can also be seen as “pinning” components by ensuring that you are images are using specific components i.e a specific version of cURL.

In order to do this, you need the following:

  1. An OCI Image i.e TAR archive
  2. A SHA256 hash of a specific file/s
  3. The path and name of the specific file/s

The first point can be easily achieved with Docker by using the following command:

$ docker save imageid -o myImage.tar

The command above utilises a Docker image id which can be obtained using the following command:

$ docker images

Once you have your image exported as a tar archive, you will need to determine the path of the file you would like to identify and verify in the image. For example, if we would like to ensure that our images are making use of a specific version of cURL, we can run the following commands in a container or some other environment that resembles the image.

$ which curl
/usr/bin/curl

We now have the path to cURL and can now generate the SHA256 of this instance of cURL because in this case, we trust this instance of cURL. We could determine the hash by other means for example many binaries are released with a corresponding hash from the developer which can be acquired from the developer’s website.

$ cat /usr/bin/curl | sha256sum 
9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96

With this information, we can now populate our config file for Terrier:

mode: image
image: myImage.tar
files:
  - name: '/usr/bin/curl'
    hashes:
      - hash: '9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96'

We’ve saved the above config as cfg.yml and when we run Terrier with this config, we get the following output:

$ ./terrier
[+] Loading config:  cfg.yml
[+] Analysing Image
[+] Docker Image Source:  myImage.tar
[*] Inspecting Layer:  34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
[*] Inspecting Layer:  34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
[*] Inspecting Layer:  6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
[*] Inspecting Layer:  6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
[*] Inspecting Layer:  6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
[*] Inspecting Layer:  6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
[*] Inspecting Layer:  a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
[*] Inspecting Layer:  a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
[*] Inspecting Layer:  aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
[*] Inspecting Layer:  aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
[*] Inspecting Layer:  d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
[*] Inspecting Layer:  d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
[*] Inspecting Layer:  dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
[*] Inspecting Layer:  dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
[!] All components were identified: (1/1)
[!] All components were identified and verified: (1/1)
$ echo $?
0

The output above indicates that the file /usr/bin/curl was successfully identified and verified, meaning that the image contained a file at the location /usr/bin/curl and that the SHA256 of that file matched the hash we provided in the config. Terrier also makes use of return codes and if we analyse the return code from the output above, we can see that the value is 0 which indicates a success. If Terrier cannot identify or verify all the provided files, a return code of 1 is returned which indicates a failure. The setting of return codes is particularly useful in testing environments or CI/CD environments.

We can also run Terrier with verbose mode enable to get more information:

$ ./terrier 
[+] Loading config:  cfg.yml
[+] Analysing Image
[+] Docker Image Source:  myImage.tar
[*] Inspecting Layer:  34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
[*] Inspecting Layer:  6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
        [!] Identified  instance of '/usr/bin/curl' at: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560/usr/bin/curl 
        [!] Verified matching instance of '/usr/bin/curl' at: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560/usr/bin/curl with hash: 9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96
[*] Inspecting Layer:  6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
[*] Inspecting Layer:  a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
[*] Inspecting Layer:  aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
[*] Inspecting Layer:  d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
[*] Inspecting Layer:  dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
[!] All components were identified: (1/1)
[!] All components were identified and verified: (1/1)

The output above provides some more detailed information such as which layer the cURL files was located at. If you wanted more information, you could enable the veryveryverbose option in the config file but beware, this is a lot of output and grep will be your friend.

There is no limit for how many hashes you can specify for a file. This can be useful for when you want to allow more than one version of a specific file i.e multiple versions of cURL. An example config of multiple hashes for a file might look like:

mode: image
image: myImage.tar
files:
  - name: '/usr/bin/curl'
    hashes:
      - hash: '9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96'
      - hash: 'aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545'
      - hash: '6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759'
      - hash: 'd4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c'

The config above allows Terrier to verify if the identified cURL instance is one of the provided hashes. There is also no limit for the amount of files Terrier can attempt to identify and verify.

Terrier’s Github repo also contains a useful script called convertSHA.sh which can be used to convert a list of SHA256 hashes and filenames into a Terrier config file. This is useful when converting the output from other tools into a Terrier friendly format. For example, we could have the following contents of a file:

8946690bfe12308e253054ea658b1552c02b67445763439d1165c512c4bc240d ./bin/uname
6de8254cfd49543097ae946c303602ffd5899b2c88ec27cfcd86d786f95a1e92 ./bin/gzexe
74ff9700d623415bc866c013a1d8e898c2096ec4750adcb7cd0c853b4ce11c04 ./bin/wdctl
61c779de6f1b9220cdedd7dfee1fa4fb44a4777fff7bd48d12c21efb87009877 ./bin/dmesg
7bdde142dc5cb004ab82f55adba0c56fc78430a6f6b23afd33be491d4c7c238b ./bin/which
3ed46bd8b4d137cad2830974a78df8d6b1d28de491d7a23d305ad58742a07120 ./bin/mknod
e8ca998df296413624b2bcf92a31ee3b9852f7590f759cc4a8814d3e9046f1eb ./bin/mv
a91d40b349e2bccd3c5fe79664e70649ef0354b9f8bd4658f8c164f194b53d0f ./bin/chown
091abe52520c96a75cf7d4ff38796fc878cd62c3a75a3fd8161aa3df1e26bebd ./bin/uncompress
c5ebd611260a9057144fd1d7de48dbefc14e16240895cb896034ae05a94b5750 ./bin/echo
d4ba9ffb5f396a2584fec1ca878930b677196be21aee16ee6093eb9f0a93bf8f ./bin/df
5fb515ff832650b2a25aeb9c21f881ca2fa486900e736dfa727a5442a6de83e5 ./bin/tar
6936c9aa8e17781410f286bb1cbc35b5548ea4e7604c1379dc8e159d91a0193d ./bin/zforce
8d641329ea7f93b1caf031b70e2a0a3288c49a55c18d8ba86cc534eaa166ec2e ./bin/gzip
0c1a1f53763ab668fb085327cdd298b4a0c1bf2f0b51b912aa7bc15392cd09e7 ./bin/su
20c358f7ee877a3fd2138ecce98fada08354810b3e9a0e849631851f92d09cc4 ./bin/bzexe
01764d96697b060b2a449769073b7cf2df61b5cb604937e39dd7a47017e92ee0 ./bin/znew
0d1a106dc28c3c41b181d3ba2fc52086ede4e706153e22879e60e7663d2f6aad ./bin/login
fb130bda68f6a56e2c2edc3f7d5b805fd9dcfbcc26fb123a693b516a83cfb141 ./bin/dir
0e7ca63849eebc9ea476ea1fefab05e60b0ac8066f73c7d58e8ff607c941f212 ./bin/bzmore
14dc8106ec64c9e2a7c9430e1d0bef170aaad0f5f7f683c1c1810b466cdf5079 ./bin/zless
9cf4cda0f73875032436f7d5c457271f235e59c968c1c101d19fc7bf137e6e37 ./bin/chmod
c5f12f157b605b1141e6f97796732247a26150a0a019328d69095e9760b42e38 ./bin/sleep
b9711301d3ab42575597d8a1c015f49fddba9a7ea9934e11d38b9ff5248503a8 ./bin/zfgrep
0b2840eaf05bb6802400cc5fa793e8c7e58d6198334171c694a67417c687ffc7 ./bin/stty
d9393d0eca1de788628ad0961b74ec7a648709b24423371b208ae525f60bbdad ./bin/bunzip2
d2a56d64199e674454d2132679c0883779d43568cd4c04c14d0ea0e1307334cf ./bin/mkdir
1c48ade64b96409e6773d2c5c771f3b3c5acec65a15980d8dca6b1efd3f95969 ./bin/cat
09198e56abd1037352418279eb51898ab71cc733642b50bcf69d8a723602841e ./bin/true
97f3993ead63a1ce0f6a48cda92d6655ffe210242fe057b8803506b57c99b7bc ./bin/zdiff
0d06f9724af41b13cdacea133530b9129a48450230feef9632d53d5bbb837c8c ./bin/ls
da2da96324108bbe297a75e8ebfcb2400959bffcdaa4c88b797c4d0ce0c94c50 ./bin/zegrep

The file contents above are trusted SHA256 hashes for specific files. If we would like to use this list for ensuring that a particular image is making use of the files listed above, we can do the following:

$ ./convertSHA.sh trustedhashes.txt terrier.yml

The script above takes the input file trustedhashes.txt which contains our trusted hashes listed above and converts them into a Terrier friendly config file called terrier.yml which looks like the following:

mode: image
image: myImage.tar
files:
  - name: '/bin/uname'
    hashes:
       - hash: '8946690bfe12308e253054ea658b1552c02b67445763439d1165c512c4bc240d'
  - name: '/bin/gzexe'
    hashes:
       - hash: '6de8254cfd49543097ae946c303602ffd5899b2c88ec27cfcd86d786f95a1e92'
  - name: '/bin/wdctl'
    hashes:
       - hash: '74ff9700d623415bc866c013a1d8e898c2096ec4750adcb7cd0c853b4ce11c04'
  - name: '/bin/dmesg'
    hashes:
       - hash: '61c779de6f1b9220cdedd7dfee1fa4fb44a4777fff7bd48d12c21efb87009877'
  - name: '/bin/which'
    hashes:
       - hash: '7bdde142dc5cb004ab82f55adba0c56fc78430a6f6b23afd33be491d4c7c238b'
  - name: '/bin/mknod'

The config file terrier.yml is ready to be used:

$ ./terrier -cfg=terrier.yml
[+] Loading config:  terrier.yml
[+] Analysing Image
[+] Docker Image Source:  myImage.tar
[*] Inspecting Layer:  34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
[*] Inspecting Layer:  6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
[*] Inspecting Layer:  6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
[*] Inspecting Layer:  a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
[*] Inspecting Layer:  aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
[*] Inspecting Layer:  d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
[*] Inspecting Layer:  dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
[!] Not all components were identifed: (4/31)
[!] Component not identified:  /bin/uncompress
[!] Component not identified:  /bin/bzexe
[!] Component not identified:  /bin/bzmore
[!] Component not identified:  /bin/bunzip2
$ echo $?
1

As we can see from the output above, Terrier was unable to identify 4/31 of the components provided in the config. The return code is also 1 which indicates a failure. If we were to remove the components that are not in the provided image, the output from the previous command would look like the following:

$ ./terrier -cfg=terrier.yml
[+] Loading config: terrier.yml
[+] Analysing Image
[+] Docker Image Source: myImage.tar
[*] Inspecting Layer: 34a9e0f17132202a82565578a3c2dae1486bb198cde76928c8c2c5c461e11ccf
[*] Inspecting Layer: 6539a80dd09da08132a525494ff97e92f4148d413e7c48b3583883fda8a40560
[*] Inspecting Layer: 6d2d61c78a65b6e6c82b751a38727da355d59194167b28b3f8def198cd116759
[*] Inspecting Layer: a6e646c34d2d2c2f4ab7db95e4c9f128721f63c905f107887839d3256f1288e1
[*] Inspecting Layer: aefc8f0c87a14230e30e510915cbbe13ebcabd611e68db02b050b6ceccf9c545
[*] Inspecting Layer: d4468fff8d0f28d87d48f51fc0a6afd4b38946bbbe91480919ebfdd55e43ce8c
[*] Inspecting Layer: dbf9da5e4e5e1ecf9c71452f6b67b2b0225cec310a20891cc5dedbfd4ead667c
[!] All components were identified: (27/27)
[!] Not all components were verified: (26/27)
[!] Component not verified: /bin/cat
[!] Component not verified: /bin/chmod
[!] Component not verified: /bin/chown
[!] Component not verified: /bin/df
[!] Component not verified: /bin/dir
[!] Component not verified: /bin/dmesg
[!] Component not verified: /bin/echo
[!] Component not verified: /bin/gzexe
[!] Component not verified: /bin/gzip
[!] Component not verified: /bin/login
[!] Component not verified: /bin/ls
[!] Component not verified: /bin/mkdir
[!] Component not verified: /bin/mknod
[!] Component not verified: /bin/mv
[!] Component not verified: /bin/sleep
[!] Component not verified: /bin/stty
[!] Component not verified: /bin/su
[!] Component not verified: /bin/tar
[!] Component not verified: /bin/true
[!] Component not verified: /bin/uname
[!] Component not verified: /bin/wdctl
[!] Component not verified: /bin/zdiff
[!] Component not verified: /bin/zfgrep
[!] Component not verified: /bin/zforce
[!] Component not verified: /bin/zless
[!] Component not verified: /bin/znew
$ echo $?
1

The output above indicates that Terrier was able to identify all the components provided but many were not verifiable, the hashes did not match and once again, the return code is 1 to indicate this failure.

Identifying files in containers

The previous sections focused on identifying files in images, which can be referred to as a form of “static analysis,” however it is also possible to perform this analysis to running containers. In order to do this, you need the following:

  1. Location of the container’s merged folder
  2. A SHA256 hash of a specific file/s

The merged folder is Docker specific, in this case, we are using it because this is where the contents of the Docker container reside, this might be another location if it were LXC.

The location of the container’s merged folder can be determined by running the following commands. First obtain the container’s ID:

$ docker ps
CONTAINER ID        IMAGE                    COMMAND               CREATED             STATUS              PORTS               NAMES
b9e676fd7b09        golang                   "bash"                20 hours ago        Up 20 hours                             cocky_robinson

Once you have the container’s ID, you can run the following command which will help you identify the location of the container’s merged folder on the underlying host.

$ docker exec b9e676fd7b09 mount | grep diff
overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/7ZDEFE6PX4C3I3LGIGGI5MWQD4:
/var/lib/docker/overlay2/l/EZNIFFIXOVO2GIT5PTBI754HC4:/var/lib/docker/overlay2/l/UWKXP76FVZULHGRKZMVYJHY5IK:
/var/lib/docker/overlay2/l/DTQQUTRXU4ZLLQTMACWMJYNRTH:/var/lib/docker/overlay2/l/R6DE2RY63EJABTON6HVSFRFICC:
/var/lib/docker/overlay2/l/U4JNTFLQEKMFHVEQJ5BQDLL7NO:/var/lib/docker/overlay2/l/FEBURQY25XGHJNPSFY5EEPCFKA:
/var/lib/docker/overlay2/l/ICNMAZ44JY5WZQTFMYY4VV6OOZ,
upperdir=/var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/diff,
workdir=/var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/work)          

From the results above, we are interested in two entries, upperdir and workdir because these two entries will provide us with the path to the container’s merged folder. From the results above, we can determine that the container’s merged directory is located at /var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/ on the underlying host.

Now that we have the location, we need some files to identify and in this case, we are going to reuse the SHA256 hashes from the previous section. Let’s now go ahead and populate our Terrier configuration with this new information.

mode: container
path: merged
#image: myImage.tar

hashes:
    - hash: '82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'
    - hash: 'cf734865dd344cd9b0b349cdcecd83f79a751150b5fd4926f976adddb93d902c'

The configuration above shows that we have changed the mode from image to container and we have added the path to our merged folder. We have kept the two hashes from the previous section.

If we run Terrier with this configuration from the location /var/lib/docker/overlay2/04f84ddd30a7df7cd3f8b1edeb4fb89d476ed84cf3f76d367e4ebf22cd1978a4/, we get the following output:

$ ./terrier
[+] Loading config: cfg.yml
[+] Analysing Container
[!] Found matching instance of '82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd' at: merged/usr/local/go/bin/go with hash:82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd

From the output above, we know that the container (b9e676fd7b09) does not contain the malicious Python package but it does contain an instance of the Golang binary which is located at merged/usr/local/go/bin/go.

Identifying and verifying specific files in containers

And as you might have guessed, Terrier can also be used to verify and identify files at specific paths in containers. To do this, we need the following:

  1. Location of the container’s merged folder
  2. A SHA256 hash of a specific file/s
  3. The path and name of the specific file/s

The points above can be determined using the same procedures described in the previous sections. Below is an example Terrier config file that we could use to identify and verify components in a running container:

mode: container
path: merged
verbose: true
files:
  - name: '/usr/bin/curl'
    hashes:
      - hash: '9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96'
  - name: '/usr/local/go/bin/go'
    hashes:
      - hash: '82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91dd3ff92dd'

If we run Terrier with the above config, we get the following output:

$ ./terrier
[+] Loading config: cfg.yml
[+] Analysing Container
[!] Found matching instance of '/usr/bin/curl' at: merged/usr/bin/curl with hash:9a43cb726fef31f272333b236ff1fde4beab363af54d0bc99c304450065d9c96
[!] Found matching instance of '/usr/local/go/bin/go' at: merged/usr/local/go/bin/go with hash:82bce4b98d7aaeb4f841a36f7141d540bb049f89219f9e377245a91
dd3ff92dd
[!] All components were identified: (2/2)
[!] All components were identified and verified: (2/2)
$ echo $?
0

From the output above, we can see that Terrier was able to successfully identify and verify all the files in the running container. The return code is also 0 which indicates a successful execution of Terrier.

Using Terrier with CI/CD

In addition to Terrier being used as a standalone CLI tool, Terrier can also be integrated easily with existing CI/CD technologies such as GitHub Actions and CircleCI. Below are two example configurations that show how Terrier can be used to identify and verify certain components of Docker files in a pipeline and prevent the pipeline from continuing if all verifications do not pass. This can be seen as an extra mitigation for supply-chain attacks.

Below is a CircleCI example configuration using Terrier to verify the contents of an image.

version: 2
jobs:
build:
  machine: true
  steps:
    - checkout
    - run:
       name: Build Docker Image
       command: |
             docker build -t builditall .
    - run:
       name: Save Docker Image Locally
       command: |
             docker save builditall -o builditall.tar
    - run:
       name: Verify Docker Image Binaries
       command: |
             ./terrier

Below is a Github Actions example configuration using Terrier to verify the contents of an image.

name: Go
on: [push]
jobs:
build:
  name: Build
  runs-on: ubuntu-latest
  steps:

  - name: Get Code
    uses: actions/checkout@master
  - name: Build Docker Image
    run: |
      docker build -t builditall .
  - name: Save Docker Image Locally
    run: |
      docker save builditall -o builditall.tar
  - name: Verify Docker Image Binaries
    run: |
      ./terrier

Conclusion

In this blog post, we have looked at how to perform multiple actions on Docker (and OCI) containers and images via Terrier. The actions performed allowed us to identify specific files according to their hashes in images and containers. The actions performed have also allowed us to identify and verify multiple components in images and containers. These actions performed by Terrier are useful when attempting to prevent certain supply-chain attacks.

We have also seen how Terrier can be used in a DevOps pipeline via GitHub Actions and CircleCI.

Learn more about Terrier on GitHub at https://github.com/heroku/terrier.

Folding Paper Globes [Published articles]

Library of Congress releases 11,700 freely usable photos of "roadside America," taken by John Margolies [Published articles]

For decades, architectural critic and photographer John Margolies obsessively documented roadside attractions: vernacular architecture, weird sculpture, odd businesses and amusements. By his death in 2016, his collection consisted of more than 11,000 slides (he published books of his favorites, with annotations).

The Library of Congress purchased the Margolies archive and has released it to the public domain, with hi-rez scans of 11,710 slides.

Almost all of Margolies’ work was done in the interest of preserving images of what would otherwise be lost to time. Even his first book, published in 1981, was elegiacally called The End of the Road: Vanishing Highway Architecture in America. From the start, Margolies knew the quirky motels, miniature golf courses, diners, billboards, and gas stations were being endangered by franchising and changing fashions — not to mention changing patterns of automobile traffic. (For decades now, most drivers have, of course, opted for the high speed-limits of superhighways and the convenience of service areas, leaving the old local highways in the lurch.)

John Margolies’ Photographs of Roadside America [Public Domain Review]

John Margolies [Library of Congress]

Roadside America [Library of Congress/Flickr Commons]

(Thanks, @ridetheory!)

A Single Math Model Explains Many Mysteries of Vision [Published articles]

The first anatomically correct model of the visual cortex seeks to capture how the brain sees the world.

Read: Jeannette Ng's Campbell Award acceptance speech, in which she correctly identifies Campbell as a fascist and expresses solidarity with Hong Kong protesters [Published articles]

Last weekend, Jeanette Ng won the John W Campbell Award for Best New Writer at the 2019 Hugo Awards at the Dublin Worldcon; Ng's acceptance speech calls Campbell, one of the field's most influential editors, a "fascist" and expresses solidarity with the Hong Kong pro-democracy protesters.

I am a past recipient of the John W Campbell Award for Best New Writer (2000) as well as a recipient of the John W Campbell Memorial Award (2009). I believe I'm the only person to have won both of the Campbells, which, I think, gives me unique license to comment on Ng's remarks, which have been met with a mixed reception from the field.

I think she was right -- and seemly -- to make her remarks. There's plenty of evidence that Campbell's views were odious and deplorable. For example, Heinlein apologists like to claim (probably correctly) that his terrible, racist, authoritarian, eugenics-inflected yellow peril novel Sixth Column was effectively a commission from Campbell (Heinlein based the novel on one of Campbell's stories). This seems to have been par for the course for JWC, who liked to micro-manage his writers: Campbell also leaned hard on Tom Godwin to kill the girl in "Cold Equations" in order to turn his story into a parable about the foolishness of women and the role of men in guiding them to accept the cold, hard facts of life.

So when Ng held Campbell "responsible for setting a tone of science fiction that still haunts the genre to this day. Sterile. Male. White. Exalting in the ambitions of imperialists and colonisers, settlers and industrialists," she was factually correct.

Not just factually correct: also correct to be saying this now. Science fiction (like many other institutions) is having a reckoning with its past and its present. We're trying to figure out what to do about the long reach that the terrible ideas of flawed people (mostly men) had on our fields. We're trying to reconcile the legacies of flawed people whose good deeds and good art live alongside their cruel, damaging treatment of women. These men were not aberrations: they were following an example set from the very top and running through fandom, to the great detriment of many of the people who came to fandom for safety and sanctuary and community.

It's not a coincidence that one of the first organized manifestation of white nationalism as a cultural phenomenon was within fandom, and while fandom came together to firmly repudiate its white nationalist wing, these assholes weren't (all) entryists who showed up to stir trouble in someone else's community. The call (to hijack the Hugo award) was coming from inside the house: these guys had been around forever, and we'd let them get away with it, in the name of "tolerance" even as these guys were chasing women, queer people, and racialized people out of the field.

Those same Nazis went on to join Gamergate, then take up on /r/The_Donald, and they were part of the vanguard of the movement that put a boorish, white supremacist grifter into the White House.

The connection between the tales we tell about ourselves and our past and futures have a real, direct outcome on the future we arrive at. White supremacist folklore, including the ecofascist doctrine that says we can only avert climate change by murdering all the brown people, comes straight out of sf folklore, where it's completely standard for every disaster to be swiftly followed by an underclass mob descending on their social betters to eat and/or rape them (never mind the actual way that disasters go down).

When Ng took the mic and told the truth about his legacy, she wasn't downplaying his importance: she was acknowledging it. Campbell's odious ideas matter because he was important, a giant in the field who left an enduring mark on it. No one disagrees about that. What we want to talk about today is what that mark is, and what it means.

Scalzi points out:

There are still people in our community who knew Campbell personally, and many many others one step removed, who idolize and respect the writers Campbell took under his wing. And there are people — and once again I raise my hand — who are in the field because the way Campbell shaped it as a place where they could thrive. Many if not most of these folks know about his flaws, but even so it’s hard to see someone with no allegiance to him, either personally or professionally, point them out both forcefully and unapologetically. They see Campbell and his legacy abstractly, and also as an obstacle to be overcome. That’s deeply uncomfortable.

He's not wrong, and the people who counted Campbell as a friend are legitimately sad to confront the full meaning of his legacy. I feel for them. It's hard to reconcile the mensch who was there for you and treated his dog with kindness and doted on his kids with the guy who alienated and hurt people with his cruel dogma.

Here's the thing: neither one of those facets of Campbell cancel the other one out. Just as it's not true that any amount of good deeds done for some people can repair the harms he visited on others; it's also true that none of those harms cancel out the kindnesses he did for the people he was kind to.

Life is not a ledger. Your sins can't be paid off through good deeds. Your good deeds are not cancelled by your sins. Your sins and your good deeds live alongside one another. They coexist in superposition.

You (and I) can (and should) atone for our misdeeds. We can (and should) apologize for them to the people we've wronged. We should do those things, not because they will erase our misdeeds, but because the only thing worse than being really wrong is not learning to be better.

People are flawed vessels. The circumstances around us -- our social norms and institutions -- can be structured to bring out our worst natures or our best. We can invite Isaac Asimov to our cons to deliver a lecture on "The Power of Posterior Pinching" in which he literally advises men on how to grope the women in attendance, or we can create and enforce a Code of Conduct that would bounce anyone, up to and including the Con Chair and the Guest of Honor, who tried a stunt like that.

We, collectively, through our norms and institutions, create the circumstances that favor sociopathy or generosity. Sweeping bad conduct under the rug isn't just cruel to the people who were victimized by that conduct: it's also a disservice to the flawed vessels who are struggling with their own contradictions and base urges. Create an environment where it's normal to do things that -- in 10 or 20 years -- will result in your expulsion from your community is not a kindness to anyone.

There are shitty dudes out there today whose path to shitty dudehood got started when they watched Isaac Asimov deliver a tutorial on how to grope women without their consent and figured that the chuckling approval of all their peers meant that whatever doubts the might have had were probably misplaced. Those dudes don't get a pass because they learned from a bad example set by their community and its leaders -- but they might have been diverted from their path to shitty dudehood if they'd had better examples. They might not have scarred and hurt countless women on their way from the larval stage of shittiness to full-blown shitlord, and they themselves might have been spared their eventual fate, of being disliked and excluded from a community they joined in search of comradeship and mutual aid. The friends of those shitty dudes might not have to wrestle with their role in enabling the harm those shitty dudes wrought.

Jeannette Ng's speech was exactly the speech our field needs to hear. And the fact that she devoted the bulk of it to solidarity with the Hong Kong protesters is especially significant, because of the growing importance of Chinese audiences and fandom in sf, which exposes writers to potential career retaliation from an important translation market. There is a group of (excellent, devoted) Chinese fans who have been making noises about a Chinese Worldcon for years, and speeches like Ng's have to make you wonder: if that ever comes to pass, will she be able to get a visa to attend?

Back when the misogynist/white supremacist wing of SF started to publicly organize to purge the field of the wrong kind of fan and the wrong kind of writer, they were talking about people like Ng. I think that this is ample evidence that she is in exactly the right place, at the right time, saying the right thing.

And I am so proud to be part of this. To share with you my weird little story, an amalgam of all my weird interests, so much of which has little to do with my superficial identities and labels.

But I am a spinner of ideas, of words, as Margaret Cavendish would put it.

So I need say, I was born in Hong Kong. Right now, in the most cyberpunk in the city in the world, protesters struggle with the masked, anonymous stormtroopers of an autocratic Empire. They have literally just held her largest illegal gathering in their history. As we speak they are calling for a horological revolution in our time. They have held laser pointers to the skies and tried to to impossibly set alight the stars. I cannot help be proud of them, to cry for them, and to lament their pain.

I’m sorry to drag this into our fantastical words, you’ve given me a microphone and this is what I felt needed saying.

John W. Campbell, for whom this award was named, was a fascist. [Jeannette Ng/Medium]

(Image: @JeannetteNg)

(via Whatever)

Filed with auntie pride of @jeannette_ng, the newest winner of the Campbell Award for BEST NEW AUTHOR!!!!! 🤶🏼🤶🏼🤶🏼pic.twitter.com/T4vG0x6mwo

— Zen Cho (@zenaldehyde) August 18, 2019

The mainstream media have still not learned the lessons of Gamergate [Published articles]

This week the New York Times published a five-years-later retrospective on Gamergate and its aftereffects, which is chilling and illuminating, and you should go read it. It makes an excellent case — several excellent written cases, actually — that “everything is Gamergate,” that it and its hate-screeching online mobs were the prototype for all the culture and media wars since and to come.

Sadly, the lesson expounded herein by the NYT is one which they — and other media — do not yet seem to have actually learned themselves.

Let’s look at another piece which called Gamergate a template for cultural warfare, using the media as a battleground. This one was written back in 2014, by one Kyle Walker, in Deadspin, and its scathing, take-no-prisoners real-time analysis was downright prophetic. A few of its most important passages:

Gamergate is […] a relatively small and very loud group of video game enthusiasts who claim that their goal is to audit ethics in the gaming-industrial complex and who are instead defined by the campaigns of criminal harassment that some of them have carried out against several women […] What’s made it effective, though, is that it’s exploited the same basic loophole in the system that generations of social reactionaries have: the press’s genuine and deep-seated belief that you gotta hear both sides … that anyone more respectable than, say, an avowed neo-Nazi is operating in something like good faith

It is now clear to us all that that last statement is no longer correct … in that it is far too optimistic. Two years ago, the NYT made it apparent that they are in fact willing to assume “an avowed neo-Nazi is operating in something like good faith,” when they published a piece about “the Nazi sympathizer next door,” one variously called “chummy” (Quartz), “sympathetic” (Business Insider), and “normalizing” (NYT readers themselves, among many others.)

Back to Wagner in Deadspin:

The demands for journalistic integrity coming from Gamergate have nothing at all to do with the systemic corruption of the gaming media … The claims from what we like to call the “bias journalisms” school of media criticism aren’t meant to express anything in particular, or even, perhaps, to be taken seriously; they’re meant to work the referees, to get them looking over their shoulders, to soften them up in the hopes that a particular grievance, whatever its merits, might get a better hearing next time around.

How does it play out? Like this: Earlier this month, the New York Times covered Intel’s capitulation in the face of a coordinated Gamergate campaign, called “Operation Disrespectful Nod.”

Here’s that NYT piece from five years ago. It, in turn, begins:

For a little more than a month, a firestorm over sexism and journalistic ethics has roiled the video game community, culminating in an orchestrated campaign to pressure companies into pulling their advertisements from game sites.

That campaign won a big victory in recent days with a decision by Intel, the chip maker, to pull ads from Gamasutra, a site for game developers.

Intel’s decision added to a controversy that has focused attention on the treatment of women in the games business and the power of online mobs. The debate intensified in August, partly because of the online posts of a spurned ex-boyfriend of a female game developer.

Wagner’s inescapable conclusion:

The story continued in this vein—cautious, assiduously neutral, lobotomized […] Both sides were heard. And thus did Leigh Alexander’s commentary on the pluralism of gaming today get equal time with a campaign bent on silencing her. …Make it a story about an oppressive and hypocritical media conspiracy, and all of a sudden you have a cause, a side in a “debate.”

Gamergate, like so many bad-faith movements since, followed a variant of the “motte and bailey” strategy, which is

when you make a bold, controversial statement. Then when somebody challenges you, you claim you were just making an obvious, uncontroversial statement, so you are clearly right and they are silly for challenging you. Then when the argument is over you go back to making the bold, controversial statement.

Here, the motte is an ugly or vile cause — in Gamergate’s case, vicious misogyny — and the bailey is an entirely different purported argument — for Gamergate, “it’s about ethics in games journalism.” They work the latter argument for credibility, but entirely in bad faith, because it is tacitly understood, both internally and externally, albeit in a quasi-deniable way, that what they actually care about is their ugly cause.

This has become the playbook for so many modern disputes, because it continues to be a thoroughly effective way to manipulate the mainstream media. Arguments about purported “grievance politics,” or “the decline of America sanctioned by the elites,” or a manufactured, fictionalimmigration crisis,” all continue to be treated by the media as legitimate grievances, and/or good-faith disputes, rather than a thin pretext for bald-faced racism and xenophobia.

Every so often the motte is accidentally revealed, as when the head of the USCIS said, just this week, that the famous poem which adorns the Statue of Liberty referred to “people coming from Europe.” But in general the pretense of the bailey is upheld.

Let me reiterate: the pretense. These are arguments knowingly made in bad faith. What’s more, the actual cause soon becomes apparent to those who investigate the subject with open and searching minds. Good journalists should not be willing accept such distorted pretenses at face value, nor assume good faith without evidence. The NYT clearly made that mistake, fell into that trap, with Gamergate five years ago. As Wagner put it then,

What we have in Gamergate is a glimpse of how these skirmishes will unfold in the future—all the rhetorical weaponry and siegecraft of an internet comment section brought to bear on our culture, not just at the fringes but at the center.

How right he was. And yet it is all too apparent that, in the heart and at the heights of the New York Times, nothing of significance has been learned. How else to explain how, five years after Gamergate, and two years after “readers accuse(d) us of normalizing a Nazi sympathizer,” the NYT continues to treat exactly the same kind of bad-faith arguments as if they are meaningful, important, and valid? Most visibly with its most recent headline debacle, but that is only the tip of the wilfuly ignorant iceberg.

In the aftermath of that headline incident, Dean Baquet, its executive editor, told CNN a remarkable thing: “Our role is not to be the leader of the resistance.” In other words, the publisher of this excellent recent Gamergate exegesis has learned nothing from it.

The NYT’s role should be to lead a resistance — not necessarily against any individual political party or figure, but a resistance of critical thinking, and searching analysis, against deceptive motte-and-bailey arguments. But they don’t seem willing to recognize that they are being manipulated by such bad-faith movements, much less accept that one of them has grown to occupy much of America’s political landscape. One wonders when the Gray Lady will finally open her eyes.

Directly record to your NFS share! No need to wait for Wyze to enable this. [Published articles]

As we all know, Wyze uses a linux kernel, so, adding NFS (or SMB or...) shouldn't be that difficult to do.

Well, the same author that found out how to use the Sensors without the need of a hub, also has a way to enable NFS share support of the WyzeCam. This means that you can have your WyzeCam write directly to a NFS share, and not the microSD card, and from there, you could write the files to a cloud service of your choice, or do many things that wasn't possible before.

Currently, I am doing a cron job to concat every hour's worth of data, then do some external processing on the footage.

For the info on how this was done, read
https://hclxing.wordpress.com/2019/07/17/wyzecam-without-sd-card/

For the needed files, you need to clone (or...) https://github.com/HclX/WyzeHacks

If Wyze would just enable this from the start, and even offer different protocols like SMB, their cams would become so much more popular.

submitted by /u/TheVulkanMan to r/wyzecam
[link] [comments]

Realistic Starfleet meetings [Published articles]

Dan Hon (previously at BB) noticed that Star Trek's meetings and conferences always involve military officers, usually occur with ample time for preparation, yet invariably has them just talking to one another. If there are any graphics involved, they are simple, concise and expressive.

This is of course nothing whatsoever like any military on earth or off it. So Hon decided to photoshop what such meetings would actually entail: PowerPoint, and lots of it.

Sorry not sorry. Bajoran Stability / Maquis Dynamics - GOVERNANCE

Heres "Overall Weekly Dominion Attack Trends for Stardate 51145.3 - 51247.5"

Overall Weekly Dominion Attack Trends
Stardate 51145.3 - 51247.5 pic.twitter.com/uL7jZWCyUS

— dan hon is back (@hondanhon) July 19, 2019

As reviewed by Lt. Cmdrs. Worf, Data, and LaForge, and Capt. Picard:

L-R: Worf, Data, Geordi and Picard review the latest overall weekly Dominion attack trends. pic.twitter.com/wACdfEC1vP

— dan hon is back (@hondanhon) July 19, 2019

Dave Rutledge, however, plays for the other team:

pic.twitter.com/bVhaYnBCwY

— Dave Rutledge 😑 (@_) July 19, 2019

Vader and Tarkin perform a final review of the Environmental Impact Assessment (EIA) Process in Hyperdrive Station A-226 onboard the Death Star prior to its first use. pic.twitter.com/IEE92idOiN

— dan hon is back (@hondanhon) July 19, 2019

What slang can us older relatives use tonight to embarrass the teenagers while opening presents? [Published articles]

'My Business Card Runs Linux' [Published articles]

Computer engineer George Hilliard says he has built an electronic business card running Linux. From his blog post: It is a complete, minimal ARM computer running my customized Linux firmware built with Buildroot. It has a USB port in the corner. If you plug it into a computer, it boots in about 6 seconds and shows up over USB as a flash drive and a virtual serial port that you can use to log into the card's shell. The flash drive has a README file, a copy of my resume, and some of my photography. The shell has several games and Unix classics such as fortune and rogue, a small 2048, and a small MicroPython interpreter. All this is accomplished on a very small 8MB flash chip. The bootloader fits in 256KB, the kernel is 1.6MB, and the whole root filesystem is 2.4MB. So, there's plenty of space for the virtual flash drive. It also includes a writable home directory, on the off chance that anyone creates something they want to keep. This is also saved on the flash chip, which is properly wear leveled with UBI. The whole thing costs under $3. It's cheap enough to give away. If you get one from me, I'm probably trying to impress you. In a detailed write-up, Hilliard goes on to explain how he came up with the design and assembled all the components. Naturally, there were some problems that arose during the construction that he had to troubleshoot: "first, the USB port wasn't long enough to reliably make contact in many USB ports. Less critically, the flash footprint was wrong, which I worked around by bending the leads under the part by hand..." Impressively, the total cost of the card (not including his time) was $2.88 -- "cheap enough that I don't feel bad giving it away, as designed!"

Share on Google+

Read more of this story at Slashdot.

Bash QDB - 966225 [Published articles]

<Roosevelt> !choose do work, play games
<RoBoBo> Choice: do work
<Roosevelt> bah
<Roosevelt> !choose listen to a stupid bot, don't listen to a stupid bot
<RoBoBo> Choice: listen to a stupid bot
<Roosevelt> :(

When galaxies collide... Simulation pauses to show real images from Hubble... [Published articles]

The Oligarch Game: use coin-tosses to demonstrate "winner take all" and its power to warp perceptions [Published articles]

Internet Archive founder Brewster Kahle created The Game of Oligarchy, which "shows that the 'free market' leads inexorably to one person getting all the money and everyone else going broke. And fast."

The game's rules are simple: everyone is assigned $100 in play money to begin with; they take it in turns to pick a player to have a coin-toss against, with the winner taking 50% of the lesser of pots of the pair (if both have $100, the winner takes $50 from the loser).

Very quickly, the winners of the initial coin tosses wipe out the remaining players, and then each other, producing an outcome with a single winner with all the money. What's more interesting than the ability of small amounts of random chance to produce oligarchic outcomes is the psychological effect of playing the game: over the duration of the very short games, the winners arrive at a "feeling of righteous empowerment based on being successful" and players experience class divisions.

Kahle based his game on an article in Scientific American: "Is Inequality Inevitable? Wealth naturally trickles up in free-market economies, model suggests. Neal Krawetz has implemented the game so it can run automatically in browsers.

What is amazing is that even through each toss is “fair” in that it is a 50-50 chance to win a straight amount of money, the results shows one player wins all the money, and really quickly.

Two nephews and their partners, Mary and I played 4 rounds in about an hour and we discovered social classes (we called the broke ones “organ sellers”), feeling of righteous empowerment based on being successful (even though it was completely random), but also that “free market” ended with all-but-one-of-us in a bad situation really quickly.

Read the rest