Sunday, February 24, 2008

STRUTS Vs ASP.NET

I found a good white paper on MSDN related to Struts and ASP.Net architecture comparison.

http://msdn2.microsoft.com/en-us/library/aa478961.aspx

After reading, it looks like ASP.NET is better than STRUTS. But as white paper is published on MSDN, I am not sure every feature of STRUTS is covered.

Now check this out., how Java guys are fuming over this...nice fun

Currently Listening - Pyaar Ka Musafir-LUCKY ALI

Saturday, February 23, 2008

Google search - Rank 1

Go to Google.com and search for,

GAURAV SHARMA C#
My blog ranks first in Google result. Amazing (at least for me) !!!

If currently its not ranked no. 1 check this out as proof :)



Thursday, February 7, 2008

C# 3.5 - Properties Shorthand

I must tell you if today your C# knowledge is not up to date then you might face tough time with future versions of the language. Microsoft developers will keep on adding new things ranging from entirely new features like LINQ to something like Implicit types or Object initializations. Last two features that I've mentioned are due to LINQ and secondly they provide some kind of syntactical sugar for developers. In future, VB.NET and C# will take entirely different paths. C# will become more performance oriented and VB.NET more developer friendly. VB.NET will target UI where as C# will mostly be used as class libraries. I am not sure when will this happen but it will happen soon [trust my Microsoft contacts :) ]

Let me show you how property shorthand feature of C# works from inside. We will start of with a simple console application and add code as needed.

Adding property shorthand to your code
Type prop in code window and let intellisense jump in. Then select "prop" and press Tab 2 times. A property shorthand will appear
.

Complete your class definition
Add 3 shorthand properties and one normal property. Your final class definition will look like this



















Create a class that will use Customer object.
Main() method in Program.cs would be enough for us
,













And the output is as expected,




Let us examine the IL that is generated for this managed assembly. Below are two images one with IL showing members of Customer class and next one with one method expanded.


For the properties that we created with shorthand, C# compiler added a backing field for each shorthand property in this format,
k_BackingField: private TypeOfShrtHandProperty

get_FirstName method expanded
Image shown below looks at the IL generated for get_FirstName method. Second IL instruction 'ldflf' i.e. Load Field, works with backing field created by the compiler. set_FirstName() also uses this backing field.

Don't expect that these shorthands will support validations etc. These are simple properties and just adds thread safety over using class variables directly. If we don't want any thread safely and no validations, then we should not provide properties. I guess this is a cool new feature but unless you understand how it works inside you will not able to fully utilize it.

Next I'll add a small post related to introduction of partial methods in C#. I am down with Viral from last few days but today I am feeling quite well. I hope! to get well soon.

~ILdasm rOcKs~

Tuesday, February 5, 2008

Atlast a new Header

Just worked around for 20 minutes and WoW my blog now have a new header. Cool isn't it? We should have free online blog theme creators or else we have to dig into CSS. I think if someone works upon it we can have a good UI to edit CSS and create a blog theme creator.

Currently Listening To - Ajeemo shan - JODHA AKBAR

Monday, February 4, 2008

The Great Debaters

Just finished watching "The Great Debaters," and man! what a movie. Denzel Washington both directed and acted in the movie. He is simply great. I saw a number of his earlier movies but this time he is rocking. Movie is about racial bias around 1930's time frame. It is a real life story of few men that stood against majority.

All actors, specially the team members that participates in debates are awesome. Scenes where negro team competes with white students is overwhelming. I am sure this movie will be voted for Oscars. This movie is a must watch for everyone out there. Gandhi's non co-operation movement is also mentioned in the debate that occurs in Harvard. In simple words:

Amazing Movie

Saturday, February 2, 2008

Bill Gates speaks on Creative Capitalism

Today evening I was browsing news related to Microsoft bidding for Yahoo when I saw this nice speach made by Bill Gates as World Economic Forum.

Views expressed by Gates are quite noble. His idea of large companies contributing a fraction of their great minds on innovations focusing on developing nations is great. As an economics novice, I think the steps Bill is putting forward under the umbrella of 'Creative Capitalism' are quite effective. I am also proud of the fact that India, being a developing country, is contributing so much for this. Bill mentions India more than 2 times in his 25 minutes speech. Isn't that great?

Currently listening to - But it rained-PARIKRAMA

Sunday, January 27, 2008

IL Generator

From past few months I am constantly trying to increase my knowledge about IL i.e. intermediate language generated when we compile our code thought any .net runtime compliant compiler. There are few classes in mscorlib.dll under System.Reflection.Emit namespace that are used by these compilers to generate IL suitable for our code files. I'll try to give you some brief introduction about IL working and i'll use .Net Reflector and ILDasm.exe for demonstration.

