Must know technologies

Following are the technologies I believe are the future and want to learn but not finding the time for:

  • Workflow Foundation: The reviews of this are really really good and people are saying, nothing can beat the designer for this.
  • Windows Communication Foundation: Microsoft has unified the way two processes communicate, be they on the same box or on a remote client/server. We don't have to decide between .NET Remoting, Web Services, Message Queues, Distributed Transactions and a few other related technologies anymore. The basics of WCF are that you create a service and add endpoints to it. If you want a remote .NET client to communicate with it, you add a TCP endpoint (which is equal to .NET Remoting). If you want a Java client to communicate with it, you add HTTP endpoint (which is equal to Web Services). Note that the service remains the same, you only need to keep adding endpoints which reduces code duplication / complexity.
  • .NET Framework 3.5: This has a lower priority as it is not out yet but the additions that Microsoft is making to the framework are pretty interesting. The biggest proof that it is interesting is the fact that Sun is taking a few pages from .NET 3.5 for the next version of it's framework Wink. (Note: Microsoft itself is taking a lot of ideas from open source projects like Hibernate)
  • Windows Presentation Foundation: This has the lowest priority on my list but I find it the most interesting. Future windows applications are going to be built on top of this technology. GDI+/WinForms are past it's maturity and WPF is taking it's place. However people are not just going to run and make WPF apps. I see over the next two years a lot of small companies coming out with WPF followed by the big boys.

Update: I had Java on my list but scratched it off after a lot of reading over the past few days. The reason being that there are so many different directions you can take within Java that getting my head around it is in itself a big challenge. Hence I have decided to teach myself more of the .NET stuff instead of trying to be on two ships at the same time.

.NET vs Java

I have been reading about the Spring Framework, Hibernate and the Java world in general for the past couple of days. Trust me when I say I am reading about Java just out of curiosity and nothing else Smile.

Here is what I have learnt so far:
With .NET Microsoft took the approach of making it very very simple for developers from the get go. Most .NET applications feel like writing shopping cart applications Smile. They did not add any high level complex APIs and kept the entire platform very very developer centric and simple.

With J2EE Sun took the exact opposite approach and made the platform Enterprise level which resulted in developers having to learn EJBs which from what I have read required a lot more work to get even simpler projects done. This lead to the creation of the Spring Framework, which adds some neat technologies such as Inversion of Control and Aspect Oriented Programming to POJOs (Plain Old Java Objects). I imagine .NET to be like POJOs when I write code.

The end result is that these two technologies are moving towards each other (.NET scaling upwards and JEE scaling downwards in terms of simplicity) and are going to clash/meet somewhere in between.

I think the existing .NET 3.0 framework (which includes Windows Workflow Foundation and Windows Communication Foundation) and .NET 3.5 framework (which adds OR Mapper like Hibernate) right into the framework, while J2EE coming up with frameworks like Spring to simpify Java development is a good indication of this.

On the tooling side I was really surprised to read that Eclipse was more powerful than Visual Studio. I work day in and day out of Visual Studio and never imagined anything more powerful, but after reading some of the features of Eclipse I think we can be a lot more productive if VS had those features.

To name a few:

  • Refactoring: Hands down the refactoring support in VS 2005 is pretty lame and may be about 5% of what Ecllipse can do.
  • Type search. If you want to search for some class that is sitting in some third party assembly, you can find that just by hitting Ctrl+Shift+T and typing the first few letters. The tool will take you straight to the class if source code is available else will take you to the type definition.
  • Automatic imports statements: As you type your code when you reference a class that is not part of the using statements at the top, Eclipse will automatically add it. It will also remove those statements when your code no longer uses any of the classes in that namespace.

There are a lot more, but I forget them Sad. I will try to find the link where I read the differences and update this post.

Having said that I think the refactoring support in Visual Studio 2007 due this year end will improve dramatically. Just by the looks of it, it appears that MS just threw in basic refactoring into VS 2005 at the last movement. The beauty about VS 2007 is that it will target multiple .NET versions (2.0, 3.0 and 3.5). So you can write .NET 2.0 code in VS 2007 with all the productivity benefits they add to that release.

Go beyond Vista! Get a Mac!

Apple has started the rumored campaign against Vista in its' stores. All Apple employees are seen with T-Shirts labelled "Go beyond Vista: It's time to get a Mac". They also have little cut-outs all around the store. In addition apple seems to have sent out emails to all iPod owners on PC with a similar slogan. Retail Vista sales have been lackluster in comparison to XP sales. Steve Balmer put the blames on pirates, but analysts say that Vista still isn't ready yet, and they are still waiting on drivers from all vendors.

