I was going to start with “it’s been a while since the last anthology I read and reviewed,” but, as it turns out, it hasn’t. I wonder if it’s the variety of stories that makes an anthology feel further away in my memory? No single story has as long to get lodged in my memory, or something. Hmm.

Still, I do like the anthologies – they’re fun in the same way that a 22-minute-long TV show is, a great way to fill a bit of time without getting yourself too invested in something.

Knaves is, admittedly, less fun than some of the other ones, because the focus is on villains. So, by the nature of their stories, it’s a bit of a gloomy topic.

Which isn’t to say the stories aren’t interesting, because they absolutely are. “All Mine” is heartbreaking, as is “Hunger in the Bones”; “The Bloodletter’s Prayer” is a fascinating piece of dark fantasy; “Cat Secret Weapon #1” is a delightful spin on the Bond archetype; “The Hand of Virtue” is sweet and a touch melancholy; and “Old Sol Rises Up” is… well, honestly, mostly confusing. But I suspect that was the intent, so I won’t fault it.

And, of course, there’s an introduction – every anthology has to have one. What caught my eye and, frankly, got me to actually read the introduction was who wrote it – Howard Tayler, the man behind Schlock Mercenary, another delightful piece of media that I’m happy to recommend. Read the intro – it’s weird, and silly, and fun.

In fact, read the whole book. It’s a good use of time.


“Skin Deep Magic”

Craig Laurance Gidney
This book is… melancholy.
I read it in bits and pieces over the course of a couple of months, which it’s well suited for, as a collection of short stories.
Some of them were creepy, and some were sad. One or two were happy, and hopeful. But overall, the feeling I have is melancholy.
Part of that is the way the last story ends, which is certainly coloring my opinion, as I set the book down and immediately started writing this, but I think the whole thing feels that way, as well.
Melancholy certainly isn’t the best of moods to be in, but sometimes it’s what you need. And, considering that I’m posting this as we’re making our way into autumn, it’s entirely appropriate. Get yourself a seat looking over trees preparing to shed their leaves, a mug of tea, and read this book.

Portfolio Video

JupyterLab Presentation

Part of the MHCID’s program requirements is that we give a presentation, detailing what we did during the internship. This year, gathering everyone together for a TEDx-style event… wasn’t in the cards. Instead, each group made a video presentation, filling approximately the same niche.

It’s been a while since I had a chance to do any video editing, and I had fun putting this together. As mentioned in my previous posts about this project, it was a group effort – we each recorded part of the audio, and split up the work of finding video clips, icons, and images to go with what we were saying.

It was fun to put together, and I’m pretty happy with the end result. Check it out:


Fluidics 2.1

I’ve just released Fluidics 2.1 on the App Store, only five months after the last update, so I’m speeding up a bit on my release cycle, apparently. If you’d like to see the whole “what’s new” list, check out the release post over on the Fluidics site; this post is more of a “making of” kind of thing.

Unlike the last update, this wasn’t a ground-up rewrite. I briefly considered tearing out the App/SceneDelegate stuff and rewriting it to use the new SwiftUI-style App setup, but because there were some visual bugs with the release of iOS 14, I wanted to get the update out sooner rather than later.

This version requires iOS 14 – the previous version has no issues on iOS 13, and just about everything new in 2.1 requires iOS 14, so I went ahead and bumped the minimum version.

Screenshot showing all three of the new widget styles in Fluidics 2.1

The main addition in Fluidics 2.1 is the new widgets, available with three variants.

From the top:

  • The ‘add’ widget, which displays the four Quick Adds, and allows one-tap logging from the home screen.
  • The ‘status’ widget, in wide form – my personal favorite – which displays the goal, not only in the fill state of the widget background, but also in text form, as well as the four quick adds.
  • The ‘status’ widget, in small form, displaying just the goal in text form.

All of the widgets allow launching the app, and use deep links to interact with it in specific ways.

The linking format is technically open, so I can drop a link into this post that would open the app and log water. It accepts a handful of URLs:

  • fluidics://
  • fluidics://
  • fluidics://, where :unit is one of “flOz“, “l“, or “ml“, and :amount is a parsable number.

(Creating that linking framework was the spot where I was most tempted to drop SceneDelegate entirely – the Scene class’ onOpenURL(perform:) modifier was looking real nice compared to the tangle I wound up with in the SceneDelegate. Oh well, maybe for next update.)

One of the fun things to set up was the customizability of the widgets. I’ve bounced off the IntentKit framework in the past, but never got very far due to time constraints. With widgets being driven off Intents as well, though, it was time to sit down and actually write it up.

Screenshot of the widget editor.

Honestly, the Intent definition editor is cool. I could go off on a whole mini-essay about the usefulness of constraints in design, and how perfectly it expresses the constraints of valid inputs and configurations, but I digress.

Having done that bit of setup, I’m definitely going to look more at this in the future. I’m still trying to figure out what, exactly, a SiriKit integration for Fluidics should look like; once I’ve done that design work, though, the coding aspect is seeming much more manageable now.

