Archive for the Category ◊ General ◊

Thursday, December 03rd, 2015

I had been to test drive newly launched automobile, two guys in front of me (believe me, the queue was a long one :) ) were discussing how important it is for a new model to prove itself in various aspects!! (Well, “Kitna deti hai” is one of those).

I was wondering why is it so?? Why people are skeptical in buying new products?? lot of unanswered questions lingering in my mind. Does trust play a major role or is it people want to avoid risk and wait for the product to become commonplace..

Let’s analyze how this works.

There is a saying “Everything that has a beginning must have an end”, holds good for any product as well.

In MBA terms, it’s called “Product diffusion curve”.


The guy in the queue definitely falls in either “Late Majority” or “Laggards” category. That’s because “Late Majority” are skeptical customers, play safe kind of people. Survey shows they constitute 34%.

Let me explain in brief the categories.

Innovators : Risk-takers, willing to try new products, probably fanboys as well !! ( 2.5% is their ratio)

Early adopters : They follow Innovators, based on the reviews/positive response, begin to purchase products. ( They constitute 13.5 % )

Early majority : Careful and mitigate risks, they wait for the product to be proven by early adopters, they rely on recommendations/good experience of the product. ( 34% ratio )

Late majority : They buy product is only if the product is a hit and becomes commonplace. (34% )

Laggards : Only if they run out of alternatives, buys the new product, they avoid change. (16%)

The above categories hold good to individuals as well as organizations.

Let’s discuss : Where does “Scrum” belong in the product diffusion curve in my next blog.

Keep waiting …


Category: General  | Leave a Comment
Thursday, April 23rd, 2015

Phonetic algorithm:

Phonetic algorithm is an algorithm which searches for the word with similar sound. In other words, it matches the words with same\similar pronunciation. When we search for names in database, it is difficult to find same names with different spellings. For example, “John -Jhon” , “Thomas – Tomas”, “Steven – Stephen”, “Rakesh – Rakhesh”This problem can be solved using phonetic algorithm.


Some of the phonetic algorithms are as below:

Soundex: This creates a four character string with three numbers preceded by a character.
Daitch-Mokotoff Soundex: Extended version of above algorithm; creates six numbers as the output code.
Beider-Morse Phonetic Matching: Unlike above two algorithms, it does not check the “sound” test by spelling, but by the linguistic properties of the language.
Kölner Phonetik: Focussed for German words with the same Soundex logic.

In this article, I will talk about Soundex algorithm which is popular among all other phonetic algorithms.


This algorithm was developed by Robert C Russell and Margaret K. Odell and was patented in 1918. This algorithm breaks down the name to a four characters (single letter followed by three numbers) code.
Let us try to create code for the below word with this algorithm


Algorithm is as follows:

1. Keep first letter of the word as is.
                backscratcher -> B

2. Ignore all the vowels (A,E,I,O,U) and H,W,Y. Replace these characters with number ’0′.
                backscratcher -> B0CKSCR0TC00R

3. Replace following letters with corresponding number (as mentioned below)
                1 – B, F, P, V
                2 – C, G, J, K, Q, S, X, Z
                3 – D, T
                4 – L
                5 – M, N
6 – R

B0CKSCR0TC00R -> B02226032006

4. Remove consequently repeated numbers
                B02226032006 -> B02603206

5. Remove all zero and truncate the characters to four digits. If the output is less than three characters, then fill the rest of the characters with zeros.
                B02603206 -> B26326 -> B263

Below are some sample outputs when we search for names with different spellings:

Names Code
John – Jhon J500
Marie – Mary M600
Raghu – Ragu R200
Prabu – Prabhu P610
Marc – Mark M620


Many databases like Oracle, SQL, MySQL etc.. has implemented this algorithm as a built-in function.

Syntax for soundex in SQL:



Query to search the people with name pronounced as ‘Stephen’

Select name from PeopleTable where soundex(name) = soundex(‘Stephen’)

Category: Databases, General  | One Comment
Monday, December 15th, 2014

I wanted to invest a thought on how Marketers have a lot of product/content on their website but don’t really see if it appeals to the user’s readability or usability. Leaving all the important aspects such as readability, content positioning and page layout, I prefer to get to the basics of electing persuasive colors.

