<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.imason.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Scott's musings</title><link>http://www.imason.com/imason_Blogs/b/scott_howlett/default.aspx</link><description /><dc:language>en</dc:language><generator>Telligent Evolution 5.0 (Build: 40623.6204)</generator><item><title>Steve Ballmer on assessing job candidates</title><link>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/05/19/steve-ballmer-on-assessing-job-candidates.aspx</link><pubDate>Tue, 19 May 2009 16:14:07 GMT</pubDate><guid isPermaLink="false">ba1d72eb-a51c-4157-8cec-718d26de3334:1356</guid><dc:creator>Scott Howlett</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.imason.com/imason_Blogs/b/scott_howlett/rsscomments.aspx?WeblogPostID=1356</wfw:commentRss><comments>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/05/19/steve-ballmer-on-assessing-job-candidates.aspx#comments</comments><description>&lt;p&gt;This is from a &lt;a href="http://www.nytimes.com/2009/05/17/business/17corner.html?pagewanted=1&amp;amp;_r=1&amp;amp;th&amp;amp;emc=th"&gt;great interview of Steve Ballmer done by the NY Times&lt;/a&gt; (bolding is done by me):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Q. How do you assess job candidates? &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;A. If they come from inside the business, the best predictor of future success is past success. It’s not 100 percent, but it’s a reasonable predictor. For an external candidate, what I’ve found is that reference checks are super-important. I didn’t used to believe so much in reference checks. You can always get somebody to say something nice about you. But the truth is, if you ask enough questions and you ask around, you can really get a profile of who’s accomplished various things and who hasn’t. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;strong&gt;And I try to figure out sort of a combination of I.Q. and passion. I just ask somebody to tell me what they’ve done that they are really proud of and tell me about it. And if it’s something you are proud of, you should be able to answer any question I can come up with, at least at a level that would satisfy my interest. I ought to be able to see your passion. It might be quiet passion; it might be bubbly passion. But I should be able to sense that you are one of those people who just sort of throws themselves into things.&lt;/strong&gt; &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I get asked this question all the time, particularly in forums like in Microsoft’s &lt;a href="http://www.microsoft.com/canada/technet/iyc2009/"&gt;Ignite Your Career&lt;/a&gt; webcast series and I love Ballmer’s response.&amp;#160; My answer is very similar to Ballmer’s, except I usually combine “Specialism” with “Passion”.&amp;#160; That is, talk to me about where you’ve specialized and why.&amp;#160; And in doing so, I should be able to get a good sense of your passion for your specialty.&amp;#160; We’ve long recruited for passion at imason, and indeed one of our Core Values is “Be Passionate”.&amp;#160; At imason, we’ve had interviews where we spoke at length about such things as the &lt;a href="http://en.wikipedia.org/wiki/Sitar"&gt;Sitar&lt;/a&gt; (we hired this person) or even medieval German Literature (the interviewee had a Masters in the field, but we didn’t hire this person).&amp;#160; We always try to get people to talk about something they’re truly passionate about, and it doesn’t need to be work-related and in fact, it usually isn’t.&lt;/p&gt;  &lt;p&gt;You see, the thing is that if you’re a passionate person you’re highly likely to be passionate about &lt;em&gt;everything you do&lt;/em&gt; including your work.&lt;/p&gt;  &lt;p&gt;It’s a great interview with Ballmer – definitely check it out!&amp;#160; And Be Passionate!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.imason.com/aggbug.aspx?PostID=1356" width="1" height="1"&gt;</description><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/interview/default.aspx">interview</category></item><item><title>Make Your Legacy Apps Work on the Internet</title><link>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/04/27/make-your-legacy-apps-work-on-the-internet.aspx</link><pubDate>Mon, 27 Apr 2009 21:30:23 GMT</pubDate><guid isPermaLink="false">ba1d72eb-a51c-4157-8cec-718d26de3334:1282</guid><dc:creator>Scott Howlett</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.imason.com/imason_Blogs/b/scott_howlett/rsscomments.aspx?WeblogPostID=1282</wfw:commentRss><comments>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/04/27/make-your-legacy-apps-work-on-the-internet.aspx#comments</comments><description>&lt;p&gt;So, we’re just retiring our first server.&amp;#160; We used to name our servers after our clients, and our first client was MIND – Microsoft Internet Developer magazine, a pre-cursor to MSDN magazine.&amp;#160; It was with nostalgia, that I went looking for that first bit of technical prose… But alas, the Microsoft archives only go back to 2000…&amp;#160; Duh??!!&lt;/p&gt;  &lt;p&gt;Not to be discouraged, I turned to the amazing &lt;a href="http://web.archive.org"&gt;web archive&lt;/a&gt; and they had the copy.&amp;#160; Amazing!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://web.archive.org/web/20000819063214/http://www.microsoft.com/mind/defaultframe.asp?page=/mind/0999/inthisissuefeatureslist0999.htm"&gt;&lt;img border="0" alt="September 1999" src="http://web.archive.org/web/20000819063214/http://www.microsoft.com/mind/images/smallCovers/sept99Back.gif" width="72" height="97" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So, in honour of the now defunct MIND server, I reprint the original “Make Your Legacy Apps Work on the Internet” authored more-or-less 10 years ago, and still right on message.&amp;#160; You have to love the old days when “VB6 COM Objects” were cutting edge, and XML was the be-all-and-end-all-that-it-should-be-the-whole-cover.&amp;#160; Beautiful.&amp;#160; &lt;/p&gt;  &lt;p&gt;Check it on the &lt;a href="http://web.archive.org/web/20001012112710/www.microsoft.com/mind/defaultframe.asp?page=/mind/0999/inthisissuefeatureslist0999.htm"&gt;web archive&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;----&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/mind.htm"&gt;&lt;img border="0" alt="MIND" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/newlogos/smallnewlogo.gif" width="116" height="26" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This article assumes you&amp;#39;re familiar with XML, Microsoft Message Queue, and Visual Basic   &lt;br /&gt;&lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/code/howlett0999.zip"&gt;Download the code&lt;/a&gt; (22KB)&lt;/p&gt;  &lt;p&gt;&lt;img align="top" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/topbar.gif" width="380" height="2" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Make Your Legacy Apps Work on the Internet&lt;/b&gt;    &lt;br /&gt;&lt;i&gt;&lt;b&gt;Scott Howlett and Jeff Dunmall&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;The Internet is increasingly becoming an important path for business-to-business data services. You can use BizTalk and COM to keep your existing systems useful for longer.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;I&lt;/b&gt;n the coming years, most companies will integrate their Internet presence with their mission-critical line-of-business systems. Creating these applications will be the most difficult challenge Internet developers have yet to face. It means enabling interoperability between legacy systems, possibly from different companies, and doing it with the availability and scalability that Internet applications demand. By getting into the right design mindset and making the right technology choices, notably Extensible Markup Language (XML) and Microsoft® Message Queue Services (MSMQ), Internet applications can provide the return-on-investment that has been promised in the past, but rarely delivered.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;First, let’s explore what legacy systems are and why they’re important. We’ll walk you through interoperable Internet application development and the issues involved in building them. Then we’ll build an Internet-based Address Change facility as a traditional Internet application that integrates with existing systems. We’ll also show you how the design is extensible, enabling business-to-business communication using the BizTalk framework. Surprisingly, the framework can be written with only about 100 lines of ASP and Visual Basic® code.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Microsoft will expand the technology available for integration with legacy systems when it releases the Microsoft Enterprise Interop Server, codenamed &amp;quot;Babylon&amp;quot; (see &lt;b&gt;Figure 1&lt;/b&gt;). Babylon delivers application integration with COM Transaction Integrator (COMTI) and an MSMQ-to-MQ &lt;/p&gt;  &lt;p&gt;&lt;img alt="Figure 1: Microsoft Enterprise Interop Server Architecture" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacyfig01.gif" width="407" height="68" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;&lt;b&gt;Figure 1: Microsoft Enterprise Interop Server Architecture&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Series bridge, data integration with OLE DB providers and ODBC drivers, and network/platform integration via an SNA gateway or direct TCP/IP access. We’ll only address the challenges of getting data to the Interop server. To find out more about Microsoft’s interoperability strategy, go to &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomscom.asp?target=/interoperability/"&gt;http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomscom.asp?target=/interoperability/&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Background&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;If you were at Microsoft TechEd this past May, you probably heard Paul Maritz’s discussion about the upcoming third generation of Internet applications. In his analysis, the first generation involved content publishing based on the HTML standard. The second generation was based on dynamic content using Windows® DNA technology, and the third generation will feature integrated Internet systems that enable more effective line-of-business applications.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Building third-generation Internet systems will demand integration with legacy systems from one or more companies. Companies will be aggressively developing these applications because they know that customers and suppliers will demand integrated systems based on open Internet standards. Increased efficiency and streamlined business processes should have pleasant effects on the bottom line, in part through the competitive advantage gained by providing better and faster service. If a company doesn’t or can’t provide integrated services, business opportunities will likely be lost.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;If you read Don Box’s article, &amp;quot;&lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomscom.asp?target=/msj/0599/complusprog/complusprog.htm"&gt;Windows 2000 Brings Significant Refinements to the COM(+) Programming Model&lt;/a&gt;&amp;quot; (&lt;i&gt;Microsoft Systems Journal&lt;/i&gt;, May 1999), you were probably surprised at the notion that COM components developed before Windows 2000 are often referred to as &amp;quot;legacy&amp;quot; components. You’ve never written any COBOL, so how could you have any legacy code?     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The terminology shouldn’t surprise anyone. It simply means that you have written software that is part of a production system. Having legacy code is a good thing because the alternative is that none of your code is working in production! So, simply put, a legacy system is any system that exists in production. It’s made of legacy code and the manual processes, such as call centers, that support the system.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Legacy systems often have hundreds of development-years invested in them. This is why it’s so important to evaluate legacy systems and build Internet systems on top of their foundations. With the right design, you will be able to overcome the pitfalls associated with integration and interoperability.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Building line-of-business systems in Internet time (less than six months) demands that existing systems be exploited. Usually, legacy systems have some manual processing where the combined expertise and experience of people is critical. You simply can’t reproduce that effort in your timeframe, and you probably don’t want to anyway—unless you have a penchant for pain or like to rewrite COBOL source code.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Of course, legacy systems aren’t all good news for Internet applications. When you bring them into the fold, you’re adding the most dangerous software villain: the unknown quantity of legacy systems. But on the bright side, you’ve got an excellent starting point because you already have a working system.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Legacy systems are frequently not documented, leaving everyone afraid that doing anything to them might break them. You can’t change any of their code and no one can or will tell you how they work. So there have to be legacy experts on the team, at least for the design period. They’ll be responsible for investigating, researching, and documenting the interfaces, business rules, and other facets of the legacy systems. Finding legacy experts is usually the first problem in building these systems.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;On the technology side—where we’ll focus the rest of this article—there are a number of hurdles to overcome. Integration isn’t always easy. In fact, it almost always involves some pain. But with the introduction of technologies such as XML and application services such as MSMQ, building interoperable systems has never been easier. Microsoft Windows 2000 offers more technology advancements that will make interoperability even easier, notably native support for queued components. Babylon, due in beta in the last quarter of 1999, will provide even more opportunity for legacy integration. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Availability, Performance, and Scalability&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Generally, integration problems fall into three familiar categories: availability, performance/scalability, and exception handling.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The availability of your application is related directly to the availability of the legacy systems you connect with. Your Internet application likely needs to run 24/7, while your legacy systems may not have the same constraints. They may be scheduled for nightly maintenance or weekend shutdowns. What will your Internet application do when legacy systems are unavailable?     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;From a performance and scalability perspective, the legacy system probably can’t handle the volume of traffic that the Internet site can, at least not in the same form. Including legacy resources in your application increases transaction time, thereby decreasing scalability. Sometimes even connecting to the legacy systems can be a costly operation. If the only interface to the legacy system is through screen scraping (don’t laugh, it happens all the time), then you definitely have a back-end resource bottleneck to overcome in your design.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;If you have any combination of these issues, you must find a way to decouple your legacy systems from your Internet application, making it transparent to your customers. The most effective way to accomplish this is with MSMQ. On the Internet side, you can concurrently send thousands of requests and get excellent performance from MSMQ. On the legacy side, you can process those messages at a pace that the legacy system can handle. If there are only five database connections available through SNA, for example, you can process five messages at a time. This effectively allows you to throttle the load on the legacy system, while at the same time addressing your availability concerns and allowing your Internet application to scale appropriately.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;A third grade French teacher once said, &amp;quot;Pour toutes les règles, il y a des exceptions.&amp;quot; (Every rule has an exception.) We don’t remember much French, but after years in the software business, we’ve refined these words of wisdom: &amp;quot;Every business rule that has existed for more than five years has at least one exception.&amp;quot; And herein lies the third category of integration problem: if every rule can be broken, how do you write a middle tier that enforces the business rules? As a further complicating factor, many of these rules are entrenched in the legacy systems and manual processes (and people) that surround them. So to build a completely automated system, it’s necessary to discover every business rule that’s grown up around the process, and to uncover all the exceptions to the rules.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Realistically, it takes time to flush all of these rules out and code them into your application, and they typically aren’t documented very well. In many cases, this is not possible in a six-month timeframe, so you’ll need to incorporate the manual processes to handle the remaining exceptions, at least in the first version. The golden rule is to make most things automatic and everything else possible, even if it means invoking a manual process.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;For example, if you move to another town, it’s likely that your auto insurance policy needs to be updated to reflect your new neighborhood. So when building an Internet address change system for an insurance company, you have two design choices. You can either reprogram the system to automate the adjustment of the policy, or you can integrate this change within the existing process.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;If you’ve ever worked with an insurance company, option one should send shivers down your spine, especially if you have to deliver your application in six months. Changing a policy involves numerous rules that need to be enforced, many of them for legal reasons. Besides, you’re supposed to be building an address change system, not an automatic policy update system. So the best alternative is to integrate the existing policy update process into the new system. This will save you time (the scarcest resource) in the development cycle because you won’t have to discover every rule and exception up front.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;By incorporating the existing manual processes, you can rely on the expertise of the people who know the system best. Integration makes your life easier by saving you time and headaches. In version 2, after you get the app up and running, you can seek to uncover and incorporate more business rules and thereby automate the system more completely. Don’t underestimate how complex this will be. Even though a division might look like a call center to you, it’s also the brain center for many businesses, and it can’t be easily replaced. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;How to Bring Them Together&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;So how do you overcome the availability, performance/scalability, and exception handling pitfalls? How many new design patterns and technologies do you need to learn? There’s some good news. All three areas can be addressed by one technology choice: a combination of MSMQ and XML. But technology alone won’t save the day. To do it right, you’ll need to change the way you think about application development.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Generally speaking, people are on-demand thinkers. When we’re hungry, we eat; when we’re thirsty, we drink. This type of thinking translates into a design pattern that will leave you dead in the water when it comes to building integrated Internet systems. You have to break this design pattern by thinking asynchronously first, and designing synchronous transactions only as a last resort. If you must use a synchronous transaction, hold on to your hat—in some cases it simply may not be possible with hundreds of users. Benchmark synchronous transactions early to avoid late-breaking scalability problems.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;You also have to get over the common mindset that goes something like this: &amp;quot;If I (re)build everything in the system, all the code will be mine and everything will work.&amp;quot; While this may be true in some cases, it is not the proper approach, especially if you want to finish on time. The key here is to make use of the enormous amount of effort that has been invested in existing systems and processes. If you integrate with an existing process, it’s likely that the development time spent handling exceptions can be reduced by half because the existing process already has built-in exception handling mechanisms.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Finally, you must embrace the versioned approach to software development. If version 1.0 of your application is also meant to be the last version, it is almost certain to fail. A one-version approach will compromise proper system design, the first casualty of increased scope inside the same development schedule. Furthermore, you’ll lose the ability to make course corrections, both in overall architecture and specific features. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;MSMQ and XML&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;As we mentioned previously, the three main problems with integrated systems (availability, performance/scalability, and exception handling) can be addressed with a single technology choice—MSMQ and XML.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Many systems already communicate by passing a simple string. In order for both systems to understand the format and location of the data in the string, it’s probably marked it up with some kind of token system or based on fixed-length fields. XML is the formalization of this concept. It also includes the tools and techniques to make development easier. By using valid XML—XML that conforms to a document type definition (DTD) or schema—industries can standardize on a data format, giving applications the ability to exchange data with a much larger audience. XML provides a great way to model data and represent that data in a simple and powerful format.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;What XML does for data, MSMQ does for transport. MSMQ gives systems a reliable and disconnected path for the transfer of XML between different systems in an organization. It guarantees that the XML is delivered once (and only once) when network conditions permit. If you’re integrating with systems that are widely distributed geographically, not always available, slow, or nonscalable, MSMQ allows you to isolate these systems from your customers. Your customers need not be concerned with your legacy systems because customers never interact directly with them. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Sample Application&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;About a year ago, one of our cars was stolen from the airport. The settlement for my car showed up in the requisite 60 days, but a check for the car’s contents never arrived. After six months or so, we gave the insurance company a call. After all, the Smiths CD that was in the car had to be replaced. The agent said that the second check was indeed sent over five months ago. It turns out that while the auto policy had the new address, the home policy (which insured the contents of the car) still had the old address. The same insurance company held both policies, so the cause of this mishap was surely the lack of integration across their line-of-business systems.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Let’s examine an Internet-based address change facility that solves the problem we just outlined. The insurance company has many internal processes, but we’ll focus on these three parts of the call center: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Auto policy address change: when a customer calls, the change is entered into a database via a terminal session. &lt;/li&gt;    &lt;li&gt;Auto policy change: when a customer calls, an email is sent to an insurance agent, who then reviews the policy and makes the appropriate changes. &lt;/li&gt;    &lt;li&gt;Home policy address change: for a simple address change, a fax is sent to the auto policy division that handles the address change.&lt;/li&gt; &lt;/ul&gt; &lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;In our case, it’s likely the fax was never sent and thus my home policy address was never updated.   &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Let’s take a quick look at the typical Internet solution and highlight some of the pitfalls. We’ll then show you a good second-generation application and its extension to a third-generation app using the approach advocated by BizTalk.org, which was announced at TechEd in May 1999.   &lt;p&gt;&lt;b&gt;Typical Approach&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The typical approach toward building an Internet-based front end over a legacy system would be to build an HTML form that posts to an ASP page. The ASP code would connect to each of the data sources and execute some SQL to make the address changes. Finally, you’d write some HTML back to the client, indicating the success or failure of the operation. The HTML form would look something like &lt;b&gt;Figure 2&lt;/b&gt;. &lt;/p&gt;  &lt;p&gt;&lt;img alt="Figure 2: A Traditional HTML Form" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacyfig02.gif" width="200" height="250" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;&lt;b&gt;Figure 2: A Traditional HTML Form&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;This solution does not address the availability, performance, scalability, or exception handling challenges. First, availability is not optimal because if any of the data sources are unavailable at submit time, the user will receive an error message. Furthermore, if the underlying data sources run on a mainframe (as most legacy systems do), there may also be transient problems with connectivity through the SNA gateway. And, of course, there are the usual network problems, which may be intensified if the database is located across the WAN.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;There is a big problem with performance: the user is waiting for all database transactions to complete. This can be disastrous, especially at busy periods (end-of-month, holidays, and so on) when legacy systems typically run at or near full capacity. Having this many database connections on a single page also presents scalability problems, especially if connections are limited (which they frequently are in legacy systems) and if there are contention issues. There may even be a show stopper if the transactions are lengthy and are locking resources.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;This system does not exploit existing systems, and there is no exception handling mechanism. There are also less obvious problems with this solution. What if complex business rules need to be enforced? Even worse, what if they had traditionally been enforced by a manual process? What if connectivity to the back-end database is simply not possible (existing instead in a flat file on the mainframe) or a subsystem is down for regular maintenance? What if you want to share this information with an affiliate company? This may sound like worst-case planning, but these are common concerns at large corporations. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;A Better Solution&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Now, let’s take a look at how this system could be built to address the shortcomings of the traditional approach. As you read, keep three &amp;quot;VIA&amp;quot; (Version, Integrate, Asynchronous) rules in mind: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Plan for another &lt;i&gt;version&lt;/i&gt; (you don’t have to do everything in version 1.0). &lt;/li&gt;    &lt;li&gt;&lt;i&gt;Integrate&lt;/i&gt; existing systems and processes (don’t start from scratch). &lt;/li&gt;    &lt;li&gt;Think &lt;i&gt;asynchronous&lt;/i&gt; first (isolate existing systems).&lt;/li&gt; &lt;/ul&gt; &lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;From the user’s perspective, the interface is still an HTML form with the same appearance as the one shown in &lt;b&gt;Figure 2&lt;/b&gt;. Instead of posting the HTML form, you’re going to represent the data in XML and post the XML to the server. An excellent source of information about XML was Dino Esposito’s &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0699/cutting/cutting0699.htm"&gt;June 1999&lt;/a&gt; Cutting Edge column.   &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The project starts with a DTD, which defines the structure of the XML. The source code is shown in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig3"&gt;&lt;b&gt;Figure 3&lt;/b&gt;&lt;/a&gt;. DTDs have their place, but they don’t describe data in a way that is useful to data architects. A new standard, schemas, is emerging. Schemas use XML itself to describe the XML document structure. We chose to use XML schemas for this reason. Schemas are also a key part of the BizTalk initiative, which was started to facilitate business-to-business communications using XML.   &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The DTD and schema serve the same goal: they allow the XML parser to validate an XML document against a reference to make sure it conforms to the published standard. An XML document that conforms to a DTD or schema is said to be valid. Schemas are currently only supported by Microsoft Internet Explorer 5.0. A sample Customer schema is shown in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig4"&gt;&lt;b&gt;Figure 4&lt;/b&gt;&lt;/a&gt;.   &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Before we get into the nitty-gritty implementation details, let’s go over the entire solution first. We’re taking a straightforward, six-step approach (see &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig5"&gt;&lt;b&gt;Figure 5&lt;/b&gt;&lt;/a&gt;):   &lt;ol&gt;   &lt;li&gt;Generate XML on the client machine. &lt;/li&gt;    &lt;li&gt;Submit the XML to the server. &lt;/li&gt;    &lt;li&gt;Package the XML into an MSMQ message and send it to the Distributor. &lt;/li&gt;    &lt;li&gt;Send XML confirmation back to client. &lt;/li&gt;    &lt;li&gt;Based on data stored in the registry, the Distributor will send one or more additional messages (one for each registered system). &lt;/li&gt;    &lt;li&gt;These messages will in turn be received by Handlers, which will initiate a manual process or execute an address change in a particular system.&lt;/li&gt; &lt;/ol&gt; &lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Now that you have the schema for the XML document, let’s take a look at how to generate the XML document on the client (see &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig6"&gt;&lt;b&gt;Figure 6&lt;/b&gt;&lt;/a&gt;). Most of the work is done in AddXMLNode. Notice that the schema definition is added to each node. This ensures that every node in the document is bound to the XML schema. By setting the DOMDocument.async property to false and then checking the DOMDocument.parseError code, you can determine whether the generated XML is valid. The resulting XML document is shown in &lt;b&gt;Figure 7&lt;/b&gt;.   &lt;p&gt;&lt;img alt="Figure 7: Customer XML Document" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacyfig07.gif" width="350" height="257" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;&lt;b&gt;Figure 7: Customer XML Document&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;At this point, you’ve defined your XML schema, created an XML document on the client, and validated it against the schema. Now it’s time to submit it to the server. To post the XML to the page, use the XMLHTTPRequest object included in the msxml.dll that ships with Internet Explorer 5.0. Using this object offers the best performance (by providing the leanest possible HTTP POST forms without compression) and the most straightforward code. The client-side source code to post the XML is shown in the SendXML method in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig6"&gt;&lt;b&gt;Figure 6&lt;/b&gt;&lt;/a&gt;. Prior to Internet Explorer 5.0, the preferred method for HTTP posting would have been through the WinInet API. We’ve seen the code that does this, and it’s not pretty.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The code to receive the XML on the server is shown in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig8"&gt;&lt;b&gt;Figure 8&lt;/b&gt;&lt;/a&gt;. Note the call to set the async property of the XMLDOM object to False. If you omit this line, the resolution of the schema and the eventual parsing of the document will be performed asynchronously, which is not what you want in this case. The source code that receives XML on the server is shown in the ProcessRequest method in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig8"&gt;&lt;b&gt;Figure 8&lt;/b&gt;&lt;/a&gt;. The SendMessage function sends an MSMQ message to the Distributor here as well.     &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The address change message is sent from the ASP page to the source queue shown in &lt;b&gt;Figure 9&lt;/b&gt;. When it arrives, MSMQ notifies a Listener that calls the Distributor, a Microsoft Transaction Services (MTS) component. The Distributor pulls the message off the queue and sends the XML body to the destination queues as specified in the registry. Should something go wrong while sending the messages, the transaction rolls back, leaving the message on the source queue and nothing in the destination queues. More detailed information about sending and receiving MSMQ messages is available in Ted Pattison’s article, &amp;quot;&lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomscom.asp?target=/msj/0599/msmq/msmq.htm"&gt;Using Visual Basic to Integrate MSMQ into Your Distributed Applications&lt;/a&gt;&amp;quot; (&lt;i&gt;Microsoft Systems Journal&lt;/i&gt;, May 1999). &lt;/p&gt;  &lt;p&gt;&lt;img alt="Figure 9: Distributor Architecture" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacyfig09.gif" width="250" height="168" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;&lt;b&gt;Figure 9: Distributor Architecture&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;To take a message off a queue in an MTS transaction, the application removing the message must be running locally on the same machine as the queue and it must be running in MTS. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;The Listener&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;MSMQ notifies the Listener application (see &lt;b&gt;Figure 10&lt;/b&gt;) when a message arrives by declaring an MSMQEvent object called WithEvents: &lt;/p&gt;  &lt;pre&gt; Dim WithEvents msmqMsgEvent As MSMQEvent
 Dim msmqQue As MSMQQueue&lt;/pre&gt;

