Call for Beta Testers: WikiPad 2.0 with iCloud Sync

I’m in the process of updating WikiPad to support iCloud sync.  This will be the most major change to WikiPad since it moved from the Palm to the iPhone.

I want to make sure that the migration to iCloud is painless for existing users, and especially that nobody loses any data.

I’m looking for current users of WikiPad who’d be willing to take the time to beta test the new version prior to its general release. I’m especially interested in users who are running WikiPad on multiple devices, as the trickiest part will be handling sync between multiple conflicting copies of the same page.

If you’d like to help out, please sign up via TestFlight by using this link.

Thanks, and please stay tuned.

End of Summer: Globe Revisited

Summer officially ended Friday at 2:09 AM Pacific Daylight Time. My final app of the summer is a resubmission of Globe. The display looks exactly the same, but the touch UI is completely redone. The old, non-intuitive system had you dragging to spin the globe and tilting the iPhone to tilt the globe. The new version lets you “touch” the globe with your finger and move at around or tilt it up and down. To spin the globe, you just flick your finger. Response from people who’ve tried it hands-on has been universally positive. I hope you’ll like it. Moreover, I hope Apple’s reviewers do, so you get a chance to see it.

This ends the summer app-a-week experiment. I’ll still be writing new apps, but I won’t be releasing them on any fixed schedule. Also, for anyone interested in the iPhone development process, I’ll be writing up my “lessons learned” and posting them on this blog. Stay tuned!

Meet MultiTimer!

I’ve always found Apple’s built-in timer very restrictive. First, you can’t set it for less than a minute, and second, you can only have one timer running at a time. I wanted a list of timers, much like the list of alarms in Apple’s Clock app. For some reason, I envisioned sliders for each timer, so you could visually see how long each timer had remaining, and also so you could slide the slider partway to set the timer for only a portion of its maximum time. Just like how an old-fashioned kitchen timer may go up to 60 minutes, but you can turn the dial to 15 minutes if that’s how long you want.

This is an app I’ve wanted for a long time. I use two different time management techniques that both necessitate a timer. First, the Pomodoro Technique involves setting a timer for 25 minutes, and focusing on a single task during that time. Second, Getting Things Done recommends a “two-minute rule” for processing incoming items. That is, if the item will take less than 2 minutes to do, it’s easier to just do it than to create an entry on your to-do list for it, and process it later.

So when I’m spending a Pomodoro processing my email inbox, say I come across an email that says I need to renew my membership at a website. To do this, I need to go to the website and enter my new credit card info, and possibly take other steps. Before I start, I set my 2 minute timer, so I don’t get sidetracked by the task, and also so I get feedback on what I really can do in 2 minutes.  And the Pomodoro Timer also keeps on counting down.

Retrospective

On the whole, MultiTimer took 8 1/2 weeks from start to finish. That’s not a lot of time in the overall scheme of things, but way more than even the two weeks I predicted it would take. And somehow, “app-an-eight-and-a-half-weeks” isn’t quite as catchy. Here are a few things I noticed over the course of the project that I’ll be applying in the future.

What worked:

The big win this time round was the Pomodoro Technique itself. Starting the last week of August 29th, I realized that the app wasn’t getting anywhere, and I started doing Pomodoros. (Embarrassingly enough, using another iPhone timer, since mine wasn’t ready yet.)  That week I got more done than in the preceding weeks combined and I released the first beta that Friday. The final submission to the App Store came only a week and a half after that.

The other big win was outsourcing the icon design to Cari Class of Design Source Creative. This is the first time I’d worked with Cari. She quickly came up with the amazing icon you see at the top of this entry. +1 Would work with again.

What didn’t work:

I made the mistake of storing the timer settings using Core Data. I was seduced by how easily the Core Data template app handled table views backed by a database. But it turned out that Core Data required me to do a lot of additional work to handle things like re-ordering tables, and handling numeric data. In fact, the final breakthrough that led to me being able to ship was refactoring the Core Data code behind a wrapper class, so that the rest of the app didn’t have to deal with it. Once I did that coding flowed quickly and easily.

That’s not all, folks!

