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.

Categories
Review

“Harry Potter and the Cursed Child”

J.K. Rowling, Jack Thorne, John Tiffany
I am disappointed and intrigued.
Let’s start with the disappointment: First, that JK Rowling managed to create a couple characters with truly excellent chemistry, and then aggressively refused to let it actually happen. (And here is where I say that I’m disappointed but not surprised, because she isn’t exactly the most woke about queer representation.)
Secondly, that this is such a weird development for some of the characters. What’s going on with Ron? Ron is a complex and interesting character, who the movies didn’t do justice, and got turned into something barely more than comic relief in Cursed Child.
(And here’s where I throw the spoiler warning; the play-and-book have only been out for three years, and if you’re like me, that’s not enough time to guarantee you know how it goes.)
And thirdly, that this completely breaks some of the rules the original series had established. (Though, admittedly, Fantastic Beasts did that first — apparently magic in the ‘30s was a couple of orders of magnitude more powerful? Why?) In the books, time travel had rules that made sense. Your can’t cause a paradox, because you’ve already time traveled. Here, though, suddenly we care about the grandfather paradox?
And yet, I’m still intrigued. Because Albus and Scorpius are fun together. Because it’s another look into the magical world that was the shared childhood of my generation. Because it’s written as a play, and I cannot fathom how they would stage some of this.
It’s an alright read, doesn’t take too long, so if you’re at all interested, give it a go. And if you’ve got a chance to see the actual play… that’s probably worth the time, just to see the staging.

Categories
Review

“Creative Confidence”

Tom Kelley, David Kelley
There something about this genre of book that just doesn’t sit right with me.1 I appreciate the points that they’re making, but it always feels like 80% of the book is one big humblebrag about all the people the author has worked with. How many big-name companies can we name-drop? Why yes, I have worked with Proctor & Gamble, how ever did you notice?
I suppose part of it is that they’re trying to establish why you should listen to them, and demonstrate that the ideas are good, which is a valid thing to do. In execution, though, it always feels excessive. Like a good editor could cut at least half of the book away without actually losing anything of use, but opted not to because the result would be too short and necessitate a lower price.
All of which is to say, this is definitely one of those business/self-help books, and it could be edited down into a pamphlet if you really wanted. But it was still interesting to read—the ideas are good. It’s almost like running one of the most famous design firms in the world and teaching at one of the most prestigious schools of design actually means something! Give it a read, if you’re interested. (And no, being creative isn’t a prerequisite—that’s one of the key points of the book. Spoilers.)


  1. In this case, I think “this genre of book” means “if you told me they gave a TED Talk espousing these ideas, I would be utterly unsurprised.” 
Categories
Music

Permanence Objects

A while back, I went to a concert given by a friend of mine. It was her capstone presentation, a sort of thesis-equivalent for music majors. That sort of presentation is something I have some experience with, and so I’m pretty comfortable saying that Sabine knocked it out of the park with hers.

One aspect that I liked, especially compared to my blogging-it-after-the-fact style, was that she built the whole thing around a multimedia web experience. Every piece had, at very least, a page on the site with lyrics; one had a multi-page version that felt like a high-budget lyric video.

I’m going to continue to encourage her to put her music on the various paid streaming services so she can get at least a little bit of money from people listening to it, but in the meantime, please do check out her site, it is… an experience.

Categories
Playlist

Playlist of the Month: April 2020

