Saturday, November 09, 2013

Month 115

The first six months have rolled on. These 6 months have reinforced the notion about my inability to sustain. Very little if any positive has come out. It's been an continuous and dangerous slide down. Ten years seem a distant future. Farther than the last 10 looked on the eve of 2003. As impossible as the monsoon of 1995 during a wet ride home in a packed bus at the Barakhamba road in New Delhi. 

I'd never forget that ride. Moments that are so momentus but you don't realize when actually living them. 

My wife and daughter are away visiting her parents. I'm alone in the house and pensive,brooding??

The US visit is behind me and yet looming large over the future. The foreboding coming true. The ramp downs actually turning into an averlanche. The business wilting away sucking the life out of me.
Yesterday,
I had a night out with my usual mates. Wife is away and the boys came over to enjoy the evening. 

I actually said during our conversation. "The amount of negativity built up inside me is not healthy. " little  can they do to ally or dilute the vitriol or offer solutions.  All they could do is lend me their ears and what good sport they are! I truly value their company. They make life bearable. Help me make it through another week if not more. 

A new thread has started on the job hunt. Just started... Just like several others before that faded into nothing.  It's a demotion. Reporting into two level below where my classmate is.  But maybe that's an escape. Or a new beginning on a lower trajectory or a mirage or a death spiral accelarator.   

Time will tell 

Monday, November 04, 2013

The Myth of Cheaper iPhone 5c

I've already written about it when iPhone 5c was launched and it seems most people have seen through it already.

The point here is different and it comes from my experience of iOS 7 on iPhone 4. Ever since I  upgraded to the new OS my iPhone 4 which till iOS6 was a fairly high end, responsive device, dropped on its knees and started crawling.

As the OS gets better and more powerful, the hardware needs to keep pace with it. It would not make sense strip away features / capabilities from the OS just to force fit an underpowered hardware. And suppose you did that, the moment you fork the OS, the entire Apps ecosystem will get rocked. So far Apple has kept the appstore on a tight leash and if the apps are more mature/stable, its only because there is limited fragmentation. In other words "There can't be a cheaper iPhone".Apple anyways drops the price of the earlier model as soon as the new one is launched. The older model is supported for another 3 years or so and then sunset. That's what they did with iPhone 4 this year.

Its easier for the Andriod to differentiate itself by forking the OS as we already have a spectrum of devices for all budgets. In fact Andriod 4.4 is going to do something similar.

Lets see how it pans out.

Reliance iPhone Scheme

This is an awesome scheme that according to me can do the same magic for Reliance as it did for AT&T 6 years ago.

Rs. 2999 for an iPhone 5s with all you can eat Data, Voice and Messages is simply phenomenal and I think this will change the way Reliance comm is seen in the masses. This can turn the tide for reliance and get them the high ARPU.

I'm going to buy reliance comm shares just for this scheme as I think this scheme has the potential of turning around their fortunes.

Post #30 I've got visitors

Just yesterday, I was connected to my site over the database and was stunned to see I had a couple of registrations. I almost freaked out. No one, ever visited my site in the last 1 year. I've been the sole user of the site. In fact I do not even have an "about us" section. 

Not just that they visited, they also registered. But then that's all they did. They never went ahead and set up their accounts. Leave alone uploading their statements etc. 

So I got nervous. I've already figured out a couple of vulnerabilities in my site and I thought I must plug them asap.

So the first thing I decided to secure was the database. Now sql injection is a common malice. What I worry most is someone is going to drop the schema, table or delete records.

Now its not so easy given they don't know the name of my schema etc. But even then, why take a chance. So I decided to create a brand new user just for the application and gave it only select, insert update execute rights. No DDL grants. No delete rights either except on one table as I needed to delete things using the application.

Good learning and finally when I was done, I felt a little more secure. I now need to address a few other such stuff.

Also, I feel I need to improve a few other things on my site to make it a little more intuitive. Currently, I don't think its that easy to navigate.I'd do it in the next week or so. 

Wednesday, October 30, 2013

Its NY All Over Again

Its been almost a year, I visited NY. The feeling is uncannily the same. Foreboding, glum, cloudy and unsettling.

The earlier account I wrote about last year, actually did finally shut down. Along the way it left my position in the org vulnerable. This time its a different account. I'm just moving in. But the business is shrinking. Its not because of me (Is it?). I'm just moving in now. The client has decided to insource work and reduce contractors. As we play in that space, we're hurting.

Coming here, meeting the customers, listening to them break the news over and over. There are several stakeholders and all are in the same boat.

Know what? I need a change. A new beginning. In a new place. The question is how desperate can I get? And desperation is the key to effort. Effort to move out. To get out of this morass and turn over a new leaf.

Visiting NY is like a reminder that I'm stale and decaying. Nothing against the City. Its Fate!

Thursday, October 17, 2013

Post #29 AWS Upgrade

So AWS has been sending me notifications to associate a profile to my instance or some of the logging features would go off later this month.

Finally, I bit the bullet and went through the workflow. It was pretty straight forward. But honestly, I was least prepared for what happened next.

