God Bless the iPhone App Developers

I just came across a post by Michael Ash, describing the hoops he had to jump through to get an app in the App Store. After reading his account, my mind instantly wandered to the myriad of apps gracing the home screen of my iPhone and to the fact that most if not all of their developers went through a similar experience. When I think that most of the apps I use are actually free, I’m even more impressed.

As if jumping through hoops were not enough, thanks to Apple’s NDA, all these developers are working in localized vacuums. In development, the community is the single greatest asset. Being able to rely on the wisdom, insight, and forethought of others is a gift of incomparable value. As the few readers of my blog may be aware, I’ve had to learn both Django and Python from the ground up over the course of the last few months, and I shudder to think what that would have been like without a community to lean on.

It’s the final steps in Michael’s process that really got me, though. Apple rejected his app at one point due to a bug. If not for the nothing-short-of-insane NDA, that bug might not have been introduced. Michael may have been able to benefit from the experience of other iPhone developers at many stages in this process, resulting in, if nothing else, at least not wasting Apple’s time reviewing iterations of the app that were not yet viable. Each of the three times (!) that Apple reviewed Michael’s app, they could have been reviewing other apps waiting in the long line to gain placement in the App Store. For Apple’s own benefit, they should reign in that NDA, just so they won’t have to answer the same questions 100 times over or review the same apps scores of times as developers try to learn the ropes.

I’ve thought about hobbying around with iPhone app development, but frankly horror stories like this one (which actually and sadly is not really a horror story) scare me. But the answer probably isn’t going to come from developers and certainly not would-be developers. I think the only people Apple will listen to is their customers, the users of iPhones. This effects consumers as much as the developers, because it means slower and infrequent updates to the apps they use and many times paid for. It also means waiting for apps they need or want just as anxiously as the developers wait for them to be released. It means many good services may not take the time or effort to make an iPhone app, and that one is probably the most devastating of them all.

Seriously, Apple. What the hell?

  • Del.icio.us
  • Digg
  • Facebook
  • Google Bookmark
  • StumbleUpon
  • Technorati

McCain Believes You Are Stupid

I have long kept politics off my blog here, because my main goal is to provide help, advice, and just little things I have learned along the way to my peers and fellow web workers. However, you could say I’ve seen just about one too many McCain ads and when I came across a video from CNN, I figured the time to remain silent has passed.

McCain and his campaign have outright lied to the American public countless times over, and although Obama has disputed some of these, the response is not always as visible as the initial attack. The video below is from CNN, and goes point by point through a number of the blatant McCain campaign lies. I encourage everyone to watch it and make an informed decision on election day.

Before we get to the video, I’ll give the standard disclaimer and admit that, yes, I am an Obama supporter. However, whether you agree with Obama or not, surely you can agree that McCain’s tactics and blatant lies shows a complete disrespect for the American people and their intelligence. If you are a Republican, you can always write in Ron Paul on the ballot, a Republican who actually represents core Conservative values instead of Neo-Conservative philandering and profiteering. Or, vote for one of the independents, but now is the time to stand up and say firmly and surely that this old, tired game of politics is not going to work anymore.

With no further ado, CNN:

  • Del.icio.us
  • Digg
  • Facebook
  • Google Bookmark
  • StumbleUpon
  • Technorati

iPhone Sync: “Some of the applications in your iTunes library were not installed because one or more errors occurred.”

There’s a few people experiencing this error message when syncing their iPhones with iTunes. Some have suggested that the error can be solved by switching between syncing “All Applications” and “Selected Applications” or vice versa. However, this didn’t work for me.

Thinking deeper on the issue, I remembered that I occasionally updated apps on my iPhone, while other times I would update the apps through iTunes. Thus, I theorized that the problem was most likely a sync conflict. We know that application syncing is two-way. So if both the iPhone and iTunes are saying that they have an updated version, it’s possible that that could be the source of the error.

So, I tested my theory out. First, I went through my iPhone and removed all the applications listed in the error message. For those that don’t know, you can remove an app on your iPhone by touch-holding any app for a couple of seconds. This makes all the application icons start to dance about and little X’s appear on the top left corner of all non-native iPhone apps. Tap the little X icon to remove the app.

Next, I went into iTunes and to the Applications list under Library. I removed the same apps here by selecting each at a time and hitting the delete key on the keyboard. You can also delete by ctrl-clicking or right-clicking on the App and choosing “Delete” from the menu.

Then, I went back through the App Store in iTunes and re-downloaded the applications I just removed. Clicking the “Buy” button on already purchased apps worried me at first, but this support article from Apple said that it wouldn’t recharge, so I went ahead. Sure enough, I got the message “You’ve already purchased this application.” So, no problems there. (FYI: Make sure you check your bank account over the next few days if you do this. While you shouldn’t get recharged, Apple does allow for the possibility of this happening. If you do get charged, contact Apple according the the support article mentioned above.)

