Sunday, October 16, 2011

New phase of my career at Neudesic

My new engagement at Neudesic, which has started some few months back, has been awesome so far with the work culture and kind of work that is being done. I am impressed with company passion for latest technologies and products are awesome. Also I am feel lucky to work with people who are Microsoft MVPs in different areas, authors of some famous books and respected speakers who knowledge, writings and words are recognized throughout the technology industry. There is more to come for me with this engagement and I am looking positive about this.

One of the products that impressed me is Pulse. This is kind of facebook application (social collaboration), but at enterprise level and targeted for corporations. This is integrated to Microsoft products like Dynamics 2010 CRM, SharePoint.

With this, I will close this short post, but will continue to post about this engagement Smile

Have a look at some of the screen shots of Pulse. (Know more about this product at and YouTube video at )

image  image

image image

image image

Saturday, October 15, 2011

Aspect Oriented Programming

After some years of programming in top down (C language) and object oriented (C++, Java and C#) approaches, recently in one my assignment I had to work on new type of programming approach. Yes, as the blog title suggest, the new approach is known/called as Aspect Oriented Programming or simply AOP. When I heard this for the first time, I thought new kind of programming approach but I realized this approach is basically adding meta data to MSIL and then altering the execution behavior accordingly. But why do we need to do this? Why cannot we achieve the same with normal programming? Like these, there were many questions popped up in my mind. To get answers to these questions, I dived deep into this area and learned how we can use this model for enterprise applications. (AOP in .NET is achieved via custom attributes in .NET)

The Technical Problem – Cross-Cutting Concerns

All good programming practice aims to organize software code according the principle of separation of concerns. Ideally, each software requirement is implemented in a separate source code artifact. In object-oriented programming (OOP), the basic unit of organization is the class. Code in classes is segmented internally by fields (discrete units of information), methods (discrete units of functionality), and events (discrete units of reaction). Common families of classes are themselves organized into namespaces.

The standard OOP approach has proven an excellent model for code architecture and organization. It falls short, however, when developers must implement cross-cutting concerns – behaviors that are used across a large number of business requirements, and cannot easily be isolated.

Some of the cross-cutting concerns are logging, security auditing, transactions, multithreading etc.

The Effect of Cross-Cutting Concerns

In a typical OOP approach, cross-cutting behaviors are factored into separate classes, which are then instantiated and called directly by business logic code. This forces business logic code to be intimately aware of these cross-cutting concerns and creates numerous problems for the architecture and code quality of an OOP application

  1. The number of lines of code increase
  2. An enormous amount of code is duplicated
  3. Business logic code becomes entangled with cross-cutting code
  4. Business logic code is tightly coupled to cross-cutting concerns

The end result of this approach to cross-cutting concerns is a code base that is hard to author, hard to maintain, and hard to debug.

A Framework for Cross-Cutting Behaviors

These shortcomings aren't an indictment of the object-oriented paradigm, which has proven highly successful as a model of code architecture. What's needed is an enhancement to this paradigm that enables the addition of cross-cutting behaviors. Ideally, such an enhancement or framework would enable:

  • adding cross-cutting concerns with little or no modification to existing business logic code;
  • applying these behaviors to multiple methods, classes, or even namespaces and assemblies with minimal additional code;
  • enhancing cross-cutting logic without the need to revise code in the business object;
  • eliminating redundant boilerplate code that must be copied from method to method.

Meta Programming - Aspect Oriented Programming comes to rescue

Meta programming, which has been made popular by dynamic languages, allows programs to change their behavior extensively at both runtime and build time.

AOP is a specific case of meta-programming. However, AOP operates at a higher level of abstraction.

Aspect Oriented Programming – Introduction

The sole purpose of aspect-oriented programming (AOP) is to provide a cleaner separation of concerns in complex applications, especially where cross-cutting behavior is concerned.

AOP Terminology

Aspect: a modularization of a concern that cuts across multiple classes.Join point: a point during the execution of a program, such as the execution of a method or the handling of an exception. Advice: action taken by an aspect at a particular join point. Different types of advice include "around," "before" and "after" advice. Weaving: linking aspects with other application types or objects to create an advised object. This can be done at compile time, load time, or at runtime.

PostSharp – .NET framework for Aspect Oriented Programming

PostSharp is a .NET framework for Aspect Oriented Programming from SharpCrafters. It has very simple attributes for instrumentation, security, user interface, multithreading and many more.

PostSharp is the leading AOP framework in the Microsoft ecosystem. Several Microsoft products, such as Windows Communication Framework and ASP.NET MVC, provide a subset of AOP features, but Microsoft has always been reluctant to use the term aspect-oriented programming, preferring the terms “filters” or “behaviors” instead. And these are noting but custom attributes in .NET.

It takes more effort and time and also difficult for me to explain everything in this blog post, so posting some of the screenshots for easy overview. 






Exception Handling:




NotifyPropertyChanged support (User Interface):


Undo and Redo:




Thread synchronization:


Note: Some of the content in this blog post is from different internet resources.

Wednesday, September 21, 2011

Windows Azure Insights from Microsoft Build Conference

Last week Microsoft’s build conference happened at California has bought lots of insights to developers in understanding Microsoft future plans. I had chance to see it live by streaming it on my laptop. Out of this conference, HTML 5 is going to take lot more importance along with XAML in developing new type of application in Windows 8 – what is called as Metro Style Application. This also indicates that Silverlight is not dead completely because of HTML 5 – because the new runtime called as WinRT (windows runtime) in windows 8 also supports applications based on XAML. This is something good news for Silverlight developers.

The two main areas of focus that remains for Microsoft is mobile/tablet computing (through windows 8) and cloud computing. While Windows 8 is still at early stages of developments, cloud computing by Microsoft – Windows Azure is doing well and pretty much in good shape currently. But Microsoft has more plans to upgrade and add new features of Windows Azure. I being a na├»ve developer in building azure application, showed interest in learning Windows Azure by attending sessions of Mark Russinovich. Its really very good session by him on windows azure. I have learned about basics and some advanced concepts like Fabric Controller. So to share what I have learned from him, I am blogging this post.


Before diving into cloud computing and windows azure platform, check this dilbert cartoon.



Cloud Terminology

There are terminologies like IaaS, PaaS, SaaS etc. out of which IaaS is relatively older to others.

Infrastructure as a Service (IaaS): Basic compute and storage resources. These are like on-demand servers. Some of the examples are Amazon EC2, VMWare vCloud

Platform as a Service (PaaS): Cloud application infrastructure. These are like on-demand application-hosting environment. Some of the examples are Google AppEngine,, Windows Azure

Software as a Service (SaaS): These are cloud applications like Office 365, GMail, Microsoft Office Web Companions

Below figure helps us to understand what are the different things that can be managed for us by IaaS, PaaS (Windows Azure) and SaaS



Below one shows developer work flow steps under IaaS


And this one shows developer work flow steps required for PaaS (Windows Azure)


So what is windows azure?

It is an operating system for the data center. It treats data center as a machine and handles resource managements, provisioning and monitoring. It manages application life cycle and allows developers to concentrate on business logic. It provides shared pool of compute, disks and network. It provides common building blocks like reliable queuing, simple structured storage, SQL storage, application services like access control and connectivity.

Windows Azure Platform Building Blocks

  • Windows Azure Compute (This is responsible for your application execution)
    • Web Role: IIS7 and ASP.NET in Windows Azure-supplied OS (For hosting web applications, web services etc)
    • Worker Role: arbitrary code in Windows Azure-supplied OS. (For hosting middle tier, background processing engines etc.)
    • VM Role: uploaded VHD with customer-supplied OS. (This is really a cool one, because you can provide your own OS in a VHD file and upload in cloud – also server level configuration will be in our control)
  • Windows Azure Storage (This is like our local file storage – uses simple and familiar programming interfaces - REST (HTTP and HTTPS), .NET accessible) 
    • BLOBs (Provide a simple interface for storing named files along with metadata for the file)
    • Tables (Provide lightly structured storage with a set of entities that contain a set of properties)
    • Queues (Provide reliable storage and delivery of messages)
  • Windows Azure CDN (Yet to discover more about this, but this is content caching purpose)
  • SQL Azure (Cloud equivalent of SQL Server – More to be learned by me)
  • AppFabric PaaS Middleware Services (And again this is also yet to discover by me)


Datacenter Architecture

Datacenter is made up for several clusters and each cluster has approximately 1000 rack-mounted server. Each cluster is maintained by a Fabric Controller (FC)

Fabric controller is  responsible for blade provisioning, management and Service deployment and life cycle

Think of fabric controller as windows kernal. Windows kernal manages Windows Server, and fabric controller manages Windows Azure (which is datacenter OS)

Below analogous mapping will help you understand the azure terminologies:


Here is the picture that shows traditional data center( Once stack is called cluster and such clusters are placed in one data center)


Microsoft data centers evolution:



Check this images that shows current generation data centers:



That’s all from todays post, will keep posting related to this as and when I learn and have time to share.

Btw, one more thing that Microsoft published recently is: they have plans to offer the Windows Azure Platform Appliance, which can be hosted in non-Microsoft data centers. his will enable resellers, such as HP, Dell, Fujitsu and eBay, to offer cloud services based on the Microsoft Azure Platform.

Tuesday, September 20, 2011

Is BackgroundWorker really thread safe component for WinForms?

Under certain circumstances the BackgroundWorker Component's ProgressChanged event and RunWorkerCompleted event will run on the wrong thread
Microsoft claims (for updating the UI controls based on work that us getting done by background thread):

“The preferred way to implement multithreading in your desktop based application is to use the BackgroundWorker component. The BackgroundWorker component uses an event-driven model for multithreading. The background thread runs your DoWork event handler, and the thread that creates your controls runs your ProgressChanged and RunWorkerCompleted event handlers. You can call your controls from your ProgressChanged and RunWorkerCompleted event handlers.”
Claim link:
But intermittently I have experienced under certain circumstances the BackgroundWorker Component's ProgressChanged event and RunWorkerCompleted event will run on the wrong thread (probably by worker thread itself). I was surprised by this. When these event run under wrong thread, I get cross thread error. So to solve this I had check under which thread these events are running and perform actions under the thread that has created the UI control. For this we need to use InvokeRequired property and Invoke method as shown below:

(This approach is what we follow if we use our own thread and not this component)

Gets a value indicating whether the caller must call an invoke method when making method calls to the control because the caller is on a different thread than the one the control was created on.
Executes the specified delegate on the thread that owns the control's underlying window handle.

Monday, September 19, 2011

Suresh’s Blog is now Facebook Integrated

As most of us live in popular social networking site facebook, I thought it will be useful to have facebook plugins integrated to my blog, to increase reachability and you guys can comment or like if you like my post or blog. As part of this I have added two widgets to my blog – facebook comment / like and fan like box. Down side of this integration is that I had to disable blogger’s default comment feature. There are some existing comments, those will be gone now. For the fan like box, I had to create a page in facebook and like it. Page is

Please comment/ like my post or blog if you like it.

Saturday, September 17, 2011

Links, Resources and Books that I follow


When it comes to learning new technologies, I always had my unique way of learning things. I just don’t wanna learn the usage of the technology, but what I do is dig into internals of technology to understand the concepts from its root and try to understand why so and so concept was introduced? What was the problem faced before this concept was introduced. Afterall there is a famous saying “Necessity is the mother of invention”. Once I get into this, I start playing with technology. Then I don’t need to muggup or remember the things, it just comes out of my mind naturally. This small trick helped me to master many technologies. I realized this late, didn’t follow this during my school days or at least during my intermediate course. I would have been in much better position if I would have followed this from beginning. But at least now I am used to this. Out of this I have learned .NET technologies and wanna share the links, resource and books that I followed which exposed internals of technologies. (Note: MSDN is obvious resource that has lots of content on .NET, so I am not mentioning those)


Jon Skeet Site

This site has some very good articles that explains internals of some of the basics and advanced concepts of C#.NET. Jon Skeet, who is maintaining this site, also written one wonderful book “C# IN DEPTH”  -

Some of other sites I follow are: codeplex, codeproject, scottgu blog, and many more…I will share more in my coming posts.



CLR via C# 3rd Edition by Jeffrey Richter

This book explains the CLR functionality of .NET via C# language. If you want to understand how your C# code is transformed to MS IL code, this is the best book. Not for beginners though, good for advanced programmers

SQL Server 2008 Query Performance Tuning Distilled by Grant Fritchey

As the name suggests, this book is good read if you wanna tune your SQL queries and other performance related suggestions for your SQL server. Must read for advanced users of SQL

Design Patterns for Dummies by Steven Holzner

This book is inspired from “Design Patterns: Elements of Reusable Object-Oriented Software” and patterns coined by Gang of Four (GOF). Though this book uses Java for explaining patterns, it should be easy for C#.NET developers also.

Patterns of Enterprise Application Architecture by Martin Fowler

This is very good reference for developers of experiences more than 4 years. It talks about some of best practices and patterns that can be followed for enterprise applications. It explains some of the design concepts like IOC, DI and then patterns that can be implemented at different layer like presentation layer, business layer, service layer and data access layer.

Microsoft® .NET: Architecting Applications for the Enterprise by Dino Esposito

This is same as the PEAA by Martin Fowler that I mentioned above, but tailor made for .NET audience

The Data Warehouse Toolkit by Ralph Kimball

This is awesome book for BI audience. This is not specific to any technologies, but it takes case studies of different industries like banking, retailers etc and designs the facts dimensions. Also watch out for other books from the same author.

If you wanna learn about MS BI technologies, then Step by Step series books are available from Microsoft for SSIS, SSAS and SSRS


I will continue sharing, in coming posts, about other books, resources that I follow which interests me.

My Engagement with MAQ Software

Its been a long journey of 5 years, at least relatively compared with other colleagues, with MAQ Software. This was my first company and gained lots of technical and pressure handling capabilities and more importantly I found my life partner here. Yes, let me introduce her. She is Tanuja, joined this company one year later to me. And also I found life time friends also (Vijay and Naresh among few). So I have decided to blog about my experience with this company.

  PQAAABeNnzfdUH1MQpVjTPYkiJtRlonNWm1FdOBbDrNlQl73UZZutLzTK6lAIvRtEhEsejp3YQ_nRqLDtoczLTPz7CIAm1T1UEY3FpRcwgDOqh_VcEfhbwSnShDb    185287_10150247735010910_678810909_7908769_6917820_n   

How did I get through this company?

It way way back in 2005, where I was in final semester of my b-tech education. I was attending different campus interviews like Infosys, Satyam, Wipro etc., but I was not able to get through around group discussion round. Frankly it was because of poor speaking capability and general knowledge. I still remember one of the topic was “Should India be given permanent member in UN). With very less knowledge, I was just supporting other guys (like the way Venkatesh did his group discussion in movie “Aduvari matalaku ardhale verule”). Then MAQ Software came and I attended. Luckily it didn’t have GD as part of their process) I did very well in two rounds of technical interview and have been asked to come down to cyber pearl office. I had final round of interview with director of this company. Everything was going well in this final round until interviewer asked me a question for which I didn’t have an answer. The question was “What is memory size of your mobile”. Then super idea came to my mind – will he really going to verify my mobile memory for what ever answer that I would say? May be I thought he is expecting confident answer rather than correct answer? then I told some 500MB answer and then interview was done. Two days later I got call saying that I was selected. (I just mentioned some funny experience I had here, but obviously I faced some real tough questions related to programming)

