Blog

New article published: migrating data from Lite to Paid iPhone applications

Posted: Jun 29, 2009 by Billy Gray Tagged iphone, tutorial, migration, sdk, data

Stephen has a new tutorial published over on Mobile Orchard, in which he introduces a means of migrating the data from a so-called “Lite” application to the paid version. A lot of apps don’t provide this facility, and others use (or suggest using) a server component, which can add considerable development overhead. Our solution, which we use for Strip and Strip Lite, is really easy to implement and the migration happens on the device itself. Check it out and let us know what you think!

Quote: Only the Art is Irreducible

Posted: Jun 29, 2009 by Billy Gray Tagged art, trismccall, michaeljackson, quote

Musician and writer Tris McCall:

michael jackson’s death may hasten the day when we put aside the garbage once and for all and hear only the music. but that was bound to happen anyway. gossip is gas and dissipates; only the art is irreducible.

A tremendous and inspiring thought.

Fresh Gear

Posted: Jun 26, 2009 by Billy Gray Tagged zetetic, apparel

I’m very excited, our man Bret Morgan from Bands On a Budget just sent us a pic modeling our new t-shirt:

I know it’s not as design-intense as those South-East-Asian Zetetic threads (I never did figure out how to order from them), but I’m stoked. We just ordered these to have for friends and fam, but if you’ve got to have one, hit us up.

The Unofficial iPhone SDK Feedback Project

Posted: Jun 26, 2009 by Billy Gray Tagged iphone, feedback, apple, mobileorchard, project

Now this strikes me as a very good idea:

…there isn’t an acceptable way for iPhone developers to constructively provide feedback with gravity.

Sure, Apple takes bug reports. However, the system is effectively opaque. Is the submitter alone with his/her issue, or does it effect a silent majority of developers? Furthermore, while bugs are objectively resolvable, they’re a subset of the much larger category of subjective feedback, e.g., policy/behavior changes.

There is evidence that Apple responds to constructive feedback: They dropped the NDA, they’ve reversed app rejections (e.g., Eucalyptus), and there are reports that they actively try to avoid bad blood.

So, to provide the iPhone developer community with a mechanism to collectively submit constructive feedback with gravity to Apple, I’m pleased to announce: The Unofficial iPhone SDK Feedback Project

I’ve already created a nugget of feedback, go vote it up and help out your fellow devs!

Rocking the People

Posted: Jun 25, 2009 by Billy Gray Tagged music, benfranklin, rocknroll

This post is a tad off-topic, but I know some of us share this sphere of interest. I recently got a great write-up for a show my band played in Brooklyn:

There are no airy disco beats, no acoustic jams, and certainly no taking of prisoners as Ben Franklin is a live act that goes for the jugular with every song. Even the borderline kitschy, “Timmeh,” dedicated to our Treasury Secretary Tim Gieger [sic], is a sludge rock tune that sounds like Dinosaur Jr.’s J. Macis if he ever got the rocks removed from his mouth and asked, better yet demanded, “Where are my taxes?!”

Not bad. I didn’t know that we could be described as “neopunk,” and I never would have thought “sludge rock,” but this is not a review to complain about.

Rocking the Podcasts

Posted: Jun 25, 2009 by Billy Gray Tagged mobileorchard, podcasts, stackoverflow, savagelove

I spend quite a bit of time in front of a screen all day hacking away, so I love to put on WNYC in the mornings, sip my pot of coffee and get to work.

Lately, however, I’ve taken to following more and more podcasts. This morning, on the walk from Greenpoint to Williamsburg Coworking I found myself listening to Stack Overflow, which is getting more and more entertaining as the weeks go by. The guest on the current episode is Damien Katz of Couch DB fame, who we saw give an incredibly inspiring talk at Ruby Fringe last year. The conversation ranges from fascinating computer science to some lively anecdotes about IBM (“full of douchebags”), Erlang, and Lotus, which keeps re-appearing in tech conversations lately. I’m only 40 minutes in, and it’s been fascinating.

Yes, I know I’m a nerd. But if you’re in the business, this is pretty interesting stuff. And we are totally in the business.

Another ‘cast that I look forward to every week is Dan Grigsby’s Mobile Orchard Podcast, focusing on iPhone development and the iTunes App Store. Dan keeps the topics very technology focused, but some of my favorite moments are when the guests (who are always iPhone developers) and Dan (a great developer himself) go into the business aspect of things. Few people have such a magnetic focus on market trends and data, and it also frequently turns up in Dan’s writings. Full disclosure – we were interviewed recently for this one.