Remember back when time was a meaningful concept?
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
Hard Lines, Hard Times – William Wild on Hard Lines, Hard Times – Single
everything i wanted – Billie Eilish on everything i wanted – 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
Borders – Nathan Ball on Borders – Single
Lies (feat. H. Kenneth) – Syence on Lies (feat. H. Kenneth) – Single
Blinding Lights – The Weeknd on Blinding Lights – Single
Magic in the Hamptons (feat. Lil Yachty) – Social House on Magic in the Hamptons (feat. Lil Yachty) – 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
The Box – Roddy Ricch on Please Excuse Me For Being Antisocial
Falling (blackbear Remix) – Trevor Daniel & blackbear on Falling (blackbear Remix) – Single
Somewhere (feat. Octavian) – The Blaze on Somewhere (feat. Octavian) – Single
Slowly – ODIE on Slowly – Single
Lie – Jake Scott on Year of the Sunflower
ROXANNE – Arizona Zervas on ROXANNE – Single
All My Life – William Wild on Rental House / All My Life – Single
Pines – ferdinant. on Pines – Single
New Shapes (feat. Octavian) – Diplo on Europa – EP
Prayers to the Trap God – Roddy Ricch on Please Excuse Me For Being Antisocial
Four in the Morning – Harry Strange on Four in the Morning – Single
Girls – Balcony on Girls – Single
not ur friend – Jeremy Zucker on not ur friend – Single
Light Again – bobbycrush on Light Again – Single
Baby Girl – Bryce Vine on Baby Girl – Single
Numb – Elderbrook on Numb – Single
Tongue In the Bag – XYLØ on The Ganglands of My Heart – EP
Faith – The Weeknd on After Hours
Hardest To Love – The Weeknd on After Hours
After Hours – The Weeknd on After Hours
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 – Single1
Stars (feat. PRIDES) – ARCADES on Stars (feat. PRIDES) – Single
Walk Away – Eskei83 & H. Kenneth on Walk Away – Single
Too Late – The Weeknd on After Hours
I Can’t Help (with Sarcastic Sounds) – Shoffy on Flash
Snowchild – The Weeknd on After Hours
Peanut Butter Waffles – Ryan Caraveo on Peanut Butter Waffles – Single
Water Fountain – Alec Benjamin on Narrated for You
Not Like Falling Out of Love – Nick Wilson on Not Like Falling Out of Love – Single
scorton’s creek – Isaac Dunbar on scorton’s creek – Single2
Mean It – Lauv & LANY on ~how i’m feeling~
Redemption Song – Mahmood on Redemption Song – Single
Tati – Gavin Haley & Yung Pinch on Tati – Single
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
Marionette (feat. Carl Brave) – Random on Marionette (feat. Carl Brave) – Single
crowded room – Christian French on crowded room – Single
Missed You (Bonus Track) – The Weeknd on After Hours (Deluxe)
makeup drawer – Isaac Dunbar on Makeup Drawer – Single
K. – Reece on K. – Single3
After All – Miles Hardt on After All – Single
What Could Be as Lonely as Love (Unplugged) – Amber Run on What Could Be as Lonely as Love (Unplugged) – Single
Lonely Star – Oh Wonder on Lonely Star – Single
Devil On My Back – ferdinant. on Devil On My Back – Single
I miss you, I’m sorry – Gracie Abrams on I miss you, I’m sorry – Single
Pages (feat. Rory Hope) – JacobNeverhill on Pages (feat. Rory Hope) – Single
Learning to Live Again – DANIEL SAINT BLACK on Daniel Saint Black – EP
Young And Beautiful – Glass Animals on Young And Beautiful (Quarantine Covers Ep. 2)
Church – Charles Fauna on Yonder4
Been Thru This Before (feat. Giggs, SAINt JHN) – Marshmello, Southside, Giggs & SAINt JHN on Been Thru This Before (feat. Giggs, SAINt JHN) – Single
Bed (Live from Nest Recorders) – SYML on Live from Nest Recorders – Single
I Love You Always Forever – Donna Lewis on Now In a Minute
Heavy – Haux on Violence in a Quiet Mind5
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
Magic – Coldplay on Ghost Stories
Shadow and a Dancer – The Fray on Helios
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 – Single6


  1. Warning: the chorus is likely to get caught in your head. 
  2. This is a rare one in that it made it onto my monthly playlist and one of my specific-mood playlists at the same time. 
  3. This song was nice and hard to find. The iTunes search algorithm hasn’t improved at all, and also kept crashing when I was trying to look things up. Helpful. 
  4. This is probably my #1 recommendation from this list. Listen to the whole album, actually, it’s quite good. (And the intro song feels intensely like the beginning of a ride at Disneyworld.) 
  5. I am extremely excited for this album. 
  6. New Haux and new Woodkid? It’s a good month for music. 
Categories
Portfolio

Personalization

Based on a reading from User Friendly.

Personalization. 1. Users are people, treat them like it. 2. Don't be creepy. 3. Be polite. Respect social norms. 4. Anticipate their needs.
Categories
App

Fluidics 2.0

At long last, I am quite happy to share that Fluidics 2.0 is now available on the App Store. If you’d like to see the full feature list, check out the release post over on the new Fluidics website; this is going to be more of a ‘making of’ sort of post.

So, what’s new in Fluidics 2.0 that warrants it being Two Point Oh?

To start with, I rewrote it from the ground up. Which is widely considered to be a bad idea, but I stand by the decision. I built Fluidics as a project in undergrad; while that wasn’t all that long ago, I’ve learned a great deal since then.

And beyond that, the iOS world has changed. Fluidics 1.0 was built on storyboards and imperative programming; Fluidics 2.0 is entirely SwiftUI. (The only storyboards present are in the widgets, which… cannot be built without storyboards. Maybe in SwiftUI 2.0?)

