<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.infosupport.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Wouter van Vugt</title><subtitle type="html">This blog is no longer maintained and has &lt;a href="http://blogs.code-counsel.net/wouter"&gt;moved&lt;/a&gt;</subtitle><id>http://blogs.infosupport.com/wouterv/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.infosupport.com/wouterv/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.60809.935">Community Server</generator><updated>2007-08-22T20:31:00Z</updated><entry><title>My blog has moved</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/11/03/My-blog-has-moved.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/11/03/My-blog-has-moved.aspx</id><published>2007-11-03T11:58:00Z</published><updated>2007-11-03T11:58:00Z</updated><content type="html">&lt;p&gt;After having worked as a trainer for Info Support the past couple of years I have transitioned to the next phase of my career. I have started my own company Code Counsel through which I actively evangelize Microsoft .NET technology, with a focus on SharePoint and Office development. The time I have enjoyed at Info Support was one big learning opportunity and I couldn&amp;#39;t have found a better company to work for so early in my career. It has been a wonderful time and a part of me is sad&amp;nbsp;to be leaving. Thanks to all my great collegues who made it so much better. You guys are the one thing I&amp;#39;ll be missing most. Now I have no one to tell me I am wrong when I go shooting my mouth of about something... :) (We already thought of a highly distributed SOA enterprise architecture &lt;em&gt;with design patterns &lt;/em&gt;for auto delivering mails containing stuff like &amp;#39;yes, but look at the other side of the ball Wouter&amp;#39;, or &amp;#39;Is that really so Wouter?&amp;#39;, we only need to rent out the required rack space somewhere...)&lt;/p&gt;&lt;p&gt;So, if you want to continue checking up on my state of mind or you have some tech questions, head over to my currently un-branded and slightly, ehrm, really ugly blog. After TechEd I&amp;#39;ll be fixing it up though. I will no longer be maintaining this place. &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.code-counsel.net/wouter"&gt;&lt;font size="4"&gt;http://blogs.code-counsel.net/wouter&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=13051" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author></entry><entry><title>Open XML @ TechEd Europe 2007</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/10/31/TechEd-Europe-2007-is-looming.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/10/31/TechEd-Europe-2007-is-looming.aspx</id><published>2007-10-31T18:30:00Z</published><updated>2007-10-31T18:30:00Z</updated><content type="html">&lt;div style="float:right;"&gt;&lt;img height="45" src="http://blogs.infosupport.com/photos/wouterv/images/13041/original.aspx" style="width:174px;height:45px;" width="174" /&gt; &lt;/div&gt;&lt;p&gt;In a few days one of the biggest IT events in Europe is starting: &lt;a href="http://www.mseventseurope.com/TechEd/Developers/"&gt;TechEd Developers&lt;/a&gt; and the &lt;a href="http://www.mseventseurope.com/TechEd/ITForum/"&gt;TechEd IT Forum&lt;/a&gt;. Come join many professionals and learn about new and current technologies. I will be attending TechEd Developers, together with a few collegues. You will find me available for discussing the Open XML technology, OBAs, SharePoint or just random talk like the reason why zebras and tigers have stripes, or why my keyboard has a CapsLock key.... &lt;/p&gt;&lt;p&gt;Besides visiting great sessions I also plan to deliver &lt;a href="http://www.mseventseurope.com/OnlinePub/Public/sessions.aspx?EventId=HbLEvtKcPE4%3d"&gt;three great sessions on Open XML&lt;/a&gt;. The first session on Tuesday afternoon is an Open XML introductionary talk. The intention for the first session is to provide you with an overview of the Open XML technology stack, as well as providing some insight into the business capabilities of Open XML like comprehensive digital signature support or the ways to embed business data from a document. On Wednesday the second session is in the&amp;nbsp;morning, the last in the afternoon.&amp;nbsp;The second will be on current&amp;nbsp;implementations of Open XML and applications in the wild. The last session&amp;nbsp;is a discussion on Open XML which I hope you&amp;#39;ll join to discuss the merits of Open XML, the relation with ODF, or UOF, or even &lt;a href="http://swik.net/User:conficio/Software+documentation+one+screencast+at+a+time/Surprise%2C+Open+Standards+are+not+Free+of+Business+Interest/br4ka"&gt;CDF&lt;/a&gt;...&lt;/p&gt;&lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=13042" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /><category term="TechEd" scheme="http://blogs.infosupport.com/wouterv/archive/tags/TechEd/default.aspx" /></entry><entry><title>Откройте XML в России</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/10/26/_1E0442043A0440043E04390442043504_-XML-_3204_-_20043E044104410438043804_.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/10/26/_1E0442043A0440043E04390442043504_-XML-_3204_-_20043E044104410438043804_.aspx</id><published>2007-10-26T05:23:00Z</published><updated>2007-10-26T05:23:00Z</updated><content type="html">&lt;p&gt;Я весьма горд объявить российский выпуск Открытого XML Объясненная книга. Есть другие переводы в создании и немногих доступный уже. Очень прохладный! Я надеюсь, что Вы любите читать маленькую книгу и что это обеспечивает немного ценных пониманий в мир Открытого XML, и развивающийся Office базировал заявления.&lt;/p&gt;&lt;p&gt;&lt;img height="375" src="http://blogs.infosupport.com/photos/wouterv/images/13002/500x375.aspx" style="width:500px;height:375px;" width="500" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;And yes, Boyrep that&amp;#39;s me.&lt;/p&gt;&lt;p&gt;&lt;img height="375" src="http://blogs.infosupport.com/photos/wouterv/images/13003/500x375.aspx" style="width:500px;height:375px;" width="500" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Ps. Did I mention we are trying to get a few (English)&amp;nbsp;copies to TechEd which is in two weeks. I will be delivering three sessions on Open XML, one introduction, a real-world session and you get a chance to discuss the ECMA standard with us. &lt;/p&gt;&lt;p&gt;Hope to see you at TechEd!&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=13004" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /><category term="TechEd" scheme="http://blogs.infosupport.com/wouterv/archive/tags/TechEd/default.aspx" /></entry><entry><title>Open XML in Healthcare</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/10/24/Open-XML-in-Healthcare.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/10/24/Open-XML-in-Healthcare.aspx</id><published>2007-10-24T05:53:00Z</published><updated>2007-10-24T05:53:00Z</updated><content type="html">&lt;p&gt;Just learned from Microsoft that the white-paper on Open XML in healthcare is available on MSDN. The goal of the whitepaper is to show how Open XML can increase the portability of health records and empower the end-user in the tooling that they are familiar with (can you guess the tooling?)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;quot;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb879915.aspx"&gt;Using the Office Open XML Formats to Support Electronic Health Records Portability and Health Industry Standards&lt;/a&gt;&amp;quot;&lt;/p&gt;&lt;p&gt;Thanks to Ted Pattison and Chris Predeek for allowing me to collaborate on this whitepaper with them. Worked out quite well I feel. Also my first MSDN article which is a nice victory of the week :)&amp;nbsp;Soon there will be a second on SharePoint field development, I&amp;#39;ll let you guys know when it arrives.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Hope it helps&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12989" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /><category term="MSDN" scheme="http://blogs.infosupport.com/wouterv/archive/tags/MSDN/default.aspx" /></entry><entry><title>Updated extraction XSLT</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/10/16/Updated-extraction-XSLT.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/10/16/Updated-extraction-XSLT.aspx</id><published>2007-10-16T10:14:00Z</published><updated>2007-10-16T10:14:00Z</updated><content type="html">I updated the XSLT of the previous post. Mapped XML inside a table wasn&amp;#39;t working properly, and now it is.&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12963" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author></entry><entry><title>Extracting data from a xml-mapped document</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/10/11/Extracting-data-from-a-xml_2D00_mapped-document.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/10/11/Extracting-data-from-a-xml_2D00_mapped-document.aspx</id><published>2007-10-11T18:14:00Z</published><updated>2007-10-11T18:14:00Z</updated><content type="html">&lt;p&gt;I have just returned from an MSDN InTrack session over here in the Microsoft Technology Center about Office Open XML and I wanted to share one of the demos I created for this event with you. The demo&amp;nbsp;app&amp;nbsp;extracts XML data from an XML-mapped WordprocessingML document. Note that this is not the Custom XML technology introduced in Open XML, but the earlier model already present in Office 2003. The one that looks like this: &lt;/p&gt;&lt;p&gt;&lt;img height="255" src="http://blogs.infosupport.com/photos/wouterv/images/12935/original.aspx" width="458" /&gt; &lt;/p&gt;&lt;p&gt;Now the old model provides one great benefit. If you add new rows to the order-item table, the new rows are automatically mapped according to the XML schema that is attached to the document. One of the downsides is that the data is embedded in the rest of the main document markup which makes it harder to extract compared to the separate storage of Custom XML. &lt;/p&gt;&lt;p&gt;Of course using a little XSLT-trickery you can still obtain a data only copy (or use the Word UI for it, by saving as a &amp;#39;Word 2003 XML document&amp;#39;, which is a bit unfriendly to the users. &lt;/p&gt;&lt;p&gt;If you run the following XSLT against the main document body you can extract the data. Note that there are no data-type checks, and reviewing options in the document will mess things up (it&amp;#39;s a demo&amp;hellip;). Also line-breaks are not copied from the document, or other special non-printing characters such as tabs. Feel free to improve it and I&amp;#39;ll update the XSLT here for the rest of the community. &lt;/p&gt;&lt;div&gt;&lt;table style="background:#f2f2f2;border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:5px;padding-left:5px;padding-bottom:1px;padding-top:1px;border:medium none;"&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;UTF-8&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;nbsp; xmlns:xsl&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;a href="http://www.w3.org/1999/XSL/Transform"&gt;http://www.w3.org/1999/XSL/Transform&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;nbsp; xmlns:w&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;a href="http://schemas.openxmlformats.org/wordprocessingml/2006/main"&gt;http://schemas.openxmlformats.org/wordprocessingml/2006/main&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;nbsp; exclude-result-prefixes&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;w&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;match&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;w:p | w:r | w:tbl | w:tr | w:tc&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:apply-templates&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;w:customXml | w:p | w:r | w:tbl | w:tr | w:tc&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;match&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;w:customXml&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:element&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;{@w:element}&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;{@w:uri}&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:choose&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:when&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;test&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;not(descendant::w:customXml)&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;descendant::text()&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:otherwise&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:apply-templates&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;child::node()&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:otherwise&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:choose&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:element&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;I&amp;#39;ll post the demo-app later together with the rest of the demos.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Hope it helps! &lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12936" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author></entry><entry><title>OpenOffice developer strikes out at Sun</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/10/06/OpenOffice-developer-strikes-out-at-Sun-for-their-strong-hold-on-.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/10/06/OpenOffice-developer-strikes-out-at-Sun-for-their-strong-hold-on-.aspx</id><published>2007-10-06T08:20:00Z</published><updated>2007-10-06T08:20:00Z</updated><content type="html">&lt;p&gt;Funny to see that Microsoft software is called &amp;#39;closed&amp;#39;, and they are always accused of overly protecting their markets. This is from one of the OO developers:&lt;/p&gt;&lt;p&gt;&lt;a href="http://kohei.us/2007/10/02/history-of-calc-solver/"&gt;&lt;em&gt;But I&amp;rsquo;d love to be proven wrong. I&amp;rsquo;d love to be proven that Sun still are willing to work with us, to make OO.o truly a wonderful product as well as a project attractive to prospective code contributors. But there is nothing I, as a single insignificant mere mortal can do to influence the behemoth that is Sun. It&amp;rsquo;s impossible to make an even slightest change in how the project is run, even after countless hours of coding and more than 10,000 lines of code generation (which I received no compensation for and involved quite a lot of personal sacrifice). In the end, I made no difference at all. Sad, truly sad.&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This is a bit of a no-brainer. How open is your open source software if there is a large company investing highly in it? They need to meet customer demand just like any other, so probably that piece of open software is less open than you want it to be. If key positions are taken you can have a strong grip on the project and hence your company&amp;#39;s future. &lt;/p&gt;&lt;p&gt;Personally&amp;nbsp;I like the recent steps taken by Microsoft. They totally openend up their old and their new document format, and now they released the source of the .NET Framework. The software works and integrates extremely well. The value proposition of Microsoft Office together with SharePoint 2007 (for the most part free)&amp;nbsp;for the team and collaboration stuff to me is very appealing. I wouldn&amp;#39;t trade&amp;nbsp;that for the&amp;nbsp;eighties look of OpenOffice today.&lt;/p&gt;&lt;p&gt;[edit]A &lt;a href="http://pro.tweakers.net/nieuws/49684/versplintering-openoffice-punt-org-dreigt-na-ruzie-met-sun.html"&gt;Tweakers thread&lt;/a&gt; actually had a sensible comment on this. I roughly translated:&lt;/p&gt;&lt;p&gt;&lt;em&gt;If OO will fork the code you will have eight or nine versions in no time at all, who with a little luck will be 95% compatible with each other. Only a different 95% in each case of course. And then of course just when you want to send out your company folder the part that indicates how great your company actually just might not be to visible to customers&amp;nbsp;using My-OO instead of the Your-OO.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;&lt;em&gt;Als OO dadelijk een paar keer gaat &amp;#39;forken&amp;#39; heb je binnen de kortst mogelijke keren 8 of 9 verschillende versies die met een beetje geluk 95% compatible met elkaar zijn. Maar natuurlijk wel allemaal een andere 95%. En natuurlijk is het dan zo dat alle leuke dingen die jij in je bedrijfs reclame folder hebt staan die laten zien hoe goed jouw bedrijf is net niet helemaal overkomen bij jouw klanten die een toevallig andere versie hebebn.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;(isn&amp;#39;t this already the case?)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12918" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /></entry><entry><title>You've got the source Luke, You've got the source</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/10/04/You_2700_ve-got-the-source-Luke_2C00_-You_2700_ve-got-the-source.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/10/04/You_2700_ve-got-the-source-Luke_2C00_-You_2700_ve-got-the-source.aspx</id><published>2007-10-04T09:32:00Z</published><updated>2007-10-04T09:32:00Z</updated><content type="html">&lt;p&gt;Notified by my collegue Bart, who is a bit slower on blogtyping than I am :)&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12898" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author></entry><entry><title>Get a hard-copy of the Open XML - The Markup Explained book</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/09/28/Get-a-hard_2D00_copy-of-the-Open-XML-_2D00_-The-Markup-Explained-book.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/09/28/Get-a-hard_2D00_copy-of-the-Open-XML-_2D00_-The-Markup-Explained-book.aspx</id><published>2007-09-28T16:16:00Z</published><updated>2007-09-28T16:16:00Z</updated><content type="html">&lt;p&gt;The fruits of my labor are finally getting there. I just learned from Doug that he&amp;#39;ll be sending over a container ship with hard-copies of my first book on Open XML.&lt;/p&gt;&lt;p&gt;&lt;img height="375" src="http://blogs.infosupport.com/photos/wouterv/images/12545/500x375.aspx" style="width:500px;height:375px;" width="500" /&gt;&lt;/p&gt;&lt;p&gt;This means I can finally satisfy the overwhelming demand of people wanting to get a hard-copy here in the Netherlands and Belgium (this means you Maarten :) &lt;/p&gt;&lt;p&gt;So if you are interested in a copy of this book, let me know and I&amp;#39;ll see what I can do about it. The &lt;a href="http://openxmldeveloper.org/attachment/1970.ashx"&gt;PDF version&lt;/a&gt; is of course available as well, but I&amp;#39;ll sign my copies to provide some extra value :) &lt;/p&gt;&lt;p&gt;I do have some further interesting developments which I&amp;#39;ll blog about later. The next month is probably really busy, so expect the same amount of posts as last month (I also have a great MSDN article coming up on SharePoint custom fields with all the pooha that you would want in the near future)&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12870" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /></entry><entry><title>The three-layered cake</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/09/26/The-three_2D00_layered-cake.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/09/26/The-three_2D00_layered-cake.aspx</id><published>2007-09-26T12:51:00Z</published><updated>2007-09-26T12:51:00Z</updated><content type="html">&lt;p&gt;Besides funny IT stories:&lt;/p&gt;&lt;p&gt;&lt;a href="http://worsethanfailure.com/Articles/The-Mythical-Business-Layer.aspx"&gt;http://worsethanfailure.com/Articles/The-Mythical-Business-Layer.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12858" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author></entry><entry><title>Come jump in with me</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/09/10/Come-jump-in-with-me.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/09/10/Come-jump-in-with-me.aspx</id><published>2007-09-10T08:16:00Z</published><updated>2007-09-10T08:16:00Z</updated><content type="html">&lt;p&gt;&lt;font color="#1f497d" face="Calibri" size="3"&gt;Thinking of leaping into .NET, Open XML, or SharePoint?&amp;nbsp; Not sure where to start? Come jump in with me!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="778" src="http://blogs.infosupport.com/photos/wouterv/images/12797/original.aspx" style="width:584px;height:778px;" width="584" /&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12798" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /><category term=".NET" scheme="http://blogs.infosupport.com/wouterv/archive/tags/.NET/default.aspx" /><category term="SharePoint" scheme="http://blogs.infosupport.com/wouterv/archive/tags/SharePoint/default.aspx" /></entry><entry><title>The Package Explorer splash screen: Multi-threaded application initialization</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/08/25/The-Package-Explorer-splash-screen_3A00_-Multi_2D00_threaded-application-initialization.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/08/25/The-Package-Explorer-splash-screen_3A00_-Multi_2D00_threaded-application-initialization.aspx</id><published>2007-08-25T16:14:00Z</published><updated>2007-08-25T16:14:00Z</updated><content type="html">&lt;p&gt;Besides the nifty &lt;a href="http://blogs.infosupport.com/wouterv/archive/2007/08/25/Package-Explorer-Start-Page-_2D00_-How-to-use-Win32-resources-and-the-res_3A002F002F00_-protocol-from-.NET.aspx"&gt;HTML start page&lt;/a&gt; that Package Explorer 3.0 will be using, there is another feature that I am quite happy about; the splash screen. &lt;/p&gt;&lt;p&gt;&lt;img height="250" src="http://blogs.infosupport.com/photos/wouterv/images/12720/original.aspx" style="width:400px;height:250px;" width="400" /&gt;&lt;/p&gt;&lt;p&gt;Now you have splash screens and splash screens, and mine of course needed to be a &lt;em&gt;proper&lt;/em&gt; splash screen. To me this means the following: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Send status messages &lt;/li&gt;&lt;li&gt;Minimum display duration &lt;/li&gt;&lt;li&gt;Proper threading model &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Especially that last item in the list is where I see many splash screens fail. There are many things that you can do with splash screens and threading, and if you do it wrong your splash will look ugly. The most basic implementations use the thread that you are handed on application start to show the splash and then init the application. By then switching the splash form with your real one you have done it. The difficulty is that while you are doing the init work on your UI thread, and you move another window over the splash, your splash UI will not update, leaving those familiar white gaps that Windows users have gotten accustomed to. Some sprinkle the &lt;em&gt;Application.DoEvents&lt;/em&gt; call across their initialization code to have the messages appear correctly in the splash screen, not nice! &lt;/p&gt;&lt;p&gt;The second model is to have the application initialization run on a separate thread. That&amp;#39;s of course a great solution to keep the splash screen responsive. The UI thread can update the splash screen and the messages which appear there and wait for the initialization thread to complete. Again, one of my demands is making things difficult. What I&amp;#39;d like to do is just create a WaitHandle that gets set from the initialization thread, and have the UI thread wait on this WaitHandle. This will satisfy my second demand, a minimum duration. But, in order to keep the UI responsive, you cannot do a WaitHandle.WaitOne, you might be able to do some polling on &lt;em&gt;IsCompleted&lt;/em&gt; and do some &lt;em&gt;Application.DoEvents&lt;/em&gt; in the mean time to update the UI, but again, not nice! &lt;/p&gt;&lt;p&gt;So my model then. It does it a bit differently. Both the UI thread and the initialization thread are created on application startup. So instead of the UI thread needing to wait for the application to start, the controller thread can do that. UI responsiveness galore! &lt;/p&gt;&lt;p&gt;In order to encapsulate the difficulties of working with multiple threads I borrowed an idea I found on the web. The &lt;em&gt;Application.Run&lt;/em&gt; method can take an &lt;em&gt;ApplicationContext&lt;/em&gt; as a parameter. This object holds a reference to the application&amp;#39;s main form. When this form closes, the message pump is stopped. You can derive from the &lt;em&gt;ApplicationContext&lt;/em&gt; in order to customize how this works. A good place to implement your splash screen logic. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Using the code &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The end user scenario looks like the following block of code. This is typically how your main method would look. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Program &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;SplashScreenContext&lt;/span&gt; context = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SplashScreenContext&lt;/span&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;context.MinimumSplashDuration = 2000;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;try&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;context.Run(args,&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;SplashForm&lt;/span&gt;),&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;ApplicationInit, UIInit);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; e)&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;MessageBox&lt;/span&gt;.Show(e.InnerException.Message);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; ApplicationInit(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args,&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;SafeSendMessageCallback&lt;/span&gt; messageCallback)&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;messageCallback(&lt;span style="color:#a31515;"&gt;&amp;quot;Doing important application init work.&amp;quot;&lt;/span&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;messageCallback(&lt;span style="color:#a31515;"&gt;&amp;quot;This method runs on a worker thread.&amp;quot;&lt;/span&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Thread&lt;/span&gt;.Sleep(500);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Form&lt;/span&gt; UIInit(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args,&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;SafeSendMessageCallback&lt;/span&gt; messageCallback)&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;messageCallback(&lt;span style="color:#a31515;"&gt;&amp;quot;Doing important UI init work.&amp;quot;&lt;/span&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;messageCallback(&lt;span style="color:#a31515;"&gt;&amp;quot;This method runs on the UI thread.&amp;quot;&lt;/span&gt;);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Thread&lt;/span&gt;.Sleep(500);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MainForm&lt;/span&gt;();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;You create an instance of &lt;em&gt;SplashScreenContext&lt;/em&gt;, and before you call Run you are allowed to provide settings such as minimum duration of the splash display and maximum duration of the init method before an exception will be raised. Next you call &lt;em&gt;Run&lt;/em&gt; to start your application. You pass in the command line arguments, the &lt;em&gt;Type&lt;/em&gt; of the splashscreen form and two methods. The first will be called on a separate non-ui thread, the second will be called on the UI thread and needs to return the main form to switch to after the splash screen closes. Do be aware that the &lt;em&gt;Main&lt;/em&gt; method runs on a different thread than the &lt;em&gt;UIInt&lt;/em&gt; method. The UI thread is created by the &lt;em&gt;SplashScreenContext&lt;/em&gt; to allow the wait for minimal splash duration to be non ui-blocking. &lt;/p&gt;&lt;p&gt;All exceptions flowing out of the initialization methods will be marshaled to the startup thread and throw there. This will allow you to catch all initialization errors inside your &lt;em&gt;Main&lt;/em&gt; method. Both initialization methods are also provided with a callback for sending status messages to the splash screen in a thread-safe manner. &lt;/p&gt;&lt;p&gt;If you want to be able to send messages to the splash screen, just implement &lt;em&gt;IDynamicSplashScreen&lt;/em&gt; on the &lt;em&gt;Type&lt;/em&gt; passed in to the &lt;em&gt;Run&lt;/em&gt; method. Your code will always be called on the UI thread so you have an easy time updating your status. &lt;/p&gt;&lt;p&gt;Here&amp;#39;s a diagram.&lt;/p&gt;&lt;p&gt;&lt;img height="704" src="http://blogs.infosupport.com/photos/wouterv/images/12719/original.aspx" style="width:489px;height:704px;" width="489" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The SplashScreenContext &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now the inner workings of the SplashScreenContext class are more complex than how you use it (as it should be). &lt;/p&gt;&lt;p&gt;The first interesting part is the Run method of which the signature is show here: &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; Run(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[], &lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;ApplicationInitCallback&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;UIInitCallback&lt;/span&gt;);&lt;/span&gt; &lt;/p&gt;&lt;p&gt;All parameters which have thread affinity are passed in the &lt;em&gt;Run&lt;/em&gt; method, so the class doesn&amp;#39;t contain any fields. This reduces the risk of me doing stupid coding resulting in contention somewhere. &lt;/p&gt;&lt;p&gt;The first task is setting up some basic stuff. The running Boolean is set to block changes to the properties of the class. The thread name is setup for better debugging, and some waithandles are created. The first &lt;em&gt;WaitHandle&lt;/em&gt; is used to wait for the init thread to complete. The second for the UI thread to create the main form. While this second task is almost instantaneous, threading is always hard so I thought it was a good idea to wait for the UI thread to go live before going into the rest of the initialization work. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;_running = &lt;span style="color:blue;"&gt;true&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Initial Thread&amp;quot;&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;color:green;font-family:Consolas;"&gt;// Create waithandle for minimum splash duration &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;_initReadyEvent = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;AutoResetEvent&lt;/span&gt;(&lt;span style="color:blue;"&gt;false&lt;/span&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;_uiReadyEvent = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;AutoResetEvent&lt;/span&gt;(&lt;span style="color:blue;"&gt;false&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;So the next thing that happens is the UI thread gets created, and the &lt;em&gt;WaitHandle&lt;/em&gt; is used to hold further work until its live. (imagine the scenario where a status message gets sent to the UI thread while it isn&amp;#39;t ready, waiting is probably good here). The &lt;em&gt;SplashForm&lt;/em&gt; is also passed in as a &lt;em&gt;Type&lt;/em&gt; instead of an instantiated class. The form cannot be instantiated yet, because that needs to happen on the UI thread which isn&amp;#39;t created yet when the application starts. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt; uiThread = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(UIThreadMethod); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;uiThread.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;UI Thread&amp;quot;&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;uiThread.SetApartmentState(_apartmentState); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;uiThread.Start(splashFormType); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (_uiReadyEvent.WaitOne(&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;(0, 1, 0), &lt;span style="color:blue;"&gt;false&lt;/span&gt;) == &lt;span style="color:blue;"&gt;false&lt;/span&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;ShutdownUIThread();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ApplicationException&lt;/span&gt;(&lt;br /&gt;&lt;span style="color:#a31515;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;quot;The UI did not initialize in a timely fashion.&amp;quot;&lt;/span&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;Next the initialization thread gets created. This is the one that will call your initialization method. When your initialization is done, the thread will signal the startup thread that it is finished. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;color:green;font-family:Consolas;"&gt;// Create initialization data &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;ApplicationInitData&lt;/span&gt; initData = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ApplicationInitData&lt;/span&gt;(); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;initData.FinishedEvent = _initReadyEvent; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;initData.InitCallback = applicationInitMethod; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;initData.CommandlineArgs = (&lt;span style="color:blue;"&gt;string&lt;/span&gt;[])args.Clone(); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;color:green;font-family:Consolas;"&gt;// Fire up initialization thread &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt; initializationThread = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(ApplicationInitMethod); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;initializationThread.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Application Init Thread&amp;quot;&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;initializationThread.Start(initData);&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;Next is the easy part. The startup thread will wait on the initialization thread to complete, after it has waited for the minimum duration. You can specify how long the waits should be. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;color:green;font-family:Consolas;"&gt;// now wait for minimum duration &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (_minimalSplashDuration &amp;gt; 0) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Thread&lt;/span&gt;.Sleep(_minimalSplashDuration); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;color:green;font-family:Consolas;"&gt;// now wait for init to complete &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (_initReadyEvent.WaitOne(&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;(0, _maxWaitForInitDuration, 0), &lt;span style="color:blue;"&gt;false&lt;/span&gt;) == &lt;span style="color:blue;"&gt;false&lt;/span&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ApplicationException&lt;/span&gt;(&lt;br /&gt;&lt;span style="color:#a31515;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;quot;The application did not initialize in a timely fashion.&amp;quot;&lt;/span&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;The Run method finishes with checking for errors, and switching to the application&amp;#39;s main form. This of course needs to be done on the UI thread since controls like to be on the same thread always. First a check occurs to see if initializing the application resulted in an error. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (_initException != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;ShutdownUIThread();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;throw&lt;/span&gt; _initException; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;MainForm.Invoke(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ToggleToMainFormCallback&lt;/span&gt;(ToggleToMainForm), &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;uiInitMethod, args); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (_initException != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;ShutdownUIThread();&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;throw&lt;/span&gt; _initException; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;UI Thread &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The UI thread method that is used is rather simple. You find the same code as in the normal Main method from Visual Studio, plus some extra bits to fit it in the model. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; UIThreadMethod(&lt;span style="color:blue;"&gt;object&lt;/span&gt; parameter) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.EnableVisualStyles();&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.SetCompatibleTextRenderingDefault(&lt;span style="color:blue;"&gt;false&lt;/span&gt;);&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Form&lt;/span&gt; splashForm =&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Form&lt;/span&gt;)&lt;span style="color:#2b91af;"&gt;Activator&lt;/span&gt;.CreateInstance((&lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt;)parameter);&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;MainForm = splashForm;&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;_uiReadyEvent.Set();&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.Run(&lt;span style="color:blue;"&gt;this&lt;/span&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Init Thread &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Initialization thread method is not more complex. &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; ApplicationInitMethod(&lt;span style="color:blue;"&gt;object&lt;/span&gt; parameter) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;ApplicationInitData&lt;/span&gt; initData = (&lt;span style="color:#2b91af;"&gt;ApplicationInitData&lt;/span&gt;)parameter;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;try&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;initData.InitCallback(initData.CommandlineArgs,&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SafeSendMessageCallback&lt;/span&gt;(SafeSendMessage));&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; e)&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;{&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;_initException = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;InitializationException&lt;/span&gt;(&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:#a31515;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;quot;An error occured during application initialization&amp;quot;&lt;/span&gt;,&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;e);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;initData.FinishedEvent.Set(); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12pt;font-family:Consolas;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;That&amp;#39;s it, and that&amp;#39;s that. A handy class that can help you do a good splash screen keeping responsive and providing the feature set that I need. &lt;a href="http://blogs.infosupport.com/files/folders/12717/download.aspx"&gt;Download a demo here.&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Hope it helps. &lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12718" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Package Explorer" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Package+Explorer/default.aspx" /></entry><entry><title>Package Explorer Start Page - How to use Win32 resources and the res:// protocol from .NET</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/08/25/Package-Explorer-Start-Page-_2D00_-How-to-use-Win32-resources-and-the-res_3A002F002F00_-protocol-from-.NET.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/08/25/Package-Explorer-Start-Page-_2D00_-How-to-use-Win32-resources-and-the-res_3A002F002F00_-protocol-from-.NET.aspx</id><published>2007-08-25T10:08:00Z</published><updated>2007-08-25T10:08:00Z</updated><content type="html">&lt;p&gt;One of the cool new features that I am working on for RC2 of Package Explorer is a start page that is presented when the application starts. Because of the graphical nature of these startpages many applications like IDEs choose to use an HTML page that is displayed in a WebBrowser control of some sort. I of course wanted to do the same and bumped in to some interesting hurdles for which I didn&amp;#39;t find a fix that I liked. So, here&amp;#39;s my solution for doing this. (Did I mention that Package Explorer is starting to get really cool, and it&amp;#39;s got some nifty pieces of code as well, like the Main routine)&lt;/p&gt;&lt;p&gt;First of all, a screenie (mind you, it is a work in progress, as it appears the transparency isn&amp;#39;t quite transparent)&lt;/p&gt;&lt;p&gt;&lt;img height="505" src="http://blogs.infosupport.com/photos/wouterv/images/12713/original.aspx" width="679" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;And yes, I have &lt;a href="http://blogs.balliauw.be/blogs/maarten/"&gt;Maarten&lt;/a&gt; to thank for designing this. I really suck at it, so his designs are very welcome. Thanks Maarten!&lt;/p&gt;&lt;p&gt;Now the issue. Personally I don&amp;#39;t like to have resource files loose on disk. I like to embed them in the DLL and only have one file to deploy.&amp;nbsp;I at least like that for not frequently changing resources. For the startpage this would mean I need to embed the HTML (no problem) and the images (hmmm). To access the images inside the DLL I planned to use the res:// protocol. It can access resources in a DLL for just this purpose (and many others I would suspect). The downside, a .NET embedded resource is different from a Win32 embedded resource which the res:// protocol handler understands in IE. There are tools that you can use to embed resources manually after the build, but I am a programmer and I don&amp;#39;t like to do things manually. I bet you don&amp;#39;t either :)&lt;/p&gt;&lt;p&gt;My solution? I have a separate project for the start page HTML and images. The first task is to allow Win32 resources to appear in the .NET DLL. The CSC compiler has a switch to allow you to do just this. You can edit the CSPROJ project file to tell Visual Studio to use this switch and select the right resource file for the compilation. You can edit the project file using&amp;nbsp; Notepad or something. Visual Studio will detect the change and ask you to reload the project.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp; &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Win32Resource&amp;gt;StartPage.res&amp;lt;/Win32Resource&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/PropertyGroup&amp;gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;That&amp;#39;s step 1, now to get a .RES file. This is rather easy and can be neatly integrated into the build. The RC.exe compiler can take a .RC file to compile into a .RES file. So it&amp;#39;s just two easy steps to make it work. First you create a .RC file for the resource compiler:&lt;/p&gt;&lt;p&gt;&lt;em&gt;Background.bmp Bitmap &amp;quot;Background.bmp&amp;quot;&lt;br /&gt;FieldsetBackGround.bmp Bitmap &amp;quot;FieldsetBackGround.bmp&amp;quot;&lt;br /&gt;FieldsetLabelBackGround.bmp Bitmap &amp;quot;FieldsetLabelBackGround.bmp&amp;quot;&lt;br /&gt;Logo.bmp Bitmap &amp;quot;Logo.bmp&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Next you add a prebuild commandline to the poject using Visual Studio.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;quot;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\rc&amp;quot; /r &amp;quot;$(ProjectDir)StartPage.rc&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;That&amp;#39;s it. You can now just compile the project and it will first compile a .RES file from the resource definition and this .RES file will be embedded into the DLL automatically.&lt;/p&gt;&lt;p&gt;Now the cool thing is that you cannot only reference the embedded resources using the normal tags such as IMG&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;img src=&amp;quot;res://PackageExplorer.StartPage.dll/#2/LOGO.BMP&amp;quot; /&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;But you can also reference the resources from CSS (at least in IE that I am aware of)&lt;/p&gt;&lt;p&gt;&lt;em&gt;fieldset &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background-image: url(res://PackageExplorer.StartPage.dll/#2/FIELDSETBACKGROUND.BMP);&lt;br /&gt;}&amp;nbsp;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;No more clutter on the harddrive and the possible deletion&amp;nbsp;/ change by Joe User.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Hope it helps.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12714" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Package Explorer" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Package+Explorer/default.aspx" /></entry><entry><title>75% approve in the States</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/08/24/75_2500_-approve-in-the-States.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/08/24/75_2500_-approve-in-the-States.aspx</id><published>2007-08-24T08:21:00Z</published><updated>2007-08-24T08:21:00Z</updated><content type="html">&lt;p&gt;Just in:&lt;/p&gt;&lt;p&gt;&lt;a href="http://ballot.itic.org/itic/tallyvote.taf?function=vote&amp;amp;committee=INCITS&amp;amp;ballot_id=2341&amp;amp;_UserReference=96EBDF227BF339D246CE4E20"&gt;http://ballot.itic.org/itic/tallyvote.taf?function=vote&amp;amp;committee=INCITS&amp;amp;ballot_id=2341&amp;amp;_UserReference=96EBDF227BF339D246CE4E20&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It appears that the INCITS will move to vote Approve with Comments. The latest ballot resulted in 12 approves, 3 disapprove and 1 abstain. The disapprovers? IBM and Oracle most notably... :) &lt;/p&gt;&lt;p&gt;And I bet that those 12 approvers will expect their comments to be addressed!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12709" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /><category term="ISO" scheme="http://blogs.infosupport.com/wouterv/archive/tags/ISO/default.aspx" /></entry><entry><title>A funny spin</title><link rel="alternate" type="text/html" href="http://blogs.infosupport.com/wouterv/archive/2007/08/22/A-funny-spin.aspx" /><id>http://blogs.infosupport.com/wouterv/archive/2007/08/22/A-funny-spin.aspx</id><published>2007-08-22T18:31:00Z</published><updated>2007-08-22T18:31:00Z</updated><content type="html">&lt;p&gt;While checking up on my RSS feeds I came across this one which has a great quote.&lt;/p&gt;&lt;p&gt;&amp;quot;So we have language. And, although specialists may disagree, the English language allows us to express ourselves effectively. I propose to abolish all other languages and make the English language the only language. Or perhaps, better than that, I would like to go back to the original Neanderthal language as that was the first language in use and all other languages have no place trying to compete with Neanderthal.&amp;quot; &lt;/p&gt;&lt;p&gt;Haha, indeed, I vote approve!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://vacant.spaces.live.com/blog/cns!2526F2136E321C7E!287.entry"&gt;http://vacant.spaces.live.com/blog/cns!2526F2136E321C7E!287.entry&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=12696" width="1" height="1"&gt;</content><author><name>wouterv</name><uri>http://blogs.infosupport.com/members/wouterv.aspx</uri></author><category term="Open XML" scheme="http://blogs.infosupport.com/wouterv/archive/tags/Open+XML/default.aspx" /></entry></feed>