&lt;p&gt;To set up notification in the Visual Basic-based listener, you’d then use the following code: &lt;/p&gt;

&lt;pre&gt; Set msmqInfo = CreateObject(&amp;quot;MSMQ.MSMQQueueInfo&amp;quot;)
 Set msmqMsgEvent = CreateObject(&amp;quot;MSMQ.MSMQEvent&amp;quot;)
         
 msmqInfo.FormatName = txtSourceQueue
 Set msmqQue = msmqInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
 msmqQue.EnableNotification Event:=msmqMsgEvent&lt;/pre&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Instead of using a path name here, you should use a format name to increase performance. Using a path name requires a query to the Message Queue Information Store (MQIS). That RPC call adds significant overhead to the open queue request. Using a format name, on the other hand, requires only a single RPC call to the MQIS (if it is not a direct format name). After the first call, MSMQ caches the connection information, which removes the site controller from the picture and increases performance. This will be particularly relevant in the MTS Distributor component. &lt;/p&gt;

&lt;p&gt;&lt;img alt="Figure 10: The Listener Application" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacyfig10.gif" width="400" height="76" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;&lt;b&gt;Figure 10: The Listener Application&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;When an MSMQEvent_Arrived event is fired, the Visual Basic-based component calls the Distributor in MTS with the format name of the source queue. It does not pass a reference to the source queue directly; calling ReceiveCurrent on the reference would not include the source message in the transaction because the queue was not opened in the context of the transaction. If the transaction aborted, the message would neither appear in the destination queue nor remain in the source queue. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;The Distributor&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Based on data stored in a local database, the Distributor will send one or more additional messages based on the contents of the registry (see &lt;b&gt;Figure 11&lt;/b&gt;). The source code for the Distributor is shown in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig12"&gt;&lt;b&gt;Figure 12&lt;/b&gt;&lt;/a&gt;. The messages sent by the Distributor will in turn be received by Handlers, which will initiate and execute an address change for a particular system. The architecture of a Handler is very similar to the Distributor, so we’re leaving out the details. &lt;/p&gt;