And while I wanted the core of the application to stay the same – I love the visual of the screen filling up, and the way the colors transition from the ‘above water’ to ‘under water’ areas never fails to make me smile – I also wanted some of the more idiosyncratic stuff to… fit in better.

Screenshots showing the new Settings and Quick Add screens, which match the iOS design language.

That iOS-y Feeling

Gone are the cards.

Settings is now a full-screen experience, and that extra room to breathe makes for a lot easier navigation.

For the Quick Add, I went with the new style of cards in iOS 13, which are just as easy to dismiss thanks to the universal swipe-down gesture, and have fewer… weird bugs.

One of the key ideas of the design program I’m doing right now is that “you are not your user.”

Which, in this case, meant I had to buckle down and accept what my actual users kept telling me. Cool as I think it is to swipe from screen to screen, other people mostly just found it confusing. Tabs? Tabs are standard for apps, which makes them easy to understand; they’re also very well-integrated with VoiceOver, which is something the swiping always struggled with.

Dark Mode

SwiftUI also comes with effectively free Dark Mode support. Most of the actual work, for me, was in finding slight variations on the colors that looked as good in Dark Mode as the originals did in Light Mode. (Day Mode?)

Finally, this new version of Fluidics is something like a tenth the size-on-disk of the previous. This comes from a few places: some actual clean-up work I did helped, but the biggest gains were from updating to the latest version of Swift; that means that, instead of including Swift itself in the app, I can just use the system-level one. So it’s iOS’ problem to keep track of that whopping couple of megabytes of code, and not Fluidics’. Nice.

Similarly, switching to iOS-standard cards instead of the custom ones saves some room. While I was working on dependencies, I switched from a weird, all-local, very-unstable implementation of StoreKit to RevenueCat, which is much easier to work with and saved me a great deal of tearing out my hair.

The final big change was a bit of a side project itself: a new website for Fluidics. The old one was… fine, I suppose. It gave me a chance to try out static site generation with Jenkins (on GitHub Pages), but… hand-coding HTML and CSS, while something I can do, isn’t something I really enjoy doing.

Screenshot of the new Fluidics website, fluidics.app

WordPress

In the interim, however, WordPress has had some excellent updates, the Twenty Twenty theme is easy enough to tweak, and Gutenberg with some plugins makes for a very good editing experience, so here we go.

The new site looks better, and makes it a lot easier for me to do things like, say, having a blog where I can do visually-interesting update notes for each release.

Categories
Playlist Portfolio Travel

Data Visualization

A quick post of a class assignment we did a while back – tinkering with data visualization. I went with my travels and my playlists as the data sources.

(Obviously it’s low-resolution data, for the most part, but you try showing more granular data on a map of the world.)
This was compiled through a lot of tinkering in Numbers. I’d try to write a script to do it, but given that I am, presumably, the only person on the planet who could actually make use of it, I’m going to not.
Categories
Portfolio

Uninvited Redesign: Blink

It’s been interesting to watch electric vehicles grow in popularity, a trend that I expect to continue unless someone decides to pour marketing money on hydrogen. That said, aside from Tesla’s Supercharger network, EVs are seriously lacking an answer to the refueling infrastructure of gasoline vehicles.

I’ve tried a couple of the different commercial offerings, and have so far found them all to be a horrible user experience. (Current winner? The charging stations at the public library, which were installed recently enough that they haven’t been activated. There’s no sign to indicate that, no information on the stations’ display screens, and if you call their support to ask “what’s the deal?” they’ll tell you that “those stations were decommissioned.”)

Blink is, at least in my area, the most robust charging network, and thus is the only one whose app I’ve bothered to try. And it is… not great.

So, continuing on in the proud Design Student tradition of uninvited redesigns, here’s my takedown and redesign of Blink’s app. (And hey, if someone from Blink is reading this – send me an email, I’d be happy to flesh this out a bit more. Or write some of the code.)

Also available as a PDF, if that’s your jam:

Categories
Playlist

Playlist of the Month: March 2020

