Friday, June 16, 2006

Bill Gates going to retire from Microsoft?

Today while I was reading Microsoft presspass, I ended up on this article from yesterday. According to it, BillG will step out the role of Chief Software Architect to Ray Ozzie, who is currently CTO. This not will be one-time shot, rather it will be gradual and it is expected that by July 2008, all of Bill's responsibilities will be taken over by his successor. How is this going to change Microsoft? Will Ray Ozzie be able to follow and drive Microsoft as successfully as Bill has? Time will say. For sure, Ray Ozzie is very talented - check out this article to get a close view of his background. I gotta say that it is admiring - just to start with, he created Lotus Notes and Groove!

Thursday, June 15, 2006

Microsoft .NET Framework 3.0 - the idea

Today, I ended up on this interesting article, not suprisingly on Somasegar's web log (just for the record, he is the corporate vice president of the Developer Division at Microsoft). It shows what Microsoft plans are for the next generation of .NET platform. Put shortly, it will combine all of the existing .NET 2.0 functionality, but this time developers will have at their fingertips technologies like WPF, WF and WCF. According to this article, .NET 3.0 will be incorporated into Windows Vista, but for Windows XP and 2003 family - like an extension. Among these technologies, I am now reading about WCF - Windows CardSpace, formerly known as InfoCard. Put shortly, it is all about providing applications with standardized infrastructure for identity management. There will be some lectures on it on the incoming Microsoft Days on 21st - I hope that the presenters will give us a better and thorough view of this exciting technology.

Monday, June 12, 2006

Microsoft Days 2006 - Sofia, Bulgaria

Finally it is here! Every year Microsoft is presenting its newest technologies and platforms in a live exhibition here in Sofia, Bulgaria. The time has come . The event will be held on 21st and 22nd this month and will be in the famous movie theatre center Arena - Mladost. There we will be lectures showing great detail on Windows Vista, Windows Communication Foundation, BizTalk 2006, Microsoft CRM 3.0, so basically there will be something for each one beginning from IT administrators and ending up in hard core software geeks. Personally, I highly recommend this event, because after all we live in a technology era, where we should strive to be on the technology wave no matter of the specific vendor. I am always open to learn the innovative and new.

For those of you who can attend it, check out this site to see the program and the speakers. Keep in mind that the seats could easily run out, so don't hesitate to register ASAP here! :-)

Tuesday, June 06, 2006

Free download of Microsoft Virtual Server 2005 RC2

I've been using Virtual PC for a long time. It is so useful when you want to test your app on different Windows-based plaforms and OS. Virtual Server is its successor, having far more sophisticated hardware support and capabilities. So far, only MSDN subscribers could have had access to it, but hey, here comes the good news - the latest release - namely Virtual Server 2005 RC2 is now for free. Download it from here.

Monday, May 15, 2006

Virtual Desktop Manager for Windows XP

I've recently blogged about Compriz - the new Linux window manager. What really caught me there, was the great possibility to have different desktops with different applications on them. Well, today I occasionally ended up on the PowerToys for Windows XP page, where I found a similar tool that I've fell in love from the very first minute :-). It's name is "Virtual Desktop Manager" and can be found here. I really welcome the idea to have different desktops for different things I do and this tool allows me to accomplish this. I am usually with so many items opened and it's so hard to navigate between them. Definitely having different desktops for the different things I do will help me better organize my computer and work. On this page you will find some other useful tools like "Command Prompt From Here" and the famous TweakUI.

Hey, I know that this post is not very techy, but this tool really got me. I hope that it will give you a little bit of satisfaction and joy (as it did with me) :-).

Friday, May 05, 2006

Debugging OneWay Web methods

Damn, today I lost like 3 hours debugging for this one - I was not able to debug a Web method declared as OneWay. For those of you who are not aware, OneWay method is like calling a regular Request/Response Web method asynchronously. However, with OneWay Web method the ASP.NET will not wait for any return value from the Web method.

Well the first lesson learnt is: while debugging from the client side code, you cannot step into the server side code! Indeed, if you have a nice-and-tidy Request/Response Web method, you can step into the server side implementation right from the client side proxy. But taking into the account that the OneWay methods are executed asynchronously, obviously you can't do it in this way. What is your solution then? Well, you have to attach the target Web server's ASP.NET worker process (aspnet_wp.exe), set the breakpoints into your OneWay Web method and finally run the client side code (usually it is a Web form which calls your Web method). Simple as that! End of lesson 1.

