Why we add ads to Padgram?

User experience has been our focus since Padgram launched. We’ve spent lots of time writing and tuning every single line of code, every single pixel on UI. And we know Ads is not good for user experience. But why do we still add an ads to Padgram 3.6? Do we want to destroy the 4.5-star rated app?

The answer is simply NO!

We just need to balance between user experience and revenue. The Ads banner is only shown at the bottom of the screen in portrait mode, that’s the only place we can think of to have a minimal user experience impact (think if we put it under Landscape mode). App business has been so hard for developers. It’s hard to hear stories that developers make millions of dollars now. And our experience shows how hard it is.

At the beginning, we set up a donation page. The page was deliberately designed to incur user’s empathy. It’s even like a beggar (shame 🙁 )

But it doesn’t work. The revenue per day is under 10 dollars (we have half a million downloads at that time). Then we changed to require in-app purchase to enable a premium feature (Manage Multiple Account), things become better, but still under 100 dollars. You’d know we have 1million downloads then and over 100,000 active users per day!

We have to work out a way to feed the team. If we cannot generate enough revenue, it won’t be sustainable. So we add the ads to the app. It generate some revenue, and at the same time gives user that is hesitating to upgrade a reason. It turns out it’s working.

Again, I’d say app business is tough. We already gave up the dream to become a millionaire. We just want to live a decent life, wishing we can survive after the mobile app “Golden Run”.

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~~~~

 

Why fit in when you were born to stand out?

Our user Marianne wrote to me a message with the above title, and she kindly explained what it meant.

This saying is from Dr. Seuss, a very famous children’s author.  While he writes for children, his message is universally meaningful to all people.

This quote means;  why be ordinary when you can be spectacular; why follow the crowd when you can be a leader; you were put on this earth to be the best, don’t settle for anything less.

It basically means do your very best in life, because you should, and because YOU CAN.

The saying above made me think of so many thoughts, it also reminded me of some of my past experiences. Before I founded Pinssible Labs, I was a manager at a world leading security software company. The salary was high and the manager was totally great, it sounds like too perfect to be true and that it was comfortable for me to stay there, but something was missing, what I always hoped for, what my heart always wanted was to lead my own team, create things that I am interested in. I always wished for that as I hope my kids can be proud of me when they grow older. I can proudly tell them “Hey honey, this was created by me, oh yeah your dad, it’s cool isn’t it?”.

That’s why I got inspired and founded Pinssible Labs and created Padgram.

When it comes to Padgram, we weren’t the first Instagram iPad app. Our competitor had released its app 8 months before we started coding. we started asking ourselves questions such as: How do we compete with them if we offer another option? how can we be different? how can we be born to stand out? To find out the answers of the above questions, we had to try all the Instagram apps out there, and we found some flaws in them such as; not fast enough, not simplified enough and not intuitive enough. By creating Padgram, we brought a difference in the sense that we made it faster, simpler yet most powerful among all the other options.

We are proudly announcing that Padgram is the No.3 photo app in the US, and has got No.1 position in 60+ countries.

Our mission was to reach the No.1 Instagram iPad app in the world. To achieve that, we created interesting features, like the Emoji keyboad and self/cross promotion button. We also keep listening  to our users, as their feedback and opinion matters to us. We’re the first Instagram iPad app with portrait mode supported which was suggested by one of our users.

We’re so excited about Padgram’s rapid growth , so far we are No.3 photo app in the US, that won’t be the end of our great achievements. We will keep going further and further.

To end this post I would like to say , ” When we start a journey we always start it slowly….but then it gets faster and faster, the important thing is to start the journey and then you can head further than you thought you would…”

Download Padgram here, any comments are appreciated.

Padgram 3.0 brings in Pinterest-like categories and portrait mode support

We’re glad to announce Padgram 3.0, a major update to the photo app. The update includes support for both portrait and landscape orientation and browsing by category as well as popularity, including: Nature, Pets, Girls, Kids, Food, Fashion, Cars, and Architecture.

The most important new feature in this update of Padgram is a redesigned browsing system based on categories in addition to popularity. Although browsing based on number of followers is common in Instagram and Instagram viewers, results are often skewed towards celebrities and businesses. Instead of browsing the most popular photos, users instead are browsing the photos of the most popular people or companies posting photos. With the addition of browsing by categories, Padgram can now more accurately reflect the interest in photos posted by a broad spectrum of typical Instagram users. Each category contains 100 users of the service, chosen by experts at Padgram. Users can email us (team@pinssible.com) to apply for inclusion in a category, and new categories will be added over time. Here is the screenshot of the Nature category:

Previous versions of Padgram included support for operation in landscape orientation only. Receiving many user requests for the addition of portrait orientation, version 3.0 now incorporates this feature. Portrait mode is particularly valuable for iPad mini users, who typically hold their iDevice in portrait orientation. Here is the screenshot of Padgram in portrait mode:

We are always trying to be responsive to Padgram users’ requests for new features. Support for portrait orientation and browsing by categories represent a major step in the evolution of Padgram. Try it now, we won’t let you down.

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: http://prmac.com/member/view-release-50928.htm

And the app is already here: http://itunes.apple.com/app/id539297584

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: https://itunes.apple.com/app/id539297584

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 paul_yan@pinssible.com 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: https://github.com/johnezang/JSONKit

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 https://github.com/johnezang/JSONKit. 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: https://github.com/johnezang/JSONKit
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
[httprequest.setCompletionBlock:^{

// 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.