Chance to upgrade Padgram for free

This event has ended with 101 lucky users get the premium version. Thanks for joining. 

Our friend Ye Tian has made a word puzzle “Let’s Guess Word”. It’s quite similar with the popular game “4 Pics 1 Word” but with some interesting features added. As we think the target audience of this game overlaps with Padgram users, so we make a contest for the game users to earn Padgram Premium for free.

The first 100 “Let’s Guess Word” users who can work out 300 puzzles will be awarded Padgram Premium membership. The contest won’t stop until we got the 100 lucky guys. I will update the number of winners in this blog post.

Up to now, there are 101 awarded players.

Let’s guess word and have fun!

How to test Padgram beta build

Beta testing is a perfect way to try new features of Padgram, at the same time making sure everything is working well. The steps are easy:

[Omit this if you ever did this] First step: provide UDID to the developer 

An UDID (Unique Device Identifier) is a sequence, combinations of alphabets and numbers with the length of 40 characters. It uniquely identifies your iPad. Install Get My UDID on your iPad, and use it to email the UDID to the developer.

Second step: open the link developer sends to you and start installing

You have to use Safari browser to open the link. As other browsers seems not working well.

If it’s the first time trying Padgram beta build, you will be promoted to install a provision profile, which allows the beta build from TestFlight to be installed. Simply tap “Connect Device” button, and accepts to install the provision profile when prompted.

After that, you can see the installation page:

Tap “Install” button, then the app will be installed on your iPad.

Enjoy Padgram~~~~


Padgram 2.6 for iPad-Top Instagram Viewer Creates Eye-Catching Shoutouts

We’re glad to announce Padgram 2.6, with following major changes:

  • Add swiping support when viewing photos in full size, you can easily swipe from one photo to another
  • Add self/cross promotion feature. Now you can promote yourself or others with a beautiful collage, which is made of user’s most liked photos
  • Support deleting or copying comments
  • Refined commenting experience with bigger comment box

The promotion feature is unique among the options. We design it to meet people’s needs to shout out for each other.

An Instagram Shoutout gives a user an opportunity for self or cross promotion, asking others to recommend that their followers should begin following the user or other Instagram member. Typically, users take a photo of a profile on Instagram, posting it with a Shoutout hashtag. Far from ideal, this low-tech solution can at best be ineffective, and at worst be seen as spam.

The new Promote button in Padgram 2.6 selects six random photos a member has posted, and it creates a visually pleasing collage. There are three photos in the top row and three in the bottom row, and each photo is tilted slightly, each overlapping two adjacent photos just a bit. This sophisticated design presents a sampling of the member’s tastes and interests, and serves as a stylish image that is ideal for giving or requesting a Shoutout. Here is a screenshot of the generated collage:

We’re interested to see how people is going to use this.

For a full PR, here it is:

And the app is already here:

Padgram tops Photography app in Thailand

Padgram has got our first No. 1 listing in the world!!!

Thailand, the country with over 65 million people and millions of Instagrammers, now has Padgram as the #1 Photography iPad app.

Since Padgram new version released in September, Padgram has got dramatic growth, until No. 1 in Thailand. We’re so excited about this. Thanks to all Padgramer’s support to make this happen.

We’ve also seen big growths in other countries. We’re confident with Padgram and hope it reach more No.1 positions soon.

Check out Padgram here:

Padgram 2.5 makes it easy to post photos and revamps profile and sharing

Since we changed the app’s name to “Padgram”, we’ve done 4 important releases. We made continuous improvements in each version. Now it comes to 2.5.

First of all, we revamped the main menu. We gave up the drop-down style menu (which is mostly seen in web site designs), replacing it with the slide-out menu (which can be seen in Facebook, Fancy, Pinterest and other popular apps). We want to make it costless to understand and use the app.

We received many inquiries about how to upload photos on iPad. Since Instagram hasn’t opened the upload API, we cannot integrate uploading within Padgram. The only way to upload photo is using the official Instagram iPhone app on iPad. We think users might not know they can use the iPhone app on their iPad. We want to make it easy and we designed the “Instagram Camera” menu. When tapped on, if the Instagram iPhone app hasn’t been installed, we guide users to download and install the iPhone app. If the official iPhone app is there, we launch it to take or upload photos.

Another important change is the revamped profile page. When checking profile, people are keen to know following info:

  • They want to know follower’s / following’s meta info (avatar, user name, photo number, following number and follower number) within one screen, other than only the avatar and user name
  • They want to know who they’re following have not followed back

Here is the revamped profile page, Both requirements are well addressed.

And lastly, we make deep integration with iOS 6 to make sharing easier. As we know, since iOS 6 Facebook and Sina Weibo are integrated into the system. Once people configured Facebook and Sina Weibo in OS settings, all apps can make use of them to share or post. Users don’t need to configure the accounts for individual apps, and account info are controlled by OS, not individual apps, therefore much safer from privacy protection perspective.

And we have several bug fixes and tweaks in 2.5. This makes a more stable Padgram.

We hope those improvements can bring in true value to our users. We’re working hard to make the best Instagram viewer on iPad. Try Padgram now, leave comments below of what you think of it.

Help is needed to translate Padgram into Russian

We always want to do best for our users. Recently we’ve seen big growth in Russia, and we think translating Padgram into Russian could better serve our users. Followed we would also translate it into Thai, Arabic or others.