And this is the place, where I am approaching the second lesson (in debugging XML Web services :-) ): in order to be able to debug your OneWay Web methods, your Web service should be compiled with ".NET" platform setting (not mentionting at all that the configuration MUST be DEBUG!). The case that I had was that there were couple class libraries included in the solution, which contained the business logic. The same class libraries were called by the Web methods. So far so good. The problem is that the build platform for these libraries is "Any CPU", which somehow is not compatible with the .NET debug configuration of the WEb services. So if I do NOT set the ".NET" platform to be active for the whole solution, then I am not able to hit my breakpoints in the OneWay Web method, otherwise - it is working nicely!

Ah, I am using Visual Studio 2005 Team System and of course, Microsoft .NET framework 2.0 - to give you an idea what is the development environment.

Well that's all folks - I hope that if someone of you ends up in the same problem, this could give him/her a solution! :-)

Tuesday, April 18, 2006

Distributed Atomic Transactions and Heuristic Outcomes

I've started working on my master thesis. To those of you who don't know, it is going to be about "Distributed Transactions in SOA". Pretty challenging and very interesting! There is still not much information about this, but in general the topic for distributed transactions has been around for like 20 years now. That said, there is a substantial research behind, but what is missing right now is the "glue", which will bring that knowledge to the SOA world.

I am planning to implement two different concurrency protocols - WS-AtomicTransation and WS-BusinessActivity. Nonetheless, WS-Coordination is the coordination protocol used in both of these concurrent protocols, so I have implement it as a pre-requisite. Well these protocols are still a work in progress by OASIS Web Services Transactions group (link).

Starting with WS-AtomicTransactions, I ended up on a problem, which occurred to be well-known in the distributed transactions and concurrency control namespace. It is called "heuristic outcomes" and it about the two-phase commit (2PC) protocol. Let's consider that after the first phase (the preparation phase), all participants reply with PREPARE/COMMIT message. Accordingly, the coordinator decides to commit the whole transaction and thus starts sending COMMIT message to all of the participants. But .. suddenly after he has sent the COMMIT message to 3 of the participants, an unexpected network outage occurs. So the remaining let's say 2 participants are waiting for their COMMIT message, but it doesn't arrive. To summarize - we have 3 participants which have already committed the transaction and another 2 which are wondering what to do (from here comes the term "heuristic outcomes", because the final decision of these 2 will make is somehow heuristic). Well, so far I haven't seen a resolution for this issue - it is rather relied upon that the logging system will be pretty sophisticated so that the administrator of your system will see this non-conformity and will manually "compensate" the COMMIT changes of the 3 participants and thus bring the whole system back in a consistent state.

Sunday, April 16, 2006

Query Notifications in ADO.NET 2.0

Query Notifications are a new feature part of ADO.NET 2.0. I gotta admit that the rationale behind it is really valuable - getting notifications back from the database server, when a given dataset of interest is changed. I've implemented the same functionality with MSSQL 2000 requiring periodical server polls, but this is really not very performant solution. With ADO.NET 2.0 and its Service Broker, you can have quick and elegant solution.

While the idea behind QN is really easy to understand, the documentation and examples are still kinda scarce. Not only this, but there turned out to be very small details, which may give you couple of hours in debugging in order to detect them.

To start with, here is a list of articles about Query Notifications in ADO.NET 2.0:

1. Query Notifications in ADO.NET 2.0 [link]
2. Using Query Notifications [link]
3. Enabling Query Notifications [link]
4. Using a Dependency to Detect Changes in the Server [link]

All of these will give you some very good understanding of what QN is all about. However, I found some problems with the examples in them, so don't be confused if you try them and they are not working - it is not you :)

Speaking of problems, one of the subtle things you should have in mind is that the query assigned to the SqlCommand object must be fully qualified (that is the table name should include the table owner, you should enumerate all interested columns in the SELECT clause rather than putting a simple * for ALL columns). Actually if you take a look at the following article:

5. Using SqlDependency for data change events [link]

you will see a bunch of things which the author has experienced (the same as me) while dealing with QN.

Another problem that I got was with my OnChangeEventHandler event handler. I initially received OnChange notifications although there were no DML operations on the monitored dataset. The info that I got from the SqlNotificationEventArgs parameter for this event was the following:

e.Source = Statement
e. Type = Subscribe
e.Info = Invalid

The reason for this was that my SELECT statement was using * for all the column names instead of fully qualifying the columns put in interest. I bet that if this is a problem, then the description of it should be somehow more descriptive and showing more symptoms of what actually caused the specific problem.

