XML/XSL Portal

Multiple Stylesheet Aware
HideXML SpecificationsHide

The following feeds are currently available for adding to your navigation bar.

+ Signs on the Sand
Signs on the Sand Wed, 24 Feb 2010 22:27:10 +0200 MovableType 4.21-en

Install Visual Studio 2010 RC and report bugs ASAP – it might be not too late to fix!

749@http://www.tkachenko.com/blog/ Wed, 24 Feb 2010 22:27:10 +0200 <p><a href="http://www.tkachenko.com/blog/WindowsLiveWriter/InstallVisualStudio2010RCandreportbugsAS_13D83/visual_studio%5B1%5D_4.png"><img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="visual_studio[1]" border="0" alt="visual_studio[1]" align="left" src="http://www.tkachenko.com/blog/WindowsLiveWriter/InstallVisualStudio2010RCandreportbugsAS_13D83/visual_studio%5B1%5D_thumb_1.png" width="240" height="158" /></a> Visual Studio 2010 Release Candidate <a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx">is available for download</a> (all three editions - Pro, Premium and Ultimate) and I ask you to install it, give a try and more importantly - try your real projects on it. Why bother? Because you can help to make it the best Visual Studio version ever. 10 might become new 6, but these small nasty beasties like <a href="http://blogs.msdn.com/jasonz/archive/2010/02/15/patch-for-touch-screen-intellisense-issue-for-vs2010-rc.aspx">this one</a> can spoil everything. It is not too late to fix crashes and other severe bugs we might have missed. The bug bar is very high now, but crashes in common scenarios and data loss issues still can be fixed by RTM, we just need to know about them ASAP.</p> <p>Here are some more download links:</p> <p>1. <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4659f71d-4e58-4dcd-b755-127539e21147&amp;displaylang=en">Visual Studio 2010 SDK for RC</a></p> <p>2. <a href="http://www.jetbrains.com/resharper/beta/beta.html">ReSharper 5.0 Beta 2</a> for VS2010 RC if you into it</p> <p>3. <a href="http://devexpress.com/Products/Visual_Studio_Add-in/register.xml">CodeRush Beta for VS2010 RC</a> if you can't live without it</p> <p>Again: we desperately need your feedback. File bugs to <a href="http://connect.microsoft.com/visualstudio">http://connect.microsoft.com/visualstudio</a> or just post them here if you feel lazy.</p>
http://www.tkachenko.com/blog/archives/000749.html#comments http://www.tkachenko.com/blog/archives/commentrss/000749.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=749 0 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/751

Two PDC 2008 videos particularly worth watching

748@http://www.tkachenko.com/blog/ Wed, 29 Oct 2008 23:10:41 +0200 <p>From dozens of cool <a href="https://sessions.microsoftpdc.com/public/timeline.aspx">PDC 2008 videos</a> there are two I obviously like the most:</p> <p><img style="margin: 0px 10px 0px 0px; display: inline" align="left" src="http://mschnlnine.vo.llnwd.net/d1/pdc08/THUMBNAILS/TL10.jpg" /> </p> <p>"<a href="http://channel9.msdn.com/pdc2008/TL10/">Deep Dive: Dynamic Languages in Microsoft .NET</a>" by <a href="http://blogs.msdn.com/hugunin">Jim Hugunin</a></p> <p>The CLR has great support for dynamic languages like IronPython. Learn how the new Dynamic Language Runtime (DLR) adds a shared dynamic type system, a standard hosting model, and support for generating fast dynamic code. Hear how these features enable languages that use the DLR to share code with other dynamic and static languages like Microsoft Visual Basic .NET and C#.</p> <p style="clear: left"></p> <p style="clear: left"> <a href="http://channel9.msdn.com/pdc2008/TL44/"><img style="margin: 0px 10px 0px 0px; display: inline" align="left" src="http://mschnlnine.vo.llnwd.net/d1/pdc08/THUMBNAILS/TL44.jpg" /></a> </p> <p><a href="http://channel9.msdn.com/pdc2008/TL44/">"IronRuby: The Right Language for the Right Job</a>" by <a href="http://www.iunknown.com">John Lam</a></p> <p>IronRuby is a new dynamically-typed language for Microsoft .NET that offers more runtime flexibility at the expense of compile-time verification. Find out why this is a good thing in the right situations: static compile-time verification for components that need additional rigor, and dynamic typing for more fluid parts of a program. See how to use dynamic typing to create internal Domain Specific Languages (DSLs) and how to use them for systems that you create.</p> <p style="clear: left"></p>
http://www.tkachenko.com/blog/archives/000748.html#comments http://www.tkachenko.com/blog/archives/commentrss/000748.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=748 0 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/750

The Microsoft Dynamic Languages Team Blogroll