The last little feature I added was the ability for Pro users to switch the icon. It felt like the right kind of thing to lock behind the Pro subscription – a purely cosmetic tweak, and an additive change. Actually implementing it in SwiftUI was fun – it’s a Picker, attached to a custom Binding. I should probably refactor it a bit for readability, but the actual implementation is pretty solid, and I’m happy about it. It also allows for further expansion in the future – I can add new icon choices pretty easily, going forward, and may do so if I have any fun ideas for what to offer there. And yes, I’m open to suggestions.

So, the new release is live on the App Store, and I encourage you to check it out. The app remains free to use. If you’d like a more marketing-speak-y overview of what’s new, you can check out the release post.


Playlist of the Month: September 2020

It’s fall! The obligatory joke would be something about pumpkin spice, but actually I’m just planning to explode into a cloud of apple cider flavored things.

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

Somewhere (feat. Octavian) – The Blaze on Somewhere (feat. Octavian) – Single

Slowly – ODIE on Slowly – Single

scorton’s creek – Isaac Dunbar on scorton’s creek – Single

I Love You Always Forever – Donna Lewis on Now In a Minute

Unfortunate Love (feat. Harrison Storm) – Hayden Calnin on Unfortunate Love (feat. Harrison Storm) – Single

Starboy (feat. Daft Punk) – The Weeknd on Starboy

Good Together – Shallou & Ashe on Magical Thinking

Lost My Mind – FINNEAS on Blood Harmony

No Love – Noak Hellsing on No Love – 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

I Lost a Friend – FINNEAS on Blood Harmony

Cold Feet – Ryan Hemsworth & EDEN on Cold Feet – Single

How It Was – Yoste on A Few Brief Moments – EP

Giants – Dermot Kennedy on Giants – Single

We Can Take Our Time – Hayden Calnin on We Can Take Our Time – Single

SPACCATO – Don Joe, Madame & Dani Faiv on SPACCATO – Single

start//end – EDEN on vertigo

Passports – Kiran Kai on XYZ – EP

Burn the Witch – Shawn James on Burn the Witch – Single

Stingray – Kai Whiston & EDEN on Stingray – Single

Bitter – Yoe Mase & sad alex on Bitter – Single

Dorado – Mahmood, Sfera Ebbasta & Feid on Dorado – Single

American Boy (feat. Kanye West) [Lost Frequencies Remix] – Estelle on American Boy (feat. Kanye West) [Lost Frequencies Remix] – Single

exile (feat. Bon Iver) – Taylor Swift on folklore

Something to Hold on to – Harry Strange on Something, Hold On – EP

Mountain Steeps – Hayden Calnin on Mountain Steeps – Single

Swill – Jónsi on Shiver

Hurricane – Anson Seabra on Hurricane – Single

Call Him – Noah Cunane on Call Him – Single1

Tokyo Drifting – Glass Animals & Denzel Curry on Dreamland

It’s All So Incredibly Loud – Glass Animals on Dreamland

Aristocrats – Raleigh Ritchie on Andy

I Want You Close – By The Coast on I Want You Close – Single

Siren Song – MARUV on Siren Song – Single

I Still Love You – NIGHT TRAVELER on I Still Love You – Single

Every Colour – Luca Fogale on Every Colour – Single

Fall – Lepani on In The Moment – EP

Blood On the Leaves – Kanye West on Yeezus

Down from Here – Sloane on Down from Here – Single

Find Yourself – Thunder Jackson on Thunder Jackson

The Dark – SYML on The Dark – Single

Are You Happy? – SHY Martin on Sad Songs – EP

Sirens – LANKS & Fossa Beats on Sirens – Single

How Would I Know – Kygo & Oh Wonder on Golden Hour

Dionne (feat. Justin Vernon) – The Japanese House on Chewing Cotton Wool – EP

Killer – Haux on Violence in a Quiet Mind

Crawl – Blakey on Crawl (Acoustic) – Single

Bo Exotic – Turbo on Bo Exotic – Single2

Why Do You Lie to Me (feat. Lil Baby) – Topic & A7S on Why Do You Lie to Me (feat. Lil Baby) – Single

Roses (Imanbek Remix) – SAINt JHN on Roses (Imanbek Remix) – Single3

Hold Me Closer (feat. yaeow) – Addict. on Hold Me Closer (feat. yaeow) – Single

Heat Waves – Glass Animals on Dreamland

Upside Down – JVKE on Upside Down – Single

Feel It – Luca Fogale on Feel It – Single

Why Do We Shake in the Cold? (Edit) – Elderbrook on Why Do We Shake In The Cold? – Single

And It Breaks My Heart – LÉON on Apart

If We’re Being Honest – Novo Amor on Cannot Be, Whatsoever

STUD – Troye Sivan on In A Dream – EP4

Rising – Duskus on Rising – EP

Sea and Fire – Harrison Storm on Sea and Fire – Single

God I Hope This Year Is Better Than The Last – SYML on Lost – EP

Next To Me – Lepani on In The Moment – EP

Barking – Ramz on Barking – Single5

Fear of the Water – SYML on Work – EP

WDWGILY – SYML on Chill – EP

Get Numb – Council on Haunts Me – EP