The moment I associated the profile, the current instance got terminated and another instance came up in its place. But the site, went down :(. I wasn't prepared for it and did not know how to respond. So I went through the process of deploying the latest build on the new instance (Beanstalk).

Fortunately that worked and the site came up after deployment. But that was not all. I had to reconfigure the Putty and also the GZIP all over again to get it back to where it was.

So now I'm back to baseline. An interesting day!

Monday, October 14, 2013

Post #28 Bootstrap and AngularJs

Learning to use Bootstrap and AngularJs. Alternative to Ext.js. Ext js has both put in together. It abstracts out the HTML and the CSS completely. AngularJs is like MVC brought to the browser. There are JSP like tags in HTML, Controller, Module, Route, Directives, Models et all. Essentially get everything over to the client. Let the server just provide the data.

I bought license to Webstorm IDE. $50. But a good investment if one really uses it well. I'm not a pro so no ROI for me. But a great productivity tool. I've been using Editplus and with my sloppy habits, debugging Sencha breaks was a real mess.

Though I'm not sure if what usecase I should implement. Budgetometer has gone as far as it could. I could re-write it, but that's no fun.What more can I create. That is of value to me. May be perhaps I can start tracking savings and investments.Chart the cash flows. That may be useful.

Am thinking about it.

Month 116

Falling Short.
I'm consistently falling short of her expectations. That's leading to frustration at both ends. Either the bar is lowered or the whippings will continue.
Nothing is ever overlooked or forgotten. It gets piled up until it bursts and then it gets ugly.
She is the Judge, the Jury and the Executioner...
Where are we headed!

Monday, September 30, 2013

Post #27 Cash - A Label or a Category

Now that I've been using the Site for about 9 months, I understand things a little better. The one niggle I've had for some time now is how to treat cash. All the cash withdrawals are categorized under cash. The actual expense head, such as Paying Salaries, or Fuel etc. are folded under cash. The challenge around this comes when you want to know how much are you spending on lets say, Fuel. There is a Category called Fuel which covers all the Card payments. But when I pay for Fuel through Cash, it falls under Category Cash and sub category Fuel. To get all the Fuel expenses, I need to add expenses under Fuel Category and Cash->Fuel. There is a workaround which allows me to get the right picture. But then its a workaround.

The question is how to treat cash? The solution, treat Cash as a Label and not a Category. To implement this I had to make major changes to my application.

In a real world application this would be a big Change Request. As there are real users who would be impacted. Their data needs to be moved seamlessly. The challenge was to identify a migration strategy. I wrote down the impact areas. Made changes to Dev env and noted each step. And then executed it in prod.

Given I'm the SME, Business and Dev, this should have been an easy job. But no, after all the movements I still faced 2 errors.
- Filters on Cash Transactions. I should have caught it during regression, but did not
- Rules. I completely forgot about that there might be rules around Labeling and these need to be addressed before the movement.
I got both these errors in prod. I fixed them and rewrote a few Rules and Budgets to adjust.

Honestly, if it were a live site with thousands of customers, this change would have been next to impossible to implement.

Note: Along the way had a few run ins with Sencha again. The command line does not recognize the changes made. Its a big headache. The tool is not yet mature.  

Thursday, September 26, 2013

iOS7 Has Arrived

iOS7 came last Thursday. I got in the queue 10:30 pm and I kept getting kicked out for about 30 min before I finally got through. 
A couple of good features such as Control center. I can now conserve battery by switching off blue tooth or wifi when not needed. 
The second feature is the task bar. I could now toggle apps and close them in a much better way. 
The search from any of the home page is also good. But sometimes it turns up inadvertantly. 
As I'm still on iPhone 4 the performance of the phone has gone down. It's less responsive. 
The worst part is that it broke my app. And pretty badly too. Because of the private browsing or some other reason it does not send remember me cookie to the server and that breaks my app. Lousy. It worked perfectly with iOS 6. 
The interface itself is flat which does not really very cool. A matter of personal taste. Many a times I do not know which part is clickable.
Overall a mixed bag. If it was not for the performance issues and breaking of my app I'd called it mildly useful. But as it stands today, it's retrograde. 

Sunday, September 15, 2013

QE Tapering and how should respond

I'm having a debate with a friend about QE, money supply an it's impact on world economy. It's just an exchange of views between two amateurs. Nothing insightful here. 
Late at night around 3:00 am, I drafted a longish message for him describing QE and associated blah blah. But then it exceeded the SMS permissible length. I saved it in my notes and forgot all about it. 

Today as I opened the notes for something else there it was. I thought its worth posting it here as a record of my thoughts on the happenings of my times. 

"In a demand slump in a liquidity trap the central bank should be credibly irresponsible and create expectation of higher inflation to get out of the slump. Prime minister Abe of Japan made it the Central point of its election  campaign and savagely expanded the Japanese money supply   The yen depreciated from 77 to 100 from oct 12 to mar 13. QE is part of the plan to fight deflation.  Now that the threat is receding there I talk of tapering the QE. The central banker of London has explicitly said that he will think abt tapering only once the unemoyment drops below 7%. Currently it's 7.5. It was always known that easy money in the us can create asset bubbles elsewhere such as the EM and once the tapering starts those will burst.  It's inevitable. It has to go today or tomorrow. Can't help it. The best our RBI can do is to accept it and not choke the economy by raising interest rates just to defend the currency. That will throw us into a recession.  It's already knocking at our doors. The car sales have dropped for 9 months in a row. First time in the history of the nation. It's a tough choice for Raghuram Rajan. I hope he chooses growth despite inflation due to currency depreciation. "

Friday, September 13, 2013

iPhone 5C Why?

Whenever a Smartphone company launches a new flagship model, the previous years Flagship model goes for cheaper. They why did Apple launch its 5C model for $100 less? Its the same spec sheet as iPhone 5 and iPhone 5 would anyway have gone on sale after 5S comes in.

Apple does take its customer bases to be suckers. And we all drool at the steps of the Apple God! Anything goes! They are discontinuing iPhone 5 which makes sense because not many would buy plastic given a choice between 5 and 5C. The only reason why I'd buy 5C is because I wanted a pink iPhone 5.

I believe there is limited mileage in coming out with 5C. Its just an eyewash!

Monday, September 09, 2013

Post #26 Sencha Again!

Sencha brings on some more agony. I completely agree that I'm a tech novice and will continue to have trouble delivering complex stuff. For people like me, Sencha is not the recommended tool.
The UI interactions are getting tough and complex with the mobile devices. Sencha tries to wrap HTML in JavaScript configurations. You don't see your familiar HTML tags. What you see are braces Curley , Square and Parentheses. 

This time or for about a couple of weeks now its been the charts. Sencha charts are deceptive. That's the least I can say. I could get the first chart up and running in no time. These were hardcoded data values, put together from Sencha documentation on charts. But since then, it's been a harrowing journey. 

The complexities include 
Updating the charts with dynamic data. Its a very tricky thing. Here is the use case.
List of Budgets (Tap)-> Load the expenses for the last 1 year for that budget and display on the screen.->There are 2 screens. First one for monthly expenses with averages and the second a pie chart of the various categories.
My solution was to define an xtype of panel that contains charts. These Charts were Items within Config.
The data for the chart was kept in a Ext.store and that store was refreshed on tap of the Budget. Now the problem was, when you defined the xtype, you assigned the store config a variable, which at the time of definition did not have any data. On tap of budget, I first got the data in the store and then created instance of the xtype. Despite me refreshing the data first the Chart would get not data at all.

After a lot of research I found a solution. I could create a basic xtype without the chart components. And on Tap after getting the data, I add the charts to the xtype. As the datastore was refreshed before adding chart to xtype, the datastore held the values.
Problem solved? No. Not yet. The ajax call to fetch the data is async. And so, the control moves on right after making the call to refresh the store and adds the charts even before the data is received. The result is the same. No data on charts.

The trick was to make the ajax call->Write a callback->In callback, process the data and populate the store->create xtype->add chart components to the xtype. Problem solved. Yes? No!

Now the Sencha Command tool started acting funny. In dev env, I could see the carousel with two charts. But when I built for production, I'd see only the first one.

The solution, do add twice. First for the bar chart and then for the pie chart.
Are we done now? Yes? No!

My title setting went for a toss. For reference check my previous posts on my struggles with changing the titles.

When you add chart components externally, the title setting gets screwed up. Wrote an unnecessary piece of code to check certain stuff and then change the logic for setting the titles. That too created its own problems such as, when you return back to the budget directly from the second slide of carousal, your charts would stop working. Finally fixed it up...

In between, I had major problems with sencha command. Whatevert I changed, the build production would continue to build old code. The updates did not reflect. It finally got solved. I don't know how. Spent a lot of cycles trying to fix that.

Then there was a another problem of my internet connection being slow. That took me a while to load the build to AWS. The AWS management console does not work will with Chrome. It keeps crashing the browser.

So finally, its done for the time being. Phew!

Tuesday, September 03, 2013

Month 117

In all my years of work, I've never processed so many emails in a day. I've read 200-250 mails a day and responded to. I've sent out dozens of emails a day (50, 60)but I'm scaling new heights here. Managing 350+ emails , sending 100+ mails a day is just crazy. I believe its counter productive. But that's where I stand at 40. Everyday its calls and more calls. From 7:00 am in the morning to midnight. I'm currently working 60-70 hours a week. I'm taking calls while driving. I've got a Bluetooth hands free attachment to car's wisor. 

On health front, No exercise since mid june. I've put on weight. More weight than I need to. My trousers are bursting at seams. Apart from calls, it was also due to heart scare(its not gone yet). I finally started a mild training schedule since monday. I'm running 5 kms. Its taking me 35 min. It used to be 30 :(. But its fine. I need to ramp up slowly. Its a beginning and I hope I can carry it forward. 

Personal front is bad. Things haven't changed. Don't know where it'll lead me. I know I love my daughter and want to be with her. Not sure of the trade offs.

I'm leaving for my native place this weekend. I'm carrying my reports. Plan to see a doc. I'm carrying the reports.

 

Saturday, August 31, 2013

Post #25 Sencha! Sencha!

When I decided to go with Sencha, I knew the learning curve will be steep. Learning vs reward is high. The documentation is adequate to get you started. To lure you in. But once you get in, you can get into a quagmire of intricacies that can ruin your schedule.

Since 5 in the evening I've been working on changing the title of the chart. It was harrowing... Things I learnt
- Unless you set the title in the config, setTitle won't work
- Real time waste was changing the Title of Charts. I have a TabPanel. Within that I have a list. On Tap, I bring up the Charts. This is an overlay on the list. There are 3 Charts in a Carousel. Each with a different title.As I browse through the carousel, the title wouldn't change. When setting the first title, I could do so easily. But changing... No Sir! After a lot of going round in circles, I finally read a line in one of the forums. Reference the navigation bar. Though it was under a different context, I thought it worth while to try that out. Afterall, I was't going forward at all.
It worked. So, to change the title after the carousel starts is to go up to the navifationBar and change the title.

There was similar agony, when I tried updating BadgeText. Simply updating the TabPanel's BadgeText, would not do. I had to put a .tab. in the middle to get there. Again I spent a lot of time and a one liner in some forum rescued me.

There was another one related to JsonP. Not so much Sencha, but as I was using Sencha learning tutorial, I'll put it on Sencha. When dealing with JsonP, one needs to wrap the Json response in a callback function. I did not know it. I would if I had worked on it earlier or tried to learn it. But the lesson was on Sencha. It took me good amount of time to get around it.

All in all, there are landmines in there. Be careful. Learning curve is steep.

Nonetheless, I'm moving fwd.

Wednesday, August 28, 2013

Post #24 AWS gzip Basic Stuff

Another small step. But it made a significant difference. As a developer, I'm always looking at performance and responsiveness of pages. A throwback to my developer days when 11kbps was the pipe size through modem. I kind of pride myself for thinking  and designing fast and responsive (not to be confused with css responsive) web pages.
As the number of transactions grow, the page performance degrades. Today, I have 2000+ transactions over the last 2.5 years. To load them all at once is becoming time consuming (50 sec from my home connection) so here is what I did.
- Tweaked DB Index. As the data size is still small there wan't  much I got out of it
I then turned my attention to gzip. The compression commonly used across to minimize the payload.
I was looking to apply it on tomcat when I figured out that AWS by default provides Apache as part of Beanstalk. I didn't know that(Ignorance?). It then made sense to apply these to Apache to cover the static data too( I'm now thinking of moving css / .js to Apache directly).

I researched and found out how to do within AWS by creating .ebextension folder and config file in the ROOT directory and package them in the .war file. But then it did not work for me. The deployment failed. I then dived into the unix world Telnet into EC2, check out the root. Change to super. Make directory etc.Change permissions etc. The command in myapp.config was to copy the Apache config file over to apache server directory and then restart Apache.

So finally it turned out, all that was required was to put a config file in Apache dir to enable compression and then restart Apache.

Did that and bingo!!!

The page that was taking 50 secs came down to 7 secs. Slept well!

Monday, August 26, 2013

Real Estate Rally

Real Estate Rally in India is in its last leg. One could tell by the kind of freebies doled out. Recently, my builder, with whom I had booked a house 3 years ago and the project still under construction, came out with 25:75 scheme. Pay 25% now and the rest on possession. The fact is he is not able to sell his inventory even after 3 years of launching the project. I'm sure a sizable inventory is left unsold or else he wouldn't have done this.
Across Mumbai you see an epidemic of 20:80, 15:85, 25:75, 30:70. Its a symptom? The rally has lost steam and is on life support. People are just not buying houses. They are waiting for the fall. And the fall is inevitable. Its just being delayed. When these projects of 20:80 come up for possession and investors start defaulting, the entire real estate will have a meltdown.
Its just 3 years away. May be even less. 

Friday, August 23, 2013

Post #23

So finally I got around to spend time on the mobile part. With Sencha et al. Took some time out last weekend. It was a long one and we went to Khandala to take some time off. It helps to take a small break from time to time.

Kept it simple. Just 2.5 pages. Record cash expenses and view them.It looks acceptable and my wife has started using it to record cash expenses on her Samsung. For starters, we recorded 30 something expenses for the month of Aug so far. Its working. We are getting a hang of the cash expenses.

Working on Sencha was a mixed experience. The documentation is good when it comes to learning. But not so great when we have coding issues and want to fix them. The community is active but not very strong. I got stuck in a couple of items. Spent hours figuring out BadgeText updates and another issue I can't remember. Also, the auto update on AWS had issues and took away a lot of my time.

So now I have MVP on the mobile too which was the biggest out standing issue. I still happen to be the only user and am resigned to the fact that it will be that way.

May take on some house cleaning chores next.

Thursday, August 15, 2013

Month 118

Another month. First Quarter. Well, I've survived 1 of the 40 quarters and how.

A new fear has gripped me. Its a matter of heart. Literally. Since April, I've been having discomfort in my chest. Particularly the left side. I got my ECG done and it so happened that I found I have an anomaly. Namely, my T wave is inverted in the third. Well I tell you, the internet is a dangerous place to research symptoms and inferences. My pain wasn't going and some article on the internet was predicting unstable angina and therefore a heat attack within a year. Holy crap! I'm not ready for it yet. I panicked. My pain wasn't getting any better either. It wasn't like it pains only when I work out(which I have stopped for more than a month now). Its there, right from the moment I wake up. It comes and goes as the day goes by.

So I bit the bullet and got a stress test done. As the doctor was putting together the result, I asked him about the T wave inversion. He waived his hand dismissively and said," its a normal deviation, even I have it. Nothing to worry about. I've seen your stress test. Its okay."

That was in May. In July, my stress levels were up on both the job and the home fronts and the pain wasn't getting any better. On a couple of occasions, I had a sharp pain shooting through my chest for about half a second and almost knocking me off. There was getting worse. I had issues with arm positions too. This time I decided to visit a cardiologist. He reviewed the stress test results and my lipid profile. His suggestion, my stress test reports are good and the kind of pain I'm having is not heart related. But, to be on the safer side, he suggests I get echo test done. Also, he recommends moving to statins to control my LDL cholesterol.

I panic again.Anyhow I go and get my echo done. The stress test comes normal. Again. But then there is a finding in my echo. MVP. Its mild, the doctor says. There are no regurgitation, but its there. The rest of the report spells out several parameters and they seem okay. Now I'm worried about this MVP. It does not look good. In the mean time, my wife has spoken to everyone in her family about this. I'm getting calls from everyone and I'm freaking out...

So, what do I do? I've taken a small break and am in Khandala for 2 days enjoying the weather and the view. Its a nice break. But damn! The discomfort in the chest continues... 

Saturday, July 20, 2013

All on the way to office

It happened last week on my way to office. My schedule has been irrattic last few weeks. I start my day early but start for the office late. I'd had an irascible morning and as I drove out it had started to rain. As I meandered through Bhundup traffic the iTunes started playing moonlight sonata. It's one piece of music that dissolves all my stress and relaxes me. The iTunes is always in random mode but that day it kind of sensed my mood. It just lined up some soulful music Forrest Gump, picnic in hanging garden, babel.... Standing still in the traffic I switched off the wipers and stared at the shield, the smattering of the droplets as they crashed over it. In seconds the shield was covered I could not see anything ahead. Then slowly the droplets turned into rivulets and the shield cleared up with streams tracing their way down. I was at peace as if in a trance.

In about 50 min I was at oberoi mall flyover signal waiting at the signal. As I blankly stared out of the car, a glimpse of something jolted me back to life. A girl was selling flowers. The Silhouette, the short cropped hair, dripping water, the built, as seen through the kaleidoscope of rain it seemed like my daughter, soaked to her skin, peering through the glass of another car. The window was rolled up and the lady inside was negotiating with show of fingers. Finally a deal brokered, the window peeled and transaction was completed. As the girl turned around she caught my eye. I nodded. she came over. I opened the window, took out the purse and she handed over the bouquet. I reached out, ruffled her hair, exchanged it for a 50. She broke into a big smile revealing 2 missing front teeth and rushed under the flyover where I guess her family lived. The signal had turned and I drove on. This time the droplets forming at the corner of my eyes.

Just 5 min from office I wade through a crowded street. I was moving ahead when a tempo cut me out. Then I cut him out and then some harsh words were exchanged while the traffic behind honked and jeered. As I drove into office and parked my car i found my mood restored to its original state.

Wednesday, July 10, 2013

Month 119

The second month. There are some destructive patterns building up on personal front. The job is hectic and uninspiring. This is the first political account within my company that I've worked for. Its also the biggest. It may be difficult to last here. My guilt around my daughter is growing. From teaching her twice a week, I've come down to 0. Can't make it back home in time to teach her. My wife has put her in a tuition. I'm required to drop her to the class, which requires me to be home at 6:15, just once a week and even that looks daunting. I had to push back on 2 invites and answer one escalation for this. I've told my team about this and yet they continue to schedule things around this time. There was a similar thing last week too. I'll fight this. I owe this to my daughter.

The point is all the education and degrees have gotten me a job. That job takes away my energies, kills my passion, thwarts my ambition and doesn't provide enough to retire early.

I always wanted to build things. If not a software engineer, I'd loved to be an architect or a civil engineer. I'm not very creative and yet the process of creation excites me. Building myself or being part of a kick ass team that builds things, even software.

Saturday, June 01, 2013

Month 120

Things are never the same. Sometimes Change sneaks up on you, ambushes you and you gasp and struggle to regain the balance. Other times its subtle. You know something is changing but can't put a finger on it. Yet over time its transformational.

The change in my industry (IT) is the slow kinds. Over the last few years, especially in the aftermath of 2008 world crises, its slowly changing, maturing. Its subtle. If you look around, the trends are confusing. Infosys climbed down from no.2 to no.3 . Wipro will slide to 5 as HCL and Cognizant move ahead. Depending on which company you track, your assessment of growth may differ. 

We have reached an age of moderation. This is the age of maturing of the industry. Indian industry's pricing power has never been so strained as its today. I really haven't seen any upward rate movements in the billing rates across clients. I believe, if it was not for the rupee slide, this industry would have collapsed in a heap extracting huge human price from its practitioners. The growth has gone away, and keeping the lights on is also a challenging. Especially in the mid tier range. 

My personal growth has stagnated too. With ever shrinking pool of people, squeeze on the margins, have resulted in me stagnating in my role. The real salaries have actually reduced as the increase does not even offset inflation.

The slowdown it seems came much earlier than thought. Its not like that we in the industry did not know of it,  but its happened about half a generation too soon.

Where does that leave me? I had some lofty financial goals and expectations from life that I was riding on. That tyre has now deflating. But isn't a big POP sound (I'm still employed. Fortunately). Its the hissing one, which lets you know that you've got a puncture. It keeps you on the edge because you do not know if you'll reach the destination before it goes flat.