747@http://www.tkachenko.com/blog/ Tue, 28 Oct 2008 01:07:45 +0200 <p>This is Microsoft Dynamic Languages Team, responsible for <a href="http://www.codeplex.com/ironpython">IronPython</a> and <a href="http://www.ironruby.net">IronRuby</a>. Not as big as you might expect for the "<a href="http://www.pluralsight.com/community/blogs/tewald/archive/2008/10/25/learn-a-dynamic-language-now.aspx">most important project at MS today</a>", but 100% blogging! <a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">Dynamic languages are the next big thing</a> so believe me you want to keep an eye on these guys. I compiled an <a href="http://www.tkachenko.com/opml/microsoft-dynamic-languages-team.xml">OPML file for the team</a>, which you can import into your favorite blog reader to subscribe to the whole team in one shot.</p> <p>In no particular order:</p> <ul> <li><a href="http://www.iunknown.com/">John Lam</a> - IronRuby PM</li> <li><a href="http://devhawk.net/">Harry Pierson</a> - IronPython PM</li> <li><a href="http://blog.jimmy.schementi.com/">Jimmy Schementi</a> - PM for Silverlight integration </li> <li><a href="http://blogs.msdn.com/shrib">Shri Borde</a> - dev lead for the team</li> <li><a href="http://blogs.msdn.com/daveremy/">Dave Remy</a> - PM lead fro the team</li> <li><a href="http://www.tkachenko.com/blog/">Oleg Tkachenko</a> - Visual Studio integration</li> <li><a href="http://knowbody.livejournal.com/">Dave Fugate</a> - IronPython tester</li> <li><a href="http://blogs.msdn.com/curth">Curt Hagenlocher</a> - IronPython/IronRuby dev</li> <li><a href="http://blogs.msdn.com/hugunin">Jim Hugunin</a> - architect for the team, <a href="http://www.codeplex.com/dlr">DLR</a> and Visual Studio languages </li> <li><a href="http://blog.tomasm.net">Tomas Matousek</a> - IronRuby dev</li> <li><a href="http://blogs.msdn.com/srivatsn">Srivatsn Narayanan</a> - IronPython/IronRuby tester</li> <li><a href="http://blog.jredville.com/">Jim Deville</a> - IronRuby tester</li> <li><a href="http://blogs.msdn.com/dinoviehland">Dino Viehland</a> - IronPython dev</li> </ul> <p>I still can't believe my name is on the list...</p>
http://www.tkachenko.com/blog/archives/000747.html#comments http://www.tkachenko.com/blog/archives/commentrss/000747.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=747 0 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/749

&quot;Try IronRuby&quot; updated

745@http://www.tkachenko.com/blog/ Tue, 03 Jun 2008 11:10:23 +0200 <p>I've updated <a href="http://ironruby.info/ir/">Interactive IronRuby Web Shell aka Try IronRuby</a> to IronRuby <a href="http://rubyforge.org/pipermail/ironruby-core/2008-June/001956.html">r113</a> engine. This is so manual, I need to implement automatic update.</p> <p>I also added a bit controversial recording feature. I now record everything users type there for security and research purposes.  Security - because &quot;Try IronRuby&quot; is hosted on a shared ASP.NET hosting and if somebody crashes it I need to know how it was done to prevent it in the future.</p> <p>Recording results are live and open at <a title="http://ironruby.info/ir/CodeViewer.aspx" href="http://ironruby.info/ir/CodeViewer.aspx">http://ironruby.info/ir/CodeViewer.aspx</a>.</p> <p>Funny thing - when I started recording I added a disclaimer below the console:</p> <blockquote> <p>Your Ruby code might be recorded for research purposes. No personal data (such as IP address) is ever collected. <a href="http://ironruby.info/ir/CodeViewer.aspx">View what others typed here</a>.</p> </blockquote> <p>Immediately a concerned user with name &quot;Life Liberty Property&quot; posted this comment:</p> <blockquote> <p>While the Try IronRuby piece was cool/fast, the fine print underneath concerns me.</p> <p>It shows signs that Microsoft doesn't get it, their shills don't get it, M$ and cronies refuse to change, they think they own everything, and they are no more open than before: <br />&quot;Your Ruby code might be recorded for research purposes&quot;</p> <p>Do I have to study in detail the MSPL, too, to make sure they don't own everything I write?</p> <p>Man, my trust surely wasn't earned today.</p> <p>You mean that somebody is already trying to take code that isn't theirs? Get a life.</p> <p>What's interesting is that <a href="http://tryruby.hobix.com/">http://tryruby.hobix.com/</a> doesn't pull this stunt. Of course, _why doesn't need my code.</p> </blockquote> <p>I'd better respond.</p> <p>First - sorry for unclear wording. Microsoft obviously doesn't own your Ruby code and IronRuby obviously doesn't record your Ruby Code.</p> <p>Here is a revised disclaimer <a href="http://ironruby.info/ir/">you can see below the console</a>:</p> <blockquote> <p>Everything you type here might be recorded for open research purposes. No personal data (such as IP address) is ever collected. <a href="http://ironruby.info/ir/CodeViewer.aspx">View what others typed here</a>.</p> </blockquote> <p>I hope it's clearer.</p> <p>And second - <a href="http://tryruby.hobix.com/">http://tryruby.hobix.com/</a> does pull this stunt too. And _why does need your code too. <a href="http://redhanded.hobix.com/inspect/205000LinesOfRubyCodeDonatedInTheTryRubyDrive.html">Because it's fun</a>!</p>
http://www.tkachenko.com/blog/archives/000745.html#comments http://www.tkachenko.com/blog/archives/commentrss/000745.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=745 0 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/747

&quot;Dynamic Languages Strike Back&quot; talk by Steve Yegge