Doin’ It Right (feat. Panda Bear) – Daft Punk on Random Access Memories

Vampire – Noah Cunane on Vampire – Single

Instant Crush (feat. Julian Casablancas) – Daft Punk on Random Access Memories

No Perfect Love – Lucy Daydream on No Perfect Love – Single

Come On – Will Young on Echoes6

Let’s Fall in Love for the Night (1964) – FINNEAS on Blood Harmony (Deluxe)

Beyond – Daft Punk on Random Access Memories

Wildfire – SYML on Work – EP7

Frequency – Chance Peña on The Inevitable – EP

Still Here – Thorin Loeks on In This Place

Falling – DANIEL SAINT BLACK on Falling – Single

slow summer – Zachary Knowles on slow summer – Single

Bottom of a Heartbreak – NEEDTOBREATHE on Out of Body

All These Dreams – Ryan Hemsworth on Pout – EP

Hot Stuff – Kygo & Donna Summer on Hot Stuff – Single8

Buried Alive – Rory Webley on Are You Scared Yet? – EP

Hey Stupid, I Love You (Spanglish Version) – JP Saxe & Mau y Ricky on Hey Stupid, I Love You (Spanglish Version) – Single

Numb – Elderbrook on Why Do We Shake in the Cold? (Deluxe Album)

Domestic Bliss – Glass Animals on Dreamland

Wait To Wake Me Up – Lepani on In The Moment – EP

Perfectly Imperfect – Declan J Donovan on Perfectly Imperfect – Single

Love to Come Home (feat. madugo) – Blewbird on Love to Come Home (feat. madugo) – Single

Falling – Phil Good on Falling – Single

Stronger – Kanye West on Graduation

Mad World – Pentatonix on Mad World – Single9

Hummingbird – Run River North on Hummingbird – Single

No Se Da Cuenta – Ozuna & Daddy Yankee on ENOC

Lie – Sasha Sloan on Only Child

  1. This one is fun – it’s that “male pop singer” trope of “I’m gonna make you cheat on your boyfriend,” but turned on its head.
  2. This is delightfully catchy.
  3. Eventually I’m just gonna make a whole “Tiktok” playlist.
  4. Remember Troye Sivan?
  5. This feels like one of those songs where my mom will ask me what the lyrics mean and I’ll just shrug.
  6. This was one of those “I haven’t listened to this song in ages!” additions. Which I then swapped out immediately, because when I added it to the playlist, I added the version that was already in my library – which turned out to be an iTunes Match track, of a 48k YouTube rip from years and years ago. Whoops!
  7. SYML recently released what are, essentially, mixtapes of his work. Not sure what that was about, but it did lead me to discover a couple tracks I hadn’t heard before, so… I guess it worked?
  8. Is the resurgence of roughly ‘80s sounds in music a general trend, or is it just what I’m interested in right now? (I’m going to cite the new Wonder Woman as evidence for ‘general trend.’)
  9. I love this song, and also firmly associate it with the trailer for Gears of War.

JupyterLab File System Prototypes

Summer quarter has come and gone, and with it, I am now a Master of Human-Computer Interaction and Design.

As I did at the end of last quarter, I’d like to take a moment to look back on what we’ve accomplished this quarter.

And, a refresher on who “we” is in that sentence:

And myself, in a design role.

Having done all that research during the spring, summer was about prototyping and iteration.

Low-Fidelity Prototype

Image of the opening screen from the low-fidelity prototype of the JupyterLab File System

The term “low-fidelity prototype” might sound a bit negative, but they’re a wonderful, wonderful thing. Low-fidelity prototypes are easy to make, which makes them easy to toss aside. In the same way that you use sketches and wireframes to go through a lot of ideas very quickly, a low-fidelity prototype lets you try things out without pouring a ton of resources into making something pixel-perfect.

We went through several iterations, developing clickable flows that highlighted the key points of the features we were designing. Those flows in hand, we went back to the users, and gathered more test data – did they understand what the new features were for? Did the terminology and usage make sense? Was it useful?

High-Fidelity Prototype

Image of the opening screen from the high-fidelity prototype of the JupyterLab File System

That user feedback in hand, we went back and created a high-fidelity prototype. One of the main goals we had in mind with this was to have it, if not ‘pixel-perfect,’ viable for handoff to the developers who would be creating it. Instead of mapping out every possible screen, we identified the key user flows, and created a guided tour of sorts, a limited clickstream that showed as many of the possible UI states, without requiring us to create hundreds or thousands of screens.

As part of this, I started to wonder what stateful prototyping tools would look like. Think about it – using current prototyping tools, if we want to have a collapsable sidebar, we need to make two of every screen, one with the sidebar open, one with it collapsed. Once you start getting more states – say, to use a non-random example, if you’ve got multiple collapsible elements in a sidebar, and some user-configurable data in the main area – the combinatorics make it entirely unfeasible to create a realistic prototype. This… is a thread I’d like to follow up on in the future.


And with that, our portion of the project was over. We’d been working up to it for quite a while, yet it still felt very sudden. The last bit to do was handoff, which happened as a Zoom meeting with a couple of the design leaders at Project Jupyter, and a pull request to jupyterlab/design.

