A Closed and Common Orbit

My problem with this book is that it ended.

A Closed and Common Orbit is a sequel in name only. It’s book number two in Becky Chambers’ Wayfarer searies, but it stands just fine on its own. The first book in the series, The Long Way to a Small and Angry Planet, was a fun little story following a small Serenity-like crew across the universe. Each chapter felt like an episode of slice-of-life sci-fi television show. Overall the tone was positive, bad things might happen to the crew, but hope and empathy saturated the story. It was a pleasant read. This sequel focuses on one brief side character from the first book, off on their own. Going in, you don’t have to know much about their background, though it’s nice to have some contxt.

The non-spoilery pitch is that a ship’s AI has been transferred to a robotic replica of a human body, which is very illegal. In this diverse universe full of unique, sapient beings, Artificial Intelligences are viewed by most as tools to make life a little easier. While this is a topic as common as pepperoni on pizza, the book focuses on the AI’s experience trying to live in a body that doesn’t fit them. At her core, she is ment to occupy a space-faring ship, keeping her crew safe, with constant input from dozens sources. This body kit, is limiting. Being an individual with a purpose she can’t define is difficult. Through her stuggle she continues to refer to the body as “the kit”. Instead of saying that she picked up a glass, she says that she “made the kit pick up the glass”. She struggles figuring out just what she is, what she should be doing, how to be a person, how to manage friendships.

Alongside her journey, we see the life story of her friend and roommate; which could have been a book all on its own. Intertwining these two stories together, both about identity, purpose, and friendship results in a book that I couldn’t put down. I loved both characters. I loved seeing them struggle and grow. I’ve become quite the fan of Becky Chambers. The books of hers that I’ve read have felt comforting, like a heavy blanket on a rainy day. A review on Goodreads for the first book put it like this: “Feel-good science fiction. Bad things happen. Injustice exists. And yet, the world is a mostly beautiful and good place. Bad people exist, but people in general are mostly nice and almost always interesting. It’s a truly heart-warming novel.” That was true for book one, but A Closed and Common Orbit adds more sustenance. It feels more substantial, like a good heavy stew that sticks to your ribs. It’s a book I wish I could still be reading.

The Thursday Murder Club

And they would have gotten away with it too…

A lovable bunch of septuagenarians who like to sip wine and solve murders. Joyce, Elizabeth, Ibrahim, and Ron are such defined characters in my mind. Richard Osman was meticulous in crafting them. They’re people I’d love to spend time with, though I fear I wouldn’t live up to Elizabeth’s high expectations! I loved how these peppy pensioners would take advantage of humanity’s general underestimation of the old.

“After a certain age, you can pretty much do whatever takes your fancy. No one tells you off, except for your doctors and your children.”

Joyce

They struggle with being forgotten, with the loss of friends and family that always seems to be around the corner, with the fear of losing ability both physical and mental. They push on and have fun in spite of the looming night. This book was fun and kind. I appreciate reading characters from a demographic that I haven’t read before. Ones that don’t fill stereotypes. I will definitely be reading the sequel.

Dracula

Dracula Rules.

Castlevania Dracula is who I pictured while reading the book. He is cannon.

I went into Bram Stoker’s original 1897 book thinking I knew the story and characters purely through pop culture osmosis. Turns out I knew nothing except how to partially kill a vampire.

A Psalm for the Wild-Built

A monk and a robot take a walk through the woods.

This is my first introduction to author Becky Chambers, and I have the feeling I’m going to end up reading everything she writes. You could say not a lot happens in this book, and yes, this isn’t a wild, plot-driven, high-stakes read. What it does have is two great characters and vibes. This is the kind of book you just chill with. The warm, heavy blanket kind of book. I ended up brewing some tea every time I sat down to read A Psalm for the Wild-Built. Definitely because the protagonists is a tea monk, blending bespoke teas, but it was also demanded by that cozy blanket vibe.

Podcasts, but tapes

As I dabbled in making a podcast app over the years, one design element I always wanted to include was a tape deck UI. The inspiration of course came from Apple’s own Podcasts app, back from the skeuomorphic days of iOS.

Podcasts’ tape deck UI on the iPad

I loved that virtual replication of the tape deck. Watching the the spools spin, tape shrinking on the left and growing on the right. I remember being astounded when I noticed that tilting my iPod Touch would shift the reflection on the chrome knob of the volume slider. It was cool. I wanted to make something cool.

Graphic design being a skill I very much lack, I knew a skeuomorphic masterpiece like that would stretch beyond my ability. With realistic tape spools on the bench, I started looking into something more achievable. At first, I had the idea of using SpriteKit to make detailed, analogue representation of a podcast player in 2D pixel art. The user would browse through a cabinet of cassette tapes representing podcasts. Searching and subscribing would have a similar arcane and real-world analogue of an interface. Basically, a 16-bit game that was the interface to a podcast app. 😅 Obviously, this too was way beyond my skill. I finally came to my senses and decided to try something similar to the UI of Teenage Engineering’s OP-1. I loved the simplistic, striking line based interface of the little synthesizer and decided I would attempt to replicate it in my app.

OP-1 UI by Teenage Engineering

The minimal UI representation of a tape and meters seemed much more apporachable than the gradients and depth of skeuomorphism’s past. With my inspiration and goal set, I started watching Sketch tutorials and got to work.

OP-1 inspired prototypes

I replicated, and imitated, but I never quite ended up with something that was as cohesive and beautiful as the OP-1 interface. I was still happy with what I’d created. Though derivative, I learned how to use Sketch, I loved making the prototypes, I even got it working in Swift:

From Sketch to iOS!

