Jan 272009

Why is it that it always takes longer than what you expected? I stayed up way past my bed time last night trying to get iHappyBirthday 1.1 out the door.

We will also be doing a photoshoot of someone actually using the application as well as uploading a video to Youtube in the near future.

Version 1.1 delivers more features:

  • More full cakes (chocolate and a vanilla cake).
  • Randomized candle blow-outs.
  • New finale animation. You can choose from different finale animations.
  • Some bug fixes.

We’ll post a link to screen shots and the video once we have them.

For any users who experience random crashes with iHappyBirthday, please be rest assured that it is not a problem with the application. It is because the iPhone is running low on memory. For some reason, the iPhone does not seem to be too good at releasing memory when misbehaving applications are terminated. Also, you may have applications running in the background (mail, Safari, etc) that are taking up memory. We’ve added a warning message when the memory is running low so that you can take appropriate course of action. It usually suffices to turn the phone off and on to free up the memory. Or you can even download applications from the App store that will let you free memory as well.

Also, my partner will be posting our sales figure. We thought about keeping it private, but it is our belief that knowledge should be shared!

So keep your eyes peeled!

 Posted by at 8:44 am
Jan 262009

It’s Monday and this weekend has been an unproductive one for us. We planned on releasing version 1.1 of iHappyBirthday but that got delayed due to circumstances that probably weren’t beyond our control. And as I have the case of the Mondays, I’m going to post a motivational piece to jump start my week.

Way, way back when I was in middle or high school, I asked my math teacher, “Why is a negative times a negative a positive?”

My math teacher looked at me momentarily with a stunned look on her face, and after a moment’s pause, she said, “You know what, I don’t think your brain is capable of understanding it at your current level of development.”

I just nodded and came back to my desk.

The question of “why” is the most important question you can ask. We accept so many things as is just because we are told to. Or because we are led to believe that somehow we are incapable of comprehension. I believe that these self limiting beliefs are the worst things you can do to yourself and the best thing you can do to sabotage yourself.

It’s become such a cliche when reading job descriptions or resumes. This “can-do attitude” that everyone seems to think that he or she has.  This “can-do” attitude that all employers want. Cliche has a negative connotation, but this “can-do” attitude is absolutely one of the most important quality to have and nurture. Because most things aren’t really that hard, and the really hard things are mostly worth doing.

On the school bus (such a distant memory… I can’t believe I used to ride one whenever I see them on the road these days) on my way home that day, I thought about my question to the math teacher. How unfitting that my brain chose to visualize it with the image of someone digging a grave.

If someone digs one feet, that’s -1 feet under the ground.  If someone digs three more times, that -3 feets under the ground.  But how about digging something -3 times? What does it mean to dig a hole negative times? The way I rationalized it was that when you dig something -3 times, you are undigging the hole. So you end up going the opposite direction (filling up the hole, or piling up the dirt 3 feet high if no hole existed in the first place).

So, carpe diem!

 Posted by at 9:58 am
Jan 232009

Our first iPhone application iHappyBirthday has been in the App store for a week now. The following are a few of my thoughts regarding this entire experience.

On the day that our application appeared on the App store, we saw a competing product released on the exact same day! But we didn’t worry too much about it because our application looked better and more polished. But this just illustrates the importance of timing. If you have an idea, it’s almost a sure bet than someone else does too.

Being that this is a two man team, we are really struggling with resources. There are so many things we would have liked to do more with iHappyBirthday but couldn’t due to lack of time and resources. One thing that sorely needed more of our attention was marketing. We didn’t do enough advertising for our first application. Immediately after releasing it, we were hard at work developing our second application. But we’ve decided to spend a bit more time on iHappyBirthday and release an update (version 1.1) before this week is over. And this time, we’ll attempt to do some advertising through review sites and such.  And perhaps even think about releasing an ad supported, free or lite version.

The question that begs to be answered is, “Has iHappyBirthday been a success?”

We’re definitely not getting rich. I was hoping it would do better because it is a cute little application that appeals to a wide audience. But once again, perhaps it’s our lack of marketing experience holding us back. But we think that the application has been a wild, run-away success in terms of what we learned from the process. After accounting for all the expenses in creating the application, we’ve made a profit of about $20 (as of today).  So at least we didn’t lose money in the process. And hopefully, it will continue selling a steady number of units for the near foreseeable future.

The entire process has been a thrilling experience, but not an easy one. The number of times I refused to go out for a night out of drinking and partying because I had to be home working on this too numerous to count. I’ve neglected a lot of things, such as my sexy figure. I think I’ve put on a few pounds since I started this journey. And with a full time job and graduate school, it’s proven to be quite a challenge. But I sure do feel more productive than dousing my liver in poison. Though I must admit, I did really enjoy the wine I had last night while doing absolutely no work. But I think it’s important to realize that you do need to cool down and take some time off to recharge every now and then.