So I'm limiting my journey. 10 more years and I'm done. That is 120 months. The countdown has started. The first month is over. It was a disappointing first month, and that's just a trailer of the rest of the 119 to come. If it goes this way I'll struggle to reach 120. But just as in a marathon, once you start you slug it out. You can take short breaks, moderate your pace and are allowed to collapse on arrival. But you gotta reach the other end. 

While the journey is arduous, I need to find ways to make it tolerable. I must say my previous project, was a huge help. I had kind of let go of it for the last 3 months. I need to trot that line, and find new things I could do to sustain my soul.

Thursday, February 21, 2013

Post #22 AWS Outage. My Domain's First

Nothing is perfect. All promises are hollow and if you get a free service you can tell. Yesterday I faced my first domain outage. It was intermittent. When I got to my AWS console I saw my instance state was in error. I had no clue what to do. I tried after some time and the site worked but after navigating a couple of pages it stopped again.

I ended up on Elastic Bean Stalk and decided to restart the instance but there was no such option. I had a reboot option but it did not allow me to reboot. There were 2 other options Stop and Start and so I tried stopping it. It gave an error saying the instance is in no shape to accept my command. I tried accessing again and the intermittent failure continued.

After a while when I reached back on EC2 screen, the instance was shutting down and a brand new instance was available. At this point I did not know what to do. Do I reconfigure the entire domain again. In fact I had forgotten it because I did that in steps over days. That sent shudders up my spine.  I tried ssh using putty but that did not go through either.