743@http://www.tkachenko.com/blog/ Sun, 25 May 2008 11:07:48 +0200 <p align="center"><a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html"><img style="margin: 10px 0px 0px" alt="[thumbnail000.jpg]" src="http://bp0.blogger.com/__0laCHgF5uc/SCfbhsOp-SI/AAAAAAAAACM/4A8Drv7uAvw/s320/thumbnail000.jpg" border="0" /></a></p> <p align="center">Very cool talk by <a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">Steve Yegge</a>, available in video or transcribed form. I particularly enjoyed tooling part:</p> <blockquote> <p>Moving right back along to our <em>simple</em> dynamic languages, the lesson is: it's not actually harder to build these tools [for dynamic languages]. It's different. And nobody's done the work yet, although people are starting to. And actually <a href="http://www.amazon.com/gp/product/1932394443?ie=UTF8&amp;tag=steveysblogra-20&amp;link_code=wql&amp;camp=212361&amp;creative=380601">IntelliJ</a> is a company with this <a href="http://www.jetbrains.com/idea/features/javascript_editor.html">IDEA</a> [IDE], and they... my friends show off the JavaScript tool, you know, and it's like, man! They should do one for Python, and they should do one for every single dynamic language out there, because they kick butt at it. I'm sure they did all this stuff and more than I'm talking about here.</p> </blockquote> <p>I'd add couple more modern IDE tools supporting dynamic languages: NetBeans (<a href="http://blogs.sun.com/tor/category/NetBeans">Javascript/Ruby</a>) and Visual Studio 2008(<a href="http://weblogs.asp.net/scottgu/archive/2007/06/21/vs-2008-javascript-intellisense.aspx">Javascript</a>, IronPython via <a href="http://www.codeplex.com/IronPythonStudio">IronPython Studio</a>). But Steve is completely right - this is just the beginning.</p>
http://www.tkachenko.com/blog/archives/000743.html#comments http://www.tkachenko.com/blog/archives/commentrss/000743.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=743 0 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/745

Hacking IronRuby

742@http://www.tkachenko.com/blog/ Mon, 12 May 2008 12:38:25 +0200 <p><a href="http://www.ironruby.net">IronRuby</a> is coming! Expected to be released this year Microsoft's IronRuby is quite a unique project. Fully open sourced, <a href="http://www.opensource.org/licenses/ms-pl.html">OSI-approved</a>/<a href="http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx">GPL-inspired  license</a>, <a href="http://rubyforge.org/projects/ironruby">hosted at Rubyforge</a>, accepting <a href="http://ironruby.rubyforge.org/wiki/wiki.pl?ContributingToIronRuby">external contributions</a>. Yes, Microsoft's IronRuby. Cool.</p> <p>Anyway, I decided why don't I build IronRuby version of the famous &quot;<a href="http://tryruby.hobix.com/">Try Ruby in your browser</a>&quot; by <a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff">_why</a>? So anybody with 15 free minutes at hands could play with IronRuby. That sounds like cool way to learn IronRuby internals.</p> <p>IronRuby includes ir.exe - nice interactive IronRuby shell. Thanks to <a href="http://rubyforge.org/scm/?group_id=4359">open sources</a> I managed to hack up simple AJAXish Web version in just one night. ASP.NET 3.5 application hosting IronRuby runtime + simple Web console emulating ir.exe.</p> <p>It's hosted at <a href="http://www.ironruby.info/ir">http://www.ironruby.info/ir</a>, currently at version &quot;0.first.hack&quot;. Go play with it, but please don't crash it often. Here is a screenshot for those lazy ones:</p> <p><img src="http://www.tkachenko.com/blog/images/ir.png" /> </p> <p>Hosting a programming language shell on Web poses additional interesting problems. Ruby is a powerful language and IronRuby additionally provides access to the whole .NET framework. Letting anybody writing and executing any programs on my shared hosting??? Well, I managed to make it running under Minimal Trust level, which means execute permissions only. No file system, no network or Web access, nothing. That should be safe enough, but please don't hack me. Learn IronRuby instead!</p> <p>Go <a href="http://www.ironruby.info/ir/">Try IronRuby in your browser</a>.</p> <p>Any comments are welcome!</p>
http://www.tkachenko.com/blog/archives/000742.html#comments http://www.tkachenko.com/blog/archives/commentrss/000742.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=742 7 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/744

Hidden Undocumented Feature of Visual Studio 2008 - Dynamic XSLT Intellisense

