Jan 14, 2010

Don't punish your customers for your incompetencies

Often, there is a common practice amongst huge organizations to dictate their terms and conditions to a customer. And this is not done with a baton or a whip, but more in terms of soft talk from the sales engineer. Have a bunch of IIM grads who can do the talking and they can sell crap claiming it to be cheese.

For instance, a software vendor, gets a requirement from a customer to design a product according to their specifications. And since this SV has a crappy server which is not being sold on high note in the market wants to make some more revenue, they actually decide to do their development on this platform. The end result, the developers are a frustrated lot since they have spent close to 1 year making the product work on this platform, and the remaining part of their time in the company searching for a better option in a saner organization. Then you have the customer. Ah, the customer, the fall guy in all this mayhem. In most cases, the customer would be an innocent employee in a non-IT organization who would have requested for this product thinking it would make his life easier. The end result, to use this product he has to:
1. Hire a consultant who would charge him by the hour for telling him he needs to upgrade all his systems to a better configuration.
2. Hire a consultant who would procure the systems.
3. Hire a consultant who would setup the landscape on the systems.
4. Hire a consultant who would deploy the backend on the lanscape.
5. Hire a consultant who would raise messages to the IT support team about things not working.
6. Hire a consultant to supervise over these consultants.

And just when the non-IT chap thinks he has it all sorted out and things are just shaping up, a new patch for the server arrives which brings down the entire landscape.

This is the apathy towards the customers which causes many a giants to fall on their face. When we design a product for a customer, we need to think that one day we might be the customer using the same product. And then design with this attitude to success.

Jan 7, 2010

My Rantings on Flex (Part 2)

I am responsible for setting up the Unit test framework for my project and had setup this beautiful FlexUnit TestHarness and TestSuite which sent the results on the jazzy and colorful TestRunner. Things were working fine with the dummy test cases I had added and I was happy. So far so good. Today, the developers started contributing their tests into the test case. All that they did was this

package SomePackage
{
public class Constructor() extends TestCase
{
public function Constructor(){
}

public function getNameAndDate():void
{
var obj:Object=null;
Assert.assertNotNull(obj);
}
}
}
And then add this to the TestSuite.addTestCase(MyTestCase)
and run the test runner.

The testRunner showed a weird test case called "WarningTestCase" and showed some empty results in it. At first look, I asked my dev if he had created a testCase called WarningTestCase (I am a novice to FlexUnit hence this query) and he said he did not. Just to make sure (not that I do not trust my developers...they are the best in the industry), I searched for any instance of WarningTestCase and did not find any. Now I was flabbergasted. There should be some information on this somewhere in the net. So I Googled for WarningTestCase FlexUnit and got some half baked information from Adobe that WarningTestCase means that some of the tests within one of my testCases has failed. (This was the worst kind of error message I have ever seen in my Goddamn career as a software engineer). I am sure Adobe has some brilliant minds who could atleast make well described well defined error messages.

OK. So I went to try to find which is the test case that's failing. I tried all the available test cases and they all worked fine but this one test case was failing. I was almost on the verge of giving up when I tried one last step. I prefixed all the functions with the term test. So now getNameAndDate would go by testgetNameAndDate. I ran this test case. And Voila, the test runner showed me all the test results with appropriate assert status.

The least I would have expected would have been well defined error return codes and something that would have been documented for dummies like myself to understand.


Dec 23, 2009

Politics...Here I come

This is getting frustrating...No secure ID, no Office mail access, and to top it all, I do not have a BlackBerry. I am completely out of touch with the real world and just 3 days into my vacation. Man, can life be more boring than this? And to top the frustration is the news that the FBT is now on the employee. Which means, my ESOP would get taxed, if I get a car from the company I have to pay the FBT component on that as well (which was previously held by the employer). Now I am thinking, why not to try politics for a change.

There was a nice news today morning, which made me even more determined to try for the post of MLA or MP. All the relatives of MP's now get to travel for free by Air within India. And all the friends and relatives of MP get to travel for free by Air within India. And this bill is actually passed in the Parliament. So now, it pays to be a friend of an MP than work your ass off in a 9-6 job. I am still checking if I have any MPs in my family bloodline. Surely there should be one...No family is perfect :D. We all have our share of hyenas and wolves.

