I'm a Top 3 iPhone App Developer!

Sunday, September 27, 2009

UPDATED: My former employer requested that I remove mention of their company name and client.

Short version:
[REDACTED], one of the apps I developed, became #3 top paid app on the US App Store less than a week after launch.

Long version:
After deciding that iPhone development was going to be in my future, and without previous programming knowledge besides some occasional dabbling in scripting - I've worked in publishing all my life - I jumped head first into Objective-C and Cocoa by attending the Big Nerd Ranch June '08 Cocoa Bootcamp class.

With the foundation from the classes and an active involvement in the local CocoaHeads and NSCoder Night (which I started), I ventured to take on a couple freelance iPhone projects on the side and - after a lot of sleepless nights - had my first app available on the App Store by Halloween '08. Shortly after, I completed my second app (100 Sounds, iTunes link) and, to my surprise, it saw great success, climbing the rankings to Top 32 paid app (#7 in Entertainment category) early January '09.

From there, I opted to train a beginner group in iPhone development (isn't that the best way to learn?) and continued developing a few more apps which eventually met with limited success. I was still working at my publishing day job, when one of my clients - a startup company named [REDACTED] - invited me to join them full-time in May '09. I jumped at the chance despite the potential risk and was finally able to focus 100% on iPhone development.

[REDACTED]

After a lot of work, the app was finally submitted to Apple for approval. Anxious about the possibility of rejection, we were ecstatic when we finally got news that the app was approved. [REDACTED] decided to "soft-launch" the app early (catching our servers off guard as well!) and we were soon watching the app shoot up in the rankings. But more importantly, it was gathering rave reviews from users on the iTunes App Store and Twitter comments.

In a couple days, it was already #45 top paid app. And then [REDACTED]'s marketing and press releases really kicked in. By the next day, the app had crossed into the fabled Top 10 territory and was visible in the front page of the App Store. With almost 90% of the reviews being 5 stars (and those that weren't were complaining about the price, or unavailable content), the app continued to inch toward the top - specially after it mysteriously appeared in the prominent first spot of the "New & Noteworthy" ranking (an area usually only updated on Tuesdays!). The following day, it finally settled at #3 top paid app, #1 top sports paid app, and #3 top grossing app (an amazing metric to have!).

This is a great personal and professional milestone in my nascent career as iPhone developer. A lot of work and little sleep, but I'm ready for more.

My First Marathon

Tuesday, June 03, 2008

Short version: All went well and I finished my first marathon in 4 hours, 22 minutes and 54 seconds.

Long version:
After several months training, I found myself stuck in traffic with the start time to my first marathon looming. My brother was dropping me off close to the starting line, but the streets of San Diego can't really handle the influx of over 20,000 runners (and their families) converging to a single spot - even at 6am on a Sunday. In what essentially seemed like a grid lock, I followed the example of other frantic runners, jumped out of the car, and made the remaining trek (uphill!) to join the masses of people taking their positions at their starting locations (based on projected finish time). Having initially estimated a 4:50 finish, I joined the crowd at my designated "corral" towards the back - just a couple minutes to spare before the official start!

The enthusiastic sea of people moved slowly at first - it took almost 8 minutes to reach the official start line - but soon we were on a slow but steady rhythmic pace going around Balboa park. Maneuvering past (clueless?) walkers and slower runners was a challenge, as the labyrinth of bodies did not allow a lot of empty space along the first few miles. As we slowly descended towards the harbor area, I continued my progress through the crowds, picking the best openings between people to squeeze a few positions forward. As miles wore on, people found their pace, the crowd thinned and spaced apart, and I was feeling great.

6 miles (10km) came quickly as I was distracted by the event's reoccurring entertainment: bands played different types of music every mile and cheerleaders pom-poned us on with "you can do it!" chants. Drag cheerleaders with voluptuous paddings provided comical relief, as we started our slow ascent next to the San Diego Zoo.

I was a little concerned that I might be starting off too fast - I had passed the 4:30 finish time pace runner at around mile 4 - but my mile times were not that different from my training runs, so I pressed on. The though that my training runs were a lot shorter did not really 'click' as I continued passing other runners on this uphill part of the course. The thought of reaching the top and coasting down the other side spurred me on past miles 9 and 10. I let gravity help me on the downhill and used my long legs to swiftly pass my companions at the fastest pace I could manage without crashing into someone.

Reaching the bottom of the hill, I noticed a larger group running clustered together ahead. As I approached, I saw it was the 4:15 pace runner and his entourage. The cautionary thoughts of going too fast gave way to tempting visions of shattering all expectations and crossing the line in under 4 hours - impossible for me, yes, but my oxygen deprived brain was not taking any other suggestions. I slowly passed the pack as the pace runner shouted we were 80 seconds fast at mile 12. Newly invigorated by the siren song of possibility, I kept my pace steadily higher than the group and slowly drifted ahead from them.

Crossing the half-marathon mark in my personal best time of 2:02:42 did not trigger the thought of slowing down, instead, it just motivated me to push on harder - two times 2 hours = 4 hours, right?

The first signs that started to dispel my fantasy began around mile 16. The generous cloud cover that had been keeping the temperature in check around 60 F (about 15 C), now had patches of blue intermittently. The long straight road ahead of me with the bobbing heads of runners was also not very encouraging, specially looking ahead at how far the bridge going over the 5 highway still was. The miles seemed to roll by more slowly and my body started whispering how good it would be to take a short walk, "just to catch my breath"...

I had to listen to my body at the next water station and walked for a bit trying to calculate my salt/sodium levels, if I was drinking too much or too little water, etc... I was snapped back to reality around mile 17 when I heard the 4:15 pacer encouraging his troop on as he passed me. Oh no, I had to stay ahead of them!! I marched on stubbornly at a slightly faster pace and was reaching the next water station when I hit IT.

The WALL - the infamous part of the race when your glycogen reserves have mostly been depleted and your body decides it doesn't like you anymore... Hitting the wall was both physical and emotional - specially when I saw the 4:15 pack blowing past me! I tried to relax and motivate myself out of the slump. I took a horribly sweet tasting 'goo' that was offered (I had used it in training), licked a packet of salt off my fist (where was the tequila?), drank some water and started once again, a little slower, but focusing on reaching mile 20 where my brother was waiting to join me through the last 6 miles.

The next couple miles were grueling as the morning cloud cover had burned off and the sun now shone brightly in the blue sky. The heat, small hills (they seemed like hills, I swear!) and bridges combined to bring my pace down. I was no longer passing the people around me, but instead would set my target on a runner up ahead, try to pass that person and then walk a bit. Try to reach my target again, rinse, and repeat...

My brother located me at our arranged spot, which happened to have a band playing some heavy metal - sorry Kristian! With his cheerful, fresh, and energetic youth, he tried to push me along. After some initial naive "we're going uphill" not-so-helpful comments (when I hadn't even realized we were going uphill), his presence proved to be a great morale booster. My body wasn't really buying into it though and complained by giving me an uncomfortable side-stitch. So we just trudged on as best as possible.

Around mile 22, I gave it another strong push that had my brother zig-zaging behind me as I passed runners in several states of forward motion. I showed down when I got to a point where the course doubled back - it was slightly demoralizing knowing you would have to come back that same way soon - would anyone notice if I just cut across? But I kept going forward...

Going under overpasses became my main motivation at this point as I tried to get out from under the blasted sun. Upon reaching the shade, I would immediately drop to walking again, trying to soak in the coolness of the breeze, which seemed to stop as soon as I stepped back into the sun. If I saw an opportunity for shade up ahead, I would push hard until I got to it, relaxing my pace the few moments I was in it. The heat seemed to be affecting others as well, as many around me looked more like zombies trying to reach some unknown goal, all in various stages of "humanness". The sight of a passed out runner being helped by medics did not inspire me either...

Mile 25 was met with cheers from the spectators - "Almost there!" Encouraged by the proximity, I kept thinking "Only 2 more miles!" Again my body was not fooled, so I tried a different approach. At the end of road we were on, the course made a sharp left, so I tried to convince myself that the end would be shortly around the corner. I'm not sure when/where we passed mile 26 (part of the convincing?) but the crowds on the sidelines were thickening, so we had to be close, right?

Upon making the left turn at the end of the road, the course entered the naval base, which was lined with tough looking marines on either side. As I passed, I heard a firm "Sir, do you have a number?" behind me and knew my brother had been "captured". On I went, increasing my pace in anticipation, running what was probably the longest mile I have ever run!

The dirt track twisted through an endless maze of lefts and rights with the cheering crowds pushing us on, all the moment I was expecting to see the finish around the next corner. I caught sight of a structure with all the sponsor logos - it looked like the finish line - it wasn't. I tried to increase my speed but my lungs were on fire, my legs two moving pieces of lead, heavy, unresponsive. One last turn and I finally see "FINISH". I step over the finish mat and in an anti-climatic drained dazed, smile.

Post-mortem:
This would not have been possible without everyone's support, specially Denise (and Maya) who endured the several months of training when I was out running, providing unending encouragement (and she started running as well!).

Setting what seems like a impossible goal, working towards it and then accomplishing it helps motivate me to accomplish other seemingly impossible things. But first let me recover... :)

More info:

Surfing

Monday, May 15, 2006

Thought I'd share this morning's activities...

After dropping Denise off at work at 5am, I headed to the beach with my full wetsuit already on. After a 14 minute drive, I got to Salt Creek Beach - the closest beach with waves. Going down the paved road to the beach in the semi dark, I could tell the conditions were not going to be as good as the previous day, as there was a cold breeze hitting my face and a very slight drizzle insisting on making itself present.

From my vantage point in the road, the grey waves breaking in the distance did seem a little mushy, but it was already too late to turn back. Reaching the humid shoreline sand, I streched for a little bit, examining the stormy looking waves. I noticed a black spec in the dim light - another surfer had already beat me to the water! As I starred in disbelief, another surfer ran up to the shore, apparently eager to jump into the chaotic surf. Not wanting to delay any longer, I quickly put on my fins, strapped on my leash and reluctantly walked into the water.

Protected by the wetsuit, the cold water wasn't too bad - until I had to duck-dive through the oncoming set of waves. And it did not stop. Wave after wave was breaking just before me, just giving me a hint of impossible hope, before it came crashing down and dragged me further back. The waves were not big, but they hurt my pride. In my haste, I had not waited for the ideal time and had not traced my entry and direction properly. I am usually the one with the smug smile as I reach the lineup unscathed by the waves, but this time my wet hair betrayed my plight.

Huffing and puffing - man, am I out of shape - I finally got to the lineup, nodded to the other guys - the second guy had actually arrived before me, taking a better route into the water - and patiently waited. And waited. And waited. The chilly wind was weak but bitting as the overcast morning brought some light. I did manage to slip down a few waves, but they proved to be just a small drop and then bulged out of shape, no fun...

Soon there were over 15 guys out - all of us drifting slowly in the eternal wait between the sets. The wind had died down a bit and, while not glassy, the texture of the oncoming swell was smoother. Once in a while, a wave would paint a smile on someone's face as he dropped into the wave and franctically tried to manuever back and forth on the faceless blob. There were a few good waves - if they had the right size - that would wall-up and break all at once, leaving a small corner for any fortunate soul who happened to be there.

It was almost time to go home - get ready for the weekly grind... Surfing before work can be a great experience, but so far it had proved fruitless.

I had drifted apart from the pack a bit, but was still pretty deep, wanting to catch a bigger wave before I left. Preparing to correct my location, I noticed an omnious dark shape in the limited visibility of the gray horizon. This was quickly confirmed by the ensuing scramble as everyone starting to paddle toward it, hoping to get to the wave in time, or, at least, not get a cold pounding on the head. As luck would have it, I was actually perfectly positioned!

I ever so casually turned my board around, facing the approaching crowd, and, as the dark mass loomed up behind me, put in a couple strokes, and added a powerful kick with my fins. Gliding seemlesly into the mountain of water, I realized it was bigger than I had anticipated. A nice drop into the wave left me with a clear view of the remainder of my ride. The wave majestically moved forward, threatning a peak here and there, but not breaking in the deep water - maintaining a perfectly balanced wall!

As I fanned (envious) nearby surfers with sprays from my turns, I must have looked like the happiest surfer around - or at least the happiest paraplegic surfer, since ridding a kneeboard allots for a somewhat singular style. Forcing my edge into the water, it seemed like I was picking up speed on each turn, climbing and dropping mockingly in front of the pursuing white water.

What happened next was totally unexpected but was what made this wave so special.

Some distance ahead of me, another peak had sprouted and was pouring over itself, slowly heading in my direction with the intent of ending my joyous ride. Then, a few board lenghts ahead of me, just as I made my final turn down into the wave, 2 gray fins emerged at the top of the wave. Two (or 3?) dolphins were sharing the wave with me, surfing underwater right ahead of me! I turned as the wave closed out behind me and pointed my board to the beach.

Going up the steep paved incline, an older gentleman passed by me with a determined step, but I kept my slow and happy pace.

Google Base

Wednesday, November 16, 2005

Google Base seems to be very interesting.

One good aspect is the use of RSS 1.0 (RDF based) for bulk uploads (although they also accept tab-delimited, RSS 2.0 and Atom files). But note that the examples and templates are using RSS 2.0.

One bad (?) thing about customizing labels (to better describe your item) is that your labels have to use their namespace, which leads to potential collisions.

Open Source Lifecycle

Sunday, January 02, 2005

Very good and clear article about the lifecycle of industries and how open source is poised to dominate in the software industry:

"And similarly, by understanding the software lifecycle, software companies can avoid fighting a losing
battle against FOSS. As a technology changes from proprietary to FOSS, a company can profit from its
expertise in the technology, support the FOSS movement, and offer niche products, support and services
that complement the FOSS effort. Software companies should not assume that their market will last forever.
The more interesting and useful the technology is, the shorter the commercial phase. Instead of fighting
it, move with it."


[via Slashdot]

Explaining the web

Monday, December 13, 2004

Pretty readable dialog between a web developer and his (non-geek) wife about how the web works.

He touches on the subject of "deciding what the data should look like" and machine to machine exchange, but does not develop into RDF or the Semanatic Web ideas, focusing on web services instead. Worth a read anyway.

[via More News]

Publishing industry doom?

Wednesday, November 24, 2004

On Wired's Newspapers Should Really Worry, are some disturbing numbers on where print media is headed. I've always argued that reading print vs. online is more of a generation issue, but eventually, online (or e-ink) will dominate. What I find amusing is that many people in the publishing industry don't see the impact this will have in the next few decades.

The advertising industry will probably start suffering first, as it scrambles to find creative ways of reaching the 18-34 year old demographic and slowly starts moving away from print.