Not to be cliche, but this project has been an amazing experience. I’ve learned a lot in doing it, and I absolutely loved working with this team.


Personas and Journey Maps

I mentioned in my post about the research we did that we were working on finalizing a couple deliverables, and that I would eventually post them here. Months later, I’ve finally got the time to do it.

And, before I go any further, credit where it’s due: this was a collaborative work by the whole team:

So, what did we create?


One of the key tenets of design is you are not your user. Something of a parenthetical on that is that… nobody is The User. Someone is ‘a user,’ but there’s no definitive User out there.

But we’re human, and we need a way to think about the people we’re creating things for, so we develop personas. Create a character who embodies part of your user base – and note, you’re not just making someone up, you’re personifying data you’ve already gathered. (And be sure not to stereotype, while you’re at it!)

Journey Maps

Journey maps fall more into the “UX” than “UI” field. The idea is to follow your user (or rather, one of your personas) through their process of interacting with your design. And, in fact, not just interacting with it, but potentially… not interacting with it. Discovering it for the first time, say, or using a competing product instead.

Once you’ve got the what figured out, get into how they feel as they’re doing it. Is the design meeting their every need and desire, leaving them shouting with joy? Is it completely failing to do something critical, leaving them wondering who in the world could’ve come up with something this terrible?

In short, it’s an expansion of the persona – another tool for getting in the collective head of your user base.

Seeing that linkage, we opted to combine these two deliverables. Take a look:

Mood Board

This… isn’t so rigorously researched a design artifact as personas and journey maps should be. In our case, we actually did back it up with some interesting research into the ways that people use and think about organization – I think the key reference would be the Five Hat Racks, although Justin pulled together a lot of research from the early years of computer science as a field, as well. To summarize, there are ~5.5 ways to organize digital files:

  • Amount of use
  • By provenance (source)
  • Chronologically
  • User self-selection/favorites
  • By concept, or by Venn Diagram (thus, .5)

Regardless, the end result makes for a fun visual, so I thought I’d share it here:

A mood board. At center, 'how do you organize?' with five sub-categories, clockwise from top: source, amount of use, concept, chronological, favorites

“Wireless and More Steam-Powered Adventures”

Alex Acks
I was genuinely surprised that I don’t have another review to reference here — I would swear that I wrote one about the book where these characters were first introduced, Murder on the Titania, but apparently not.1
So, the introduction: in the Sherlock Holmes style, very vaguely. Zombies, and steampunk, and all the other internet buzzwords abound, but it works surprisingly well together. The primary arc of the first story can be summed up with the image of a Native American man and a Latina woman rolling their eyes as an elderly white man tries to convince himself he’s the hero because he’s slightly less of an imperialist than the bad guy.
And if that hasn’t sold you on the concept, I’m not sure what will. It’s a fun little read, check it out.

  1. I was actually entirely relying on being able to search in my archives here to find the name of that book, but no dice; I had to look it up on the author’s lovely, exhaustive list of everything they’ve written. 

“Scourge of the Seas of Time (and Space)”

I do love a good anthology. It’s all the fun of starting a new book, several times over, and with much less of a time commitment each time.
This did have some of the downside, though – about halfway through, I found myself getting rather bored of the concept of pirates. It’s a bit too coherent a theme, I feel; the book had a lot of the variance that makes anthologies fun, but keeping everything tied to ‘pirates’ limited it a bit more than is really healthy for an anthology.
After that midway nadir, though, it recovered nicely, going off into some interesting science fiction bits, and ending on a delightfully weird fantasy (or, possibly, extremely-distant-future?) piece.
So hey, have some fun with a variety of pirate stories.


Playlist of the Month: August 2020

Hey, I’m almost done with school! Wild.

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

Somewhere (feat. Octavian) – The Blaze on Somewhere (feat. Octavian) – Single

Slowly – ODIE on Slowly – Single

New Shapes (feat. Octavian) – Diplo on Europa – EP

scorton’s creek – Isaac Dunbar on scorton’s creek – Single

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 Starboy1

Good Together – Shallou & Ashe on Magical Thinking

Lost My Mind – FINNEAS on Blood Harmony

No Love – Noak Hellsing on No Love – 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

Cold Feet – Ryan Hemsworth & EDEN on Cold Feet – Single

Golden Hour – Orion Sun on Hold Space For Me

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

We Can Take Our Time – Hayden Calnin on We Can Take Our Time – Single

SPACCATO – Don Joe, Madame & Dani Faiv on SPACCATO – Single

Heart-Shaped Box – Glass Animals on Heart-Shaped Box (Quarantine Covers Ep. 1)

Vivo – Ernia on Gemelli

start//end – EDEN on vertigo

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 – Single2

Stingray – Kai Whiston & EDEN on Stingray – Single

Bitter – Yoe Mase & sad alex on Bitter – Single

America – Sufjan Stevens on The Ascension

With You – Thorin Loeks on With You – Single

Dorado – Mahmood, Sfera Ebbasta & Feid on Dorado – Single

