Categories
Review

“A Traitor in the Shadows”

Joseph Lallo
Oh, this book got me. I’ve got a Diana Wynne Jones feeling about it — it took a while to grip me, and then suddenly I caught myself thinking “well, how long will it really take me to finish reading this?” and staying up way later than I should’ve to see where it was going. It’s absolutely a slow start, and (given that I had no memory of buying the book/what it was about) I had no idea where it was going.1
And, as always, what really got me was the worldbuilding. It’s distinctly uncooperative at the start — the character who has the most interesting secrets, who knows the most about what’s going on, starts of being super cagey about it all. So even though Alan, the protagonist, is just as inquisitive as you’d want a protagonist to be, there’s no exposition-dump at any point. What you learn happens in a slow trickle, bits and pieces coming up as the story needs them. It’s a dangerous way to do it — done badly, it feels like the author is making it up as they go along — but, in this case, it worked well. I’m interested to see where the series goes: the main plot wraps up in a surprisingly neat bow at the end, but there’s a couple threads by the wayside that very clearly show this was meant to be a series.
So, hey, I liked the book. Check it out.


  1. And, really, that’s the most fun part of this whole “read all the books I have on my Kindle that I don’t remember buying” project — everything’s a surprise! Everything on here was chosen by someone who’s got a reasonable idea of what I like (by which I mean ‘Past Grey’), but they didn’t tell me anything about any of them, I can just see the title and author. 
Categories
Review

“Two Hundred and Twenty-One Baker Streets”

I’ve actually read several of the stories in this anthology before, in other anthologies. Which, I suppose, is a statement about my taste in books.
Of the ones that were new, however, a couple of them were sufficient to make a partial repeat purchase worth it.
So, which stood out to me?
Far and away the best was The Lantern Men, which was a mildly interesting take on the Sherlock story (he’s an architect this time around!), but was one of the creepiest things I’ve ever read. It followed The Rich Man’s Hand, which was creepy enough that I thought “oh, I can’t go to bed on that, I’ll read one more,” and that turned out to be a mistake.
A Woman’s Place is a delightful little cyberpunk kind of thing, and my favorite take on Mrs. Hudson that I’ve seen… quite possibly ever. The opening scene, of her delivering tea and sandwiches while Sherlock and Watson interview a client? Oh, I won’t spoil a thing, but within the first page I was enraptured, and by the end, utterly delighted.
The Small World of 221b turned into a different genre than I thought it was, which was a fun twist, and I like the story that it told.
The Final Conjuration, too, was a genre-blending version of the story, and one I quite liked.
Finally, The Innocent Icarus was a great piece of world-building, and I’d quite like to read more in that setting at some point.
And that’s more than half the stories in the anthology; there’s also, as I mentioned, a few that I’d read before and quite liked, so it’s well worth the price. Check it out.

Categories
Playlist

Playlist of the Month: July 2020