It was getting late and I decided to go to sleep. The next morning, I figured that the old instance had completely disappeared. The Load Balancer and other stuff was reconfigured and the site was working but the issue continued.

Also, all my logs and data was missing on the new server. I created a new directory for temp statements. The intermittent nature of the problem however continued.

I checked at all the places. The EC 2 instance, Route 53, Elastic Beanstalk, so on. But could not identify the problem. Later I saw an error with the load balancer. I think the load balancer itself balances the load between 4 instances in the same region and 3 of 4 said not available. I just removed these from there and it worked.

I think I need to document how to manage the site using AWS. Also there are no great forums which help you trouble shooting and what all to check etc. I tried logging a ticket but it did not give me an option saying you need to buy that option.

The question is how do you support potential customers. The fact that I created a site and hosted it there should be a strategy to retain me even if its free trial period so that the customer can feel comfortable. Currently, I do not feel confident about my long term plans to host it on AWS. The support sucks...

Monday, February 18, 2013

Post #22 Basic Stuff

This weekend I wrapped a few less important usecases.
- Viewing your transaction upload history
- Updating the FAQ section, making it logically complete by writing about all important and complex use cases.
- Cleaning up the navigation a bit.

I forgot to mention these in my rant on config mgt.

I'm now thinking about moving to mobile devices. Let me invest the next month or so building a mobile device interface using sencha.

The email part, I'll visit later. I'll have to invest money and but email hosting before I can make use of it. I do not want to send emails from gmail...

The footer content and the T&C still remain unfinished. The work is truly never finished. There is always something to add or improve.

Retirement Planning Revisited

I'm facinated by retirement. If I had enough money I'd retire tomorrow. By retire, I mean not working in the corporate sector just to make my ends meet. I'll splurge money on my pet projects that no one but me will benefit from. Alas! I'm not there yet and don't seem to be getting there anytime soon either.

About 5 years ago I blogged about retirement planning. I wrote about projecting your retirement money remaining at the end of any year. Just to refresh here is the formula

i = Rate of return on your investment (post tax)
if = Inflation
P0 = Initial Savings
B = Annual expenses (burn rate)
R = (1 + if )/(1+ i)
n = Time in years
Money remaining at the end of nth year
Pn = P0 X (1+i)n – B X (1+i)n-1 X (Rn-1)/(R-1)
Its another one of those useless things that no one but I found any value in. But over the years as I fantasized retirement, I noticed an interesting trend. 
What I noticed was that in most cases I'd finally run out of money. Dh!

But then if I save till a point I'm calling "inflection point" everything will change. 
The inflection point is the initial amount P0 you being with and if the other variables are held constant, namely inflation, interest you earn on your savings, you'll never ever run out of money. 
Not in 100 years and not in 1000 years. Never. Just like escape velocity, you'll never return to earth.
That value can be derived from the above equation with n-> Infinity. Assuming if(inflation) is lower than i(interest earned) of course. 
Calculating the dream P0 
P0 = B/(R-1)(1+i) 

