<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Arian Kulp's Blog</title>
        <link>http://ariankulp.com/Default.aspx</link>
        <description>opinion, insight, and occasional code</description>
        <language>en-US</language>
        <copyright>Arian T. Kulp</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <image>
            <title>Arian Kulp's Blog</title>
            <url>http://ariankulp.com/images/RSS2Image.gif</url>
            <link>http://ariankulp.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ArianKulp" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>What MEF Needs&amp;hellip;</title>
            <category>Microsoft</category>
            <category>Dev</category>
            <category>SW/HW/Tech</category>
            <link>http://ariankulp.com/archive/2009/10/11/2582.aspx</link>
            <description>&lt;p&gt;OK.  So this is going to be a cross between a rant and constructive criticism.  I’m sure that Microsoft has great reasons that they created MEF (&lt;a href="http://mef.codeplex.com/" target="_blank"&gt;Managed Extensibility Framework&lt;/a&gt;) the way that they did, but it’s just tantalizingly close to perfection, so I’m going to complain about it anyway!&lt;/p&gt;  &lt;p&gt;For two of my recent articles, I’ve been working with MEF to enable an addins platform for a utility runner.  MEF does some nice things:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It makes it easy to designate classes as extensions (define an addin) &lt;/li&gt;    &lt;li&gt;It makes it easy to reference extension classes (consume an addin) &lt;/li&gt;    &lt;li&gt;That’s mostly it… &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Don’t get me wrong -- these are nice features.  I’ve written my own addin frameworks before and it’s always challenging.  Reflection makes certain things fairly easy, but the overall code gets convoluted and is full of string comparisons.&lt;/p&gt;  &lt;p&gt;Microsoft’s similar (competing?) framework is the Managed Addin Framework (MAF).  MAF is a much more complex API.  Instead of just decorating a class, you have custom interfaces (several of them) and currently no tooling to help you with it.  In the end, you have a much better framework that handles versioning, separate app domains, and isolation at various levels.&lt;/p&gt;  &lt;p&gt;Two two products (MEF and MAF) serve somewhat different purposes, yet both seem to be pushed as extensibility – not just testing assistance.  Unfortunately, neither platform comes with enough out of the box support for a full Firefox/IE-style addin manager.  Full Addin Management should support features such as enabling and disabling addins, easy ability to add new ones from a file, and auto-update.  The auto-update feature should really work using the same mechanism as ClickOnce.&lt;/p&gt;  &lt;p&gt;None of the these features would be terrible difficult, but they are challenging to implement manually.  I’d love to see more movement in this direction from Microsoft to provide a standard mechanism.  It would be a great boon for new application frameworks.&lt;/p&gt;&lt;img src="http://ariankulp.com/aggbug/2582.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/10/11/2582.aspx</guid>
            <pubDate>Mon, 12 Oct 2009 02:18:29 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2582.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/10/11/2582.aspx#feedback</comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2582.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Extension Methods</title>
            <category>Dev</category>
            <link>http://ariankulp.com/archive/2009/10/10/2581.aspx</link>
            <description>&lt;p&gt;One of the cool features introduced in .NET 3.0 was the concept of extension methods.  Subclassing is one way to add new methods and properties to an class, but it’s not available if the class is sealed.  It also doesn’t provide the new members unless you create objects of the subclass.&lt;/p&gt;  &lt;p&gt;Extension methods let you add new members to a class without actually extending it.  You don’t get access to private or internal methods, but you add a convenient way to access related methods.&lt;/p&gt;  &lt;p&gt;Most of the convenient LINQ features are implemented by means of extension methods on IEnumerable.  Any class that descends from IEnumerable automatically gets convenient access to methods like Where, Select, Skip, and more.&lt;/p&gt;  &lt;p&gt;Beyond querying though, you can add an extension method to any class.  A common example is taking the String class and adding a Reverse method to it.  Without extension methods, you’d need to instantiate a new class, perhaps ReversableString, then call the Reverse method on that.  Extension methods allow you to call the Reverse method on any instance of String.  This is even more useful with types like IEnumerable since there are such a wide variety of classes that descend from it.  To make things even better, if you return the same type, you allow chaining.&lt;/p&gt;  &lt;p&gt;As an example: suppose you wrote a method that took an object and returned that same object or a new object.  If you had other methods that acted on that same type, you could chain together some method calls like this:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;Finally(Next(Then(First(obj)))); &lt;/pre&gt;

