Updates on Apple / PhoneGap

Things have been busy over the past few days, which is the reason why I haven’t had a chance to post about this until now. But for the PhoneGap community, I have some good news and some bad news.  First, the good news: I got a phone call from the Apple app reviewer that was reviewing my test app.  And before I go any further, I want to say a few things.

When I crafted my original letter to Apple, I was very cautious how I wrote it, because I don’t want to give anyone the wrong impression. I don’t have any problems with Apple or the fact that they have an app review process. I actually think the strict regulations Apple has with its review process is a good thing for users. If left to their own devices, app developers would release anything and everything whether it had merit or not, in the hopes of earning even a tiny bit of a buck.

That’s not to say that I have nothing but a big warm and fuzzy feeling for the review process, just that it’s like going to the dentist. It’s painful, but you’ll thank them later in life when your teeth would otherwise be falling out – or, in the case of the App Store review process, when the app store would otherwise be overrun with endless seas of buggy and non-functional crap.

Most developers out there seem to vilify the app reviewers, making them out to be legions of sadistic bureaucrats who like nothing more than to waste developer’s time. I’ve never been comfortable with that, because people simply don’t work that way. The app reviewers don’t have an easy job.  They’re not developers, they don’t know how to write apps, they just review them to ensure they meet the guidelines Apple sets forth.

So when they reject your app, it’s not because they’re out to get you, they’re just enforcing policy.  If they make some assumption about your app, perhaps you’re not giving enough information to help them along?  There’s a comments field that you can use to help the reviewer of your app do their job, instead of throwing an app over the fence and saying “Here, take that”.  They don’t owe you anything, and are simply making sure that they cover their asses.  Could you imagine how bad it looked on the guy who reviewed the “Shaking Baby” app? I’m not sure if he lost his job, or just got seriously reprimanded, but this is the sort of thing these guys are trying to prevent.  But because of the black-box nature of the whole process, it’s easy to jump to conclusions.

Finally, before I dig into the meat of my conversation with my App Store app reviewer, I want to point out a few things that many developers seem to have forgotten in their haste to get their apps released:

1.    The app store is a voluntary process; you don’t want to play by their rules, you don’t have to.
2.    All developers signed an agreement that states Apple can choose to reject any apps they want based on their own reasons. There’s no human right’s violations committed when Apple decides that your app isn’t fit for the store for some reason.
3.    Apple is a business, whose goals are to advance their stock and market position for their investors. While some of Apple’s decisions may seem confusing from outside the black box, keep in mind that they are prone to keeping secrets until they throw down their big announcements at whatever annual conference they’re attending. So there are sometimes more reasons why they wouldn’t want some feature leveraged by app developers if they plan to do something much the same themselves. Is it fair? No. Is this what they’re doing? I have no idea, this is speculation on my part.

Now that I have that out of the way, I’d like to relate to you my conversation with Steve from the App Store.

Continue reading “Updates on Apple / PhoneGap”

A Git Workflow for Agile Teams

I’ve been using git for all my new software development and have been converting my old Subversion (and gasp CVS) repositories over. Throughout this process I keep learning more and more about git, and my love story with it continues every day. Thanks to my friend Chris, he sent along this blog posting that really describes how you can do hardcore agile software development in teams with git. This really is helping me solidify in my head what it is I want to do, but have just never had the tools or know-how to put into practice.

At Hashrocket we use git both internally and in our Agile mentoring and training. Git gives us the flexibility to design a version control workflow that meets the needs of either a fully Agile team or a team that is transitioning towards an Agile process.

via ReinH | A Git Workflow for Agile Teams.

Ideas On Tap, or “Speed Dating for Entrepreneurs”

At the suggestion of my friend Scott McWhirter, I decided to go to Ideas On Tap and keep an eye on the pulse of the Vancouver technology community. And after spending an evening drinking beer and talking with various people from companies around Vancouver, I began to feel like the only married guy in the middle of a speed dating session.

I have a stable and intellectually stimulating day job that I have no plans of leaving anytime soon, but it was still a nice ego boost to be flirted with by so many companies looking for bright talent. In Vancouver, at least, it seems like if you’re smart and you are a creative developer, there’s work out there to be had. In fact they can’t seem to get enough. But unfortunately for them, a lot of developers here are in the same situation I’m in – happy with their current jobs, challenged but not over-worked, and not too interested in changing anytime soon.