740@http://www.tkachenko.com/blog/ Sat, 03 May 2008 08:38:50 +0200 <p>A very little known fact is that Visual Studio 2008 does support real XSLT intellisense - not a static XSLT schema-based one, but real dynamic intellisense enabling autocompletion of template names, modes, parameter/variable names, attribute set names, namespace prefixes etc. </p> <p>For some obscure reason it is off by default and obviously completely undocumented. I'll show you how to turn it on. But before - a little teaser.</p> <p>1. When you about to call a named template you are presented with a list of all named templates in your stylesheet. My favorite feature. Finally you don't have to remember all your template names:</p> <p><img src="http://www.tkachenko.com/blog/images/xslt-intellisense/xslt-intellisense-template-names.png" /></p> <p>2. In XSLT template parameters are passed by name, so when you call a template and want to pass parameters you actually have to know exactly what parameter names are. And you better know them for sure, because if you make a mistake you pass a parameter with wrong name you get no error or even warning. XSLT 1.0 specification allows such nonsense.  That's why template parameter name autocompletion is a real time saver:</p> <p><img src="http://www.tkachenko.com/blog/images/xslt-intellisense/xslt-intellisense-template-param-names.png" /></p> <p>3.  You can pass parameters when applying templates too. Obviously due to dynamic XSLT processing model it's hard to know in advance which template will be matched at run time, so it's hard to suggest list of parameter names. In this version of XSLT intellisense we get list of all parameters used in all templates, filtered by mode. I believe XML Tools could optimize it a bit by filtering the list when it's clear from the context which template will be matched. Anyway, very useful:</p> <p><img src="http://www.tkachenko.com/blog/images/xslt-intellisense/xslt-intellisense-template-param-names2.png" /></p> <p>4. Autocompletion of template modes is also extremely useful. Make mistake in mode name and you can spend hours in debugger trying to figure out why your template isn't matched, because again this is not an error or even something wrong according to XSLT spec. That's why this is so cool:</p> <p><img src="http://www.tkachenko.com/blog/images/xslt-intellisense/xslt-intellisense-template-modes.png" /></p> <p>5. Finally a couple of useful namespace prefix autocompletions. exclude-result-prefixes now becomes easier:</p> <p><img src="http://www.tkachenko.com/blog/images/xslt-intellisense/xslt-intellisense-result-prefixes.png" /></p> and &lt;xsl:namespace-alias&gt; (mostly used for generating XSLT using XSLT): <p><img src="http://www.tkachenko.com/blog/images/xslt-intellisense/xslt-intellisense-namespace-alias.png" /></p> <p>6. If you use &lt;xsl:attribute-set&gt; elements, you will be happy to see this one:</p> <p><img src="http://www.tkachenko.com/blog/images/xslt-intellisense/xslt-intellisense-attribute-sets.png" /></p> <p> </p> <p>These are autocompletions I'm currently aware of. There might be more - it's currently completely undocumented and I probably the first one writing about this feature. For example key names are collected too, but I haven't found where they are used. If you happen to discover another XSLT autocompletion, report it in comments section please.</p> <p>And finally how to turn this awesomeness on:</p> <p>Yes, regedit. Create String value called &quot;XsltIntellisense&quot; under &quot;HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\XmlEditor&quot; key. &quot;True&quot;/&quot;False&quot; are valid values.</p> <p>If you are too lazy for editing registry manually, <a href="http://www.tkachenko.com/xslt/XsltIntellisense.reg.txt">here is XsltIntellisense.reg file</a> you can run (but rename it to .reg before).</p> <p>If you don't want to mess with registry, wait till tomorrow. I'm going to release <a href="http://www.xmllab.net/ironxslt/">IronXSLT</a> v0.3, which will turn XSLT intellisense on for you while installing.</p> <p>Enjoy!</p>
http://www.tkachenko.com/blog/archives/000740.html#comments http://www.tkachenko.com/blog/archives/commentrss/000740.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=740 12 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/742

Most Popular Words 2008 (Google, Live)