We’re here calling up volunteers to translate Padgram into Russian. The effort is minimal and several hours should be enough. We need more than one person, so that verification can be done.

As for benefit, we guarantee Padgram will be free forever for the ones that offer help. And we could do shoutout on Instagram for them too. Drop me an email at or simply connect us on Facebook or Twitter.

How we improved Padgram performance to “incredible” level (2)

As planned, I am going to write about “Choose the right JSON parsing library” in this session.

JSON format is popularly used between client and server communication. I’ve not met any open service without JSON interfaces yet. Padgram does a lot of JSON parsing when talking with Instagram server.

Occasionally, I find in a short period, 59% of CPU is used in parsing JSON data. That’s crazy! So I dig into the JSON library we used – SBJson.

The result is pretty obvious, the performance of SBJson is far from good. It ranks only 4th or 5th place compared with major competitors (SBJson is named “json-framework” in the chart):


You can read more here:

Obviously, JSONKit is the best among all competitors. After switching to JSONKit, I’ve never caught the CPU spike like before. (However, I didn’t get round to write testing program myself, I prefer to trust the genius guys in open source community)

In using JSONKit, there are some tips for speed that you should read on Among them, we should use NSData over NSString to avoid the overhead to instantiate NSString objects. Here is our decode wrapper function that deals with this:

– (id)decodeData:(NSData *)data withEncoding:(NSStringEncoding)encoding

if (data == nil) {
return nil;

// this is important for performance, see here:
if (encoding == NSUTF8StringEncoding) {
return [[JSONDecoder decoder] mutableObjectWithData:data];
} else {
NSString *string = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:encoding];
return [string mutableObjectFromJSONString];


With proper JSON library, and incorporating with proper threading framework, Padgram gets great user interaction experience when scrolling at the same time of loading in the background. You could try Padgram from App Store.

How we improved Padgram performance to “incredible” level

Performance is very critical for an app to be successful. One Apple staff ever told me that an app with good performance is a must-have element for it to be featured, even it doesn’t mean one with good performance can be featured.

Performance was a headache for Padgram. We ever received a 1-star rating complaining the performance issue:

We were really upset with the 1-star rating. And we admit that’s a real problem in Padgram V2.2 or lower.

We profiled Padgram from ground, and finally improved its performance to a level that delights users. Like Versuri said:

Here I’d like to write down all my learnings and lessons. This is the first of the series.

(Before start, it worth mentioning that I read several sessions from WWDC regarding performance. And finally I stopped at “Session 318 – iOS Performance in Depth” from WWDC 2011 Session Videos. It highlights all ways to improve performance, while lack of examples. What I am doing here, is more examples, and focus on the ones that actually work for me. )

The first lesson we learnt is: properly adjust workload of UI thread and background thread to avoid UI thread blocked. This is a commonly seen advice. Here I just provide my example.

Instagram API is based on RESTFul API, every API call involves following procedure:

  • Prepare and send the request             <===== in background thread
  • Receive and parse response               <===== ideally, should all be in background thread
  • Update UI                                            <===== in main thread

To better balance the workload, we should only make bold parts above in main thread, and all others in background thread. This is theoretically right but hard to make it right as to the tricky networking library we use.

We use “ASIHTTPRequest” handle network requests. It forces all network completion blocks executed in main thread, regardless of which thread the request is prepared and sent. So in “Receive and parse response” part above, ASIHTTPRequest by default execute completion block in main thread, and we need to use GDC to make CPU intensive work (here in my case, parsing JSON data) executed in background thread.

// Prepare and issue the request in background thread

// the completion block will be executed on main thread
__block NSData *responseData = [httprequest responseData];

// dispatch to decode JSON data in low priority thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

// CPU intensive work, decode the JSON data
__block NSDictionary* jsonObj = [self decodeData:responseData withEncoding:responseEncoding];

// dispatch decoded data back to main queue for UI update
dispatch_async(dispatch_get_main_queue(), ^{

// update UI




In this way, we effectively avoid UI freezing when the app loads data while user interact with the UI. The typical use case is scroll Padgram to the end of a feed (Popular, My Feed, My Likes etc), it starts loading more. We successfully optimized to make the loading not impact user interaction.

To experience how it works, download and try Padgram from App Store.

Further lessons:

  • Choose the right JSON parsing library
  • Kill all offscreen rendering for scrolling animation performance
  • Always set shadowPath for shadowed borders
  • If possible, reduce view blending and hierarchy

I will write them asap.

“InstaPin” is now renamed to “Padgram”

We named the instagram app as “InstaPin” as we wanted it to be a combination of Instagram and Pinterest. Now we rename it to “Padgram” as we think the Instagram-Pinterest combination is not a perfect solution on iPad.

Pinterest waterfall view is basically composed of image, comments, author info. It brings in perfect UX on PC as the screen is big enough. People like the UX to view all info within the same page and add comments without leaving. While on iPad, even its screen is bigger than iPhone, the screen estate is still limited. It can’t even hold one image info in one screen using waterfall view! And when it comes to commenting, as to the nature of Object-C programming, it’s much harder to implement in technical. Pinstagram tried it, but the result is not perfect.

So we decide to give up waterfall view. The app in the store is still in waterfall view, but next version the waterfall view will be gone. We rename the app just in preparation for next version.

Next version would be an important release. Stay tuned! [Update: it’s online now:]