Sunday, November 3, 2013

RescueTime weekly summary and Google Script

I was cleaning up my mac before handing it to systems on my last job. I had a couple of days just for the Knowledge Transfer of projects and nothing else. I have always run two or three passive self policing apps like Rescuetime and Timing etc.,

I have been using Rescuetime for little over two years. Since I'm a cheap/free user, I cannot use their premium features like view or export past data. However, they send a weekly summary email with enough data. So I was curious to know the pattern of the way I work.

I wrote a small Google script that parses the text part of their email and save it in a Google Spreadsheet for analysing.

Though I have two years of rescue time summary email, there are two different template. So I have parsed the email since Jan'13. (I believe they recently changed the template as of Oct-13.)







I was quite happy that I am not that lazy ass as I thought. I have spent quality no. of hours on Software development and Utilities. Utilities are mostly Terminal/iterm2, nvalt, custom tools I use outside of IDE but related to development. And I see I am consistent with my productivity % and the way no. of hours logged per week.

You can find the script here and the spreadsheet template I use to find the data here. I have cleared the content of "mail" sheet after running the "collectSummaryEmails" method from your clone of the sheet, you should see data from your Gmail. I left the other sheets with the data so you can follow.


Sunday, August 18, 2013

Raspbian + XBMC + Airplay

TL;DR: Yes, you can. If you are only interested in the steps skip to the relevant section.

I own a Raspberry Pi for closer to a year now. I was not able to use my Netgear N150 (WNA1100) dongle until last week with it, I was kind of lost my enthusiasm by this bitter experience and hold my experiments for long time. Other than installing some console emulators and XBMC in last 6 months, I have not done anything with my Raspberry Pi.  You can refer my adventures here and here.

Ever since I heard about Pidora (Fedora distribution for rPi); I wanted to try Pidora to check whether it supports my wifi dongle. I also recently learnt that Raspberry team officially announced Berryboot alternative called NOOBS (technically both are not same, I believe with Berryboot you can dual-boot with multiple OS). I got curious and finally took a day off to try.

NOOBS packs 6 OS for rPi. Raspbian, Pidora, Risc OS, RaspXBMC, OpenElec, Arch linux) in a 1.2G zip file.

I have tried Arch, Risc and Raspbian in the past, and I was not able make my wifi dongle work with any of them.

Much to my surprise with stock Raspbian disro my WNA1100 got detected and connected to my wifi out of the box; almost zero steps.

Steps:

  • Download NOOBS archive and unzip into your SDCard.
  • Reboot to your SD card and select Raspbian from the welcome screen.
  • This should wipe your SDCard and install Raspbian in about ~15 minutes. Not to worry you can still have all the OS available for you to install later.
  • Once Raspbian boots for the first time. Configure  your network (eth0 or wlan0).
  • Do the usual system upgrade by running the following command in terminal.
    sudo apt-get update
    sudo apt-get upgrade
  • Install XBMC by running the command. This should install XBMC and its dependencies
  • sudo apt-get install XBMC
  • Install Airplay daemon by executing the command
    sudo apt-get install avahi-daemon
  • Once avahi installed, Enable Airplay in XBMC -> system -> services -> Enable Airplay services.
That is all to it, once your iDevice and Raspberry are connected to same network you should be able to share photos/Videos/Audio via Airplay from your iDevice to Rasbperry Pi.

Other Notes:

  • Instead of dd-ing the image to SD card, install it directly on rPi. If my memory serves me correctly, my Macbook Pro late 2010 took almost 40-60 min to dd Raspbian image to the SDCard. Where as installing Raspbian with NOOBS, directly on rPi took only about 15-20 minutes.
  • I couldn't get my wifi configure with hidden SSID.
  • For those who keeps tab: I did try Pidora, it was very slow compared to Raspbian and I was not able to configure my wifi dongle with it.
  • If you are only looking for media center, I would suggest you to try OpenElec distribution from NOOBS. It is noticeably faster compared to XBMC on Raspian and RaspXBMC distro.
  • Keyboard is not functional when XBMC displays onscreen keyboard. The workaround at the moment is to execute XBMC as super user.
    sudo XBMC-standalone.
  • XBMC does not support Airplay mirroring. However there is a new application called rPlay seems to solve this problem.
  • Not sure if rPlay is a free application. The folks at rPlay are kind enough to share a licence as a beta tester. I have not tested it yet.

Why Raspian + XBMC

 Well, I'm a greedy b!@$%!$d, I want to use it as linux machine + media center + airplay receiver + gaming console. So direct boot to OpenElec is not my solution.