&lt;p&gt;Not very nice looking, but certainly effective.  The First(), Then(), Next(), and Finally()  methods takes an object and returns an object of the same (or upper-level) type.&lt;/p&gt;

&lt;p&gt;Extension methods allow you to create these four methods and attach them to the type itself.  Intellisense can actually show these methods as members of the object then:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;First(obj).Then().Next().Finally();&lt;/pre&gt;

&lt;p&gt;The expression is a nicer linear look, and being able to attach the methods to the class makes them more discoverable.&lt;/p&gt;

&lt;p&gt;My own personal preference is to create an ExtensionMethods static class or possibly a name related to the type, such as StringExtensions depending on needs.&lt;/p&gt;

&lt;p&gt;Are extension methods a killer feature?  Well, they don’t open up any new doors that were closed before, but they can be expressive and they can reduce the number of subclasses needed which can actually be more efficient.  The only rules are that you must be in a static public class, as a public static method, and the first parameter matches the type to extend with the “this” keyword:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; StringExtensions
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; String Reverse(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; src)
    {
        &lt;span class="rem"&gt;// Reverse the string here…&lt;/span&gt;
        &lt;span class="kwrd"&gt;return&lt;/span&gt; reversedString;
    }
}&lt;/pre&gt;
&lt;hr /&gt;
More info: &lt;a href="http://weblogs.asp.net/dwahlin/archive/2008/01/25/c-3-0-features-extension-methods.aspx" target="_blank"&gt;MSDN&lt;/a&gt;

