<?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 : Blog</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/tags/Blog/default.aspx</link><description>Tags: Blog</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Blog Summary</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2011/11/20/blog-summary.aspx</link><pubDate>Sun, 20 Nov 2011 05:13:28 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:935937</guid><dc:creator>arik</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I feel this is a good time for me to present a summary of some of the posts I wrote..&lt;/p&gt;  &lt;h3&gt;Most Interesting Posts&lt;/h3&gt;  &lt;p&gt;Following are posts that I&amp;#39;m personally proud of.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/04/01/shake-gestures-library-a-windows-phone-recipe.aspx"&gt;Shake Gestures Library – A Windows Phone Recipe&lt;/a&gt;     &lt;br /&gt;In this post I present an algorithm for detecting shake gestures on a Windows Phone system using the accelerometer sensor. This is by far my favorite post since I actually needed to use some math to solve this one. &lt;/p&gt;  &lt;p&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_0F88EFF9.png" width="315" height="257" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&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;How To Use a .NET 4 Based DLL From .NET 2 Based Application?&lt;/a&gt;     &lt;br /&gt;In this post I explain how can one use COM Interop facilities to load two CLR versions (both 2.0 and 4.0) into the same process, thus enabling code that runs under .NET 2.0 to call code that runs under .NET 4.0&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_028121AE.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/arik/image_thumb_46E112ED.png" width="323" height="119" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/08/13/using_2D00_windows_2D00_phone_2D00_as_2D00_windows_2D00_7_2D00_accelerometer_2D00_sensor.aspx"&gt;Using Windows Phone As Windows 7 Accelerometer Sensor&lt;/a&gt;     &lt;br /&gt;In this post I present a cool project I&amp;#39;ve done: a user-mode driver that enables you to use your Windows Phone device as a standard Windows 7 accelerometer sensor.&lt;/p&gt;  &lt;p&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_25DE2CE4.png" width="347" height="207" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Most Popular Posts&lt;/h3&gt;  &lt;p&gt;Following are posts that are very popular on my blog. Some of them, only god knows why…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/09/19/windows-8-what-s-new.aspx"&gt;Windows 8: What&amp;#39;s New?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/08/28/order-in-chaos-handling-unhandled-exceptions-in-a-wpf-application.aspx"&gt;Order in Chaos: Handling unhandled exceptions in a WPF application&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/05/17/speed-up-visual-studio-builds.aspx"&gt;Speed up Visual Studio Builds&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/12/24/order-in-chaos-dependency-property-value-resolution.aspx"&gt;Order in Chaos: Dependency Property Value Resolution&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/11/17/no-more-magic-strings-presenting-string-of.aspx"&gt;No More Magic Strings! Presenting: @string.of&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/10/08/order-in-chaos-net-collections.aspx"&gt;Order in Chaos: .NET Collections&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/09/21/porting-from-wpf-to-silverlight-the-missing-pieces-part-1.aspx"&gt;Porting from WPF to Silverlight: The Missing Pieces, Part 1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/09/23/porting-from-wpf-to-silverlight-the-missing-pieces-part-2.aspx"&gt;Porting from WPF to Silverlight: The Missing Pieces, Part 2&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2009/12/23/windows-ribbon-for-winforms-part-0-table-of-contents.aspx"&gt;Windows Ribbon for WinForms, Part 0 – Table of Contents&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/04/13/wpf-animate-visibility-property-update.aspx"&gt;WPF: Animate Visibility Property&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx"&gt;WPF Single Instance Application&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/12/step-into-net-framework-4-0-source-code.aspx"&gt;Step Into .NET Framework 4.0 Source Code&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Tutorials&lt;/h3&gt;  &lt;p&gt;Following are some posts that I use as indexes to tutorials I wrote.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/09/07/wpf-tutorial-published-heb.aspx"&gt;WPF Tutorial&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/08/21/silverlight-tutorial-published-heb.aspx"&gt;Silverlight Tutorial&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/08/04/windows.phone.tutorial.published.hebrew.aspx"&gt;Windows Phone Tutorial&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/03/21/beginner-s-guide-for-programming-in-c-hebrew.aspx"&gt;C# for Beginners Tutorial&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Open Source Projects &lt;/h3&gt;  &lt;p&gt;Following are open source projects I created.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://wp7accelerometer.codeplex.com/"&gt;Windows Phone Accelerometer Driver for Windows 7&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://windowsribbon.codeplex.com/"&gt;Windows Ribbon for WinForms&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://wpfmessagebox.codeplex.com/"&gt;WPF MessageBox&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://afterthedeadline.codeplex.com/"&gt;Grammar and Spell Checking Library&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://grammarcheckerplugin.codeplex.com/"&gt;Grammar and Spell Checking Plugin for Windows Live Writer&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Awards&lt;/h3&gt;  &lt;p&gt;During the past year I&amp;#39;ve been awarded several titles:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/10/02/i-m-a-microsoft-mvp.aspx"&gt;Microsoft MVP (Most Valuable Professional)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/07/02/i-m-a-microsoft-community-contributor.aspx"&gt;Microsoft MCC (Microsoft Community Contributor)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/2011/01/06/codeproject-mvp-2011-amp-mcts.aspx"&gt;CodeProject MVP&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Conferences&lt;/h3&gt;  &lt;p&gt;Some posts about conferences that I attended.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Build/default.aspx"&gt;Build related posts&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/MIX+2011/default.aspx"&gt;MIX 2011 related posts&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/PDC+2010/default.aspx"&gt;PDC 2010 related posts&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Topics&lt;/h3&gt;  &lt;p&gt;And finally, here are the main topics I wrote about.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/C_2300_/default.aspx"&gt;C# related posts&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/C_2B002B00_/default.aspx"&gt;C++ related posts&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Windows+7/default.aspx"&gt;Windows 7 related posts&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/WPF/default.aspx"&gt;WPF related posts&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Silverlight/default.aspx"&gt;Silverlight related posts&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Windows+Phone+7/default.aspx"&gt;Windows Phone related posts&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;That&amp;#39;s it for now,    &lt;br /&gt;Arik Poznanski.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=935937" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><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/Blog/default.aspx">Blog</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Summary/default.aspx">Summary</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>Happy Blog Day #1</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2010/09/09/happy-blog-day-1.aspx</link><pubDate>Thu, 09 Sep 2010 06:01:19 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:703670</guid><dc:creator>arik</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;It has been a year since I’ve started blogging and I think this is a good point for thinking where I was , where I am and where I’m going.&lt;/p&gt;  &lt;p&gt;In this year I’ve written 46 posts. Not bad, but not nearly as much as I want or as much ideas I have for posts. Unfortunately, (or fortunately?) I enjoy my work so much that I often find myself practicing it on my spare time, leaving less time for blogging.&lt;/p&gt;  &lt;p&gt;The topics I’ve blogged about where mostly Windows 7 related features (over 70%), the rest is divided between WPF and .NET 4 related posts.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arik/image_3AB32A54.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_53625197.png" width="484" height="292" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;On the coming year I hope I can dedicate more time for blogging.    &lt;br /&gt;Regarding the topics I’ll write about, I can’t predict the future, so I won’t commit to nothing. That being said, I think what will interest me in the near future is WPF and Silverlight (both for web and Windows Phone), Windows 7 and .NET internals.&lt;/p&gt;  &lt;p&gt;I wish you all a happy new (blogging) year.&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=703670" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Blog/default.aspx">Blog</category></item></channel></rss>