Looks like the Longhorn / Vista curse is going to continue on Microsoft until the next version of Windows hits the stores. I feel so sad for Microsoft Smile. They tried to fly too high in one shot instead of flying in increments. A lesson well learnt I assume.

Source: Microsoft Watch

Thoughts on Vista

I installed Windows Vista Ultimate edition about a week back (hence no posts for about a week Sad). I got a licensed copy of the Business Edition, however, Vista comes on a DVD that has all editions on it, which lets you install any version that you want and evaluate it for 30 days. Note however that if you install a version higher than the one that you have the CD key for, you will have to reinstall the entire OS after 30 days. If you installed a lower version and entered the CD key from a higher version Vista will automatically upgrade to the higher version. To get the option for different versions, don't enter the CD Key, just click next and you will get a list of all different versions. Installation went smooth without any hiccups although I would say it is nowhere near to the 20 minute installation that Microsoft has been touting. It took a good 45 minutes to install (note: I installed this on a 4 year old machine which could be the reason why it took that long).

My first impressions of the OS is very good. It is much more performant on my old machine than I imagined. The new Aero look and feel is really nice and subtle. Microsoft has surely looked at what Apple has done over the years and brought that to the Windows world. I would however be cautious in calling it a rip off as it is not exactly the same as a Mac. They have copied the idea of adding subtle animations to certain tasks, like fade-in fade-out effects. Mac still has the edge right now which I think will fade-out when the next version of Windows ships Smile somewhere in 2009.

Overall I think the OS is rock solid and want to make it my default OS. There are a few quirks that I want you to know before you run and get yourself Vista. Vista does not recognize my SoundBlaster Live 24 bit sound card. Neither Microsoft nor Creative has the drivers for it. The impression I get is neither companies plan to write the drivers for it. So I am sort off left out in the cold. Also Vista did not recognize my Logitech ClickSmart 510 webcam. Both devices are around 3 to 4 years old and probably will not be supported, hence my best suggestion for anyone wanting Vista is to wait until your next PC, otherwise be ready to replace the devices that don't work on Vista.

Final word: There is no way for me to go back to XP especially since I am sick of looking at the same desktop for 5 long years. However, I have to wait for a couple of months till I assemble a new PC. By then Windows Home Server will have shipped and I can convert my existing PC to a Home Server and enjoy Vista on the new one. The really cool thing about Home Server is that I can install SQL Server 2005 and transfer my website / media files to it and not bog down my new PC.

BTW I got onto the Home Server beta program (not a big deal any one can get on it by applying). I plan to install it and check it out to see what's new.

Oh No! There goes my motivation to write C# 3.0 Part 2

Following are short videos that explain all about C# 3.0 language features. I couldn't have explained it better than this:

C# 3.0 Language Enhancements in action
C# 3.0 LINQ in action
C# 3.0 XLinq in action
C# 3.0 DLinq in action
Anders Hejlsberg on LINQat Channel 9 - Channel 9
Chatting about LINQ and ADO.NET Entities - Channel 9

Source: TheServerSide.NET

Have fun!

Something that makes me say Wow!

No it's not another Vista ad. It's about my home country. Check it out here. Click Watch Video to your right.

Vista done. What Next?

This is kind of a repost. If you read the Bill Gates Q and A article I posted yesterday, you must have read that Bill Gates mentioned what's next for Windows. For those who missed it here's the excerpt.

So can you give us an indication of what the next Windows will be like?
Well, it will be more user-centric.

What does that mean?
That means that right now when you move from one PC to another, you've got to install apps on each one, do upgrades on each one. Moving information between them is very painful. We can use Live Services [a way to connect to Microsoft via the Internet] to know what you're interested in. So even if you drop by a [public] kiosk or somebody else's PC, we can bring down your home page, your files, your fonts, your favorites and those things. So that's kind of the user-centric thing that Live Services can enable. [Also,] in Vista things got a lot better with [digital] ink and speech but by the next release there will be a much bigger bet. Students won't need textbooks, they can just use these tablet devices. Parallel computing is pretty important for the next release. We'll make it so that a lot of the high-level graphics will be just built into the operating system. So we've got a pretty good outline.

WOW! that would be awesome if I could go to a friends place and get my desktop on his / her machine. You would never miss your PC when you are away. Although, we don't know to what extent they will go. All of this sounds like Hardisk on the Internet, so all your information will stay on the Internet, but we don't know if that's going to be true for applications installed on my machine as well. All this would need very high bandwidth, but 2011 is still far away which could make some of this a reality.