&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;img src="http://ariankulp.com/aggbug/2581.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/10/10/2581.aspx</guid>
            <pubDate>Sun, 11 Oct 2009 00:31:48 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2581.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/10/10/2581.aspx#feedback</comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2581.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Command Prompt Shortcut</title>
            <category>SW/HW/Tech</category>
            <category>windows</category>
            <link>http://ariankulp.com/archive/2009/10/08/2580.aspx</link>
            <description>&lt;p&gt;I just noticed something cool.  Anytime I’ve ever needed to paste a command into a command prompt I’ve always used the context menu Paste command:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/CommandPromptShortcut_85D6/image_2.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/CommandPromptShortcut_85D6/image_thumb.png" width="504" height="268" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I’m not sure how I missed it until now, but if you simply right-click in the command area (the black part) it instantly pastes it!  I did a quick search on it and it’s not a new feature, but I never noticed it.&lt;/p&gt;  &lt;p&gt;Another cool Command Prompt trick I recently learned is the history menu.  Just press F7 to see your history, then use arrows and the Enter key to select:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/CommandPromptShortcut_85D6/image_6.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/CommandPromptShortcut_85D6/image_thumb_2.png" width="504" height="269" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I guess there’s still life in the old prompt!&lt;/p&gt;&lt;img src="http://ariankulp.com/aggbug/2580.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/10/08/2580.aspx</guid>
            <pubDate>Thu, 08 Oct 2009 16:34:02 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2580.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/10/08/2580.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2580.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Windows 7 Explorer Lockup</title>
            <category>windows7</category>
            <category>SW/HW/Tech</category>
            <link>http://ariankulp.com/archive/2009/10/01/2579.aspx</link>
            <description>&lt;p&gt;I’m so happy!  I’ve had a chronic problem with Windows 7 for a build or two now (including RTM).  Every time I would create a new folder in Explorer, it would hang for a minute or so before coming back.  Then I realized that it was actually the rename operation that was the culprit.  Any file rename would cause the window to hang.  Strangely, if I checked at a command prompt it was immediately renamed.  The final weirdness was that a rename worked instantly from a command prompt.  So what was Explorer doing?  &lt;/p&gt;  &lt;p&gt;It turns out that the issue is NVIDIA’s extensions.  If you download &lt;a href="http://www.nirsoft.net" target="_blank"&gt;ShellExView&lt;/a&gt; you can view all shell extensions and disable them at will.  I disabled the NVIDIA ones, restarted Explorer (from task manager) and it works great now!&lt;/p&gt;  &lt;p&gt;Source: &lt;a href="http://social.technet.microsoft.com/Forums/en-US/w7itprogeneral/thread/0f9aa307-9b7a-473b-87c5-fb0f1b8feaba" target="_blank"&gt;Technet Forums&lt;/a&gt;&lt;/p&gt;&lt;img src="http://ariankulp.com/aggbug/2579.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/10/01/2579.aspx</guid>
            <pubDate>Thu, 01 Oct 2009 23:49:32 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2579.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/10/01/2579.aspx#feedback</comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2579.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Wild Office 2010 Feature</title>
            <category>Microsoft</category>
            <category>SW/HW/Tech</category>
            <link>http://ariankulp.com/archive/2009/09/22/2578.aspx</link>
            <description>&lt;p&gt;So I’m typing a document, and suddenly I realize that I must have just hit the CAPS LOCK key.  I noticed this right after typing “lOCATION” when all of a sudden Word autocorrected it to the right case *and* turned off the CAPS LOCK key!  Very cool.  I tried again with just typing it with CAPS LOCK on and getting LOCATION but it didn’t do it.  It’s smart enough to realize that if I type in reverse sentence case I probably didn’t mean it.  This is a welcome feature.&lt;/p&gt;&lt;img src="http://ariankulp.com/aggbug/2578.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/09/22/2578.aspx</guid>
            <pubDate>Tue, 22 Sep 2009 16:15:02 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2578.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/09/22/2578.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2578.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Visual Studio Debugging Tip</title>
            <category>Dev</category>
            <link>http://ariankulp.com/archive/2009/09/18/2577.aspx</link>
            <description>&lt;p&gt;Have you ever been plagued with an exception that didn’t show you any details?  One example would be in a WPF application with XAML markup.  If you are declaring resources, and said resources through an exception upon creation, you’ll probably crash when the application starts up, but there won’t be any detailed exception information to see:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/VisualStudioDebuggingTip_C9AD/image_8.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/VisualStudioDebuggingTip_C9AD/image_thumb_3.png" width="520" height="339" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can always click &lt;strong&gt;View Detail&lt;/strong&gt;  and go to the &lt;strong&gt;InnerException property, but that’s not always so helpful either:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/VisualStudioDebuggingTip_C9AD/image_10.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/VisualStudioDebuggingTip_C9AD/image_thumb_4.png" width="504" height="334" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you really want to see the cause of the error, you’ll need to see the exception at the point of occurrence.  By the time it bubbles up a few times, you may not get to do much.  This is especially the case when a &lt;em&gt;catch &lt;/em&gt;clause swallows it up.&lt;/p&gt;  &lt;p&gt;Here’s how to handle these.  Click the &lt;strong&gt;Debug | Exceptions &lt;/strong&gt;menu command.  Now can control when debugging breaks to a pretty granular level.  You always have the checkmarks set for the &lt;strong&gt;User-unhandled &lt;/strong&gt;errors.  The cool thing is that you can catch exception right when they’re thrown as well.  This means that even if your code catches them, you can break at the moment that they occur.  If that’s too often, you can expand the group of exceptions (C++, CLR, Win32, etc.) and specify namespaces or specific exception types.  Very handy!&lt;/p&gt;  &lt;p&gt;In my case, I just ticked &lt;strong&gt;Thrown &lt;/strong&gt;for &lt;strong&gt;Common Language Runtime Exceptions &lt;/strong&gt;and got straight to the root of the cause.   This showed me where I needed to add a catch in my code, where I didn’t even know there was a risk.  As a side note, Java requires (or did when I used it) a &lt;em&gt;throws &lt;/em&gt;clause on each method that could throw an exception.  That way you knew if you needed to worry about it!  That can make it easier sometimes too.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/VisualStudioDebuggingTip_C9AD/image_6.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/VisualStudioDebuggingTip_C9AD/image_thumb_2.png" width="500" height="261" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Anyway, use this power responsibly and you just might find yourself handling exceptions you never could find before!&lt;/p&gt;&lt;img src="http://ariankulp.com/aggbug/2577.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/09/18/2577.aspx</guid>
            <pubDate>Sat, 19 Sep 2009 06:43:52 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2577.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/09/18/2577.aspx#feedback</comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2577.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Coding 4 Fun &amp;ndash; Windows 7 Taskbar</title>
            <category>Coding 4 Fun</category>
            <category>windows7</category>
            <link>http://ariankulp.com/archive/2009/09/16/2576.aspx</link>
            <description>&lt;p&gt;My latest MSDN Coding 4 Fun article, Windows 7 Taskbar, has been published.  I’m a bit behind the times actually, since it’s already been out a week or two!  In case you haven’t seen it though, it’s an introduction to using the Windows API Code Pack to take advantage of new Taskbar goodness in Windows 7.  Hopefully some good info there with Windows 7 release coming up soon!&lt;/p&gt;  &lt;p&gt;Link: &lt;a title="http://blogs.msdn.com/coding4fun/archive/2009/08/25/9874533.aspx" href="http://blogs.msdn.com/coding4fun/archive/2009/08/25/9874533.aspx"&gt;http://blogs.msdn.com/coding4fun/archive/2009/08/25/9874533.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://ariankulp.com/aggbug/2576.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/09/16/2576.aspx</guid>
            <pubDate>Thu, 17 Sep 2009 06:55:56 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2576.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/09/16/2576.aspx#feedback</comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2576.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Trouble installing from Pismo Mounts</title>
            <category>SW/HW/Tech</category>
            <link>http://ariankulp.com/archive/2009/09/09/2575.aspx</link>
            <description>&lt;p&gt;I’ve blogged before about the product &lt;a href="http://www.pismotechnic.com/pfm/ap/" target="_blank"&gt;Pismo Mount&lt;/a&gt;.  This great tool lets you mount an ISO (CD image), ZIP, and a number of other archive formats.  Once mounted, it looks like a folder and you can just work with it like any other folder.  I’ve discovered some limitations that surprised me.&lt;/p&gt;  &lt;p&gt;Specifically, one limitation that has affected me several times.  For some reason, I can’t always install from a mounted ISO image.  I tried installing the Office 2010 CTP and the Visual Studio 2010 beta and neither would install.  The errors don’t even make sense (it’s not like it’s permissions errors on reading the source files).  Once I copy the files from the mounted folder to a real folder, the install works like a charm.&lt;/p&gt;  &lt;p&gt;Keep this is mind if you use Pismo Mount and you can’t figure out what installs are failing.  It’s an easy fix!&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/TroubleinstallingfromPismoMounts_D35D/image_2.png" rel="lightbox"&gt;&lt;em&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://ariankulp.com/images/ariankulp_com/WindowsLiveWriter/TroubleinstallingfromPismoMounts_D35D/image_thumb.png" width="500" height="188" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;Pismo Mount problem?&lt;/em&gt;&lt;/p&gt;&lt;img src="http://ariankulp.com/aggbug/2575.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Arian T. Kulp</dc:creator>
            <guid>http://ariankulp.com/archive/2009/09/09/2575.aspx</guid>
            <pubDate>Wed, 09 Sep 2009 07:01:46 GMT</pubDate>
            <wfw:comment>http://ariankulp.com/comments/2575.aspx</wfw:comment>
            <comments>http://ariankulp.com/archive/2009/09/09/2575.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://ariankulp.com/comments/commentRss/2575.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