Our second application is around 70% complete. We’ll be constantly working on new applications, so please check back frequently to see updates.

And also, feedback is always welcome!

 Posted by at 2:36 pm
Jan 152009

Our first iPhone application has been approved! Please check it out in the App store!

When we started, we had never owned a Mac. We had never used Objective-C. We had never programmed for the Mac, and the term Cocoa was only familiar to us as a beverage to be had on a cold winter day. But I think we did a bang-up job learning the platform we had never seen before and simultaneously developing a polished application all in just a month. I plan on writing a “lessons learned” article in the near future, but today, I’d like to introduce our first iPhone application to the world.

Introducing iHappy Birthday! Yes, I know. We really tried to stay away from having the ‘i’ in the front of the application title, but all the other names that we wanted to use were already taken. But it has a catchy ring to it the more and more you hear it. Don’t you agree? So you may be wondering just what in the world this application is all about. And no, it’s not another one of the myriad of birthday reminder applications in the App store. iHappy Birthday is different, and after extensively testing it out on our friends and family, we think you’ll definitely use it and like it.

Imagine that it’s your friend’s birthday, but no one has remembered to bring a cake. But do not fear! Fortunately for you, you are a proud owner of an iPhone with the world’s first digital birthday cake. And it’s it’s not just a still image of a birthday cake on the screen. You can light the candles just as you would on a real birthday cake. Blow on the cake to blow out the candles! With iHappy Birthday, you will never have to waste money on a real birthday cake. With iHappy Birthday, you will never arrive at a birthday party empty handed.

iHappy Birthday is high configurable.

Features include:

Light the candles with the touch of your finger tips.
Choose among many delicious cakes.
Set how hard or easy it is to blow out the candles.
Set the number of candles blown out per each blow.
Music playback during birthday celebration.
Configurable finale animation when candles are blown out.
iPod Touch compatibility mode.
… and more!

Celebrate birthdays with iHappy Birthday and see your friends and family amazed and laugh in joy at your thoughtfulness. Never be without a cake at a birthday again! The cakes are so delicious, it’ll be a shame that you can’t eat them. And at the end of the celebration, you’ll be greeted with a finale animation to dazzle your friends!

Available NOW in the App store! Click the iTunes link to go directly to the App store. iHappyBirthday

 Posted by at 8:30 pm
Jan 132009

Developing for the iPhone has had an effect on me that I had not anticipated.

I have never given any serious thought to the issue of software piracy. I have never once even had a passing glimmer of interest in reading the EULA agreement during software installations. Of course, this is because I was the consumer and not the producer of software. That’s not to say that I am not aware of the various arguments for and against piracy. I have heard the arguments, but I have never pondered it in depth. Putting aside all the complicated theories and arguments, it’s really not hard to grasp.

The consumers want to pay as little as possible (which usually means free), and the producers want to charge as much as possible (which usually means the maximum price that consumers are willing to pay for your goods). It’s simple supply and demand.

To put it simply, everyone wants to protect his or her self interests. Survival instincts are still alive and going strong, folks! What a surprise.

Things tend to hit home more when they affect you directly. As an independent developer struggling to pay his bills and without the backing of a company with deep pockets, I think I would be remiss of being true to myself if I said that I wouldn’t feel a pang in my heart if people started pirating our first iPhone application. Of course I would, given the thousands of money that I spent in set-up costs and not to mention the time, energy and the personal sacrifices involved.

A thought occurred to me though. I’ve been reading various forums and blogs related to piracy, and a vast number of developers are complaining about it. I don’t think I would be too far off in saying that their attitudes on piracy may have changed after being on the receiving end. Does this mean that they will stop downloading pirated music, movies and software themselves?

The old adge about putting yourself in someone else’s shoes has proven to be right once again.

P.S. You may have noticed that a previous post about the application we just submitted to the App store has been taken down. I think that the timing was a bit premature because we still had a few issues to resolve. I’ll unveil the application once again after we take care of these few issues!

 Posted by at 6:02 am
Jan 122009

We started working on our first iPhone application exactly one month ago on December 10, 2008. After a month of working on the application at a feverish pace, we can finally say that we are done! We submitted the application for review at 11:30 PM EST on January 11, 2009. Hopefully, Apple will approve it soon and it will be available for purchase at the App store.

 Posted by at 7:11 am
Jan 092009

If you don’t have someone that you’re collaborating with in your software project, this post does not apply to you.  But then again, if you’re writing software and you’re doing it by yourself, your probably should find someone.  You can only lay so many bricks in your lifetime.  So go get yourself a teammate and come back to read this one.