Another problem that I got was with the QN registration for the specific database you want to enable it. For this, you should check out the following article:

6. Using Query Notifications in .NET 2.0 to handle ad-hoc data refreshes [link]

SqlDependency is one way to use Query notifications in your application. What is worth noting about it, is that one SqlDependency is good only for a single notification. That said, after one notification has been generated through your SqlDepedency, you should re-create it if you want further changes to be captured. Another cool thing with SqlDependency, is that it can easily applied to ASP.NET cache object (check out article 1 for more information).

Thursday, April 06, 2006

SqlDateTime overflow problem and DATETIME columns allowing NULLs

Couple of hours spent in debugging and finally you see the problem is cased by a completely different reason. This was my today's experience.

So you have T-SQL insert statement for a table which has one of its columns defined as DATETIME which allows NULLs. You are passing an uninitialized variable for exactly this column in your INSERT (not purposely of course :) ), and the error you get is:

System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between
1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.


What do you do? Well, I was very confused seeing this message. I hit the Internet for a similar problem but I was totally deluded in stories that SqlDataType is not compatible with .NET DataTime type. Obviously I was on a wrong direction. Thus, after I reviewed my code, I saw that the value of the DateTime column, which allows NULLs is not actually NULL but rather DateTime.MinValue - indeed, and this is normal because each .NET variable once defined it is initialized with some default value (which in the DateTime case is DateTime.MinValue). Unfortunately, DateTime.MinValue doesn't really fit into the range of possible values for SqlDataTime.

What is the resolution? Well, I am using .NET 2.0, where there is a very neat generic type named Nullable. Check out this article for more info about it. Put shortly, using this type I am able to pass NULL values for the DATETIME column allowing nulls without getting the extremely confusing exception shown above.

Wednesday, April 05, 2006

LoginStatus control does the work

Today I was fighting with the well-known problem with Back button in Internet browsers for a session agnostic Web applications. Simply put, you have a Web app and at some point of time you want to sign out. Then you normally destroy the user's server side session, but the problem is that the user still can hit his Back button on the Internet browser and see a the cached content from the pages he/she has visited.

Well, this problem has been resolved long time ago - I remember it since the early ASP days. So normally what is done is to set the content expiration to immediate to *all* pages within your Web application. Of course, sometimes, this may be not desirable, but still in my cases it was essential not to give the user the possibility to go back. So the solution is to set 3 HTTP headers to all HTTP responses - Pragma, CacheControl and Expires.

Today, I had the same problem while implementing the logout functionality of our ASP.NET 2.0 based Web application (just to mention we are using very cool stuff like Microsoft Atlas, SQL 2005, Virtual Earth API - fascinating, isn't it?). Again, the old solution seems to be working (setting the aforementioned HTTP headers), but I somehow decided to try out the LogingStatus control. This control changes its state based on the current user status - if he is logged in it is a link which will allow him to Logout and if he is not authenticated - it will be "Login" link. And here are the good news - if you use this control, there is no need to set these headers to your whole application - it is done automatically to you when you use this control. Pretty sweet! :)

Monday, April 03, 2006

Cycle Clipboard Ring command

Visual Studio 2005 rules! Today I found the command named "Cycle Clipboard Ring" (on the Edit menu in VS2005 or using the default keyboard shortcut CTRL + SHIFT + V). While ago while I was so deep into the Visual Studio 6 development, I used a very popular tool named Visual Assist which was really like the paradise for all Visual C++ developers using VS6. So this tool had the same feature like "Cycle Clipboard Ring" I am referring now. I personally find it very useful to see a quick menu of all of your previously copied code blocks so that you can easily paste them. Love it!

Talking about "hidden" commands, there is one more I discovered today being very popular in Java IDEs in particular. This time this feature is part of ReSharper for Visual Studio 2005 (still a beta and not very stable thus, but still has very useful features without which I feel like I will get back in 1st grade :) ). Well this feature is named "GotoRecentFiles" and on the default keyboard scheme is accessed thru CTRL + E. This gives you a popup window with all of your recently accessed files. Sweet!

To some of you these features may not be very significant, but still when you deal with huge code bases, you want to minimize your time to switch between files and to somehow boost your productivity without dealing with routine things. I hope that this post will give some delight to those of you who are used to such kind of "widgets".

Friday, March 17, 2006

Team Foundation Server Released

Microsoft decided to split the VSTS product and to ship Team Foundation Server alone. The official release should be available within 3-5 days, as can be seen from this article. I am currently working on a project which uses VSTS for team collaboration and development, but still this platform seems to have some issues. I hope that this new release will be better one.