Bill Gates fires back at Mac ads!

I am quoting MSNBC news article by Steven Levy:

Are you bugged by the Apple commercial where John Hodgman is the PC, and he has to undergo surgery to get Vista?
I've never seen it. I don't think the over 90 percent of the [population] who use Windows PCs think of themselves as dullards, or the kind of klutzes that somebody is trying to say they are.

How about the implication that you need surgery to upgrade?
Well, certainly we've done a better job letting you upgrade on the hardware than our competitors have done. You can choose to buy a new machine, or you can choose to do an upgrade. And I don't know why [Apple is] acting like it’s superior. I don't even get it. What are they trying to say? Does honesty matter in these things, or if you're really cool, that means you get to be a lying person whenever you feel like it? There's not even the slightest shred of truth to it.

In many of the Vista reviews, even the positive ones, people note that some Vista features are already in the Mac operating system.
You can go through and look at who showed any of these things first, if you care about the facts. If you just want to say, "Steve Jobs invented the world, and then the rest of us came along," that's fine. If you’re interested, [Vista development chief] Jim Allchin will be glad to educate you feature by feature what the truth is. I mean, it’s fascinating, maybe we shouldn't have showed so publicly the stuff we were doing, because we knew how long the new security base was going to take us to get done. Nowadays, security guys break the Mac every single day. Every single day, they come out with a total exploit, your machine can be taken over totally. I dare anybody to do that once a month on the Windows machine. So, yes, it took us longer, and they had what we were doing, user interface-wise. Let’s be realistic, who came up with [the] file, edit, view, help [menu bar]? Do you want to go back to the original Mac and think about where those interface concepts came from?

Read the complete Q and A with Bill Gates here.

Wow! I didn't know that the File Edit ... menu bar was first created by Windows. I do know that Microsoft first showed the search features back in 2002 - 2003 and it hurt them real bad. Everyone from Google to Apple copied the idea and came out with real products way before Microsoft could come out with it's own. They surely learnt a valuable lesson from the Vista debacle. I think moving forward for Windows releases we are not going to see any cool new features until the Beta release, which kinda sucks!.

Is LINQ a copy of Hibernate? Part 2

In response to my previous post, Lilly made some good comments. Here are a couple of them "Generilization is good in a way.  But it never optimizes for performance", "Declarative type of programming?  O, man.  Are they planning to turn the developers to robots?" Grin. Microsoft has a bigger goal than turning developers into Robots. Today when you write a program you instruct the compiler line by line the entire program. In short you tell the compiler how you want to accomplish rather than what. In SQL Server (true for all RDBMS) you never tell the SQL compiler how you want it to fetch data, you tell it what you want. That is exactly what Microsoft is trying to achieve with .NET 3.5.

By abstracting / generalizing the how from the programmer, the compiler will be able to make smart decisions on the most optimum way to get the desired results (just like SQL Server does). It is never fool proof and hence we will need some sort of a hinting mechanism (again just like SQL Server) for better performance.

In the end the biggest gain by abstraction is that when you run the same program on machines that have 2, 4 or 10 core processors (near future) the compiler can generate the how part of your code such that the CLR can divide the task and run the sub-tasks on different cores, merge the results from the sub-tasks into one result and return it to the program. This would lead to faster executions and hence better performance.

.NET 3.5 is the first step in this direction, Microsoft has a research project going on for almost a year now on PLINQ (Parallel Language INtegrated Query). I think we will see the fruits of this project in the next 2-5 years. Until then we can only feel dumb as more and more code gets auto-generated leaving less and less work for the developers. Look at the positive side, if we were still writing assembly code we wouldn't have been come so far in the computing world.

Original plan for Vista (then Longhorn)

Check out what Microsoft had originally planned for Vista (then code named Longhorn). I prefer the original plan to what it is now. A point to note is that Microsoft's Designers make Macromedia Director movies of what the OS needs to look and feel like. This does look like one of those movies.

Obviously there is a clear mis-match between what designers wanted and what developers ended up doing. Hmmm.... I have heard this somewhere. That's right! Microsoft has come out with .NET 3.0 which takes care of this problem. They have used the web-based (CSS + HTML) model to windows programming (actually it's much more than that) with XAML. I wonder if .NET 3.0 is a direct result of the internal frustrations between designers and developers within Microsoft. If that's true, what it tells us is that the next version of Windows (to be released in the next 2 to 4 years) will look and feel much more like the designers want it to, not like what the developers end up coding. Now that's awesome.