And then there’s Savage Love, which is not even a little bit tech-related; it’s Dan Savage’s relationship advice column gone wild. Not safe for children, no, but very, very entertaining. This one can get a bit distracting, I’ll admit, but I absolutely cannot help but listen every week, it’s great.

How Can You Go Wrong With Giant Robots?

Posted: Jun 24, 2009 by Billy Gray Tagged giant, robots, transformers, movie, review

Apparently Michael Bay shows us how. Very funny review of the new Transformers movie, via @warrenellis.

Expanding the Tempo Beta

Posted: Jun 24, 2009 by Billy Gray Tagged tempo, redesign, beta, announcement

As the regular readers and some of our customers know, we’ve been running a limited beta test of the newest version of Tempo. At this point we’ve gotten quite a few big bugs and show-stoppers out of the way, and we’re ready to let everyone have at it. Hopefully, this will help us uncover any lingering issues, nagging nuisances, and hidden bugs. It will also introduce the new interface to everyone! We hope you not only find it easy on the eyes, but more importantly that you find it extremely functional and efficient.

We worked very closely with nGen Works to design this interface, bringing to them all of the concerns and difficulties our customers have expressed over the last couple of years. It’s a radical change, design-wise, although all the functionality we know and love is still there and improving. It will take a little getting used to, for sure, but we’ve found that after even just a little time in the new interface we can’t bring ourselves to use the old one anymore.

Without further ado, you can join in the beta here:

https://beta.keeptempo.com

  • Your web-browser will likely balk at the SSL certificate with a warning – we assure you that it’s safe to ignore this warning and proceed, it’s a self-signed cert.
  • This is live data, your data!
  • You can always go back to the current interface at this link.

So kick the tires, spend some time with it, and tell us what you think. The end-of-month is coming up, we’re particularly curious to see how it holds up for others when it’s time for billing — it was all aces for us last month (after we fixed a few bugs).

Future Ruby Panels

Posted: Jun 24, 2009 by Billy Gray Tagged ruby, future, conference, toronto

As the Future Ruby conference in Toronto draws near, I’m getting more and more excited about the event. Within the last day or two the full list of speakers
has been posted on their site along with summaries of the talks, and it’s eye-popping. They range from the philosophical to the far-out to the highly technical. Programming with DNA modules? What?


def MajorKusanagi
  mixin homo_sapien, cyborg

  add :xray_vision, :therm_optic_camouflage
  suppress :cancer
end

I’m particularly looking forward to experiencing another Giles Bowkett presentation, learning about the Rhodes, Cucumber and Tokyo Cabinet projects from the people behind the tech, and attending another FAILCamp.

We did a lot of chatting with people at Ruby Fringe last year, it’s a good place to put your finger in the air and see which way the winds are blowing. I’ll be curious to see how many of the folks are moving into iPhone and other mobile platform development.

I think there are still a few tickets left — you should come! You don’t need to be a Ruby programmer to dig on a lot of this.

Amanda Palmer Shows Them How It's Done

Posted: Jun 24, 2009 by Billy Gray Tagged twitter, amanda, palmer, dresden, dolls, income

One of my favorite artists, Amanda Palmer of the Dresden Dolls, has managed to make more money over Twitter in 10 hours ($19,000) than she has from her recent major-label released album ($0). She’s got a great write-up describing how she did it, but the main points are brilliant and obvious — she’s dealing direct, she’s giving the people what they want. This isn’t so much surprising as it is one of those bell-weather moments for the music industry. It’s also the first time I’ve actually heard of anybody really making money off Twitter, and it’s nice to see it’s not one of those “Internet marketing experts.”

iPhone SQLite Encryption with SQLCipher

Posted: Jun 16, 2009 by Billy Gray Tagged iphone, sqlite, encryption, sqlcipher, tutorial

Just a quick note that Stephen’s tutorial on building encrypted iPhone applications with SQLCipher has been published by the fine folks at Mobile Orchard. Thanks, Dan!

Keep the Criticism Coming

Posted: Jun 16, 2009 by Billy Gray Tagged iphone, development, badreviews, apple

There were some very discouraging signs from Apple out of the WWDC with regard to iPhone developers and the App Store review process, but it sounds like the pile of online criticism is having some effect on them:

I also learned, through various statements and implications, that the App Review team tries to actively avoid major blog publicity about bad rejections, and it’s something they take very seriously. This means, fortunately for us as iPhone-dev bloggers, that we matter and we should continue to bitch incessantly whenever anything is rejected for an invalid or ridiculous reason..