According to, “Colors greatly influence human emotion and behavior”. Now, though there things we do on our daily lives, whether personal or in the hour of need for the Business, it all boils to the details of the look and feel and color which is appealing to help those decisions more indulging, as I’d like to say.

I happened to come across a view of how ’The Logo Company’ has shared the colors used in the Logos to identify how customers perceive to see a Brand as.

logo guide

I guess now you have an essence of how customers visualizes their brands. Is it with the brand name, the logo or the color used? We are actually having an expectation to fit the brand into a particular segment of the mind block with just a color.

Ever heard of a scenario when someone walks into a room and they get a headache? The color of the walls can actually change how a person perceives the temperature, according to Psychologists. Warm colors such as orange, red and yellow can cause people to think the temperature in the room is warmer than it actually is. Cool colors such as blue, green and light purple cause people to estimate the temperature is colder.

Now looking at this from the Business eye; Business owners can use these tips to their advantage by saving on heating and cooling costs. For example, if you live in a cold environment, painting an entryway a warm color may cause people to think the Organization location is slightly warmer than it actually is. This may allow you to keep the temperature at a slightly lower setting.

A few additional tips without getting into the details and how they can be used to a Business Advantage:

  • Green Sparks Creativity- Innovation rooms generally have Green to enlighten productivity and Succession.
  • Red Reduces Analytical Thinking-  Have you considered riding a red car without the need to go fast? It me not even necessarily be a Sports car, their reactions become faster and more forceful. However, that energy boost is likely to be short-lived and ultimately, red reduces analytical thinking. There’s a reason why red sports cars cost more to insure.
  • Blue is Most Accepted – When asked in a room what their favorite color is, the most common answer around the globe is blue. This came as a view right from our Ancestors when the depicted to have a good day seeing how clear and blue the sky was.
  • Yellow isn’t always a Hit – Yellow remains the least likely favorite color for most people, so pick a different color if you want to appeal to the masses. It is generally used to Caution or highlight a point. Yellow light in the Traffic Signal.
  • Orange is Associated with Good Value – The public associate the color orange with a noble value. Home Depot logo for example, helps customers view them as a low cost provider of valuable goods. Some high-end retailers have been able to overcome this association with orange and they’ve successfully incorporated orange into their brand.
  • Pink Calms People Down – In big games, people who see the color back once they hit the locker rooms tend to loose their drive which they should have when they are about half-time in the game. Once people have remained calm for that time frame, they’re often able to remain in a calm state.
  • White May Lead to Boredom – A customer shopping in a white colored store may become distracted from their shopping list, when their mind begins to wander because of the lack of stimulation.

I hope you realize that the examples given here have in some way moved to take decisions otherwise from what you may tend to do. These are ways how Brands market themselves in the customer’s mind unknowingly to create what their all-about.

Tuesday, December 09th, 2014

This post may appear very regular for those in the Software Dev world, but has a lot to do emphasizing how we perceive things that one finds it so insightful that it pops into your head and never leaves. That’s how amazing the human brain works!

In my growing years, daytime Tele was basically programmes for schools (through cartoons, virtual edu-channels such as POGO), so if you wanted to watch the tele you had little choice but to get a bit educated and my memory grew more apart from only being in school. That way, it could relate in school to those events which I came across. It’s possibly how the message is conveyed-more interactively, more visually rather than just learning things for the sake of learning.

A prose program discussed how the meaning of a sentence could utterly change just by emphasising on each single word. A sentence discussed was ‘I didn’t steal Mummy’s pocket watch’. It may seem to be a simple straight-forward sentence, but if you emphasise any single word, the meaning of the sentence changes. Lets take for example, emphasising the ‘I’ implies that the pocket watch was stolen, but not by the speaker. Take the word ‘pocket’ and it implies that the speaker did not indeed steal a pocket-watch but could be an actual watch. Every word emphasised gives a different meaning. Give it a try and you will see what I mean. Interesting?!

