cjoseph.com

Hi, I’m Charles and I make iOS apps and bad jokes.
Check out my music app, Picky!

Feb 26 2021

SwiftUI Jam

Last weekend was the first (and hopefully annual!) SwiftUI Jam, which I had a lot of fun taking part in. For a completely remote event I found it to have a surprisingly communal feel, with lots of great discussions and tips flowing through Discord all weekend.

My project for the jam was an app I brainstormed that same weekend with my wife, Emily, based on one of her ideas: a toddler book reading tracker. Most reading tracker apps aren’t designed for super short books that you’re reading over and over and over again, day after day, and we thought it would be fun to be able to see how our son’s interest in books develops over time. When we read to him, we’re reading between 5-20 books a day, and he often seems to go through phases of obsession with certain books (he’s now at the stage where he brings us the books we’re going to read) that might be fun to track & chart.

Another thing I liked about this idea was that I could see a clear path from a weekend’s work on a prototype to shipping a minimum viable product and future updates post-jam. Here’s what I wrote as a feature list at the start of the jam:

  • List of books with number of times read & date last read

  • Flow for adding a new book (stretch goal: isbn scanner and lookup)

  • Flow for marking a book as just read

  • Flow for marking a book as read with a past date

  • Stretch goal: an Apple Watch app, since I often don’t have my phone with me when reading to 👶.

I didn’t end up getting to any of my stretch goals, or the flow for adding past read dates, but I did get the other main features built and fully functioning, and had a lot of fun while working on them.

Some technical takeaways…

  • While I’ve now used SwiftUI for just about every new screen and UI component I built for Picky over the last six months, they were all embedded within UIKit view controllers and working with a pure SwiftUI app has a different feel to it, especially when it comes to data flow.

  • While you get some really nice out of the box functionality when using Core Data, it really is showing its Objective-C origins and just doesn’t feel right with Swift (especially optionals). I think I’m going to explore some options for how to more naturally integrate it with some sort of middle layer to hide some of the rough edges from my pretty SwiftUI code.

  • I barely scratched the surface of what it can do, but the ButtonStyle protocol is a really neat way to customize controls.

  • I didn’t end up having any time to play with animations but I saw a lot of really inspiring work from other folks taking part in the jam. Definitely making it a goal of mine to really put SwiftUI’s powerful animation potential to use.

  • If you’re curious my somewhat hacky code (remember, this was a project done in one weekend, primarily while 👶 was asleep) is here on GitHub.

Lastly, here are a few screenshots to give you an idea of where I ended up at the end of the weekend:


Feb 1 2021

My favourite albums of 2020

I suppose it’s unnecessary to state that 2020 was a difficult, strange year… but it was. And despite gestures at everything… there was really good music. A lot of it. Here’s what resonated with me the most.

  1. Wolf Parade - Thin Mind
  2. Fiona Apple - Fetch The Boltcutters
  3. Run The Jewels - RTJ4
  4. Taylor Swift - Folklore
  5. Central Park Season One, The Soundtrack - Song-tral Park
  6. Puscifer - Existential Reckoning
  7. Will Butler - Generations
  8. Metric - Live at the Funhouse Vol. 4 - Nov 28 2019
  9. Dirty Projectors - 5EPs
  10. Nick Cave - Idiot Prayer (Alone at Alexandra Palace)

Oct 7 2020

My favourite albums of 2019

Well, here I am sharing some favourite albums in an incredibly untimely fashion, but a) I’m a big fan of music recommendations and b) I want to get this out of my drafts folder.

My top two picks are, far and away, the ones that stuck with me the most over the last year and change, for very different reasons.

Vampire Weekend’s eclectic, sprawling collection of songs feels very much like an artifact of 2019, tied to routines and places (like train rides to work) that feel very far away.

Whereas Operators’ second album not only comes across as an incredibly cohesive, thought-out work, but somehow feels both very much of the moment and yet also of the future (and getting more prophetic and prescient by the day).

  1. Operators - Radiant Dawn
  2. Vampire Weekend - Father of the Bride
  3. Thom Yorke - Anima
  4. Trent Reznor & Atticus Ross - Watchmen (Volumes 1-3)
  5. Bon Iver - i,i
  6. Flight of the Conchords - Live in London
  7. The National - I Am Easy to Find
  8. Wilco - Ode to Joy
  9. The New Pornographers - In the Morse Code of Brake Lights
  10. Charli XCX - Charli

May 29 2019

My favourite albums of 2018

