Wednesday, July 12, 2006

SQL Server 2005 and Visual Studio 2005 integration - good demos

Today I ended up on these very cool demos. I usually like a lot that kind of quick HOWTOs, which are straight to the point and give you a good overview of the possibilities that bring you a given technology piece. Well, the demos I found today are really like that - most of them are like 5 to 7 minutes long, but give you a clear view of how to do the things. Nevertheless, I bet that you won't become a MSSQL 2005 guru after going thru all of them, but they will give you a good foundation what to expect from the collaboration between Microsoft SQL Server 2005 and Microsoft Visual Studio 2005 (from developer's perspective).

Anyhow, here is a link where you can view or download the content for offline browsing - SQL Server 2005 Developer Productivity Guided Tour [link].

Here is a quick overview of what this tour includes:

1. Web Application and SQL Server Database Creation (4 min. 34 sec.)
- Creating a New Web Application
- Adding a SQL Server Database
- Inspecting the SQL Server Database
2. Database Schema Creation and Data Input (6 min. 52 sec.)
- Creating Tables With the Database Diagram Designer
- Modifying Tables with the Table Explorer
- Populating the Tables with Test Data
3. Data Access via Stored Procedures and User-Defined Functions (7 min. 49 sec.)
- Creating a Stored Procedure
- Creating a User-Defined Function
4. Data Access and Data Binding in Web Applications (5 min. 41 sec.)
- Adding a New Form to a Web Application
5. Web Application Debugging (6 min. 23 sec.)

Wednesday, July 05, 2006

Mr. Eric Rudder live!

Eric Rudder - the VP of Development & Platform group from Microsoft is here in Sofia right now. I was lucky one to be able to participate in a live meeting with him in the office of Microsoft Bulgaria. We had a very open conversation and discussion over what's been around and what's hot in Microsoft world. We touched base on WCF, because one of its PM leads were there two - I was very nicely surprised to know that he is Bulgarian - I am so proud, because the guy really looked very knowledge :-). To me this was very interesting conversation, because as I already told you my master thesis was about distributed transactions and more specifically WS-AtomicTransaction and WS-Coordination, which are supported by WCF. I shoot couple of questions at the PM live and we decided to continue our conversation off-topic with the details I was particularly interested. I wanted to know more about the types of distributed transactions WCF supports. The theory defined many different types, but among them the most important ones are the flat and nested/hierachical transactions. Another one was about WS-BusinessActivity. It is interesting to know whether this specification will be implemented as part of WCF or will be in WF. I was told that WS-BA is not of topmost priority right now, because they are putting more effort into making WCF and WF collaborate together. Will see!
Eric Rudder is for sure a very versatile person. I personally like the fact that he has developer background but he also has very strong business feeling for sure. It was really great to see how passionate he is about software and technology! Obviously he has a very versatile knowledge and look in software industry. For example, we talked about SAP technology and how it compares to Microsoft technology stack. I actually pose him the question - "How would you convince me to use Microsoft technologies instead of SAP?". This was a tricky one :) . But he managed to explain us the pros and cons of both solutions and how Microsoft think can position itself thru the verticals as opposed to SAP. It is well-known that SAP has relatively high pricing especially for SMBs, where Microsoft is mainly targeted. However, I believe that with WF, WCF and the whole SOA paradigm in hands, Microsoft may provide to its clients very customizable and highly scalable business solutions based on Microsoft servers like BizTalk, SharePoint, SQL Server, etc. I believe that Microsoft .NET 3.0 could bring all that and thus be a potential rival to SAP.

Saturday, July 01, 2006

Atlas June CTP released

Today I saw that there is a new release of the famous AJAX library for ASP.NET 2.0 - namely Microsoft Atlas. I've used it in 3 projects so far and I haven't been disappointed. Now, as I can see from the release notes (here) the UpdatePanels are now truly *dynamic* - that is they can be added dynamically to page at runtime. Another change is in the Drag & drop functionality. I will give it a try these days. You can download this release from the Atlas web site (link).

Another thing worth mentioning related to Microsoft Atlas is the Microsoft Atlas Control Toolkit (check it out here). It gives you a bunch of free Web controls and components, which seamlessly integrate with ASP.NET 2.0 page model and brings valuable add-ons to your web applications. There is a very good article about this toolkit at ScottGu's blog(link).

Friday, June 30, 2006

Tech-Ed 2006 is online

If you missed Tech-Ed 2006, or want to catch up on some of the concepts you learned in Boston, check out these webcasts covering Windows Vista, the 2007 Microsoft Office system, management and operations, security, server infrastructure, and more. Check it out here.

Wednesday, June 28, 2006

Master of Science - completed

Yeah, last week I defended my master thesis and hence I hold now a Master of Science degree in Computer Sciences from University Of Sofia "St. Kliment Ohridski". I specialized in Distributed Systems, although the official programme is announced as "Distributed Systems and Mobile Technologies". I want to thank my girlfriend Mira for all the careful reviews she has done during the course of the writing, and for supporting me by that time!

My master thesis was about "Distributed transactions in Service-Oriented Architecture". I personally adore the concepts that SOA proclaims. From scientific point of view, most business systems pose the requirement to guarantee to its clients atomicity and consistency of the operations carried out thru them. And here comes the need for transaction control. Fortunately, the guys from WS-TX group from OASIS (link) have done a great job so now we have a bunch of specifications aimed to provide a unified coordination framework for a set of Web services. Web services are actually one concrete programming interface that complies with the SOA concepts. They are very compelling with the fact that they rely on widely spread open standards like WSDL, SOAP and UDDI. I won't go into to many details here, but having all these things in mind I decided some time ago to implement the specifications, defined by WS-TX. Namely, I was interested at WS-Coordination and WS-AtomicTransaction.

The introduction of my master thesis reviews some of the most popular transaction processing systems realizing distributed transactions. We identify the common problems that they all have in regards to interoperability and platform independence. Nonetheless, one of the primary goals of SOA is to boost code reuse thru loosely coupled interfaces. And this may serve as a elegant solution in which we will be able to combine the existing business systems in a loosely-coupled manner and having transaction control over autonomous services. This was basically the goal of the practical part of my master thesis - to show a sample solution which will be based on the SOA principles, providing distributed transactions to its clients. As a result, I implemented WS-Coordination protocol so that the concrete transaction models have a unified framework for coordination. The concrete transaction model I used followed the principles of two-phase commit protocol (2PC), provided by WS-AtomicTransaction specification. However, I'd like to say that the other transaction protocol WS-BusinessActivity, defined by WS-TX, is really very interesting one. It is best suited for long-time business transactions, which consume lots of resources for a long period of time. It tries to "relax" some of the well-known transaction properties ACID such as atomicity and isolation. I highly recommend reading this standard as well as the following article (link), which will give you a very good perspective what all these standards are all about. Here is a good place to express my gratitude to Mr. Dan House from IBM, involved with WS-TX group, who has been very responsive to all the questions I got about these specifications!

My master thesis is in Bulgarian so far, but I am planning to translate it in English (if I have some spare time). However, if someone of you is interested, you can always drop me a line and I will do the best of me to reply you. Following up this link, you can see just a short annotation of my thesis, which I believe will throw you some hints what it is all about.

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! :-)