gives you the initial amount that will NEVER run out....
An interesting point :)

Post #21 Configuration Management Nightmare

So I galloped to a greatly productive this weekend and by Sunday evening was ready for another deployment till I ran into a nightmare called poor configuration management.

I've always known the importance of it. So many releases / deployments have been spoiled by this innocuous looking thing. The importance of it grows with the team size. In a distributed environment teams use concepts like continuous integration and weekly / daily merges to avoid late surprises. And yet it sneaks in from time to time and ruins an otherwise perfectly successful release.

I understand this issue and though I'm the only one working on this project I'd decided to practice it.

Till nov-12, I was doing only development and therefore I had just one environment. I made builds several times a day and was fine with it. In November, I went live on AWS. There were some environment variables that were different for production environment and I created 2 projects instead. One that mirrored the production and the other that I used for development. I'd typically remember the files I needed to promote and I'd do that once I reached a logical milestone. I did not promote these changes to production immediately though. I would do it about twice a month. Also typically, I upload my statements once a month which meant that a large part of the functionality was unused for most part of the month. This approach worked well till Jan, but as I tried uploading Jan statements, I ran into my first brush with config mgt.

I typically store the uploaded statements in a temp folder which I purge from time to time. The location of the folder is different on the production env. Also, its hardcoded in one of the java files ( A decidedly poor practice). In Jan I was working on some functionality and updated this file. I later promoted this file to production. This obviously overwrote the path to temp folder. As I did not use the functionality till Feb, I did not run into any problem. When I did, it took me a while to figure out what was wrong. Why my statements were not processed?

And so I learnt a lesson and after some research, decided to go with Visual SVN for repository. I got eclipse client to connect to it and set up both production and local as 2 projects.

That helped me in identifying which files to promote and I do not need to remember file names as before.
But, there is a step in between to compare the new version with the HEAD version to ensure the changes are fine and do not break anything.

Yesterday, I missed that step and paid the price. The error happened right at the time you keyed in DomainName.com. It'd show up an ugly 500 message with the entire stack trace. Yes, that's Ugly. Also, the stack trace was not much use.

I had made some changes to a file to manage guest user and I thought that might be the root cause. But after several attempts to correct the problem it still did not go away. This brings me to the effectiveness of logging.

I was always proactive about logging. I have avoided writing elaborate Try Catch and have use AOP based class to intercept and log the errors. This does a decent job of managing errors on the business tier. But when it comes to framework, if there was an error in the framework the whole thing falls apart. Especially spring errors etc.

Anyhow, after much trouble I found out that I had unwittingly promoted changes meant for mobile  devices to production and hence the error.

Net Net 2 lessons.
- Get Config Mgt right.
- Improve Error Logging

Friday, February 15, 2013

Post #20 Split Adjustments

Wrapped up Split Adjustments. Its time now to focus on Mobile. There is some static content to create as well. The FAQ section is still incomplete. Terms of Use / Privacy Policy, About, Contact Us and Feedback links are pending.

Boss wants to talk about my career growth. Sends shivers up my spine. Boss calling to discuss your growth means your time is up...

Tuesday, February 12, 2013

Post #19 Profile Done

Of the list a few more are ticked off.

I also need some static content such as About us(me). Terms and conditions. Thats a must do item. I do not know how to do it without giving my identity away.Then Contact us etc. I also need to update the FAQ. Have done some good work in the direction but still a long way to go.

- Remember me 
- Redirecting to requested resource after log in instead of standard landing page

- Redirecting remember me user to a standard page
- Redirecting based on device (mobile vs desktop)

  • - I've found out how to do it, using Spring. The question is how to handle it. I could for example redirect to a subdomain or I could redirect to a url such as /m. Neither of these work for me as a lot of my calls are ajax and if I change the url etc. I'm not able to process the request using the same controller method. Spring says I can handle multiple URLs using same controller method, but its not working for me. 


I'll have to find a better way to make it work for my site.

- Cash Txn Widget
- Adding Date to Cash Txn
- Distinction between one  time cash txn vs recurring cash txn
- Change Pwd/Forget Password
- Email notifications

  • eEmail. The problem is with AWS not allowing me to send emails from the domain name. I do not have an active email account for my domain. I'll have to but email service. Right now, I'm not in a mood to splurge a lot of money. This will have to wait.  
  • Another option is to send out emails using my gmail account or create a temporary account on gmail to send out emails. This will work but is inelegent. 
- View Split Transactions

  • I'll finish this off by end of the Feb. This is useful. I also had to fix a this functionality. When loading statements, the algorithm was unable to figure out split txns and hence loading duplicate copies. Took a long time to fix it but now its done. View Split Txn is the next logical step.
- Elegant impl of labels vs the rest
- Alerts
- Mobile interface to capture cash txn
- Mobile interface to view performance against budgets
- Mobile interface to view savings
- Enhance Help
- Redo the Navigation

Up Next: 
- View Split Txn
- Redirection based on device
- Change PWD/Forget Pwd
- Email notifications
- Profile Mgt (new one)

Friday, February 01, 2013

Domain Goes Live!

I thought about it a lot. Why should I spend money on something that only I use and is going to be free atleast for the next 6 months anyways through AWS . Also, not sure how will my org take it. They had no role in building it. This is surely not a business for me. Just an indulgence.It keeps me going and helps me learn...

I already had the name in my mind. I had checked about a year back and it was available. I just checked it again and it showed up as available. Alongside there was a note saying "Snap it up before someone else does". It did not cost an arm or a leg and so I thought and then thought some more and then just did it. I just could not resist. I lapped it up. Damages: Rs.3300 for 5 years. That was for both .com and .in together.

Thats when the struggle started.From the domain registrar how do I point the domain to my AWS instance. Learnt a new concept. Researched a lot, saw a few videos and finally completed it an hour ago.

So, my toy is live and has a name too.

Sunday, January 27, 2013

Why??

Why 2:06:47? Collapse of Will! Why??
At the end of 16, I checked my time. I was 2 min behind schedule. 5 Kms 28 min. I'd have preferred 30 min and I know I'm unlikely to recover.

I do not quit on a race, even when practicing. But this was different. I prepped the entire year for this day and then to miss it by a min or 2. Again. It was a moment of exasperation, hopelessness and defeat and I stopped in my tracks. Literally. Illness, stress... There can be any number of reasons. None matter. Only the outcome. And I knew then, I had nothing to show.

I walked from 17 to 18. Actually ambled. In the mean time, something healed within and I ran again. That's why just 7 min over. Otherwise, I might not have completed the run.

I'm still struggling to come to terms with it. 3 years now. 3 runs. I'm only getting older. My knees hurt that day. After a long while they gave up on me too.

Will there be a next time? Can I keep going without an aim, just for the fun of it? Time has all the answers. I'll know.

Post#18 On to it again!

Of the list I published, some are done
In terms of enhancements to my toy
- Remember me 
- Redirecting to requested resource after log in instead of standard landing page
- Redirecting remember me user to a standard page
- Redirecting based on device (mobile vs desktop)
- Cash Txn Widget
- Adding Date to Cash Txn
- Distinction between one  time cash txn vs recurring cash txn
- Change Pwd/Forget Password
- Email notifications
- View Split Transactions
- Elegant impl of labels vs the rest
- Alerts
- Mobile interface to capture cash txn
- Mobile interface to view performance against budgets
- Mobile interface to view savings
- Enhance Help
- Redo the Navigation