These playlists have been getting longer over time. Eventually I’m going to wind up just posting a list of every song in my library.1
Cologne – Haux on Something to Remember – EP
Sober – Edwin Raphael on Sober – Single
Coincidental – Betcha on Coincidental – 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
Haunted – Saint Claire on Haunted – Single
On Our Last Day – Hayden Calnin on A Life You Would Choose – EP
Hard Lines, Hard Times – William Wild on Hard Lines, Hard Times – Single
Without Fear – Dermot Kennedy on Without Fear
everything i wanted – Billie Eilish on everything i wanted – Single
Dolly Zoom – Elliot Moss on Boomerang
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
Borders – Nathan Ball on Borders – Single
Eight – Haux & Rosie Carney on Eight – Single
Chanel – Frank Ocean on Chanel – Single
notice me (feat. BENEE) – ROLE MODEL on oh, how perfect – EP
Take Me Apart – SYML on Take Me Apart – Single
Apollo – Charles Fauna on Yonder
Lies (feat. H. Kenneth) – Syence on Lies (feat. H. Kenneth) – Single
Blinding Lights – The Weeknd on Blinding Lights – Single
Rapide – Mahmood on Rapide – Single
Circles – Post Malone on Hollywood’s Bleeding
Wherever You Are – Kodaline on Wherever You Are – Single
Middle of the Night – Elley Duhé on MIDDLE of the NIGHT – Single
Soil’s Daughter – Aisha Badru on Soil’s Daughter – Single
Higher – Byron Langley on Light On – EP
Magic in the Hamptons (feat. Lil Yachty) – Social House on Magic in the Hamptons (feat. Lil Yachty) – Single
Tremors – SOHN on Tremors
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
twenty four seven (feat. John McDonald) – Andy H on twenty four seven (feat. John McDonald) – Single
The Box – Roddy Ricch on Please Excuse Me For Being Antisocial
Falling (blackbear Remix) – Trevor Daniel & blackbear on Falling (blackbear Remix) – Single
Somewhere (feat. Octavian) – The Blaze on Somewhere (feat. Octavian) – Single
Slowly – ODIE on Slowly – Single
hertz – EDEN on no future
Lie – Jake Scott on Lie2
Love Me (feat. Haux) – Smeyeul. & Galvanic on Love Me (feat. Haux) – Single
Better Off Without You – Aquilo on Painting Pictures of a War – EP
Where There Is Love, There’s Hope – Aron Wright on Where There Is Love, There’s Hope – Single
The Night We Met – Alle Farben on The Night We Met – Single
ROXANNE – Arizona Zervas on ROXANNE – Single
All My Life – William Wild on Rental House / All My Life – Single
2020 – Great Good Fine Ok on 2020 – Single3
Hurts Like Hell – Wrabel on Hurts Like Hell – Single
Be Slow – Harrison Storm on Be Slow – Single
no one wants to dance anymore (feat. Yung Pinch) – johan lenox on cancel the party
Losing You – Aquilo on Painting Pictures of a War – EP
Sorry – Declan J Donovan on Sorry – Single
Pines – ferdinant. on Pines – Single4
Never Seen You Get So Low – Aquilo on Painting Pictures of a War – EP
New Shapes (feat. Octavian) – Diplo on Europa – EP
White Morning – Seoul on I Become A Shade
Out the Other Side – Future Thieves on Emotional Cost
Roll Dice – Roddy Ricch on Please Excuse Me For Being Antisocial
Hue – SOHN on Hue / Nil – Single
Prayers to the Trap God – Roddy Ricch on Please Excuse Me For Being Antisocial
Waiting – Aquilo on Painting Pictures of a War – EP
Someone to Watch Over Me – Col3trane on Someone to Watch Over Me – Single
Dogcatcher – Elliot Moss on A Change in Diet5
Father Daughter Dance – Kesha on High Road
Stubborn – Daniel Allan & Jake Neumar on Stubborn – Single
No Time To Die – Billie Eilish on No Time To Die – Single6
Human – Aquilo on Painting Pictures of a War – EP
Wash Away the Wild – KAWALA on KAWALA – EP
Love Me Wrong – Allie X & Troye Sivan on Cape God
Sober – Aquilo on Sober – Single7
me & ur ghost – blackbear on me & ur ghost – Single
Slow Ride (feat. H. Kenneth) – Nick Martin & H. Kenneth on Slow Ride (feat. H. Kenneth) – Single
Explain You – JP Saxe on Hold It Together – EP
Four in the Morning – Harry Strange on Four in the Morning – Single
Make It Easy on You – Aron Wright on Make It Easy on You – Single
Girls – Balcony on Girls – Single8
not ur friend – Jeremy Zucker on not ur friend – Single9
No Alibi – Benji Lewis on Here, Then and Now – EP
Light Again – bobbycrush on Light Again – Single
Baby Girl – Bryce Vine on Baby Girl – Single
Numb – Elderbrook on Numb – Single
Tongue In the Bag – XYLØ on The Ganglands of My Heart – EP
2020 – EDEN on no future
Faith – The Weeknd on After Hours
Hardest To Love – The Weeknd on After Hours10
Where Do We Go When We Die – Quinn Lewis on Where Do We Go When We Die – Single
After Hours – The Weeknd on After Hours
Morning Prayers – Steve Benjamins on Morning Prayers – Single11
bad guy – Billie Eilish on WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?
when the party’s over – Billie Eilish on WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?
bury a friend – Billie Eilish on WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?
Oh My My – Blue October on Oh My My – Single
In Your Eyes – The Weeknd on After Hours (Deluxe)


  1. Which, thinking about it, would require only a very small modification to my playlist script… 
  2. Scene: someone asking me what my taste in music is. “Sad hipsters crooning into microphones,” I reply. 
  3. By the end of the year I’m expecting at least one song named 2020 that’s just four straight minutes of swearing. There’s no backing harmonies, but the rhythm section will be awesome
  4. Excellent for signing along to – the main riff is very catchy. 
  5. I believe I’ve finally listened to this entire album, so it’s time to start hoping he’s got a new one coming out sometime soon. 
  6. It took me rather embarrassingly long to realize “wow, this song sounds like a James Bond intro song” and “hey it’s got the same name as the new James Bond movie” were both really obvious clues that this is the new James Bond intro song. 
  7. I only have two songs named ‘Sober’ in this list, but it feels like more, for some reason. 
  8. This song has hilariously chaotic energy; the music video is weird, as well. 
  9. “Sit down/if you need someone to lean on” is such a powerful line, I love it. 
  10. This whole album is very good, and very ‘80s. 
  11. I’m still not quite sure what the lyrics here are, but I’ve been hearing them as “sycophant blessings.” 