Finally, I synced my iPhone again. I did get the error message again, but all the apps were installed anyways. On further syncs, I have not gotten the error message again, so this seems to have solved the issue. Your mileage may vary.

  • Del.icio.us
  • Digg
  • Facebook
  • Google Bookmark
  • StumbleUpon
  • Technorati

Recovering a Subversion Repository After a Major Deletion

At the company I work for, we store all our client files in a subversion repository. As I walked through the door on Monday, I was greeted with the glorious news that all the client files were gone. Gone? Yep. Nothing. Nada. Blank repository. After a brief temptation to throw myself out our 25th floor window, I regained my composure and reminded myself that this was subversion: nothing is ever really gone.

svn log https://our.subversion.repo

Ah ha. At revision 5686 a “File/Folder was deleted”. Not very descriptive (thanks Subversion), but it’s the only reference to a deletion around the time the gates of hell opened and the spawn of Satan unleashed upon the earth.

So, I checkout a local copy of the current, destitute, repository. And try:

svn merge -rHEAD:5685 https://our.subversion.repo clients

And… drumroll… failure. Of course it couldn’t be that simple. Next:

svn up -r5685

Yay! Here comes all the client files… all… forty… six… gigs.

[flash forward one day]

So, I now have a local copy of the repo as it should be, but the actual repo is still empty. Now what? First, got to get rid of all those god-forsaken hidden .svn folders. I could simply run an export, but I really don’t want another 46 GB block on my computer. So I’ll use some find magic instead:

cd clients
find . -name ".svn*" -exec rm -rf "{}" \;

That took awhile. Now, all I have to do is checkout another working copy, move over all the files into the working copy, svn add and commit. No sweat.

Except…

Doh! Halfway into the process, the drive hosting the subversion repo reaches capacity and the commit fails miserably. At this point, I’m saying things I wouldn’t want my mother to hear. If you’re reading this, mom, that’s just a joke. I never curse.

Ideally, at this point, we’d go out, get a larger drive and move the repo over. Right. Have any of you actually worked in an office before? I’m told to delete the repo and re-import.

And, 6 hours later, our repo is back as it should be, only, at revision 1. If you haven’t guessed from the relatively low revision number mentioned previously, this isn’t the first time we had to start back at revision 1. Thankfully, there’s already documentation prepared (by me) for my coworkers to refresh any working copies they have on their computer.

I love my job.

  • Del.icio.us
  • Digg
  • Facebook
  • Google Bookmark
  • StumbleUpon
  • Technorati

IE6 is Dying but Not Fast Enough

IE6 has been the bane of existence for web developers the world over. It’s complete lack of standards-support, buggy rendering, and arcane handling of code make it quite the little gremlin. When IE7 was first released, almost two years ago (October 18, 2006), we all hoped that IE6 would soon meet its end, but unfortunately, we still are forced to support this nearly-decade old browser.

In truth, the idea of having to provide support is insanity. What would happen if you called up Dell to get support for your 8 year old PC? Or, perhaps closer to home, called up Microsoft for Windows Me support? Obviously, you’d be told to take a flying leap, though probably in a much nicer way. Yet, the web is different. When you code for the offline world, you get to specify where your application will and won’t work. Don’t want to support Mac, then don’t. Only want to work with Vista, no problem. But online, users come to your site with a million varying specs (operating systems and versions, browsers and versions, screen resolutions, etc), and all must be supported or you might lose a potential sale or just a potential visitor that could translate into greater consumption of your content or higher click-through rates on ads.

It’s all about market-share. If only 1% of users are using one browser, you can probably neglect support for that browser and still be fine. However, IE6’s numbers (even post IE7) were hanging high in 40-50% market-share. It’s a little harder to say “No Thank You” to half your site visitors. Now, IE6 is only holding on to somewhere in the neighbor of a quarter of the browser market-share (source: Net Applications). While still a significant chunk, this does free up some greater opportunities for us as web developers.

We can’t afford to simply deny support. But with IE8 now in beta and likely to be released sometime in 2009 (speculation), it seems like something should be done to push or encourage IE6 users to move on to something better.

My suggestion is to start a campaign of gentle nudging. Thanks to conditional comments, it’s possible to call in Javascript or additional CSS for IE6 users only. In so doing, we can begin placing upgrade messages in conspicuous places on our sites. They can still have the content and, sure, we’ll make sure it still looks just as good for them, but they’ll also get little notices telling them they should upgrade. What’s wrong with that? Since, IE6 is so old, it’s inherently less secure than other browsers, so telling them to upgrade is more a public service than a nag.

There should be conditions to this, though:

  • The site, as much as possible, should still function in IE6 as it does in other browsers. Simply disabling the site to IE6 users will make the message of upgrading lose its impact.
  • The message should be actionable. Telling them to upgrade is not enough; you must show them how and where or point them to some place where they can get that info.
  • The message should not be rude. We all despise IE6, but remember that our hate is towards the browser, not the people using it. Many times these people are simply uninformed or don’t understand why upgrading is important.
  • The message should not recommend one particular browser. I love Firefox, but at the end of the day, it doesn’t matter what they upgrade to as long as it’s not IE6. Some users will be hesitant to download new software, but selling the idea of updating their current software (to IE7) is usually easy. Let the user decide.