Up Next: 
- View Split Txn
- Redirection based on device
- Change PWD/Forget Pwd
- Email notifications
- Profile Mgt (new one)

End of Feb

Sunday, January 20, 2013

A Broken Man

2:06:47
Some things are not to be.

Tuesday, January 15, 2013

Dell the Dinosaur

Read CNN post here. The first job I ever did was selling Dell computers. Michael Dell was my idol. For the rest of the 90s there were several case studies on Dell and how its mail order model is trumping the internet. Its internet ready they said. Because its direct to customer model, they had a huge advantage in ecommerce. Its B2C model was touted as the model of the future. You could configure your PC online and have it delivered to your home.
The biggest advantage was not having middlemen, the resellers and hence it gave Dell flexibility when it came to pricing the product. Everyone else faced resistance from their resellers if they undercut them on the direct B2C channel.

On top of it, the advantages of negative cash cycle. Dell got its monies upfront, unlike when selling through resellers was taught in the B schools.

In 1998 when Steve Jobs was brought back to Apple as an interim CEO, Michael Dell remarked on a TV show that Apple shareholders will be best served, if they simply wound up and gave the money back to the shareholders.

Well, how the times have changed since!!

The truth was Dell was never Big in B2C. Most of its business happened in the B2B. The stories and case studies were all great for PR, but when it came to the crux of it, Dells model was still selling undifferentiated product, the PC.

With the tablets coming in, the paradigm has changed. Dell which was always a one trick pony really could never diversify and hedge its risks.  As the PC dies, so does Dell.

Bye Bye Dinosaur...


Monday, January 14, 2013

The Next Mole Hill

In terms of enhancements to my toy
- Remember me
- Redirecting to requested resource after log in instead of standard landing page
- Redirecting remember me user to a standard page
- Redirecting based on device (mobile vs desktop)
- Cash Txn Widget
- Adding Date to Cash Txn
- Distinction between one  time cash txn vs recurring cash txn
- Change Pwd/Forget Password
- Email notifications
- View Split Transactions
- Elegant impl of labels vs the rest
- Alerts
- Mobile interface to capture cash txn
- Mobile interface to view performance against budgets
- Mobile interface to view savings
- Enhance Help
- Redo the Navigation

Timeline June 2013

The Impending Run

Next weekend is the run. And I've lost it already...

I hit my peak in Nov. I did a road run and another on the treadmill and I clocked good. That is less than 2 hrs.
But then the things have changed.

In Dec, I traveled to NY for about 10 days. That screwed up a couple of my weekends and my rhythm. I wonder how people adjust to jet lag when preparing for something like a Marathon.

Upon my returned,a got a week to train before we left for vacation. There I as laid up with viral for about a week. Its the second time this year I've had a bout of viral. The fever goes high 103.5 degrees and saps me completely. I recovered around the new year and have been training for the last 2 weeks.

It takes time to get your rhythm back. The first day I tried running, I got off the treadmill after just 1 km. A few days later I could barely do 6. I ramped up to 10 km on 5th Jan. I took a 3 breaks and lost count of time. Then again this weekend I upped it to 16. I was literally dragging myself over the last 3 kms.

Once again the prognosis is not good. I have just one run left before the big day. I'll probably do a 5K slow run as I need to conserve energy for the final burst.

At this time I'm looking at 2:15. Thats not where I wanted to be...

It Hurts to Fail!

Last Nov, I declared victory as soon as I could get my site set up on Amazon cloud. I know its not the most complete site but it does what its supposed to, and if I may add, it does it well.

Between then and now, I have tinkered a bit, resolved a few bugs. I've also added Savings View which shockingly tells me that I'm practically living hand to mouth for the last 6 months(post EMI payments).

Another revelation is that despite my sharing the url with friends and colleagues and arm twisting a few, I did not get a single registration.

What do I conclude? The site sucks? The concept sucks? Or people are just not interested in uploading their financial data on another site.

To conclude that it sucks, one needs to register and try using it. As no one has even registered, they can't conclude it sucks.

I can agree that the concept sucks. People think they know how they spend and don't feel the need to record / analyze their expenses.If they used the site, they would discover the truth but then there is no urgency / desire to check that out.

I can also agree that people do not want to upload their statements to any site for fear of data security / privacy. But they haven't raised it with me.

Overall a bleak prognosis.

So,  What's the next mountain to climb?

Wednesday, December 05, 2012

NYC You make me sad

I still remember the cold April night I came to visit This Account as I relocated from US to India. I was returning to India after four years in the US. My next assignment in India was to manage this account. Everyone I spoke to or heard about this assignment and who had any background of the customer told me to back off. Any account but this they said. Anyhow, I had little choice and hence despite its challenges and against all well meaning advise I decided to take it up.

The manager who was managing it on site was my ex manager in the west coast and so I felt a little assured. The Client managers I met were largely indifferent and I felt a strain between them and us.

I returned to India and took charge. I went straight into fire with one of the large programs on the boil. There were daily calls and shouting screaming going on. Right then our management forced a change and brought in new management. The new management was given a free hand to fix the problem and we brought the project back on track.

Yet that did not mend things between us and the client. We would discuss everyday after the bloody calls finish, what would it take for them to trust us. The single biggest problem between us was trust. Despite delivering to agreed milestones and timelines they would not trust us. And thus we laboured through to production release. The next day of going live they ramped down the team. That's when we knew this relationship is not going to last.

Earlier this year these fears were confirmed. They floated an RFP and that was that. Ironically they did that at a time when our delivery was at its best. We did some spectacular work this year and it went completely unnoticed.

I had come to NYC seeking continuity for our resources and what I got was cold shoulder. And so we reach end of the road. 2.5 years is all it lasted. There is a lot to it but then what's the point. It's gone...

Friday, November 30, 2012

Traveling to NY

Its finally come to this. I've been avoiding traveling to the US. Its a particular client I need to visit and I do not welcome it. There are some people who you can never win over. They find faults in success, make good look bad and are generally distrustful of everyone. My client is one such customer.

I've been managing this account for 2.5 years now. I'm the longest serving manager for this customer in my company. The client is a reputation destroyer.Several managers came and then left. Their reputations soiled, their dignity destroyed. I've survived till date but now I think my time is up too.

This is not how I wanted to visit NYC. But then that's how things stand today.

I'm losing sleep over it. Had a bad week. Another one stares me in my face.

Wednesday, November 21, 2012

2 Hr Half Marathon

Its not Yipee Ye Ye yet, but its close. A month ago I ran 22 kms on treadmill in less than 2 hours and last Sunday, I ran 20.4 kms in 1hr 55min on the road. That leaves 700 mts in the last 5 min and per my calculations I could do that in 4 min. So, by extrapolation I've made it to doing the half marathon in less than 2 hrs.

I know its not official timing and I was 700mts short, but yes, it gives me hope that if things go right on 20-Jan, I can do it.

The gear has had an impact. I can say that. I did not get blisters I used to get earlier. Thanks to shoes that are 1 size bigger and socks that breath more air, get less soggy. Dry Fit Nike socks.

Another good thing is that I did not hurt my knees. I've been hitting the road, every week for the last 3 weeks and my knees have held up.

Hope they carry me across the finish line within 2 hrs when it matters.

Monday, November 05, 2012

Post#17 Live!

It's 12:08 am at night and I'm live and alive! 3 days of struggle to set up env etc. came to fruition today. I'm off to sleep now.

Thursday, November 01, 2012

End of the Road for Gold Gym

My 2.5 year membership with Gold Gym came to an end yesterday. Its still a great place to work out but then I had my reasons. Gold Gym works on Franchise model. Different gyms at various locations have different price points. Mine was Rs.14,000 for a year.