Training – Boot Camp

38994_421943622166_550952166_5219270_7060140_n Capture

It was first day where I have been told that I and along with other colleagues who joined with me, that we will have to under go boot camp training of two months. Frankly I didn’t know why it was called as boot camp training and what is the meaning of boot camp. I was thinking two months of training and I was happy that no work, just learning all the way for next two months. But this assumption that I made is wrong for one reason – boot camp was all about learning and more importantly exposure to pressure handling situations. Yes, there was so much of pressure that I was literally thought of giving up this offer. But my patience helped me. In fact, I have learned to show more patience rather than getting frustrated. In this two months of boot camp, yes we learned technical topics ourselves, shared within ourselves, and daily projects. Added to this, we had weekend projects also. Phewwwww. I can surely say that once you are through this boot camp training, you will be ready for any pressure situations – not just in projects, but also applicable to your life.

Mumbai experience – Train chasing, missing and my first flight experience

PQAAAGJ-e__NpMYg_P0VFRN9VwevbgpM5vMoX_wb6tbeHs9l1tYn5x5AVmcXVejveuiTlzZ7vEk1wEnnqyCH3u1viIYAm1T1UPM4UshqV1j0i1cpG-4ivrpK9fEf PQAAAITfEZJbu0VD8EEKij2h0b7IVsikojf2bG0kI91W_GZrEH_4uVp9RW2sinosa67rYwCD259Rj6I0AdeikrN-PI8Am1T1UBRqcxLAaZz5z0xX_3T1W7OPfZQQ