Well, I like making these year-end album lists, and since we’re now just about halfway through 2019 this is probably as good a time as ever to share this one 😂. Here are the albums released in 2018 that I most enjoyed:

  1. Metric - Art of Doubt
  2. Neko Case - Hell-On
  3. Dirty Projectors - Lamp Lit Prose
  4. Chvrches - Love is Dead
  5. Jeff Tweedy - WARM
  6. Frontperson - Frontrunner
  7. A Perfect Circle - Eat The Elephant
  8. Janelle Monáe - Dirty Computer
  9. Eleanor Friedberger - Rebound
  10. Ariana Grande - Sweetener

Jan 1 2018

Jan 26 2017

MediaPlayer enhancements in the iOS 10.3 beta

Every time a new iOS beta is released I immediately scour the developer documentation to see if anything new’s been added to the (mostly stagnant) MediaPlayer framework, which my app Picky revolves around. It’s so rare that non-trivial changes are made to it that I wrote about it the last time this happened, about a year ago.

I was genuinely surprised and elated to find that yesterday’s iOS 10.3 beta finally adds what looks like proper queuing functionality to MPMusicPlayerController and I excitedly tweeted about it. Scott Edwards asked if I could “explain why that’s important to a non programmer”, so I’m going to try to do that here.

Alternatives to Apple’s Music app (like Picky) need to be able to access and play the user’s iTunes library, unless they’re part of a streaming service (like Spotify) or providing their own syncing and library management and companion apps (quite the tall order). While developers can build incredibly advanced playback functionality with tools like AVFoundation, that’s only possible for an increasingly smaller subset of users’ libraries: only locally downloaded, non-DRMed content — nothing stored in the cloud and nothing downloaded from Apple Music. People are storing more and more of their music in the cloud and expect third-party apps to be able to keep up. Apple’s one mechanism for developers to do so is MPMusicPlayerController, which Allen Pike of Steamclock Software cleverly describes as “more like a set of levers with which you can poke the system Music app than an API for making music apps”.

Any improvement to a framework one of my apps is built on is appreciated, but especially so for the addition of a feature like queueing, which has been needed for a long time now. Now I do already support viewing and adding to the current song queue in Picky, but it wasn’t easy to get working and is limited by its reliance on workarounds that could potentially stop working in a future update. I’m looking forward to being able to migrate my code to something more flexible and future-proof.

I still need to spend some time really digging into the new APIs, but just seeing this framework under active development has me more optimistic for the future of music players on iOS.


Jan 18 2017

AirPods

I love the sound of my current headphones, but more and more I find myself frustrated with their cords and pining for a great wireless alternative. With the hype around AirPods reaching a fever pitch I decided to give them a try (despite hesitations about their potential sound quality and fit). Here are my impressions after spending two weeks with them:

First off, the pairing process is so seemless that I literally blinked and missed it. That W1 chipset really does work wonders, making it super simple to change devices from the standard audio route menu. I was impressed by their range, and while I did get some dropouts they were rare.

The charging case is brilliant, with magnets that pull the AirPods in in a really satisfyingly secure way. Battery life is excellent too — by naturally returning them to the case when I wasn’t using them I never ended up running them down, and I could go 2-3 work days before even needing to charge the case again. The whole experience around using these headphones is top-notch.

Even the sound quality was surprisingly great: clear and detailed, and far better than I’d expected. They stayed in my ears securely, though I always felt like they were slightly too loose, which may be why the bass was a little underwhelming (it improved when holding them in tighter).

But the bottom line is that after spending years using in-ear headphones I really need more sound isolation than the AirPods provide — which is none. I didn’t try them anywhere really loud, like on the subway or a plane, but when walking around outside (or just at the office) background noise was far too distracting. I think the AirPods are a really great product that are going to wow a lot of people, but I returned them last weekend… they’re just not quite right for me.

Luckily these aren’t the only headphones with that fancy W1 chip, and after experiencing its benefits first-hand I’m now very eagerly anticipating the BeatsX, which are due out next month. They may not be quite as slick, but I’m hoping the in-ear design will be a much better fit for me.


Dec 31 2016

My favourite albums of 2016

I know “ugh, 2016!” has been a pretty much ubiquitous thought lately, but despite everything I firmly believe that it was another great year for music. There are still a bunch of albums1 I’d like to check out, and others that I want to spend more time with, but here are my absolute favourites of the year as they stand today.

5. Basia Bulat – Good Advice
Another very good album from one of my favourite singer/songwriters of the last few years — great songs and an incredible voice.

4. Frank Ocean – Blonde
I’m really late to the Frank Ocean party, but Blonde is a striking, introspective album with great production.