ASP.NET 2.0 quickstart videos

Today I found this very very valuable resource, where you can find useful videos covering HOWTOs for different features from ASP.NET 2.0 and the new Microsoft .NET 2.0 framework. I am sure that you will like this site - just don't miss it! :)

Enjoy!

Monday, March 13, 2006

Origami project

I don't know have you heard of it, but this is the latest craze in gadget world - Microsoft's Origami project. This device (said Microsoft) will be the next generation gadget, which will combine all the strengths of Tablet PC and Pocket PC. The official date when Microsoft announced this project was on 3rd March and I can tell you that this date had been the "most awaited day" for many people. However, it is too early to say when it will be made to the public (at least I haven't found such information yet), but still knowing what's coming up is valuable.

The official site of the project is this - check it out. I was personally amazed by the way the whole page is designed and the overall presentation to the viewer - it makes you somehow believe that this product will really change you life :-) .

Origami project will actually develop a ultra-mobile PC, which will be far away more than any personal assistant you have ever had, giving you versatile online connectivity thru Bluetooth, full fledged Microsoft office installed, exciting features like mapping, geocoding and GPS location tracking. The official OS which run on this device will be genuine Windows XP. The premium touch screen (which is really very very fancy, especially the keyboard!) and the whole user interface somehow resembles Tablet PC, but still if you compare the sizes the Origami device is far away smaller. If you want to know more technical details about this device, please go to the official Microsoft site, where you will find bunch of information about this topic - here.

Actually, there is a post on Channel9 about it, which I really recommend if you want to get some "hands-on" experience about what is it all about (see it here).

Free Microsoft beta exams

Folks,

There are 3 beta exams currently being free for a limited time:

71-547 PRO: Designing and Developing Web-based Applications by Using the Microsoft .NET Framework. Promo Code: PRO547
71-548 PRO: Designing and Developing Windows-based Applications by Using the Microsoft .NET Framework. Promo Code: BTA548
71-549 PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework. Promo Code: 549BTA
(more information find here: http://www.microsoft.com/learning/offers/beta/)

Pay attention to the fact that if you take one of these, you will enter the lottary to win a smartphone! :-)

Monday, February 27, 2006

Code Analysis for Managed Code feature in Visual Studio Team System

As I already mentioned in one of my previous posts, I am starting a new project based on ASP.NET 2.0 and Microsoft SQL Server 2005. I had the chance to acquaint with these two and I can't hinder my astonishment and gratitude - really Microsoft has done great job with these. And to continue the conversion in the same direction, we are going to use Visual Studio Team System (VSTS) as our primary IDE along with its abundant features for project collaboration and control. Now I am going to give you a short overview of one the greatest features that VSTS has, and in my future posts I hope that I will give you more food for you soul :-)

Well, the feature I want to discuss now, is Code Analysis. Here is a short overview of what it actually is all about:

"Code analysis for managed code tool analyzes managed assemblies and reports information about the assemblies, such as violations of the programming and design rules set forth in the Microsoft .NET Framework Design Guidelines. "

Simple as that! Now, what it has to do with VSTS is that it is fully integrated into it and can be part of the build process, code check-in process and/or Team System build process.

The best way to understand this feature and see how powerful it is, I suggest playing with it. In order to enable Compile time Code analysis feature, just go your solution properties in VSTS, choose "Build" section and there select "Enable Code Analysis" checkbox. Then rebuild it and in the Output window you will see the results from the additional build step performed regarding code analysis.

What I personally found as very neat feature is the code analysis check-in feature - that is whenever you try to checkin source code in the team repository, your code will be verified whether it conforms to Microsoft guidelines for quality code. Here is a link, where you can find additional information about this feature (link).

I still don't know whether the set of rules for code analysis is extensible - if it is using FxCop underneath, I guess that will be as easy as a breeze.

Friday, February 10, 2006

Compiz Window Manager

Now I am really amazed! Just see the preview of Compiz Window Manager from here! Besides the screenshots, I highly recommend watching the movie (~50 MBs).

Thursday, February 09, 2006

Microsoft E-Learning courses for ASP.NET 2.0 and SQL Server 2005

We are about to start a new project which will levarage ASP.NET 2.0 with Microsoft SQL Server 2005 - ahhh, I am so thrilled! We all know that in terms of technologies, the aforementioned two can be classified as babies - hey the official release of Visual Studio 2005 was like 3 months ago.

