Thursday, January 31, 2013

Create card in Trello from Salesforce case

Yes. Danlec already created a bookmarklet that lets you create Trello card from many services like Fogbugz, JIRA, Github and more. I forked his code and included the functionality to create card with salesforce case information.

  • It allows you to create a card with Case Subject and description from case record.
  • If there is a recent comment (at least one comment) it will ignore the case description and copy the recent comment for card description.
Go create a card -

Wednesday, January 16, 2013

Prj - Times of India epub

Remember my old post about the TOI - Epub project? Yesterday, I published the source on github. If anyone still interested, go ahead and take a look at the source. Kindly go through the Dev-Notes.txt, as it has all the urls and image path used to inspect their mpaper hiearchy.

How does it work

  • It loads the mpaper in an iframe (test.php)
  • Uses jQuery to parse the iframe's html and get the article url.
  • Links of articles are combined as a JSON object
  • JSON dictionary then POST'd to (convert.php) which uses an opensource epub library to create the ebook version.
Github repo for toi-epub

Expired distribution provisioning and Yak shaving

Last Thursday one of my iPad app's provisioning file has expired. Client brought it to us at the very late moment, the iPad app was distributed internally as an enterprise app. App users are for HVAC technicians, app integrates with their organization's CRM (Salesforce) so distributing it with App store doesn't make any sense.

As immediate action, I tried to renew the provisioning files with iOS developer portal. It does not provide an option for renewing distribution profiles but developer provisioning was given an option to renew. The same goes for trying to renew with xcode organizer.

A quick search on Google and StackOverflow to know what will happen once the provisioning file get expired. After referring few wrong posts I come to the conclusion app will continue to work. Only later I come to know they are wrong (atleast in this case) #Mistake1

As per "Ain't broke don't fix it" golden rule, I didn't take any action. I thought, Renew button on distribution provision wouldappear once it get expire. The worst case scenario I expected was distributing a new build.

The day comes and provision file expired for all of us at same moment, I had no timezone advantage (UTC knows no mercy). #Mistake2

It was hard to come to this conclusion at the time, deleting the provisioning file of a suspended app and removing it from background seems to work. I had to restart the device to confirm. Also later it was showing "Expires in 0 hour" and "Expired 0 hour ago". There was no minutes so I had to wait like  till the very last minute for testing.

Duplicate Keychain

I had paid a price for having very little knowledge about Keychain Access and their certificates. Though I deleted all my developer and distribution certificates under Certificates category, xcode was nagging about the duplicate. #Mistake3

I gave up on the idea of providing new build with same AppID and tried a new AppID. No sugar there, stupid xcode and keychain util. Yes I tried the View->show expired certificates too.

Finally I had to find the directory where xcode save the profile and delete manually. Also I have to search for  "" and "" in all Keychains and Category and delete them. Also created a new distribution profile with same app id.

Xcode updates and iOS 6 depcrecation of supportedInterfaceOrientations

Every new version of Xcode delete the old or previous iOS SDK as its post installation step. I can understand this from Xcode developer perspective but from an app developer it is a nightmare. My system admin deleted all my previous xcode dmg archive from their NAS drive as it took 40+Gb.

I had Xcode 4.5.2 installed on my dev machine and the application was built with iOS SDK 5.1. The Zip archive of prior to xcode update didn't help either.

Though I was aware, there are issues with interface orientation behaviour in iOS6. Somehow I assumed, it will not be an issue as my deployment target was iOS 5.1. I was wrong again. #Mistake4

The new build submitted to customer using iPad2 with iOS6 noticied it rightaway, where I was having first gen iPad and no way of identifiying it myself. Theoritcally i could have tested this with iOS 6 simulator but i literally had 0 minutes as technicians were out in the field and find no way to see their tickets, site and asset information. #mistake5

Not having an upgradeable device hurts a lot, I blame on both my company for not providing me a decent device and Apple for their limitations. 

TL;DR - Lessons learned

  1. Application will not work once provisioning profile expired. 
  2. Provisioning expiry time is UTC i.e., No timezone advantage even if you are NZ dev supporting PST customer.
  3. No way you could get a correct answer for Keychain Access and Provisioning file issues. Closed systems and DRM, even after paying large sum for devices and development you can't install app without mothership's cryptic certificates.
  4. XCode upgrades and Deployment targets are not your friends.
  5. iOS 6 Autorotation behaviour is your enemy when you build ios 5.1 target.
Looong story short, I ended up creating a new distribution provisioning file with existing app id. So the technicians need not enter their user id, password and security token again. Also had to fix the the orientation behaviour for iOS 6. 

What I initially thought of a 10 min work took like 4 hours overall, timing was so perfect I left office around midnight. And I was morally down with my inability to make a right time estimation even after years of experience.

Sunday, January 6, 2013

Idea Vault: Prj - Dug Me

Task management app with little twist. Yep, Dug instead of clippy while nagging.

Idea is to log all our project ideas similar to logging notes in nvALT. This app runs in the background and randomly nag you to split a one line task you had logged earlier to multiple small tasks.

For instance, consider the one line definition of a project is "Apple Ping Fail comic",  one fine day Dug will alert you to split the tasks if possible.

Then you add the task split as
  • Search for Steve jobs raging employees or on-stage image
  • Search for Ping sign up screen
  • Search image of confused people with registration form
Some time later Dug present one of a sub tasks to define no. of minutes required to complete the task. Say you add 15, 5 and 10 respectively. When you are idle on your computer, Dug will give you a random subtasks to take an action.


  • Add tasks (projects)
  • Add subtasks
  • Mark as complete
  • Define time required for tasks
  • View status (no. of times ignore button clicked against a task and so on)
  • Workflowy like tasks editing
Initial Screen


P.S: I did replace Doug to Dug in post but text in images are hard to replace. So pretend it is intentional :-)

Tuesday, January 1, 2013

Idea Vault: Tree view

A Bookmarklet or a Browser extension to select the root element of a DOM (UL/OL) to view the Inverted tree structure of its child nodes.

Due to usability issues in horizontal scrolling, we settled on Expand/Collapse Tree view design for almost all usecases. At times I find, it would be easier to understand if we can visualize the Expand/Collapse Tree view to traditional inverted tree structure.

  • Role Hierarchy trees, 
  • JSON - visualize JSON as inverted tree while inspecting data structure. 
XPath for selected node is my must have feature

P.S: Try "Play Walkthrough" on link above.

Project Dumps

Wish you all a very happy new year!

It is 2013, another chance for us/me to start a new beginning. I believed in Mayan so much, I never had a plan post 20th Dec 2012 :)

I had a bad habit of logging what I call "project ideas".  Whenever I do a task where I believe I could make it better, I log them, hoping I will spend time to work on it as a side project. Here is partial screenshot of my list

I was listening to Merlin Mann recent episodes (Episode 95 to 99), he tricked me to give GTD-Getting things done another try.

I guess I can atleast to do the first step, log all. Well, I have already logged them in simplenote / nvALT, since I don't think I execute all, I am sharing it public to see if I can collaborate with other interested people.

Some ideas are dead-on-arrival like the "Apple - Ping fail". Some are just problems I don't know the solution yet.

By the way, I didn't say I have million dollar idea :-) Let me see how it goes.