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

Bibliography

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, www.nngroup.com/articles/required-fields/.
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. 
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
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
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
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
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.