Categories
Playlist

Playlist of the Month: December 2019

Time for the Roaring Twenties, round two.
Silhouette by Aquilo on Silhouettes
Cologne by Haux on Something to Remember – EP
Sober by Edwin Raphael on Sober – Single
Coincidental by Betcha on Coincidental – Single
Connor by SYML on SYML
Antidote by Mr Hudson on ANTIDOTE – Single
Falling Down by Harrison Storm on Falling Down – Single
Angel by H. Kenneth on Angel – Single
F**k Collingwood by Hayden Calnin on F**k Collingwood – Single
Hey, Ma by Bon Iver on Hey, Ma – Single
Haunted by Saint Claire on Haunted – Single
Crying at the Party by Harry Strange on Crying at the Party – EP
Something About You by Elderbrook & Rudimental on Something About You – Single
Cars at Night by By The Coast on Cars at Night – Single
Barrio by Mahmood on Barrio – Single
On Our Last Day by Hayden Calnin on A Life You Would Choose – EP
Tonight – Thorin Loeks on Tonight – Single
I’ll Get You Home by By The Coast on I’ll Get You Home / World to Ourselves – Single
Beyond the View by Chance Peña on Beyond the View – Single
Cover Your Eyes by Black Match on Cover Your Eyes – Single
sex by EDEN on i think you think too much of me
Hard Lines, Hard Times by William Wild on Hard Lines, Hard Times – Single
Tourner dans le vide (Slowed) by Unge Moped & Tuber on Tourner dans le vide : Man slowed down – Single
Chiasso – Random on Chiasso – Single
Without Fear – Dermot Kennedy on Without Fear
Giving in to You – Freddie Future on Freddie Future
Ride It – Regard on Ride It – Single1
Hollow Coves – Firewoodisland on Hollow Coves – Single
On the Other Side – Blanco White on On the Other Side – Single
Edge of the Ocean – By The Coast on You
Neptune – Sleeping At Last on Atlas: Space 2 – EP
Hanging On – Quinn Lewis on Hanging On – Single
909 – EDEN on 909 – Single
Soldi – Mahmood on Gioventù bruciata
Drive – OTR & Panama on Drive – Single
untitled – EDEN on untitled – Single
everything i wanted – Billie Eilish on everything i wanted – Single
More Than Friends – Andrey Azizov & Panama on More Than Friends – Single
You & I – Harrison Storm on You & I – Single
anxiety & mixed emotions – Chance Peña on anxiety & mixed emotions – EP
It Gets Better – Rex Orange County on Pony
Symmetry – SYML on Symmetry – Single
Dolly Zoom – Elliot Moss on Boomerang2
Closedloop – Elliot Moss on Boomerang
Everything Changes – Phillip LaRue on Fall-In – Single
Don’t Take the Money – Harry Strange on Don’t Take the Money – Single
On Melancholy Hill – Riley Pearce on On Melancholy Hill – Single
Push My Luck – The Chainsmokers on Push My Luck – Single
20 Something – Alexander 23 on I’m Sorry I Love You
Hope – Balcony on Hope – Single
Blue Tide Eyes – FLØRE on Blue Tide Eyes – Single
Bravado – Yoke Lore on Bravado / Body Parts – Single
Tightrope – Danny Bowens on Tightrope – Single
When I Need a Friend – Coldplay on Everyday Life3
How Long Can I Keep Waiting – Imaginary Future on How Long Can I Keep Waiting – Single
Pronto Llegará – C. Tangana & Darell on Pronto Llegará – Single
This is Where it Ends – Richard Walters on This is Where it Ends – Single4
Back Around – Harry Strange on Back Around – Single
Dead Ringer – Yoke Lore on Dead Ringer – Single
Monsters – Lucy Daydream on Monsters – Single
I Will Love You for Good – A Year on Earth on I Will Love You for Good – Single
Disarray – Low on Double Negative5
Borders – Nathan Ball on Borders – Single
Roses (feat. ROZES) – The Chainsmokers on Bouquet – EP
Silver + Gold – Elliot Moss on A Change in Diet
Eight – Haux & Rosie Carney on Eight – Single
Need You – Kidswaste on Need You – Single
Raising Hell (feat. Big Freedia) – Kesha on High Road6
Orphans – Coldplay on Everyday Life
Christmas Lights – Joel Adams on Christmas Lights – Single
Daddy – Coldplay on Everyday Life
Chanel – Frank Ocean on Chanel – Single
The Village – Wrabel on The Village – Single7
Movements – Mild Minds on Movements – Single
I Don’t Wanna Die – Betcha on Falling – EP
Swing – Sofi Tukker on Swing – Single8
Ghost – JacobNeverhill on Ghost – Single
Blind – INTET on Blind – Single
Hard Times (Acoustic) – RITUAL & Robinson on Hard Times (Acoustic) – Single
Èkó – Coldplay on Everyday Life
Million Pieces (feat. The Chamber Orchestra of London) – Bastille on Doom Days (This Got Out of Hand Edition)9
What Kind of Love Is Like That – William Fitzsimmons on What Kind of Love Is Like That – Single
Young Minds – Saavan on Observatory – EP
Down – Griffin Stoller on Down – Single
notice me (feat. BENEE) – ROLE MODEL on oh, how perfect – EP
Lucky Me (feat. Great Good Fine Ok) – The Knocks on Summer Series: 2019 – EP
Take Me Apart – SYML on Take Me Apart – Single10
New Day – Benji Lewis on New Day – Single
Apollo – Charles Fauna on Apollo – Single11


  1. This is now in the “heard it on the radio at the gym and was surprised” category. 
  2. Elliot Moss might be my favorite artist I’ve found this year. 
  3. I was very into Coldplay at the same time that I first joined choir, so this hit hard. 
  4. This one’s fun for half-listening to the lyrics and trying to come up with a story behind them. 
  5. Courtesy of Do By Friday, and I highly recommend listening to this on some good speakers with the volume up, it’s a downright tactile experience. 
  6. Kesha is great and I’m excited for this full album. 
  7. “One page of the Bible isn’t worth a life” 
  8. This has some, like… videogame vibes in the opening. 
  9. Very catchy, and fun to sing along to. I keep getting it stuck in my head in the wrong key, though. 
  10. New SYML is always a good thing. 
  11. This hasn’t been on the list for long, but I’m really digging it so far. Combined well in my head with finishing up the first season of For All Mankind
