Wednesday, September 1, 2010

Callbacks in WCF

Quite often in the client-server model,the requirement of getting notified of certain changes in the server pops up.Say for example in the movie ticket booking system.When a person selects a seat for booking,the selected seat should become disabled for all the users currently logged in,so that you can avoid the message 'Sorry the seat you were trying to book is already booked'.
In such scenarios polling the server for changes might be one way to go about it.
Another way might be the server calling back to all the clients when a seat selection happens.
This post is about the second way and when the booking system is developed using WCF :)
The WCF framework provides a easy way to achieve this.....Callbacks

The whole concept is simple.The server keeps track of all the active clients and knows how to call them when the required change happens in the server.
Again its all about certain interfaces that you have implement and some attributes that you have to specify.
The ServiceContract that the client exposes also specifies the CallbackContract type.This is again another interface that the client needs to implement so that the server knows the type of client it is serving and can call back the functions on that interface.
This is much more like the eventing model.All functions in the CallbackContract would be like your event handlers,which would be invoked by the server on a particular event happening in the server.
You can go ahead and create a Publisher-Subscriber framework itself so that any future requirements of such nature would be easy to implement
This article by Juval Lowy suggest a good way to implement a publisher-subscriber framework in WCF using callbacks.

The code provided below shows a quick example of Callbacks.Run minimum of two clients,so you get to understand what it is all about :)

Code Download

Wednesday, August 25, 2010

Replace 'Introduce Local Extension' With 'Extension Methods'

Introduce Foreign Method(IFM) and Introduce Local Extension(ILE) are two refactoring techniques that comes handy when you need to add functionality to an exisiting class,source code of which is beyond your control.
IFM is used when its just one or two functions that you need to add to the class.When the number of functions,that are to be added are more,then ILE is used.Not a rule though :)
But now with Extension Methods the whole process is much more simpler.
You need not do the subclassing or wrapper technique of ILE.
This can be a third way of implementing ILE :).Thanks to the framework team for keeping it simple.
The same date example using the 'Extension Methods' way of refactoring
  public static class MyExtensionMethods
{
public static DateTime NextDay(this DateTime date)
{
return new DateTime(date.Year, date.Month, date.Day+1);
}
}
The function NextDay is now available on any DateTime object,just as if you have written if you had access to the source code. It's the usage of ILE and IFM that has paved way for the inclusion of Extension Methods in the framework I guess.Thanks to Fowler for that.

Monday, August 23, 2010

TDD and Refactoring

Over the days I have been reading on Test Driven Development(TDD) and it seems really interesting methodology to go with as per development is concerned.
Basic of TDD is that the development process relies on 'tests', that are written prior to code.
Sounds astonishing!!!!
It might to someone into the normal development mode,where tests are usually written after code, so as to match the code that is written.
But TDD says just the opposite.
Code to make the tests pass...Just pass..Nothing more and Nothing less.
Thats where the catch is where most of we developers might find it difficult and needs getting used to.Not getting more into it as I would not be the best to comment on it :)
So whats refactoring got to do here.
Refactoring plays an integral part of TDD,so that the code is elegant and conveys just what it needs to,avoiding duplication.
The TDD approach also assists in refactoring as you have tests readily available to assure that the functional behaviour is not affected while changing the code design.You are just click of a button away if you are having a automated test scripts (like nUnit) in veryfying refactoring.
So both TDD and Refactoring goes hand in hand and helps in greatly improving the overall code quality.
There are quite a lot resources out there on these.
The best for refactoring would be of Fowler's.
For TDD this would be a good start and also the one by Kent Beck

Friday, August 13, 2010

Mission ASP.net

Its been high time I have been into windows developing..wpf mostly..I think its long enough to get a taste of the web too..thats whats hot and cooking...i guess..coz everyone is asking that.So I think I should take the plunge into it...the sooner the better.
Bluffing away @ interviews saying i have theoretical knowledge in jsp(was trained in Java quite a while ago) blah blah blah... doesn't seem to work I guess...they say why U when I have someone having work ex in ASP itself :)
Good Question!!!