737@http://www.tkachenko.com/blog/ Wed, 16 Apr 2008 21:17:38 +0200 <p>I was doing some Web popularity research and found very cool data set <a href="http://blogoscoped.com/archive/2006-04-21-n53.html">collected by Philipp Lenssen</a> back in 2006 and 2003. This is basically Google page count for 27000 English vocabulary words. </p> <p>I decided to repeat the process on a wider word set via at least two search engines (Google and Live Search). So I combined Philipp's 27000+ vocabulary with <a href="http://en.wiktionary.org/wiki/Wiktionary:Main_Page">Wiktionary</a> (a wiki-based open content dictionary) <a href="http://en.wiktionary.org/wiki/Index:English">English index</a> and got quite comprehensive 74000+ vocabulary which reflects contemporary English language usage on the net. And then I collected page count number for each word reported by Google and Live Search.</p> <p>And here are some visualizations. Unfortunately while Swivel can do do great interactive visualizations including clouds, they only support static graph for embedding. So don't hesitate to click on the graphs to see a better visualization (e.g. cloud for 100 top words). </p> <p>Top 30 most popular words by Google, Live (numbers are in billions): <br /><a href="http://www.swivel.com/graphs/show/27521839"><img title="Click to play with this data at Swivel" alt="Most Popular Words (Google version)" src="http://www.swivel.com/graphs/image/27521839" /></a>    <a href="http://www.swivel.com/graphs/show/27521838"><img title="Click to play with this data at Swivel" alt="Most Popular Words (Live version)" src="http://www.swivel.com/graphs/image/27521838" /></a> </p> <p>As expected, top is occupied by common English words and common internet related nouns.</p> <p>Top 30 most popular words by Google vs Live:</p> <p> <a href="http://www.swivel.com/graphs/show/27521954"><img title="Click to play with this data at Swivel" alt="Most Popular Words (Google vs Live)" src="http://www.swivel.com/graphs/image/27521954" /></a></p> <p>Top 30 gainers (Google, 2006 to 2008). Good to see x 48 page count gain for &quot;twitter&quot;, the rest I cannot explain. Can you? </p> <p style="padding-left: 20px"> <table><tbody> <tr> <td>oracular</td> <td>x 163.6</td> </tr> <tr> <td>planchette</td> <td>x 153.7</td> </tr> <tr> <td>newsy</td> <td>x 93.5</td> </tr> <tr> <td>posse</td> <td>x 81.7</td> </tr> <tr> <td>nymphet</td> <td>x 75.2</td> </tr> <tr> <td>jewelelry</td> <td>x 65.6</td> </tr> <tr> <td>twitter</td> <td>x 48.6</td> </tr> <tr> <td>paling</td> <td>x 48.2</td> </tr> <tr> <td>waylain</td> <td>x 45.2</td> </tr> <tr> <td>outmatch</td> <td>x 45.2</td> </tr> <tr> <td>outrode</td> <td>x 41.6</td> </tr> <tr> <td>pod</td> <td>x 41.0</td> </tr> <tr> <td>phizog</td> <td>x 35.6</td> </tr> <tr> <td>sinology</td> <td>x 29.9</td> </tr> <tr> <td>overdrew</td> <td>x 26.7</td> </tr> <tr> <td>multistorey</td> <td>x 26.5</td> </tr> <tr> <td>nonstick</td> <td>x 25.6</td> </tr> <tr> <td>nun</td> <td>x 25.4</td> </tr> <tr> <td>pedicure</td> <td>x 24.8</td> </tr> <tr> <td>pillory</td> <td>x 24.8</td> </tr> <tr> <td>panty</td> <td>x 24.3</td> </tr> <tr> <td>outridden</td> <td>x 24.0</td> </tr> <tr> <td>nip</td> <td>x 23.2</td> </tr> <tr> <td>naturism</td> <td>x 23.2</td> </tr> <tr> <td>organddy</td> <td>x 23.0</td> </tr> <tr> <td>piccolo</td> <td>x 22.0</td> </tr> <tr> <td>paladin</td> <td>x 21.6</td> </tr> <tr> <td>notability</td> <td>x 21.2</td> </tr> <tr> <td>breadthways</td> <td>x 20.9</td> </tr> </tbody></table> </p> <p style="padding-left: 20px"></p> <p>And finally top 10 the longest words along with page count (Google, 2008): <br /> <br />&lt;w c=&quot;1460&quot;&gt;tetaumatawhakatangihangakoauaotamateaurehaeaturipukapihimaungahoronukupokaiwhenuaakitanarahu&lt;/w&gt; <br />&lt;w c=&quot;5620&quot;&gt;taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu&lt;/w&gt; <br />&lt;w c=&quot;60&quot;&gt;methionylglutaminylarginyltyrosylglutamylserylleucylphenylalanylal...serine&lt;/w&gt; <br />&lt;w c=&quot;62300&quot;&gt;llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch&lt;/w&gt; <br />&lt;w c=&quot;20100&quot;&gt;taumatawhakatangihangakoauauotamateapokaiwhenuakitanatahu&lt;/w&gt; <br />&lt;w c=&quot;285&quot;&gt;aequeosalinocalcalinosetaceoaluminosocupreovitriolic&lt;/w&gt; <br />&lt;w c=&quot;69000&quot;&gt;pneumonoultramicroscopicsilicovolcanoconiosis&lt;/w&gt; <br />&lt;w c=&quot;1010&quot;&gt;hepaticocholangiocholecystenterostomies&lt;/w&gt; <br />&lt;w c=&quot;18&quot;&gt;hepaticocholangiocholecystenterostomy&lt;/w&gt; <br />&lt;w c=&quot;74500&quot;&gt;hippopotomonstrosesquippedaliophobia&lt;/w&gt;</p> <p>Unsurprisingly, the longest  word is still <a href="http://en.wikipedia.org/wiki/Taumatawhakatangihangakoauauotamateapokaiwhenuakitanatahu">92 letters long name of a hill in New Zealand</a>, this one is hard to beat. </p> <p> </p> <p>The raw data sets (page count for 74000+ words) are available <a href="http://tkachenko.com/data/wordhits2008.zip">in XML format</a> and also on Swivel (<a href="http://www.swivel.com/data_sets/show/1012183">Google version</a>, <a href="http://www.swivel.com/data_sets/show/1012184">Live version</a>) where you can play with them visualizing and comparing in your way. Any more interesting visualization or comparison for this data set can you came up with? Enjoy.</p>
http://www.tkachenko.com/blog/archives/000737.html#comments http://www.tkachenko.com/blog/archives/commentrss/000737.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=737 1 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/739

Crowdsourcing in action: results

736@http://www.tkachenko.com/blog/ Sun, 30 Mar 2008 23:48:41 +0200 <p>I was writing about a <a href="http://www.tkachenko.com/blog/archives/000727.html">pilot the Library of Congress was doing with Flickr</a>. I measured also number of tags, notes and comments and repeated the process several times during last 2 months. Here are some numeric results:</p> <p><a href="http://www.swivel.com/graphs/show/27214317"><img title="Click to play with this data at Swivel" alt="Library of Conress pilot on Flickr" src="http://www.swivel.com/graphs/image/27214317" /></a> <br /></p> <p>As expected, while tags, notes and comments still coming, in general the lines are almost flat after 50 days.</p> <p>Averages: 4.85 unique tags,  0.39 notes, 1.34 comments per photo.</p> <p>The <a href="http://www.loc.gov/blog/?p=268">Library of Congress blog</a> shared some real results: </p> <blockquote> <p>And because we government-types love to talk about results, there are some tangible outcomes of the Flickr pilot to report: As of this writing, 68 of our bibliographic records have been modified thanks to this project and all of those awesome Flickr members.</p> </blockquote> <p>Well, that doesn't impress much, but they must be happy as <a href="http://flickr.com/photos/library_of_congress/sets/72157603624867509/">they have posted 50 more photos</a>.</p>
http://www.tkachenko.com/blog/archives/000736.html#comments http://www.tkachenko.com/blog/archives/commentrss/000736.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=736 0 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/738