Getting Tagging Right in Tempo

Posted: Jun 16, 2009 by Billy Gray Tagged tempo, ux, tagging, design, interface

This post is mostly concerned with the beta version of our time-tracker, Tempo. Every time we do a redesign round, we try to fix nagging issues with the UI, and I think we may have actually made a long-overdue improvement to how tagging works.

Being able to arbitrarily tag time entries is one of the things that makes Tempo’s reporting so flexible and dynamic, but it comes with some trade-offs over more static associations that other time trackers use (e.g. Activities, Tasks). One of the many benefits of using tags over tasks is that there’s no need for an administrator to set up your activities in advance – when you need a new label for an entry, you just use it. However, such dynamism can be pretty confusing to those who are entirely unfamiliar with the ideas of tagging and meta-data — which is a lot of people. Some new users end up looking at the new entry form and ask, “how do I designate my time?”

Once you explain to new users how tagging works, their next obvious (and reasonable) question is “how do I know what tags to use?” We were recently assisting a new client shop that was starting to use Tempo, and one of the main concerns there was the possibility that people might use different tags to label tasks that needed to be grouped together, that one person on their team might bill their consultation hours as ‘meeting’, while another person might use ‘meetings’. Clearly, we want new users and teams to be able to hit the ground running, so this needed to be fixed1.

To make matters more interesting, our current interface could become quite cumbersome for anybody using tags extensively. The control for adding tags is just a text-field, so all you need to do is type them in. But users sometimes want and/or need to see the tags they’ve already used. To solve this we provided auto-complete (a type-ahead suggest) on the field itself, so that if the user pauses while typing, suggestions are given based on tags they’ve already used. In addition, there’s an optional display of all tags on the selected project that the user can choose from. Predictably, this list gets pretty big, pretty fast:

What to do?

The first thing we decided to do was to give projects a set of “preferred tags”. When a user sets up a new project, she can now assign a list of tags that her teammates could/should use when billing their time:

From there we put together some custom SQL to roll-up the most frequently used tags on a project (the top ten), as well as a union of those frequently used tags with the project’s preferred tags. It’s this collection that we now display for a user in the entry form, below the tag field:

As the image shows, the preferred tags from the previous image now show up alongside popular tags on this project, such as “thuglife.” (Image was taken from our testing account.) If it’s not already apparent, the user can click on any of the tags, causing the tag to be added to the tags field. We think this solves a few problems:

  • It’s more apparent now that the Tags field is for labeling one’s time.
  • A new user can see what tags are commonly used and/or preferred.
  • The list of tags shown will only grow to 10 + (Number of Preferred Tags).
  • We retain the text field for quick entry by advanced users.

This updated interface is now in place on the Tempo beta site. If you’d like access to the beta, please get in touch, we could always use more help tightening all the screws.

1 It should be noted that the batch tags interface allows a project manager to combine, add, and remove tags from all entries in a report. This provides a facility for cleaning up entries that may have been mis-tagged.

Deep Thought

Posted: Jun 12, 2009 by Billy Gray Tagged deepthought, GUID, haiku

GUID collision
inevitable, but we
live with the odds

Lifted from Mr. Kradel. I know, I cheated a little.

Facebook Helper Lib

Posted: Jun 10, 2009 by Billy Gray Tagged iphone, sdk, mobileorchard, facebook, helper

Dan Grigsby has put together a helper for doing simple Facebook status updates from an iPhone app with a minimal amount of fuss.

Ignore the pirate-speak, that’s my lang setting on Facebook


- (void)session:(FBSession*)session didLogin:(FBUID)uid {
	fbHelper.status = @"is learning to set Facebook status programatically from an iPhone";
}

Most excellent.

APNS: Help Wanted?

Posted: Jun 10, 2009 by Billy Gray Tagged apple, push, notification, service, iphone, sdk, developer, community

Received in email from Apple:

As a developer actively working with iPhone OS, we would like your help in a private test of the Apple Push Notification service. For this test, we have selected AOL’s AIM Developer Preview for iPhone OS 3.0 to create a high-volume test environment for our servers.

I wonder if they are hoping to drum up interest and adoption of PNS, which has received a luke-warm reception from many developers. Putting that aside, I’m surprised to see Apple asking the developer community for help, pro bono. Considering how consistently poorly they treat third-party developers, that’s some nerve.

Tempo API Changes in Beta