Though zipping up your file and passing it back and forth with Gmail between your team member does the job, there are much better ways to collaborate.  Among the most popular are CVS and SVN.  My recommendation is that you set yourself up at www.assembla.com.  (Their recent  controversial bait-n-switch move will have to be discussed at a later time).  It’ll cost you $2 bucks a month/per project.  Dudes, there are more money under your couch so spare me the whining about the costs.  I’ve been using assembla.com and the SVN service alone is worth the cost.

Before going on, there seems to be myths floating around about Xcode’s SCM.  Here are some:

  • it doesn’t work
  • it sucks
  • its buggy

My partner is gonna hate me for saying this since he is one of those people that believes that SCM sucks, but I hereby declare that SCM works, and it works just fine.  At least with SVN anyway.

So, on to getting SVN set up with SCM then.

Step 0: Create a project. If you already have a project you want to import into SVN then by pass this step.  Otherwise, let’s create a dummy project for this tutorial.  Go to File->New Project, then click on Applications under iPhone OS from the left side panel.  Click on View-Based Application then the Choose button.  Type in the name of your project folder and click on Save. (I chose ‘Sandbox’)

Step 1: Set up your SVN repostiory and get its URL. This is simply a matter of cut-n-pasting the URL of the repository.  Go to Preferences from the Xcode menu and click on the SCM icon on top.  To add your repository click on the ‘+’ icon on the left bottom side and give your repository a name.  Cut and paste the URL of your SVN repository into the URL field.  The rest of the fields should be automatically filled in by Xcode except username and password.  Type the username and password in, and your setup screen should look something like this:

Step 2: Import your project. Navigate to SCM->Repositories.  You should see your repository you just set up on the left side panel.  If you already have files checked in, you should see them when you click on your repository.  Click on Import, and simply select your project folder, then click on Import button.  Voila, now your code is in the repository.

Step 3: Check out your project. Huh?  Why do we have to import a project we just checked in?  This is the part that confuses a lot of people.  If you are familiar with how SVN works, this might not come as a surprise to you, but once exported, we’re not going to deal with the local copy of the project any longer.  You can even delete it if you wish.  It’s even possible to check out your project back into your local copy, but we’ll just check out the code into another folder for the sake of sanity.  Click on SCM->Repositories, then the Checkout button.  Type in ‘Sandbox SVN’ as your project name and check out the project.  You’ll be prompted to open the project, open the project.

Step 4: Configure your project to your repository. We’re not done yet, we still need to let SCM know which repository we want to check our code into.  This step might seem redundant but if you have multiple repositories you’re working with then it could come in handy.  Anyways, navigate to SCM->Configure SCM For This Project.  At the bottom of the window you’ll see a drop down menu labelled ‘SCM Repositories.’  Choose your repository, and you’re done!

As you edit your code and add files to your code, you’ll see letters appear besides the files you edit.  The letters you see next to you folders/files mean the following:

U – The code in SVN has been changed and thus your local copy needs to be updated.

M – This letter indicates that the file has been modified locally.

C – There is conflict with your code and the code in the repository.

A – Files you’ve added but have not been checked into SVN.  They’ll be commited on your next commit.

A few gotchas you have to look out for:

  • Remove build folder if it was checked in. This will not only cause build problems when you try to build someone else’s code, but Xcode will complain when you try to Update or check in code:
  • Refresh your project.  Refreshing your project lets your know what you’ve changed and also what has changed in SVN.  This is pretty useful if you do this right before you check in code or update your project.
 Posted by at 3:36 pm
Jan 082009

As long as we are being introspective about the previous year, let us talk a bit about Objective-C’s introspection. Objective-C is a highly dynamic language (dynamic typing, dynamic binding, and dynamic loading).  It does a lot of things at runtime that other languages do at compile time.  This adds great flexibility. Of course, the trade off is that you lose the security blanket of the compiler helping you out as it looks for errors at compile time.

A practical way I’ve used introspection in an iPhone application is to dynamically assign a control I’ve placed on a view in Interface Designer to an Objective-C object in code.  Take for instance that I have a bunch of UIImageView controls on many views, and I didn’t want to go into each view individually and manually associate it with each of the IBOutlet objects. This can get tedious very quickly.

What you can do instead is use introspection. You can send a view a subviews message and get back an array of all its child views. And each of those child views will have subviews as well, etc. You can use introspection and send the isKindOfClass message to each of the controls on the views to check to see if it is an UIImageView control. Then you can assign these controls to the objects that you’ve defined. Of course, you could have used the custom tag number as well, but then you would have to remember to label all your controls with an unique tag.  It can potentially become a maintenance hassle.