My app-a-week project officially ends next Friday, September 24th. I’m hoping to have another app completed and submitted by then, based on what I’ve learned in releasing MultiTimer. Stay tuned!

Update 9/23/11:

MultiTimer is now available from the iTunes App Store!

Velocity = 0.5

One of the big ideas I got out of Extreme Programming was the concept of velocity.  That is, the idea that a team can do only so much work in a given time. As we end week number 3, I think I’ve proven empirically that my velocity is roughly 0.5 apps per week. That is, I’ve produced roughly 50% of an app for the past 3 weeks now.  I’m now planning that my current and future apps for app-a-week will take 2 weeks total development time.

This week’s app is a timer app, and, as I’ve said, it’s about half done.  I’ll release it to beta testers shortly, and should have it polished and ready to submit by next Friday. In the meantime, here are a few screen shots to whet your appetite.

Timer main screen with 2 timers visible.Timer detail screen with timer settings

0 for 2

I’m just back from my promised 2 week vacation.  It’s been pretty much the only thing that’s gone right so far with the app-a-week project.  In addition to not releasing the app I had planned for week 2, I also was informed by Apple that Globe (the app from week 1) was rejected for having a bad UI.

Turns out, this is kind of hard.  I’m currently working on my planned app for week 3.  At some point, I’ll try to get the first 2 apps polished to the point where they are releasable.  But for now, I’m working on app number 3. It’s a variation on timer apps. I hope you like it.

Lessons learned.

At this point, I thought I’d mention a few hard-won lessons from the first two weeks, for my edification as well as yours.

What worked:

TestFlight. This is a free service that lets you manage iOS beta testing easily.  Your testers sign up through the site, and can then automagically download the beta from the TestFlight website directly to their phones. Previously, this required lots of mucking about with provisioning profiles. I highly recommend this service to anyone who’s beta testing iOS apps. testflightapp.com

WordPress. Converting the main Jera website to WordPress means that I can put up pages for new apps quickly and efficiently. The current theme is ugly, but this can be changed later without affecting the content.

What didn’t work:

Starting late. The first week I started late because I began the week working on the WordPress conversion, instead of the first app. The second week, I started late because I was still working on packaging the Globe app from the first week. If I’m going to get the app out on Friday, I need to get started on Monday, and have a prototype working by Wednesday at the latest.

Shipping a demo. When it became clear late at night on Wednesday 6/22 that the app I was planning to ship for week 1 wasn’t going to happen in time, I fell back on shipping Globe — an old demo app of mine.  I thought I could just polish it off and ship it, but that clearly didn’t work. Just because you have running code doesn’t mean you have a product. I would have realized this except for the next problem…

Ignoring beta testers. The beta testers all said that the UI on Globe was non-intuitive. I chose to ignore them, and Apple rejected the app for poor UI.

Diving too deep into new technologies. At this point, I’ve done a lot of work with UIKit, but not so much with OpenGL or any of the various sound APIs. So maybe choosing my first two apps to require deep understanding of those APIs wasn’t such a good idea.

Being out of town for week 1. I already had a weekend trip scheduled for Thursday and Friday of week 1, but I thought I could still finish on time, especially once I fell back on Globe. In an effort to polish Globe, I wanted to add the sun tracking feature. But I left the book I needed (Practical Astronomy with Your Calculator) at home. So I had to drive home to get it, killing about 4 hours on Friday, when I could have been coding.

Now I’m back from vacation, and making a good start on a brand-new app for week 3.  I’ll keep you posted on developments.

 

Globe 1.1.1

Screenshot of Globe 1.1.1, showing day over the Americas, and night over the Pacific.Over the weekend, I had a chance to slow down, and look at why some of the features I tried to add to Globe 1.0 weren’t working.  It turned out that I wasn’t computing surface normals, so the lighting wasn’t working.  As soon as I added normals, lighting started working.  So I present to you Globe 1.1.1, which shows the approximate area of daylight on the earth’s surface.  (Globe 1.1 failed QA because I had left some debug code in it.)

You’ll also noticed that I’ve cranked the resolution of the polygons up much higher.  When I first coded Globe, I was afraid of overloading the graphics processor on the iPhone, so I used a very coarse polygon mesh for the shape of the globe.  Over the weekend, I cranked up the polygons, and it still runs fine on an original iPhone.  Looks great, too!