Categories
Portfolio

Dark Patterns

Dark Patterns are tricks used in websites and apps that make you do things that you didn’t mean to, like buying or signing up for something.

Dark Patterns

For a recent class assignment, we had to choose three dark patterns, find a site or service using each one, and then propose an alternative version that didn’t use that dark pattern.

You may notice that I’ve actually done four here – the last one was an interesting variant on some of the example dark patterns, and I wanted to explore that a bit.

You can also download a PDF of the presentation – it will work better in screen readers:

Categories
Programming Tools

Playlister

In the past couple months, I’ve had an ongoing series on converting iTunes playlists to text files, with a brief digression into scripting with Swift. While I doubt that I’m entirely done with the topic, I have reached a point where I’m ready enough to do another write-up.
This morning, I made playlister available to the public. It is not a consumer-facing application like my others; it is very much a tool for people who are comfortable with the command line.
In between the previous iteration of this tool and the current, I actually had a version of playlister built and shareable (Chase has that version installed on his Mac, actually) but, before releasing it to the public, I looked at the code and thought “I can do better.”1
So I buckled down and spent some time indulging in my love for API design, and tried some tricks I’ve been wanting to try.
The rewritten version ships with a library, LibPlaylister, that provides the basic ideas — protocols that allow for interacting with the library, playlists, and tracks; conversion to Markdown — as well as some neat new tricks. There’s some hooks for customization, such as the RatingFormatter protocol, and included FiveStarRatingFormatter, and the new LinkStore protocol, which provides a layer of abstraction on the SQLite-based caching of links.2
It was also an excuse to add to my Swift toolbox. I worked with SwiftCLI for a while, and then converted to ArgumentParser when that was released. I’ve done file interactions, and a lightweight database. I’ve learned a lot about Swift Package Manager.3 I learned a bit about XCTest, and figured out how to get it working in GitHub Actions. (And, more interestingly, figured out how to conditionally include frameworks in an SPM package. I wanted the tests running on Linux, but Linux… doesn’t have the iTunesLibrary framework, shockingly.)
I had fun building this, and will probably continue to tweak it. (I mean, it could be fun to get it automatically pulling links from the iTunes Search API, and just asking ‘is this the right link?’ instead of requiring manual entry.4)
For now, though, it’s ready enough to share, and made for a fun write-up and a good way to de-stress by tinkering.


  1. Interesting aside from giving that to Chase: Did you know that macOS has a ‘quarantine’ flag it puts on executables sent via AirDrop? That was some fun googling to figure out. The solution: xattr -d com.apple.quarantine ./playlister 
  2. That caching is definitely the biggest productivity gain of this, as compared to the previous version — now, when I go to write up my monthly playlist, the whole first part of the playlist doesn’t require any interaction at all. 
  3. Coming from working with nom’s package.json format at work, SPM Package.swift files are nice. Like, you can have comments in them! And, more, you can have actual code, so you can do neat stuff like this
  4. Although, at that point, I’d probably wind up writing it up as a SwiftUI app so I can show images. Which… might have been part of the inspiration for making LibPlaylister a separate library.