Posted: Jun 10, 2009 by Billy Gray Tagged tempo, updates, api, beta, rails3

As we’ve mentioned before, we’ve got a beta of the next version of Tempo running. Most of the changes we made were with regard to user interface, but there are a couple of changes and enhancements (we think) to the API.

Accordingly, I’ve updated the API documentation (this was long overdue), leaving a beta notice on new methods and methods that are changing or going away.

If you have code that relies on the Tempo API, please get in touch with us so we can point you at the beta URL and help with the transition.

To summarize the changes:

  • We are introducing a reports API. It’s not complete, but it’s a start.
  • By popular demand, /entries, /projects, and now /reports support an id[] parameter for pulling specific entities in one call.
  • Searching for entries has been moved to /reports/search GET, replacing /entries/search POST. The /entries/search URL will redirect to /reports/search for now, but you’re better off migrating sooner than later.
  • The /entries GET method used to provide the same data you’d get from /entries/search if you didn’t specify any search criteria — a default context. Instead, /entries will now provide a listing of your own entries.

Some folks have asked us for JSON support, and while we’d really like to provide that now, it will be somewhat burdensome to implement, and will be available to us out-of-the-box in Rails 3, thanks to the provides/display feature of Merb.

Wild Speculation on iPhone 3G S Hardware Encryption

Posted: Jun 09, 2009 by Stephen Lombardo Tagged iphone, security, crypto

At the WWDC yesterday Apple announced the upcoming availability of their iPhone 3G S. In addition to a host of speed optimizations and new OS features Apple announced some new security features for the 3G S models: “Hardware Encryption” and remote wipe.

Ostensibly, the plan is that if your phone were lost or stolen you could issue a remote wipe and be confident that your data couldn’t be accessed. This is a feature that security conscious companies expect based on their experiences with BlackBerry’s “Erase Data and Disable Handheld” feature.

It’s interesting, however, to take a close look at careful wording Apple has used in their communications about the feature:

“iPhone 3G S offers highly secure hardware encryption that enables instantaneous remote wipe. You can even encrypt your iTunes backups.”

It almost sounds like the “whole device” encryption is primarily used to drive the remote wipe feature, not as an active security measure in its own right. If the encryption were used behind the scenes to secure the data on flash, then the remote wipe operation may not delete data. It could just remove the key and the device would “instantaneously” be rendered inoperable.

If that is the approach used there are some potential security implications:

  • If the encryption is fully in hardware, is it really securing the device while running, or is it just enabling remote wipe? Will a strong passphrase (> 4 digits) be required to unlock the key? It’s not likely if background operations and software are running.
  • Next up – the remote wipe trigger. It stands to reason that the device would need cell or network connectivity to initiate a remote wipe. Could you effectively disable remote wipe on an unlocked device by putting it into airplane mode and shutting off networking? What happens if you pop out and replace the SIM card?
  • Finally, there is the matter of the encrypted backups. The statement that you can even encrypt your iTunes backups implies that the feature is optional and that backups wouldn’t normally be encrypted. This may in turn imply that iPhone application data is unencrypted when read off the device during a backup and re-encrypted for storage by iTunes. This lends credence to the idea that the scope of the encryption is limited.

This is all wild speculation of course, since very few substantive details have been released. While there is no doubt that the encryption features will enhance iPhone device security, it remains to be seen how the practical improvements will compare to the launch hype. I strongly suspect that highly sensitive information storage will still require dedicated security applications.

Zetetic is the creator of the encrypted iPhone data vault and password manager Strip and the open source encryption-enhanced database engine SQLCipher.

Deep Thought

Posted: Jun 08, 2009 by Billy Gray Tagged iphone, 3g-s, features, wwdc

I have enough trouble keeping my amp, guitar and pedals working without an issue on stage as-is, why on Earth would I want to involve my phone in that chain of potential failure between pick-up and and input jack?

As seen on Macrumorslive.com:

11:37 am Final demo — Line6 and Planet Waves. Together they are working on a solution to control your guitar and amp from your iPhone.

11:39 am More demo technical difficulties — trying to show how easy it is to switch between settings on an amp and guitar.

11:41 am Can adjust guitar tuning without actually physically changing anything — nothing can be demoed however, as the hardware accessory isn’t communicating with the iPhone.

That looks like fail to me.

Writing Inspired Software Using Crypto

Posted: Jun 08, 2009 by Billy Gray Tagged crypto, sqlcipher, strip, codebook, tainanmen, square, china, olympics