It has been a busy month, and August doesn’t look like it’s going to be any better. But hey, while I have your attention: register to vote!
Cologne – Haux on Something to Remember – EP
Falling Down – Harrison Storm on Falling Down – Single
Angel – H. Kenneth on Angel – Single
F**k Collingwood – Hayden Calnin on F**k Collingwood – Single
Don’t Take the Money – Harry Strange on Don’t Take the Money – Single
This is Where it Ends – Richard Walters on This is Where it Ends – Single
Somewhere (feat. Octavian) – The Blaze on Somewhere (feat. Octavian) – Single
Slowly – ODIE on Slowly – Single
New Shapes (feat. Octavian) – Diplo on Europa – EP
Morning Prayers – Steve Benjamins on Morning Prayers – Single
scorton’s creek – Isaac Dunbar on scorton’s creek – Single
Church – Charles Fauna on Yonder
I Love You Always Forever – Donna Lewis on Now In a Minute
Heavy – Haux on Violence in a Quiet Mind
Poison (feat. Take A Daytrip, Obongjayar & Santi) – Octavian on Poison (feat. Take A Daytrip, Obongjayar & Santi) – Single
Wait to Come Over – Charles Fauna on Eulogy – EP
Unfortunate Love (feat. Harrison Storm) – Hayden Calnin on Unfortunate Love (feat. Harrison Storm) – Single
Peaked – EDEN on Peaked – Single
Starboy (feat. Daft Punk) – The Weeknd on Starboy
I Love You’s – Hailee Steinfeld on I Love You’s – Single
Bonkers – Dizzee Rascal & Armand Van Helden on Tongue N’ Cheek (Dirtee Deluxe Edition)
Moonlight popolare – Mahmood & Massimo Pericolo on Moonlight popolare – Single
Good Together – Shallou & Ashe on Magical Thinking
2FU – Gavin Haley on 2FU – Single
Lost My Mind – FINNEAS on Blood Harmony
No Love – Noak Hellsing on No Love – Single
Breaking Me – Topic & A7S on Breaking Me – Single
Don’t Look Back (feat. Kotomi & Ryan Elder) [From Rick and Morty: Season 4] – Rick and Morty on Don’t Look Back (feat. Kotomi & Ryan Elder) [From Rick and Morty: Season 4] – Single
Dreamland – Glass Animals on Dreamland
I Lost a Friend – FINNEAS on Blood Harmony
On My Life – Cheat Codes on On My Life – Single
All Your Love – Sir Sly on All Your Love – Single
Long Way Home – Tom Boy on Long Way Home – Single
Cold Feet – Ryan Hemsworth & EDEN on Cold Feet – Single
Golden Hour – Orion Sun on Hold Space For Me
Daydreamer – AURORA on A Different Kind of Human (Step II)1
ELEGANTE – DrefGold & Sfera Ebbasta on ELO
Lying to Myself – Portair on Lying to Myself – Single
How It Was – Yoste on A Few Brief Moments – EP
TesTa TrA Le NuVoLE, pT. 2 – Alfa & YANOMI on TesTa TrA Le NuVoLE, pT. 2 – Single
Giants – Dermot Kennedy on Giants – Single
Accidents – Haux on Violence in a Quiet Mind
Crimewave – Crystal Castles on Grey’s Intro to Music Mixtape (Made With Love) [Vol.1]2
For You – Drop – G & Ted-D on For You – Single
We Can Take Our Time – Hayden Calnin on We Can Take Our Time – Single
Dark Maze – IBE on Dark Maze – Single
Tourner dans le vide (Slowed) – Unge Moped & Tuber on Tourner dans le vide : Man slowed down – Single3
Ride It – Regard on Ride It – Single
Chanel – Frank Ocean on Chanel – Single
Die Trying – Michl on Die Trying – Single
The Box – Roddy Ricch on Please Excuse Me For Being Antisocial
SPACCATO – Don Joe, Madame & Dani Faiv on SPACCATO – Single4
Heart-Shaped Box – Glass Animals on Heart-Shaped Box (Quarantine Covers Ep. 1)
Te lo prometto – Il Tre on Te lo prometto – Single
Vivo – Ernia on Gemelli
when the party’s over – Pentatonix on At Home – EP
So Close to Magic – Aquilo on So Close to Magic – Single
Ibiza (feat. Romeo Santos) – Ozuna on Aura
start//end – EDEN on vertigo5
Dead and Gone – Lani Rose on Dead and Gone – Single
Real Life Stuff (feat. Julia Michaels & Clever) – Diplo on Diplo Presents Thomas Wesley Chapter 1: Snake Oil
Circles – Of Monsters and Men on Circles – Single
Lo sai – Tedua & Sick Luke on Vita vera mixtape: Aspettando la Divina Commedia
Passports – Kiran Kai on XYZ – EP
Burn the Witch – Shawn James on Burn the Witch – Single6
Counting Hours – MAY BBY & Chris Hue on Counting Hours – EP
Stingray – Kai Whiston & EDEN on Stingray – Single
Bitter – Yoe Mase & sad alex on Bitter – Single
America – Sufjan Stevens on The Ascension7
With You – Thorin Loeks on With You – Single
Dorado – Mahmood, Sfera Ebbasta & Feid on Dorado – Single
Wings – Lisa Heller on Wings – Single
American Boy (feat. Kanye West) [Lost Frequencies Remix] – Estelle on American Boy (feat. Kanye West) [Lost Frequencies Remix] – Single8
Bimbi per strada (Children) – Fedez & Robert Miles on Bimbi per strada (Children) – Single
Craving – Haux on Violence in a Quiet Mind
Salt – Haux on Violence in a Quiet Mind
Dishes – Lauv on Without You – EP
Lentamente – Cara on Lentamente – Single
I Heard – Elliot Moss on I Heard – Single
Tonight – Thorin Loeks on Tonight – Single


  1. Hey, remember WWDC? That was fun. 
  2. That’s not the actual album title – years ago, a friend made me a mixtape CD, titled it that, and I set that as the album title when I ripped the whole thing into iTunes. 
  3. Years from now, I’ll be able to find out when I went on a Tiktok-watching binge by looking at my playlist history and seeing when this track pops up again. 
  4. I don’t know enough Italian(?) to actually follow this at all, but it’s fun hearing the occasional word that I recognize surface. 
  5. This, along with Haux, has Big 2016 Energy in my mind. In a good way. 
  6. My sister made me listen to this, and it’s excellent! 
  7. The last minute or so of this feels very Explosions In The Sky. 
  8. I feel like last time I had a Kanye song on this list, I wondered if he’s okay, and I… still wonder if he’s okay. 
Categories
Review

“Grunt”

Mary Roach
I spent the entire time reading this book thinking that it was by the same person who wrote Combat-Ready Kitchen. Which was an interesting comparison to have in mind, as I quite liked that one, but “Grunt” was much more fun. While “Combat-Ready Kitchen” felt like it was trying to be ready for use as a textbook in a history class, “Grunt” was unabashedly written by a human being who likes to mention their human responses. I’ve got a great deal of highlights of comedic moments that Roach captured very well.1
As someone with precisely zero interest in joining the military, I think Roach is an excellent writer for this topic. Clearly she’s got a bit more experience in this area than I do — nobody who’s spent a week on a nuclear submarine doing research for a book can really be as clueless as she tries to convey — but she’s removed enough from it that she can be an excellent go-between. The feigned cluelessness doesn’t read as an affectation, it reads as making sure the genuinely clueless folks like me can follow along.
And it’s just an interesting subject matter. The Department of Defense has a spectacular research budget, which they put into doing all sorts of neat things. Nothing in the book focuses on the science of Exciting New Ways To Make People Dead; in fact, it’s almost universally focused on the opposite. I’m okay with my tax dollars going to research on reconstructive surgery and heat-stroke prevention.
I can definitely recommend “Grunt”. It’s a fun read, and the science is neat. Check it out.


  1. And a pent-up rant about just how bad the experience of trying to highlight stuff is in Apple Books. While the location of the highlight has a clear correlation to where your finger is on-screen, they’re not directly related in the way that we’re trained to expect from iOS. And god forbid you want to highlight something that spans across a page break – to date, the only way I’ve found to do this is to change the text size until they’re on the same page. Even Amazon does better than that, and their Kindle app has never not felt like an abandoned project. 