Generating HTML excerpts

735@http://www.tkachenko.com/blog/ Thu, 27 Mar 2008 18:07:09 +0200 <p>Here is another interesting problem: how do you generate HTML excerpts preserving HTML structure and style? Say you have long XHTML text:</p> <pre>&lt;b&gt;This is a &lt;span style=&quot;color: #888&quot;&gt;very long&lt;/span&gt; text.&lt;/b&gt;</pre> <p>In browser it looks like this:</p> <p><b>This is a <span style="color: #888">very long</span> text.</b></p> <p>The text is 25 characters long. Now you need to generate a short excerpt - cut it down to 15 characters, while preserving HTML structure and style:</p> <pre>&lt;b&gt;This is a &lt;span style=&quot;color: #888&quot;&gt;very ...&lt;/span&gt;&lt;/b&gt;</pre> <p>So in a browser it would look like</p> <p><b>This is a <span style="color: #888">very ...</span></b></p> <p>I solved it in XSLT 1.0 using ugly (but effifcient) recursive template:</p> <pre>&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt; &lt;xsl:param name=&quot;max-len&quot; select=&quot;15&quot;/&gt; &lt;xsl:template match=&quot;/&quot;&gt; &lt;xsl:call-template name=&quot;trim&quot;/&gt; &lt;/xsl:template&gt; &lt;xsl:template name=&quot;trim&quot;&gt; &lt;xsl:param name=&quot;rlen&quot; select=&quot;0&quot;/&gt; &lt;xsl:param name=&quot;nodes&quot; select=&quot;*&quot;/&gt; &lt;xsl:choose&gt; &lt;xsl:when test=&quot;$rlen + string-length($nodes[1]) &lt;= $max-len&quot;&gt; &lt;xsl:copy-of select=&quot;$nodes[1]&quot;/&gt; &lt;xsl:if test=&quot;$nodes[2]&quot;&gt; &lt;xsl:call-template name=&quot;trim&quot;&gt; &lt;xsl:with-param name=&quot;rlen&quot; select=&quot;$rlen + string-length($nodes[1]) &quot;/&gt; &lt;xsl:with-param name=&quot;nodes&quot; select=&quot;$nodes[position() != 1]|$nodes[1]/*&quot;/&gt; &lt;/xsl:call-template&gt; &lt;/xsl:if&gt; &lt;/xsl:when&gt; &lt;xsl:when test=&quot;$nodes[1]/self::text()&quot;&gt; &lt;xsl:value-of select=&quot;substring($nodes[1], 1, $max-len - $rlen)&quot;/&gt; &lt;xsl:text&gt;...&lt;/xsl:text&gt; &lt;/xsl:when&gt; &lt;xsl:otherwise&gt; &lt;xsl:if test=&quot;$nodes[1]/node()&quot;&gt; &lt;xsl:element name=&quot;{name($nodes[1])}&quot; namespace=&quot;{namespace-uri($nodes[1])}&quot;&gt; &lt;xsl:copy-of select=&quot;$nodes[1]/@*&quot;/&gt; &lt;xsl:call-template name=&quot;trim&quot;&gt; &lt;xsl:with-param name=&quot;rlen&quot; select=&quot;$rlen&quot;/&gt; &lt;xsl:with-param name=&quot;nodes&quot; select=&quot;$nodes[1]/node()&quot;/&gt; &lt;/xsl:call-template&gt; &lt;/xsl:element&gt; &lt;/xsl:if&gt; &lt;/xsl:otherwise&gt; &lt;/xsl:choose&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt;</pre> <p>But I'm not happy with this solution. There must be more elegant way. The problem just smells <a href="http://fxsl.sourceforge.net/">FXSL</a>. Hopefully <a href="http://dnovatchev.spaces.live.com/">Dimitre</a> can show me how FXSL can do it with beauty and style. </p> <p>I also wonder how would you do it with XLinq?</p>
http://www.tkachenko.com/blog/archives/000735.html#comments http://www.tkachenko.com/blog/archives/commentrss/000735.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=735 1 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/737

Generating Java using XSLT