So, a sentence with six words has possibly six different interpretations based on how it has been said. As a written piece, you cannot imply how it is to be spoken and here you have a classic ambiguous statement. We do have a mechanism used to write unambiguous text and that’s the system used by lawyers. But that is almost impossible to understand unless you are trained to interpret it, in other words another lawyer. Writing a line of code that only experts have any chance of understanding isn’t a great solution in my opinion. The written word can be quite poor at creating mutual understanding, especially when complex concepts are being communicated. However when said, with the ability to question or challenge, that ambiguity fades away.

Don’t worry! I’m going somewhere with this :) Of course the same is true with written user stories. Making them unambiguous is both challenging, effort intensive and with risk. From the Product Owner, getting the message over to the developer just using written words simply doesn’t work. Writing a few conversation points and then discussing it in a two way question and answer type environment, now that’s proven to be effective!

So next time you are writing a story, remember if you write too much you are increasing risk. If the developer thinks they have everything they need in the story, they may start development without feeling a need to talk and they will probably write the wrong thing. Highly realistic scenario.. Writing short stories and relying on conversation is low in effort and low in risk.

Interesting isn’t it, how we indeed intend to work to the same goal but sometimes need to correct and question ourselves if everyone is actually on the same page of the requirement-at a hand. Worth a thought!

Category: General | Tags: ,  | One Comment
Sunday, November 09th, 2014

Few days ago I was looking at some cool new features that would be introduced in C# 6.0. Although mentioning about all the features in a single blog would be difficult, I would like to share the improvisations made to the most commonly used functionalities that we as developers use very frequently.

Initializing Auto Properties:

C# 6.0 allows developers to declare and initialize auto properties just like fields.

public class Employee


public string Id { get; } = “PROXXX”;

public string Name  { get; set; } = “XXXXXX”;



Primary Constructors

This is a very useful feature for developers since it helps us overcome the difficulty of assigning values of constructor parameters to fields in a class. The primary constructors makes the initialization process much simpler. The below code snippet explains how to declare primary constructors.


public class Employee(int id, string name)    // Primary Constructor declaration


public int Id { get; } = id;

public string Name  { get; set; } = name;



Accessing static methods:

The general way of accessing a static method is <StaticClassName>.<MethodName>. This is made even simpler in C# 6.0. All we need to do is declare the type in a using statement and all the static members of that type will be accessible.


using System.Console;

namespace ExploreCSharpSix


class Program


static void Main(string[] args)


WriteLine(“Welcome to Prowareness”);





Declaration Expressions:

This feature allows to declare local variables in the middle of an expression


Before C# 6.0:

public void ConvertStringToDatetime(string strDate)


strDate = “09/11/2014″;

DateTime result;

bool isParsed = DateTime.TryParse(strDate, out result);



C# 6.0:


public void ConvertStringToDatetime(string strDate)


strDate = “09/11/2014″;

bool isParsed = DateTime.TryParse(strDate, out Datetime result);



Category: .Net, General  | 5 Comments
Wednesday, October 22nd, 2014

There is a little known feature in Powerpoint 2013 that can be very handy for Microsoft developers.
You can make UI wireframes (storyboards) like the one below within Powerpoint!


I said “Microsoft developers” because this feature is only available in Powerpoint if you have Visual Studio 2012 (premium or above) installed.
You can make storyboards for websites, mobile apps and winform apps. You can use from hundreds of common ui shapes and download more from visual studio gallery.
It’s quite straightforward too. Just Open Powerpoint, click the Storyboarding tab and click the “Storyboard shapes” button on the ribbon:


You can start by double clicking a background in “Storyboard shapes” pane. There are backgrounds for mobile, desktop, sharepoint and web applications.
If you scroll on the “Storyboard shapes” pane, you will notice several common UI elements/shapes. Just drag drop the one you need to your slide.





There are even icons, charts, maps, Windows App and phone shapes:



You can also find more shapes online by clicking the link at the bottom of Storyboard Shapes pane:



It takes you to the Microsoft’s Visual Studio gallery page. I’ve marked some of my favourite free shapes in the screenshot below:



You can click and preview any of these before downlading. The instructions to download and adding shapes to powerpoint will also be on that page:



Have fun storyboarding!



Monday, July 28th, 2014