So I am on this mission...to learn ASP.net..hopefully :)
edit:
Got hold of some books..let's see how it goes

Wednesday, July 7, 2010

Seek the problem, Not the Solution

It’s not uncommon to have problems in life, and so in the application/code that you write. I am not being too techie here.
It’s just I am relating my thoughts to something technical.
Being a software engineer, writing code is inevitable in my day-to-day life and so comes bugs :)
I spend a lot of time sitting on to solve bugs(of late it’s been eating away my head) and so do I see people around me, at my workplace, doing the same.

I always go in seek of the problem that caused the bug, rather than to find a solution for the bug.
Certain others go in seek of the solution for the bug, rather than the problem that caused the bug.
So am I not saying the same thing in two different ways….solving the bug!!!!
But they are not…at least for me :)

Seeking for the problem gives you the solution for the bug and also a better understanding of the code that you have written. You seek for the problem because you feel the mistake is at your part, maybe a implementation one or a logical one.
Seeking for the solution too solves the bug but does not give you a better understanding of that you have done. Mostly the solution might be a workaround to cover up some of your own mistakes, which went unnoticed, as you were too concerned of the solution for the bug and not the problem for the bug. This might really not solve the bug too, it might just be a temporary fix or a specific scenario fix.

This is just an example.
Same goes in the day to day life. Whenever you go in seek for solutions you are actually creating more problems for yourself.
Maybe a real life example(non technical :)) would do good.
Say you are a spendthrift and you keep spending away all what you get.
Need money urgently?? Solution is to borrow from your friend. Does it really solve the problem??
Nope !! The problem here is that you are spendthrift. So try to change that and not keep borrowing :).

Don’t be happy with the solution, hunt down the problem.
Happy hunting :)

Saturday, July 3, 2010

Hero or a Cheat????


Luis Suárez....that name would be said few more times, at least till Uruguay's fate is decided in FIFA WC 2010.
Early Saturday morning(IST),witnessed some dramatic moments of WC 2010.With the game about to be pushed into the shootout,which it did end up eventually,Ghana was to score a goal of substitute Dominic Adiyiah's header which was denied by Suárez with his 'hands'.The drama ended as Asamoah Gyan struck the crossbar for the penalty awarded and the match moved on to shootout,which saw Uruguay through to the best 4....shattering the African hopes.
Is he a Hero or a Cheat????
Wasn't it something anyone would have done?
Wasn't that a reaction rather than a response to a situation?
Ghana could have scored in the penalty awarded.But is just a penalty enough instead of a sure shot goal?

Would it be the next 'Hand Of God'??

Hero Or Cheat,fouls are committed knowingly and unknowingly in any game,as in football,as in this dramatic game.

So the play goes on says referee and so does Uruguay without him into the final 4

edit: Not too far says Netherlands,putting an end to the Uruguay's tale of WC 2010

Thursday, July 1, 2010

Synchronize SQL Server database objects


Updating an old database, with newly created/modified database objects(mostly stored procedures,views,functions and table value parameters), from a new database was a very common,tedious,error prone task that was performed at my workplace for the past few months.This came up with the client requesting to retain their existing data and just make updates to their old database from our development database(which of course is the new/latest one), whenever a deliverable was made.
When the very work I do is to automate peoples work,I felt perturbed seeing this being done manually.So decided on to automate it :)
Writing SQL scripts would be db expert way I guess.But I am no expert in that so decided to do it in my way.
The .Net way :)
Thanks to the whole concept of .Net and Microsoft for having exposed such complex functionalities in the most elegant way ..... SMO(SQL Server Management Objects).
You have to add a reference to Microsoft.SqlServer.Smo and a few other assemblies(Check the source code for more details).
Rest everything the API provides.

Code quality might not be that good.Just did it in an hour :)
A help is there within the app.

Thanks to .Net once more :)

Download the source code (rename to .rar)