So yeah, Apple wants to remove the headphone port from the iPhone, apparently. Nilay Patel wrote a rant article on The Verge describing how removing the headphone port would be “user-hostile and stupid” (like, it’s in the title of the article). He makes a compelling, if incomplete, case for why it hurts you for Apple to force this change, citing the potential for a return of music DRM, need for additional pricey adapters, major compatibility issues, and the fact that nobody really wants this.

Nilay’s article is written under the argument that it would be “user-hostile” to remove the headphone port. I’m going to define this as acting against the user’s wishes, or being designed without the user in mind. It seems pretty reasonable that a user would not want hardware compatibility issues, DRM-encumbered music, or significantly more expensive headphones. And users already have lots of devices compatible with the 3.5mm headphone port. Therefore, to remove the port in a way that is not user-hostile and stupid, Apple would have to provide more value and benefit than they are taking away, on top of whatever new features they provide.

Following it up, John Gruber writes a rebuttal comparing this transition to Apple’s removal of floppy drives in the late 90s by writing about how this will be a positive for Apple. A rebuttal should address the core argument made, and John’s rebuttal completely fails to do that.

Read More

2011 is coming to a close, so I’d like to take a moment to highlight a few apps and games on Mac and iPhone that have been invaluable to me. I broke this out into four categories, each with two apps. I have purposely omitted iPad, because frankly, I rarely use my iPad (and I prefer the TouchPad over the iPad), and don’t feel I’ve played with enough iPad apps to really give it a fair shake. So I’ve left that off to focus on iPhone and Mac apps and games. I hope you’ll check out all of these great apps.

Read More

iCloud looks like it will be an incredible technology for moving app data between devices. This is inherently a good thing, and it will open avenues for many new types of apps. But, there is a fundamental problem. Right now, the only way to access it is through Objective-C APIs embedded into iOS and Mac OS X. Under the hood, they are obviously talking to the network and doing the business of syncing data, but that networking layer is not exposed or documented, and would have to be reverse-engineered in order to understand and use. So the only way for developers to move their data through this system is through a pre-compiled bundle that gets referenced within an application.

This has a few interesting practical repercussions. If you build an application targeting iCloud, you can only ever put it on two platforms – Mac and iOS. You will never be able to port it to Android, WebOS, Windows Phone, or the web (mobile or desktop). If you sync data through iCloud, And, you will never be able to have a server component that can do things with your data all the time.

Here’s some examples of what I’m talking about. In my To Do list app, Todolicious, one thing I would love to be able to do is to push badges to your iPhone and Mac showing the number of To Dos you have left. When you tap a To Do to mark it as done, suddenly all your devices would show the correct number on the icon. With the sync server I was building, this was fairly trivial; wait for the user’s list to change, and send a signal to push the count everywhere. But if I back Todolicious with iCloud, I have no way of speaking between my server and iCloud (and I’d still need a server of some kind to send the notifications, after all).

Similarly, if I were to build a web app version of Todolicious (which I was planning on), I could not get access to that data within iCloud at all. I’d have to have either to sync to both iCloud and a custom solution (unwieldy, poor UX and network traffic, and otherwise gross), or not load existing data at all (completely negating the benefit of having such a web app).

So there is a serious ecosystem lock-in problem for apps that wish to target iCloud. All of these problems go away when iCloud is made available as a server-to-server API. A big benefit in the promise of cloud computing includes service interoperability, but right now iCloud is merely a data silo. I have filed this as a bug, rdar://9598555, for a server-to-server API (through which you could build code that speaks to iCloud on your server or on other platforms). I dearly hope Apple addresses it.

Such a server-to-server API would drastically decrease the friction of setting up cloud services to complement an iCloud-backed app, and would lead to better apps and more pleased users.

Two years ago, I began working on a new Twitter client for iPhone, named Streamlines. I hinted at it about a year ago, and has been a driving force in my development of MGTwitterEngine and a ton of open source projects. I’ve come to the conclusion that I won’t have time to finish and release it, as there’s still probably another 6 months of development needed to really ship it, and hostility from Twitter and from users of other Twitter clients make effort into building one unsustainable. However, I think there are UI concepts in there which are totally unique and have never been seen before, so I’d like to share them with you before this project is lost to the annals of dead projects.

Read More

For a little less than a year, I’ve been writing code built atop Twitter, specifically Matt Gemmell’s MGTwitterEngine. I’ve got a few things running on this code, which I’ve not talked about publicly (other than minor hints on Twitter), but have been well-received by the few people who have seen it. Still, these projects have needed to extend both MGTwitterEngine and related libraries to add functionality or fix bugs. I’ll spend this blog post documenting some of those changes across the different projects.

Read MoreLink

I could not be more pleased about this news. iTunes 8.1, which was released about an hour ago, renamed “Party Shuffle” to iTunes DJ. I’ve used Party Shuffle for a long time as a queue of music to play for day-to-day work, and have been frustrated with Apple’s Remote iPhone app and its lack of support for Party Shuffle. But their 1.2 App Store update, also released earlier today, has full support for it.

iTunes DJ divides iPhone users into two groups – guests and, for lack of a better term, the admin. The admin’s iPhone is paired to iTunes as before, and they get the iTunes DJ playlist added. You can skip through songs, cast a vote (addressed below), and request songs. While iTunes DJ is playing, selecting a song anywhere else throughout the app brings up a menu asking if you want to add to iTunes DJ or play on its own.

Guests don’t have to pair their iPhones to iTunes. They get to see a modified Now Playing screen, devoid of playback control. They can, however, request songs for iTunes DJ, and cast votes for songs. When they request a song, it automatically casts a vote for it.

Votes are pretty simple on the facet, but appear quite useful. Songs in the queue can be voted on by anybody. As they get voted on, they are automatically resorted in the queue by number of votes. However, you might get some guy at the party vote-clogging all night; fortunately, votes can be shut off by the admin.

All in all, this is the Big Deal feature in iTunes 8.1, and seems very well thought out.