Just to get you started let me tell you soemthing about these tools:

  1. .NET Reflector - This is a tool which allows you to browse thought constituents of your assemblies. You can reverse engineer all the classes that are part of your assembly in any .net compliant language like C# or VB.NET
  2. ILDasm - Let's you dis assemble your IL code. You can check out complete IL code with all opcodes. Apart from this IlDasm also let's you check assemblies manifest for metadata

Let us start with some IL generation:

  • Class ILGenerator
    [assembly : mscorlib.dll] [namespace: System.Reflection.Emit]
    This class generates Microsoft IL instruction. It contains a large number of methods that are used to emit appropriate IL instructions.
    There are methods to emit calli instructions, methods for exception handling stuff etc. Large portion of this class s occupied by Emit method overloads. There more than 10 overloads available for emit method.



Emit method takes a OpCode structure object. There is another class in System.Reflection.Emit namespace known as OpCodes. This has all the opcodes that you find in you IL. Almost all of these OpCodes are declared as readonly variables and initialized with some specific values.
This is OpCode structure and as you can see it has variables mostly of some enum type. Like StackBehaviour is an enum. OpCodes class is given below. Just look at the constuctor used for initializing readonly fields. After combining all these things together an IL instruction is pushed to a MSIL stream of instruction.















There is a method InternalEmit which almost all Emit methods in ILGenerator class calls. Let us look at this method: if opcode.m_size == 1 This checks weather opcode size is 1 bytes or 2 bytes long. If opCodesize is 1 then opCode byte is added to MSIL Stream byte array and its length is incremented by 1. But if we have 2 byte opcode then both bytes are added to MSIL byte stream array and its length is increased by 2 i.e. one after each addition. At last InternalEmit calls UpdateStackSize method which I'll leave for readers exploration.

Knowing about IL and metadata has helped me a lot in solving issues related to performance. I recommend knowing few things about IL to all .net developers.

References

  1. OpCodes : http://msdn2.microsoft.com/en-us/library/system.reflection.emit.opcodes_members.aspx
  2. ILGenerator : http://msdn2.microsoft.com/en-us/library/system.reflection.emit.ilgenerator.aspx

EnJoy Coding
Currently listening to: Who I am- Eminem

Sunday, January 13, 2008

My Hibernation is over

Friends! you must be wondering why I was not adding any new posts. Actually December was a bit hectic in many ways. I was going into a transition from being a senior developer to a team lead. Another reason was my desktop computer that started behaving in a scary manner.

Leaving all that behind I want to tell you a special thing. I got a new laptop. Cheers! This statement of mine is over simplified but yes i bought a new laptop from US while I was sitting here in India.
My laptop purchase story goes like this, in mid November a friend of mine told me that one of his friend is coming to India from US in mid December. That was a good news for me as from past few months I was planning to purchase a new laptop. In India these machines costs over 50,000 Rs. and if you plan to do Microsoft applications then you should be ready to shell out around 1,00,000 Rs. After this I started searching for a good deal on web. some of the sites that I dogged were BestBuy.com, ZipZoomFly.com, CircuitCity.com and list goes on. But one thing that I noticed was either these sites were having below par factory models or they were costly. Processor were always 1.6 or 1.8 GHz Core 2 and if you want 2 GB ram then price shoots up.

After few weeks I decided upon Toshiba Qosmio 15.4" version. This is a great machine and I configured it on Toshiba's shopping portal. But to my surprise Toshiba only accepted credit cards issued by US banks. Toshiba suggested me to use over the wire money transfer feature but I wasn't sure about its security and authenticity. So I decided to switch over to HP. HP was having some good offers running. I configured a 17" HP DV9500T machine and got around 450$ discount. Cool!

Machine specs are as follows:
  1. Intel Core 2 Duo 2.2 GHz [Santa Rosa platform]
  2. 2 GB DDR2 RAM
  3. 240 GB 7200 RPM HDD [120Gb dual hard disks]
  4. NVIDIA GS8600M GPU 256 mb DDR3 Dedicated vedio memory
  5. 17" Ultra bright screen [Best in market]
  6. Finger print reader
  7. DVD writer with Label Flash
  8. ALTEC LANCING speakers
  9. HDMI port
  10. WebCam 1.3 MP

Amazing power and great looks. Check out the picture





.














I have started on learning XAML and WPF. I'll start posting topics related to WPF from next week. Apart from this I plan to continue on my C# 3.0 feature listing. I hope! having a laptop will surely help. Wait n watch. I have also installed Call of Duty 2 and its going good. I plan to play at least half n hour daily. You know games are my passion and I can not let my passion die. Check out this screen shot,

Currently listening to: Akon- Blame it on me
~nJoY CoDiNg~