<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.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>The Wayward WebLog : XML</title><link>http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx</link><description>Tags: XML</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Xen meets its Omega</title><link>http://blogs.msdn.com/mattwar/archive/2004/07/14/183096.aspx</link><pubDate>Wed, 14 Jul 2004 16:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:183096</guid><dc:creator>mattwar</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/183096.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=183096</wfw:commentRss><description>&lt;P&gt;I got a surprise in my inbox this morning.&amp;nbsp;&amp;nbsp; An email from Erik Meijer read:&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The impossible has happened: X# became Xen, Xen became Comega, and Comega has shipped.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;A href="http://www.research.microsoft.com/research/downloads/default.aspx" target=_blank&gt;http://www.research.microsoft.com/research/downloads/default.aspx&lt;/A&gt;. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Enjoy&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Matt&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=183096" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Rave/default.aspx">Rave</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category></item><item><title>X#: There and back again</title><link>http://blogs.msdn.com/mattwar/archive/2004/03/26/97015.aspx</link><pubDate>Fri, 26 Mar 2004 19:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:97015</guid><dc:creator>mattwar</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/97015.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=97015</wfw:commentRss><description>&lt;P&gt;It looks like X# might just see the light of day afterall, as the foundation of a even more ambitious research language from Microsoft.&amp;nbsp;&amp;nbsp;This &lt;A href="http://www.devsource.ziffdavis.com/article2/0,1759,1532883,00.asp"&gt;article&lt;/A&gt; actually gets most of all the facts right.&amp;nbsp; Except it doesn't mention my brilliance anywhere.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;X# == Xen == C Omega == X Omega&lt;/P&gt;
&lt;P&gt;If you have a good idea for a new c# based language, just make up an appropriate sounding name and add it to the list!&lt;/P&gt;
&lt;P&gt;Matt &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=97015" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/SQL/default.aspx">SQL</category></item><item><title>XML:  Schema Breeds Intolerance</title><link>http://blogs.msdn.com/mattwar/archive/2004/03/24/95790.aspx</link><pubDate>Thu, 25 Mar 2004 06:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:95790</guid><dc:creator>mattwar</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/95790.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=95790</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I was at an offsite a while ago where a bunch of us got together to talk about some technology thing, some potential product or what not, that may not see the light of day for a while.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I had a chance to give a presentation on some of my forays into data query languages.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Of course, there were other presentations too, and mine was not the first, so as I sat there admiring the Hotel&amp;#8217;s wireless net connection, googling for random words, thinking about work related things, and paying full attention to the current talk by making use of my many &lt;A href="http://blogs.msdn.com/mattwar/archive/2004/03/20/93122.aspx#FeedBack"&gt;co-processors&lt;/A&gt;, out of the corner of my eye I notice a slip of paper with tiny square stickers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They were our parking validation stickers, left by the hotel management, which is an important thing if you don&amp;#8217;t want to get stuck paying to get your car out at the end of the day.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Now I have a whimsical mind that favors pedantic puns, and so it is often spinning extra cycles in the background on odd word associations.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;One of the reasons my wife often asks what&amp;#8217;s on my mind is that she knows there&amp;#8217;s usually something brewing, and of course she is right because quite often for apparently no reason I will just start spouting some obscure joke or quip.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;She&amp;#8217;s a good sport and tries to laugh at most of them, though it also makes her wonder how much time I actually spend trying to dream them up, but that&amp;#8217;s not how it works at all.. They just sort of pop up out of thin air.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I&amp;#8217;m telling you it&amp;#8217;s the &lt;A href="http://blogs.msdn.com/mattwar/archive/2004/03/20/93122.aspx#FeedBack"&gt;co-processors&lt;/A&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They are always churning out stuff.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Anyway, my bank of x86&amp;#8217;s apparently slid the word &amp;#8216;validate&amp;#8217; over to meet the word the &amp;#8216;data&amp;#8217; in a mental re-enactment of a bad episode of the electric company and I get spun in the direction of thinking about XML Schemas.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Now, just tell me the truth, wouldn&amp;#8217;t you?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Of course you would. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;That&amp;#8217;s the first thing that comes to mind when thinking about data validation.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You do validate your data, don&amp;#8217;t you?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I mean, you wouldn&amp;#8217;t want just any old data to come slinking in off the street and set up shop in your application?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Would you?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;To tell you the truth, I&amp;#8217;m not sure anymore.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I mean, there are plenty of good reasons to have schema&amp;#8217;s around.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They describe your data layout.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For things like WSDL, they give you a &amp;#8216;crisp&amp;#8217; contract for describing how data is passed between interfaces, etc.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can feed them into tools that do code generation to build you proxies and data structures.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But this is all really just static stuff you do with schemas.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It&amp;#8217;s not really runtime stuff.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;You probably don&amp;#8217;t use the schema information itself at runtime. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;If your app is sucking in data using the XmlReader or the DOM, then your app is probably structured around the data you expect anyway.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It probably reads and recognizes particular tags in particular namespaces.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It probably queries into documents looking for those very specific names.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So what if there might be stuff inside that your app does not recognize.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Isn&amp;#8217;t that the whole point of XML in the first place?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Doesn&amp;#8217;t it allow you to build applications that are resilient to change and that rare unexpected integer?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What good does it do to actually pay the overhead of validating your data stream against the actual physical schema when your app is only going to grovel over what it understands anyway?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;It seems that getting overly anal about schema just leads to making apps brittle, and that should be a bad thing.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We should work on making apps more tolerant of each other.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Live and let live, I say.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Matt&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=95790" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx">XML</category></item><item><title>Navigating the XPath of Life</title><link>http://blogs.msdn.com/mattwar/archive/2004/03/17/91729.aspx</link><pubDate>Thu, 18 Mar 2004 06:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:91729</guid><dc:creator>mattwar</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/91729.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=91729</wfw:commentRss><description>&lt;P&gt;Brian Noyles &lt;A href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=4f08aefd-dbc3-4d1a-bc6e-874ec872feff"&gt;blogs about the XPathNavigator&lt;/A&gt;, and how it has improved his life.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#0000ff&gt;I spoke last night at the Central Pennsylvania Users Group in Harrisburg, PA. They have a great group and about 35 folks turned out despite snow and nasty weather. Judy Calla is the group lead and gave a nice little beginners talk on debugging and error handling in .NET applications. I then jumped in with a talk on querying XML data in .NET.&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The primary function of the XPathNavigator is to act as a common plug-in point for xpath/xslt query processing.&amp;nbsp; It is the query equivalent to the XmlReader.&amp;nbsp;&amp;nbsp; We built the XPathDocument pretty late in the game right before .Net framework 1.0 shipped.&amp;nbsp; It was basically a perf thing.&amp;nbsp; We were beating ourselves up trying to get better perf out of the DOM, but were reaching the limit to what we could do with that model.&amp;nbsp; It was when we realized that most of what was slowing us down was baggage from the DOM like sequences of text nodes and entity expansion, things that had no representation in the XPath model.&amp;nbsp; The XPathDocument is optimized for xpath query because it gets rid of anything that doesn't fit, so there is no impedence mismatch.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;It also didn't hurt to assign identity to each node in increasing order right a load time. This makes it incredibly fast to keep the nodes straight, especially when wacky coders start using strange axes. Because the XmlDocument was editable, it couldn't keep a zero cost ordering scheme.&amp;nbsp; Let's hope the new XPathDocument stays as fast, even with its new editing capability.&lt;/P&gt;
&lt;P&gt;See, I can actually post something that links to someone else's blog.&amp;nbsp; Who knows, yours may be next.&lt;/P&gt;
&lt;P&gt;Matt&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=91729" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx">XML</category></item><item><title>XML: Getting dirty with BMX</title><link>http://blogs.msdn.com/mattwar/archive/2004/03/10/87445.aspx</link><pubDate>Wed, 10 Mar 2004 19:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:87445</guid><dc:creator>mattwar</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/87445.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=87445</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Years ago there was a time when I thought XML was evil.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That was back when the whole idea was pretty new to my ears.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The only introduction I&amp;#8217;d had to it was a few examples being shown around by Adam Bosworth when he&amp;#8217;d come to our group and try to convince us to redo &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;ADO&lt;/st1:place&gt;&lt;/st1:City&gt; and SQL server to support XML as a transport.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Of course, I thought it was a really bad idea at the time.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;After all, we had just gone through a lot of pain enabling Unicode in the transport layer and we were getting a lot of flak for it. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;No one liked the downside that it took more bandwidth.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;But Adam persisted, and I became notorious.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;He would show up at a meeting trying to convince our dev manager or product unit manager and see me there along with everyone else.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;#8220;Oh, it&amp;#8217;s you again,&amp;#8221; he would snarl at me as he entered the room.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Adam would remind us of all the benefits of XML, how it was unstructured but discoverable.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;At the time I wondered how this was really any different than HL-7, but mostly I was skeptical how we would benefit by replacing a binary format that we owned on both ends.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Still, I was an engineer, so as an engineer I tend to try to solve problems.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So I took what Adam described as the strong points of XML and was hell bent on developing an equivalent binary format that worked instead. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I put a lot of effort into trying to make certain that it could both capture hierarchy and be fully discoverable and even contain tags, but at the same time, if your data was highly regular then the additional bandwidth cost would be nominal.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When I presented this gem to Adam and his team it was immediately shot down.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Apparently, I didn&amp;#8217;t get it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;XML was text.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Andrew Layman assured us that the W3C or someone was busily working on an official binary format, and that it was a heated debate.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We certainly shouldn&amp;#8217;t waste any effort duplicating that or trying to invent or own proprietary form of XML.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So I put the spec aside and forgot about it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Eventually I even lost the files due to a mishap and so no record was left that I even attempted it except for the idea still floating around in my head.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Of course, a few years later, a strange twist of fate had me developing parts of the XML frameworks for .Net.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;By that time, I had changed my mind.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I had forgotten about the bandwidth problem, as I just didn&amp;#8217;t care about it anymore.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Pipes got fatter.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Size was not really an issue.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Yet, then came the long death-march, the stabilization period for version 1.0 of the frameworks.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We were fixing bugs like crazy and doing tons of perf work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We met the goals we were shooting for, but I always thought we could do more.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;At this time I started up an internal effort called &amp;#8216;TenX&amp;#8217;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;TenX was focused on taking performance to the next level.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The idea was to throw out any pre-conceived notions about how to solve the particular problems that plagued us.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The goal was to do miraculous things that would improve performance by an order of magnitude.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Through this effort I encouraged most of our top developers to think outside the box and find new solutions.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Maybe the solutions would only solve edge cases, but even edge cases are useful to someone.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;One idea I had was to improve the speed of the XML parser.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Sure, I made many attempts at re-writing the parser itself, and one day I&amp;#8217;ll even share a faster parser with you.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But I also had this crazy idea that if the XML was already mostly parsed, it would scream.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You see, I knew that much of the cost of parsing came from doing various validations and fumbling over characters one by one.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If I could throw out most of that, maybe I could double or triple the speed of reading it in.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So I went back to the old binary XML idea.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If I could invent a format that was easier to parse than XML, it would be a big win. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So I revived&amp;nbsp;BMX&amp;nbsp;and went to work making a prototype that I could put to the test.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What I came up with was very different than the original.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is actually just a tokenized stream, because decoding tokens is extremely fast and why mess with the text itself?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The big news is BMX encoded files read faster than XML text, approximately 10 times faster!&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I&amp;#8217;m happy to be able to share this with everyone.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Feel free to criticize my programming skills if you&amp;#8217;d like.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There is extra stuff in there that I was experimenting with but not entirely germane.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are also many functions that are stubbed off with not-implemented-yet exceptions.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;Take a look at the code.&amp;nbsp; It's&amp;nbsp;&lt;A href="http://www.geocities.com/wuzzard00/bmx.txt"&gt;here&lt;/A&gt; all crammed into a single file for your downloading pleasure.&amp;nbsp; All the comments with foul language have been removed.&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;Enjoy&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;Matt&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=87445" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Code/default.aspx">Code</category></item><item><title>The XML Conspiracy</title><link>http://blogs.msdn.com/mattwar/archive/2004/02/10/the-xml-conspiracy.aspx</link><pubDate>Wed, 11 Feb 2004 07:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:71085</guid><dc:creator>mattwar</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/71085.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=71085</wfw:commentRss><description>&lt;P&gt;I really shouldn't be telling you this.&amp;nbsp; It will probably get me into a lot of trouble.&amp;nbsp; Still, its not like a lot of people are reading this, so I might as well open up for once and tell you the straight scoop.&amp;nbsp; XML was a hoax.&amp;nbsp; This is real.&amp;nbsp; Not many people know this.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Years ago, before I came to work at Microsoft, I used to be one of those people that liked to grumble about technology, especially things about the operating systems I didn't like. Others at the company where I worked were liked minded, so often we sat around at lunch and griped about whatever was on our minds.&amp;nbsp; Now, it wasn't always griping about lame hardware or software, sometimes we griped about what we disliked about our own jobs.&amp;nbsp; Ya, I know, hard to believe.&amp;nbsp; We'd often get into debates over coding styles and programming languages.&amp;nbsp; Whenever someone brought up a new programming language they knew about, I aways fought back and said things like “LISP could do that years ago.&amp;nbsp; What's so new?”&amp;nbsp; These debates went on for hours.&lt;/P&gt;
&lt;P&gt;One day a very particular topic arose.&amp;nbsp; Many of us had just read in PC Week about a change Intel was making to their 486 processor, to bring out a lower end model.&amp;nbsp; Apparently, they took a little laser and zapped out the math co-processor.&amp;nbsp; So in effect, you got a 486 chip with all the modern instructions, you just got sucky math.&amp;nbsp; I think they called it the 486SX, where SX stood for 'sucks.'&amp;nbsp; Anyway, I recall being livid about it at the time, and that's when I had my unfortunate slip of tongue.&amp;nbsp; I shouted, red faced, “They might as well bring out a low end version of LISP.&amp;nbsp; Sure, just burn out the execution engine!“&amp;nbsp; That got a few laughs from most everyone.&amp;nbsp; Except this one guy, Paul.&amp;nbsp; Well, to tell the truth, I don't recall anytime when he did laugh.&amp;nbsp; He was one of those guys who was always over-serious, over-passionate about any topic.&amp;nbsp; He just looked at me and waited for the laughter to die down, and then he said, “what do you mean?“&lt;/P&gt;
&lt;P&gt;So I guess I just started to ramble off an explanation.&amp;nbsp; I just made it up on the spot.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;“You know,“ I said. “Take out all of the operators.“&amp;nbsp;&lt;/P&gt;
&lt;P&gt;“Why would you do that?“&amp;nbsp; This was one clueless dude.&lt;/P&gt;
&lt;P&gt;“So you'd just have the data.&amp;nbsp; Now wouldn't that be dumb.“&lt;/P&gt;
&lt;P&gt;You see, one of the really cool things about LISP is that code and data were stored in the same representation.&amp;nbsp; LISP had this really simple form used to describe both.&amp;nbsp; A LISP program was basically a bunch of nested lists of identifiers.&amp;nbsp; Each list was surrounded by a pair of parentheses.&amp;nbsp; If you imagine back to those really ugly examples of type casts done in C programs where you just had parens going everywhere, then you'd start to see what a LISP program looked like.&amp;nbsp; It was a mess to the untrained eye, but to me it was beautiful.&amp;nbsp; It could describe everything.&lt;/P&gt;
&lt;P&gt;Why this was so ridiculous to me, was at that time the computer industry was just then coming to terms with the new idea of object-oriented programming.&amp;nbsp; The whole benefit was being able to couple behavior with data.&amp;nbsp; The holy grail of the entire industry was a phantom chase after something that already existed in its purest form; LISP.&amp;nbsp; So you can see the joke.&amp;nbsp; LISP without code was just plain ridiculous.&amp;nbsp; It was like rolling back the clocks.&amp;nbsp;We might as well go back to computers with punch cards.&lt;/P&gt;
&lt;P&gt;But Paul never&amp;nbsp;got the joke.&amp;nbsp; He was&amp;nbsp;one of those guys in the office that just never understood the humor in a Farside comic.&amp;nbsp; He thought I was being serious.&amp;nbsp; He would come back to me every now and then and asked more questions about code-less LISP.&amp;nbsp; So I strung him along.&amp;nbsp; Everyone thought it was a good gag.&amp;nbsp; Still even Paul eventually started to&amp;nbsp;doubt what you would use this codeless LISP for, so in spirit of a good prank I kept feeding him tempting justifications.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;“Look,” I would tell him.&amp;nbsp; “Even though there's no code there, you can still manipulate the data using another language.&amp;nbsp; Its a perfect text representation of information, and you don't even have to build a parser, it comes built into&amp;nbsp;the codeless LISP engine.”&lt;/P&gt;
&lt;P&gt;Sometimes I carry a joke too far.&amp;nbsp; One day I will tell you about the satellite tracking system, or my brother will since he seems to read my posts a lot and he was in on that one.&amp;nbsp;I wanted to show Paul the magic of a truly running codeless lisp engine.&amp;nbsp; So I took the public domain XLISP source code and just sort of yanked out all the operators, and made the 'quote' function the default.&amp;nbsp; Then I slapped a couple of exported functions into it and built it as a link library.&lt;/P&gt;
&lt;P&gt;“See,“ I told Paul when I was done, “all you have to do is link up to the XLISP library, and you can feed it your files at runtime, what you get back is this tree structure and a bunch of functions for manipulating the tree.“&amp;nbsp; I had some sample 'data' in a '.XLP' file.&amp;nbsp; It always makes things seem more 'real' when you&amp;nbsp;go to extreme levels of detail like making up a new file extension.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I wrote a sample program that showed him that I could 'read' the data w/o first knowing what its structure is.&amp;nbsp; “Wow,“ was all he could say.&amp;nbsp; And even the sample program was&amp;nbsp;a joke.&amp;nbsp; There was no such thing as not-needing to know what the structure was.&amp;nbsp; So what if I could 'read' it into memory.&amp;nbsp; My code still had to know what to expect.&lt;/P&gt;
&lt;P&gt;Eventually, I just couldn't take it anymore.&amp;nbsp; Even I had a limit on how far I could dupe someone, so I just stopped.&amp;nbsp; I didn't try to convince him it was a joke.&amp;nbsp; He wouldn't have believed me.&amp;nbsp; So I just stopped talking about it. &lt;/P&gt;
&lt;P&gt;Years later, I was working at another company when I got a call from Paul.&amp;nbsp; He had tracked me down through another co-worker that I had kept in contact with.&amp;nbsp; Apparently, he wanted to know if I still had that sample program, and the codeless XLISP.&amp;nbsp; I had to dig it up off a 5 1/4, but I found it.&amp;nbsp; Apparently Paul was now working with this guy named Tim, and Tim was even nuttier than Paul.&amp;nbsp; Tim had thought this data-without-code thing was a great idea.&amp;nbsp; They were starting up some 'standards body' to manage its design.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I sent them the code, but I made them promise to leave me out of it and to call it something else.&amp;nbsp; After all, one day they'd eventually see how stupid it all was and try to blame me.&lt;/P&gt;
&lt;P&gt;But I digress&lt;/P&gt;
&lt;P&gt;Matt ;-)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=71085" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Humor/default.aspx">Humor</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx">XML</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/Fiction/default.aspx">Fiction</category></item><item><title>The XML Pull</title><link>http://blogs.msdn.com/mattwar/archive/2004/02/07/69523.aspx</link><pubDate>Sun, 08 Feb 2004 06:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:69523</guid><dc:creator>mattwar</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/mattwar/comments/69523.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mattwar/commentrss.aspx?PostID=69523</wfw:commentRss><description>&lt;P&gt;What's all the hubbub about Microsoft's XML patents?&amp;nbsp; It's not as if the company is trying to patent XML itself.&amp;nbsp; You'd think by all the noise being stirred up over it that Microsoft was trying to steal milk from babies. And believe me, they are not.&amp;nbsp; In fact,&amp;nbsp;Microsoft GIVES milk to babies.&amp;nbsp;When my son was still a baby he frequently received free milk from&amp;nbsp;Microsoft.&amp;nbsp; It's right there in the coolers with the free Coke.&amp;nbsp; On days that I brought him to work, if I was a little&amp;nbsp;busy&amp;nbsp;entering loopholes for viruses into the operating system he might&amp;nbsp;take it upon his own initiative to crawl down the&amp;nbsp;hall to the kitchenette where he would&amp;nbsp;grab himself one or two&amp;nbsp;cartons of delicious, all&amp;nbsp;American&amp;nbsp;FREE milk.&lt;/P&gt;
&lt;P&gt;Now you might be wondering if he stuck to&amp;nbsp;just&amp;nbsp;milk alone, because believe it&amp;nbsp;or not, there is free&amp;nbsp;juice as well; apple, orange AND berry.&amp;nbsp; It would be a fair assumption to make, since children tend to like juice as much as they like milk.&amp;nbsp; But Charlie, he likes his milk, and he likes it warm.&amp;nbsp; My wife fooled him one day when he asked for hot-cocoa.&amp;nbsp; Instead she just gave him warm milk.&amp;nbsp; He was a pleased as punch.&amp;nbsp; Which is sometimes difficult to do when there is no actual punch involved.&amp;nbsp; So that leads you to the next logical question.&amp;nbsp; Just how does he operate the microwave to heat his own milk?&amp;nbsp; Luckily, he was&amp;nbsp;not often the only baby in the kitchenette getting milk.&amp;nbsp; Sometimes when a group of three or more are there together, they team up and build a human (albiet babyish) ladder up to the top of the counter.&amp;nbsp; Charlie was a&amp;nbsp;smart little guy at nine months.&amp;nbsp; He knew and could use over twenty different sign-language signs and could operate the VCR.&amp;nbsp; Believe me, pressing the 'cook 1 more minute' button on the microwave was easy to teach him.&amp;nbsp; We usually let him do it at home anyway, and that one has many more buttons.&amp;nbsp; You should have seen when he tried to defrost an ice-cream sandwich.&amp;nbsp; It was a hoot.&lt;/P&gt;
&lt;P&gt;Sometimes, watching him figure things out for the first time gave me ideas.&amp;nbsp; For example, when he first figured out that the nesting boxes had other boxes inside, and so on.&amp;nbsp; It brought a smile to his face, as well as mine.&amp;nbsp; I immediately saw the simplicity in the recursion, and that led me to a big break-through in the design of .Net XSLT engine.&amp;nbsp; I began to see signs in&amp;nbsp;other toys that he played with.&amp;nbsp; The DUPLO was a dead give away.&amp;nbsp; Interfaces between components should be interlocking.&amp;nbsp;You should have been there when the light-bulb went off in my head.&amp;nbsp; He was pulling a rope tied to a small wooden wagon.&amp;nbsp; The answer seemed obvious.&amp;nbsp; The .Net XML components should rely on pull-model parsing.&amp;nbsp; Any baby knew it was easier to pull than to push.&amp;nbsp; All XML components should interlock amongst each other using a standard pull-model abstraction.&amp;nbsp; It was brilliant.&amp;nbsp; I began to wonder if he was somehow trying to communicate this all to me and more.&lt;/P&gt;
&lt;P&gt;I knew what I had to do.&amp;nbsp; I went to work and the rest is history.&amp;nbsp; The .Net frameworks shipped with Charlie's innovative ideas.&amp;nbsp;I knew that one day he should reap the reward for what he had contributed to computer science and the world.&amp;nbsp; I wrote up patents for these XML related technologies and that was that.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Of course, I was duped.&amp;nbsp; The fine print in my employment agreement spelled it all out.&amp;nbsp; When I put my John Hancock to the document, I ignorantly agreed to hand over all my inventions to the company.&amp;nbsp; They got the patents from me without even a struggle.&amp;nbsp; Sure they deposited a small sum into my bank account, but all I really got left with was a few black-lucite cubes in my office with the names of the patents pending.&amp;nbsp; My son was barely a year old, and already he had gotten scr****d by the MAN.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Uh, so maybe they did take milk from a baby afterall.&lt;/P&gt;
&lt;P&gt;But I digress&lt;/P&gt;
&lt;P&gt;Matt&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=69523" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mattwar/archive/tags/Humor/default.aspx">Humor</category><category domain="http://blogs.msdn.com/mattwar/archive/tags/XML/default.aspx">XML</category></item></channel></rss>