Categories
Review

“The One Device,” or, “I’m amazed this man didn’t get arrested”

Brian Merchant
It’s rather fitting that I’m writing this review on my iPhone. Parts of the book were written on an iPhone, I suspect, and the author mentioned that a good deal of the interview recordings and photos were made on his iPhone.
Structurally, the book is interesting — there are two through lines, and they’ve got the same writing style but different feels. The more story-like one is the historical aspect, going from the beginning of the project through to the keynote where Steve Jobs introduced the world to the iPhone. And it’s a story, for sure: there’s a narrative to it, characters being introduced, politics and inventions, failures and triumphs. It’s the best telling of the story I’ve read so far, though admittedly I don’t think I’ve actually sat down to read the full story before.1
The other part is more of the ‘now’ aspect, which explores the impact of the iPhone as a product, focusing on the manufacturing process. The author tells how he… made his way into the Foxconn plant where iPhones are assembled; predictably gets hacked immediately after arriving at a hacker convention; goes on a claustrophobic tour of a tin mine; under-details an agoraphobic tour of the salt flats that produce most of the lithium used in the iPhone’s battery; and a few other stops along the way.
All told, it’s an interesting read. Some of the historical context was new to me—the history of ARM was inspiring, for example—and while I already knew a lot of things—photos of those lithium flats are pretty striking—I’m glad I took the time to read it. If you’re at all interested in the history, I can recommend the book.


  1. Creative Selection is on my list to read, so I’ll get there eventually. 
Categories
Technology

State of the Apps 2019

Inspired by CGP Grey’s post that started a Cortex tradition, here’s the current state of my phone:

This is… a work in progress. I got this phone in September, and while it’s been on my mind to do a full reorganization, I haven’t had time to do a full “tear it all down and start from scratch” process. The top two rows, especially, are very temporary — for the first time since iOS 7 came out, I’ve disabled Reduce Motion, and the parallax makes the fake invisible icons trick look terrible.
So rather than go through things in top-to-bottom, right-to-left order, I’m just going to talk about them in whatever order strikes my fancy.

  • Things remains my task management app of choice. I love it across all platforms, and happily recommend it to anyone who’s looking for something more robust than Reminders or a list in Notes. For me, it strikes the right balance of features without getting too heavy, and while I’ve got one or two things I’d like to see added, I have no great complaints.1
  • FoodNoms has been a very nice addition – it replaced Calory, which had replaced MyFitnessPal, which had replaced Lose It!. I’ve got a long history of tracking food, and while I quite liked Calory, FoodNoms is the first time I’ve gone “ah, never mind, don’t need this” and tossed out my notes on how I would build a food-tracking app. I haven’t yet gone for the subscription, because it just doesn’t have any features that interest me, but based on the rate of development, I’m expecting to make that change within the next few months.’
  • Timery is another stellar addition. It’s in that same category as FoodNoms — I had some sketches started of how I’d make an app in this category, and Timery made them completely irrelevant. The last two updates have added some truly excellent Shortcuts integrations — the last one added conversational shortcuts, so I can now just say “Hey Siri, Toggl” and talk through starting a timer with a specific project and description, or kick off a few frequently-used ones with a short phrase. The newest updated added some more programmatic stuff, and I’m planning to take some time over Christmas weekend to rebuild my old Toggl shortcuts, based on Federico Viticci’s examples, with Timery instead of custom web API calls.
  • Toolbox Pro – speaking of Shortcuts, Toolbox Pro is a neat little collection of Shortcuts actions. I’m most excited about the Variables feature, which I’m hoping I can use to improve some of my daily automation stuff.
  • Mail has replaced Airmail. I’d been vaguely looking for a replacement for Airmail, because it had a nasty habit of crashing all the time, and then they did a terrible job of switching to a new business model, and I threw my hands up in the air and decided to try the system default. It’s been working perfectly on iOS; on macOS, I’ve got a cobbled-together system using BetterTouchTool that sorta gives it real keyboard shortcuts,2 and a launchd script that relaunches it when it crashes.3
  • Day One remains my stalwart for journaling, but I’ve been slowly increasing the things I use it for. It’s my archive of Instagram, where I store my sketches, and the app I used to record some interviews I did for class.4
  • Ulysses is where I’m writing this article! It’s still my go-to for any long-form writing, and I love it. I haven’t yet made much use of their recent ability to store Ulysses files in Dropbox (or other arbitrary locations on disk), but I do have a collection of plain-old-markdown files that I edit in Ulysses on my Mac and Sublime Text on Windows.5
  • Reeder is a continuation and an addition all at once — I’ve been using it on my Mac for a while, but didn’t have it on iOS. I hit the maximum number of feeds on the free level of Feedly, and was extremely unimpressed with their paid offerings; I considered making a second account to keep syncing, but decided that was sorta rude to them, and instead opted to not have sync at all. That worked for a while, and then I got a Synology, and after setting it up as a Plex server, spent some time looking into RSS server options. At the moment, I’m using TT-RSS with a plugin for Fever support, but if anyone knows of something that’s easy to set up and has Google Reader API support, I’d appreciate it.6
  • Dark Sky’s recent redesign has me pretty happy. If they let me reorder the types of information, I’d be happier, but the clarity of the “when is it going to rain” charts is still excellent.
  • Overcast remains my podcast app of choice. Podcasts have been a great way to help me establish a gym habit — I established a podcast habit, and then decided that podcasts are things I can only listen to while driving, cleaning, or working out. (If you want podcast recommendations: Cortex, Do By Friday, ATP, 99PI, and MBMBAM are my mainstays.)
  • Strong, speaking of a gym habit, is the driving force of my time at the gym. A couple of my friends have been helping me out with designing actual workout programs to do, but Strong is where I put those in. It’s easy to use, remembers all the numbers so I don’t have to, and has instructions, often accompanied by images or GIFs, on a lot of exercises.
  • Streaks is where I track all my habits, from “did you remember to take your meds” to “do some writing for your blog” to “have you gone to the gym enough times this week?” It’s very good at what it does, and I’m still a fan.
  • Fluidics is a bit self-serving to include here, but I use it all the time. I’m planning to update it eventually — I’d like proper Dark Mode support, at the very least — but it’s hard to find the time.
  • Wallet has gotten more and more important over time, though not as fast as I’d like it to. Let me put my driver’s license in there, already. Apple Card is slowly taking over as my main credit card, Apple Cash is even more handy with the cash back in there, and it’s not too hard to make your own pass of your gym membership.
  • Sleep Cycle is possibly on it’s way out; I’m strongly considering getting a beddit, although I need to do more research — does it have the ‘smart alarm’ feature? How accurate is it? Is Apple going to kill the app soon? Lots of questions.
  • Dark Noise is a new addition in the past few days; I’ve been switching from a ‘sleep’ playlist to white noise in an effort to get Apple Music’s recommendations to not be entirely useless.7 I tried to use Sleep Cycle’s white noise feature for a while, but it assumes that I want the white noise to stop after a while, which is absolutely not the case. Dark Noise’s actual noise is a bit less interesting overall, which is possibly the point, and the app itself is delightfully well-made.

  1. I was, admittedly, tempted by OmniFocus, because OmniFocus for Web means I could have a single unified system across my Mac, iOS devices, and work PC, but it’s still just too much for my needs. And expensive. 
  2. Listen, Apple: you can either comp me the cost of getting a new keyboard that’s got the Inverted T arrangement for the arrow keys, or you can let me go from message to message using j/k. (And even if they did give me a free keyboard, I’d still complain; I’ve been using j/k to get around for two decades now, and it’s just easier.) 
  3. And on Windows, both Outlook and Windows Mail crash frequently, too; apparently IMAP, despite being 30-something-years-old, is still an unsolved problem? 
  4. In typing this, I’ve just realized that I think I’m using Day One the way Evernote wants to be used. Huh. 
  5. All synced by Git, because… why not? 
  6. The Fever API neglected any form of subscription management, and needing to pull up the TT-RSS frontend in a web browser whenever I want to add or remove a subscription just feels silly. 
  7. Fun fact: the “use listening history” setting that all Apple Music clients have? Doesn’t appear to do anything. Neither does “stop recommending music like this.” 