3. Wilco – Schmilco
Wilco is one of my very favourite bands and I think this is their best and most consistent album since A Ghost Is Born. Schmilco also works well as a quieter complement to last year’s noisy Star Wars.

2. Nick Cave & The Bad Seeds – Skeleton Tree
Heartbreaking, beautiful music.

1. Operators – Blue Wave
I’ve gone on and on about this band before, but Blue Wave really needs to be heard. The excellent production from Graham Walsh (who also contributed to great albums from Hannah Georgas and Preoccupations this year) really captures the band’s dancy, retro-futuristic sound. Their live shows keep getting better and better, with their headlining set at Camp Wavelength being their best yet and also the best show I saw all year. I continue to be blown away by this band and can’t wait to see what they do in 2017.





  1. Including: Run The Jewels 3, The Dillinger Escape Plan’s Dissociation, and Sleigh Bells’ Jessica Rabbit.

Oct 23 2016

Picky Refactoring Journal #0: Prelude

A little background for those who aren’t familiar with it: my app Picky is an alternative to the standard iOS Music player, and it’s where the vast majority of my time in Xcode is spent outside of my day job. I work on it (in some capacity) just about every week, and use it daily.

I first started working on Picky all the way back in January of 2011. Before Swift, before Auto Layout, before ARC: different times. It’s an app I’m immensely proud of, and I find it incredibly satisfying to ship new features (v2.10.1 was released last month) and make my customers happy. But its codebase is old and creaky, and after spending almost a year writing Swift full time I find it hard to motivate myself to go back to it.

So, in the spirit of Brent Simmons’ classic Vesper Sync Diary and my friend Curtis Herbert’s illuminating Slopes Diaries I’m going to challenge myself to keep a public record of a project of my own: a complete and total refactoring and rethinking of Picky’s codebase. It’s not just that I want to be writing Picky in Swift; I’d also like to adopt some of the more modern design patterns I’ve worked with over the last while, and I need a better foundation to build off of to add many of the new features I’ve been planning. Plus I’ll finally be able to justify putting out an update as version 3.0!

Writing about this publicly is committing myself to finally going ahead with the rewrite, and I’m hoping it’ll help keep me focused, let interested customers follow its progress, and maybe even spark a conversation or two (getting feedback on coding decisions is almost always useful, and something that’s a lot harder to come by when you’re not working on a team).

Next time: a 1400 line singleton and some short term decisions!


Apr 5 2016

Operators

I listen to a lot of music1. I go to a lot of live shows (over 30 last year, a new personal record!). And I try to keep my ears open to new artists and recommendations from friends2… but it’s been a long time since a band’s hooked me like Operators has.

Two summers ago I came across this post on Pitchfork, listened to True, and bought a ticket to see them at the Horseshoe, mostly based on how much of a fan I was of A Thing Called Divine Fits (also featuring Operators’ Dan Boeckner and Sam Brown). Despite only being familiar with about a third of their set (if that), I was absolutely blown away by the songs and the energy that the three-and-sometimes-four-piece filled the small club with (an onstage dance party even broke out).

That show kicked off an obsession. Since then I’ve seen the band every chance I’ve had. At the Danforth, opening for The New Pornographers. At the Garrison, at Adelaide Hall. My girlfriend and I even made plans to spend New Year’s in Montreal to see them one last time in 2015. I’ve watched just about every live session, listened to unreleased tracks like “I Die” over and over, and even tuned in to a live stream from Iceland during the middle of the day.

I think there are a few factors contributing to my Operators-mania. For one, they’re an absolutely first-class live act, and I’ve gotten to experience that firsthand several times now. And because until now they’d only released one EP (plus the excellent “Ecstasy In My House” single), that scarcity of material made me all the more eager for every new performance and tidbit of news. But mostly because they’re just that fucking great.

And now the album, Blue Wave, is finally here! And despite having built up so much anticipation and hype for it, somehow it’s managed to exceed my wildest expectations. The new songs are fantastic, and the older staples, like “Shape”, are somehow even better than before. The production and recording manages to recreate the band’s live sound, and then some! I wouldn’t have thought that Operators’ music could use some added saxophone, but wow, those sax parts are magic.

The bottom line: if you’re at all a fan of Wolf Parade, Handsome Furs, Divine Fits, synths, new wave, post-punk, or just great music you need to check out Operators. And in the meantime I’ll be listening to Blue Wave over and over, waiting for Dan, Devojka, Sam, and Dustin to come back to Toronto.

🎶😍🎶





  1. Being able to listen to music and still concentrate on my work is one of the many things I love about software development!
  2. So much so that I’ve been working on an app to help keep track of new music I want to check out. More on that soon.

Page 1 of 5