734@http://www.tkachenko.com/blog/ Fri, 21 Mar 2008 00:56:05 +0200 <p>We are working on yet <a href="http://www.bphx.com/coolgen_migration.cfm">another language migration tool</a> and faced once again Java source code generation problem. Unfortunately Java doesn't have anything similar to .NET's <a href="http://msdn2.microsoft.com/en-us/library/y2k85ax6.aspx">CodeDOM</a>, so we had to build own own Java generator. This time our development platform is XSLT 2.0. Yes, we are converting COOL:Gen (obscure 4GL model-based language) to Java using XSLT 2.0.</p> <p>XSLT 2.0 rocks by the way. This is first time I write production code in XSLT 2.0 and this is amazing experience. Suddenly all is so easy, everything is possible, no hassle. Despite poor authoring support (Eclipse XSLT editor sucks, while Visual Studio 2008 with XSLT 2.0 schema is ok, but cannot run Saxon), lack of debugger and Saxon quirks I had a blast practicing XSLT 2.0 for real.</p> <p>At first I started generating Java beans simple way: output mode=&quot;text&quot; and producing Java sources as text. Obviously it sucked big way. I spent a week and got it done, but with way too cumbersome and fragile code. Generating code and simultaneously coping with Java syntax and formatting is hard. Additional layer of indirection was needed desperately.</p> <p>One of <a href="http://www.nesterovsky-bros.com/weblog/default.aspx"> smart guys</a> I work with came with a simple but brilliant idea. Vladimir took Java 6 ANTLR grammar and converted it to XML Schema. Then he developed a generic serializer (also in XSLT 2.0 of course) that is able to convert XML document confirming to Java XML schema (he called it <a href="http://www.nesterovsky-bros.com/weblog/default.aspx">JXOM</a> -  Java XML Object Model) into nicely formatted and optimized decent Java 6 source code.</p> <p>Then I rebuilt my Java bean generator using JXOM instead in just one day. Building Java as XML is so much easier and cleaner, I believe it's even easier than using System.CodeDom in .NET (obviously CodeDom can do more than just generate C# or VB sources).</p> <p>Anyway, anybody interested in Java generation - check out JXOM. This is really easy way to generate Java 9even Java 6.0) using XSLT. It's freely available and it just works. Here are more links:</p> <ol> <li><a href="http://www.nesterovsky-bros.com/weblog/PermaLink,guid,68374b82-b2bd-4650-953f-fb30d924b38a.aspx">Java xml object model</a></li> <li><a href="http://www.nesterovsky-bros.com/weblog/PermaLink,guid,792f0790-a21e-4388-8e5a-d7e2810e1d31.aspx">Xslt for the jxom (Java xml object model)</a></li> <li><a href="http://www.nesterovsky-bros.com/weblog/PermaLink,guid,66d2d22e-c6c3-4768-9b23-566582107eb3.aspx">jxom update</a></li> </ol> <p>JXOM is ready to use, but still under active development. Any feedback is <strong>highly</strong> appreciated at <a href="http://www.nesterovsky-bros.com/weblog/default.aspx">Vladimir and Arthur Nesterovsky blog.</a></p>
http://www.tkachenko.com/blog/archives/000734.html#comments http://www.tkachenko.com/blog/archives/commentrss/000734.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=734 6 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/736

Obfuscating XSLT

732@http://www.tkachenko.com/blog/ Wed, 20 Feb 2008 18:35:31 +0200 <p>Inspired by <a title="http://www.ioccc.org/" href="http://ioccc.org">ioccc.org</a>, just for fun, really. Can you figure out what this stylesheet outputs (without running it of course)? </p> <pre>&lt;!DOCTYPE p [ &lt;!ENTITY _0_ 'string'&gt; &lt;!ENTITY _0-0_ 'sub&amp;_0_;'&gt; ]&gt; &lt;p x:version=&quot;1.0&quot; xmlns:x=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt; &lt;x:variable name=&quot;_&quot; select=&quot;document('')&quot;/&gt; &lt;x:variable name=&quot;_-_&quot; select=&quot;number(not(_-_=_-_=_-_=_-_))&quot;/&gt; &lt;x:value-of select=&quot;concat( &amp;_0-0_;(namespace-uri($_/*/*[$_-_]), $_-_, $_-_), &amp;_0-0_;(name($_/*/*[$_-_]), &amp;_0_;-length(*&gt;*)*2, $_-_), &amp;_0-0_;(@_&gt;_-, &amp;_0_;-length(******* div @_), $_-_), translate(name(($_//@*)[5]), translate(name(($_//@*)[5]), 'l', ''), ''), &amp;_0-0_;($_//namespace::*, &amp;_0_;-length($_-_ div 0)+7, $_-_), '&amp;#032;', &amp;_0-0_;-after(&amp;_0-0_;-before($_//namespace::*, 3), '.'), &amp;_0-0_;($_//namespace::*, 15, 2), &amp;_0-0_;(_/_/_=//_//_, 3, $_-_), &amp;_0-0_;($_/*/*/@*[contains(.,'(')], $_-_, $_-_), '&amp;#x21;')&quot;/&gt; &lt;/p&gt;</pre> <p>By the way, does anybody think XSLT obfuscator is a useful tool?</p>
http://www.tkachenko.com/blog/archives/000732.html#comments http://www.tkachenko.com/blog/archives/commentrss/000732.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=732 3 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/734

Microsoft XSLT Profiler