American Boy (feat. Kanye West) [Lost Frequencies Remix] – Estelle on American Boy (feat. Kanye West) [Lost Frequencies Remix] – Single

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

Lentamente – Cara on Lentamente – Single

I Heard – Elliot Moss on I Heard – Single

Tonight – Thorin Loeks on Tonight – Single

All Your Love – Sir Sly on All Your Love – Single

Heads And Tails – BANNERS on Where The Shadow Ends

exile (feat. Bon Iver) – Taylor Swift on folklore3

Something to Hold on to – Harry Strange on Something, Hold On – EP

Unknown but Somehow You’ll Find Your Own Space – Harry Strange on Something, Hold On – EP

Mountain Steeps – Hayden Calnin on Mountain Steeps – Single

Swill – Jónsi on Shiver

Chapter 1 – Octavian on Rari (Chapter 1) – Single

Rari (feat. Future) – Octavian on Rari (Chapter 1) – Single

Tardissimo – Guè Pequeno, Mahmood & Marracash on Mr. Fini

Touch – Sleeping At Last on Atlas: Senses

Touch – Haux on NOON // 239

Hurricane – Anson Seabra on Hurricane – Single4

Caramelo – Ozuna on Caramelo – Single

Call Him – Noah Cunane on Call Him – Single

Gistro Amarillo – Ozuna & Wisin on Gistro Amarillo – Single

Tokyo Drifting – Glass Animals & Denzel Curry on Dreamland

12 Steps – CXLOE on 12 Steps – Single

Genie in a Bottle – Rory Webley on Are You Scared Yet? – EP

AUATC – Bon Iver on AUATC – Single

It’s All So Incredibly Loud – Glass Animals on Dreamland

Pick Up Where We Left Off – Kayden on Pick Up Where We Left Off – Single

Aristocrats – Raleigh Ritchie on Andy

I Want You Close – By The Coast on I Want You Close – Single

Siren Song – MARUV on Siren Song – Single5

I Still Love You – NIGHT TRAVELER on I Still Love You – Single

Every Colour – Luca Fogale on Every Colour – Single

Boys Don’t Cry – Dillistone & ferdinant. on Boys Don’t Cry – Single

My Rajneesh – Sufjan Stevens on America – EP6

Only Us – Kygo & Haux on Golden Hour

Call Me – Lo-Rem on Please, No More Gaslighting

Fall – Lepani on In The Moment – EP

Blood On the Leaves – Kanye West on Yeezus

Lost In the World (feat. Bon Iver) – Kanye West on My Beautiful Dark Twisted Fantasy

Down from Here – Sloane on Down from Here – Single

Find Yourself – Thunder Jackson on Thunder Jackson

The Dark – SYML on The Dark – Single7

All That Matters – Blanco White on On the Other Side

Are You Happy? – SHY Martin on Sad Songs – EP

Sirens – LANKS & Fossa Beats on Sirens – Single

Easy – Troye Sivan on In A Dream – EP

How Would I Know – Kygo & Oh Wonder on Golden Hour

Dionne (feat. Justin Vernon) – The Japanese House on Chewing Cotton Wool – EP8

Here Comes the Night – djSnake & Mr Hudson on Here Comes the Night – Single

Killer – Haux on Violence in a Quiet Mind

Crawl – Blakey on Crawl (Acoustic) – Single

  1. Every once in a while I think about the story of how this collaboration happened, and I consistently have the mental image that Daft Punk didn’t want to collaborate with The Weeknd, they were just too overwhelmed by him suddenly bursting in to argue. Almost certainly not what happened, but a fun image nonetheless. ↩︎
  2. I can’t listen to this without picturing the scene from The Old Guard. ↩︎
  3. Somehow I still think of Bon Iver as being a little-known indie artist, despite the fact that he’s on this playlist in collaborations with Taylor Swift and Kanye West. ↩︎
  4. A nice song to sing along to, though I can’t read the title without getting the Thirty Seconds to Mars song stuck in my head instead. ↩︎
  5. I wonder if Tiktok pays royalties on the songs that go viral on Tiktok? ↩︎
  6. This song feels like an entire album all in one, it’s wild. ↩︎
  7. While trying to play this the other day, I determined that the search engine in the iOS Music app is still hot garbage, because searching for “dark syml” found exactly zero results. ↩︎
  8. My friend Soph sent this to me, like… a month ago, and I finally listened to it and immediately texted her back like “that song is amazing thank you!!!” ↩︎

“Ghost Garages”

Erin M. Hartshorn
“This feels like an indie novel,” I told one of my friends as I was reading it. “The content is really interesting, but the title says ‘there wasn’t an editor.’” Looking at the cover now, I’m doubling down on that statement. It looks, honestly, ridiculous. But it was also one of the most fun books I’ve read recently.
It also feels like it’s setting up for a series, both in the subtitle and in the amount of world-building it contains, which I’m pretty okay with. That world building was quite interesting, and I’d like to see what Pepper does next. It’s a fascinating blend of little and big stakes — competing for promotion from ‘assistant manager’ to ‘manager’ at work, a bit of relationship drama, and, oh, a serial killer.
Which leads me to the other thing I said to someone about this book as I was just starting to read it. “It feels like the plot is going to be a Scooby Doo episode, just a real estate developer using ghost stories to drop property values… except they’re murdering people so that they’re Actual Ghosts.”
And hey, if that doesn’t sound like a fun book to you, then… you’re reading the wrong blog for book reviews. Give it a read.