Now, I might sound that I am rambling and ranting out of frustration. But the truth is, Politics is a more profit making business than any other job. Consider this:
1. You do not need to pay for the accomodation
2. You do not need to declare your wealth
3. You do not need to be a BE, MBA, IIT Grad (Well if you are, it means you are over qualified)
4. You do not need to pay for the fuel (The idiots called tax payers would do that for you. Infact, you might even see a Software Engineer filling up your tank in a Shell gas station (thanks to the rising inflation))
5. You do not need to work on deadlines. (Hey, you are a politician. You could hire 10 MBA grads and get them to work on your deadlines. And then take the credit. Afterall, you managed the MBA grads)
6. You do not need to pay for vegetables, fruits, liquor, schooling, No parking fines.

In short, the outflow from your purse would be inversely proportional to the inflow. And in this case, the inflow would never tend to negative.

Lord, if you could make me an MLA of any one constituency (maybe Andipatti would be the best, closer to my home) in the next 10 years, I would break 108 coconuts for you (Out of the tax payer's money, ofcourse)

Dec 3, 2009

MS Does not trust SilverLight :)


Saw this ad in rediff.com when signing out:
Does this mean MS simply does not trust SilverLight? Or something else cooking? (ehehheheheaaaaa)

Adobe Flex: The Perfect example of how a framework should not be

There is a growing discontent amongst the developers I have interacted with. And one common thing that bound our discontent is one thing, one thing only (as quoted by Lt. Aldo Raine): "Adobe Flex 3.0"

There is a saying "You realize the importance of something only when have the need for it and it is nowhere around". When we were working on MS .NET Framework with VS IDE till some years ago, we used to crib about the performance of the IDE and other non-important factors. Now when we are stuck inside Eclipse + Flex Builder plugin, "Oh VS 2005 where art thou?"

The point is, Flex is not all that bad. It is just the hype around it that makes it an evil component. And it all starts with the Ux. They use a simple tool like Photoshop (another sin from Adobe's factory) to design jazzy stuffs that it is impossible to achieve the same kind of look and feel in the UI framework code that you have no option but to hack your way around. Now Flash player is sort of Buddy Buddy with it's counterpart criminal Flex. So if it finds we are trying to play with it, it just spits fire and vengeance.

My rantings on Flex would go on as long as we are using it. Once done, I would love to put the following statement on my wall, as a warning to Flex and anyone who uses it"
"The path of the righteous is beset on all sides by the iniquities of the selfish and the tyranny of evil men. Blessed is he, who in the name of charity and good will, shepherds the week through the valley of darkness. For he is truly his brother's keeper and the finder of lost children. And I shall strike down upon thee with great vengeance and furious anger, those who attempt to poison my brothers and destroy them. And you will know my name is the Lord when I lay my vengeance upon thee".

The hands of the Lord rest on those who hate Flex.

Nov 29, 2009

The World of a crazy programmer

Have seen some real life fundo code and have been amazed at how this would be maintained.

It went something like this:
private static var oGlobalClassAObject = new GlobalClassAObject(new LocalClassB(olapDataClass,false),new URLLoader(new URLRequest("../local/assets/global/returnValidate.xml),false,new XMLList(result.result.data.children));

Needless to say, I was shocked, petrified, p***** off, on seeing this code. And the best part of this story was, a new "less Geeky" guy was asked to maintain this code. He read this code for the most part of the day and then called in sick for the rest of the week (my guess is he was attending interviews to escape out of this mayhem).

I would love to see a proper commented code explaining what each and every parameter of the above class constructor would lead to. A simple one liner would not hurt, would it? And if this API is tested as it is, the chances are, this object definition would end up in the automated test cases as well. So now the virus would spread from the development to quality to validation to customer.

"Always code as if, the person who would be reading it, is a psycho who knows where to catch you".

Nov 28, 2009

The Woes of FlexUnit testing

Ant's flexunit task does not run with a native FlexUnit testrunner component. You need to ensure you use the JUnitTestRunner component with task of Ant.

(I learnt it the hardway though :))

import flexunit.junit.JUnitTestRunner;
import flexunit.framework.TestSuite;
private var jUnitTestRunner:JUnitTestRunner;

private function onInit():void{
status.text = "Unit tests running";
jUnitTestRunner = new JUnitTestRunner();
jUnitTestRunner.run(suite(),onAllTestsCompleted);
}
public static function suite():TestSuite{
var _testSuite:TestSuite = new TestSuite;
_testSuite.addTestSuite(MyTestCases);
return _testSuite;
}
private function onAllTestsCompleted():void{
fscommand("quit","");
}

This makes me wonder, why is it named as Shouldn't it be ?