731@http://www.tkachenko.com/blog/ Mon, 11 Feb 2008 01:59:12 +0200 <p>Microsoft XML Tools team has released <a href="http://blogs.msdn.com/xmlteam/archive/2008/02/07/announcing-the-xslt-profiler-addin-for-vs-2008.aspx">XSLT profiler addin for Visual Studio 2008</a>. I've heard about this tool and even did a little testing long time ago (apparently it's very hard to release anything in Microsoft).</p> <p>First thing you need to know about Microsoft XSLT profiler - it requires Visual Studio 2008 Team System edition with the Performance Tools feature installed. That actually sounds a bit steep for just XSLT profiler, but it starts to make sense once you realize this tool is just a thin wrapper around the F1 profiler (which only ships with Visual Studio Team System SKU).</p> <p>Once installed, it adds &quot;Profile XSLT&quot; command (visible only in XSLT context, i.e. when active document is XSLT stylesheet) to the XML menu:</p> <p><img src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=xsltprofiler&amp;DownloadId=180" /> </p> <p>Before you see profiling results you should recall that XSLT in .NET starting with 2.0 is compiled to MSIL:</p> <p><img src="http://tkachenko.com/blog/images/compildxslt.png" /> </p> <p>As you can see, an XSLT stylesheet is being compiled into a class and each template becomes a method with cool special name like &lt;xsl:template match=&quot;book&quot;&gt;. That was smart. And yes, MSIL is completely ok with such kind of method names. Beside template-mehods the generated class contains other auxiliary stuff. So don't be surprised with XSLT profiling results:</p> <p><img src="http://www.tkachenko.com/blog/images/xsltprof.png" /> </p> <p>I'd say there is too much clutter in this form. I'd like to see only XSLT relevant info, but as you can understand now, it's the the results of profiling compiled assembly and XSLT part is here only because smart compilation tricks.</p> <p>Still extremely useful tool. A must for anybody writing XSLT in Visual Studio. Besides Summary View there are: Call Tree View, Modules View, Caller/Callee, Functions, Marks and Processes Views. You can find more info about profiling report details at <a title="http://code.msdn.microsoft.com/xsltprofiler" href="http://code.msdn.microsoft.com/xsltprofiler">http://code.msdn.microsoft.com/xsltprofiler</a>.</p> <p>I'd be happy to see next version. With all clutter removed, more XSLT focused, linked to XSLT source (seems like currently there is no way to get back to template source from report), may be with some smart visualizations (what about coloring XSLT source view to indicate the hot spots?). Oh well, provided it took XML Tools team so long to ship this tool I better try to implement all these ideas myself in Iron XSLT (stay tuned, it's not dead as I'm back).</p>
http://www.tkachenko.com/blog/archives/000731.html#comments http://www.tkachenko.com/blog/archives/commentrss/000731.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=731 0 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/733

New XSLT stylesheet template in Visual Studio 2008 (again)

730@http://www.tkachenko.com/blog/ Fri, 08 Feb 2008 00:04:38 +0200 <p>When you create new XSLT stylesheet in Visual Studio via project (Add/New Item) or globally (File/New/File aka Ctrl+N), you start with template content. This template is changing in every new Visual Studio version, probably because every new generation of developers working on XSLT tools in Visual Studio have different vision about what you should start with.</p> <p>Let's see. Visual Studio 2003. Pure simplicity:</p> <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;stylesheet version=&quot;1.0&quot; xmlns=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt; &lt;/stylesheet&gt;</pre> <p></p> <p>Visual Studio 2005 has two different templates for new XSLT stylesheet (!). When you create it via project you get the same as above empty stylesheet template. But if you go via Ctrl+N you get this fancy template: </p> <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; xmlns:exsl=&quot;http://exslt.org/common&quot; exclude-result-prefixes=&quot;exsl&quot;&gt; &lt;xsl:template match=&quot;/&quot;&gt; &lt;html&gt; &lt;body&gt; &lt;!-- This is an XSLT template file. Fill in this area with the XSL elements which will transform your XML to XHTML. --&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt;</pre> <p></p> <p>Yes, believe it or not, but some Microsoft developers were sure you should start with EXSLT namespace declaration in your stylesheet. The fact is that .<a href="http://www.tkachenko.com/blog/archives/000559.html">NET 2.0 introduced partial native support for EXSLT</a>, but it was never documented. It's still hidden portability gem.</p> <p>Now what you get in Visual Studio 2008: </p> <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot; exclude-result-prefixes=&quot;msxsl&quot; &gt; &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot;/&gt; &lt;xsl:template match=&quot;@* | node()&quot;&gt; &lt;xsl:copy&gt; &lt;xsl:apply-templates select=&quot;@* | node()&quot;/&gt; &lt;/xsl:copy&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt;</pre> <p></p> <p>No more EXSLT, back to basics - proprietary nonportable MSXSL namespace by default. This is sad.</p> <p>Beside this weird proprietary comeback it's interesting that this new template contains <a href="http://en.wikipedia.org/wiki/Identity_transform">identity transformation</a> rule. This cumbersome looking &lt;xsl:template&gt; is the base of data transformation filtering. It processes every single node in source document recursively and outputs it as is.  By adding more template rules you can override base behavior to add, remove or modify particular nodes. Very powerful technique. This is smart choice for new file template.</p>
http://www.tkachenko.com/blog/archives/000730.html#comments http://www.tkachenko.com/blog/archives/commentrss/000730.xml http://www.tkachenko.com/blog/CommentAPI2MT.aspx?entry_id=730 1 http://www.tkachenko.com/cgi-bin/mt-tb.cgi/732



View XML
View XSL