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.

Osama bin Laden was killed on May 2, 2011 in Pakistan. It marked the end of a manhunt that lasted many years, against a man who funded and conspired to commit several attacks against many countries. bin Laden was the iconic figurehead of Al Qaeda, a brand which inspires fear worldwide. As time led on, it became increasingly less realistic to assume that he would ever face justice. His actions led to two (arguably three) wars conducted by the United States and allies against nations in the Middle East. The world watched Sunday night as President Obama said that his military action succeeded where two the prior presidents had failed at stopping public enemy #1.

I’ve reflected on this moment a lot over the last couple of days, and have had much difficulty in coming to conclusions on it. Was bin Laden’s death justified? I believe it was, given his actions against humanity. Was it morally justifiable to have him assassinated by a Navy SEAL strike team? Probably. Should he have faced jury trial like Saddam Hussain? Ideally, yes, but if the people in the house were firing back at the SEALs, they’d have to defend themselves. Is it equally justifiable to celebrate and revel in the death of bin Laden? I don’t think so. Celebration of death, especially one conducted by a government without a trial, is inhuman and barbaric; it inspires hatred of others, which perpetuates the cycle of terrorism.

But my moral decisions are based on my own past. I don’t even remember the 1998 US Embassy bombings that bin Laden’s al Qaeda conducted (I was only 11 years old then). My conclusions would certainly be different if I lost someone on 9/11, or if I lost family members in Iraq, Afghanistan, or Pakistan. Many others have provided their own insights, such as the fact that Obama did not attempt to bring him to trial. This is too complex an issue affecting too many people personally for it to have a simple right or wrong answer. Some things are neither right nor wrong.

What is right about all of this is that the symbolic head of the hydra of Al Qaeda (and by extension, of fundamentalist Muslim terrorism) has been cut off. To the United States, a symbol that inspires bigotry, hate, xenophobia, and fear of Muslims in the Middle East no longer exists. The face that has risen over the last two years from the ashes of the Iranian election and the uprisings in Egypt, Libya, and others is one of democracy and of youth. While the death of bin Laden will not suddenly cause racists to be less racist, it does have the potential for the US to come to a greater acceptance of those in the Middle East. And that’s morally right, it’s beautiful, and it’s inspiring.

In 2011, with Twitter and Facebook and SMS, we have the ability to blurt out our thoughts with little reflection. This event is not one that has a good or evil label, and one’s position should not be a knee-jerk reaction to how you feel in the moment. It is worthy of reflection by everyone, as everyone has invariably been affected by bin Laden’s actions in some way. This event has changed the course of some small part of history, and the true effects will be felt many years down the road.

Yesterday Twitter released a new set of guidelines to developers on what to build on their platform. In it, they took a pretty radical view at what is arguably the most popular type of application to build: the “mainstream consumer client”. There are easily hundreds, if not thousands, of these apps on the Twitter platform. However, as of yesterday, the official line from Twitter is “don’t build these apps any more”. This has upset a lot of developers of exactly this type of app (and validates my theory that getting out of writing Streamlines was a good idea!). This announcement will have a chilling effect on innovation, and will permanently and irrevocably destroy any semblance of trust remaining between developers and Twitter.

Read More

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

I booked my ticket and hotel room for the Rally to Restore Sanity the day it was announced. There were some clues of it happening on Reddit once the DonorsChoose campaign kicked off (where Colbert sent a personal message to Reddit when the donation total blew past $100k in 24 hours), so I was prepared when it was announced. Once it was announced, however, it was pretty obvious that nobody really knew what this rally would actually accomplish. Was it just to talk about how the level of political discourse had gotten completely out of hand? Was it to mock Glenn Beck’s 8/28 rally? Was it to drive youth turnout to the 2010 midterm elections? Or was it just an opportunity for fans of The Daily Show to meet up?

The truth is a blend of all of those, with different ratios depending on who you talk to. The event itself was rife with comedy and music. The signs and costumes were hilarious and well executed demonstrations of apathy and discontent with the process. The people themselves were extremely nice and polite. It was positive, not negative. It was nationalist, not political. And even if Stewart started his rally wrap-up speech with a rhetorical question of “what exactly was this?”, the message was clear, as it was when the event was announced: “take it down a notch, for America”.

Most of all, it was a wonderful vacation away from the political rhetoric that tends to get ratcheted up to its most extreme in the days before an election.

Read More

Twitter recently introduced a feature on its website called “Who To Follow”. This feature presents you with a list of people you aren’t following already, but who are active in your social graph. However, I happen to be very proactive in finding new people to follow through a variety of means, and have no need for Twitter to point it out to me. I thought it was a bit obnoxious to see, especially considering both of my first recommendations were people I had blocked.

This Safari extension removes that box from the Twitter homepage, whether you have it turned on for you or not. It’s a simple CSS stylesheet that sets display:none on that box. You’ll never have to see it again.

You can download it here. I’m still a bit new at Safari extensions, but it should auto-update in the future if I ever release an update.

Update 9/18/2010: Follow Freely 1.1 has been released, with support for the new Twitter web client. It also fixes the issue where Safari would constantly say there was an update available.

JailbreakMe.com is a website that offers visitors the ability to jailbreak their iPhone without a computer-based tether. It does this by exploiting the system-wide ability for applications to read PDF files, where an incorrectly-formatted PDF file can lead a hacker to do anything they want to your system. While this bug CAN be used maliciously to steal all the personal data from your phone, the developers in this instance used it to enable jailbreaking.

Others will tell you why you should or should not jailbreak your iPhone. Others will decry the developers for bringing to light a serious vulnerability in the iPhone OS. In this blog post, I won’t do any of that, but will instead point out some things you should and shouldn’t do if you decide to jailbreak.

Read More

For those that don’t know, I’ve been employed at Ambrosia Software for almost 2 and a half years. In that time, I’ve helped our team ship some great products, worked to massively improve the user experience on our web site, and expand our presence in and use of social media. It was a great ride that made me a better software engineer by an order of magnitude, and I am forever grateful for the opportunity.

As of this morning, I have accepted a software engineer position at ngmoco:). As part of this, I will be ramping down my current work at Ambrosia, prepping for a move to the San Francisco Bay Area over the next month. I will begin at ngmoco:) in July.

I am extremely excited for this opportunity to contribute to the world of social gaming, and look forward to what the next few years will look like. I wish my colleagues at Ambrosia Software the best of luck in the future.

Caboose is an app that loads notifications from the Boxcar service. It provides a reusable class for interacting with the Boxcar service for receiving push notifications. Currently it loads notifications for one account and dumps them to a Growl feed, but a full UI is planned.

A great app for viewing non-native video on the iPad.