Categories
Review

“A Furnace Sealed”

Keith R.A. DeCandido
This is a delightful little bit of urban fantasy, following a man who hunts supernatural creatures for a living. Or rather, deals with supernatural problems — there’s a bit of the ‘hunting’ aspect, but in general he’s got more of a ‘fixer’ vibe, trying to avoid violence where possible. The first chapter sees him fighting a unicorn, along with the delightful revelation that unicorns don’t have any special affinity for virgin maidens, it’s just that they’re infuriated by the scent of men.1 This leads to a slight relationship dispute when it takes offense to one member of a lesbian couple, and Bram, the protagonist, makes a quick escape.
And from there, it’s a fun little journey. Like I said, it’s a delightful bit of urban fantasy: the mental image of someone driving a semi through the streets of the Bronx, hoping nobody notices the unicorn in the back, is a pretty good one. And the actual world being set up strikes a nice balance of depth without feeling overwhelming — there’s a bit of a Buffy vibe at times, some of that “well, there could be a Monster of the Week, but we’ve also established some actual lore” vibe.2
It’s a good book, and I’m lookin forward to the sequel(s) implied by the subtitle. Give it a read.


  1. Having occasionally had to clean the men’s locker room when I was working at the pool, I can relate. 
  2. If I’m going to make Buffy references, I should probably watch the show at some point. Or at least read the Wikipedia summary. 
Categories
Review

“Superintelligence: Paths, Dangers, Strategies”

Nick Bostrom
This was, simultaneously, one of the driest and most terrifying books I have ever read.
Really, the conclusion summarized it well:

“Before the prospect of an intelligence explosion, we humans are like small children playing with a bomb. Such is the mismatch between the power of our plaything and the immaturity of our conduct. Superintelligence is a challenge for which we are not ready now and will not be ready for a long time. We have little idea when the detonation will occur, though if we hold the device to our ear we can hear a faint ticking sound.”

It is what the title says: a list of ways we can achieve superintelligence (including, I’d note, a discussion of the fact that it’s both necessary and inevitable), a harrowing discussion of exactly how many ways it can go wrong, and some things we can start trying to do to keep it from going all Skynet on us. Or, as is more likely, wiping out humanity without really noticing, because we were a convenient source of raw materials.
Like I said: terrifying.
But valuable. I’m also convinced this book should be required reading for any AI course. And, y’know, a good chunk of the population beyond that: I count AI as one of the three most likely existential threats out there.1
So hey, want to somehow be a little bored and scared out of your mind at the same time? Read it.


  1. I’ve got it tied with “Global War, Nuclear” and “Climate Change.” Lower on the list are “A Pandemic With 100% Transmission Rate and 90-Plus Percent Lethality” and “Something From Space.” 
Categories
Review

“Mythology”

Edith Hamilton
I’ve always had a bit of an interest in Greek mythology. It started with “D’aulaires’ Book of Greek Myths”, went through the Percy Jackson phase, and since then has mostly consisted of using names from Greek mythology as names for projects. Hey, they’re objectively cool names — they had to be, to stick in people’s minds through centuries of oral retellings.
This book is definitely in a different style then d’Aulaires. The latter was noticeably aimed at children, both in the style of illustration and in the way the content was edited. Hamilton’s audience is clearly more adult, and rereading these stories was interesting in that context. Part of it, I’m sure, is just the context of “I’m an adult now, and know quite a lot more of what the world is like,” but the actual events are different in some of the telling, as well.
Where the book really shines, though, is in the design — it’s gorgeous. It feels like the literary equivalent of a coffee-table book. In the edition I have, at least, the actual paper has a weighty feel to it, and the page design, interspersed with the occasional light-text-on-dark-paper section headings and family trees, is a delight. There’s also the occasional full-page ‘plate’ illustration, which feel right at home with the rest of the design of the book.
The title itself is a little bit misleading, in my opinion — with the full title, “Mythology: Timeless Tales of Gods and Heroes” implying a bit of “this is all the mythologies.” The cover art, however, is very clear that we’re sticking to the Greco-Roman world, which helps. (Admittedly, there is a little section at the end that goes into Norse mythology, but it’s a very small portion of the book, and quite limited in scale. It’s also very interesting to read — again, some of the stories are very different from how I know them.1)
So, if you like mythology and having pretty books you can put out on the coffee table so that your guests know just how cultured you are, I absolutely recommend this one.


  1. … probably related to the fact that my knowledge of Norse mythology comes entirely from its use as cultural context, and never actually directly reading any. Turns out Marvel’s Thor isn’t 100% accurate to the source material, shocking