About a month back, a colleague of mine got himself enrolled in Andheri East Gold Gym, for Rs. 8,500 for the first year. Now while I understand there might be differences in price, I could not reconcile to a 60-70% premium.

My community gym is well equipped. It has 2 treadmills, an elliptical and host of other equipment good enough for an amatuer like me. The only constraint is that it gets too hot and stuffy. No AC. For a while now, I've been using my community gym for weight training, while preferring to go to Gold Gym for running. With the onset of winter, it will get cooler and running on community gym's treadmills might just turn out okay.

Still I wanted to hold on to Gold Gym membership. So, I went back and tried negotiating for Rs.10K renewal. Alas! they did not agree and finally my membership ended yesterday.

My last day, I ran 8 kms in 42 min or less. That should count as my best 8Km run so far. I ran at 11.5 kmph for about 6 kms and at 12kmph for 2.

The only way to stay motivated is to keep improving, you need to beat yourself and pushing just a little ahead every time. As years take their toll on me, I'm not sure how long I'll have the motivation to run. I think, I may still have another couple of years remaining in me.

I know that once I've past the best I can be, my motivation will plummet and I'll give it up in no time.

Get better or Die.Death is certain. Its about  how long is the chase...

Monday, October 29, 2012

Post#16 Done With Budget Set Up

I've completed the basic Budget Set Up and reviewing the performance against budgets. Currently, its completed with Reports, it still needs to be integrated with Dashboard Graphs. But I've decided to keep it aside for the time being.

I'm preparing myself for hosting. For that, I need to make some general pages, such as hmmm.... Home Page!

I'm really bad at visual design. I admit it. Hence, my attempts at creating a home page came a cropper. None the less I soldier on. There is no expert help available here. Its a one man show. So, it will embody all my shortcomings... That's just the way it is.

Once I'm done with these generic pages, I still have to work a little on consolidation, commenting the code and clean up before I go live.

The biggest nuisance will be making it compatible with IE8. Currently, IE8 breaks the application on most pages... This is going to be a headache.

I expect a bunch of defects to roll in as and when anyone other than myself tries to use it. Also, a flood of feedback. To track all that I think I need some system. I think I need to write a small usecase to track these.

Another disheartening thing struck me while I was writing the "How it works" section. It sounded like a lot of work to upload a statement. I always thought of it as a challenge but writing about it made me feel like it was a huge mountain to climb and most people will give up halfway. The value comes only if we get over the hump, and it sounded like crossing the Alps...  Sigh!

In the long term, I think I'll be the only one using it. But I'll use it anyway... I built it for myself, right?

Friday, October 19, 2012

Post#15 Managing Rules

When I tried uploading my actual statements, I realised I needed a way to edit the rules. You create rules based on your immediate needs and you try to make them generic. Unfortunately over time a different type of transaction comes along but gets caught in generic rule. One needs a way to analyse and correct this. Hence rules review is like a cleanup activity one needs to perform from time to time.

Interestingly, given the size and complexity involved it was completed surprisingly fast. Reuse and experience can improve productivity by a big factor.

Now for the big one. Creating custom reports. It's the same as creating your budget goals and tracking them over time. This is the one I've been moving towards all this while. It's now time.

Sunday, October 14, 2012

Running On...

I've decided to give up my Gold Gym membership. Not just because its expensive, which it is. Its because, a friend of mine got annual membership for Rs. 8500 at Andheri. I'm Rs14K. The difference is too huge. These days, I've stopped going there for weight training. I only use the tread mill. My Community Gym is well equipped. I do not do heavy weight training and hence no need for extra sophistication . I told this to the service guy, when he called up for renewal. I asked him for Rs.10K. I thought it was a fair offer, he reduced to 13K, I decided to give it up.

I'll miss the running sessions. I liked the treadmills there. Not because they have TVs. I never watch TV while running(even at home I don't)... But they are very stable and sturdy. They are broad and have nice cadence.

My gym has treadmills too. But they are a little unstable. Also, there is no AC. It gets a little stuffy...

My membership will end this month. From now and end of the month, I'll use it to the hilt... Even today, I did   the entire half marathon. In fact 21.3Kms and did it in my personal best time on treadmill :) 115 min. If only I could keep it up, I sorely want to finish this time in less than 2 hours.

From Nov, I'm hitting the road. Lets see how that. My biggest concern is my knees. Even today they hurt a bit...

Post# 14 Wrapping Up Reports / Dashboard

I'm on a High... I've used Mint.com and I'm a subscriber to ICICI Money Manager. Mint.com has a gorgeous interface and some awe inspiring graphics. I give it to them, it fetches all the transactions and categorizes them for you.

But then they fall short. Lets take a couple of situations...
- I made some big ticket purchase in March. I want to consider it for my annual expenses, but do not want to to screw up my monthly averages.
- I went out with friends. We split the bill. I paid using cc but my friend reimbursed me his share.
- There are some annual purchases I make. I want to Tag them. Not just categorize them per category.
- I withdrew cash and made some cash payments. Especially in India 40% of the payments are in cash. I want them squared off against my cash withdrawals.
- I have some recurring cash payments every month. I don't want to enter it every month
- My FD matured, I want to split that into principal and interest. Principal should be ignored from calculations, while the interest should be counted towards income

All of this is now possible in my site. And it has Google Visualization Graphics. Though not as stunning, they are pretty nifty..

The best part was the client side script I wrote. I get grouped amounts to the client side and then render the data in various views at client side itself. The graphics take time to load from Google along with the data. Once loaded the views are created in a jiffy... I love it.

Now to take it live...
I'm gunning for Diwali. Need some major clean up activities before that. Hope to close it out before that.
Mind you, even with all I've achieved, its only 20% of what I want. This will keep my busy into 2013...

Thursday, October 11, 2012

Post#13 Dashboard and Graphs

Having done the reports I've moved to the dashboard. Conceptually these are similar but the dashboard will eventually have a lot more features. Especially when I implement goal setting etc.

For graphs I'm using google visualisation API. It's a great tool to use and I'm only beginning to learn it. I will not use much of its muscle power. I'll use bar chart and pie charts mostly.
Hope to use dashboard tools too to reflect trending.
I've already completed the barchart and working on the pie chart. I plan to host it once this piece is done. Probably close to Diwali.

Wednesday, October 03, 2012

Post#12 Incremental Continued...

Incremental has an amazingly long tail... While in Bhopal, I did make some progress, but nothing new to show. Just a bit of stuff here and there. Here is what I did
- Discovered spring API to handle exceptions. Much better than the interceptor I wrote. The problem was, the exceptions did not bubble upto the interceptor if I just let them keep going up... So here comes a little help from Spring org.springframework.web.servlet.handler.SimpleMappingExceptionResolver. Nifty little helper. All I did was to extend it and it did exactly what I wanted from my exception handler, which is if its a runtime exception, don't catch it till it reaches the top. I tied this up with AfterThrowing advice, which collated all the important information about method arguments and logged it all together in one place. It worked. I then went around removing try-catch from all the DAOs. At the end of it, I now have a custom 404 and error page along with some useful logging.

- Improving on jqgrid. Though I did get most of the information to look okay, there were some pieces, that did not look okay. So spent some time cleaning up JQ grid. For example, put the navbar on top as well as bottom. Putting "View x of y" etc.

- Changed the Tag Transaction Page to show actions only when you check on any of the loaded transactions.This proved tricky. It's true. If you have a page that does a lot of stuff, you will go crazy untangling the permutations. It seems to have stabilized for now. But I'm sure, it'll change again.