(Image credit: @morningbrew, Unsplash)

Following my recent post on form design, I thought it might be interesting to take a look at what is, in the US, one of the most universal forms: the ballot.

This sits at the intersection of my interests in design and civic engagement. It’s also a much more controversial topic than I’d normally touch with a ten-foot pole, but here I am.

(‘Pole/poll’ pun? Absolutely intended.)

And first, an admission: that image up top, of people at a polling station? That’s an utterly alien concept to me. I’ve never been to a polling station; I live in Oregon, a state that finished moving to universal vote-by-mail when I was in elementary school.

Now, vote-by-mail is a very controversial topic these days, but as someone who grew up with it, I thought it would be interesting to do a case study of how it works in Oregon.

Vote by Mail: A Case Study

Overall, the user experience of voting in an election in Oregon is, to my eye, already a ways ahead of most of the rest of the country. There’s still room for improvement, though.

So, what is Oregon doing right, and what are we doing wrong?

Photograph of 'I Voted' stickers.

Ease of Registration

I take a great amount of civic pride in the lengths my state goes to for voting rights: you can register to vote online, or be automatically registered when you get your driver’s license. I registered to vote at 17, after being handed a registration card by the Oregon Secretary of State at a voter registration drive; you can, in fact, register on your 16th birthday, if you so desire.

(Image credit: @element5digital, Unsplash)

In doing the research for this article, I found out that “register when you get your driver’s license” went from “… if you fill out this extra piece of paper while you’re at the DMV” to being an automatic process, thanks to the amusingly-titled “Motor-Voter Law.”

Photograph of an Oregon Voters' Pamphlet

Ease of Information

While I can’t say we don’t have our share of crappy political ads, the state has a standard way of providing information on everyone running: the voting pamphlet, sent to every household prior to the election. (They are also available online.)

(Image credit: Statesman Journal)

These pamphlets, nice as they are, aren’t perfect. The actual process for putting information in them is a touch convoluted, and surprisingly unregulated. While each entry mentions where the information comes from, and plagiarism or misquoting are banned, there is nothing enshrined in law (or policy) to prevent misleading entries.

Let’s take a look at the information architecture of the section on a single ballot measure.

Screenshot of Measure 96 from the 2016 Oregon voter's pamphlet

At the top, the easily-memorable measure number takes precedence, followed by the shortest-form summary, the title.

Each measure has a very clear summary section, as well as the “Result of ‘Yes’ Vote” and “Result of ‘No’ Vote” area, which state, very explicitly, what each bubble on the accompanying ballot will do.

The estimate of financial impact is prepared by an eminently qualified committee; the text of the measure is resolute in itself.

But then things break down, with “Arguments in Favor” and “Arguments in Opposition.” This is an official state document; everything about this measure, so far, has been as factual and rigorous as one could hope. These arguments, though, are unregulated beyond “no plagiarism, no misquoting people.” If you want to write a 350 words of “why you should vote against this,” pay the fee to have it entered in, and file it as an “Argument in Favor” there’s nothing to stop you.

And that’s a problem. This is an official state document; it’s got the seal on the cover, and a lot of very solid information in it, giving it credence. Unverified information in the Arguments gains legitimacy by association.

(Screenshot taken from the 2016 Oregon Voter’s Pamphlet.)

For comparison, let’s take a look at a different state.

California’s voter pamphlets are laid out very differently. The first thing that caught my eye – and made assembling this comparison in a visually-pleasing way rather difficult – was that the ballot measure doesn’t have a table of contents.

Screenshot from Proposition 20 in the 2020 California Voter's Guide
I’ll give California this, though: they’ve lined up “Proposition” with “20” much better than Oregon did “Ballot Title” and “96.” The all-caps feels a bit “Newspaper Headline”, though, and what is going on with the kerning in “Prepared by the Attorney General”?

To save you a great deal of scrolling, I’ve pulled together the section headings from the 2020 Voter’s Pamphlet, Proposition 20, and summarizing somewhat:

  • Official Title and Summary
    • Summary of Legislative Analyst’s Estimate of Net State and Local Government Fiscal Impact
  • Analysis by the Legislative Analyst
    • Overview
    • (Specific Proposal Title)
      • Background
      • Proposal
    • Fiscal Effects
  • Argument in Favor of Proposition
  • Rebuttal to Argument in Favor of Proposition
  • Argument Against Proposition
  • Rebuttal to Argument Against Proposition

Distinctly more words to it, but notice some key differences:

  1. There’s an actual analysis of the legislation, expanding beyond the fiscal impact to the actual outcomes of the bill. This is provided by the Legislative Analyst’s Office, who are explicitly nonpartisan.
  2. Arguments in favor and against are paired with rebuttals, allowing for more of a dialog between sides.