Other Links


Since I have checked off this task, now I can buy Apple TV and still be proud that I had configured and played with Raspberry Pi as Apple tv alternative ;-)

Saturday, July 20, 2013

Grep - Swiss army knife


I have used this command sparingly in the past and I recently learnt more options by solving couple of my problems. I really don't know whether grep is the right choice here, but hey! it worked :-)

Problem 1: Filtering CSV

I had a very large CSV file of size 620Mb, a report exported from salesforce. I have to find the duplicate accounts and contacts with same email id.

Excel and Numbers were either crashing or taking light years to respond to any of the action I had to perform on the data.

The CSV was in the format:

Email: unique@domain.com

Contact: 1 Sales Contact
Duplicate Contact 1

Email: duplicate-exists@domain.com

Contact: 2 Sales Contacts
Duplicate Contact 1
Duplicate Contact 2

Email: duplicate-exists@another-domain.com

Contact: 3 Sales Contacts
Duplicate Contact 1
Duplicate Contact 2
Duplicate Contact 3

I knew I could just see how many contacts has duplicates by simply doing a grep -i 'contacts' | wc -l but I would like to know the email id associated with the contacts which is not in the same line.

Quick search on man grep lists an option to print previous lines in addition to the line which matches the string. Here is the recipe I used to solve the problem.

#this is to return all emails and sales contacts
Ξ ~/Desktop → grep -B 2 'Contacts' filename.csv | grep 'Email:'

From Manual 
-B num, --before-context=num
    Print num lines of leading context before each match.  See also the -A and -C options.

 

 Problem 2: Objects and APEX classes linked to a particular object.

We are in need to provide effort required to do an impact analysis of migrating an existing salesforce object to a new object. This activity includes identifying the no. of classes has a reference to the object in question and an effort estimate to analyse those source files which has also has a reference to the object.

To arrive an approximate effort estimate, we need a list of files and no. of lines of each files.

Salesforce Schema browser is not very helpful if I want to know just the _number_ of objects associated, not what is the relation and how it is related to another object. And it is also a real pain to collapse and follow the links/pipes in a production environment with larger number of objects.

Like every other occasion, management was asking the numbers as soon as possible. And developers were doing a Ctrl + F on Eclipse on classes and counting the no. of files. I could not suggest or question the team as I have only very little knowledge about salesforce APEX development.

Since I am the author of iForce (a Sublimetext extension to help salesforce development) I knew that all the files are just text with metadata. So If I know the pattern to search for I could use grep to get the list of files and pipe it to wc to get approximate number we were looking for.

Well, it took more time to finalise the pattern of object usage in APEX code than to find the number. Also the default payload.xml of iForce doesn't fetch all the required objects so I had quickly replaced the payload.xml on my iForce working copy with the one from Eclipse workspace.

Once I refresh my iForce working copy with one from the server, the answer is just a minutes away. Here is the list of commands I ran to get the number, I just copied it to excel, formatted columns with bright colour background for the people above my food chain to process ;)

Ξ salesforce-sandbox/classes → grep -iE 'new contact||new account|' -l *.cls |wc -l
    
Ξ salesforce-sandbox/triggers → grep -iE 'new contact||new account|' -l *.trigger |wc -l
      
Ξ salesforce-sandbox/components → grep -iE 'new contact||new account|' -l *.component | wc -l

P.S: Though count from wc -l doesn't provide the meaningful number of lines as CLOC. But I was in a hurry, and I have not tried CLOC with APEX code.

Link: This is Linus

Last week Zite suggested this article, I've known about Linus and his rude comments. But reading this article, I realised that being polite is not right solution for everything. Having the experience of working with the many developers over the years, I met only very few people who act on subtle comments I pass during discussion about code/best practices. The rest just ignore and do what they have always been doing.



The fact is, people need to know what my position on things are. And I can't just say "please don't do that", because people won't listen. I say "On the internet, nobody can hear you being subtle," and I mean it.

Because if you want me to "act professional," I can tell you that I'm not interested. I'm sitting in my home office wearing a bathrobe. The same way I'm not going to start wearing ties, I'm *also* not going to buy into the fake politeness, the lying, the office politics and backstabbing, the passive aggressiveness, and the buzzwords. Because THAT is what "acting professionally" results in: people resort to all kinds of really nasty things because they are forced to act out their normal urges in unnatural ways.

At times you need to be King Leonidas and kick them hard so they learn and do not repeat the mistake.

Link: Linus Torvalds defends his right to shame Linux kernel developers

Sunday, July 7, 2013

WWDC'13 - Hidden Gems in Cocoa and Cocoa Touch


