They Make Such Bloody Good Cameras
The iPhone makes it so easy to feel like a great photographer. The following photo was made in two steps: a quick one-off shot straight from the lock screen camera, and a VSCO Cam filter (with a minor crop).
This is one of the best photos I’ve ever taken, and it took less then sixty seconds to shoot, edit, and share it. Here’s the untouched original:
Bravo, Apple.
I Love Teleportation - A Summary of a Wishful Day
Despite being over an hour late because of a traffic jam on our way to the Athens International Teleport, our tickets were still valid.
After a simple security check, we walked straight though the gate, arriving instantaneously at the Indianapolis International Teleport.
We rode home in a quiet, clean, self-driving car.
Total travel time: two hours door-to-door.
I Hate Flying – A Summary of Our Day:
This morning in Greece, there was an hour-long traffic jam of a ten-minute stretch of highway on the way to the Athens airport. This made us miss all our flights. My sister in law says it was the worst traffic she had ever seen on that particular stretch of road in her entire life.
It took over an hour at the Athens airport to get the Delta people to find us a new flight home. Six hundred dollars later, we thought everything was going to be okay.
The Athens airport staff goofed and sent our baby stroller along with the regular baggage claim stuff so we haven’t had it to carry either Henry or his stuff all day. This would have helped with three flights between four airports.
The Athens Delta staff also didn’t check my wife and I into our correct seats, so we didn’t have seats next to each other – which is crucial with a baby. The Charles De Gaulle (CDG) airport staff had to waste another 20 minutes fixing our tickets.
Also, at the connection in Paris, my wife forgot her passport in the seat pocket of our previous plane from Athens. I had to sprint all the way back to the previous terminal at CDG, cut through a long line, convince CDG staff to search our old plane for her passport, and then sprint back to our new terminal.
Now, as soon as we landed in Atlanta, a nationwide Homeland Security computer outage shut down the US customs check-in, so we’re going to miss our very last flight, which is frustratingly just around the corner from where we are standing now.
And it’s now the shift-change for US customs here in Atlanta, so even though they have hundreds of people in line, they’re going to condense all the lanes down to just a few for the small night shift staff.
It smells like eight kinds body odor in here.
Somebody please “disrupt” this industry, preferably before our day is over.
Nota Bene – If you are one of the many people expecting to meet with me in person or over Skype tomorrow, my apologies for probably missing our appointment.
OvershareKit to be Maintenance-Only for iOS 8
Last fall, after I had finished the model controller layers of Unread, I felt a pit in my stomach. The next big task in front of me was sharing. I knew I wanted Unread to have lots of sharing options, but I dreaded writing them. I had already written tons of them in the course of making Riposte for App.net. Great sharing features are non-trivial to write. It’s even harder to make them reusable (Riposte’s were not). There are many concerns to think about:
- Interface – What will the share sheets look like? Should I use native view controllers, or roll my own? If I make my own, how will they work?
- Devices – Will the same designs work on both iPhone and iPad? If not, how will they differ?
- Accounts – For services not handled natively by iOS, how will accounts and credentials persist? Which sharing features won’t need accounts, and how do I distinguish them in code?
- Features – Third-party services like Pinboard have lots of extra options. Where do I draw the line between what is and isn’t out-of-scope for an RSS reader?
- Reusability – How do I write all this code so that it’s reusable across future projects?
- Extensibility – How do I architect all this sharing code so that it can be extended with more sharing options and alternate interfaces?
There was no way to tackle all of these issues within the limitations of UIActivityViewController
on iOS 7, which is why I decided to make OvershareKit. You can read the reasons in detail on OvershareKit’s Github page, but here are the highlights:
- It would be difficult to mix native and non-native sharing services.
- The user interface is not configurable, e.g. presenting a share sheet while in dark mode would result in a glaring white activity sheet.
- There’s no way to customize email and SMS sharing content without providing alternate UIActivity subclasses to replace the built-in classes.
Those are just a few of the reasons why I decided to build something like OvershareKit for Unread. Justin Williams was in a similar position with his projects around the same time, so we decided to integrate his code for managing system accounts into the broader framework that I had conceived.
Bear in mind that at the time OvershareKit was being developed, it was still unclear whether Apple would ever provide better inter-app communication and sharing APIs. After seven OS’s, it was easy to believe that Apple frankly didn’t care. I was frustrated by their lack of concern, and dissatisfied by the lack of an open-source framework to bridge the gap. It was my hope that OvershareKit would become more than just a pet project between me and Justin.
But now that the iOS 8 developer preview is here, with its powerful Extensions APIs, what should be done about OvershareKit? Extensions are Apple’s answer to the problem that OvershareKit was created to solve. It seems to me that it’s better for all involved – both developers and users – for any app that’s using OvershareKit to migrate to Extensions and the UIActivity frameworks.
OvershareKit is now an unnecessary middleman between users and services like Pinboard and Instapaper. Almost any service that users want to access via OvershareKit already has great first- or third-party apps on the App Store. The burden of responsibility should belong to them to provide great sharing features via iOS 8 extensions.
I think this should apply to all future OvershareKit development, too. For example, many of Unread’s customers ask for Evernote support. Evernote has a rich and complicated API. It doesn’t make sense for outside developers like me to spend limited resources building support for Evernote. I want Unread to have Evernote, but the costs outweigh the benefits. It’s a sacrifice I was willing to make back when Apple provided no alternative. But now that Extensions are coming, the math has changed.
I don’t plan on adding any new features to OvershareKit. I will make sure that all of its existing features continue to operate bug free on iOS 7 and iOS 8. It may take several months (or longer) for extensions to be developed for all the services that OvershareKit currently supports. In the interim, I want to be sure that apps like Unread can continue to rely on OvershareKit.
If you have an app or service you can’t live without, I urge you to write to its developers and ask them to consider adding support for UIActivity extensions in iOS 8.
Preferred Orientation
I’m pretty sure the following generalization is true, with few exceptions: every iPad app has been designed for a preferred orientation. I think this is true whether the designer was conscious of the preference or not.
iOS lock screen, awkward in landscape.
I’m not saying that the non-preferred orientations are poorly designed, nor am I saying that they’re not useful. I mean only that every iPad app has an orientation in which it looks and works best – the way we say of a person’s appearance that he or she has “a good side.”
Here are some examples, off the top of my head:
Landscape
Portrait
- iOS 7 lock screen (see above)
- Unread
- iBooks
- Instapaper
- Photos (especially shared Photo Streams)
Notable Exceptions
- Safari
- Diet Coda
- Editorial
- 1Password 4.5
- Path