Disclaimer: This blog is not about the mystery thriller starring Al Pacino but about a concept which was there always in front of us but was overlooked by most of the organizations in the history.

In the morning today, I was reading an article about how companies like Amazon, Dell, HP and other big organizations, especially who are best in their product/service categories are still failing in their new initiatives. These companies want to expand with their new innovation strategies but all of that is going in vain and the big question for them was ‘why’. Let us take an example of ‘Apple Inc.’, Steve jobs has also faced the same issues when he was working on the very first commercially successful and innovative music player called “iPod”. Even the product was innovative, he was having demon dreams of failure because of consistent criticism he faced during the development of the product.

So what was the problem?

When a company is working on a product, there are so many times when a team discuss about the features and respective functionality of the product. What happens generally is in a group of five, if an idea has been proposed and four out of five have liked the idea, there is a very high probability that the fifth team member will fall as prey and like the same idea as well. This is part of human unconscious mind again where a team belong to same product will think in the same direction and finally can come with a good product but not a great one due to absence of a great predator aka “Devil’s Advocate”.

Let’s see below what Wiki says about “Devil’s Advocate”

“In common parlance, a devil’s advocate is someone who, given a certain argument, takes a position they do not necessarily agree with (or simply an alternative position from the accepted norm), for the sake of debate or to explore the thought further. In taking this position, the individual taking on the devil’s advocate role seeks to engage others in an argumentative discussion process. The purpose of such a process is typically to test the quality of the original argument and identify weaknesses in its structure, and to use such information to either improve or abandon the original, opposing position. It can also refer to someone who takes a stance that is seen as unpopular or unconventional, but is actually another way of arguing a much more conventional stance.”

Now since we understand the definition, let’s see how we can relate this to the concerns which are revolving around us. Most of us have probably heard about the questions on the quality of their product delivery. Generally, there are so many instances that people did work hard but end up in a poor rating or just satisfactory rating. The reason behind was generally considered as poor demo presentation or lack of features and certain reasons like that. But if we ask ourselves, besides presentation, there are certain other aspects where the quality is also getting measured apart from regular checks. Let’s take an example of what one of the team in Prowareness has tried a video based self-explanatory demo, and following that another team tried a cartoon/comic sketch based demo. If we evaluate them then these are one of the great examples of innovation but have we acted on them sincerely or are we as a different team member tried the same way to woo our clients. The answer is no, we might have tried a different hands on the demo but we never tried the successful ones and with this same approach we failed at most of the instances. In other words, it is the same situation where we can conclude that the innovative product has failed most of the times.

How can we make that innovation successful?

The answer is by appointing a devil’s advocate. With the help of a person (who is not aware of the product that you are developing but know how to see a “could be flaw” in your approach) who can ask you the right questions and the non-sense questions because we have to accept that there is always sense in non-sense too. The person can help you and the team to explore the horizons and most efficiently produce the product without the conventional approach. That is where Steve Jobs became the “Devil’s advocate” in his organization and we know the rest about the quality of any apple product.

Note: Some people might argue about certain facts but the facts presented above are just indicative and are relating the real time scenarios to make sure the real understanding of the concept.

Category: General  | Leave a Comment
Wednesday, March 05th, 2014

What I have noticed in most of the projects that I have been part of is that the Performance is considered as a least priority feature. Well its definitely not a feature, performance should be built in each feature and measured as early and frequently as possible.

I have collated few key points to fine tune any web application’s (targeting .Net and IIS but not limited to) performance.

1. Use CDN (Content Delivery network): All the 3rd party JavaScript files such as JQuery, Knockout should always use the CDN instead of the web application server. CDN Servers are dedicated to deliver the static content and is always faster than your own host.

There is a very high probability that the client (browser) would have already cached the JavaScript as part of other web application since most of them use the same CDN url. You can read more about the benefits about CDN here.

2. Use Bundling and Minification: The custom CSS files and the JavaScript files should be bundled into a single large file (reduces the number of HTTP requests) and also minified (reduces the size of the data transferred over the wire).

How to enable bundling and minification in MVC:

3. Use static content caching: Always set the static content to be cached (includes JavaScript, CSS, images etc.) on the client side. Most modern day browsers would cache the static content themselves. Use “Never Expires” policy to ensure that most of them needn’t be updated.

Note: This could also lead to the client not getting the latest updates when something changes, ensure that you have the version in the file name, when you update the file also change the version number.

<configuration> <system.webServer> <staticContent> <clientCache cacheControlMode="UseExpires" httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" /> </staticContent> </system.webServer> </configuration>

You can read more about client cache here.

4. Always keep CSS and JavaScript external: Never add any JavaScript or inline style information within the views. That would regenerate the view each time and you would miss out on the benefits of the above.

Hence always keeps JS and CSS as separate files and add them as links in the view.

Note: Best practice is to add the link to the style file at the top of the view and JS at the bottom of the view file.

5. Use Url Compression: Since IIS 7+ allows easy way of compressing the response using gzip protocol and the browser decompresses the response on the client side. This would considerable reduce the network latency while transporting data.

There are two types of compression Static and Dynamic based on the contents. JS, CSS, Images and other static contents would be part of static compression, but the views, data would be come under dynamic compression. You can enable them using the following settings in the configuration file.

<urlCompression doStaticCompression="true" doDynamicCompression="false" />


above picture shows a simple request to the webserver which implements the dynamic compression. Data transferred over the wire is 4.7 KB after decompressing on the client side the data is 45 KB .

Note: The dynamic compression puts load on the server as each request as to be compressed so use it wisely.

You can read more about setting up the compression here

6. Use Output Caching: Use output caching for regularly used views or pages which have no dynamic updates. This can be done using an attribute (OutputCache) to the action in MVC

More reading here.

7. Use Data Caching: Reduces the database or the disk i/o by caching the regularly used data to in-memory cache. There are many providers in the market and also a default one available with IIS.

8. ASP.Net Pipeline Optimization: has many http modules waiting for request to be processed and would go through the entire pipeline even if it’s not configured for your application.

All the default modules will be added in the machine.config place in “$WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG” directory. One could improve the performance by removing those modules which you wouldn’t require.

<httpModules> <!--<span class="code-comment"> Remove unnecessary Http Modules for faster pipeline </span>--> <remove name="Session" /> <remove name="WindowsAuthentication" /> <remove name="PassportAuthentication" /> <remove name="AnonymousIdentification" /> <remove name="UrlAuthorization" /> <remove name="FileAuthorization" /> </httpModules>

9. Avoid Session State: Session states should always be kept really small in size, if we cannot avoid the circumstances, then we should use session as distributed in-memory cache. Never use a database backed session provider.

10. Remove Unnecessary HTTP Headers: ASP.Net adds headers that aren’t really necessary to be transmitted over the wire. Such as ‘X-AspNet-Version’ , ‘X-Powered-By’ and many more. clip_image001

11. Compile in Release mode: Always set the build configuration to release mode for the website. For obvious reasons.

12. Turn Tracing off: Tracing is a good functionality, but each of the functionality would add an overhead instead use the asynchronous logging mechanism.

13. Async and Await: Since the async controllers are available since the MVC3.0 now we can have non-blocking requests to the webserver which improves the throughput of the requests made. You can read more about this @

14. HTTP Limitations: By default HTTP protocol doesn’t allow more than two concurrent requests from the same user and those requests are also limited by the browsers

Firefox 2:  2
Firefox 3+: 6
Opera 9.26: 4
Opera 12:   6
Safari 3:   4
Safari 5:   6
IE 7:       2
IE 8:       6
IE 10:      8
Chrome:     6

But there are scenarios where you would a webserver connecting to a webservice requesting data frequently then this restriction can degrade the performance. .Net has a way to overcome this restriction and allow users to make multiple concurrent calls to the service.

<> <connectionManagement> <!-- Add address from the trusted connection only --> <add address="*" maxconnection="100" /> </connectionManagement> </>

Some of the tools worth mentioning

a. YSlow2 – Yahoo’s add-in available for most of non-IE browsers. It analyses the web pages against the set of rules by default. You can look at the rules here


b. Chrome Inspector – Chrome browser’s audit tab allows to run the checks for performance.