Note, however, that there’s still no legal requirement for an “argument in favor” to actually be in favor. There is a strong precedent for judicial intervention, which is something of an improvement, at least. And the typography makes a statement, too.

Screenshot of the Analysis by the Legislative Analyst section of Proposition 20 in the 2020 California voter's guide.
Screenshot of the Argument in Favor section of Proposition 20 in the 2020 California voter's guide.

On the left, the Analysis by the Legislative Analyst. It’s rich text – there’s use of bold to highlight key points, and various levels of headings to organize it. On the right, the Arguments, sans formatting. They’re also in a smaller font size, and have their own unique style of heading. In short, the Arguments look different, providing a subtle reminder that this section is not the product of the nonpartisan election officers.

And now, back to the other aspects of the election. But first, a reminder to find other sources of information on the candidates and ballot measures. As a good starting point, I recommend Vote411, from the League of Women Voters, and Ballotpedia.

Photo of an envelope labeled 'Business Reply Mail' next to a face mask.

Ease of Voting

A few weeks before the election, the Oregon Department of State mails out ballots to all registered voters. The package includes the ballot, a return envelope, and a second ‘privacy’ envelope that you can use if you’re worried somebody might be able to see the contents of your ballot through the outer envelope.

(Image credit: @element5digital, Unsplash)

As of 2019, the return envelopes are postage-paid; if you’d rather drop it off in person, you can take it to drop box – most public libraries have one, as well as various other locations.

Screenshot of the AIGA proposed ballot design. Original is at

Ease of Marking

One of the inspirations for this post was the American Institute for Graphic Arts’ “Design for Democracy” program. They did a larger-scale version of my research on form design, investigating and determining best practices for ballot design.

AIGA produced a hand-filled ballot design (pictured, right), as well as a ballot design for touch screen voting machines, and a full set of resources for election design. I’ll be focusing on the hand-filled ballot, though, as that’s what we use in Oregon.

Let’s take a look at a (reasonably) representative sample of an Oregon ballot. This comes from the 2020 primaries, courtesy of Lincoln County:

Screenshot from the 2020 primary election ballot from Lincoln County, Oregon

It’s actually pretty good. The visual design follows most of the guidelines, although the “Write-in” lines and text need a bit more space. The main issue I see is the instructions – they’re fairly clearly written, but they are written. Pairing them with a visual explanation – the cartoons, in AIGA’s example – makes them even easier to follow.

The UX of Elections

Elections in the US, being controlled at the state level, rather than federally designed, are something of an ongoing A/B test. We can see different electoral systems in use across the country, and use opinion polls after the fact to judge how well-represented people feel by the results.

Were I polled right now, I’d feel fairly happy with how my state handles things.

So, what are the key action items for, say, another state, looking to implement some of Oregon’s best practices?

  1. Reduce the friction of voting. Make it easy to register, easy to get your ballot, easy to fill out your ballot, and easy to turn it in.

That’s it, that’s the list, the whole idea. Make it easier to vote, by whatever means possible. I’m an advocate for doing so by enabling universal mail-in-voting, thanks to some of the inherent benefits:

  • No standing in line, or going into cramped polling places – an excellent benefit during a pandemic!
  • Voting on your own time, rather than needing to take half a day off to wait in line. (‘On your own time’ within reasonable limits – there’s still a deadline to get it turned in on time.)

But, of course, I’m not done. I have some recommendations for Oregon, as well:

  1. Validate the voting pamphlet materials. Don’t just trust what people submit, make sure it’s actually espousing the viewpoint it claims. Do some fact checking, while you’re at it.
  2. Visually distinguish public submissions. Use some gestalt principles – things that are close together, and look similar, look like they’re part of a group. Move the public submissions a little further away, and make them look different, to remind people that they aren’t from the same source as the rest of the material.
  3. Demonstrate how to fill out the ballot. The instructions are fairly well-written, but “comfortable reading English” should not be a requirement to vote.
Photograph of a polling station.
Image credit: Elliott Stallion, Unsplash.

Postscript: while I’m advocating for improving voting, I am absolutely not advocating digital voting. No. No, no, no.

Education Portfolio Technology

HCI, Cognitive Load, and Forms: Pre-Filled and Required Fields

Written for our “Innovations in HCI and Design” course.

Cognitive Load Theory

For form design, cognitive load theory can be boiled down to the idea that people only have so much space in their brain, so don’t overfill it. The exact amount varies depending on context: is the information auditory or visual?1 What stage of processing are you going through? (Gwizdka 3)

Techniques for Reducing Cognitive Load

  • Produce less cognitive load. Intrinsic cognitive load is necessary to what the user is trying to do; extrinsic is work because the design surrounding the goal is bad (Hollender et al. 1279; Feinberg & Murphy 345).
  • Use multiple modalities. Mixing visual with auditory, for example, allows users to distribute the cognitive load across multiple cognitive subsystems (Oviatt 4).
  • Do the work for them. Pre-filling known fields (i.e., a user’s name and address when they’re already signed in) moves the cognitive load from the user to the computer, saving the user the effort (Gupta et al. 45; Winckler et al. 195).