Categories
Playlist

Playlist of the Month: June 2020

Good news, we’re past the halfway line of the year.
Cologne – Haux on Something to Remember – EP
Falling Down – Harrison Storm on Falling Down – Single
Angel – H. Kenneth on Angel – Single
F**k Collingwood – Hayden Calnin on F**k Collingwood – Single
Don’t Take the Money – Harry Strange on Don’t Take the Money – Single
This is Where it Ends – Richard Walters on This is Where it Ends – Single
Blinding Lights – The Weeknd on Blinding Lights – Single
Somewhere (feat. Octavian) – The Blaze on Somewhere (feat. Octavian) – Single
Slowly – ODIE on Slowly – Single
New Shapes (feat. Octavian) – Diplo on Europa – EP
Morning Prayers – Steve Benjamins on Morning Prayers – Single
In Your Eyes – The Weeknd on After Hours (Deluxe)
It’s Getting Worse – Gavin Haley & Mokita on It’s Getting Worse – Single
scorton’s creek – Isaac Dunbar on scorton’s creek – Single
Church – Charles Fauna on Yonder
Been Thru This Before (feat. Giggs, SAINt JHN) – Marshmello, Southside, Giggs & SAINt JHN on Been Thru This Before (feat. Giggs, SAINt JHN) – Single
I Love You Always Forever – Donna Lewis on Now In a Minute
Heavy – Haux on Violence in a Quiet Mind
Enough For You – Lani Rose on Enough For You – Single
Nunca Estoy – C. Tangana on Nunca Estoy – Single
Poison (feat. Take A Daytrip, Obongjayar & Santi) – Octavian on Poison (feat. Take A Daytrip, Obongjayar & Santi) – Single
Goliath – Woodkid on Goliath – Single
Stains – Fyfe & Joel Baker on Stains – Single
Wait to Come Over – Charles Fauna on Eulogy – EP
Unfortunate Love (feat. Harrison Storm) – Hayden Calnin on Unfortunate Love (feat. Harrison Storm) – Single
Peaked – EDEN on Peaked – Single
Starboy (feat. Daft Punk) – The Weeknd on Starboy
I Love You’s – Hailee Steinfeld on I Love You’s – Single
Bonkers – Dizzee Rascal & Armand Van Helden on Tongue N’ Cheek (Dirtee Deluxe Edition)1
Moonlight popolare – Mahmood & Massimo Pericolo on Moonlight popolare – Single
On & On – Fyfe & Joel Baker on Prayer Emojis – EP
Good Together – Shallou & Ashe on Magical Thinking
Guille Asesino – C. Tangana on Bien:( – EP
Palm Springs (feat. In.Drip.) – Luna Shadows on Palm Springs (feat. In.Drip.) – Single2
2FU – Gavin Haley on 2FU – Single
Lost My Mind – FINNEAS on Blood Harmony
Sono un bravo ragazzo un po’ fuori di testa – Random on Sono un bravo ragazzo un po’ fuori di testa – Single3
Shelter – FINNEAS on Blood Harmony
Mean It – Piano Version – Wrabel on Piano
Crickets – Chloe Angelides on Crickets – Single
No Love – Noak Hellsing on No Love – Single
Higher – Juke Ross on Higher – Single
Breaking Me – Topic & A7S on Breaking Me – Single
Don’t Look Back (feat. Kotomi & Ryan Elder) [From Rick and Morty: Season 4] – Rick and Morty on Don’t Look Back (feat. Kotomi & Ryan Elder) [From Rick and Morty: Season 4] – Single4
Let Someone Go – Blewbird on Let Someone Go – Single
Dreamland – Glass Animals on Dreamland
I Lost a Friend – FINNEAS on Blood Harmony
Affection (Unplugged) – Amber Run on Affection (Unplugged) – Single
Go Somewhere – APRE on Go Somewhere – EP
On My Life – Cheat Codes on On My Life – Single
All Your Love – Sir Sly on All Your Love – Single
Long Way Home – Tom Boy on Long Way Home – Single5
Always Forever – Aquilo on Always Forever – Single
If I Want To – Goody Grace on If I Want To – Single
Talk – Jon Bryant on Talk – Single
Oxygen – Winona Oak & Robin Schulz on Oxygen – Single6
Long Time (feat. INTRN) – Atlas in Motion on Light Leaks – EP
Cold Feet – Ryan Hemsworth & EDEN on Cold Feet – Single
Golden Hour – Orion Sun on Hold Space For Me
Daydreamer – AURORA on A Different Kind of Human (Step II)
Hide and Seek (feat. JT Roach) [Don Diablo Edit] – Danny Olson on Hide and Seek (feat. JT Roach) [Don Diablo Edit] – Single
ELEGANTE – DrefGold & Sfera Ebbasta on ELO
Higher (feat. Opposite the Other) – Midnight Kids on The Lost Youth
Lying to Myself – Portair on Lying to Myself – Single
How It Was – Yoste on A Few Brief Moments – EP7
Cioilflow (feat. Salmo) – Dani Faiv on Scusate se esistiamo
Brand New (Renewed) – Foreign Fields & SYML on Brand New (Renewed) – Single
TesTa TrA Le NuVoLE, pT. 2 – Alfa & YANOMI on TesTa TrA Le NuVoLE, pT. 2 – Single
Sway – Alt Bloom on Astronaut Complex – EP
Giants – Dermot Kennedy on Giants – Single
Accidents – Haux on Violence in a Quiet Mind8
KIDS – Alle Farben, VIZE & Graham Candy on KIDS – Single
Lullabies for Little Crimes – Steve Benjamins on Lullabies for Little Crimes – Single
Die Young – Ke$ha on Deconstructed


  1. Kingsman is a good movie. Kinda want to watch it again, now. 
  2. “Mercury’s in retrograde”/“That means nothing to me, babe” is just a great line. 
  3. Somehow I thought Random was Spanish, not Italian? I dunno. 
  4. I have played this, like… an upsetting number of times since the season finale aired. It’s just an excellent piece of music. 
  5. In a very weird way, this song feels kinda like Major Tom
  6. My mom, listening to this: “it sounds like she can’t open her mouth all the way?” 
  7. File under “names that make me think of Majik.” 
  8. A lot of the people I was listening to in 2016-2017 have released new albums recently, and it’s been very interesting listening to them. Because a lot of them, it’s been “yep, this sure is that band” but I’m just not feeling it anymore, which is kinda sad. Haux, though, sounds like Haux… and also slots right into my head, and I love it. This song came out, like, a week ago, and it makes me nostalgic for Vienna. Wild. 
Categories
Review

“Ra”

Sam Hughes
This is one of the most interesting pieces of fantasy/science-fiction I’ve read recently. I’m sure I’ve mentioned before, in these book reviews, that I like world-building and systems of magic, and this delivers in spades. Magic, in Ra, is a type of engineering, and involves a great deal of math and rules and planning ahead. It’s a system to be uncovered, and scientists around the world are doing science at it, figuring out the rules. Why isn’t natural mana usable? What’s up with the weird dreams that all mages share? What happens to waste energy — magical friction — and why hasn’t anyone managed to detect it yet?
Basically, this is a book that takes solid aim at the mindset of someone like me, who will sit down and read through a veritable textbook on the workings of a magic system. And then, instead of just being a textbook, it comes with a whole story, that answers some of those questions in a way that makes for a solid story. (It helps that there’s a good amount of in-jokes for computer nerds — I mean, Wheel? That’s a neat touch.)
So, if you’re at all this sort of nerd, go give it a read. (You can also read it for free on the author’s website, but, y’know, pay people for their work.)

Categories
Education Portfolio Technology

Swift Student Challenge

A few days ago, Apple announced the winners of their Swift Student Challenge. I had applied and used my “taking a test” tactic, which was to hit ‘submit’ and then promptly erase the whole thing from my brain. (What’s done is done, and I feel silly worrying about something I have no control over.)

So when I got the email that “my status was updated” it was a bit of a surprise.

And when I clicked through the link (because, of course, they can’t just say in the email, you have to sign in) I was in for more of a surprise.

My submission had been accepted. I’m one of 350 students around the world whose work sufficiently impressed the judges at Apple.

Screenshot from Apple Developer website. It reads: Congratulations! Your submission has been selected for a WWDC20 Swift Student Challenge award. You'll receive an exclusive WWDC20 jacket and pin set at the mailing address you provided on your submission form. You'll also be able to download pre-release software, request lab appointments, and connect with Apple engineers over WWDC20 content on the forums. In addition, one year of individual membership in the Apple Developer Program will be assigned free of charge to eligible accounts of recipients who have reached the age of majority in their region. For details, see the WWDC20 Swift Student Challenge Terms and Conditions.
Neat!

Now, throughout the whole process of applying, I was my usual secretive self. I think two people knew that I was applying at all, much less what I was working on. Since it’s over with, though, it’s time for the unveiling.

What I made

I wanted to bring back a concept I’ve played with before: cellular automata. A few days before the competition was announced, I’d seen a video that really caught my interest.

Well hey, I thought, I’ve got some code for running cellular automata. I want to learn Swift Playgrounds. And I’ve been having fun with SwiftUI. Let’s combine those things, shall we?

The first big change was a visual history; when a cell dies, I don’t want it to just go out, I want it to fade slowly, leaving behind a trail of where the automata have spread.

The second was rewriting all the visuals in SwiftUI, which was a fun project. Animation timings took me a bit to get right, as did figuring out how to do an automated ‘update n times a second’ in Combine. The biggest issue I had, actually, was performance – I had to do some fun little tricks to get it to run smoothly. (Note the .drawingGroup() here – that made a big difference.)

And third, I didn’t want it to just be “here’s some code, look how pretty,” I wanted to actually use the Playground format to show some cool stuff. This turned out to be the most frustrating part of the whole thing – the Swift Playgrounds app doesn’t actually support creating a PlaygroundBook, and the Xcode template wasn’t supported in the then-current version of Xcode.

But the end result? Oh, I’m quite happy with it. PlaygroundBooks are cool once you get past how un-documented they are. You can, to borrow a Jupyter turn of phrase, mix code and prose in a lovely, interactive way.

Screenshot of the 'Grid' page of the playground book.  The full text is at https://github.com/grey280/SwiftLife/blob/master/Swift%20Student%20Submission.playgroundbook/Contents/Chapters/Chapter1.playgroundchapter/Pages/Grid.playgroundpage/main.swift
Don’t worry, the real version (and some videos) are below.

Doing the actual writing was pretty fun. This is a concept I’ve spent a lot of time learning about, just because it captured my interest, and I wanted to share that in a fun way.

Overall, I’m quite happy with the result. If you’d like to see more, I’ve made recordings of the ‘randomized grid’ and ‘Wolfram rule’ pages running, and the actual playground is available on GitHub.

Categories
Technology

Reversi: A Postmortem

Spring quarter consisted of two things: beginning the internship, and an “intro to programming” course. Which, at first glance, seems like it would’ve been a “coast to an easy A” kind of thing for me, but that wasn’t my goal. And, to quote the Dean of UCI’s Graduate Division, “grad school is for you.”

So, at the start of the quarter, I sat down to figure out what my goals for this class would be, and came up with two things. The first, which I won’t be writing about, was to get a bit more teaching experience – in the vein of “guiding people to asking the right questions,” rather than just showing them the answers.

Second, and the topic of this post, was that I wanted to learn Vapor. The professor was kind enough to let me do this – instead of doing the course project (an online game of Reversi) in Node, I did it in Vapor.

As a learning exercise, I’d say it was… okay.

What Went Well

I love Swift as a language. The type system just fits in my head, it aligns incredibly well with how I think.

In this case, that meant representing all the events to the server, and the responses from the server, as enums.

It also meant that I could have a solid Game class that represented the whole game board, with some neat logic, like getters that calculate the current score and if the game has ended. Pair those with a custom Codable implementation, and you’ve moved the majority of the logic to the server.

… and What Didn’t

The fact that I’m representing events to and from the server as enums, instead of using Vapor’s routing system, was a result of tacking on another thing I wanted to learn about, and trying to loosely hew to the nominal course objectives. The official version of the project used WebSockets for all the communication. Vapor supports WebSockets. Great combo, right?

Well, sure, but it meant I did almost nothing with the actual routing. Instead I re-implemented a lot of it by hand, and not in a very clean way. Vapor doesn’t scope things the way I expected – based on some experimentation, it instantiates a single copy of your controller class and reuses it, rather than having one per connection. So instead of having nice class-level storage of variables, and splitting everything up into functions with the main one handling routing, it all wound up crammed into the main function. Just so I could maintain the proper scope on variables. I’m still not happy about it.

What’s Next

I’d like to keep tinkering with Vapor. When I’ve got the time, I have a project in mind where it seems like a good fit.

In the meantime, I hope their documentation improves a lot. The docs they have are good tutorials, and cover their material well; they also, it feels like, leave out the lion’s share of the actual framework. By the end of the project, I’d given up on the docs and was just skimming through the source code on GitHub, trying to find the implementation of whatever I was trying to work with. (This, by the way, doesn’t work with Leaf, the templating engine – the docs are basically nonexistent, and the code is abstracted enough that you can’t really skim it, either.)

Complaints aside, I still like Vapor. I picked up a book on the framework, which seems like a pretty good reference on the topic.

And hey, it was a neat little project. (The JavaScript is a disorganized mess, but it’s also aggressively vanilla – while the rest of the class was learning about NPM, I decided to see how far I could get with no JS dependencies whatsoever. Answer: very.) Check it out, if you’d like:

Categories
Portfolio

JupyterLab File System Research

We’re currently wrapping up the spring quarter, and this seemed like an opportune moment to pause, catch my breath, and go back over some of the work that we’ve done so far.

And I will, first, pause to say that my use of ‘we’ there is very deliberate. I am part of a wonderful team of designers and researchers, working on the file system in JupyterLab:

And myself, in a design role.

After years of being a developer, my first serious involvement in the world of open-source is as a designer. How about that?

So, what have we done so far?

Slide from a heuristic evaluation of JupyterLab, highlighting that the top-level directory is not visible in the file browser.

Heuristic Evaluation

We began with a heuristic evaluation of JupyterLab, going through the process of setting up and using the file browser, and identifying key pain points.

We used Nielsen’s ten heuristics, and assigned a severity rating, from low to high, to problems. And, not to be all negative, we also highlighted some key strengths.

Why do a heuristic evaluation?

A heuristic evaluation is a great starting point. It’s a low-cost way to go through an entire interface and identify usability problems, and it’s quick, too.

Working asynchronously, have each of your panel members — and, in this case, the panel consisted of the five of us on the design team — individually go through the interface, making a note of any usability issues they see. Once everyone is done, combine the lists, merging similar/identical items.

Research shows that this technique works, even if the people doing the evaluation aren’t subject matter experts.

Competitive Analysis

Next, we identified several competitors to JupyterLab, direct and indirect, and some influencers — products that aren’t competing with JupyterLab, but could offer some design inspiration.

Why do a competitive analysis?

In short, because it’s really helpful to know what your competition is up to. Are there features they have that your users need? That’s a problem. Do you have something cool that your competitors don’t come close to? That’s a marketing opportunity.

It’s a chance to see what the state of the art is, and what market niches are un-filled. (Like, for example, the lack of good sharing features I highlighted in my last competitive analysis.)

Wireframe of a filtering UI in a file browser.

Sketches & Wireframes

While the research team continues with interviews and surveys, Emily and I started in on sketches and wireframes of the new file browser.

Why sketch/wireframe?

Because it’s too early to be pushing pixels.

Design is an iterative process: research feeds design feeds research feeds design. The initial research gave us our starting point; now, we make sketches, wireframes, and low-fidelity prototypes. The research team will take those and test them. What they learn will feed the next set of prototypes, and the cycle continues.

Especially early on in the process, you want to go low-fidelity; not only because it’s easier, but because it looks easier. If you make something pixel-perfect and beautiful, it looks like a finished project; the people testing it feel bad for pointing out what’s wrong with it, and stay silent, and those flaws work their way into the final product. Nobody’s happy.

What’s next?

We’ve got some more research deliverables that we’re in the process of wrapping up, which I will (eventually) post about here. And then, prototyping and testing!

Categories
Playlist

Playlist of the Month: May 2020

Eventually I’m gonna have time to update my command-line thing to support editing the links database, and not just adding to it. Y’know, sometime in the distance future when I actually have free time.
Cologne – Haux on Something to Remember – EP
Sober – Edwin Raphael on Sober – Single
Falling Down – Harrison Storm on Falling Down – Single
Angel – H. Kenneth on Angel – Single
F**k Collingwood – Hayden Calnin on F**k Collingwood – Single
Don’t Take the Money – Harry Strange on Don’t Take the Money – Single
This is Where it Ends – Richard Walters on This is Where it Ends – Single
Blinding Lights – The Weeknd on Blinding Lights – Single
Let Me Down – Run River North on Monsters Calling Home, Vol. 2 – EP
I Gave It All – Aquilo on Painting Pictures of a War – EP
Somewhere (feat. Octavian) – The Blaze on Somewhere (feat. Octavian) – Single
Slowly – ODIE on Slowly – Single
Lie – Jake Scott on Year of the Sunflower
All My Life – William Wild on Rental House / All My Life – Single
New Shapes (feat. Octavian) – Diplo on Europa – EP
Four in the Morning – Harry Strange on Four in the Morning – Single
Girls – Balcony on Girls – Single
Numb – Elderbrook on Numb – Single
Morning Prayers – Steve Benjamins on Morning Prayers – Single
In Your Eyes – The Weeknd on After Hours (Deluxe)
It’s Getting Worse – Gavin Haley & Mokita on It’s Getting Worse – Single
scorton’s creek – Isaac Dunbar on scorton’s creek – Single
Mean It – Lauv & LANY on ~how i’m feeling~
Just Asking – Aquilo on Just Asking – Single
Can’t Get You out of My Head – Mattis on Can’t Get You out of My Head – Single
Just Say Something – Nathan Ball on Just Say Something – Single
After All – Miles Hardt on After All – Single
Lonely Star – Oh Wonder on Lonely Star – Single
Devil On My Back – ferdinant. on Devil On My Back – Single
Church – Charles Fauna on Yonder
Been Thru This Before (feat. Giggs, SAINt JHN) – Marshmello, Southside, Giggs & SAINt JHN on Been Thru This Before (feat. Giggs, SAINt JHN) – Single
I Love You Always Forever – Donna Lewis on Now In a Minute1
Heavy – Haux on Violence in a Quiet Mind
Enough For You – Lani Rose on Enough For You – Single
PDLIF – Bon Iver on PDLIF – Single
Let There Be Light – Alex Sampson on Let There Be Light – Single
Nunca Estoy – C. Tangana on Nunca Estoy – Single
Friday – Charles Fauna on Eulogy – EP
Sunlight – Maty Noyes on Sunlight – Single
No Man’s Land – HAEVN on No Man’s Land – Single
Poison (feat. Take A Daytrip, Obongjayar & Santi) – Octavian on Poison (feat. Take A Daytrip, Obongjayar & Santi) – Single
Goliath – Woodkid on Goliath – Single
Dream Alone – Rydyr on Dream Alone – Single
Stains – Fyfe & Joel Baker on Stains – Single
ghost – Zachary Knowles on magnolia – EP
I Dare You (Unplugged) – Amber Run on I Dare You (Unplugged) – Single
Fun – Terror Jr on Fun – Single
Lovesick – Trevor Daniel on Nicotine
Mars – Charles Fauna on Yonder
Wait to Come Over – Charles Fauna on Eulogy – EP2
Listen (with Ivy Sole) – Charles Fauna & Ivy Sole on Yonder
A Total Dream – Charles Fauna on Yonder
He Don’t Trust Me – Balcony on He Don’t Trust Me – Single
Unfortunate Love (feat. Harrison Storm) – Hayden Calnin on Unfortunate Love (feat. Harrison Storm) – Single3
Get Back – Alt Bloom on Get Back – Single
Savages – Council on Savages – Single
Peaked – EDEN on Peaked – Single4
Starboy (feat. Daft Punk) – The Weeknd on Starboy
Drown – Chance Peña on Drown – Single
I Love You’s – Hailee Steinfeld on I Love You’s – Single5
Parable – Mako on Parable – Single
Shades of Blue – noelle on Shades of Blue – Single
Bonkers – Dizzee Rascal & Armand Van Helden on Tongue N’ Cheek (Dirtee Deluxe Edition)6
Turn Away – Harry Strange on Turn Away – Single
Opps – Vince Staples, Yugen Blakrok on Black Panther The Album Music From And Inspired By7
Moonlight popolare – Mahmood & Massimo Pericolo on Moonlight popolare – Single
On & On – Fyfe & Joel Baker on Prayer Emojis – EP
Losing Myself – Andrey Azizov & LONDIN on Losing Myself – Single
After All – Jackson Penn on After All – Single
Alps – Novo Amor & Ed Tullett on Alps
Good Together – Shallou & Ashe on Magical Thinking
Guille Asesino – C. Tangana on Bien:( – EP
Palm Springs (feat. In.Drip.) – Luna Shadows on Palm Springs (feat. In.Drip.) – Single
2FU – Gavin Haley on 2FU – Single
Lost My Mind – FINNEAS on Blood Harmony
Sono un bravo ragazzo un po’ fuori di testa – Random on Sono un bravo ragazzo un po’ fuori di testa – Single8


  1. I’ve been putting together a playlist, on the side, of songs that remind me of my childhood. This may or may not have been the one that started that project. 
  2. Of all the Charles Fauna on this list, I think this is my favorite. 
  3. I was so excited when I saw this song pop up in New Music Weekly, two of my favorite artists at the moment. 
  4. New EDEN made me wish for new Majik, but Majik… doesn’t exist, I can’t actually find anything about either of the members anywhere online. I hope they’re doing okay. 
  5. In a similar but very different vein as I Love You Always Forever, above. 
  6. Got a couple songs from movie scenes in this playlist, dunno what’s up with that. 
  7. An excellent scene in an excellent movie. 
  8. I wish I’d started listening to modern Italian music back when I was still in undergrad, would’ve been fun to bring that to a class on classical Italian music. 
Categories
Review

“alt.sherlock.holmes”

Jamie Wyman, Gini Koch, Glen Mehn
I’ve probably mentioned before that I’m a sucker for Sherlock Holmes stories. If not, you may have been able to figure it out, based on the number of books I’ve read in the genre.1 I believe I picked this one up as part of a Humble Bundle (or Storybundle, more likely) based entirely on the fact that there was a book in there titled “alt.sherlock.holmes.”
And for that, it was worth it, because this was quite fine. Three different takes on Sherlock Holmes, all unique and interesting. I’ll say right off that my favorite was the second of the three — almost the inverse of Elementary, in a way, with handsome Dr. Watson being recruited by a still-named-Sherlock, definitely-just-miss-Holmes to investigate some very Hollywood murders. The third take, featuring Sherlock and Watson in 1960s New York, was more traditional in its take—Mycroft, I think, being the biggest difference from my mental image of him, as he’s gone a bit more sinister—although having the two actually sleeping together was a nice touch.2 The first was the furthest-out, with Sherlock not especially being a detective, and the setting—a circus—by far the most unique. Unfortunately, it was also the most predictable; in the larger story told there, I picked out the culprit within the first chapter. Still, it was an interesting read.3
All in all, if you like a good Sherlock Holmes story, give these a read.


  1. And those were just the ones that I could find by searching my archives for “Sherlock Holmes”; I know off the top of my head that there’s at least one more. 
  2. I know a few people have written theses about the queer theory of Sherlock Holmes, and I tend to like those interpretations. Historians have gone to great lengths to erase queer people from history (yep, nothing gay at all about Shakespeare writing a bunch of love sonnets to a man, let’s just… republish those with all the pronouns swapped, shall we?) and I am all in favor of putting some of that queer history back, even if it’s in the form of fiction. 
  3. Admittedly, the 1960s version was also quite predictable, but that’s because I took a history class on the 1960s and picked up a great deal of well-informed cynicism as a result. 
Categories
Review

“Redemption’s Blade”

Adrian Tchaikovsky 
This fledgling series, I found out by trawling through Wikipedia a bit, is called “After the War,” and that’s a fitting title if ever I heard one.
The book has extreme Dungeons and Dragons energy. You could use the setting for a game with absolutely no issue, and even the pattern of events in the book feels episodic in the way that a long-running campaign does. What’s really interesting, though, is that the book opens in the aftermath of that long-running campaign. The Big Bad is dead; the gang broke up, and our protagonist already has the endgame-level weapon, an infinitely sharp sword. (Her first side quest, for reference, is trying to find a scabbard that will last for more than a couple hours, so she can walk around without worrying about accidentally cutting off someone’s leg by bumping into them.)
What I really liked about the book is that it’s all about the forgotten bits of world building. Sure, the Big Bad is dead, but that doesn’t change the fact that he’d assembled a massive army, half of which were unnatural abominations created via dark magic. The lands he conquered are still devastated. The nations he crushed don’t magically spring back into being; their scattered (and, largely, dismembered) peoples can’t just reappear back in their homelands, none the worse for the wear. And the grand coalition, all the free nations of the world banding together to fight against the army of darkness? Well, politics kicked back into gear pretty quickly.
“Redemption’s Blade” is one of the best books I’ve read recently, and I can absolutely recommend it to. Give it a read.