c. Firebug for firefox, IE’s F12 window and Chrome’s element inspector could be used to track the network utilization and track all the http request made and can gauge which needs your attention.

d. Net Profiler – Available with Visual studio ultimate

e. ANTs profiler

f. For Entity framework there is ayande profiler

Along with above mentioned checklist/recommendations one should always ensure that the best practices for languages (C#, VB.Net, JavaScript) is followed for the optimum performance of any application.

Friday, February 28th, 2014

BDD or behavioral driven development is an extremely powerful and efficient way of software development. Since Scrum helps in identifying areas of improvement thereby helping you be more efficient, BDD is apt for the Scrum/XP hybrid. It is a way of defining complex business scenarios into simpler user scenarios in a very readable, English like language.

The process kick starts as early as defining the business requirement by the product owner. Since the product owner himself may not be technically inclined, it would help him define the scenarios which can be used by the development team to churn out quality without much of a hassle. It restricts the developers to key in any unnecessary code. What you need is what you write. The developers can use it for TDD and the QAs can use it for creating test automation.

For instance, look at a simple example of a specflow feature file below:


The language used here is Gherkin. The Gherkin language defines the structure and a basic syntax for describing these tests.

If we observe the syntax here, we see that there’s a feature element which provides the header for a feature file. Below this, we have some free text which gives a high level description of the feature under test. A feature may comprise of multiple scenarios.

@mytag helps us define a way to setup classes of behaviors. One can tag scenarios for different stuff. Generate categories out of it, in order to run selected scenarios and such.

Scenario is the actual acceptance test. It has some free text describing the scenario and some steps below it.

Scenario steps describe the precondition (by means of Given), action (When) and verification (Then) steps needed for the acceptance test.

The developer/QA can now get help in generating the code that would test this feature/scenario. When we right click on some scenario step, we get the context menu that also shows an option to “Generate Step Definitions”.


Initially the steps are shown in a color (Purple in my case, as I use the dark theme in visual studio). When the step definitions are bound to a step the text changes its color. In my case, it goes to white. This helps in identifying the steps which do not have an associated definition.

Clicking on this option would give you another pop-up:


Here the user can choose the style, preview it, copy the methods to clipboard or directly generate them. Generating would mean generating a new file with the name like SpecFlowFeatureSteps.cs. You may also choose to add a specflow step definition file on your own and copy/paste the generated code there.

The code would look something like this:


This is a result when I chose the underscore style.

What we need to do next, is just key in the code for each of these methods. The result is a very easy to read and easy to manage code. This also serves as running documentation for all the features developed.

Category: General  | Leave a Comment
Wednesday, September 04th, 2013

Hi All,

I tried a new approach to Control your system with your phone from remote location, that I would like to share with all:

We can start any application or we can shutdown the system from phone being at any remote location.

So first I will share this method and then some benefits of this:

I will consider the example to shut down the system from phone:

1. open notepad and type “Shutdown -s -t 100″ and save it as Shutdown.bat
2. Go to Outlook and click Rules->Manage Rules->New Rule
3. Click on Apply rule on messages I receive under Start from a blank rule
4. Click Next and then check with specific words in the body, then click on the specific words at the bottom and type the word that you want to match, I will write Shutdown for this example, click next
5. from next screen check start application,then click start application from the bottom, browse your bat file and also check delete it
6. Click Finish

How to use from phone:

As such we created a rule in outlook and that would be executed by the mail only:

So If you have internet connectivity on the phone:

just send a email to your account which is configured with the outlook, with the content of the mail Shutdown

If internet connectivity is not there:

Send a multimedia sms from your phone with text as Shutdown

If phone doesnt support multimedia message also:

<email address> <space> <message>

To sms2mail gateway number…

07766 40 41 42

What if you don’t have an “@” symbol or an “_” symbol in phone?

Most mobiles support both “@” and “_” symbols, but if not you can use…

??  instead of  @

!!  instead of  _


1. So you can Shut down your system from any remote location now with any phone.
2. The above process can be used for any other application also, say you need to start Teamviewer from remote location and then access your system as you want.. or
3. you can try with any application you like.

Please post your comments and  feeback for the same… Will write more articles on this soon