If you did not have enough time to go through the 50G contents from WWDC'13, I highly recommend you to watch the session 228, aptly named "Hidden Gems in Cocoa and Cocoa Touch".

Links: PDF | Video - SD | Video - HD

There were like 30+ tips, if you are interested my score, it is only 8.

Third year in a row, I published the compiled list of sessions and download links here. Note: You need iOS developer program credentials to download the files.

Sunday, April 28, 2013

Request To Webdevs: Include Ip/User-Agent Info In Forgot Password Email


The Forgot password email template has been the same for more than a decade. It is time to include more information in the email.

Here are the couple of Forgot password email I received from Facebook and Twitter recently. Both of them were not initiated by me, my Facebook account is deactivated a long time ago. I have also recently changed the email id to a different email id, and I still receive at least once every month.





I suggest to send more information to the user to take decision. For eg., Gmail displays a notification bar if there are any suspicious activity, like login from two different countries in short span of time. Other webapps should also do the same, it is not 2004 anymore. People ignore these emails if they don't initiate it, and the web apps don't have enough information to block the IP if there are patterns.

So kindly include information like IP Address, Browser Agent, Country/State if possible.


Saturday, April 27, 2013

Some funniest moments from my appraisal

I had my one-on-one meeting for 2012-13 appraisal this week. I was disappointed with the feedback given to me. Well, I have been working for very long time, and I know if you are not hurt then it is not an appraisal.
We received a lo..ong email from my manager couple of days before the one-on-one meeting, explaining his expectations from resources. A week after we submitted our self appraisal. Though unofficial first rule of appraisal is not to talk about appraisal, I couldn't help myself from posting this.
  • We have raised our bar, so no one get 4. (Points: 1-worst, 4-best)
  • Discipline: 1 Reason: I'm not available in office at 9am.
  • Communication: 2 Reason: My emails were always short, 3 to 5 sentences.
  • Kaizen/continuous improvement/initiative and resourcefulness: 1 Reason: You didn't participate in any kaizen/improvement or initiative
  • Interpersonal skills: 2 Reason: It is my honest feedback.
  • I got three on other parameters.


 --- ✄ ----
We have raised our bar
If no one get a 4, what is the point in keeping?

Discipline : I'm not available in office at 9am.
Our official work hours starts at 9:30 and only handful of people (less than 5) including security  on the days I go early. I have asked is the only parameter? their answer was yes. They don't consider the fact my flexi-timing is actually 11:30 - 8:30 and I log 12+ hours a day  at least once a week. Also not ready to consider, I need to support both AUS and US (CST) client.
I have explained my work timing numerous occasion, It is the way I could skip stupid traffic, and above all I ain't a morning person. On the days I go early I reach office at 8:00 and stay till 8:30.

Communication: My emails were always short, 3 to 5 sentences.
Yep, That is the only parameter. Oh! well, you don't use signature just name at the end.
  • Do you know sending a short email is the right way of doing it? 
  • Have you aware of three.sentenc.es or five.sentenc.es?
  • Any of my email were ambiguous?
  • Did you know I always send my vcard with all necessary info for the first time?
  • Do you know your signature breaks my search has:attachment workflow?
  • Did you ever find an attachment when required within seconds while you are on a call?
I didn't participate in any kaizen/improvement or initiative
  • Did you know anything about Joel Test?
  • Are you aware that I was the one who get repositories created in org's svn server and checks in code in whole of department?
  • Did you know I made sure the team know what is the use of SCM. And follow up with everyone  in team to ensure they check in code at least once a day? Well, he did call me and asked what is SCM? when reviewing my self appraisal :-(
  • Did you know none of other team's code gets a backup anywhere except customer organisation?
  • Are you aware of the fact I created a portal for the team to share knowledge? in which you are admin and receive notification?
  • I share articles within team (mostly inexperienced programmers straight from college) about new technologies, productivity (libraries, scripts, automation)
Interpersonal skills: It is my honest feedback
"It is very subjective" was the feedback. They didn't point me the direction on where to improve. One other feedback is, I stop them abruptly when talking. Well, it is intentional; If I don't get what they (customer) was talking about, I stop people harping "Yes, you are absolutely right".

One other incident this week, I was explaining benefits of native application over  mobile web. People on top of my food chain was saying native is not secure as we need to re-implement login and other security features, so it is better to go with the default features provided by salesforce. If it was not a conference call I could have stopped them and would have wrote "OAuth" on white board.

Writing about it more was actually a demotivating task, yet I did it. I may redirect this hate to write a manifest for my imaginary startup.


Saturday, April 20, 2013

Book Recommendation: Testing with coffeescript by Jack Franklin [Free ebook]

TDD (Test Driven Development) was introduced to me around 2006 with PHPUnit. As a naive, I couldn't see the benefits, eg., I saw the pattern of code has been updated very often (growing organically) and frequent failing test. I was like, Why should I write unit test to test my own code? with the same data I used for manual testing? As they say I was seeing the forest for the trees. I failed to realize the failing test is actually the benefit of practicing TDD.

I feel little embarrassed to admit that none of my projects followed unit testing or automated unit testing. Because of the kind of projects and technology I use in my day job. To clarify all my projects was always extensively tested but manually. "The Specs" are always in either comment or in commit logs.

Nowadays, I'm trying to introduce unit testing, automation/continuos integration wherever possible. I'm still learning, but I get the big picture now.

Though my only coffeescript was an utility script which I wrote to test the water. I got a chance to read this book on a weekend, it is only 50+ pages long and it explains how to practice BDD (Behaviour driven development) with Coffescript and Jasmine framework.

Did I say, the author Jack Franklin is only 20 years old? Kids these days :-) It took half a decade and 20-year-old to put me to shame for not practicing TDD/BDD earlier.