Cognitive Load in Human-Computer Interaction

Under heavy cognitive load, users work slower, and may commit more errors (Rukzio et al. 3). From a young age, humans are goal-oriented; slowing them down as they work towards these goals, unless explicitly a design goal, can only cause frustration (Klossek et al.). Reducing cognitive load leads to happier users.

Applying Cognitive Load Theory to Form Design

Cognitive load theory gives us several key takeaways:

  • Indicate which fields are required. Provide a clear indicator of what is required so your users don’t have to guess (Bargas-Avila, Javier A., et al., 20 Guidelines 5).2
  • Pre-fill data when possible. Use available sources—an existing account, or on-device sensors—to save the user the effort. However, if that data might not be accurate, don’t guess; leave the field blank to prompt the user to enter the correct data (Rukzio et al. 3-4).
  • Don’t interrupt the user by validating data. Real-time validation is fine, as long as it doesn’t force the user to switch from ‘completion mode’ to ‘revision mode’ (Bargas-Avila, Javier A., et al., Useable error messages 5).3

There has not been any research into the combined effects of marking required fields and pre-filling fields; however, we can extend the conclusions in the first two points, above, as such: a required field, even if pre-filled, remains required, and should be marked as such.


Baddeley, Alan D., and Graham Hitch. “Working memory.” Psychology of learning and motivation. Vol. 8. Academic press, 1974. 47-89.
Bargas-Avila, Javier A., et al. “Simple but crucial user interfaces in the World Wide Web: introducing 20 guidelines for usable web form design, user interfaces.” (2010).
Bargas-Avila, Javier A., et al. “Usable error message presentation in the World Wide Web: Do not show errors right away.” Interacting with Computers 19.3 (2007): 330-341.
Budiu, Raluca. Marking Required Fields in Forms. 16 June 2019,
Feinberg, Susan, and Margaret Murphy. “Applying cognitive load theory to the design of web-based instruction.” 18th Annual Conference on Computer Documentation. ipcc sigdoc 2000. Technology and Teamwork. Proceedings. IEEE Professional Communication Society International Professional Communication Conference an. IEEE, 2000.
Gupta, Abhishek, et al. “Simplifying and improving mobile based data collection.” Proceedings of the Sixth International Conference on Information and Communications Technologies and Development: Notes-Volume 2. 2013.
Gwizdka, Jacek. “Distribution of cognitive load in web search.” Journal of the American Society for Information Science and Technology 61.11 (2010): 2167-2187.
Harper, Simon, Eleni Michailidou, and Robert Stevens. “Toward a definition of visual complexity as an implicit measure of cognitive load.” ACM Transactions on Applied Perception (TAP) 6.2 (2009): 1-18.
Hollender, Nina, et al. “Integrating cognitive load theory and concepts of human–computer interaction.” Computers in human behavior 26.6 (2010): 1278-1288.
Klossek, U. M. H., J. Russell, and Anthony Dickinson. “The control of instrumental action following outcome devaluation in young children aged between 1 and 4 years.” Journal of Experimental Psychology: General 137.1 (2008): 39.
Oviatt, Sharon. “Human-centered design meets cognitive load theory: designing interfaces that help people think.” Proceedings of the 14th ACM international conference on Multimedia. 2006.
Pauwels, Stefan L., et al. “Error prevention in online forms: Use color instead of asterisks to mark required-fields.” Interacting with Computers 21.4 (2009): 257-262.
Rukzio, Enrico, et al. “Visualization of uncertainty in context aware mobile applications.” Proceedings of the 8th conference on Human-computer interaction with mobile devices and services. 2006.
Stockman, Tony, and Oussama Metatla. “The influence of screen-readers on web cognition.” Proceeding of Accessible design in the digital world conference (ADDW 2008), York, UK. 2008.
Tullis, Thomas S., and Ana Pons. “Designating required vs. optional input fields.” CHI’97 Extended Abstracts on Human Factors in Computing Systems (1997): 259-260.
Winckler, Marco, et al. “An approach and tool support for assisting users to fill-in web forms with personal information.” Proceedings of the 29th ACM international conference on Design of communication. 2011.

  1. The foremost theory splits it into three: the phonological loop (sound), the episodic buffer, and the visuospatial scratchpad, all controlled by a central executive (Baddeley & Hitch; the episodic buffer was added by Baddeley in a later revision than that cited here). 
  2. There is some dispute over what makes the best indicator; the general consensus in industry is to use asterisks to mark required fields (Budiu). Studies have shown, however, that using a background color in the field to highlight required fields performs better (Pauwels et al.), which in turn is outperformed by physically separating the required fields from the optional ones (Tullis & Pons). All, however, agree that it is preferable to mark the required fields, rather than the optional. 
  3. Non-interruptive real-time validation, say by adding error messages beneath invalid fields, works well for sighted users. Be aware, however, that screen reader software struggles with dynamically-updating pages (Stockman & Metatla); avert this accessibility problem by providing both real-time and on-demand validation, presenting errors in a modal fashion when the user attempts to submit the form with invalid data. 

“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. 

“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.