- I also introduced modal for loading. I used jqueryui dialog for the purpose. For the loading icon, I found a very useful site http://ajaxload.info/. Truely useful. My need is simpler than what dialog offers. Let me see how I can strip it down.

Bhopal and its irresistible charm

I was away for about 4 days. I had gone to my native place. And it never ceases to surprise me. 4 days of decadence. Landed on Friday evening. I was handed a bottle of beer just as I entered the car. One for the road... or to kick start an extended weekend... I usually prefer the train but Friday was my nephew's birthday and so I decided to fly instead.
At the birthday party, I was welcomed with a round of neat Whisky(Chivas), just to set the tone. And thus the party continued. After wrapping up the party @midnight, I drove to another friend's.  Back to beer. But let me confess. This place had the best view of the city. Absolutely awesome. Its a residential house converted into a Service Apt. I was just blown away by the view. At night, you could see the entire shoreline lit by streetlights the interconnect road. It contours the shore for good 5 kms. Here are a couple of shots.

Day time and a night time scenery for posterity...



Wednesday, September 26, 2012

Post#11 Reports

After spending a lot of time testing and fixing defects on the Transactions View and Tag page, I finally decided to move to Reports. Theoretically, its the last piece. You register, create accounts, upload statements, categorize transactions and then, finally you are supposed to see how you did over time.

This reports page, a basic one posted good challenges of moderate complexity. I prefer moderate complexity problems. They pick your neurons, and solving them gives you a sense of satisfaction.

Here is how I define the basic problem.

- The Report will always be 2 dimensional. The Columns represent time in months. As this is individuals we are dealing with, no quarterly or six-monthly. Each column represents a month.
- The Rows can be any of these
   - Categories
   - Accounts
   - Labels
   - Categories and Subcategories together

Personally I think my database design could be better. With reporting, I now need to convert rows to columns and columns to rows. For example, Months are columns (month1, month2 etc.). Another one, I have Labels in a row In query results I get transaction date in a single column. Now to accomplish this using sql query is cumbersome, to say the least. With passage of time and increasing number of records, such queries degrade fast.

To avoid this, I decided to do the entire transformation on the client side. Here is my philosophy. When I crank up my CPU, I pay for the cycles. I can decide to take up as much work as I want and then deliver only the final results to the customer. However, this costs me a lot. Why not leverage the browser power to do some work. Its distributed and its free. The laptop CPUs are fast and capable. js engines have really become quite efficient and its economical even from a bandwidth pov, to move minimum data and do much of the work at the client side.

So, I now send the query result over to the browser as json. From there on the JQgrid and javascript takes over. I render all the views with that data entirely on the client side, without making any round trip. The good thing is that I do not bring all the transaction data, I just get grouped data. The grouping is fine-grained. That allows me to create all 4 views on the client side.

Played a lot with JQgrid. Loved its features. It took me 4 days to reach where I am today. All these views are done. I have a big js function of 250 lines that does the work. Its neat. I like it. BTW javascript array.sort is one expensive feature. But then I need it...

Thursday, September 20, 2012

iOS6

I downloaded the latest upgrade to the iPhone about an hour after it was released by Apple. I was wondering what's new and how my experience will change magically. A whole new world will open up and it'll once again be like Alice in Wonderland.
But no, the incremental improvements are like ms office upgrade. You hardly notice them.
The user interface has changed a bit in a nice way. The crescent moon on the top bar was keeping me mystified. Now I know it's DND. But overall it's been boring. It might also be because the existing experience is so good.
The biggest let down is the maps. Google did a far better job of it. Apple app can't understand any place outside of USA. When I asked it to locate Hard Rock Cafe in Mumbai, it was stumped. Same for any other place in India.
Poor choice by Apple. I understand that it at war with Google, but that does not mean you screw your customers. Thank god, Google chrome takes care of some of the angst. But this is sheer poor execution.
iTunes browsing experience / dial keypad color / music app palate have changed. Can't say it's better than before. Just different.
Facebook app is integrated. I had liked its revamped performance. Now you get a listing of all the apps that use Facebook data.
Passbook may be a cool thing in the US, but in India, its not much help.
In the mails, if I have to mark anyone VIP, he needs to be on my contact list. Its interesting. Maybe I'll find a use for it.
Several features are not available for iPhone 4 users such as Siri, Panoramic view, fly view of the city.

All in all, it does not change my world. Maybe its time to upgrade the hardware :)

Saturday, September 15, 2012

Post#10 Txn Management and Error Handling

This was a tricky one. There are several ways of handling Transactions. I chose to use Annotation. It simplifies the coding a lot. With Spring Txn management is more about configuration. You could use a template and manage manually or you could manage through Txn: The challenge was largely how to setup transaction manager.
That led to revisiting the past and doing some cleanup. I decided on using Spring connection manager rather than jndi lookup. There was lot of duplication. I removed some of it as I cleaned the XML config files.

Then it was onto my favourite crib for about a decade. How to manage exceptions.
I had always wanted to manage the exceptions in a centralised fashion. Spring enabled me to do that beautifully. I wrote a Spring interceptor. It helps with instrumentation (basic) and also checks for error flag. If there is an error it would log useful info such as request params. The method arguments etc. all in one place. That way you do not have to write error handling code everywhere.
To centralise error handling I used AspectJ for Spring. Wrote an AOP @Throwafter annotation. It took a lot of time configuring it. But it was worth it.

I could suggest this to other program's too. I think it helps with debugging. I have wrapped up the initial implementation. It will of course evolve as we go along. To make it all work together I also leveraged ThreadLocal to store information.

Wednesday, September 12, 2012

Post#9 @Transactional

As mentioned in my last post, I've decided to take a break and do some clean up. There are 2 things I'm targeting for now.
- Transaction Management using Spring Annotation @Transactional.
- Exception Management. I'm thinking of doing exception management using Spring AOP.

I spent whole day yesterday trying to set up Spring Transaction Management. And what a hair puller it turned out to be. I thought I've grown wiser and better with previous 3 months of experience, but no. I made the same mistakes (spelling mistakes), just like my daughter does.

It was not that easy either. Got a lot of learning on setting up spring too. Like, you can't @Autowired a class if you use @Transactional because spring creates its own proxies. I must credit myself to be able to get to that point. That's not the most obvious piece.

There were other contentious issues too. I've been using jndi based datasource. I really could not set that up for use, so I fell back to org.springframework.jdbc.datasource.DriverManagerDataSource instead. I also realized, I had set up beans in multiple contexts. A lot of clean up is needed. Perhaps between now and end of September, I'll get these things sorted out. Further development such as reports and budgets will have to wait till Oct.


Sunday, September 09, 2012

Post#8 Incorporating Feedback

Couple of weeks ago I hounded my wife to take the work in progress for a test drive. The idea was to see her reaction. She is not the most tech savvy person. But she knows enough to get by. She obliged and after spending good 5 min gave me some feedback. The task of uploading the statements was especially arduous. Once I have gone through the pain of uploading a statement for an account once the site should remember the column mappings and apply the same whenever I upload a statement for the same account. I have been working to incorporate the feedback which I finally finished today.

Other than that I corrected the issue with uploading the statement through signed in user URL. Uploadify was giving me problems integrating with Spring security. Every time I submitted the statement the Spring security would send me 302. It would redirect me to login.
Finally I worked around the problem by explicitly setting the upload URL at the time of upload button. This was fortuitous. I was trying to append the jsessionid to the URL but could not get to read the cookie using document.cookie. I still haven't resolved that issue but in trying that I resolved the upload problem so thats good.

Not sure what I should be doing next. I think I should do a clean up and some architecture related stuff before proceeding. The more I delay the bigger the cleanup.