Saving the iPad — Building an app for myself
I have a clear memory of holding the iPad for the first time 10 years ago. It left like a magazine. I remember being surprised by the heft, wishing it were a bit lighter. I loved holding a display of that size in my hands. I loaded up a book in iBooks, and started reading on the couch. Later that night my wife and I took it to a cafe and played checkers on it. We probably looked like dorks.
At this time, I was still teaching at a (very) small liberal arts college in rural Indiana. I decided to teach as much from the iPad as possible. It was great to walk in to the classroom with just the iPad. I taught my lectures from PDF textbooks and notes I had written in Pages. I did grading and attendance in Numbers. Eventually I got tired of flipping between the apps, and made an iPad app for teaching in the classroom, called Teacher's Attaché. I could set up class schedules, import students, take attendance, set up assignments, grade, and so on.
The next summer I decided to put it up on the App Store, where it was fairly successful. Successful enough for me to rethink my teaching career. I ended up in the Bay Area the next year working for FitBit as an iOS engineer. Ironically, I started giving less and less attention to my app, and it died a slow death. There are some embarrassing old videos still around. (Although the design is a little out-there, it did the job well, and it had a decent audience.)
With that, my engagement with the iPad started petering out. Most of my day job has focused on building for the iPhone, and the iPad has usually been a lower priority for the products I have worked on. It does have its uses (I'll get to that in a second), but the heady romance of 2010 has plateaued.
Still, after 10 years and several models, the iPad is the computer I love. Or rather, the one I want to love the most. It has the potential for being the only computer I need. In the book Keep it Simple Bill Atkinson, along with Hesslinger, envisions a device they call "Mac Slate", a touch-enabled tablet (along with the "Mac Book" and a flip phone). It is uncanny to see the rough paper sketches from 40 years ago of this device that I am holding in my hand. But I can relate to how magical and capable this device would have felt to them.
To begin with, it is light. It can be held, unlike a phone that needs to be clutched or the laptop which stays shut when you hold it. You carry it like a book or a magazine. It has a big touch screen, so it is almost "hand interactive" in contrast with the phone which I consider "finger interactive". It is a uni-tasker. The iPad goads me to be creative: "read a book", "write a post", "make some music!". The phone is ideal for communication and navigation, but engaging with it is starting to look more like addiction. Unlike the iPad, I never feel "good" after using the iPhone. I would happily give up the phone for the tablet, if I had to keep just one.
The app ecosystem is rich enough to support a creative professional, such as authors, artists, musicians, and photographers. You would have give up being a Mac power user, but you would trade it for the flexibility and interactivity that the iPad apps provide. It would also do for folks who use the computer less as a production medium, and more as a utility in their profession: construction workers, small business owners, executives. As an aside, my parents (and probably a lot of non-tech savvy folks) love the iPad. They used to dread sitting in front of a computer and never took to it. The iPad has eased their technology adoption. Something that can move with them, and is not tiny like a phone. They use it to connect with others via Facebook, read news, religious texts, and literature; they listen to music, look up locations of interest, or watch movies. All in lieu of a computer.
But ironically, as an iOS developer, I can't make much use of it professionally, which is the mode I operate in for most of my waking hours.
What I have used it for
Reading books: It's fantastic as a handheld / lap-rested reader. However, after years of investing in digital reading, I think paper wins out over digital, especially for long form reading. So most of my serious reading is now done on paper books. For technical documents and reference books I have been using PDF Expert, Books for random ePUBs, and Safari Reading List for web articles synced across devices. It's a fantastic comics reader as well: I have used the Marvel app but also some CBZ readers. I hope we keep exploring new ways of reading on the iPad. There is some good precedent set by LiquidText, Our Choice, Madefire, and Touch Press' books. Even Apple's Books app allows for easily embedding interactive 3D content via SceneKit. David Rönnqvist wrote a fantastically designed SceneKit book that, very appropriately, used SceneKit to display rendered examples and interactive content.
Music: Making music with your hands is very satisfying. Garageband has tremendous depth: for an amateur musician it has everything I would need to make music, and then some. The music apps scene is an embarrassment of riches. A few that I have liked: Loopy, Capo, and Synth One.
Coding: I have used Pythonista a bit for building some workflow-y scripts. It makes me wish I did more Python. Diet Coda has been useful for editing things on the fly, but less so with the modern web with its build systems and static site generators.
Writing: I use iA Writer on the Mac and on iOS. It serves as both a notes storage and also for more longer form writing. On the iPad it's been not as useful since I haven't invested in a keyboard, but I use it a lot on the phone.
Gaming: The iPad is an obvious gaming platform but I don't play much any more. My son did a fair bit of gaming on it for a couple of years, but has now graduated to Apple Arcade on the Apple TV with the Xbox controller; it's fantastic.
Fixing the neglect
More than anything else, the iPad is situationally unfit for me now.
- I usually do not sit on the couch and kick back with the iPad; that's when I pick up a book
- I used to read a lot on the iPad mini on the BART; but the commute has gotten really short — 15 minutes — and I just read a paper book now.
- When I am at my desk, working, the iPad is usually just lying there, or worse: it is in my backpack.
- Recently, I have built a habit of avoiding reading news/tweeting/procrastinating on my "work computer", and only using the iPad for such tasks. But that (thankfully) is just a few times a day.
- I could use Sidecar, but I love the single monitor experience when it comes to work.
The work desk is still the best place for the iPad for me: I have the space and opportunity to use it, just not the right use case.
I wanted to build an app that would make my iPad useful while I am at my desk. More grandiosely, I want the iPad to succeed, at least for me.
What I wanted
There used to be an app called Status Board. You could set up a plethora of data sources and build dashboards, and then monitor everything in one place. There was a TV-out option so you could broadcast on the office TV. I did set up a few dashboards after downloading the app, but never really got in to it. Built by Panic, it was an ambitious app, and maybe that was its downfall. It was shuttered after it didn't make enough money for it to be financially viable.
But I missed it now and started thinking about how useful it would be. I came up with a list of data sources that, if I could hook up to an auto-refreshing dashboard, I would totally use as a desk top companion. Just a quick glance, and I would gain all the context I needed. No need to open a new tab (or ten), authenticate, navigate to the right page, scroll, filter, refresh…
I also had very specific needs: what books am I currently reading, how productive I have been today, do I need to leave for the BART right now or in 5 minutes, how many days until the party at the Habibis, what's on my queue in Asana, how are the Circle CI builds behaving, and so on… Basically any piece of information that lives on my device or has an API (and in some cases neither, which then requires some hacking).
What I built
I built an iPad app that does all of that and more.
The dashboard screen is a grid of panels, each panel showing some source of information. You can add multiple screens, which you can then scroll through horizontally. For now, I have a personal and a work screen shown here in dark mode:
Some panels that talk to a service (like GitHub and Asana) are tied to my accounts, so that I could avoid OAuth. Panels also have a custom refresh cycle, so I am hitting the BART API every 30 seconds, but not the Twitter API.
Here is an overview of some of the panels (some show fake data):
A simple clock that can also do 3D (just so I could play with SceneKit). I plan to add a pomodoro mode, and multiple time zones.
Shows departures at the nearest BART station.
Local weather (including tomorrow's). Served by the Dark Sky API.
Shows a scrolling view of all the books on my currently reading shelf on Goodreads. Their API is not the friendliest, but overall it's well-behaved. Auto-scrolls every 45 seconds.
Direct Messages on Twitter
I use an app called Qbserve that tracks my time on my Macs across various dimensions. One thing I wanted to track was how distracted or productive I have been for the last few hours. The app has a custom export option that can run periodically. I run a script on all my Macs that first fetches the previous data from S3, collates that with the current Mac's exported data, and pushes it back up to S3.
This panel fetches the S3 file, and then shows the information in a generic bar chart.
We use Asana at work. It has a slightly wonky API (probably a reflection of their slightly wonky data model and UI). The panel shows my tasks in the current sprint in a generic list view.
Personal tasks in Things
A script exports today's tasks from Things and uploads it to S3 (actually the Qbserve script and this script run together). Shown in a generic list view in the app.
Circle CI build times
A graph of the build times for the last 10 or so runs on Circle CI.
Circle CI build status
A detailed status of Circle CI's last integration effort.
How many days until some event.
Today and Tomorrow's events pulled from the iOS Calendar.
GitHub Pull Requests
All PRs assigned to me.
Generic List and Chart panels
The list panel for Things and the chart panel for CI build times and Qbserve are both generic, and can consume their data from a JSON file served from a remote URL.
The list automatically pages if there are more item than can fit comfortably. The panel then auto scrolls the pages.
It has been very satisfying to see very disparate information available at a glance by just shifting my gaze.
There are basically two groups of panels:
- those that reinforce good habits (these are the books I am reading, this is how productive I am, …)
- those that inform me about what is relevant: tasks, events, stuff to review
Both serve me admirably, but I am hoping to be a little creative and come up with more panel of the first kind.
One nice side effect has been that the app works on the iPhone and the Mac (thanks Catalyst!) as well. So, I can take it on the go, and also have it on the desktop when the iPad is otherwise engaged or forgotten at home.
On the Mac using Catalyst:
On the phone:
I definitely need more panels:
- for services I already have panels for, especially GitHub, Asana.
- for new services like Slack.
- some custom ones:
- an image carousel panel that loads from remote URLs
- a status tracker view again driven by custom data from a URL, but also from data from Asana and JIRA
- a package delivery tracker.
Some panels could drive mini notifications: Circle CI on failure, a new Pull Request, inclement weather, a new Twitter follower, and so on.
I love seeing the iPad on my desk again, put to good use. Building something custom to bend the device to my needs feels good. It's obviously not everyone's cup of tea, but if you are not an iOS engineer, then maybe you have already put the iPad to good use in your day job.
If you have any questions or feedback, please reach out to me on Twitter.