I’ve re-submitted Globe to the app store.  I’ll let you know when it becomes available.

Globe

Screenshot of the Globe app running on iPhonePresenting my first app of the week: Globe.

My original plan for week 1 was to release a fairly innovative sound app.  But it turned out that learning Audio Unit and fast-fourier transforms in one week wasn’t going to happen.  I realized this late Wednesday night, so I took a page from the JoCo playbook, and dusted off Globe so I’d have something to ship this week.

Globe isn’t actually a new app.  In fact, I originally wrote it back in winter of 2008, before the iPhone SDK was even released.  I had just taken an OpenGL class at the Big Nerd Ranch, and wanted a project for myself to cement my knowledge.  I settled on a spinning globe.  Initially, Globe ran on MacOS.  I then ported it iPhone OS using the pre-SDK jailbreak toolchain. I chose OpenGL for my first iPhone project because I thought it would be more likely to run on under the (then rumored) official Apple SDK. I reasoned that Apple could change their own APIs, but not OpenGL, an already existing industry standard.

The code is very simple — I create a sphere out of a triangle mesh, and then texture map an image onto that sphere.  Then I rotate the sphere many times a second, and presto — animation!

The image is from NASA’s Blue Marble project.

In subsequent years, I’ve updated the app a few times to keep it current with Apple’s SDKs.  So, with a deadline looming I checked it into source code control (for the first time ever!), fixed a few glaring bugs, and shipped it off.  Unfortunately, I was unable to add any new features, both due to a lack of time, as well as my now-glaring lack of understanding of OpenGL’s lighting model.

To use the app, swipe left or right to spin the globe.  Tilt your iPhone to tilt the globe.

As always, I’ve posted this just after submitting the app to the app store (at June 24, 2011 23:59, according to their records — just made it!).  I’ll post a follow-up when it’s available for you to download.

An App a Week, All Summer Long

So I’ve been wanting to get into iPhone development more seriously than I have in the past, and I decided I needed a challenge.  For a long time I’ve been wanting to emulate Jonathan Coulton’s famous Thing a Week, only with software.  For those of you not familiar with Jonathan Coulton, for the year between August 2005 and August 2006, he released a song every week.  Not all of them were great, but several hits emerged, most notably “Code Monkey” and “re: Your Brains“.  And Jonathan Coulton established himself as a professional musician — that is one who makes a living off of singing and songwriting.

Of course, software is a little different than music.  Songs have no beta testing and  no maintenance.  Given the additional vagaries of software development, an entire year sounded like too much.

But summer’s coming up.  And surely I can do this for 90 days, right?

So I’m happy to announce my latest project: an app a week all summer long.  Let me explain:

1. I’ll release an app a week every Friday starting this Friday, June 24th, until Friday, September 23rd.

2. Release in this case means, “submit to the Apple app store, and create a page and a blog entry about the app on jera.com.”  When (and indeed, whether) you can purchase the app is up to Apple’s approval process.  Typically, they approve most apps in 7 days or less, so hopefully by the following Friday you’ll be able to access the app.  (I’ll make a brief follow-up post in the blog when the app passes or fails the review process.)

3. I’ll take two weeks of vacation off the weeks of July 4th and 11th.  That means no apps on Friday July 8th or 15th.

4. An app means either a brand new app, or the addition of an “apps worth” of significant functionality to an existing app, like WikiPad or Suggestifier.

5. Most apps will be iOS apps, but I reserve the right to release apps for other platforms from time to time.

If you do the math, that means I’m committing to 12 apps in 14 weeks.  Can I do it?  Stay tuned.

There: now it’s real because it’s on the internet.”

A Wiki for your iPad

WikiPad 1.1 has been approved for sale in the App Store.  This version includes full support for the iPad.  If you’ve already purchased WikiPad for iPhone, all you need to do is download the free update and you’ll be ready to go!

If you’re wondering how to keep your iPad and iPhone copies of WikiPad in sync, don’t worry. Sync support is coming soon.  Stay tuned!