<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/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>Arik Poznanski&amp;#39;s Blog : Plug-in</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/tags/Plug-in/default.aspx</link><description>Tags: Plug-in</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Workaround For Crash In Performance Profiling Tools for WPF</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/26/workaround-for-crash-in-performance-profiling-tools-for-wpf.aspx</link><pubDate>Sun, 26 Jun 2011 15:12:56 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:846094</guid><dc:creator>arik</dc:creator><slash:comments>7</slash:comments><description>&lt;h3&gt;Introduction&lt;/h3&gt;  &lt;p&gt;Every WPF developer knows the situation where you have a large line-of-business application, you’ve implemented all the features and when you finally run it on real data – it runs s-l-o-w.&lt;/p&gt;  &lt;h3&gt;Optimization Time!&lt;/h3&gt;  &lt;p&gt;Optimization for performance is fun since a 1% change of code gets you 99% change in performance. However, finding the one location you should change can be a pain.&lt;/p&gt;  &lt;p&gt;This is why we’ve invented performance profilers. Profilers can help you pin-point the problem.&lt;/p&gt;  &lt;h3&gt;WPF?&lt;/h3&gt;  &lt;p&gt;WPF applications performance problems can usually be categorized to several kinds, for example, layout related, rendering related, etc.    &lt;br /&gt;Following is a nice list of &lt;a href="http://msdn.microsoft.com/en-us/library/aa970683.aspx"&gt;common places to optimize&lt;/a&gt; when you work with WPF applications.&lt;/p&gt;  &lt;p&gt;Microsoft provides a profiler specifically tuned for finding WPF related issues. You can find the installation guidelines on &lt;a href="http://msdn.microsoft.com/en-us/library/aa969767.aspx"&gt;MSDN&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Note: if this is the first time you use it, and you don’t get the data, try the patch mentioned in &lt;a href="http://blogs.msdn.com/b/jgoldb/archive/2010/08/24/timezone-patch-to-wpf-performance-profiling-tools-for-wpf-4-is-now-available.aspx"&gt;this post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;When the profiler does work, it produces very interesting information.    &lt;br /&gt;For example, in the following image we can see the visual tree on the left and in it the hot element (painted red) where a lot of CPU cycles went (either due to rendering or layout).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_62D7BA40.png"&gt;&lt;img style="margin:0px auto;display:block;float:none;" title="Performance profiling tools for WPF" alt="Performance profiling tools for WPF" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_00A556CE.png" width="600" height="393" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can also see different categories of WPF (dispatcher related, layout related, rendering related, etc.) on the right and how much they affect the running application.&lt;/p&gt;  &lt;p&gt;For more information I suggest you read on &lt;a href="http://msdn.microsoft.com/en-us/library/aa969767.aspx"&gt;MSDN&lt;/a&gt; on how to work with this excellent tool, but now I want to discuss a different aspect of it.&lt;/p&gt;  &lt;h3&gt;Real Life Scenario&lt;/h3&gt;  &lt;p&gt;On real life applications the visual tree on the left can get quite big and the fact is that when you go too deep with the tree control &lt;strong&gt;the&lt;/strong&gt; &lt;strong&gt;WPF profiler crash&lt;/strong&gt;! Usually with an error similar to this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_5D44EA03.png"&gt;&lt;img style="margin:0px auto;display:block;float:none;" title="Layout recursion reached allowed limit to avoid stack overflow: &amp;#39;255&amp;#39;" alt="Layout recursion reached allowed limit to avoid stack overflow: &amp;#39;255&amp;#39;" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_41438F3E.png" width="362" height="239" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The problem is that the tree got too deep and WPF itself doesn’t support it. &lt;/p&gt;  &lt;h3&gt;Optimal Solution&lt;/h3&gt;  &lt;p&gt;What I would have liked from MS is a button that lets me set the current element as the new root of the tree so I could continue my search on the visual tree to find the hot element. Or at least provide the code for the WPF profiler, so I could do this myself.&lt;/p&gt;  &lt;p&gt;Unfortunately, none of these options are available so I was forced to find a different solution.&lt;/p&gt;  &lt;h3&gt;My Solution&lt;/h3&gt;  &lt;p&gt;What I did was a little hacky, but nevertheless provides a solution to the problem.&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;WPF profiler&lt;/strong&gt; works with plugins. In fact the &lt;strong&gt;Visual Profiler&lt;/strong&gt; itself is implemented as a plugin which comes by default.&lt;/p&gt;  &lt;p&gt;So I’ve create a new plugin, which I called “&lt;strong&gt;My Visual Profiler&lt;/strong&gt;”. My plugin aggregated the original plugin and adds a button on top of it. Then, using some nasty reflection I modify the tree so that the currently selected item in the tree is added to the root element. This enables me to continue debugging and effectively remove the limitation I previously had.&lt;/p&gt;  &lt;p&gt;If you come across the same problem, you can use my plugin, provided &lt;a href="http://blogs.microsoft.co.il/blogs/arik/MyVisualProfiler.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;That’s it for now,    &lt;br /&gt;Arik Poznanski.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/26/workaround-for-crash-in-performance-profiling-tools-for-wpf.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/26/workaround-for-crash-in-performance-profiling-tools-for-wpf.aspx&amp;amp;bgcolor=6600FF" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Submit?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/26/workaround-for-crash-in-performance-profiling-tools-for-wpf.aspx"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/26/workaround-for-crash-in-performance-profiling-tools-for-wpf.aspx" style="border:0px;" /&gt;&lt;/a&gt; &lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=172641" rel="tag" style="display:none;"&gt;CodeProject&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=846094" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Plug-in/default.aspx">Plug-in</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Profiler/default.aspx">Profiler</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Crash/default.aspx">Crash</category></item><item><title>Spelling and Grammar Checking Plugin for Windows Live Writer</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/10/spelling-and-grammar-checking-plugin-for-windows-live-writer.aspx</link><pubDate>Sat, 11 Jun 2011 02:04:42 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:842047</guid><dc:creator>arik</dc:creator><slash:comments>9</slash:comments><description>&lt;h3&gt;Introduction&lt;/h3&gt;  &lt;p&gt;In my &lt;font style="background-color:#ffff00;"&gt;&lt;/font&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/08/c-library-for-grammar-and-spell-checking.aspx"&gt;previous post&lt;/a&gt; I’ve presented “&lt;a href="http://www.afterthedeadline.com/development.slp"&gt;After the Deadline&lt;/a&gt;”, a spelling and grammar checking web service and my .&lt;a href="http://afterthedeadline.codeplex.com/"&gt;NET wrapper library&lt;/a&gt;. This library allows you to integrate spell and grammar checking in your .NET application. The library was written in C# using .NET 4.&lt;/p&gt;  &lt;p&gt;Also, back in &lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/05/30/how-to-use-a-net-4-based-dll-from-net-2-based-application.aspx"&gt;this post&lt;/a&gt;, I’ve presented how one can use a .NET 4 DLL from a .NET 2 executable.&lt;/p&gt;  &lt;p&gt;All of this was just preparations for writing my own grammar checker plugin for &lt;a href="http://www.google.co.il/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB8QFjAA&amp;amp;url=http%3A%2F%2Fexplore.live.com%2Fwindows-live-writer%3Fos%3Dother&amp;amp;ei=zWXpTarvCcXDswbqn63oCg&amp;amp;usg=AFQjCNGXsRHp4X869Dns9bZwu-abBwYRmQ&amp;amp;sig2=I01nRSWYSeIFjz6LpYY2qw"&gt;Windows Live Writer&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Now, I know what you’re thinking.. “Doesn’t WLW already have a spell checker?”    &lt;br /&gt;Answer: it does, but its grammar checking abilities are quite limited.&lt;/p&gt;  &lt;p&gt;Obviously, I’ve used my “After the Deadline” wrapper library for the grammar checking. And since Windows Live Writer plugins must be written in .NET 2, I’ve used the same techniques mentioned in my previous article mentioned above. &lt;/p&gt;  &lt;h3&gt;Where can I get this awesome plugin?&lt;/h3&gt;  &lt;p&gt;&lt;font style="background-color:#ffff00;"&gt;&lt;/font&gt;Well, both the source code and an MSI installer can be downloaded from the downloads section in the new &lt;a href="http://grammarcheckerplugin.codeplex.com/"&gt;CodePlex project&lt;/a&gt; I’ve created.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;Using the spelling and grammar checker plugin&lt;/h3&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 1:&lt;/strong&gt;&lt;/u&gt; Select the text you want to check&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_1281C49C.png"&gt;&lt;img style="margin:0px auto;display:block;float:none;" title="image" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_614E502F.png" width="640" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/u&gt;: Go to the “Insert” tab and select “Grammar Checker” from the listed plugins&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_4444DFC0.png"&gt;&lt;img style="margin:0px auto;display:block;float:none;" title="image" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_6346EF5F.png" width="640" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/u&gt;: Correct the presented errors using the “Spelling and Grammar” dialog&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_19B44F0A.png"&gt;&lt;img style="margin:0px auto;display:block;float:none;" title="image" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_0C3A0238.png" width="640" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;/u&gt;: Repeat step 3 until a completed message appears&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_49C69E5A.png"&gt;&lt;img style="margin:0px auto;display:block;float:none;" title="image" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_062AD939.png" width="640" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;P.S.&lt;/h3&gt;  &lt;p&gt;Somehow, merely 2 days after I&amp;#39;ve created the CodePlex project there were &lt;a href="http://lehsys.blogspot.com/2011/06/windows-live-writer-2011-now-has-spell.html"&gt;three&lt;/a&gt; &lt;a href="http://www.labnol.org/software/grammar-in-windows-live-writer/19498/"&gt;blog&lt;/a&gt; &lt;a href="http://www.instantfundas.com/2011/06/deadline-grammarspell-checker-plugin.html"&gt;posts&lt;/a&gt; about it. WOW. I guess this plugin was needed more than I thought.&lt;/p&gt;  &lt;p&gt;That’s it for now,    &lt;br /&gt;Arik Poznanski.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/10/spelling-and-grammar-checking-plugin-for-windows-live-writer.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/10/spelling-and-grammar-checking-plugin-for-windows-live-writer.aspx&amp;amp;bgcolor=6600FF" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Submit?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/10/spelling-and-grammar-checking-plugin-for-windows-live-writer.aspx"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://blogs.microsoft.co.il/blogs/arik/archive/2011/06/10/spelling-and-grammar-checking-plugin-for-windows-live-writer.aspx" style="border:0px;" /&gt;&lt;/a&gt; &lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=172641" rel="tag" style="display:none;"&gt;CodeProject&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=842047" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Plug-in/default.aspx">Plug-in</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/After+the+Deadline/default.aspx">After the Deadline</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Grammar+Checker/default.aspx">Grammar Checker</category></item><item><title>How To Implement a Windows Live Writer Plug-in That Checks For Missing Tags</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2010/12/04/how-to-implement-a-windows-live-writer-plug-in-that-checks-for-missing-tags.aspx</link><pubDate>Sun, 05 Dec 2010 04:29:30 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:752673</guid><dc:creator>arik</dc:creator><slash:comments>3</slash:comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/arik/archive/2010/12/04/how-to-implement-a-windows-live-writer-plug-in-that-checks-for-missing-tags.aspx" scrolling="no" frameborder="0" style="border:none;width:130px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;This post provides the technical details on how I’ve implemented the Windows Live Writer Plug-in &lt;strong&gt;Check For Missing Tags&lt;/strong&gt;, which was presented &lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/12/04/never-forget-to-tag-your-post-again.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;What Is This Plug-in Anyway?&lt;/h3&gt;  &lt;p&gt;This plug-in will remind you to add the proper tags if they are missing.&lt;/p&gt;  &lt;p&gt;Trying to post without proper tagging when the plug-in is installed will result with the following dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_thumb2_3821E55C.png"&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" title="image_thumb[2]" alt="image_thumb[2]" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb2_thumb_203AFE36.png" width="442" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Clicking on the &lt;strong&gt;Cancel &lt;/strong&gt;button (which is the default) will abort the publish operation and will let you update the categories.&lt;/p&gt;  &lt;p&gt;The list of required categories is saved in a simple text file (required_categories.txt) next to the plug-in dll.&lt;/p&gt;  &lt;h3&gt;How It Was Built?&lt;/h3&gt;  &lt;p&gt;Following are the full instruction on how to build such a plug-in.    &lt;br /&gt;You can find the full source &lt;u&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/CheckMissingTagsPlugin_source.zip" target="_blank"&gt;here&lt;/a&gt;&lt;/u&gt;.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create new class library project named &lt;strong&gt;CheckMissingTagsPlugin. &lt;/strong&gt;Make sure you use .NET framework 3.5 since .NET 4 plugins are not supported.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Add reference to &lt;strong&gt;WindowsLive.Writer.Api&lt;/strong&gt;, located in C:\Program Files\Windows Live\Writer.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Add reference to &lt;strong&gt;System.Windows.Forms&lt;/strong&gt;, located in the &lt;a href="http://en.wikipedia.org/wiki/Global_Assembly_Cache" target="_blank"&gt;GAC&lt;/a&gt;.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Create a class named &lt;strong&gt;CheckMissingTags&lt;/strong&gt; that inherits from &lt;a href="http://msdn.microsoft.com/en-us/library/ff934648.aspx" target="_blank"&gt;PublishNotificationHook&lt;/a&gt;.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Apply attribute &lt;a href="http://msdn.microsoft.com/en-us/library/aa702864.aspx" target="_blank"&gt;WriterPluginAttribute&lt;/a&gt; to the class.       &lt;br /&gt;      &lt;br /&gt;      &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c90057eb-c3e3-4f42-a706-d934cbf3e7be" class="wlWriterSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"&gt;[&lt;span style="color:#2b91af;"&gt;WriterPlugin&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;EF0CAF97-12C2-4446-BDC4-19EE53781351&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Check For Missing Tags&amp;quot;&lt;/span&gt;)]&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CheckMissingTags&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;PublishNotificationHook&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt; &lt;br /&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Override the method &lt;a href="http://msdn.microsoft.com/en-us/library/ff934652.aspx" target="_blank"&gt;OnPrePublish&lt;/a&gt;. Here we can check for missing categories and notify the user.       &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c9cbb74e-224e-4ac0-9582-2f57df2e99e0" class="wlWriterSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; OnPrePublish(&lt;span style="color:#2b91af;"&gt;IWin32Window&lt;/span&gt; dialogOwner, &lt;span style="color:#2b91af;"&gt;IProperties&lt;/span&gt; properties, &lt;span style="color:#2b91af;"&gt;IPublishingContext&lt;/span&gt; publishingContext, &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; publish)&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color:#008000;"&gt;// get list of required categories&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] requiredCategories;&lt;br /&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.Exists(FileName))&lt;br /&gt;     {&lt;br /&gt;         requiredCategories = &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.ReadAllLines(FileName);&lt;br /&gt;     }&lt;br /&gt;     &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;     {&lt;br /&gt;         &lt;span style="color:#008000;"&gt;// warn about missing required categories&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; message = &lt;br /&gt;             &lt;span style="color:#a31515;"&gt;&amp;quot;Missing categories file: &amp;quot;&lt;/span&gt; + FileName + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#92;n&amp;quot;&lt;/span&gt; + &lt;br /&gt;             &lt;span style="color:#a31515;"&gt;&amp;quot;Post anyway?&amp;quot;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;         &lt;span style="color:#2b91af;"&gt;DialogResult&lt;/span&gt; dialogResult = &lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(&lt;br /&gt;             dialogOwner,&lt;br /&gt;             message,&lt;br /&gt;             &lt;span style="color:#a31515;"&gt;&amp;quot;Warning&amp;quot;&lt;/span&gt;,&lt;br /&gt;             &lt;span style="color:#2b91af;"&gt;MessageBoxButtons&lt;/span&gt;.OKCancel,&lt;br /&gt;             &lt;span style="color:#2b91af;"&gt;MessageBoxIcon&lt;/span&gt;.Warning,&lt;br /&gt;             &lt;span style="color:#2b91af;"&gt;MessageBoxDefaultButton&lt;/span&gt;.Button2);&lt;br /&gt; &lt;br /&gt;         &lt;span style="color:#008000;"&gt;// allow post only if user selected OK&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; dialogResult == &lt;span style="color:#2b91af;"&gt;DialogResult&lt;/span&gt;.OK;&lt;br /&gt;     }&lt;br /&gt; &lt;br /&gt;     &lt;span style="color:#008000;"&gt;// get list of available categories&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; availableCategories = &lt;br /&gt;         &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; category &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; publishingContext.PostInfo.Categories&lt;br /&gt;         &lt;span style="color:#0000ff;"&gt;select&lt;/span&gt; category.Name;&lt;br /&gt; &lt;br /&gt;     &lt;span style="color:#008000;"&gt;// is one of the required categories available?&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; hasAnyRequestedCategory = availableCategories.Any(&lt;br /&gt;         s =&amp;gt; requiredCategories.Contains(s, &lt;span style="color:#2b91af;"&gt;StringComparer&lt;/span&gt;.OrdinalIgnoreCase));&lt;br /&gt; &lt;br /&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!hasAnyRequestedCategory)&lt;br /&gt;     {&lt;br /&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; allRequiredCategories = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Join(&lt;span style="color:#a31515;"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;, requiredCategories);&lt;br /&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; message =&lt;br /&gt;             &lt;span style="color:#a31515;"&gt;&amp;quot;None of the required categories are available.&amp;#92;n&amp;quot;&lt;/span&gt; +&lt;br /&gt;             &lt;span style="color:#a31515;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt; + allRequiredCategories + &lt;span style="color:#a31515;"&gt;&amp;quot;)&amp;#92;n&amp;quot;&lt;/span&gt; +&lt;br /&gt;             &lt;span style="color:#a31515;"&gt;&amp;quot;Post without required categories?&amp;quot;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;         &lt;span style="color:#008000;"&gt;// warn about missing required categories&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#2b91af;"&gt;DialogResult&lt;/span&gt; dialogResult = &lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(&lt;br /&gt;             dialogOwner,&lt;br /&gt;             message,&lt;br /&gt;             &lt;span style="color:#a31515;"&gt;&amp;quot;Warning&amp;quot;&lt;/span&gt;,&lt;br /&gt;             &lt;span style="color:#2b91af;"&gt;MessageBoxButtons&lt;/span&gt;.OKCancel, &lt;br /&gt;             &lt;span style="color:#2b91af;"&gt;MessageBoxIcon&lt;/span&gt;.Warning, &lt;br /&gt;             &lt;span style="color:#2b91af;"&gt;MessageBoxDefaultButton&lt;/span&gt;.Button2);&lt;br /&gt; &lt;br /&gt;         &lt;span style="color:#008000;"&gt;// allow post only if user selected OK&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; dialogResult == &lt;span style="color:#2b91af;"&gt;DialogResult&lt;/span&gt;.OK;&lt;br /&gt;     }&lt;br /&gt; &lt;br /&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Add the following line to the post build event:      &lt;br /&gt;      &lt;br /&gt;XCOPY /D /Y /R &amp;quot;$(TargetPath)&amp;quot; &amp;quot;%ProgramFiles%\Windows Live\Writer\Plugins\&amp;quot;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Build project. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;u&gt;Note&lt;/u&gt;: In order for the post build event to work you need to run &lt;strong&gt;Visual Studio &lt;/strong&gt;as &lt;strong&gt;Administrator&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;That’s it for now,    &lt;br /&gt;Arik Poznanski.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=752673" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Live+Writer/default.aspx">Live Writer</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Plug-in/default.aspx">Plug-in</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Blog/default.aspx">Blog</category></item><item><title>Never Forget To Tag Your Post Again!</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2010/12/04/never-forget-to-tag-your-post-again.aspx</link><pubDate>Sun, 05 Dec 2010 04:26:47 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:752670</guid><dc:creator>arik</dc:creator><slash:comments>3</slash:comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/arik/archive/2010/12/04/never-forget-to-tag-your-post-again.aspx" scrolling="no" frameborder="0" style="border:none;width:130px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;h3&gt;Background&lt;/h3&gt;  &lt;p&gt;A few days ago, there was a &lt;a href="http://blogs.microsoft.co.il/blogs/michalnis/archive/2010/11/24/2-12.aspx" target="_blank"&gt;bloggers meeting&lt;/a&gt; at Microsoft Raanana Office. &lt;/p&gt;  &lt;p&gt;While I was there I’ve heard some people complain that they sometimes forget to add the proper tags to their blog posts (e.g. &lt;a href="http://blogs.microsoft.co.il/tags/DEV/default.aspx" target="_blank"&gt;DEV&lt;/a&gt;, &lt;a href="http://blogs.microsoft.co.il/tags/ITPRO/default.aspx" target="_blank"&gt;ITPRO&lt;/a&gt;, &lt;a href="http://blogs.microsoft.co.il/tags/TECH/default.aspx" target="_blank"&gt;TECH&lt;/a&gt;, &lt;a href="http://blogs.microsoft.co.il/tags/offtopic/default.aspx" target="_blank"&gt;OFFTOPIC&lt;/a&gt;, &lt;a href="http://blogs.microsoft.co.il/tags/video/default.aspx" target="_blank"&gt;VIDEO&lt;/a&gt;).&lt;/p&gt;  &lt;h3&gt;Presenting: Check For Missing Tags Plug-in&lt;/h3&gt;  &lt;p&gt;I’ve decided to pick up the glove and implement a Windows Live Writer plug-in that will remind you to add the proper tags.&lt;/p&gt;  &lt;p&gt;Trying to post without proper tagging when the plug-in is installed will result with the following dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_1B91CFB5.png"&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" title="image" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_6DC406EF.png" width="442" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Clicking on the &lt;strong&gt;Cancel &lt;/strong&gt;button (which is the default) will abort the publish operation and will let you update the categories.&lt;/p&gt;  &lt;p&gt;The list of required categories is saved in a simple text file (required_categories.txt) next to the plug-in dll.&lt;/p&gt;  &lt;h3&gt;How Do I Install This Cool Plug-in?&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;Download the &lt;a href="http://blogs.microsoft.co.il/blogs/arik/CheckMissingTagsPlugin.zip" target="_blank"&gt;following&lt;/a&gt; zip file. &lt;/li&gt;    &lt;li&gt;Extract it into &lt;strong&gt;C:\Program Files\Windows Live\Writer\Plugins\ &lt;/strong&gt;or the equivalent folder on your system (on 64 bit systems it’s &lt;strong&gt;Program Files (x86) &lt;/strong&gt;). &lt;/li&gt;    &lt;li&gt;Enjoy :) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;If you’re interested in the code, check out the following post.&lt;/p&gt;  &lt;p&gt;That’s it for now,    &lt;br /&gt;Arik Poznanski.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=752670" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Live+Writer/default.aspx">Live Writer</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Plug-in/default.aspx">Plug-in</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Blog/default.aspx">Blog</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/TECH/default.aspx">TECH</category></item><item><title>Live Writer “Share” Plug-in Posted to MSN Gallery</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2010/08/16/live-writer-share-plug-in-posted-to-msn-gallery.aspx</link><pubDate>Mon, 16 Aug 2010 21:01:56 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:690769</guid><dc:creator>arik</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In one of my previous posts I’ve published the code for a Live Writer plug-in that allows you to easily add to your post share buttons for common technological sharing sites, like:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://dotnetkicks.com/"&gt;DotNetKicks&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://dotnetshoutout.com/"&gt;DotNetShoutout&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeproject.com/"&gt;CodeProject&lt;/a&gt; blog feed &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.dzone.com/"&gt;DZone&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.addthis.com/"&gt;AddThis&lt;/a&gt; (facebook, twitter, mail, etc.) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Since I figured this plug-in can be useful to other people as well I’ve published it on the &lt;strong&gt;Microsoft Live Gallery&lt;/strong&gt;, a gallery for Live Writer plug-ins and more.&lt;/p&gt;  &lt;p&gt;You can download the plug-in &lt;a href="http://gallery.live.com/LiveItemDetail.aspx?li=6c4ae28a-4d8c-4fdb-bc92-5d1b2b9d9cf5"&gt;here&lt;/a&gt; and find details and source &lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/17/live-writer-plug-in-for-sharing-technical-post.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_62BC8040.png"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_693FDA03.png" width="642" height="265" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That’s it for now,    &lt;br /&gt;Arik Poznanski.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/08/16/live-writer-share-plug-in-posted-to-msn-gallery.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/08/16/live-writer-share-plug-in-posted-to-msn-gallery.aspx&amp;amp;bgcolor=6600FF" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Submit?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/08/16/live-writer-share-plug-in-posted-to-msn-gallery.aspx"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/08/16/live-writer-share-plug-in-posted-to-msn-gallery.aspx" style="border:0px;" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=690769" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Live+Writer/default.aspx">Live Writer</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Plug-in/default.aspx">Plug-in</category></item><item><title>Live Writer Plug-in for Sharing Technical Post</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/17/live-writer-plug-in-for-sharing-technical-post.aspx</link><pubDate>Sun, 18 Jul 2010 00:45:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:680464</guid><dc:creator>arik</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;Adding a new post to my blog was always a daunting task. &lt;br /&gt;I had to follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write the post on Windows Live Writer &lt;/li&gt;
&lt;li&gt;Publish it and get the post link &lt;/li&gt;
&lt;li&gt;Submit to &lt;a href="http://dotnetkicks.com/default.aspx"&gt;DotNetKicks&lt;/a&gt; and get their counter html &lt;/li&gt;
&lt;li&gt;Submit to &lt;a href="http://dotnetshoutout.com/"&gt;DotNetShoutout&lt;/a&gt; and get their counter html &lt;/li&gt;
&lt;li&gt;Prepare html for my &lt;a href="http://www.codeproject.com/"&gt;CodeProject&lt;/a&gt; blog feed &lt;/li&gt;
&lt;li&gt;Edit the post and add the html I’ve collected in the previous steps &lt;/li&gt;
&lt;li&gt;Republish post &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Well, no more!&lt;/p&gt;
&lt;p&gt;Inspired by &lt;a href="http://blogs.microsoft.co.il/blogs/bursteg/archive/2010/04/27/facebook-like-button-windows-live-writer-plugin.aspx"&gt;Guy Burstein’s post&lt;/a&gt; I’ve decided to write my own Live Writer Plug-in that will handle all of this mess for me.&lt;/p&gt;
&lt;p&gt;In order to test the plug-in I have to publish something on my blog. &lt;br /&gt;So, this is it. Wish me luck.&lt;/p&gt;
&lt;h3&gt;How to implement a Windows Live Writer Plug-in that adds sharing buttons to your post&lt;/h3&gt;
&lt;p&gt;First, credit goes to &lt;a href="http://blogs.microsoft.co.il/blogs/bursteg"&gt;Guy Burstein&lt;/a&gt; for providing a reflectable DLL in his post. &lt;br /&gt;Also, I’ve used guidelines for Windows Live Writer Plug-in written by &lt;a href="http://www.code-magazine.com/Article.aspx?quickid=0804092"&gt;Scøtt Lovegrove&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The end result is a plug-in that adds to your posts the following share icons:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_68C649F3.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;DISPLAY:block;FLOAT:none;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;MARGIN-LEFT:auto;BORDER-LEFT-WIDTH:0px;MARGIN-RIGHT:auto;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_0E4FC755.png" width="512" height="62" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Since enough information already exists on this subject, I’ll just quickly review the steps I’ve followed:&lt;/p&gt;
&lt;p&gt;1. Create new Class Library project, using .NET Framework 2.0 (!)&lt;/p&gt;
&lt;p&gt;Not sure why, but Microsoft recommends to use version 2.0 of the .NET Framework when writing a Windows Liver Writer plug-in.&lt;/p&gt;
&lt;p&gt;2. Add reference to &lt;strong&gt;WindowsLive.Writer.Api.Dll&lt;/strong&gt;, which resides in the Windows Live Writer folder (e.g. \Program Files\Windows Live\Writer\)&lt;/p&gt;
&lt;p&gt;3. Add “using &lt;strong&gt;WindowsLive.Writer.Api&lt;/strong&gt;;”&lt;/p&gt;
&lt;p&gt;4. Create a class that inherits &lt;strong&gt;HeaderFooterSource&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This type of plug-in allows us to add custom generated html in either the header or the footer of the post.&lt;/p&gt;
&lt;p&gt;5. Put &lt;strong&gt;WriterPlugin&lt;/strong&gt; attribute on the class&lt;/p&gt;
&lt;p&gt;Here is the code for a basic version of the plug-in (only has one button):&lt;/p&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;FLOAT:none;PADDING-TOP:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3fe4ae67-b2e4-4257-9f9b-2800ef702b2e" class="wlWriterSmartContent"&gt;
&lt;div style="BORDER-BOTTOM:#000080 1px solid;BORDER-LEFT:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;COLOR:#000;FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;BORDER-RIGHT:#000080 1px solid;"&gt;
&lt;div style="PADDING-BOTTOM:2px;BACKGROUND-COLOR:#ffffff;PADDING-LEFT:5px;PADDING-RIGHT:5px;OVERFLOW:auto;PADDING-TOP:2px;"&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; WindowsLive.Writer.Api;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;namespace&lt;/span&gt; ShareTechPost&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="COLOR:#2b91af;"&gt;WriterPlugin&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;00407F92-2152-4339-A9A5-B89873EB77A7&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Share Technological Post&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PublisherUrl = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;http://blogs.microsoft.co.il/blogs/arik/&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;A plugin that lets you share a technological&amp;quot;&lt;/span&gt; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot; post on numerous sharing sites.&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ImagePath = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;writer.png&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HasEditableOptions = &lt;span style="COLOR:#0000ff;"&gt;true&lt;/span&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;ShareTechPostPlugin&lt;/span&gt; : &lt;span style="COLOR:#2b91af;"&gt;HeaderFooterSource&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Settings&lt;/span&gt; _settings;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt; RequiresPermalink&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; Initialize(&lt;span style="COLOR:#2b91af;"&gt;IProperties&lt;/span&gt; pluginOptions)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;base&lt;/span&gt;.Initialize(pluginOptions);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_settings = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Settings&lt;/span&gt;(pluginOptions);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; EditOptions(&lt;span style="COLOR:#2b91af;"&gt;IWin32Window&lt;/span&gt; dialogOwner)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;SettingsForm&lt;/span&gt; settingsForm = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;SettingsForm&lt;/span&gt;(_settings);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;settingsForm.ShowDialog(dialogOwner);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; GeneratePreviewHtml(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;ISmartContent&lt;/span&gt; smartContent, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;IPublishingContext&lt;/span&gt; publishingContext, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Position&lt;/span&gt; position)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;position = &lt;span style="COLOR:#2b91af;"&gt;Position&lt;/span&gt;.Footer;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;StringBuilder&lt;/span&gt; generatedHtml = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (_settings.AddDotNetKicks)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generatedHtml.AppendFormat&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;lt;a href=\&amp;quot;http://www.dotnetkicks.com/kick/&amp;quot;&lt;/span&gt; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot;?url={0}\&amp;quot;&amp;gt;&amp;lt;img border=\&amp;quot;0\&amp;quot; &amp;quot;&lt;/span&gt;+&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot;alt=\&amp;quot;kick it on DotNetKicks.com\&amp;quot; &amp;quot;&lt;/span&gt; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot;src=\&amp;quot;http://www.dotnetkicks.com/&amp;quot;&lt;/span&gt; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Services/Images/KickItImageGenerator.ashx&amp;quot;&lt;/span&gt; + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot;?url={0}&amp;amp;amp;bgcolor=6600FF\&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt; &amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;publishingContext.PostInfo.Permalink);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; generatedHtml.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; GeneratePublishHtml(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;IWin32Window&lt;/span&gt; dialogOwner, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;ISmartContent&lt;/span&gt; smartContent, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;IPublishingContext&lt;/span&gt; publishingContext, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt; publish, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Position&lt;/span&gt; position)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; GeneratePreviewHtml(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;smartContent, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;publishingContext, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;out&lt;/span&gt; position);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The &lt;strong&gt;Settings &lt;/strong&gt;class and &lt;strong&gt;SettingsForm &lt;/strong&gt;just lets you control some of the sharing options.&lt;/p&gt;
&lt;p&gt;This is how the settings form look like:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_05EBF1FE.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;DISPLAY:block;FLOAT:none;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;MARGIN-LEFT:auto;BORDER-LEFT-WIDTH:0px;MARGIN-RIGHT:auto;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_6C23CD9C.png" width="569" height="482" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;You can find the full source for this plug-in &lt;a href="http://blogs.microsoft.co.il/blogs/arik/ShareTechPost.zip.txt"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That’s it for now, &lt;br /&gt;Arik Poznanski.&lt;/p&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;PADDING-TOP:0px;" class="wlWriterHeaderFooter"&gt;&lt;a style="DISPLAY:none;" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=172641" rel="tag"&gt;CodeProject&lt;/a&gt; &lt;/div&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;PADDING-TOP:0px;" class="wlWriterHeaderFooter"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/17/live-writer-plug-in-for-sharing-technical-post.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/17/live-writer-plug-in-for-sharing-technical-post.aspx&amp;amp;bgcolor=6600FF" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Submit?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/17/live-writer-plug-in-for-sharing-technical-post.aspx"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/17/live-writer-plug-in-for-sharing-technical-post.aspx" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=680464" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Live+Writer/default.aspx">Live Writer</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Plug-in/default.aspx">Plug-in</category></item></channel></rss>