Categories
Programming

SwiftUI’s Picker

I’m very excited about SwiftUI, and have been using what little free time I have to do some tinkering with it. I started during the beta period, which was fun in between being very frustrating; a lovely side effect was that some of the knowledge I picked up is… entirely wrong. One that caught me was the implementation details for the Picker type.
Based on the rather rough state of the SwiftUI documentation for Picker and ForEach,1 I’d assumed that combining the right binding with a .tag(_:) on the items would work:

Form {
    Picker(selection: $selectedItemID, label: Text("Choose Something") {
        ForEach(items){
            Text($0.label).tag($0.value)
        }
    }
    Text("You've selected item \(selectedItemID)!")
}

For reference, the models I’m referring to throughout are pretty simple:

struct CustomModel {
    let value: Int
    let label: String
}

Now this looks like it’s working in simple cases. However, I was trying to interact with a web API, so that items array looked something like this:

var items: CustomModel[] = [
    CustomModel(value: 7, label: "First"),
    CustomModel(value: 3, label: "Second"),
    CustomModel(value: 1, label: "Third")
]

If you tapped “Second” in the picker that SwiftUI generated, however, the text wouldn’t read “You’ve selected item 3!” like it should; it would be “You’ve selected item 1!”
A bit more tinkering revealed that, instead of pulling the value from the .tag(_:) on there, it was just using… the index in the ForEach.2
After some frustrated Googling, utterly despairing of Apple’s documentation, and a lot of StackOverflow searches, I finally figured out the solution:

Form {
    Picker(selection: $selectedItemID, label: Text("Choose Something") {
        ForEach(items, id: \.value){
            Text($0.label).tag($0.value)
        }
    }
    Text("You've selected item \(selectedItemID)!")
}

Quite frankly, I don’t have a good explanation of what’s going on here; last time I was tinkering with Pickers, the .tag(_:) provided SwiftUI with the information it needed to do the binding. (When I’ve got more time, I’d like to do another test — now that I’ve got the id keypath, do I even need the tag?)
I’d love a good explanation of what all the id keypath gets used for, and where else it might be necessary, but alas:


  1. It’s a bit unfair for me to link to No Overview Available when referring to SwiftUI; the coverage is low, but the problem isn’t so much that as the fact that ‘documentation coverage’ just doesn’t work as a metric for something like SwiftUI. The tutorials are a start, and a good sign that Apple was at least trying to rethink their approach to documentation, but they’re not nearly complete enough. 
  2. Zero-based index, of course, which seemed obvious to me, but got me a “???” response when I was complaining about this issue to a non-programmer friend. 
Categories
Portfolio

Uninvited Redesign: Calibre

As a recent assignment for one of my design classes, we were told to find a website whose design we didn’t like, build a moodboard for a new version of the site, and then create a high-fidelity prototype of the new version of the page we’d called out.

For my uninvited redesign, I selected Calibre’s homepage; I love what Calibre stands for, but I haven’t used it in years, because… well, I’ll just drop in my analysis portion here:

It could use some love, is the short form of it. (After I built that and submitted, I realized I’d forgotten to turn off my content blockers for the screenshot; the unaltered version of the site looks the same, but also features ads along the side, which explains that awkward hanging line in the latter screenshot.)

Next up, build a mood board. This was pretty fun to do – I basically just wandered around, not only the internet, but a nearby library, and my own bookshelves, looking for inspiration. Here’s the result:

I couldn’t not pick Baskerville, c’mon.

The final part of the assignment was to put together our own redesign, using what we’d put together in the mood board. I almost sat down with Sublime and coded it in HTML, because that’s what I do in my day job, and it’d be easy, but made myself use Sketch instead – what better way to learn than by practicing?

That’s the end, right?

Well, no, if you looked at the featured image on this post, you already know I did a bit more. The extra credit portion of the assignment was to do a redesign of a different part of the brand; I opted to do a quick take on “Calibre, if it was designed for macOS”. (For reference, Calibre was designed for/using Qt, which means it looks somewhat out of place… basically everywhere.)

(I would like to clarify – I’m throwing a lot of shade at Calibre here, but I really do respect what it is, does, and stands for. DRM-free ebooks are a very good thing. Support your authors.)

This last bit was, in no small part, just an excuse to play around with the Sketch resources that Apple provides. They’re neat!

Categories
Playlist

Playlist of the Month: November 2019

Good news: finished all my Christmas shopping! Bad news: now I have to wrap a bunch of things.
Silhouette by Aquilo on Silhouettes
Cologne by Haux on Something to Remember – EP
Sober by Edwin Raphael on Sober – Single
Coincidental by Betcha on Coincidental – Single
How You’ll Be Remembered by Aron Wright on How You’ll Be Remembered – Single
Connor by SYML on SYML
Antidote by Mr Hudson on ANTIDOTE – Single
Falling Down by Harrison Storm on Falling Down – Single
Angel by H. Kenneth on Angel – Single
F**k Collingwood by Hayden Calnin on F**k Collingwood – Single
Bristol by Imaginary Future on Bristol – Single
Hey, Ma by Bon Iver on Hey, Ma – Single
Haunted by Saint Claire on Haunted – Single
Places by Portair on Places – Single
Silence Is Broken by Cal Trask on Silence Is Broken – Single
Cadillac by Joel Ansett on Cadillac – Single
Crying at the Party by Harry Strange on Crying at the Party – EP
Something About You by Elderbrook & Rudimental on Something About You – Single
Cars at Night by By The Coast on Cars at Night – Single
Oblivions by The National on I Am Easy to Find
Electricity by Danny Bowens on Electricity – Single
Fuzzy Teeth by Portair on Fuzzy Teeth – Single
Truths by bobbycrush on Truths – Single
Barrio by Mahmood on Barrio – Single
On Our Last Day by Hayden Calnin on A Life You Would Choose – EP
All We Have Is Now by Ross Copperman on All We Have Is Now – Single
Tonight – Thorin Loeks on Tonight – Single1
Another Little Lie by Nick Wilson on A Face I’ve Never Seen Before – EP
Bikes by FLØRE on Bikes – Single
start over by RVRB on drift – EP
I’ll Get You Home by By The Coast on I’ll Get You Home / World to Ourselves – Single
Carry Me Away by John Mayer on Carry Me Away – Single
Beyond the View by Chance Peña on Beyond the View – Single
Bloody Mary by Lady Gaga on Born This Way (Special Edition)
Cover Your Eyes by Black Match on Cover Your Eyes – Single
Lost by Portair on Lost – Single
Smiling When I Die by Sasha Sloan on Smiling When I Die – Single
sex by EDEN on i think you think too much of me
Hard Lines, Hard Times by William Wild on Hard Lines, Hard Times – Single
Worship by Amber Run on Philophobia
Tourner dans le vide (Slowed) by Unge Moped & Tuber on Tourner dans le vide : Man slowed down – Single
Chiasso – Random on Chiasso – Single
Hold Me Down – James Gillespie on Hold Me Down – Single
Without Fear – Dermot Kennedy on Without Fear
Giving in to You – Freddie Future on Freddie Future
We Never Die (Acoustic) – Juke Ross on We Never Die (Acoustic) – Single
Fade into Myself – Mattis on Fade into Myself – Single
Ride It – Regard on Ride It – Single
Hollow Coves – Firewoodisland on Hollow Coves – Single2
Slipping Off the Edge – Joel Adams on Slipping Off the Edge – Single
Hold Me Down – YOKE LORE on NOON // 1873
Perfect Sphere (Bubble) – The Early November on Lilac
On the Other Side – Blanco White on On the Other Side – Single
Edge of the Ocean – By The Coast on You4
Bad Dream – Vancouver Sleep Clinic on Bad Dream – Single5
Diamond Days – Elephante on Diamond Days – Single
Neptune – Sleeping At Last on Atlas: Space 2 – EP
Hanging On – Quinn Lewis on Hanging On – Single
Wanted – OneRepublic on Wanted – Single
909 – EDEN on 909 – Single6
Wasted Time – Juke Ross on Wasted Time – Single
Chasing Cars (Reworked) – Snow Patrol on Reworked
Soldi – Mahmood on Gioventù bruciata
Drive – OTR & Panama on Drive – Single
Do You Ever? – Phil Good on Do You Ever? – Single
untitled – EDEN on untitled – Single
everything i wanted – Billie Eilish on everything i wanted – Single7
More Than Friends – Andrey Azizov & Panama on More Than Friends – Single
You & I – Harrison Storm on You & I – Single
anxiety & mixed emotions – Chance Peña on anxiety & mixed emotions – EP8
Say It Again – AJ Mitchell on Say It Again – Single
It Gets Better – Rex Orange County on Pony
Hate Me – Ellie Goulding & Juice WRLD on Hate Me – Single
Symmetry – SYML on Symmetry – Single9
Dolly Zoom – Elliot Moss on Boomerang10
Closedloop – Elliot Moss on Boomerang
Everything Changes – Phillip LaRue on Fall-In – Single
Don’t Take the Money – Harry Strange on Don’t Take the Money – Single11
Roman Holiday – The National on I Am Easy to Find
No Te Debí Besar – C. Tangana, Paloma Mami & Alizzz on No Te Debí Besar – Single
On Melancholy Hill – Riley Pearce on On Melancholy Hill – Single12
Push My Luck – The Chainsmokers on Push My Luck – Single
20 Something – Alexander 23 on I’m Sorry I Love You
Hope – Balcony on Hope – Single
No One Knows Us (feat. Carly Paige) [Acoustic] – BANNERS on No One Knows Us (Acoustic) [feat. Carly Paige] – Single


  1. Still not available on any streaming service, as far as I’m aware, so no link for you. 
  2. I can’t figure out who they remind me of, but it’s someone I like, so whatever. 
  3. This throwback brought to you by an earlier song on this list being called “Hold Me Down” 
  4. This link is different than the rest, because the search engine backing the iTunes Search API is still broken as hell
  5. Vancouver Sleep Clinic has been showing up in my “if you like this artist, you might also like…” things for… oh, probably a year now. Finally decided to listen; they were right. 
  6. Lots of throwback vibes in this one – Sleeping At Last, EDEN, some OneRepublic… 
  7. How is Billie Eilish knocking it out of the park with everything she does?
    That said, like a lot of her music, if you listen to this you’ll wind up going “is… is she okay?” 
  8. This man is really doing a good job of capturing the Gen Z spirit. 
  9. Found this one after Chase introduced me to MusicHarbor; it’s pretty neat! 
  10. This album is excellent, although I think it helped my opinion of it that I accidentally spread out my listening across several months. 
  11. I think this is my favorite addition this month. 
  12. Well-titled, it really is a melancholy song. 
Categories
Portfolio

Sketching

As I’m sure I’ve mentioned, I’m currently working on a master’s in design. (I’m not sorry for talking about it a lot, I’m excited!)

In the first week, we spent a lot of time sketching. Which is… not something I’ve done a whole lot of, in the past; a bit here and there, especially while I was planning out Fluidics, and I do some at work on occasion, but never as much as we did in that first class.

One of the things that our professors mentioned was that it’s something that takes practice. Which, duh, except I hadn’t really thought about it like that. I’d done the thing that so annoys me when people do it with music: "oh, I’m just not talented at that."

That’s wrong. It’s not that I’m not talented; it’s that I’ve never practiced. So I made a resolution of sorts: I’m doing a degree in design, sketching is an important skill in design, so I’m going to practice this skill. I added it to my habit tracker, and off I went.

Since then, I’ve been trying to do a sketch every day. Mostly sticking with pencils (or rather, ‘pencils’; most of these were done in Moleskine Flow – it’s a pretty good app for this, and I’m quite enjoying the Apple Pencil), a bit of pen here and there. And sketching whatever catches my eye – there’s a good deal of the random items around my house, and a small collection of light fixtures in the various Starbucks’ I’ve found myself in over the past month or so.

It’s been fun. And, looking back over my sketches to put this post together, I think I’m improving. So, hey, practice: it works!

Categories
Portfolio

“Add a feature”

In my Design and Prototyping class, we recently did an assignment called "Add a Feature". We were supposed to take an app or site we frequently use, find a competitor or two, and identify a feature that the competitor has. We would then sketch our take on that feature, if it were added to the original app, and wireframe it in Sketch.

As my original app, I chose Things. I’ve been a user, and fan, for years. I have also, however, tried OmniFocus, and know there’s a feature there that I would love to have in Things: sequential tasks.

The basic idea of sequential tasks is that you can set a project, or a group of tasks, to operate in parallel – the normal way, where you can see all the incomplete tasks – or in sequence. When they’re in sequence, you can only see the next incomplete task, not all of them.

Which would be very helpful to me, at the moment – I’m taking classes, and a lot of what’s going into Things at the moment is "do this reading, watch these lectures, then do this assignment." Except, of that sentence fragment, things doesn’t support the word ‘then’, so I see the whole list all at once. I’d rather only see the reading, then only see the lectures, then only see the assignment. Perfect candidate for the assignment.

So, first thing’s first: sketch it.

I kicked around a couple different ideas, but pretty quickly arrived at the conclusion that it should be integrated into Things’ ‘When’ menu.

The ‘When’ menu in Things. After opening it, you can either click to select an item, or begin typing, and use their natural language parser to choose a date.

The other question was how to display these in the list. The point, of course, was that sequential items wouldn’t show up in the ‘Anytime’ list, but they do still need to be visible in some circumstances – namely, when you click through to the project itself, future items still show up.

In the ‘Anytime’ list, that third item wouldn’t appear; you could find it either in ‘Upcoming,’ which is sorted by date, or within the containing project – which is where I took this screenshot.

I actually tried a couple variations – it’s at this point that, were I working for Cultured Code, I’d say “we should build both versions and do some testing to see which is better.” I’m not, though, so I just wireframed them both and turned in the result.

I’m fairly happy with the way I integrated it. Clicking, tapping, or typing “After” pulls up a second menu, where you can search for the item you want to attach to. Instead of thinking about it in terms of the project, the mental model is just “after x, I’ll do y.”

All told, I really enjoyed this exercise – it was the first wireframing I’ve ever done in Sketch, and it was neat to think about integrating a feature into something I use all the time. (And, hey, Cultured Code, if you’re reading this: feel free to use this idea, because I’d love to have the feature.)

Categories
Programming Technology Tools

Automated Playlist Backup With Swift

I mentioned in my post about scripting with Swift that I’d been working on something that inspired this. Well, here’s what it was: a rewrite of my automated playlist backup AppleScript in Swift. That version ran every hour… ish. Partly that scheduling issue is because launchd doesn’t actually guarantee scheduling, just ‘roughly every n seconds’, and partly it’s because the AppleScript was slow.1
Then I found the iTunesLibrary API docs, such as it is, and thought “well, that’d be a much nicer way to do it.”
And then I remembered that Swift can be used as a scripting language, cracked my knuckles, and got to work. (I also had some lovely reference: I wrote up my very basic intro post, but this post goes further in depth on some of the concepts I touched on.)

https://gist.github.com/grey280/0126ac93df1d52d91e78f52d97805246

Not the best API I’ve ever written, but not bad for something I threw together in a few hours. And I had fun doing it, more so than I did with the AppleScript one.
Oh, and it’s much faster than the AppleScript equivalent: this runs through my ~100 playlists in under a minute. So now I have it run every 15 minutes.2
(The configuration for launchd is about the same, you just replace the /usr/bin/osascript with the path to the Swift file, and make the second argument the full path to the directory where you want your backups going. See the original post for the details.)
I’m a bit tempted to turn this into a macOS app, just so I can play around with SwiftUI on macOS, and make it a bit easier to use. Of course, by ‘a bit tempted’ I mean ‘I already started tinkering,’ but I doubt I’ll have anything to show for a while — near as I can tell, SwiftUI has no equivalent to NSOutlineView as of yet, which makes properly showing the list a challenge. Still, it’s been fun to play with.


  1. I was going to cite this lovely resource, but since that website was built by someone who doesn’t understand the concept of a URL, I can’t link to the relevant section. Click ‘Configuration,’ then the ‘Content’ thing that’s inexplicably sideways on the left side of the screen, and ‘StartInterval’ under ‘When to Start’. 
  2. I’m also looking at the FSEvents API to see how hard it would be to set it up to run whenever Music (née iTunes) updates a playlist, but that… probably won’t happen anytime soon. 
Categories
Programming Technology

Swift Scripting

I’m a bit of a fan of Swift, though I don’t get to tinker with it nearly as much as I’d like. Recently, though, I did some tinkering with Swift as a scripting language, and thought it was pretty fun! (I’m planning another blog post about what, exactly, I was trying to do later, but for now just take it as a given.)
The most important step is to have Swift installed on your machine. As a Mac user, the easiest way is probably just to install Xcode, but if you’re looking for a lighter-weight solution, you can install just the Swift toolchain. Swift is also available for Ubuntu, which, again, takes some doing. If you want Swift on Windows… well, it’s an ongoing project. Personally, I’d say you’ll probably have better luck running it in Ubuntu on the WSL.
Alright, got your Swift installation working? Let’s go.
Step 1: Make your Swift file. We’ll call it main.swift, and in true Tech Tutorial fashion, we’ll keep it simple:

print("Hello world!")

Step 2: Insert a Magic Comment in the first line:

#!/usr/env/swift
print("Hello world!")

Step 3: In your shell of choice, make it executable:

$ chmod +x ./main.swift

Step 4: Run!

$ ./main.swift
> Hello world!

No, really, it’s that simple. The magic comment there tells your interpreter ‘run this using Swift’, and then Swift just… executes your code from top to bottom. And it doesn’t have to be just function calls — you can define classes, structs, enums, whatever. Which is the real benefit to using Swift instead of just writing your script in Bash; object-oriented programming and type safety are lovely, lovely things.

My next post is going to go into some of the more interesting stuff you can do, with a lovely worked example, but for now I’ll add a couple other things:

  • By default, execution ends when it gets to the end of the file; at that point, it will exit with code 0, so Bash (or whatever) will assume it worked correctly. If you want to exit earlier, call exit(_:) with the code you want. exit(0) means “done successfully,” while any other integer in there will be treated as an error.1
  • print(_:) outputs to stdout, which can be piped using |. If you want to output an error (to be piped with 2>, or similar) you need to import Foundation, and then call FileHandle.standardError.write(_:).2
  • To explicitly write to stdout, it’s FileHandle.standardOutput.write(_:).

  1. Which is useful if your script is going to be called programmatically. ./main.swift && echo "It worked!" will print “Hello world” and then “It worked!” with exit(0), but just “Hello world” if you add exit(1) to the end of the file. 
  2. And note the types here – this expects Data, not String, so to write a string, you need to convert it by adding .data(using: .utf8)! 
Categories
Collection

Tamora Pierce is (Finally) Getting A TV Show

Peter White, Deadline:

Lionsgate and Little Women and King Lear producer Playground Entertainment have teamed on a major fantasy project – a television adaptation of Tamora Pierce’s expansive Tortall Universe series.

I absolutely adore Tamora Pierce, and I cannot overstate how excited I am about this.1

[The companies have] hopes of turning it into a tentpole series that crosses over between fans of Game of Thrones and YA novels.

Obviously, everyone hopes their show will be the next Game of Thrones, but I do think Tortall offers a large enough universe to pull it off. And, again, I would love to see Pierce’s work getting the big-budget approach.


  1. Did I sit down to write a blog post about it for the explicit purpose of making sure there’s some buzz about it online? Yes. Yes I did. I’m trying to encourage them to make it and make it well. 
Categories
Playlist

Playlist of the Month: October 2019

Changing the formatting a little bit this month, as I’m working on an improved version of my playlist archiving script.1
Silhouette by Aquilo on Silhouettes
Cologne by Haux on Something to Remember – EP
Sober by Edwin Raphael on Sober – Single
Coincidental by Betcha on Coincidental – Single
How You’ll Be Remembered by Aron Wright on How You’ll Be Remembered – Single
Connor by SYML on SYML
Antidote by Mr Hudson on ANTIDOTE – Single
Without the Lights by Elliot Moss on Boomerang
Falling Down by Harrison Storm on Falling Down – Single
Drew Barrymore by Bryce Vine on Carnival
Angel by H. Kenneth on Angel – Single
Fk Collingwood by Hayden Calnin on Fk Collingwood – Single2
Bristol by Imaginary Future on Bristol – Single
The Sea by HAEVN on The Sea – Single
Hey, Ma by Bon Iver on Hey, Ma – Single
Haunted by Saint Claire on Haunted – Single3
Party by Jon Bryant on Cult Classic
Places by Portair on Places – Single
Silence Is Broken by Cal Trask on Silence Is Broken – Single
Cadillac by Joel Ansett on Cadillac – Single
Sh’Diah by Bon Iver on i,i
Piece Of Your Heart (feat. GOODBOYS) by Meduza on Piece Of Your Heart (feat. GOODBOYS) – Single
Why Do You Love Me by Charlotte Lawrence on Why Do You Love Me – Single
Crying at the Party by Harry Strange on Crying at the Party – EP
Something About You by Elderbrook & Rudimental on Something About You – Single
Byegone by Volcano Choir on Repave
Cars at Night by By The Coast on Cars at Night – Single
Holyfields, by Bon Iver on i,i
Feeling You by Harrison Storm on Falling Down – EP
Comrade by Volcano Choir on Repave
I’m Doing Everything I Can by Imaginary Future on I’m Doing Everything I Can – Single4
Oblivions by The National on I Am Easy to Find
5AM by Amber Run on 5AM (Deluxe) WEB
Hold On by Griffin Stoller on Hold On – Single
Electricity by Danny Bowens on Electricity – Single
Bad Line by The Hunter Express on Bad Line – Single
Fuzzy Teeth by Portair on Fuzzy Teeth – Single
Truths by bobbycrush on Truths – Single
Shortcut by Monica Moser on Shortcut – Single
Barrio by Mahmood on Barrio – Single5
On Our Last Day by Hayden Calnin on A Life You Would Choose – EP
All We Have Is Now by Ross Copperman on All We Have Is Now – Single
Lines by Scott Quinn on Lines – Single
Tonight by Thorin Loeks on Tonight – Single
Tonight by Thorin Loeks on Tonight – Single6
Hideout (feat. Zoe Maxwell) by Blewbird on Hideout (feat. Zoe Maxwell) – Single
Where the Shadow Ends by BANNERS & Young Bombs on Where the Shadow Ends
Paradox by Jaymes Young on Paradox – Single
Another Little Lie by Nick Wilson on A Face I’ve Never Seen Before – EP
Bikes by FLØRE on Bikes – Single
start over by RVRB on drift – EP
Don’t by Saint Claire on Don’t – Single7
I’ll Get You Home by By The Coast on I’ll Get You Home / World to Ourselves – Single
Ours to Lose by JacobNeverhill on Jacobneverhill
SICK by CXLOE & gnash on SICK – Single
Stay by OTR & WYNNE on Stay – Single
Carry Me Away by John Mayer on Carry Me Away – Single
You. by Lucy Daydream on You. – Single
Antes de Morirme (feat. Rosalía) by C. Tangana on Antes de Morirme (feat. Rosalía) – Single
Killing Me by Ed Prosek on Killing Me – Single
Beyond the View by Chance Peña on Beyond the View – Single
Bloody Mary by Lady Gaga on Born This Way (Special Edition)8
Monster by Mark Diamond on Hummingbird Two – EP
Cover Your Eyes by Black Match on Cover Your Eyes – Single
Lost by Portair on Lost – Single
Smiling When I Die by Sasha Sloan on Smiling When I Die – Single
sex by EDEN on i think you think too much of me9
Hard Lines, Hard Times by William Wild on Hard Lines, Hard Times – Single10
Worship by Amber Run on Philophobia
Tourner dans le vide (Slowed) by Unge Moped & Tuber on Tourner dans le vide : Man slowed down – Single11


  1. Technically, I have an improved version of it; now I’m tinkering with giving it the ability to do the links for me, too. 
  2. Been having fun with this one in the scripting – string manipulation in AppleScript isn’t my favorite, and I wound up switching to Swift. 
  3. I wish I could say this was in here because Halloween, but no, I kinda forgot that Halloween was a thing until the day of. 
  4. Singles like this are the downside to including the album title in here as well, but I kinda like having more data points to narrow down which specific version of a song I’m talking about. 
  5. This goes in with Billie Eilish on the “if you get a HomePod, play this on it” list. 
  6. So, this is on here twice, and missing a link in both cases, because there’s a Story about this. Loeks pulled the song from… everywhere, really, shortly after I published my playlist last month. I spent some time trying to figure out if it was a bug, found out it was gone from all the services, found his website, and sent him an email asking about it. He’s reworking it, and going to rerelease a new version at some point in the future, but was kind enough to send me a copy of the original version. That’s the second one here; I left the first, even though it’s not playable, as… part of the historical record, I suppose.
    Anyways, it’s a good song, I’m looking forward to hearing (and sharing) the new version, and in the meantime, go check out the guy’s other music. 
  7. Fun to sing along to! I have yet to get the lyrics right, but maybe eventually! 
  8. This one… is sort of a Halloween one, actually. 
  9. Listening to EDEN reminded me of how much I miss Majik. 
  10. This month’s winner for ‘favorite new addition,’ I think. 
  11. Surprisingly hard to track down – if you try to Shazam the bit of this that made it into the meme (and yes, I’ll admit it, that’s how I first heard it) you get a rap song that sampled it in the intro before making a joke about the meme. Shazam, you have failed me. 
Categories
Portfolio

Collecting Clippings

I recently started a Master’s in Human-Computer Interaction and Design. While the main goal of the program is, obviously, learning, one of the side goals is to build a portfolio; as such, I’m going to be making an effort to post some of what we’re working on in class here.

One of our assignments was to start collecting images and clippings, and doing some annotations of them. The idea is to build up a library; something like Quiver, but for design instead of development. It was actually very fun; a lot of my classmates did it handmade, and I considered it, but I’ve also been meaning to try Adobe XD and figured, why not?

Source: Paprika

It’s a pretty neat tool, it made it very quick to put these all together. Much more focused than my other digital go-to, PhotoShop, where I probably could’ve accomplished the same thing, but would’ve spent more time digging around in the ‘draw a line’ settings and whatnot.

Source: Windows Task Manager (Windows 10)

A lot of what I did for mine were mobile apps – that is, after all, my main area of interest – but I also made an effort to branch out to other operating systems and even (gasp) physical devices.

Source: the office Keurig. No, I don’t know how to work it.

A big part of the assignment was giving feedback to our classmates on what they’d collected. The goal wasn’t “hey, that’s a cool interface you were looking at,” but “oh, that’s a good point about the interface.” The exercise, after all, was about the act of collecting and annotating.

Source: Overcast

It was interesting to see how everybody did theirs – most of the people I talked with had done them by hand, although somebody did a lovely blended style one by collecting screenshots and photos and then annotating them with an iPad and Apple Pencil.

Source: Hazel

I’m not sharing all of what I’ve collected here – I’m proud of my annotations of the to-do list app I use, but I don’t actually want to share the contents of my to-do list. And while I had fun marking up Dark Sky, I don’t feel the need to share my home address with the internet.

Source: Calory

I’ve got some pieces from my sketchbook that I might post sometime soon, and I’ll hopefully continue to have interesting things to share as the program goes on!

Categories
Playlist

Playlist of the Month: September 2019

Built entirely without Shortcuts, because while they made many very impressive strides this year, they still didn’t give me a ‘filter’ action.1
Silhouette – Aquilo
Cologne – Haux
Sober – Edwin Raphael
Coincidental – Betcha
How You’ll Be Remembered – Aron Wright
Cocoon – Tommy Ashby
Connor – SYML
Antidote – Mr Hudson
Before You Knew It Was Me – SYML
Without the Lights – Elliot Moss
99 – Elliot Moss
Bad for You – Billy Raffoul
Spoke Too Soon – Jake Scott
Caves – Haux
Falling Down – Harrison Storm
To the Rhythm – Mattis
Drew Barrymore – Bryce Vine
Angel – H. Kenneth
Fk Collingwood – Hayden Calnin
Up, Up & Away – Chance Peña
Bristol – Imaginary Future
Coyote – Mako
Affection – Amber Run
The Sea – HAEVN
Slept on Me – Mr Hudson2
Hey, Ma – Bon Iver
Soothsayer – Of Monsters and Men
Haunted – Saint Claire
Bigger Things – Imaginary Future
Stuck in Gravity – Of Monsters and Men
Party – Jon Bryant
Made of Bones – James Quick
Places – Portair3
Reach – Robert Shirey Kelly
Without You (feat. H. Kenneth) – Alle Farben
Quicksand Arms – Adam Agin & Watts
Silence Is Broken – Cal Trask
Cadillac – Joel Ansett
Sh’Diah – Bon Iver
Faith – Bon Iver
Salem – Bon Iver
For My Help – Hayden Calnin
Oceans – Noah Mac
Piece Of Your Heart (feat. GOODBOYS) – Meduza
Levee – Bo Baskoro
Why Do You Love Me – Charlotte Lawrence
iMi – Bon Iver
Breathe – Mako
Hairpin Turns – The National
Crying at the Party – Harry Strange
Something About You – Elderbrook & Rudimental
Byegone – Volcano Choir
Cars at Night – By The Coast
Holyfields, – Bon Iver4
Wonder – JacobNeverhill
Same Place (feat. Keelan Mak & Thomas White) – Fossa Beats
Jelmore – Bon Iver
Feeling You – Harrison Storm
Llt – Leo Islo5
Comrade – Volcano Choir
I’m Doing Everything I Can – Imaginary Future
Nowhere – Black Match
Oblivions – The National
Light Years – The National
Nothin’ – Navincii
Meant to Stay Hid – SYML6
5AM – Amber Run
Hold On – Griffin Stoller
Electricity – Danny Bowens
Not Giving It Up – JacobNeverhill
Bad Line – The Hunter Express
How to Help – Harrison Storm
Fuzzy Teeth – Portair
Naeem – Bon Iver
Truths – bobbycrush
Wonder (Stripped) – JacobNeverhill
Do You Remember (feat. Death Cab for Cutie) – Chance the Rapper
Shortcut – Monica Moser
I Found – Amber Run
Barrio – Mahmood7
Heavy St
– Blake Rose
On Our Last Day – Hayden Calnin8
All We Have Is Now – Ross Copperman9
Lines – Scott Quinn
Tonight – Thorin Loeks10
Hideout (feat. Zoe Maxwell) – Blewbird
Hallelujah – Oh Wonder


  1. For the list, though, I’m just using the output of my iTunes automation
  2. Just now realizing that I have no evidence for strongly assuming Mr. Hudson lives in New York City other than the name, and like… that’s not necessarily how names work. 
  3. the musical equivalent to the Dr. Seuss book 
  4. Sometimes I’m a little mad that Bon Ever exists, because the whole “disappear into the woods for a while, then reappear with an album of wonderful, weirdly-titled music” niche is one that definitely used to be one of my life goals. 
  5. I don’t want to admit to how long it took me to figure out what “Llt” stands for. 
  6. I’m slowly building an entire playlist around this song; it’s a good one. Very calming. 
  7. I originally found this one via the music video, which I also recommend, it’s kinda fun. 
  8. I have a strong desire to recommend this to all my music major friends. 
  9. Fun fact, if you use the full title and artist’s name in the iTunes search system, it just… stops working. It’s a great platform with no problems whatsoever. 
  10. My brain keeps replacing this with “Thorin Oakenshield” and I would like to clarify that I’ve never read nor seen Lord of the Rings
Categories
Writing

Guest Appearance: Buildable Blog

Related to my recent post on Angular libraries, I wrote an article for the company blog explaining why you’d want to do that. Check it out!