Here is a quick sample code:

int counter = 0;
NSArray *subViews = [self.view subviews];
for (NSObject *item in subViews)
    if ([item isKindOfClass:[UIImageView class]])
        myObjects[counter++] = (UIImageView *) item;
 Posted by at 1:34 pm
Jan 062009

Apple has announced the new 17″ MacBook Pro today at the 2009 MacWorld Keynote.  This was the only interesting news from them.

The new laptop will feature the same unibody aluminum construction as the current line of MacBooks.   The biggest differences from the 15″ little brother are the availability of an anti-glare option available for $50 and the new built-in, non-replaceable battery that supposedly can take up to 1000 charge cycles as well as last 8 hours on a single charge.  Apple also claims that it supports up to 8 Gigabytes of RAM.

The non-replaceable part is a bit disappointing, but Apple states that the battery will last for 5 years.  And I suspect that in that time, most people will want a new and better laptop.  Five years is a long time in the fast moving world of technology.

If I had to buy my MacBook Pro all over again, I would probably go for this one over the 15″ MacBook Pro.  Though if I were you, I would go into the Apple store and play around with both to see if the extra size and weight aren’t a deal breaker.  The long battery life will be very convenient, and I sometimes wish I had more memory when I run Windows in emulation.  Remember to read my MacBook Pro review because it’s still very relevant for the new 17″ model as well.

 Posted by at 12:59 pm
Jan 062009

It’s 2009.  Bush is finally leaving the White House and we will soon be witness to a historical moment when President-elect Obama is sworn into the most important public office of this country.  We hope to ride the momentum and hope that 2009 will be a historical year for us as well.

We’re this close to wrapping up our first project.  We’re so close that we can almost taste it… almost.  It’s so close, yet so far away.  Actually, this might be the time that we should be savoring the most.  The anticipation of releasing our first application makes me giddy and is reminiscent of my girlfriend’s giddiness when I spent a fortune this past Christmas on a designer handbag.  Handbags and shoes.  Just what is it about them that drives otherwise well adjusted ladies crazy?  This is a musing for a different time for someone far more cerebral than yours truly.

My partner and I have discussed various projects (and not just related to iPhone applications) over the years.  A great many of them have been just that — merely talking the talk and not enough walking the walk.  This is the fourth project (I’m not sure if my partner remembers the first) that we’ve started or almost started together.  And it’s the first project that seems like we’ll see through and actually finish.

I’ve learned and still feel it down to my bones each day that the most important thing in starting a venture with someone is how well you work with that other person.  Of course, skills are very important, too, but if you have the drive and motivation, it’s something that can be acquired.  I haven’t told him this personally, but each day that I have been working on this project, I felt and still feel lucky and privileged to know and have a like-minded someone who can walk down this path together with me.  All the better that he is so technically sound.  It’s invaluable to have someone to bounce ideas off of, and to bring me back down to solid ground and perform “psychological repair” (so he likes to call it) on me when I’m freaking out or frustrated due to a difficult problem.  It was fun partying and drinking and talking about girls from sunrise to sunset (and we still do that), but this feels much more productive.

Wanted: Computer Graphic Artist (but please read below)

Looking back, the biggest barrier we faced in creating our first application was in beautifying the application and polishing it.  We sorely needed an in-house graphics artist.   We looked for someone to fill the shoe among our friends and even on Craigslist, but it was difficult to find a person who shared our enthusiasm, seriousness and dedication.  Looking for someone outside our circle of friends was a daunting task due to the question of monetary compensation.  We received a lot of feedback but for a couple of guys with full time jobs who are spending every free moment that they have on this project with zero funding (except that which came from our own bank accounts), we had neither the time nor the money to invest in a skilled, but expensive, graphics designer. I mention time because we received a few offers to trade their graphics skills for our technical skills.  But we have and had no time to work on other applications.

We haven’t stopped looking for a graphics person to join our team.  Due to the time constraints, for our first project we have decided to use stock images, which turned out to be a very good and affordable solution.   But for our upcoming projects, we will surely need a graphics person.  But it has to be someone who is on the same page as us in terms of enthusiasm and work ethics and not just in it for some quick cash.  For us, this is about something more than just money.  Just like Obama’s election has a great symbolism, this venture has a great symbolic meaning for us as well.   If you share our mindset and want to join us on this great journey and share in this labor of love,  then please feel free to contact me.  You can find my email address on the About page.

We are aiming for the end of this week to put the finishing touches on the application and release it to the App store.  So please stay tuned!

I hope everyone is successful with their resolutions!

 Posted by at 7:32 am