quanganhdo's archive

I'm Anh Quang Do (aka QAD). This tumblelog is where I talk about what I deeply care about and link to interesting articles on the interweb. If you want to reuse any of my content, feel free to do so. Just remember to put a link back to my original post.

Developers Stealing From Developers: An App Store Tale →

Ars explores a dark side of App Store development.

In the world of high-profile contract work where Fortune 500 and top advertising agencies are the clientele, nothing happens without an NDA. According to Mike Margolis of Sugar Cube, Inc, the NDA culture makes it exceedingly easy for programmers and their firms to claim they wrote applications that in reality they had nothing to do with. Margolis would know, as he says he has had his work claimed by other contractors on multiple occasions.

Django in 3 days

This post was composed in WriteRoom for iPhone a couple of days ago. Expect a review soon.

I've heard many good things about Django, and now have a chance to really look at it. For those wondering what it is, Django, pronounced as JANG-oh, is a mature web framework written in Python. Dubbed "the web framework for perfectionists with deadline", Django indeed brings many nice things to the table.

If Ruby on Rails is much about convention over configuration, Django is quite the opposite. Everything is laid out explicitly in Django, and you won't find much "magic" behind the scene.

One of Django's best selling points is its ability to quickly give you a customizable admin interface, and I totally love this feature. Spending a few minutes defining the models, a few more tweaking the model admins, and volla, I've got a nice CRUD interface to work with my (test) data. For a backend accessed only by trusted people, it saved me so much time.

Django comes with comprehensive documentation. I've never written a line of Python code in the past, but was able to find almost everything I need to get started. The free Django book from Apress is a nice touch, too.

That said, I knew nothing about Python, so my first hand experience with Django the framework was also to learn this language at the same time. Again, I was quickly able to find a good book on this topic: Diving into Python. It was truthly a pleasure to read, as the author uses the "learn by examples" style to deliver his knowledge. Every chapter begins with a scary example that makes me confused, then gradually explains all the concepts and relevant stuff. By the time I finished the first five chapters, I was able to start getting through the Django tutorials.

On the flip side, getting Django up and running on my MacBook was a tedious task, particularly the steps to make it interact nicely with MySQL. It took me a full day of reinstalling things and moving them around to make it finally work. Googling didn't ease that pain much.

Another annoying issue that occurred to me was that Python didn't get on well with TextMate, my text editor of choice. Python relies much on indentation, and its lack of explicit closing block made TextMate confused all the time. More often than not, I had to use a specific bundle to reformat my code to make it work. It really sucked.

My current strategy to learn both Python and Django is through doing. I'm rewriting jtale in Django and have made some progress so far. Hopefully it'll be up and running soon (haven't figured out how to deploy it though).

Enough for now.

Facebook and MySpace security: backdoor wide open, millions of accounts exploitable →

The crossdomain.xml exploit (appear to be fixed now)

Suprisingly, when looked into more carefully my solution allowed full access and control to the Facebook user account that accessed my application. Did I mention this would also be untraceable since exploit actions would happen from the users IP and own domain cookie?

Yet Another iPhone App: The Story of Time Waster

I have been scheduling to write this down for a couple of weeks, but haven't got a chance to get started. That is, until today - the day Time Waster was approved (more on that later, I promise).

Without further ado, let's dive into the first part of the story:

Part 1: The idea & The execution

The idea of Time Waster the iPhone app came to my mind long ago, but it was much different from the real, physical app that shipped today. It was supposed to be a StumbleUpon client for iPhone, providing the same feature set as the desktop toolbar. This, however, proved to be an unfeasible task since StumbleUpon offered no API whatsoever. Zero. Nil. Nada. Relying on a non-existence API didn't seem to be a great idea for a commercial app, so I abandoned that and moved on with my life.

Then came the time I revisited the idea. That was when I discovered the joy of browsing Ember and got inspired by tons of gorgeous software products & websites talented designers produced. An app to give you inspirational screenshot (and waste your precious time) every time you shake the device - that sounded good to me. Then other functionalities made their ways into my mind naturally: Why not include interesting images from Flickr? How about FML stories (potentially NSFW - you have been warned)? And famous quotes from QuoteDB? And on and on and on.

I spent a noon working on a mockup. Thanks to Balsamiq Mockups, I got a pretty clear idea how my app should look like:

Fast forward 5 days later, Time Waster was ready to be beta tested. Got it installed and worked flawlessly on my 1st-gen iPod Touch, my friend's 2nd-gen iPod Touch and another friend's iPhone 3G for a couple of days, I decided to submit it to THE App Store.

Part 2: The wait & The Murphy's law*

Waiting for someone at Apple to drop by and review my app was a long and boring time, so I tried to make that period useful by working on the promotion side of the app. A simple static website along with a short screencast recorded in ScreenFlow were uploaded and available at http://timewaster.quanganhdo.com (as some of you might already be aware of).

12 days later.

Someone in the review team at the almighty Apple finally had a look at Time Waster and approved it. Its status changed from In review to Ready for sale. Having no time to be excited, that was when things started to appear bad for me.

The very first problem was with Time Waster's release date. It was set to October 23rd, the day I submitted it to the App Store. 2 weeks before the current date means 2 weeks behind free public exposure of the Recently released list, which in turn means little to no sale from casual App Store browsers. A quick search revealed that I was not alone in this matter - Read all about it here. Wished I had learnt about that before.

[...] each day’s apps are listed alphabetically. So every time a new app or two show up in the most recent list, they appear after all of the apps that start with a letter earlier in the alphabet for that day. An app named Zen Tennis will probably never see the top of the list. [...] Clearly the most-recent list is already just a random collection of apps released over the past few days, but it gets worse.

But the end result is, if a developer sets an app’s availability date in iTunes Connect to some time after when the app is eventually approved, it will not show up until that availability date. The app will eventually show up well down the most recent list with a release date of when Apple approved it.

On the other hand, if a developer sets the availability date in iTunes Connect to some time before the approval date, it will show up as soon as it is approved. But it will show up with the set availability date, some time before approval. It will show up well down the most recent list.

That left me with no choice but finding other ways to attract users, one of which is to get it reviewed on a high profile blog. Then another source of frustration poured in: I got an absolutely annoying red warning in iTunes Connect, which says "We're having trouble generating the codes." every time I tried to generate new promotional codes. Refreshing the page 10 times didn't help, using a proxy to connect to the site didn't, either. For someone had been in the waiting line for a long time, it wasn't a nice experience at all.

That's it. That's my story (to date) of selling an iPhone app on the App Store for the first time. It might or might not be successful - I couldn't guess. No App Store rejection was a good start, but a confusing release date and a broken system in a sensitive time weren't. Hopefully things would go well soon.

For those interested in Time Waster, be sure to visit my dedicated site for it: http://timewaster.quanganhdo.com

Or, try this iTunes link if you want to shell out $0.99 right now: itms://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=337256022&mt=8&s=143441.

*The Murphy's law: Anything that can go wrong will go wrong. More on that.

Readability2 Leaks Out →

On the same day that Marco updates Instapaper's text parser, I discover a great modification of the Readability bookmarklet. Both are great!