&lt;p&gt;&lt;img alt="Figure 11: Registry Values" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacyfig11.gif" width="500" height="155" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;&lt;b&gt;Figure 11: Registry Values&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;In a more robust system, the Distributor might determine the destination based on a database lookup and the type of XML schema used in the body of the message. This more flexible architecture could be used to process other message types as well. 

  &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;&lt;b&gt;Figure 9&lt;/b&gt; gives the impression that the Distributor and destination queues are all running side-by-side on the same machine. While this is possible, it is equally likely that the Handlers would be running in separate offices, maybe even in different countries. This transparency gives your application the ability to communicate over slow links or WAN connections, knowing that your message will be processed when network conditions permit. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;Benefits of this Solution&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Before going into the benefits of this architecture, take a look at the amount of code written for this sample. Granted, the sample app is straightforward, but the table in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig13"&gt;&lt;b&gt;Figure 13&lt;/b&gt;&lt;/a&gt; shows just how little source code is required to build the framework around an integrated Internet site. 

  &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;As you can see in &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig13"&gt;&lt;b&gt;Figure 13&lt;/b&gt;&lt;/a&gt;, there is not much source code involved in our sample application. Remember VIA? This solution fulfills all three parts: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Versioned: the first version of this system was simple and could be delivered in a realistic timeframe. However, the design and technologies chosen allow for easy extensibility in the future (see the BizTalk section that follows). &lt;/li&gt;

  &lt;li&gt;Integrated: we did not start this project from scratch. For example, the existing fax-based submission process was incorporated rather than attempting to redo it from scratch. By doing this, we did not have to incorporate the business rules surrounding modifications to insurance policies. &lt;/li&gt;

  &lt;li&gt;Asynchronous: the system has very few synchronous processes and the legacy systems are isolated from the customer. This optimizes the availability of the system. Furthermore, the performance and scalability of the system will be exceptional because there are no synchronous database connections.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;Let’s take a look at a possible extension of this simple application. Suppose an insurance company was going to provide an address change service as part of their policies. This service would update the customer’s profile at their bank at the same time. How would the insurance company be able to provide this service? This is where the BizTalk framework fits in. BizTalk is dedicated to establishing, publishing, and maintaining industry-specific XML schemas to facilitate the exchange of information between businesses. Instead of using a local XML schema, this application might instead use a schema located directly on the BizTalk site (&lt;a href="http://web.archive.org/web/20000617215818/http://www.biztalk.org/"&gt;http://web.archive.org/web/20000617215818/http://www.biztalk.org/&lt;/a&gt;). 

&lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;The next step would be to register another data service with the Distributor. This data service would simply post valid XML—according to the BizTalk customer schema—to the bank, which would then process the request. In effect, the bank would not be able to tell if the XML request came directly from a customer or via his insurance company. Version 3 of MSMQ is slated to support native HTTP message delivery that extends the guaranteed delivery concept across the Internet (version 2 is scheduled for release as part of Windows 2000). 

&lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt; &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/legacy/legacytextfigs.htm#fig14"&gt;&lt;b&gt;Figure 14&lt;/b&gt;&lt;/a&gt; extends the conceptual diagram of the system, making this a business-to-business solution. As you can see, extending a second-generation application to include business-to-business operations is quite natural—especially if the BizTalk framework is used to standardize on the use of a single XML schema. 

&lt;p&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;To build third-generation Internet applications, you’ll need to build an interoperable system. Look at legacy systems and processes as opportunities to be exploited because the technology exists to address their shortcomings. By making the right technology choices now, communication with the systems of other companies will be a natural extension in future versions. 

  &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;It’s clear that XML is emerging as the standard data format for communication between systems. On the transport side, MSMQ is an easy-to-use, asynchronous mechanism that can increase both performance and scalability. It will also isolate legacy systems and increase the availability of the system. 

  &lt;br /&gt;&lt;img src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/indent.gif" width="10" height="4" alt="" /&gt;To build this new brand of applications, you’ll need to focus on the VIA design techniques we discussed in this article. Using these technologies and the VIA design concepts, you should be able to find the way to your third-generation Internet application. Good luck!

  &lt;br /&gt;&lt;img align="right" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/dingbats/ending.gif" width="23" height="14" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;From the &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/0999/inthisissue0999.htm"&gt;September 1999&lt;/a&gt; issue of &lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/mind.htm"&gt;Microsoft Internet Developer&lt;/a&gt;. Get it at your local newsstand, or better yet, &lt;/i&gt;&lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/subscribe.htm"&gt;&lt;i&gt;subscribe&lt;/i&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt="MSDN" src="http://web.archive.org/web/20000617215818/http://www.microsoft.com/mind/images/logos/msdnnew.gif" width="200" height="22" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomsdn.asp?TARGET=/xml/articles/hess061499.asp"&gt;http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomsdn.asp?TARGET=/xml/articles/hess061499.asp&lt;/a&gt;

  &lt;br /&gt;and

  &lt;br /&gt;&lt;a href="http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomsdn.asp?TARGET=/xml//default.asp"&gt;http://web.archive.org/web/20000617215818/http://www.microsoft.com/isapi/gomsdn.asp?TARGET=/xml//default.asp&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.imason.com/aggbug.aspx?PostID=1282" width="1" height="1"&gt;</description><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/Microsoft+Message+Queue/default.aspx">Microsoft Message Queue</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/legacy/default.aspx">legacy</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/XML/default.aspx">XML</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/technical/default.aspx">technical</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/archive/default.aspx">archive</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/Visual+Basic/default.aspx">Visual Basic</category></item><item><title>IE8 and CRM 3.0 – Unsupported Browser… Or is it?</title><link>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/04/03/ie8-and-crm-3-0-unsupported-browser-or-is-it.aspx</link><pubDate>Fri, 03 Apr 2009 20:11:00 GMT</pubDate><guid isPermaLink="false">ba1d72eb-a51c-4157-8cec-718d26de3334:1156</guid><dc:creator>Scott Howlett</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.imason.com/imason_Blogs/b/scott_howlett/rsscomments.aspx?WeblogPostID=1156</wfw:commentRss><comments>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/04/03/ie8-and-crm-3-0-unsupported-browser-or-is-it.aspx#comments</comments><description>&lt;p&gt;[Update (April 8, 2009) &amp;ndash; I&amp;rsquo;ve just concluded the the source of the trouble is the OfficeLiveAddIn.&amp;nbsp; I&amp;rsquo;m also hearing from colleagues that the OfficeLiveAddIn, which causes changes to the user agent, is wreaking havoc with Sharepoint users as well.&amp;nbsp; Apparently the WebDav implementation for Sharepoint has a specific check for &amp;ldquo;office&amp;rdquo;, presumably for different handling for non-browser-based clients.]&lt;/p&gt;
&lt;p&gt;[Update:&amp;nbsp; On Rez&amp;rsquo;s computer, both the 32 bit and the 64 bit version of IE8 work just fine with IE8 using Vista 64 bit.&amp;nbsp; For me, only the 64 bit version of IE8 works on Vista 64 bit.&amp;nbsp; &amp;lt;= i.e. inconclusive testing!]&lt;/p&gt;
&lt;p&gt;I went to IE8 on my work computer today.&amp;nbsp; Went to CRM, and got this nasty dialog:&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://www.imason.com/img/blogs/sh_090403_01.png" alt="image" /&gt;&lt;/p&gt;
&lt;p&gt;No problem, I thought.&amp;nbsp; I had read about &amp;ldquo;compatibility mode&amp;rdquo; in IE8, where IE8 pretends to be IE7 so that websites don&amp;rsquo;t break.&amp;nbsp; I checked my compatibility settings (Tools | Compatibility View Settings) and my browser was *already* in compatibility mode.&amp;nbsp; To be certain, I used &lt;a target="_blank" href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt; to check the user agent:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;User-Agent: Mozilla/4.0 (&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;compatible; MSIE 7.0&lt;/strong&gt;&lt;/span&gt;; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322; MS-RTC LM 8; WWTClient2; .NET CLR 3.5.21022; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618) &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sure enough, IE8 was pretending to be IE7.&lt;/p&gt;
&lt;p&gt;I switched compatibility mode off, just for kicks.&amp;nbsp; The user-agent did change but CRM still didn&amp;rsquo;t work.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;User-Agent: Mozilla/4.0 (&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;compatible; MSIE 8.0&lt;/strong&gt;&lt;/span&gt;; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322; MS-RTC LM 8; WWTClient2; .NET CLR 3.5.21022; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Next, I issued the dire warning to my team &amp;ndash; if you upgrade to IE8, CRM 3.0 won&amp;rsquo;t work.&amp;nbsp; But then, strangely, my colleague Rez said that CRM3.0 (the same installation) worked for him under IE8.&amp;nbsp; Hmmm, I thought.&amp;nbsp; What is going on.&amp;nbsp; Here is the user-agent from Rez who is also running Vista 64 bit:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Funny.&amp;nbsp; The MSIE part was the same, but the o/s looked different.&amp;nbsp; Now, I seemed to remember a few different icons in the start menu &amp;ndash; Internet Explorer and Internet Explorer (64 bit).&amp;nbsp; I knew I was running the 32 bit version, because there&amp;rsquo;s no 64 bit Flash plug-in.&amp;nbsp; You can see that in my user-agent &amp;ndash; &amp;ldquo;Windows NT6.0; WOW64&amp;rdquo; (WOW is Windows on Windows) whereas Rez had &amp;ldquo;Windows NT6.1&amp;rdquo;.&amp;nbsp; Sure enough, if I ran the 64-bit IE8, CRM worked with this user-agent:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC1; Tablet PC 2.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So, from what I can tell IE8 32 bit does not work with CRM3.0 and IE8 64 bit does.&amp;nbsp; The remaining mystery &amp;ndash; what is Rez&amp;rsquo;s Windows NT6.1???&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.imason.com/aggbug.aspx?PostID=1156" width="1" height="1"&gt;</description><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/technical/default.aspx">technical</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/IE8/default.aspx">IE8</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/CRM/default.aspx">CRM</category></item><item><title>Bill Gates At TED</title><link>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/02/05/bill-gates-at-ted.aspx</link><pubDate>Fri, 06 Feb 2009 03:05:34 GMT</pubDate><guid isPermaLink="false">ba1d72eb-a51c-4157-8cec-718d26de3334:325</guid><dc:creator>Scott Howlett</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.imason.com/imason_Blogs/b/scott_howlett/rsscomments.aspx?WeblogPostID=325</wfw:commentRss><comments>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/02/05/bill-gates-at-ted.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve blogged &lt;a href="http://www.imason.com/blogs/scott_howlett/archive/2008/11/03/ted-one-of-my-favorite-sites-out-there.aspx"&gt;before about TED&lt;/a&gt; - it&amp;#39;s such an amazing site and an amazing conference.&amp;nbsp; I really hope that I get to TED one of these years...&amp;nbsp; &lt;/p&gt; &lt;p&gt;I&amp;#39;ve just listened to &lt;a href="http://www.ted.com/talks/bill_gates_unplugged.html"&gt;Gates&lt;/a&gt; talk this year at TED. He&amp;#39;s not talking about technology but about global health and the work of his &lt;a href="http://www.gatesfoundation.org/Pages/home.aspx"&gt;foundation&lt;/a&gt;.&amp;nbsp; Very cool and surprisingly funny too.&amp;nbsp; Little choppy in the shift from malaria to &amp;#39;what makes a great teacher?&amp;#39;...&amp;nbsp; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&amp;quot;&amp;quot;I&amp;#39;m an optimist.&amp;nbsp; Any tough problem I think can be solved.&amp;quot;&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Strange to hear so much of the language from Microsoft applied to such a different domain - &amp;quot;tools&amp;quot;, &amp;quot;roadmaps&amp;quot;... &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.imason.com/aggbug.aspx?PostID=325" width="1" height="1"&gt;</description><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/Influencers/default.aspx">Influencers</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/conference/default.aspx">conference</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/TED/default.aspx">TED</category></item><item><title>Silverlight Adoption:  January 2009 Update</title><link>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/01/30/silverlight-adoption-january-2009-update.aspx</link><pubDate>Fri, 30 Jan 2009 15:23:43 GMT</pubDate><guid isPermaLink="false">ba1d72eb-a51c-4157-8cec-718d26de3334:272</guid><dc:creator>Scott Howlett</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.imason.com/imason_Blogs/b/scott_howlett/rsscomments.aspx?WeblogPostID=272</wfw:commentRss><comments>http://www.imason.com/imason_Blogs/b/scott_howlett/archive/2009/01/30/silverlight-adoption-january-2009-update.aspx#comments</comments><description>&lt;p&gt;Earlier this month (January 2009) I made the prediction that &lt;a href="http://www.imason.com/blogs/scott_howlett/archive/2009/01/08/technology-predictions-2009-search-platforms-silverlight-and-windows-mobile.aspx"&gt;Silverlight penetration would approach Flash penetration (80%+)&lt;/a&gt;.&amp;nbsp; It&amp;#39;s a bold prediction, especially since it is widely held that as of this month, penetration is in the 25% range.&lt;/p&gt; &lt;p&gt;There was a string of &lt;em&gt;very&lt;/em&gt; large scale successes &lt;em&gt;just this month, &lt;/em&gt;notably around Obama&amp;#39;s inauguration.&amp;nbsp; These included the &lt;a href="http://www.pic2009.org/content/home/"&gt;Presidential Inaugural Committee&lt;/a&gt; choosing Silverlight to broadcast video of the inauguration and CNN creating an &lt;a href="http://www.cnn.com/SPECIALS/2009/44.president/inauguration/themoment/"&gt;unbelievable 3D collage of the inauguration moment&lt;/a&gt; using Photosynth &amp;amp; Silverlight.&amp;nbsp; And that was just January.&lt;/p&gt; &lt;p&gt;Despite my enthusiasm, not everyone is convinced that Silverlight is on it&amp;#39;s way up.&amp;nbsp; This article in Infoworld -- &lt;a href="http://www.infoworld.com/article/09/01/28/Microsoft_Silverlight_adoption_hampered_by_economic_crisis_1.html"&gt;Silverlight adoption hampered by economic crisis&lt;/a&gt; -- chief among them.&amp;nbsp; On one hand, the hypothesis is likely to be bang on, in the sense that &lt;em&gt;nearly everything&lt;/em&gt; is likely to be hampered by the economic crisis.&amp;nbsp; It&amp;#39;s sort of stating the obvious.&amp;nbsp; &lt;/p&gt; &lt;p&gt;But some of the statements in the article are just so opposite to my experiences:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&amp;quot;The UI is considered the last part of the application,&amp;quot; said Ryan Peterson, principal and software engineer for Serenity Software, a Harrisburg, Pennsylvania, company that specializes in UI consulting and design. &amp;quot;The mindset has always been and still is: You build the application and then you build the interface. It&amp;#39;s a large contributing factor to why people cut that [first]. They think if the application works, we can take care of the interface later.&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;What?&amp;nbsp; Maybe the mindset is completely different between Pennsylvania and Toronto, but the above statement doesn&amp;#39;t resonate with me or any of my customers.&amp;nbsp; And while it&amp;#39;s true that we do a lot of work in large-scale web properties where User Experience is paramount, we also do a ton of work in the nitty gritty of internal business applications, and User Experience and Interface Design is nearly &lt;em&gt;always&lt;/em&gt; at the forefront.&lt;/p&gt; &lt;p&gt;I remain very bullish on the overall growth of Rich Internet Applications (RIAs) in 2009 and I think that Silverlight (and Flash for that matter) have a long rosy future ahead of them.&amp;nbsp; I&amp;#39;m really looking forward to &lt;a href="http://www.visitmix.com"&gt;Mix09&lt;/a&gt; in Las Vegas, where a portion of the web community will come together for the 4th year and discuss, with enthusiasm!, the future of the web.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.imason.com/aggbug.aspx?PostID=272" width="1" height="1"&gt;</description><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/RIA/default.aspx">RIA</category><category domain="http://www.imason.com/imason_Blogs/b/scott_howlett/archive/tags/Silverlight/default.aspx">Silverlight</category></item></channel></rss>