My role within this team will be project manager - quite challenging becuase I have to find the optimum between the skills of the team members and the project specific goals and domain. In regards with technology, I am now at the phase where I am gathering different sources for education about ASP.NET 2.0 and Microsoft SQL Server 2005.

One very valuable resource, especially for those who have solid background with Microsoft .NET framework 1.0/1.1, is the online courses at Microsfot E-Learning (link). The courses there are separated into different sections, based on the different Microsoft products and the targeted audience (IT administrators, Software Developres, Advanced Developers, etc.). Here are the two sections that we will need:

  • Visual Studio 2005 courses (link) - includes coures for Microsoft .NET 2.0, ASP.NET 2.0, Windows Forms
  • Microsoft SQL Server 2005 courses (link) - these courses are free until November 2006!!!!
I personally like the format that these courses are presented. There is an offline browser, where you can download a specific course and go throught it whenever you want - just awesome!

What I don't like with this really very helpful service is that the courses which are not free, are available only for North America. See the excerpt below from here:

"Microsoft E-Learning products are currently available for purchase only within North America at this time. However, any content that is offered for free, or users who are redeeming a voucher or activation code, can access e-learning courses worldwide."

I am wondering - is it only a matter of billing control? If I am able to view the free content, then obviously there will be no problem to see the paid one. However, I guess that the billing system is not integrated with European's one, which may be the bottleneck with this. Or I could be wrong ...

Friday, February 03, 2006

Internet Explorer 7 Beta 2 Preview

The new and glamorous IE7 (beta 2) has been installed on my laptop successfully! I've heard a lot about it, but because it is a beta I thought that I didn't want to run into trouble. But, today I found lots of reviews of other peers who have already installed it and used for more than 30 days, and no one seems to have any major complains. Well, I said, why shouldn't I try it out?

To begin, you can download it from here. From there, you will prompted to download an installation, which is not that big - approx 11 MBs.

OK, and here are my first impressions. It is obvious that Microsoft is trying to get back into the Internet browsers space. Personally, I am using, IE6 but I am really not very delighted with it. I am "obliged" to use it, because I am used to store links from my local MSDN library, and in order to open them, I actually need IE. And honestly, this is the only reason not to forget about it. During my "free" surfing time (when I am not using MSDN library), I prefer Opera because of so many reasons like:
1. Has tab display
2. Has awesome bookmark features in terms of searching and maintenance.
3. Has the concept of sessions - thus you are able to store a given set of links under a given label, so that you can get back to this "topic" whenever you want.
4. Has integrated support for RSS
5. Has integrated support for NNTP
6. Has integrated mail access

Well, this list seems to be a long one for sure. With IE7, some of these wish-items have been fulfilled. For example, IE7 has tab display and supports RSS natively. It also has integrated search capability, which according to me is very useful. However, I respect the fact that on default they are using Google Search (not MSN Search), which shows that they are trying to follow customers preference (hey, we all know that Google Search is the most used search engine, respect!). Among these, I will say that the new design and outlook of IE is very very sexy, which for me as a user is also important.

However, I would have been far away more satisfied, if IE had had improved its bookmark capabilities. I personally have more than 5000 favorites, and believe me, it is really hard to search and navigate in IE. On the contrary, in Opera they have this very useful search, which digs into all directories of your favorites (not just in the root as it is in IE). But, hopefully, Microsoft will add it in the future - fingers crossed! :)

Thursday, February 02, 2006

Web 2.0 and the future of Internet

It's been a while since the term "Web 2.0" began to emerge in technology articles and information sources. I am sure that you will meet it more and more in the future. In general, Web 2.0 referes to the "evolution of World Wide Web". There, the applicatoins will become more interactive and rich in functionality and thus get over the old perception that Web is more about static content. A good article about Web 2.0 was written by Tim O'Reilly and can be found here - take a look at it, it is really great.

Back to Web 2.0, the main focus is to design a new generation of services such as Microsoft Virtual Earth, Flickr, Orb and Digg ( and there are many many more). These are very, very strong examples, showing that the era of static Web documents is far far away. Actually, if you haven't already, I strongly recomment trying these out. With Virtual Earth you have a great map service at your finger tips and an amazing "Eagle Eye" view, which shows you a close view of a given terrain. You want to find a cafe in the local area - no probs, just search it there. Orb gives you the ability to stream TV and any kind of media from diverse locations. The last one, Digg, I find really amazing. People need information for in all kinds of topics, but sources are most important. Some of them are very biased, others - not reliable. Digg is trying to solve exactly this - each article has a "digg" index, which shows how many digg-ers liked and found it useful.