There’s a couple of sites that have already done the hard part for us: creating content that gives compelling reasons to upgrade and instructions for how to do so.

Save the Developers Save the Developers has a bit of javascript that will place an unobtrusive message at the top of the window encouraging the user to upgrade. If the user clicks on it, they’re taken to a page listing the four major alternatives: IE7, Firefox, Safari, and Opera with a few bullets detailing the benefits of each. I like their approach. However, more in depth information is lacking, and it’s possible the user may not see the need to upgrade based on what they get.

Browse Happy Browse Happy from the people at Wordpress is a much more informative attempt. They explain why IE6 is bad, breakdown the alternatives, and even have testimonials from people who made the switch. They also offer badges you can add to your site, but I doubt most users would see or care to click on them.

Of course you’re more than welcome to “roll your own”, as well. The important part is that we all get behind the idea of preaching the gospel of modern browsers to the IE6 heathens. </endBillyGrahamMoment>

UPDATE 07/03/08: Eerie timing on this post, as just today, 37Signals announced they’re dumping IE6 support, effective August 15, 2008. If some more big players would jump on the band wagon, IE6 users would have little choice but to upgrade. Kudos to the 37Signals team on making the stand.

UPDATE 07/07/08: Turns out Apple is also ditching IE6 with its new MobileMe service (via 37Signals)

UPDATE 08/25/08: SitePoint’s Josh Catone just published an article asking whether it was finally time to ditch IE6 support. Give it a read, cast your vote and digg it or whatever, so we can get some more exposure to this issue.

  • Del.icio.us
  • Digg
  • Facebook
  • Google Bookmark
  • StumbleUpon
  • Technorati

Managing Clients

“The Customer is Always Right” became the mantra of “good” customer service long ago, but the concept has actually done more dis-service to customers than anything else. The customer, or client in this case, is generally not right. It is our job as “producers” to guide the client, some times kicking and screaming, down a path that will lead to their ultimate betterment.

And, when you really think about it, how could it be any other way? The client pays an individual or company to provide a service. If that individual or company does not provide said service it’s a breech of contract. So what if the client wants something that will inhibit or prohibit the individual or company from providing said service? The answer is simple. It can’t be allowed.

Ultimately, more than time, skill, or effort, a client is paying for expertise. If the client had the expertise, they would, more likely than not, simply do it for themselves. And, since the client is paying for expertise, then it becomes our job as service providers to bestow on them that expertise, even if the client does not agree with or appreciate it. Otherwise, we cannot effectively do our jobs, and in the end the client doesn’t get what they need, even if they do get what they want.

That is what it boils down to, as well. Clients only tell you “wants”. As service providers, we must discern “needs”. Many times, the client himself is not aware of his needs, but we must be. We must be because you can give a client what he wants till kingdom comes and still fail miserably. In fact, I’d wager a greater likelihood of failing miserably simply because you are satisfying the client’s “wants”.

Kids, with few exceptions, love candy. They want candy, and you’ll generally have a very happy kid if you give them candy. However, what would happen if all you ever gave the kid was candy? He’d be malnourished; it would probably effect his growth. There may even be health complications that result from it. Would you call that a “service”? Of course not. Doing a “service” for the child is forcing them to eat their green beans. They’ll likely fight you, and they surely won’t be happy. But, in the end, they will be better for it.

Now, I don’t mean to say that client’s are like big children, but in many ways you do indeed have to manage a client like he was a child. True “customer services” is about more than a paycheck. It’s about leaving the customer or client better than he was before he met you. If you haven’t done that, you have failed. It’s ironic, perhaps, that the client’s themselves are generally the source of their own dissatisfaction, but that places all the more burden on us, the service providers, to take charge, tell the client what they need, and refuse to satisfy the wants that will hurt them in the long run. And, I think as we do that, client’s will actually respect us for it: respect us for stating firmly that we are committed to their success and we are not going to let anything within our influence effect their success, even if it’s them.

Or… Maybe I’ve lost my mind in a sea of idealism. You decide.

  • Del.icio.us
  • Digg
  • Facebook
  • Google Bookmark
  • StumbleUpon
  • Technorati

Rails Quick Tip: Bring Back MySQL to database.yml

In Rails 2.0, when you generate a new app, Rails defaults to SQLite3 as the default database adapter in database.yml. If you’d rather it generate database.yml for MySQL, you can use the following command to generate your app:

rails -d mysql myapp

Courtesy: Rails 2.0.2: Some new defaults and a few fixes

  • Del.icio.us
  • Digg
  • Facebook
  • Google Bookmark
  • StumbleUpon
  • Technorati