A couple years later, when the word “neumorphism” first started popping up on Twitter, I decided to make another go at designing the the case tape. While I fondly remembered my first attempts, they were too simple an imitation of a great design. This time, I decided I would do my own thing, and lean a (tiny) bit more into the skeuomorphic design of the original Podcasts app.

The new tape was still extremely simple. Again, I am no artist. My ability withstanding, I loved them. I still do, a few year later. I’m not sure how or even if I’d ever include something like them in an app in the future. My opportunities to do so are pretty limited. They make me happy though. Remind me of that original app from Apple. I hope more apps let whimsy design take the the stage.

WIP: Podcast App

As mentioned before, I enjoy podcasts. More often than not, my AirPods will be in my ears and I’ll be listening to ATP, Cortex, or The Adventure Zone. While my current podcast app of choice is wonderful, I wanted to figure out how to make a podcast app myself. Off and on since February I’ve been working on this surprisingly complex little app. The basics of the app are public and available on GitHub, though I forked the repo and continued on privately a few months ago.

Currently, the app has the ability to search the iTunes podcast database, parse through each podcast’s RSS feed, subscribe to a podcast, download, play, and delete episodes, skip silences, and a few other small features. There’s still quite a bit I want to complete, such as side loading files through iCloud, custom animations, and more advanced audio processing. It’s been a fun project.

Overriding Swift String’s Subscript Operator

UPDATE: The extension below always felt a bit dirty. There had to be a reason for the guardians of Swift not to provide simple access to characters via an integer subscript. In doing some research, I have found that I committed a terrible sin:

[As] simple as this code looks, it’s horribly inefficient. Every time s is accessed with an integer, an O(n) function to advance its starting index is run. Running a linear loop inside another linear loop means this for loop is accidentally O(n²) — as the length of the string increases, the time this loop takes increases quadratically.

Please forgive me.


With Swift 4, strings are once again a collection of characters. Maybe it’s my C++ upbringing, but an array of characters just feel right. Unfortunately, referencing a specific character in a Swift string isn’t as easy as using the subscript operator for an array. Instead of passing an integer into square brackets, iterating through the characters of a string requires the use of String.index. Simply writing myString[0] won’t work, we have to write:

let index = self.index(self.startIndex, offsetBy: (0))
mySelf[index]

I never remember this. Again, maybe it’s my C++ traumatized brain, but it just doesn’t sit right. So I made the equivalent of programatic comfort food with this little extension, overriding String’s subscript operator to accept a plain old Int:

extension String {
    subscript(i: Int) -> String {
        get {
            let index = self.index(self.startIndex, offsetBy: (i))
            return String(self[index])
        }
    }
}

And with that, myString[i] works and I don’t have to think too hard next time I reference a character.

Custom Transitions in iOS

The other night I had the opportunity to present on custom animations and transitions at the monthly San Antonio iOS Developer Meetup. I created a Playground that goes over the basics of animation in iOS as well as a prototype for duplicating this fancy transition from the App Store:

In the same repo, there’s also a partially complete project, detailing how to implement your own transition from one view to another. Feel free to play around with the code.

Nibbler

I listen to a podcast about pens. A weekly podcast about pens. Yes, there really is enough pen related news to have a weekly podcast. So much stationery related content in fact, that there are dozens (dozens!) of websites and blogs dedicated to the wonderful world of pens, pencils, paper and ink! Over time, I’ve slowly branched out from a few core pen blogs to more than I can name off the top of my mind. I decided to make Nibbler, a free, little iOS app for aggregating pen and paper news.

Why make a pen news app? I could easily add all of these sites to an RSS reader, just like I do for all my tech news sites, but it just didn’t feel right to me. A lot of the posts from these pen blogs often feature well composed images of the shades of a new ink, the body of a fancy pen, etcetera. Most of the RSS readers I’ve had experience with on iOS don’t do a great job at showing off these pictures while browsing through posts. They also take out a lot of the stylized flair that gives the site its character. While browsing through the posts from dozens of pen blogs, Nibbler presents the leading image of each post. I’ve found some of the photos lead me to tap on posts I normally wouldn’t have an interest in (I might have a budding pencil attraction).

So, how does it work? At launch, Nibbler pulls in RSS feeds from two dozen pen, paper, and pencil blogs. Each of these RSS subscriptions can be toggled on or off, so if you are just sick and tired of looking at Ed Jelley’s beautiful photography (I do not think this is humanly possible), you don’t have to.

With all of the RSS posts loaded, a nice visual feeds shows off each post’s leading image and title. Tapping on a post opens up a full web view of the article, showing off the complete website. If the user prefers, Safari’s Reader Mode can be enabled, which simplifies the page, showing just the article text and allowing the user to set a preferred font and background color.

Apart from Reader View and subscription preferences, there are also themes and alternate app icons! Colorful, ink inspired themes and icons (a dark mode too)! I’m a big fan of apps with dark modes and the ability to make small tweaks. When making Nibbler, I knew there had to be a variety of themes and alternate icons to pick from. Also, as a pen person (dare I say addict?), I switch inks out of my pens depending other the weather, of course I’m going to want to change the way my app looks. The themes are based off of some of my favorite inks, and I will be adding more in the future. All current and future themes/icons are unlockable via the Nibbler’s only in-app purchase for $1.99 (I need a way to feed my habit, okay?)

I’m fairly new to iOS development and Nibbler is my first real app in the App Store. I’m a little nervous putting it out there. It’s something I’ve put dozens of hours into. I hope that people will like it and find it useful, discovering new pen blogs and enjoying the way the app works. I’ve loved working on this app, and could continue pushing out the release forever, continually adding new features, telling myself that it’s not quite ready yet, but I think it’s at a good state for a 1.0. If you find any issues, have an idea for a feature, or would like an additional blog added to the feed, send me an email or reach out to me on Twitter.

You can find Nibbler on the App Store.