For one of project requirements, I, along with Vijay and Naresh, were asked to travel to Mumbai office. Though this project was test automation project (because in those days we, being developers, were feeling low because we got put up in automation project), I have gained project leading skills from a very good mentor. Yes her name is Vijaya Gowrishankar. Thanks to her. We three used to stay at guess house for about two months. We used to have every day chicken at night. Apart from this, we had very good horrible life time experience in Mumbai. Why? this is because, none of us knew Hindi. For sure I’m being close to nil – Naresh was better than us. We were travelling back to Hyderabad. We are supposed to catch Hyderabad train that is supposedly to leave from CST station. Along with us, two of Mumbai fellows were also supposed to travel to join same train. It was 5:30 evening and train was scheduled at 9 PM. As usual again we thought of having chicken drum sticks before leaving to station. So we have ordered from guest house itself. Delivery was late, I think that delivery boy turned by 7. We thought, it was already late, so we thought of leaving by catching a cab. Unfortunately, we couldn't find cab and asked auto rickshaw. May be because of our poor Hindi, the auto wala took us to wrong station. It was already 8:30. We then realized we need to travel for another 1 hour to reach the correct station. Gone, we missed the train.  Actually, we were supposed to be in Hyderabad office because our CEO is going to be there and a meeting was scheduled. So we have decided to catch the train some how. We took a cab and travelled to other station from where local train takes same path as that of actual Hyderabad bound train. We reached to nearest station and boarded into local train. We were told that if we are lucky, we can go till “kalyan” station in local train and catch the actual train at that station. We were also in touch with Mumbai fellows who are in the actual train. We asked them to check when it can reach kalyan station. Luckily we were told by them that train was halted in some station for more than 15 mins. So we had good chance of reaching to kalyan in local train much before the actual train reaches. We are still in local train, holding three luggage's – one on left hand, other on right hand and other one is back pack. On top of this we were also carrying our chicken drum sticks. Train was fully crowded that the chicken drumstick pack was carried away by crowded people. Sad smile(((. For nearly about 40 mins we reached kalyan station, and we came to know that the actual train is in another platform and was about to leave. We got tensed, carrying all three bags and on top of this we didn’t had our dinner and chicken drumsticks. We got down from local train, two of them took direct path via track to reach the other platform(they had worst experience, stamped the dungs on tracks). We were in hurry that we didn’t find ourselves. I realized that I am alone, I took the stairs way to reach other platform – carrying three luggage's and dashing everyone who is coming along my way. Then by the time I reached, train left already just few seconds back. OMG, that was really horrible chasing but at the end we were not lucky enough to catch the train. We fell down on the platforms because of tiredness (as station was crowded at all places) and we were thinking what next?? Should we catch one more local train and chase till pune?? this will be more risky?? Then we had decided some how we need to reach hyderabad the next day and only way to do this is to catch a flight – WoW, this will be my first time experience in flight. Yes, we took flight next day early morning since this was first flight experience for all three of us, it was a rememberable trip

US – Seattle:

PQAAAEDT3_J-06eTVeLznk_0hcfsjPgtxnS6bcohaUcm6Ceswu7YEuqKtSWMMKeBcHPSQ27jxaI3jJBwqG5NtGyQfLwAm1T1UNjBJSrscVhKumLWmsxVycFKMUWq PQAAABqOft5VCIllWqIe-R-6jlNOMUlPY6OqOXCh530L__ECSs4ygkjTc1PecSelchUYlimiQNgNm05ZFhNU7zxesYwAm1T1UP5b0Q8bmPF0xUvatun9igr0HTH0

It was 2008, I travelled to US – Seattle for my onsite assignment. Here its more of client interaction experience than personal work experience. I had to gather requirements, do participate in development work and get other portion of work done from India team. Everything was good except for social network/ personal network. People over there do their job and go home. Its not like in India, where people interact with each other a lot even at work by having healthy and funny conversations. I had colleagues over there, who were from North India and but I am not quite comfortable may be because of language barrier (Hindi). But good thing that I learned cooking. Yes, for the first time I cooked for myself and learned to cook variety of south Indian dishes. I used to take pics to capture my dishes and send it to my friends and family to show my cooking skills Smile with tongue out

Post 2009:

This was the period where I was in India back and learnt a lot of things both technically and leading different teams. So much to say that I have learned all technologies under .NET and also MS BI..

51902_432821335909_678810909_5671526_2336430_o 40223_411061584330_753174330_4643701_3724296_n

Aug 19, 2011 – Last day:

Finally for my best interest of my career, I have decided to move on. I will be relocating to Bangalore soon later this year. Thanks to MAQ Software – For sure this is the best company to have it as first company in the career.


Post MAQ Software?

I have moved to a new company called Neudesic. I’m happy to be part of Neu Family – I will continue to blog about this company in next post.


Here is the small video clip gifted by tanu on my 4 years completion:

Thursday, September 15, 2011

My first blog post

I have been in IT industry since past 5 years where I have learned lots of things in technology space as well as in other areas that is required in corporate world. I would love sharing my learnings to others, but that happened with in my close group of friends and colleagues. Now I am extending my sharing through this new blog. I had this idea in my mind long back, but didn't find time to do this - kind of always buzy with work in my organization. I hope I will find time to share my learnings thru this blog. Happy reading my blog :)