Stephen and I were just interviewed by Dan Grigsby for this week’s Mobile Orchard podcast. The subject of the interview was SQLCipher, an SQLite extension that provides transparent page-level encryption for application databases. We talked mostly about how SQLCipher works, Strip (our iPhone security app built with SQLCipher), the iPhone build process, and DOC cryptography classification. We even managed to crack some NSA conspiracy theory jokes!

I realized afterward that we didn’t spend any time talking about why we like to work with cryptography and what drives us to do it. I suppose there are quite a few different motivations for us, but being that last week saw June 4th, the 20th anniversary of the Tienanmen Square Massacre, I found myself looking up Tank Man again. Mostly I was thinking about the legacy of his action and that iconic photograph, but I was reminded of why we value cryptography in software.

I have a number of friends who were in China during the recent Olympics for various reasons. One was there to document things that foreign media were forbidden to cover – like the many protests that were squashed outside the stadium. My buddy @noneck found himself in some “interesting” situations. He was eventually picked up by the authorities who went through his personal items, used his credit cards and forged his signature to deport him back to the U.S. You bet they went through his iPhone looking for potentially incriminating data.

Other friends were there to work with the Free Tibet movement, and they had iPhones, too. If they’d been picked up, and their phones contained incriminating information, notes, audio, contacts, etc, it could have severely compromised their freedom and safety, not to mention their particular mission. Obviously, these are chances that Noel and the others were all knowingly taking, but I’m glad they all made it home safe.

When they came back and told me their stories, I was struck by a thought. Smart phones present amazing capabilities, like video recorders and audio recorders, that can enable people to act as journalists and/or mobile broadcasters. Information is power but sometimes it is dangerous. Even having an audio interview on your phone could get you in a lot of trouble if you’re detained by people with an axe to grind.

Unfortunately the access code on an iPhone, like the on-screen locks of most mobile devices, is not a strong barrier to accessing data stored on the device. More and more of us are taking personal photos, videos, writing notes, storing valuable contact and business information, and utilizing applications to which we grant access to our online identities and social networks.

I want to create mobile software that treats this confidential data securely. That’s why we’ve been developing a suite of applications aimed at people who need to keep secrets. Strip, our password manager and data vault, can store all types of security credentials, financial and contact information. Codebook will soon fill the real need for a dedicated secure notes application, and will add some features that we feel are missing in the Apple Notes. We have a secure audio recorder under development, too.

More importantly, SQLCipher makes it possible for other iPhone applications to provide this kind of security without adding significant complexity. It’s open source and on on GitHub so we hope to see it used in other applications some day. The Mobile Orchard interview provides some details about how it works, and how we hooked into SQLite to provide the encryption. We’ll also be publishing a tutorial shortly describing how to set up the Xcode build process step-by-step.

If you’re going to Apple’s WWDC next week, and you find yourself looking to start a new app, we hope you’ll take a look at SQLCipher. Get in touch with us if you have any questions! We’re also eager to collaborate on development, especially with porting to other platforms (some folks have already show interest in Android, CoreData, etc).

Twitpocalypse

Posted: Jun 05, 2009 by Billy Gray Tagged

For anyone else out there who has code or services integrated with Twitter, you should take a look at this soon.

The Twitpocalypse is similar to the Y2K bug. Very soon the unique identifier associated to each tweet will exceed 2,147,483,6471. For some of your favorite third-party Twitter services not designed to handle such a case, the sequence will suddenly turn into negative numbers. At this point, they are very likely to malfunction or crash.

Time to haul out some BigInt action.

The Flag of Earth

Posted: Jun 05, 2009 by Billy Gray Tagged design, space

A rather cool piece of design, seen via Warren Ellis.

A Good Sign

Posted: Jun 02, 2009 by Billy Gray Tagged tempo, ngenworks, timetracking, ux, beta, ui, design

Every time we re-work the user interface for Tempo (we’re now upon our third major overhaul), the same thing happens and it doesn’t take long: I can’t stand to use the old/current interface any longer. The new design by nGen Works is no exception, it totally blows away the last iteration, and I think we’ve very nearly nailed down all the nuts and bolts.

I’m really excited to start the beta and get some of our customers’ feedback. A big thanks to those of you who wrote in asking to participate! We just have some administrative details to take care of and we should be rolling soon. If you’d like to participate in the beta and this is the first you’re hearing of it, just send us an e-mail.

A couple things of note:

  • You will be able to use either the beta interface or the old interface.
  • You will be working against your live, production data