I had an opportunity to meet John Chow with his camcorder, trying to get footage of women kissing one another, but the whole evening was basically one giant sausage-fest, as this tweet from him can attest.  I managed to meet one of the guys behind Mobify.me which seems to be quite an interesting product.  In fact, part way through the conversation he mentioned a great project called “PhoneGap” that they were recommending to people looking for more from their mobile platforms.  We both got a kick out of the irony that I’m one of the main developers of its iPhone branch, but nevertheless it was good to hear that other companies see the value in PhoneGap that we do.

The amazing thing was that the entire night was almost exclusively focused around mobile development and the mobile web.  It makes me confident that I’ve decided to play in the right area.  Not only is mobile development a blast, but it seems to be where the biggest focus is of entrepreneurs are these days.

Have a list of several hundred addresses to get coordinates for? Perl to the rescue!

I recently wanted to try my hand at writing a little iPhone app for helping students find University grant funding.  It turns out to be a bit more difficult than I’d expected, but part of the app was to be a listing of all the available universities near the student.  This, of course, would involve actually having a list of Universities.  To make a long story short, once I got the list (Wikipedia rocks), I needed to get their locations so I could do a proximity search from the user’s coordinates.  Since I didn’t want to spend too much time entering every one of the several hundred University names into Google, I decided to whip up a simple little script in Perl to do this for me.

#!/usr/bin/perl
use strict;
use warnings;
use Geo::Coder::Google;
our $apikey = 'Your-API-Key';

my $geocoder = Geo::Coder::Google->new(apikey => $apikey);

while (<>) {
    chomp $_;
    my $location = $geocoder->geocode( location => $_ );
    print "$_: ";
    if (ref($location) eq 'HASH') {
        print "n";
        print "    Address: $location->{address}n";
        print "    Latitude: $location->{Point}{coordinates}[1]n";
        print "    Longitude: $location->{Point}{coordinates}[0]n";
    } else {
        print "UNKNOWNn";
    }
}

If it wasn’t for Perl, this would be fiendishly complicated.  I just threw that in my ~/bin directory and passed a list of addresses to it on STDIN.  Or you could give it a list of files that contain addresses, one per line, and it will give you a YAML output of the results.  For instance:

nachbaur$ echo "University California San Diego" | ~/bin/str2geo.pl
University California San Diego:
    Address: University City, San Diego, CA, USA
    Latitude: 32.854672
    Longitude: -117.204533

I hope you have fun with it.  It was easy to build, but writing little pipe commands like this makes using a Mac with Perl a blast.

I really need to broaden my music horizons

AFI - Decemberunderground

You know that feeling when you listen to a song that you love so much, you re-play it 3 times in a row? You also know that feeling when people tell you “ZOMG you’ve gotta listen to, you’ll love it” and you say “yeah yeah, sure, sometime…” and you never bother ’till “sometime” eventually comes along, and you think “Why the hell didn’t I listen to this earlier?!” Well, I’m doing that right now with “Miss Murder” by AFI. I’m on my 3rd play through in a row, and I’m seriously considering starting it over…

And yes, the song just ended…and I just hit the “Skip Back” button on my iPhone. It’s playing once more. Yes, it is ridiculous. Yes, I know this song will be stuck in my head for the next week. But at this moment, I don’t particularly care.

One of my friends, Chris Prather, who’s been telling me for ages to listen to this album just called me a “newcomer”. Guilty as charged.

So if anyone has any “ZOMG You’ve gotta listen to this!” music recommendations, leave me a comment. I’ll make sure to listen to them sooner this time around.

Build process experiments with PhoneGap

I’ve made some quick updates on the train this morning, and ended up creating a Bourne shell script in the iPhone directory of PhoneGap for renaming a brand-new PhoneGap fork to whatever your project is called. This also works with the previous changes I made to my buildprocess branch, meaning that when you’re done, you shouldn’t have any references to PhoneGap in your code at all. It also makes developing quite a lot easier, since renaming my XCode project file by hand is cumbersome, and needs to be done every time I start a new project.

Continue reading “Build process experiments with PhoneGap”

PhoneGap gets a fancy new demo

The PhoneGap demo is really starting to grow beyond the capacity of a single screen since tons of new features are being added all the time.  It’s even showing a few examples of the tab and navigation bar features, but they didn’t really do anything beyond just throwing out alerts and log statements.  I decided to change that to show just what’s possible with a PhoneGap app.

(Forgive me for the ugliness of the video…this is my first upload to YouTube, so I had assumed I could resize the embedded viewer to fit the aspect ratio of the original).

I’m pretty excited about it.  Not only does it give developers a starting place for developing apps, but it allows us to improve the demos to give the user a better experience.  I’d like to show a Canvas graph of the accelerometer values, or even show a rolling ball in a box to see how the accelerometer can influence JavaScript.