As they say, When in doubt always test.

Book link - Testing with Coffeescript by Jack Franklin

Friday, April 19, 2013

Disable networking/internet from command line on a Mac

If you want to quickly disable internet/networking to test offline features. Doing it frequently with System preferences GUI is quite a slow workflow.

Here is the command to disable your ethernet quickly.
sudo ifconfig en0 down
to activate it again
sudo ifconfig en0 up

If you are connected via wireless you can disable it with
networksetup -setairportpower en1 off
to activate it again, use
networksetup -setairportpower en1 on

en0 and en1 are device name, which you can get from running the following command
networksetup -listallhardwareports

Tuesday, April 16, 2013

IdeaVault - RPi dashboard

I couldn't help myself after listening to John & Marco discussion about the pricing of Panic's new app Status Board.

I agree with the pricing of the app, who could deny John's reasoning? With all due respect,  a dedicated iPad just to display a dashboard? sounds like diamond studded car. It is a overkill and I would argue you ruining the destiny of your iPad. It deserves more care than hiding behind your old TV/Monitor.

Raspberry pi is the right candidate for this task, though I guess Arduino is also cheaper solution, but from development perspective (I'm not sure, I have come across some nodejs modules), I would suggest to go with Raspberry Pi with Html5 (http://shopify.github.io/dashing/).

Wish I could develop a quick prototype that is compatible with Panic api for Raspberry store.

Saturday, April 13, 2013

Bitsplitting - Logo


Bitsplitting - Beautiful logo I have seen in a long time. I don't know how @danielpunkass decided to use one version of the two. I couldn't decide which is the one I like the most.

I also like his intro music of Bitsplitting podcast.

Saturday, April 6, 2013

Laptop Cooling Pad & Sudden Motion Sensor

Finally I found a good usecase to test the Sudden Motion Sensor of my macbook pro. I was curious to know whether there is an impact of cooling pad's fan.




Saturday, March 30, 2013

Project Plan and Gantter.com

Project planning is always a difficult task for me. I could do anything to skip the project planning because for following reasons:

  • I know right away I am not going to meet the deadline, regardless of time provided.
  • Splitting the tasks to be developer friendly, without modifying the timeline promised to client by sales is very hard.
  • The tasks breakdown provided at the time of proposal is never the same. 
  • Introduce milestone to match the target revenue set for the subsequent months by your division.
  • And I hate anything related to Money (Revenue/Commercials)
For some reasons I always end up as a Technical lead who does everything related to project /people management in addition to actual development. It has been the same in all the companies I worked so far. Though I know it is good for me in career, every time, I think it is a Project managers' responsibility and they are delegating. I do them with cursing every minute.

This past week, I was assigned to prepare a plan for a new project. We don't use MS Project and the Excel format which we use is not very helpful If I miss a non-working day or any modification of tasks to be done in middle of planning. Since I hate it, i was procrastinating happily in finding alternatives. 

--- ✄ ---

Gantter.com is in my bookmarks for long time, though I didn't use it heavily I thought I had give a try. After spending 3+ hours with it, I kind of liked it. It is far better than MS Project whatever the version I used long ago. 

As a true developer and a person who notice everything, I also jolted few features that could improve this tool a lot. They do support extensions and I'm yet to explore the documentation. Hopefully someone could implement the following features someday.

  • Modify/Assign resources for multiple tasks?
  • Keyboard friendly Predecessors 
    • An autocomplete text/dropdown with {Id}-{Task Title} eg., 2 - Wireframe internal review
  • Option to view just the duration of filtered resource?
  • Filter tasks for more than one resource
  • Export to Excel? (just as values should be a good start)
  • Calendar - Marking non-working days could be easier
  • Tasks properties Dialog
    • In addition it could have {Id}-{Task Title} in the title.
  • Keyboard shortcuts 

Modify/Assign resources for multiple tasks?

Right now, you had to manually click each task row and select a resource to assign. This could be simplified, by providing a multi check options to update resource and their utilisations for multiple tasks?


Keyboard friendly Predecessors 

The same for Predecessor, I agree if you have more resource you don't include a constrain of completion date for previous task as Finish-to-start for every item. But my issue here is not a multiple update. But have an autocomplete text or a drop down to easily select the predecessor.
Or you could go crazy like Xcode4/Interface Builder or Omnigraffle like joining tool.

Option to view just the duration of filtered resource?

When you filter by resource, the total hours displayed are not the sum of hours for the resource.  It is the same as the complete plan.



Filter tasks for more than one resource

If you provide option to filter tasks for multiple resources say I would like to know the tasks assigned for Dev1, Dev2 in case of development and Tester1, Tester2 to know my test schedules.

Export to Excel?

One thing I learnt in my experience is all bosses would like to see the plan in Excel. Trust me, I wrote a project time sheet management tool with Google Apps Script. My VP approved this crazy idea because they can just view their data in a spreadsheet. 

As of now Gantter doesn't allow multiline copy. Right now, I use a workaround, Project -> Printable HTML and copy the content to Sublime text, and do a Find & Replace to get the tasks list.

Calendar - Marking non-working days could be easier

All you have to do to mark a working day as holiday/non-working day, you need to goto a calendar properties. Select a date and clear the working time. This is not very friendly, it would be cool, if I enter/key in series of days to be ignored in planning.

Tasks properties Dialog

Refer the image, it would be immensely helpful to know which task is getting updated. I'm not sure whether it is a bug, I see the task list in the plan is scrolled to bottom. May be I was having a FS constraint at the bottom related to the particular task, but it was annoying, to click the General tab to know which tasks I'm correctly looking at. 


Keyboard shortcuts 

Because of Google, I can't live without keyboard shortcuts. It is also a reason why I can't switch to Feedly like everyone else.
If you provide  keyboard bindings for Task properties dialog to switch between the tabs or the fields, it would be helpful.

The current plan is not an exhaustive list of tasks (around 120+ line items). Still I think Gantter could be more helpful with the suggested features. 

Thursday, March 21, 2013

Google Reader - Take 2

I was insanely angry with Google's decision still I am. Here are some stats from my Google Reader takeout data.
  • Following 44 people
  • Followed by 31 people
  • 690 Articles shared* with me
  • 1017 Articles shared* by me
  • 5657 Starred Articles
If you are people who think Social feed is replacing it, I promise you it never will. Reader is completely a different beast. I agree with Führer here. Leave.

Why I don't use Google+

* URL: https://plus.google.com/100489225191991285746  - big random number?
* It is a Facebook clone.
* Vanity URL - +YourScreenname - Really?

If you guys really want the people to use Google+. First task would be providing vanity URL to all. Even if they don't get TheAwesomeUsername people would be happy to pick a screen name BadAss2041AD.

I would suggest to take Tumblr's path of Social, when you decide to copy, copy a decent one. Merge your old Blogger system with Google+ without breaking internet. No user would like to see a 404 page.

*Sharing before Google+

Saturday, March 16, 2013

Don't Kill Google Reader


Larry, if all these are because of Steve's advice. Learn one important attribute of Steve, his ability to change his mind. Kill products that are copycat of others (cough! cough! Google+). Whatever the efforts that went into recent changes of Google reader (Unified theme, Removing "Share" feature and add "+1" features) are the reasons why there was a decline in usage.





There are reasons why people don't use Facebook as their newsfeed and Google plus is not going to solve it. I have shared a lot of articles until you pulled the "share" feature from Google reader to integrate with plus.google.com.

Above all de Führer too is not happy with your decision.

Brooks was here


I was in Bangalore for two days, I kinda liked it.

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 - https://github.com/palaniraja/Trello-Bookmarklet


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 xcode.app 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.

Features

  • 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





Inspirations


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



Idea:
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.






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

Resources
P.S: Try "Play Walkthrough" on thecodeplayer.com 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.

Blog Archive