<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7306978581108695483</id><updated>2012-01-16T16:21:32.347-08:00</updated><title type='text'>Alin Constantin 's blog</title><subtitle type='html'>Mostly technical</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2082827120598802906</id><published>2011-09-29T20:00:00.001-07:00</published><updated>2011-09-29T20:00:52.669-07:00</updated><title type='text'>Have a Windows Phone 7? Here’s how to force a Mango update</title><content type='html'>&lt;p&gt;Microsoft has released Windows Phone 7.5 Mango release, and carriers have already rolling out the update for most models (see &lt;a href="http://www.cnet.com/8301-17918_1-20112417-85/windows-phone-mango-update-schedule-and-new-devices/"&gt;list of phones for which Mango update is already rolling&lt;/a&gt;). Unfortunately, this roll-out is graduate and it may take weeks until the carrier provider notifies you to install it.&lt;/p&gt;  &lt;p&gt;But, via &lt;a href="http://www.cnet.com/profile/FnPsychopath/"&gt;FnPsychopath&lt;/a&gt;’s post in the above mentioned article, there is a way to force the Mango update on phones for which Mango has started rolling out:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;Connect your Windows Phone to a PC and launch the Zune software        &lt;br /&gt;Click on Phone &amp;gt; Settings &amp;gt; Update. Allow the software to tell you whether an update is available. If so, skip this guide. If not continue to the next step.         &lt;br /&gt;Time to force the update. Click another button (any of the options above or below the word Update). Then click the Update button again, and this time disconnect your computer from the internet after 1-2 seconds. Do this by pulling out the Ethernet cable, disabling Wi-Fi, etc. If it says your phone is already up to date, you didn't disconnect quickly enough and need to try this step again.         &lt;br /&gt;Wait 30 seconds or so and Zune should display a notification that an update is available. This is 7392, the first Mango pre-update.         &lt;br /&gt;Now reconnect to the internet and continue with the update process through the Zune software.         &lt;br /&gt;After 7392 is fully installed, you may receive a notification that another update is available. If so, install it now. If not, proceed to the next step.         &lt;br /&gt;If the second update isn't popping up on its own, repeat steps 3-5, causing the 7403 update to appear.         &lt;br /&gt;Install 7403, brave reader. Speeding right along, isn't it? ;)         &lt;br /&gt;Mango time! At this point, Zune should automatically start installing the last update, 7720, aka Mango. If it doesn't happen automatically, force it like we did in previous steps. &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Nice hack! It worked for me exactly as described. I’m not sure if this is a bug in Zune software or an intentional feature/workaround, but it sure is handy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2082827120598802906?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2082827120598802906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2082827120598802906' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2082827120598802906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2082827120598802906'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2011/09/have-windows-phone-7-heres-how-to-force.html' title='Have a Windows Phone 7? Here’s how to force a Mango update'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-7539508786336410680</id><published>2011-08-25T02:59:00.001-07:00</published><updated>2011-08-25T02:59:56.460-07:00</updated><title type='text'>&lt;Strings&gt; Element in VSCT files – ButtonText, CommandName, CanonicalName, MenuText, oh my!</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you ever added a Button definition in VSCT files for Visual Studio menus, you may have wondered what are all the ButtonText, MenuText, CommandName, etc. elements associated with the button.&lt;/p&gt;  &lt;p&gt;When you create a new Visual Studio Extensibility project and tell it to create a menu item, accepting the default values, the result is a generated vsct file containing code like this:&lt;/p&gt;  &lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;guid&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;guidVSPackage1CmdSet&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;cmdidMyCommand&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;priority&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;0x0100&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Button&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Parent&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;guid&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;guidVSPackage1CmdSet&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyMenuGroup&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Icon&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;guid&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;guidImages&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;bmpPic1&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Strings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CommandName&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;cmdidMyCommand&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CommandName&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ButtonText&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;My Command name&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ButtonText&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Strings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I’m going to tell you upfront it’s indicated to change the format of the &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: #a31515"&gt;CommandName&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;element – the project template generator gets it wrong how the value should look like.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So,&amp;#160; where do these values appear in UI?&amp;#160; There is a &lt;a href="http://msdn.microsoft.com/en-us/library/bb491712.aspx"&gt;MSDN article for the Strings Element description&lt;/a&gt;, but is a bit confusing, and as writing this article, it contains a couple of mistakes. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To better exemplify where all these elements appear, let’s start by defining a Button command with each child element specified, like so:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/-m_jIf-ee6z8/TlYc9athCLI/AAAAAAAAAOg/X2r72vZNOgc/s1600-h/VSCT%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VSCT" border="0" alt="VSCT" src="http://lh5.ggpht.com/-IrIqK7_E2qw/TlYc9Z6R9kI/AAAAAAAAAOk/XDSaFtr64T8/VSCT_thumb%25255B1%25255D.png?imgmax=800" width="845" height="180" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now let’s build the project and see where these strings appear in Visual Studio.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Let’s start with &lt;strong&gt;ButtonText&lt;/strong&gt;. This is a mandatory string, and, if any other strings are omitted, this string will be used to generate the other optional values. This means this string can appear in all places&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;As the MSDN page describes, &lt;strong&gt;ButtonText &lt;/strong&gt;is used in UI when the button is placed in a menu controller (such as the dropdown menu of the NewProject button):&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-HJ8PpJEp_Rg/TlYc96y8wPI/AAAAAAAAAOo/ckMHenTZh80/s1600-h/MenuControllers%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="MenuControllers" border="0" alt="MenuControllers" src="http://lh6.ggpht.com/-fwjPKyG7ZVU/TlYc-WjyliI/AAAAAAAAAOs/dkl3ue8Fc-I/MenuControllers_thumb%25255B1%25255D.png?imgmax=800" width="483" height="182" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;However, the same &lt;strong&gt;ButtonText&lt;/strong&gt; string is used when the button is placed:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;- in the Visual Studio’s Main Menu&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;- in a toolbar (e.g. in the Standard toolbar)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-gVfTR7wl9ig/TlYc-oB_-XI/AAAAAAAAAOw/bJJbxZGZR3o/s1600-h/MenuToolbars%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="MenuToolbars" border="0" alt="MenuToolbars" src="http://lh3.ggpht.com/-SkCLF5URhz0/TlYc_BNEjjI/AAAAAAAAAO0/3w8BpMG_7jQ/MenuToolbars_thumb%25255B1%25255D.png?imgmax=800" width="618" height="202" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the same picture, notice also that when the button is placed in a menu (e.g. under the File menu), a different string is used – this time &lt;strong&gt;MenuText&lt;/strong&gt; is used.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;A button can be easily added to other menus and toolbars by using the Tools/Customize dialog. However, using the dialog it may be a bit confusing because it displays a different string. Neither &lt;strong&gt;ButtonText&lt;/strong&gt; nor &lt;strong&gt;MenuText&lt;/strong&gt; will appear in this dialog, despite the dialog mimicking the looks of menus and toolbars. Here, in the Controls list, is used the &lt;strong&gt;CommandName&lt;/strong&gt; string.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-DuaSBItpkec/TlYc_ZXKQ6I/AAAAAAAAAO4/jmMLLnDnBbM/s1600-h/Customize%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Customize" border="0" alt="Customize" src="http://lh4.ggpht.com/-LqOzc-xYqow/TlYc_oIrcZI/AAAAAAAAAO8/-hpHa4xxc1I/Customize_thumb%25255B2%25255D.png?imgmax=800" width="539" height="554" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;strong&gt;CommandName&lt;/strong&gt; also appears in the Add Command dialog that can be invoked from the Customize dialog, in the Commands list.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-WIZeNq6H-a0/TlYc_6mo_FI/AAAAAAAAAPA/0K2CCs1nYEo/s1600-h/CustomizeAdd%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CustomizeAdd" border="0" alt="CustomizeAdd" src="http://lh5.ggpht.com/-2O8DalrmKuE/TlYdBLh6eSI/AAAAAAAAAPE/ZhAmSShR1lc/CustomizeAdd_thumb%25255B1%25255D.png?imgmax=800" width="589" height="374" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now you may see why it’s recommended to change the format of the &lt;strong&gt;CommandName&lt;/strong&gt; generated by the project wizard. It may be hard for users to figure out that cmdidMyCommand is actually related to what the user usually sees in the UI for that command, more like “Command Name”. Use a descriptive string for your command names, use spaces and no funky “cmdid” prefixes. Or simply don’t define at all this string, and let the shell display instead the &lt;strong&gt;ButtonText&lt;/strong&gt; string – this is probably what you’ll want in most cases.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/bb491712.aspx"&gt;MSDN article&lt;/a&gt; indicates CommandName is also used in the Tools/Options dialog in the Keyboard page. This is incorrect. The Keyboard dialog displays the &lt;strong&gt;LocCanonicalName &lt;/strong&gt;string (or in it’s absence, the ButtonText string), after stripping unwanted characters such as spaces, ellipses, ampersands, etc.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-LW6T3Sx_FIc/TlYdEE3dcqI/AAAAAAAAAPI/YcIhbR88Elc/s1600-h/Keyboard%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Keyboard" border="0" alt="Keyboard" src="http://lh6.ggpht.com/-Ewjevp3eEtY/TlYdEeyGDPI/AAAAAAAAAPM/rAXqkzshGIY/Keyboard_thumb%25255B1%25255D.png?imgmax=800" width="761" height="444" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;strong&gt;LocCanonicalName &lt;/strong&gt;string&amp;#160; is also displayed in the Command tool window, in the Intellisense/autocomplete popups. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-pyoFZxN_JYA/TlYdEwPCtVI/AAAAAAAAAPQ/A4zZkTnULzY/s1600-h/CommandWindow%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CommandWindow" border="0" alt="CommandWindow" src="http://lh4.ggpht.com/-EEjfWVDbMQE/TlYdFC05ZfI/AAAAAAAAAPU/gryTGluSJ2M/CommandWindow_thumb%25255B1%25255D.png?imgmax=800" width="542" height="160" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Again, the &lt;a href="http://msdn.microsoft.com/en-us/library/bb491712.aspx"&gt;MSDN page&lt;/a&gt; is a bit misleading here, as it seem to suggest that &lt;strong&gt;CanonicalName&lt;/strong&gt; string appears in the Command Window (after being stripped of ampersands, spaces, etc). &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;While the autocomplete popup only displays the &lt;strong&gt;LocCanonicalName &lt;/strong&gt;string,&amp;#160; both &lt;strong&gt;CanonicalName&lt;/strong&gt; and &lt;strong&gt;LocCanonicalName&lt;/strong&gt; can be used for command execution, &lt;strong&gt;but you have to type the canonical name string&lt;/strong&gt;. Notice that execution succeeded no matter which of these strings was typed, whereas trying to execute an inexistent command displayed an error message. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/-RFgEdMeHhqE/TlYdFx1L9lI/AAAAAAAAAPY/MTnrE9eusFg/s1600-h/CommandWindow2%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CommandWindow2" border="0" alt="CommandWindow2" src="http://lh5.ggpht.com/-V4O6YAB4SQc/TlYdGJP-F7I/AAAAAAAAAPc/KEItIBjfusY/CommandWindow2_thumb%25255B1%25255D.png?imgmax=800" width="619" height="208" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Again, if one of these strings (or both) is omitted from the button’s definition, the ButtonText is used instead to generate a canonical name for command execution and/or the autocomplete popup.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And finally, the &lt;strong&gt;ToolTipText&lt;/strong&gt; string is used for the button’s tooltip, when the button is placed:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;- in the Visual Studio’s main menu, as a top-level button&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;- in a toolbar (in this case the keyboard shortcut, if any, is also displayed in the tooltip)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The tooltip is &lt;strong&gt;not &lt;/strong&gt;displayed when the button is placed as a menu item (e.g. in the File menu) as the &lt;a href="http://msdn.microsoft.com/en-us/library/bb491712.aspx"&gt;MSDN page&lt;/a&gt; indicates.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/-RjqeO6kF35k/TlYdGUdvabI/AAAAAAAAAPg/8aFu35umVj0/s1600-h/TooltipText%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TooltipText" border="0" alt="TooltipText" src="http://lh4.ggpht.com/-lVOq6Xtz3xY/TlYdG8ZKZVI/AAAAAAAAAPk/olwL6ajfR4U/TooltipText_thumb%25255B1%25255D.png?imgmax=800" width="421" height="145" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-7539508786336410680?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/7539508786336410680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=7539508786336410680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7539508786336410680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7539508786336410680'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2011/08/element-in-vsct-files-buttontext.html' title='&amp;lt;Strings&amp;gt; Element in VSCT files – ButtonText, CommandName, CanonicalName, MenuText, oh my!'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-IrIqK7_E2qw/TlYc9Z6R9kI/AAAAAAAAAOk/XDSaFtr64T8/s72-c/VSCT_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-7517536850231178473</id><published>2011-07-20T21:39:00.001-07:00</published><updated>2011-07-20T21:39:24.165-07:00</updated><title type='text'>Facebook scams and removing Facebook posts</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Facebook scams are proliferating lately, and I just got tricked by one of them, too :-(   &lt;br /&gt;It starts with a friend sharing a link like &amp;quot;Crazy girl must be nuts but also a damn smart for mak1ng this video&amp;quot;. If you click it and follow the &amp;quot;age verification&amp;quot; prompts that follow you'll only help the malware spread - as it will add without your knowledge an identical post to your wall.    &lt;br /&gt;The Jaa button in the “age verifications” prompts is not the German word for Yes, but the Finnish word for Share :-)    &lt;br /&gt;So, if you see such posts, don't follow the links!&lt;/p&gt;  &lt;p&gt;Graham Cluley security analyst at Sophos Antivirus describes better similar malware on his blog   &lt;br /&gt;&lt;a title="http://nakedsecurity.sophos.com/2011/07/12/a-spider-under-the-skin-its-a-facebook-survey-scam/" href="http://nakedsecurity.sophos.com/2011/07/12/a-spider-under-the-skin-its-a-facebook-survey-scam/"&gt;http://nakedsecurity.sophos.com/2011/07/12/a-spider-under-the-skin-its-a-facebook-survey-scam/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If&amp;#160; you made the mistake of following the link, and now you have an unwanted post on your wall, here is how to delete the post from the Facebook page: Hover the post in your wall. An X blue button will appear in the right of the message. Use the button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-YKiYi6_yUW0/TietdhRLclI/AAAAAAAAAOQ/bYtoYHUfLAA/s1600-h/image%25255B10%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-PRcd3_35wj4/TieteIt9bPI/AAAAAAAAAOU/NBLMxUAJRMg/image_thumb%25255B6%25255D.png?imgmax=800" width="526" height="169" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click the button to open a context menu and choose to Report it – it will remove it and report as malware. The same removal X button can be accessed from the post’s thread page (that you can access by clicking the link with the timestamp of the post, highlighted above)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-qlvFms5UJG8/TieteU6Z1HI/AAAAAAAAAOY/nPBujTHINZI/s1600-h/image%25255B13%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-GK_guTuXGZU/TietegmjQTI/AAAAAAAAAOc/Z66Ysi5QMWs/image_thumb%25255B7%25255D.png?imgmax=800" width="152" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-7517536850231178473?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/7517536850231178473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=7517536850231178473' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7517536850231178473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7517536850231178473'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2011/07/facebook-scams-and-removing-facebook.html' title='Facebook scams and removing Facebook posts'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-PRcd3_35wj4/TieteIt9bPI/AAAAAAAAAOU/NBLMxUAJRMg/s72-c/image_thumb%25255B6%25255D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-4980778422865096439</id><published>2011-07-18T22:35:00.001-07:00</published><updated>2011-07-18T22:35:35.987-07:00</updated><title type='text'>“Visual Studio was my idea”</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Not mine, but yours. Well, it’s not entirely true, but you get the idea. If you have suggestions for improving the next versions of Visual Studio, you can make your voice heard by posting or voting on existing posts at&amp;#160; &lt;a title="http://visualstudio.uservoice.com" href="http://visualstudio.uservoice.com"&gt;http://visualstudio.uservoice.com&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-4980778422865096439?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/4980778422865096439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=4980778422865096439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4980778422865096439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4980778422865096439'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2011/07/visual-studio-was-my-idea.html' title='“Visual Studio was my idea”'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-1701631186757262833</id><published>2011-07-12T01:37:00.001-07:00</published><updated>2011-07-12T01:37:55.586-07:00</updated><title type='text'>Samsung Focus not charging</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Today I run into a hardware bug with my Samsung Focus – no matter how long I’d keep the phone plugged in, it showed the same battery level, somewhere at 30%. I reset the phone, but instead of fixing the problem, it made it worse - now the battery level was shown at 0%, and again, keeping the phone plugged in had no effect. The phone was simply not charging. Now every time I was unplugging the phone it displayed notifications that battery level is too low and I should plug it back in.&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;I searched the net and I found that other users had similar problems, and the “fix” was to return the phone to the carrier provider for a refund/exchange. Ugh.&lt;/p&gt;          &lt;p&gt;Then I found another user who fixed his phone by resetting the phone in diagnostics mode. Fortunately his solution worked for me, too. Here it is:&lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;Start the phone application and show the keyboard &lt;/li&gt;            &lt;li&gt;Type ##634# - this enters the phone diagnostics mode &lt;/li&gt;            &lt;li&gt;Type *#2*# - this displays the battery information. All the numbers on the first page in the (MV) section were shown as 0% or 0mV. &lt;/li&gt;            &lt;li&gt;Now reset the phone (by keeping pressed the power button until the phone turns off, then press it again to turn the phone back on) &lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;After reset, the battery level started showing 100% (it was about time, after being kept so long plugged in), and re-entering the battery information diagnostics page seemed to agree – now it was showing non-null numbers, all good.&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="200" align="right"&gt;&lt;a href="http://lh5.ggpht.com/-qvhIH_qFst8/ThwH3-H1SuI/AAAAAAAAAOI/IeIlsf6FQoQ/s1600-h/FocusPowerDisplay%25255B13%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="FocusPowerDisplay" border="0" alt="FocusPowerDisplay" src="http://lh3.ggpht.com/-I1Lp9rnvIus/ThwH4qHQVhI/AAAAAAAAAOM/xAuJMQZUWp4/FocusPowerDisplay_thumb%25255B6%25255D.jpg?imgmax=800" width="233" height="324" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;You can find more interesting diagnostics codes about Samsung Focus on &lt;a href="http://forum.xda-developers.com/wiki/index.php?title=Samsung_Focus"&gt;XDA-Developers forum&lt;/a&gt; page.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-1701631186757262833?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/1701631186757262833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=1701631186757262833' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1701631186757262833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1701631186757262833'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2011/07/samsung-focus-not-charging.html' title='Samsung Focus not charging'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-I1Lp9rnvIus/ThwH4qHQVhI/AAAAAAAAAOM/xAuJMQZUWp4/s72-c/FocusPowerDisplay_thumb%25255B6%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-8034192981490139120</id><published>2011-05-30T23:30:00.001-07:00</published><updated>2011-05-30T23:30:38.792-07:00</updated><title type='text'>Thanks God for backup!</title><content type='html'>&lt;p&gt;I survived a hard drive crash with no data loss and no time spent for installs! Kudos to the Microsoft Server Backup / PC System Repair team!&lt;/p&gt;  &lt;p&gt;Two days ago the SCSI hard drive in my Win 2008 home server (Domain Controller, DNS, web, etc) died on me &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://lh4.ggpht.com/-XaCsF8v4RNY/TeSLDhtZVoI/AAAAAAAAAOE/BNSFxcjR26M/wlEmoticon-sadsmile%25255B2%25255D.png?imgmax=800" /&gt;. It was an 80GB Cheetah from another era (or should I say Dinosaur), and it probably it was its time… I had back-ups of important personal user files from other computers (so I was not yet puling my hair), but even those could not be accessed. See, the Linux NAS used for storage refused to give access to the shares without a domain controller to authenticate the logon requests… &lt;/p&gt;  &lt;p&gt;I was already seeing myself spending a week reinstalling and reconfiguring the server, and my heart was full of joy at this idea. Not! Fortunately, it intrigued me why I kept installed on the machine another 300GB old drive, and when I checked I discovered it contained a full system backup VHD image from the same day! I had completely forgot about it. I didn’t even remember when I had the moment of lucidity to set up automatic daily backups, but boy, am I ever glad I did!&lt;/p&gt;  &lt;p&gt;I bought another hard drive, I used a Windows Vista (!) installation disk as I couldn’t find the one from Win2008 (it worked fine, btw), and 30 minutes later my server was up and running, with no data loss. SCSCI –&amp;gt; SATA, 80GB –&amp;gt; 1TB unformatted, unmatched restore tools, all these were no problems for System Repair. Yay system restore!&lt;/p&gt;  &lt;p&gt;Now I can focus on the second crashed machine, where the power supply crashed and burned (literally) and unfortunately it took with it at least the motherboard… Or maybe it was the other way around, who knows. But fixing it will be the fun for another night.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-8034192981490139120?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/8034192981490139120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=8034192981490139120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8034192981490139120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8034192981490139120'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2011/05/thanks-god-for-backup.html' title='Thanks God for backup!'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-XaCsF8v4RNY/TeSLDhtZVoI/AAAAAAAAAOE/BNSFxcjR26M/s72-c/wlEmoticon-sadsmile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-6470475956038872339</id><published>2010-12-22T23:20:00.000-08:00</published><updated>2010-12-22T23:20:41.621-08:00</updated><title type='text'>Things I wish the Windows Phone would have</title><content type='html'>&lt;strong&gt;- An easy way to share contacts between 2 Windows Phones&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Unbelievable, but there is no easy way to just send a contact info from my phone directly to my wife's phone. It is possible, but the solution I found is too complicated, requires computer use and having Office installed: from my&amp;nbsp;mail account on Exchange (where my contacts are saved), send a mail to my wife's accout on Hotmail and attach the contact's info. On a computer, install Outlook with &lt;a href="http://office.microsoft.com/en-us/outlook-help/microsoft-office-outlook-hotmail-connector-overview-HA010222518.aspx"&gt;Outlook Hotmail&amp;nbsp;Connector&lt;/a&gt;, then follow the steps in &lt;a href="http://www.microsoft.com/windowsphone/en-us/howto/wp7/people/import-contacts-from-my-pc.aspx"&gt;Importing contacts from PC&lt;/a&gt;&amp;nbsp;article to copy the contact info in the Hotmail contacts of the other account. The phone will sync it from here automatically. There is also a caveat, that Office wants to store by default the contacts in the "Last, First" name format, so if you want them appearing on the phone correctly you'd have to make sure they are saved in the "First Last" format....&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;- An easy way to publish/share a video recorded with the phone&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;For pictures, the phone knows how to &lt;a href="http://www.microsoft.com/windowsphone/en-us/howto/wp7/pictures/upload-pictures-to-the-web.aspx"&gt;upload the pictures automatically &lt;/a&gt;on SkyDrive or Facebook.&amp;nbsp;However, for videos there isn't a similar way. Why?!?&lt;br /&gt;There is also a Youtube application from Microsoft, but this also doesn't seem to allow uploading a video I just recorded...&lt;br /&gt;Now if I understand correctly, I can import the video on the PC after I'll install the Zune software (which btw, doesn't install on Windows 2008 R2 Server), and I can share it from there, but why do I have to use a PC and install software for this simple task?&lt;br /&gt;&lt;br /&gt;If these things will annoy me too much I may end up writing an application to solve the problem (or some other developers may beat me to it). &lt;br /&gt;&lt;br /&gt;But&amp;nbsp;I'm&amp;nbsp;hoping the version 2 of the&amp;nbsp;Windows Phone software&amp;nbsp;that will come early next year will help solve these&amp;nbsp;simple tasks. This is functionality that should be directly supported by the phone, and should not require installing 3rd party applications, using a computer or install other software there (paid or free) :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-6470475956038872339?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/6470475956038872339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=6470475956038872339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/6470475956038872339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/6470475956038872339'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/12/things-i-wish-windows-phone-would-have.html' title='Things I wish the Windows Phone would have'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2321263232376975085</id><published>2010-12-14T01:05:00.000-08:00</published><updated>2010-12-14T01:05:46.546-08:00</updated><title type='text'>Enabling Aero Glass or Windows 7 Basic theme in Remote Desktop Connection to a Windows Server 2008</title><content type='html'>By default, remote desktop connections to a Windows Server 2008 get Windows Classic theme. Enabling Aero or Windows 7 Basic theme requires a couple of steps, and here are the relevant settings (for next time I'll have to do this again)&lt;br /&gt;&lt;br /&gt;On server:&lt;br /&gt;1) Add the Desktop Experience feature from the Server Manager. &lt;br /&gt;&lt;br /&gt;2) Set the Themes service to autostart, and start the Themes service.&lt;br /&gt;3) Enable the “Allow desktop composition for remote desktop sessions” policy from gpedit.&lt;br /&gt;The policy path is “ComputerConfiguration\AdministrativeTemplates\WindowsComponents\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment”&lt;br /&gt;4) Enable 32bpp for RDP connections - In Server Manager, go to “Remote Desktop Session Host Configuration” under “Remote Desktop Services” role, right-click on the connection to bring up “RDP-Tcp Properties”, uncheck “Limit Maximum Color Depth” from “Remote Desktop Session Host Configuration.”&lt;br /&gt;&lt;br /&gt;More details on the steps above here: &lt;a href="http://blogs.msdn.com/b/rds/archive/2009/06/23/aero-glass-remoting-in-windows-server-2008-r2.aspx"&gt;http://blogs.msdn.com/b/rds/archive/2009/06/23/aero-glass-remoting-in-windows-server-2008-r2.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) Since the defaul theme is Classic and can't be changed from Display Properties while connecting through RD, you need to force Aero as a default theme. Again use gpedit, under User Configuration\Administrative Templates\Control Panel\Personalization\Force a specific visual style or force Windows Classic, set it to Enabled and&amp;nbsp;type in the Path to Theme file "%windir%\Resources\Themes\Aero\aero.msstyles". &lt;br /&gt;&lt;br /&gt;More&amp;nbsp;details on this here: &lt;a href="http://windows7themes.net/windows-7-theme-group-policy.html"&gt;http://windows7themes.net/windows-7-theme-group-policy.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the client machine: &lt;br /&gt;1)&amp;nbsp; In Mstsc's options, the color depth of the remote session must be set to 32-bit&lt;br /&gt;2) “Desktop composition” must be enabled on the Experience tab&lt;br /&gt;(If the above are not set, the Windows 7 Basic theme will be used instead of Aero)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2321263232376975085?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2321263232376975085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2321263232376975085' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2321263232376975085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2321263232376975085'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/12/enabling-aero-glass-or-windows-7-basic.html' title='Enabling Aero Glass or Windows 7 Basic theme in Remote Desktop Connection to a Windows Server 2008'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-5477649577254557384</id><published>2010-12-11T15:42:00.000-08:00</published><updated>2010-12-11T15:42:32.722-08:00</updated><title type='text'>Easily recording video of an application behavior</title><content type='html'>&lt;p$1&gt;&lt;p$1&gt;At times, when you encounter a bug in an application and want to report it to the manufacturer (e.g. when reporting bugs to Microsoft on &lt;a href="http://connect.microsoft.com/"&gt;Connect&lt;/a&gt;), it may help to attach a video demonstrating the problem when you reproduce it. &lt;br /&gt;&lt;br /&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;An easy and free way to capture such video is to use &lt;a href="http://www.officelabs.com/projects/communityclips/Pages/Default.aspx"&gt;Office Labs Community Clips&lt;/a&gt; recorder. &lt;/p$1&gt;&lt;p$1&gt;The video recorder can be downloaded directly from &lt;a href="http://go.microsoft.com/fwlink/?LinkId=117503&amp;amp;project=Community Clips"&gt;http://go.microsoft.com/fwlink/?LinkId=117503&amp;amp;project=Community Clips&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;When installed and started, the Community Clips application displays an icon in the system tray where recording can be started/stopped.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_ZoHTfJbZeoA/TQQLnRCrerI/AAAAAAAAANo/whAcJgs0PiU/s1600/VideoRecorder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="258" n4="true" src="http://2.bp.blogspot.com/_ZoHTfJbZeoA/TQQLnRCrerI/AAAAAAAAANo/whAcJgs0PiU/s320/VideoRecorder.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After stopping the recording, the captured video can be re-played, saved locally as wmv file,&amp;nbsp; or sent via email.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-5477649577254557384?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/5477649577254557384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=5477649577254557384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5477649577254557384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5477649577254557384'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/12/easily-recording-video-of-application.html' title='Easily recording video of an application behavior'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZoHTfJbZeoA/TQQLnRCrerI/AAAAAAAAANo/whAcJgs0PiU/s72-c/VideoRecorder.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-4387351570667432369</id><published>2010-08-11T09:55:00.000-07:00</published><updated>2010-08-11T09:55:14.195-07:00</updated><title type='text'>Microsoft Language Portal -</title><content type='html'>Have you ever wanted to create a program localized in other language but were not quite sure what's the usual translation of a computer-related word or phrase?&lt;br /&gt;E.g. have you ever wondered how to say &lt;a href="http://www.microsoft.com/Language/en-US/Search.aspx?sString=recycle+bin&amp;langID=fr-fr"&gt;"recycle bin" in French&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Well, now it's easily possible. Microsoft has made searchable the translations used in their programs. &lt;br /&gt;Just search the words of interest on &lt;a href="http://www.microsoft.com/language/"&gt;Microsoft Language Portal&lt;/a&gt; and your program can have the same familiar feel as other localized Microsoft programs!&lt;br /&gt;&lt;br /&gt;Also there are available for download &lt;a href="http://www.microsoft.com/Language/en-US/StyleGuides.aspx"&gt;Style Guides&lt;/a&gt; for the languages, describing when to use capitalizations, or whether nouns/verbs should be preferred for buttons and menu items, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-4387351570667432369?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/4387351570667432369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=4387351570667432369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4387351570667432369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4387351570667432369'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/08/microsoft-language-portal.html' title='Microsoft Language Portal -'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-8673861632162985131</id><published>2010-07-19T13:48:00.001-07:00</published><updated>2010-07-19T13:48:25.868-07:00</updated><title type='text'>Windows 7 Jump Lists and Visual Studio 2010</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The jumplists in Visual Studio 2010 should display in the Recent Items list the most recently used projects and solutions. The list should be similar with the MRU list displayed on the StartPage, and with the project list in Files/RecentProjectsAndSolution menu.&lt;/p&gt;  &lt;p&gt;Projects and Solutions are automatically added to the list by Windows on behalf of Visual Studio when projects are double-clicked in Windows Explorer, or when are opened using the standard File/Open/Project dialog. The items also end up in this list when Visual Studio calls explicitly &lt;a href="http://msdn.microsoft.com/en-us/library/bb762105(VS.85).aspx"&gt;SHAddToRecentDocs&lt;/a&gt;() with the file name.&lt;/p&gt;  &lt;p&gt;We had reports that Recent items list in jump lists don’t display all the projects and solutions displayed by the other lists (as demonstrated below), without the user doing anything special like explicitly removing the items from Windows’ jump list. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/TES5-FtOq3I/AAAAAAAAAMo/2_OePRh7fWA/s1600-h/Jumplists14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="Jumplists1" border="0" alt="Jumplists1" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/TES5_chcsaI/AAAAAAAAAMs/4K2L1PpPEPQ/Jumplists1_thumb2.png?imgmax=800" width="964" height="772" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It may be possible at times that Visual Studio 2010 jump lists don’t show any projects and solutions, as shown in this picture:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/TES5_5epOmI/AAAAAAAAAMw/wmAjLyC0wHM/s1600-h/JumplistMissing4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="JumplistMissing" border="0" alt="JumplistMissing" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/TES6A5RW3aI/AAAAAAAAAM0/VVEHW0HHWr4/JumplistMissing_thumb2.png?imgmax=800" width="335" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;There may be a couple of explanations to this:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1) In Windows, the display of Recent Items and the number of items in the list are controlled by a couple of settings accessible in Taskbar properties. These settings may be modified by mistake or may be mismatched with the Visual Studio settings for the number of recent items.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Right click the taskbar, choose Properties, then in&amp;#160; StartMenu tab look for “Store and display recently opened items in the Start menu and the taskbar” checkbox. Make sure the checkbox is checked.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/TES6BPAWrFI/AAAAAAAAAM4/VFgLE3kepDs/s1600-h/JumplistTaskbar14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="JumplistTaskbar1" border="0" alt="JumplistTaskbar1" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/TES6Bt-v7aI/AAAAAAAAAM8/VpqeD8Tl-rM/JumplistTaskbar1_thumb2.png?imgmax=800" width="418" height="465" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The number of recent items in the jumplist is controlled by a different setting. Right click the taskbar, choose Properties, then in&amp;#160; StartMenu tab click the Customize button. In the dialog that opens, look for the “Number of recent items to display in Jump lists”. Make sure the number of items is not set to 0 (zero) by mistake. The default value is 10.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/TES6Bw8bYEI/AAAAAAAAANA/8hHPZ-0zSpw/s1600-h/JumplistTaskbar23.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="JumplistTaskbar2" border="0" alt="JumplistTaskbar2" src="http://lh3.ggpht.com/_ZoHTfJbZeoA/TES6CZB1PAI/AAAAAAAAANE/9Qvs15KuSv8/JumplistTaskbar2_thumb1.png?imgmax=800" width="397" height="487" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Visual Studio similar setting for the number of items to show in MRU lists (e.g. the recent projects list from the StartPage) can be accessed via Tools/Options dialog, under Environment/General category. The default is also 10 items shown in recently used lists.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_ZoHTfJbZeoA/TES6ChlzL9I/AAAAAAAAANI/IiUCSwAqde0/s1600-h/Jumplist33.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="Jumplist3" border="0" alt="Jumplist3" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/TES6D9hWx-I/AAAAAAAAANM/Oqsaqt3Ln0o/Jumplist3_thumb1.png?imgmax=800" width="751" height="434" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2) The projects shown in Visual Studio recent projects lists may have been created in temporary locations.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;By design, Windows 7 jump lists don’t show recent items that are created in temporary folders. This makes sense - no items in temp folders are ever added to Jump Lists or the Recent Items Folder, because Jump Lists and Recent Items are about getting back to important items, and by definition a temporary file is not something that users want to get back to.&lt;/p&gt;  &lt;p&gt;The recent projects lists in Visual Studio’s StartPage and File menu don’t have the same restriction. You can easily see if the projects missing from jumplists are in temporary folder by hovering over the items in the StartPage and looking at the tooltips.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_ZoHTfJbZeoA/TES6EEHxGkI/AAAAAAAAANQ/c_pwrmTakAs/s1600-h/JumplistsTemp3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="JumplistsTemp" border="0" alt="JumplistsTemp" src="http://lh4.ggpht.com/_ZoHTfJbZeoA/TES6EhbdVVI/AAAAAAAAANU/0cF4aJERKT8/JumplistsTemp_thumb1.png?imgmax=800" width="404" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;&lt;strong&gt;3) You’re running multiple Visual Studio instances, under different registry hives and their jump lists clash.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This may happen if you’re creating projects extending Visual Studio and have installed &lt;a href="http://msdn.microsoft.com/en-us/vstudio/vextend.aspx"&gt;Visual Studio SDK&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here you see I’m running 2 instances of Visual Studio, one of them started under Experimental Hive. The instances have different MRU settings (stored in registry under different hives), colors, etc. but they share the same icon in Windows taskbar and they share the jump list.    &lt;br /&gt;&lt;/p&gt; &lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/TES6FBD8ihI/AAAAAAAAANY/gUug1Nw8jdE/s1600-h/JumplistClash3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="JumplistClash" border="0" alt="JumplistClash" src="http://lh4.ggpht.com/_ZoHTfJbZeoA/TES6FoEBi8I/AAAAAAAAANc/-KWK5_K0OtE/JumplistClash_thumb1.png?imgmax=800" width="320" height="385" /&gt;&lt;/a&gt;   &lt;br /&gt;  &lt;br /&gt;This is a VS10 bug we need to fix for next version of Visual Studio. VS started under the experimental hive needs to use a different &lt;a href="http://msdn.microsoft.com/en-us/library/dd378459%28VS.85%29.aspx"&gt;AppUserModelID&lt;/a&gt; to have a different icon and have a separate jump list.   &lt;br /&gt;  &lt;br /&gt;  &lt;p&gt;&lt;strong&gt;4) You’ve created your own shortcuts to devenv.exe and are starting Visual Studio using those shortcuts.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Visual Studio uses a custom AppUserModelID (e.g. for VS Pro and Ultimate this is “VisualStudio.10.0”), and for jump lists to work correctly this model id needs to be set on all User Interface elements of the application (windows, shortcuts, etc). The shortcut created when Visual Studio was installed has the correct property (System.AppUserModel.ID) set. However, any new shortcuts you create won’t have the property, and Windows may or may not display correctly the jumplists when starting Visual Studio using one of those shortcuts.&lt;/p&gt;  &lt;p&gt;If you need more shortcuts to devenv.exe it is recommended to copy the shortcut created when Visual Studio was installed on the computer.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5) Mysterious jump lists disappearance/appearance.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We also had reports of jump lists mysteriously disappearing or reappearing (usually when upgrading the Visual Studio build from one daily build to another, or when upgrading say from beta or the RC build to the RTM version of Visual Studio 2010). Often times it just starts working, usually when opening a file from Windows Explorer by double clicking it, or by rebooting the machine.&lt;/p&gt;  &lt;p&gt;So far we do not have a consistent repro, and we are only suspecting a Windows bug that Windows doesn’t correctly calculate the app user model ID associated with the running application calling SHAddToRecentDocs for a specific file extension (like *.sln). &lt;/p&gt;  &lt;p&gt;Should this be indeed the case, you will be able to workaround it by declaring an explicit AppUserModelID for the ProgID used by the VisualStudio files.&lt;/p&gt;  &lt;p&gt;E.g. for Visual Studio Professional / Premium / Ultimate, save the section below as a *.reg file and import it into registry.&lt;/p&gt;  &lt;blockquote&gt;&amp;#160;&amp;#160; &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="400"&gt;           &lt;blockquote&gt;             &lt;p align="left"&gt;Windows Registry Editor Version 5.00&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.sln.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.csproj.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.vbproj.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.vcproj.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.vcxproj.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.dbproj.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.vdproj.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;              &lt;p align="left"&gt;[HKEY_CLASSES_ROOT\VisualStudio.fsproj.10.0]                &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VisualStudio.10.0&amp;quot;&lt;/p&gt;           &lt;/blockquote&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/blockquote&gt;  &lt;p&gt;For Visual Studio Express SKUs you’ll need entries like the ones below (the example is for C# Express)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160; &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="400"&gt;             &lt;blockquote&gt;               &lt;p&gt;Windows Registry Editor Version 5.00&lt;/p&gt;                &lt;p&gt;[HKEY_CLASSES_ROOT\VCSExpress.sln.10.0]                  &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VCSExpress.10.0&amp;quot;&lt;/p&gt;                &lt;p&gt;[HKEY_CLASSES_ROOT\VCSExpress.csproj.10.0]                  &lt;br /&gt;&amp;quot;AppUserModelID&amp;quot;=&amp;quot;VCSExpress.10.0&amp;quot;&lt;/p&gt;             &lt;/blockquote&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You may need to replace the application names to match the Express SKU type you have installed, and the project files extensions used by that Express SKU.&lt;/p&gt;  &lt;p&gt;E.g. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Microsoft Visual C# 2010 Express: “VCSExpress” name, “csproj” file extension.&lt;/p&gt;    &lt;p&gt;Microsoft Visual Basic 2010 Express: “VBExpress” name, “vbproj” file extension.&lt;/p&gt;    &lt;p&gt;Microsoft Visual C++ 2010 Express: “VCExpress” name, “vcproj” and “vcxproj” file extensions.&lt;/p&gt;    &lt;p&gt;Microsoft Visual Web Developer 2010 Express: “VWDExpress” name, “csproj” and “vbproj” file extensions.&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-8673861632162985131?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/8673861632162985131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=8673861632162985131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8673861632162985131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8673861632162985131'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/07/windows-7-jump-lists-and-visual-studio.html' title='Windows 7 Jump Lists and Visual Studio 2010'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_ZoHTfJbZeoA/TES5_chcsaI/AAAAAAAAAMs/4K2L1PpPEPQ/s72-c/Jumplists1_thumb2.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-895207653124020376</id><published>2010-05-07T23:50:00.001-07:00</published><updated>2010-05-07T23:50:54.740-07:00</updated><title type='text'>Windows Update error 8024402C</title><content type='html'>&lt;p&gt;Today I decided to check the Windows Update status on my laptop, and to my surprise, I was getting an error code 8024402C. Pressing the “Try again” button didn’t help, I was getting the same error over and over again.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/S-UJv-QAluI/AAAAAAAAAMQ/YitJfOYfqZA/s1600-h/WSUS2%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WSUS2" border="0" alt="WSUS2" src="http://lh4.ggpht.com/_ZoHTfJbZeoA/S-UJwwnTghI/AAAAAAAAAMU/U0XlffgNNqA/WSUS2_thumb%5B1%5D.png?imgmax=800" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And I clicked the “Get help with this error” link, which indicated a lot of &lt;a href="http://windows.microsoft.com/en-IN/windows7/Windows-Update-error-8024402C"&gt;possible causes&lt;/a&gt; that lead to this error message. This set me on the right track - while my computer is not “&lt;em&gt;usually&lt;/em&gt; connected to a network at work”, I did connect once to the work network and I joined the domain there. (It was more than a month ago, before leaving in vacation, and I didn’t even remembered I did that; it was also the last time updates were installed on the laptop).&lt;/p&gt;  &lt;p&gt;And so, when I joined the domain, the domain administrators have set my computer to be managed by &lt;a href="http://go.microsoft.com/fwlink/?linkid=83358"&gt;Windows Server Update Services (WSUS)&lt;/a&gt; , as (not verily clearly) indicated by the message “You receive updates: Managed by your system administrator” near the bottom of the page. (I knew that joining the domain would be bad juju sooner or later, but I had to do it so I can access the TFS servers for source control and bug tracking.)&lt;/p&gt;  &lt;p&gt;I started searching for policies that were set on my machine and I came upon this Technet page describing&amp;#160; how to&amp;#160; &lt;a href="http://technet.microsoft.com/en-us/library/cc512630.aspx"&gt;manage the WSUS automatic updates with Group Policy&lt;/a&gt;. Indeed searching in Windows7 for “Group Policy”, launching the policy editor and looking at Computer Configuration/Administrative Templates/Windows Components/ Windows Update I found out I had one policy set, for “Specify intranet Microsoft update service location”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/S-UJxb4epyI/AAAAAAAAAMY/CcfvZ0UiG2A/s1600-h/WSUS3%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WSUS3" border="0" alt="WSUS3" src="http://lh5.ggpht.com/_ZoHTfJbZeoA/S-UJx3tEHdI/AAAAAAAAAMc/-fS6ml4ANys/WSUS3_thumb%5B2%5D.png?imgmax=800" width="324" height="163" /&gt;&lt;/a&gt; &lt;a href="http://lh6.ggpht.com/_ZoHTfJbZeoA/S-UJyqDyuvI/AAAAAAAAAMg/D4QS-ll8PY4/s1600-h/WSUS1%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WSUS1" border="0" alt="WSUS1" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/S-UJzdLbF-I/AAAAAAAAAMk/_8cGdtXBXKY/WSUS1_thumb%5B2%5D.png?imgmax=800" width="324" height="297" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Unfortunately, setting it back to “Not configured” and rebooting the computer, didn’t help.&lt;/p&gt;  &lt;p&gt;I then found out the &lt;a href="http://technet.microsoft.com/en-us/wsus/bb466192.aspx "&gt;WSUS Client Diagnostics Tool&lt;/a&gt;, and when I run it it indicated WSUS was still enabled on my machine, and still using the server name I had cleared out in policies. So the settings must have been preserved somewhere else…&amp;#160; Searching for WSUS configuration settings location I found out a page describing &lt;a href="http://thelazyadmin.com/blogs/thelazyadmin/archive/2006/06/27/Using-WSUS-without-Active-Directory.aspx"&gt;how to use WSUS without Active Directory,&lt;/a&gt; and I learned that Windows Update settings are stored in registry under HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate.&lt;/p&gt;  &lt;p&gt;I used RegEdit to change the following registry setting, disabling the use of WSUS server.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]     &lt;br /&gt;&amp;quot;UseWUServer&amp;quot;=dword:00000000&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I tried again Windows Update and the error code this time changed from 8024402C into 80070057. This stands for ERROR_INVALID_PARAMETER, but indicated I was on the right track.&lt;/p&gt;  &lt;p&gt;I stopped and restarted the Windows Update Service (I run in an elevated command prompt these commands)&lt;/p&gt;  &lt;blockquote&gt;net stop wuauserv   &lt;br /&gt;net start wuauserv&lt;/blockquote&gt;  &lt;p&gt;which saved me another reboot, and next time I tried Windows Update things were started working!&lt;/p&gt;  &lt;p&gt;I guess next time I’ll connect the laptop to the work network the WSUS server will be re-configured and I’ll have to clear it up again, so here I’m writing this article to remind myself how to do it… &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-895207653124020376?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/895207653124020376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=895207653124020376' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/895207653124020376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/895207653124020376'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/05/windows-update-error-8024402c.html' title='Windows Update error 8024402C'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_ZoHTfJbZeoA/S-UJwwnTghI/AAAAAAAAAMU/U0XlffgNNqA/s72-c/WSUS2_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-3655612327264323838</id><published>2010-03-06T15:47:00.001-08:00</published><updated>2010-03-06T15:47:12.797-08:00</updated><title type='text'>Network shares on Smb server could not be accessed - again</title><content type='html'>&lt;p&gt;For a couple of days my server was down due to a hardware failure.&amp;#160; After I fixed the problem and I put the server back online I noticed a problem with the workstations: after login Windows popped up a balloon warning that “Could not reconnect all network drives”&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/S5LpcfMNEuI/AAAAAAAAALY/kguqRiTppBg/s1600-h/NetworkDrives%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="NetworkDrives" border="0" alt="NetworkDrives" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/S5LpciLFAgI/AAAAAAAAALc/IdxGyYGcf2U/NetworkDrives_thumb%5B1%5D.png?imgmax=800" width="410" height="97" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;All the drives I had mapped to Samba shares on my Infrant ReadyNAS system were now inaccessible, and they were showing disconnected in Windows Explorer.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_ZoHTfJbZeoA/S5LpdD6PxLI/AAAAAAAAALg/l-RNlF3F1F4/s1600-h/NetworkDrives2%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="NetworkDrives2" border="0" alt="NetworkDrives2" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/S5Lpdc6CQgI/AAAAAAAAALo/CRJYQIQia4U/NetworkDrives2_thumb%5B1%5D.png?imgmax=800" width="644" height="204" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Double clicking the shares in Windows Explorer was displaying a logon prompt with the following error “The system detected a possible attempt to compromise security. Please ensure that you can contact the server that authenticated you”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/S5Lpd6gNZ6I/AAAAAAAAALs/zHu_nnLS3Ek/s1600-h/MapError%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MapError" border="0" alt="MapError" src="http://lh4.ggpht.com/_ZoHTfJbZeoA/S5LpeHBNk9I/AAAAAAAAALw/lCyt2swQpfI/MapError_thumb%5B1%5D.png?imgmax=800" width="443" height="398" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Typing correct credentials was useless. The dialog just came back. Canceling the dialog was going through 2 more logon prompts and displaying a message listing all personal certificates on the machine. Needless to say, those were certificates for another domain and logon eventually failed.&lt;/p&gt;  &lt;p&gt;I deleted the disconnected mapped drives and I was able to recreate them without problems and everything was fine again. Until the first reboot, that is. And then again, network drives were disconnected and “The system detected a possible attempt to compromise security” was back. :-(&lt;/p&gt;  &lt;p&gt;Initially I thought Windows may have installed some update in the last week that strengthened the security settings and breaking network shares to old Linux boxes&amp;#160; (It wouldn’t have been &lt;a href="http://alinconstantin.blogspot.com/2009/10/windows-7-cannot-access-smb-shares-on.html"&gt;the first time&lt;/a&gt;). But that wasn’t the case.&lt;/p&gt;  &lt;p&gt;I checked access to the domain controller server. It was fine, I could ping it by its Wins name (SOL), by its fully qualified domain name (sol.constantin.comcast.net), by it’s IP address (192.168.0.2), I could access the network shares on the server, etc. So, server being inaccessible didn’t seem to be the problem.&lt;/p&gt;  &lt;p&gt;I looked then in the System Event Log to see if any problems were logged. There were lots of errors like these:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Time-Service event ID 129: “NtpClient was unable to set a domain peer to use as a time source because of discovery error. NtpClient will try again in 3473457 minutes and double the reattempt interval thereafter. The error was: The entry is not found. (0x800706E1)” &lt;/li&gt;    &lt;li&gt;GroupPolicy event ID 1129 “The processing of Group Policy failed because of lack of network connectivity to a domain controller. This may be a transient condition. A success message would be generated once the machine gets connected to the domain controller and Group Policy has successfully processed. If you do not see a success message for several hours, then contact your administrator”. with error code 1222 - &amp;quot;The network is not present or not started.&amp;quot; &lt;/li&gt;    &lt;li&gt;Netlogon 5719: “ This computer was not able to set up a secure session with a domain controller in domain CONSTANTIN due to the following: There are currently no logon servers available to service the logon request. This may lead to authentication problems. Make sure that this computer is connected to the network. If the problem persists, please contact your domain administrator.” &lt;/li&gt; &lt;/ul&gt; I searched the net for more information them, but none of the solutions proposed or diagnostics like &lt;a href="http://technet.microsoft.com/en-us/library/cc727335(WS.10).aspx"&gt;this&lt;/a&gt; seemed to lead anywhere in my case.   &lt;p&gt;Eventually I rebooted the computer once more, and this time I got two different event types:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;GroupPolicy event ID 1055: “The processing of Group Policy failed. Windows could not resolve the computer name. This could be caused by one of more of the following:      &lt;br /&gt;a) Name Resolution failure on the current domain controller.       &lt;br /&gt;b) Active Directory Replication Latency (an account created on another domain controller has not replicated to the current domain controller).”       &lt;p&gt;(and a similar event 1053 for “The processing of Group Policy failed. Windows could not resolve the user name”)&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Searching the net for this one proved to be successful. I found &lt;a href="http://technet.microsoft.com/en-us/library/cc727272(WS.10).aspx"&gt;this Microsoft support page&lt;/a&gt;, which indicated to look for an additional error code in Event Details tab. In my case the error code was 1355 “The specified domain either does not exist or could not be contacted.”. The support page instructed further to “Use &lt;strong&gt;nslookup&lt;/strong&gt; to confirm you can resolve addresses of the domain controllers in the user domain.”&lt;/p&gt;  &lt;p&gt;Sure enough, the DNS server was not able to resolve the name of the domain server computer…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/S5Lpecxn8BI/AAAAAAAAAL0/KEFOizCUl5U/s1600-h/Nslookup1%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Nslookup1" border="0" alt="Nslookup1" src="http://lh5.ggpht.com/_ZoHTfJbZeoA/S5LpelnYt0I/AAAAAAAAAL4/3ZVhUDuHCOc/Nslookup1_thumb%5B1%5D.png?imgmax=800" width="681" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And then it hit me what was wrong. The DNS server I was using was the Wi-Fi router (192.168.0.1), a Netgear/Linux box. This was not able to provide DNS entries correctly for the local network computers, despite them being configured with static addresses. :-( It was my fault, too – I had set the router as preferred DNS when the DC server was down due to the hardware failure…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/S5LpfKZW_jI/AAAAAAAAAL8/oAQi7HhkNrg/s1600-h/Solution%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Solution" border="0" alt="Solution" src="http://lh3.ggpht.com/_ZoHTfJbZeoA/S5LpfTn_5dI/AAAAAAAAAMA/TCvWaWyZp94/Solution_thumb%5B1%5D.png?imgmax=800" width="593" height="570" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So, I went to Control Panel\Network and Sharing Center, clicked on LocalAreaConnection, Properties, selected “Internet Protocol Version 4”, clicked Properties, and switched the Preferred/Alternate DNS Severs to use the domain controller (192.168.0.2) as the Preferred DNS server.&lt;/p&gt;  &lt;p&gt;Now I was able to resolve correctly the name of the Domain Controller, and I was able to access the network shares without problem again…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/S5Lpfs3EXfI/AAAAAAAAAME/OenZy921CZE/s1600-h/Nslookup2%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Nslookup2" border="0" alt="Nslookup2" src="http://lh5.ggpht.com/_ZoHTfJbZeoA/S5LpgK6qDTI/AAAAAAAAAMI/V0N43P4993Y/Nslookup2_thumb%5B1%5D.png?imgmax=800" width="681" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you reached this point and you’re asking why I told you all this, it’s because 12 months from now when I may hit again the same problem with the network shares it’s likely I won’t remember it may be due to an innocent switch of the DNS servers. Having it documented in the blog will help me remember. I hope if you searched and reached this article, it might help you too….&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-3655612327264323838?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/3655612327264323838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=3655612327264323838' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3655612327264323838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3655612327264323838'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/03/network-shares-on-smb-server-could-not.html' title='Network shares on Smb server could not be accessed - again'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_ZoHTfJbZeoA/S5LpciLFAgI/AAAAAAAAALc/IdxGyYGcf2U/s72-c/NetworkDrives_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-5655174527211674608</id><published>2010-03-02T13:29:00.001-08:00</published><updated>2010-03-02T13:29:42.869-08:00</updated><title type='text'>Implementing disabled WPF toolbar buttons for Visual Studio 2010</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you’ve ever wanted to implement a toolbar in WPF you may have come upon this limitation: you can easily set images for the toolbar buttons, but there is no default way of making these images appear grayed when the toolbar buttons are disabled.&lt;/p&gt;  &lt;p&gt;To implement the toolbar buttons and menu items, Visual Studio 2010 uses a custom algorithm to create gray images from the original picture. This is publicly available&amp;#160; for consumption via a converter Microsoft.VisualStudio.PlatformUI.GrayscaleImageConverter, implemented in Microsoft.VisualStudio.Shell.10.0 assembly. The converter takes as input an ImageSource and converts to an Image element that uses for source the grayed out version of the image.&lt;/p&gt;  &lt;p&gt;If you need to implement toolbars for your package/dialogs you should strongly consider using shell-implemented toolbars (defined by your application via *.vsct files) and used through IVsToolWindowToolbar/IVsToolWindowToolbarHost interfaces. That guarantees a consistent look of all the buttons, separators or split-buttons in your toolbar with the rest of the shell.&lt;/p&gt;  &lt;p&gt;For instance, to display a shell-owned toolbar in a WPF dialog you can use IVsUIShell4.CreateToolbarTray() interface to obtain an IVsToolbarTrayHost, then call AddToolbar() on this object to add the toolbar using the guid of your package and the resource Id of the toolbar in vsct, then get the UIElement representing the toolbar using IVsToolbarTrayHost.GetToolbarTray() and position the element to your liking in the dialog.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;However, there may be situations when you’ll want to implement your own WPF toolbar buttons. To maintain a consistent grayed out look of disabled buttons you may choose to reuse the GrayscaleImageConverter implemented by the shell. Below I describe a way to do this:&lt;/p&gt;  &lt;p&gt;1)&amp;#160; Implement a ToolbarButtonImage class having a Source dependency property. You’ll use this to set the button’s image in the “normal” state. &lt;/p&gt;  &lt;p&gt;2) The style of the ToolbarButtonImage class will use a trigger to switch the template of the button’s content when the button gets enabled/disabled between a control template (ToolbarButtonImage_Normal) containing the image in the normal state and a control template (ToolbarButtonImage_Disabled) containing the grayed out image produced by the&amp;#160; GrayscaleImageConverter.&lt;/p&gt;  &lt;p&gt;3) Add the buttons to the toolbars as follows:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;ToolBar&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Button &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;IsEnabled&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{Binding ……….}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;     &lt;br /&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;local&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ToolbarButtonImage &lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Source&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;Resources\ButtonNormalImage.png&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;     &lt;br /&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Button&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;/&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ToolBar&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Below is the sample code for the ToolbarButtonImage and its style:&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;font face="Courier New"&gt;&lt;font size="1"&gt;----------------------------------------------&lt;/font&gt;         &lt;br /&gt;&lt;font size="2"&gt;ToolbarButtonImage.cs&lt;/font&gt;         &lt;br /&gt;&lt;font size="1"&gt;----------------------------------------------&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;         &lt;br /&gt;using &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;System;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;          &lt;br /&gt;using &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;System.Windows;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;          &lt;br /&gt;using &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;System.Windows.Controls;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;          &lt;br /&gt;using &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;System.Windows.Data;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;          &lt;br /&gt;using &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;System.Windows.Media;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;          &lt;br /&gt;using &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;System.Windows.Media.Imaging;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;          &lt;br /&gt;          &lt;br /&gt;namespace &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;YourApplicationNamespace&lt;/font&gt;&lt;/font&gt;&amp;#160; &lt;br /&gt;&lt;font color="#333333"&gt;{&lt;font face="Georgia"&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;         &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;class&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; : &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;UserControl&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;font face="Georgia"&gt;&amp;#160;&lt;/font&gt;         &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; ToolbarButtonImage()&lt;/font&gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DefaultStyleKeyProperty.OverrideMetadata( &lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;typeof&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;&lt;font color="#2b91af" size="2" face="Consolas"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;), &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;    &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;FrameworkPropertyMetadata&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;)));&lt;/font&gt;&lt;/font&gt;       &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;static&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;readonly&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;DependencyProperty&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; SourceProperty = &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;DependencyProperty&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;.Register&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;     &lt;br /&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Source&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;BitmapSource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;), &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;));&lt;/font&gt;&lt;/font&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;BitmapSource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt; Source&lt;/font&gt;&lt;/font&gt;       &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;       &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;font size="2"&gt;&lt;font size="2"&gt;       &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;BitmapSource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;)GetValue(SourceProperty);&lt;/font&gt;&lt;/font&gt;         &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;         &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;        &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;         &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetValue(SourceProperty, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;value&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;);&lt;/font&gt;&lt;/font&gt;         &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;         &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;         &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;         &lt;br /&gt;&lt;font face="Consolas"&gt;}&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;----------------------------------------------&lt;/font&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;ToolbarButtonImageStyle.xaml&lt;/font&gt;     &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;----------------------------------------------&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ResourceDictionary&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; xmlns&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;   &lt;br /&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; xmlns&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; xmlns&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;local&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;clr-namespace:YourApplicationNamespace&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; xmlns&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;ui&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.10.0&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ui&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;GrayscaleImageConverter&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Key&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;GrayscaleImageConverter&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ControlTemplate&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Key&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;ToolbarButtonImage_Normal&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; TargetType&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; local&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Image&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Width&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;16&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Height&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;16&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Source&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;TemplateBinding&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Property&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=Source}&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ControlTemplate&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;    &lt;br /&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ControlTemplate&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Key&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;ToolbarButtonImage_Disabled&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; TargetType&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; local&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ContentPresenter&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Width&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;16&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Height&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;16&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Content&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;TemplateBinding&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Property&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=Source,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Converter&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;={&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;StaticResource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; GrayscaleImageConverter&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}}&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ControlTemplate&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Style&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;Key&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; local&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; TargetType&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; local&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;ToolbarButtonImage&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Setter&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Property&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;Template&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Value&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;StaticResource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; ToolbarButtonImage_Normal&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Style.Triggers&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;DataTrigger&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Binding&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Binding&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; IsEnabled&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; RelativeSource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;={&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;RelativeSource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Mode&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=FindAncestor,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; AncestorType&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;={&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;x&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Button&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}}}&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Value&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;False&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Setter&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Property&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;Template&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; Value&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;=&amp;quot;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;StaticResource&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt; ToolbarButtonImage_Disabled&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;}&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;DataTrigger&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Style.Triggers&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;lt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;Style&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;         &lt;p&gt;&amp;lt;/&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;ResourceDictionary&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;     &lt;/font&gt;&lt;/font&gt;    &lt;p&gt;&lt;/p&gt; &lt;/font&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-5655174527211674608?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/5655174527211674608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=5655174527211674608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5655174527211674608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5655174527211674608'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/03/implementing-disabled-wpf-toolbar.html' title='Implementing disabled WPF toolbar buttons for Visual Studio 2010'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-8644447728897719973</id><published>2010-02-04T15:47:00.001-08:00</published><updated>2010-02-04T15:47:20.239-08:00</updated><title type='text'>Drag and drop in Visual Studio 2010</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Let me explain first how drag and drop works in a WPF application:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1) the Win32 window hosting the WPF controls needs to be registered as a drop target with Windows by calling &lt;a href=" http://msdn.microsoft.com/en-us/library/ms678405(VS.85).aspx"&gt;RegisterDragDrop&lt;/a&gt;. When some object is dragged, Windows selects the “closest” Win32 window registered for drag drop under the mouse, and then it calls functions like DragEnter/Drop/etc on the IDropTarget interface provided at registration. WPF does this registration for &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndsource.aspx"&gt;HwndSource&lt;/a&gt; windows, and when an object is dragged over a WPF window, WPF will be called. &lt;/p&gt;    &lt;p&gt;2) the WPF control that wants to intercept the drop needs to specify &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.allowdrop.aspx"&gt;UIElement.AllowDrop&lt;/a&gt;=true. When called by Windows, WPF will select the innermost WPF control under the mouse that allows drop and will route to it WPF-style drag and drop events (e.g. &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.dragdrop.previewdragenter(VS.85).aspx"&gt;PreviewDragEnter&lt;/a&gt; events will be tunneled to that control, then &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.dragdrop.dragenter(VS.85).aspx"&gt;DragEnter&lt;/a&gt; events will bubble up). The controls and its parents have a chance of intercepting these events.&lt;/p&gt;    &lt;p&gt;3) the control or one of the parents needs to recognize one of the formats of the data being dragged, and allow the drop. If no control recognizes the format, the DropEffect will be None and the drop will not be possible.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now back to Visual Studio. &lt;/p&gt;  &lt;p&gt;Visual Studio 2010 and later are WPF applications. The main window and floating windows (toolwindows or documents) are HwndSource, thus are registered for drag and drop by WPF. The shell sets AllowDrop=true on the root WPF elements in these windows, and since this is an inherited property, all child controls (e.g. the toolwindows contents) will automatically allow drop as well. &lt;/p&gt;  &lt;p&gt;If the toolwindows host WPF content but they don’t intercept the drag &amp;amp; drop events, the shell will eventually intercept the bubbling WPF events, and will attempt to extract from the dropped data file names to be opened either as solutions/project or in editor windows. Similarly, if the toolwindows host Win32 elements but don’t register them as droptargets with Windows, Windows will pick the shell’s main window as drop target and again the shell will check the dropped data if it contains filenames that can be opened in editor.&lt;/p&gt; &lt;font size="3"&gt;   &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;A) Drag and drop over Shell-owned elements &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;   &lt;font size="2"&gt;     &lt;p&gt;The shell owns some elements in the Visual Studio UI, e.g. the frames of the toolwindows and document windows, document tabs in the document well, the main window’s background area, main window’s toolbars, toolbars in toolwindows hosted by the shell, etc., thus it controls dragging and dropping over these elements.&lt;/p&gt;      &lt;p&gt;The shell understands only the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.dataformats.filedrop(VS.85).aspx"&gt;DataFormat.FileDrop&lt;/a&gt; (&lt;a href="http://msdn.microsoft.com/en-us/library/bb776902(VS.85).aspx#CF_HDROP"&gt;CF_HDROP&lt;/a&gt;) format. This format is used for instance when one or more files are dragged from Windows Explorer. When dropped over Visual Studio’s main window, VS will use the dropped file names to open the files in a Visual Studio editor. &lt;/p&gt;      &lt;p&gt;This works when dropping over most shell elements, with a couple of exceptions:        &lt;br /&gt;- dropping over tabbed toolwindows tabs or document tabs is disallowed: instead this is used to switch the active toolwindow or document in the tab group.        &lt;br /&gt;- dropping over comboboxes in toolbars (if editable, these allow drop with Text format)        &lt;br /&gt;- dropping over the main window’s title is not possible (this is a WPF issue)&lt;/p&gt;      &lt;p&gt;       &lt;br /&gt;&lt;/p&gt;     &lt;strong&gt;B) Drag and drop over toolwindows’ content&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;A tool window implementer has the option of using Win32-based content or using a WPF element as content. When using the VsSDK/MPF classes like &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.toolwindowpane(VS.100).aspx"&gt;ToolWindowPane&lt;/a&gt;, the content can be exposed using either the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.windowpane.window(VS.100).aspx"&gt;Window&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.windowpane.content(VS.100).aspx"&gt;Content&lt;/a&gt; properties from the base class. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Win32 content&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Whenever a Win32 window is returned from ToolWindowPane.Window, from &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivswindowpane.createpanewindow(VS.100).aspx"&gt;IVsWindowPane.CreatePaneWindow&lt;/a&gt;, or indirectly from IVsUIElementPane.CreateUIElementPane via &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsuiwin32element(VS.100).aspx"&gt;IVsUIWin32Element&lt;/a&gt;, that toolwindow will have a Win32 content. To intercept drop operations on the toolwindow content, the toolwindow’s implementer will need to register the Win32 window with Windows by calling &lt;a href=" http://msdn.microsoft.com/en-us/library/ms678405(VS.85).aspx"&gt;RegisterDragDrop&lt;/a&gt;, and providing an IDropTarget, then handling the Windows-style drag and drop calls. &lt;/p&gt;  &lt;p&gt;An example of such toolwindow is SolutionExplorer, which registers its content to allow D&amp;amp;D of solution and project items between the projects in the tree.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;WPF content&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Whenever a FrameworkElement is returned from the ToolWindowPane.Content property, from &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsuielementpane.createuielementpane(VS.100).aspx"&gt;IVsUIElementPane.CreateUIElementPane&lt;/a&gt; (or indirectly via &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsuiwpfelement(VS.100).aspx"&gt;IVsUIWpfElement&lt;/a&gt;), the shell will host that toolwindow’s content in a pure-WPF hierarchy, without intervening HWnd. WPF-style events will then flow freely up/down the visual tree starting with the main window (or the floating window root, when the toolwindow is floating).&amp;#160; Conditions 1) and 2) are automatically satisfied, and all you need to do is satisfy 3) – intercept the WPF events for the dropped format you understand. Again, if the toolwindow does not intercept the dropped data and mark the WPF events handled, the shell will intercepts&amp;#160; them and will either deny the drop or will open the files in editors (if the data is in the FileDrop format accepted by the shell).&lt;/p&gt;  &lt;p&gt;See the sample below for an example.&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;C) Drag and drop over toolwindows’ toolbars&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;To use a shell-implemented toolbars (WPF), a toolwindow can host it in two modes:&lt;/p&gt;  &lt;p&gt;a) Letting the shell to host the toolbar. E.g. get an &lt;a title="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost(VS.80).aspx" href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost(VS.80).aspx"&gt;IVsToolWindowToolbarHost&lt;/a&gt; from the window frame by calling &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivswindowframe.getproperty.aspx"&gt;IVsWindowFrame.GetProperty&lt;/a&gt; for VSFPROPID_ToolbarHost, call &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost.addtoolbar(VS.80).aspx"&gt;AddToolbar&lt;/a&gt; on the toolbar host. The shell will host the toolbar directly in a WPF tree without intervening hwnds. Any drops over the toolbar will be handled by the shell. To intercept drops over the toolbar area, the toolbar has to be added using a different function: instead of using &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost.addtoolbar(VS.80).aspx"&gt;IVsToolWindowToobar.AddToobar&lt;/a&gt;, query the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost2(VS.100).aspx"&gt;IVsToolWindowToolbarHost2&lt;/a&gt; interface from the toolbar host and call &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost2.addtoolbar2(VS.100).aspx"&gt;AddToolbar2&lt;/a&gt; method. This allows providing an object implementing IDropTarget interface that will be called by the shell when the drop happens over the toolbar area. &lt;/p&gt;  &lt;p&gt;b) Hosting the toolbar yourself. E.g. If your toolwindow content is Win32-based, create a Win32 window child of the toolwindow’s content, and an object implementing &lt;a title="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost(VS.80).aspx" href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost(VS.80).aspx"&gt;IVsToolWindowToolbarHost&lt;/a&gt; interface, call&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsuishell.setuptoolbar(VS.80).aspx"&gt;IVsUIShell.SetupToolbar&lt;/a&gt; to associate the Win32 child with your toolbar host, then call &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolwindowtoolbarhost.addtoolbar(VS.80).aspx"&gt;IVsToolWindowToobar.AddToobar&lt;/a&gt; to add the toolbar into the host. This way you can place a toolbar anywhere in your toolwindow’s area. If the toolwindow’s content&amp;#160; is already registered as drop target by calling &lt;a href=" http://msdn.microsoft.com/en-us/library/ms678405(VS.85).aspx"&gt;RegisterDragDrop&lt;/a&gt;, Windows will select it as the “closest” drop target under mouse when the drop happens under the toolbar area, too, and you’ll receive the Windows-style calls on the drop target interface. You can also register the toolbar host child window as a separate drop target if you so wish.&lt;/p&gt;  &lt;p&gt;------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;  &lt;p&gt;The following sample demonstrates drag and drag of a custom data format, and intercepting the drop in a WPF control. It also demonstrate dragging of data in formats understood by editors and VS shell.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alinconstantin.net/Download/Example.SimpleDragDropInVS.zip"&gt;http://www.alinconstantin.net/Download/Example.SimpleDragDropInVS.zip&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You need VS2010 and VSSDK2010 installed in order to build the sample and run it under the experimental hive. To view the toolwindow, use the View/OtherWindow/DragAndDropToolwindow command, then drag the labels over the indicated areas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_ZoHTfJbZeoA/S2tchaeJXsI/AAAAAAAAALM/b-yyt0pidc8/s1600-h/Capture%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Capture" border="0" alt="Capture" src="http://lh3.ggpht.com/_ZoHTfJbZeoA/S2tch5TcNMI/AAAAAAAAALQ/dCbe967J3Ak/Capture_thumb%5B3%5D.png?imgmax=800" width="484" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-8644447728897719973?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/8644447728897719973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=8644447728897719973' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8644447728897719973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8644447728897719973'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2010/02/drag-and-drop-in-visual-studio-2010.html' title='Drag and drop in Visual Studio 2010'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_ZoHTfJbZeoA/S2tch5TcNMI/AAAAAAAAALQ/dCbe967J3Ak/s72-c/Capture_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-5547976753180627138</id><published>2009-10-23T23:50:00.001-07:00</published><updated>2009-10-23T23:50:34.685-07:00</updated><title type='text'>A MSSCCI Primer (How Microsoft Source Code Control API works)</title><content type='html'>&lt;p&gt;I’ve intended to publish this article long time ago, and never found the time to finish all I wanted to wanted to be in it. I’ll publish it now as is, hoping it may still help someone get started…&lt;/p&gt;  &lt;p&gt;------------------------&lt;/p&gt;  &lt;p&gt;I've been recently asked what's the correct order in which MSSCCI functions should be called for integrating an IDE application like Visual Studio with a MSSCCI (Microsoft Source Code Control) provider. &lt;/p&gt;  &lt;p&gt;While looking for references, I realized that the &lt;a href="http://msdn.microsoft.com/en-us/library/bb166170(VS.80).aspx"&gt;MSSCCI documentation in MSDN&lt;/a&gt; is a good reference for the API functions, but it doesn’t do a good job in describing MSSCCI concepts and how to start implementing a MSSCCI-compliant source control provider. It looks like it's time to write such page...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is a MSSCCI dll?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Basically, a MSSCCI source control provider is a 32-bit Native dynamic link library, exporting a couple of &lt;a href="http://msdn.microsoft.com/en-us/library/bb165429(VS.80).aspx"&gt;predefined functions&lt;/a&gt; with names beginning with “Scc” (e.g. SccAdd, SccCheckout, etc). A MSSCCI provider doesn't need to implement all these functions, but there is a subset of the functions that must be implemented by any provider (more on that later) to make the provider be usable by an Integrated Development Environment (IDE) like Visual Studio. &lt;/p&gt;  &lt;p&gt;An IDE loads the MSSCCI dll by calling &lt;a href="http://msdn.microsoft.com/en-us/library/ms684175.aspx"&gt;LoadLibrary&lt;/a&gt; or LoadLibraryEx. After that it usually looks up and binds the MSSCCI function by name by calling &lt;a href="http://msdn.microsoft.com/en-us/library/ms683212(VS.85).aspx"&gt;GetProcAddress&lt;/a&gt;, and will start calling the Scc functions directly. When the IDE is done using the MSSCCI provider it can unload the dll by calling FreeLibrary.&lt;/p&gt;  &lt;p&gt;There are no Unicode versions of the functions, therefore Unicode-ANSI conversion may need to be performed as necessary by both IDE and the source control provider. &lt;/p&gt;  &lt;p&gt;Because the MSSCCI providers are 32 bit dlls, they cannot be loaded directly in 64 bit processes. To the best of my knowledge, there are no plans of creating a 64-bit version of the interface for loading a MSSCCI provider in a 64-bit process. However this limitation can be circumvented by creating a 32-bit COM object that loads and wraps the MSSCCI dll, further exposing COM interfaces functions similar to MSSCCI functions; the COM wrapper object can be co-created in 64-bit processes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MSSCCI Connections&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To perform source control operations with a MSSCCI provider, an IDE needs to open a connection; this is done with the &lt;a href="http://msdn.microsoft.com/en-us/library/bb166506(VS.80).aspx"&gt;SccOpenProject&lt;/a&gt; function. A connection is simply an association (1:1 mapping) between a folder in the source control storage database (project name in MSSCCI terms) and a folder on local disk (local project path). An example (for SourceSafe) might be:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#000080"&gt;&lt;font face="Courier New"&gt;C:\My Solutions\Wincheat &amp;lt;----&amp;gt; &amp;quot;$/Solutions/Wincheat&amp;quot;, CDFAAAA&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;When the connection is open, the provider can also perform authentication of the user for accessing the source control storage, etc.&lt;/p&gt;  &lt;p&gt;Note there are no restriction on the folders mapping. Multiple connections/mappings can be opened from the same local folder pointing to different folders in the scc database; multiple connections can be opened from various local folders pointing to the same project in the scc database; and mapped projects can overlap. &lt;/p&gt;  &lt;p&gt;After opening a source control connection, further source control operations are possible using that connection.Within a connection, files are identified only based on their local path; the path must be under the cone defined by the connection local root. The path in storage is automatically deduced based on the connection root folders. Files outside this connection root should not be controllable through this connection. &lt;/p&gt;  &lt;p&gt;E.g. The C:\My Solutions\Wincheat\WinCheat.sln can be controlled through the connection above and is associated with $/Solutions/Wincheat/Wincheat.sln. The file C:\My Solutions\OtherSolution\OtherSolution.sln can’t be controlled using this connection, even though in the scc database there may be an matching item at $/Solutions/OtherSolution/OtherSolution.sln.&lt;/p&gt;  &lt;p&gt;In the following example, there are 3 connections open&lt;/p&gt;  &lt;blockquote&gt;&lt;font color="#000080" face="Courier New"&gt;C:\My Solutions\Solution1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;----&amp;gt; &amp;quot;$/Solution1&amp;quot;, BCDAAAA      &lt;br /&gt;D:\Project1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;----&amp;gt; &amp;quot;$/Solution1/Project1&amp;quot;, KRFAAAA       &lt;br /&gt;C:\My Solutions\Solution1\SubProject&amp;#160; &amp;lt;----&amp;gt; &amp;quot;$/Solution1/Project1&amp;quot;, KRFAAAA       &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;Depending on which connection is used, the same file in storage $/Solution1/Project1/File.txt can be referenced either as C:\My Solutions\Solution1\Project1\File.txt, D:\Project1\File.txt or C:\My Solutions\Solution1\SubProject\File.txt&lt;/p&gt;  &lt;p&gt;A MSSCCI provider implementer should not make assumptions (based on enlistment or other similar mapping information specific to that provider) that a file in the storage is associated with only one file on local disk - at any time a new MSSCCI connection can be opened from any folder on local disk and the same file in storage can be accessed using that connection.&lt;/p&gt;  &lt;p&gt;When a connection is no longer needed, the IDE should close it using the &lt;a href="http://msdn.microsoft.com/en-us/library/bb165074(VS.80).aspx"&gt;SccCloseProject&lt;/a&gt; function.&lt;/p&gt;  &lt;p&gt;The server path used for opening a connection is specific to each source control provider. An IDE application has no idea of the format (and should not make any assumptions on the format). You may be asking yourself where does the projName string used in SccOpenProject comes from. Usually, during an Open from source control operation the IDE will call &lt;a href="http://msdn.microsoft.com/en-us/library/bb164688(VS.80).aspx"&gt;SccGetProjPath&lt;/a&gt; which allows the user to select a folder in the source control database. The string identifying the selected project is returned to the IDE, and used immediately in new connections, or is persisted in solution/project files and used on subsequent open from disk of that project/solution. Also, the IDE may attempt to retrieve server path strings from &lt;a href="http://msdn.microsoft.com/en-us/library/bb165760(VS.80).aspx"&gt;mssccprj.scc&lt;/a&gt; file if the source control provider creates and maintains such files. &lt;/p&gt;  &lt;p&gt;A typical fragment showing opening a connection could look like this:&lt;/p&gt;  &lt;blockquote&gt;&lt;font face="Courier New"&gt;     &lt;table border="0" cellspacing="0" cellpadding="2" width="795"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="407"&gt;SccOpenProject(context1, project1, localpath1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;open in context1 a connection              &lt;br /&gt;project1&amp;lt;----&amp;gt;localpath1 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="406"&gt;SccCheckin/SccGet/etc&lt;/td&gt;            &lt;td valign="top" width="385"&gt;invoke source control functions using the connection open by using file paths under localpath1 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccCloseProject(context1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;close the connection open in context1 &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;strong&gt;MSSCCI Contexts&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You may have noticed that most of the MSSCCI functions have an argument &lt;font face="Courier New"&gt;LPVOID pvContext&lt;/font&gt;. &lt;/p&gt;  &lt;p&gt;A context is obtained by calling &lt;a href="http://msdn.microsoft.com/en-us/library/bb165660(VS.80).aspx"&gt;SccInitialize&lt;/a&gt; and can be disposed of by calling &lt;a href="http://msdn.microsoft.com/en-us/library/bb164720(VS.80).aspx"&gt;SccUninitialize&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A context allows identifying the connection that should be used with a specific operation like Get, Checkin, etc, because at one point in time, at most one connection can be opened within a context.&lt;/p&gt;  &lt;p&gt;A context is simply a data structure specific to each source control provider; it usually contains information like flags specifying whether a connection is opened or not within that context, information about the connection open, etc.&lt;/p&gt;  &lt;p&gt;The typical order of operations with a source control database is: &lt;/p&gt;  &lt;blockquote&gt;&lt;font face="Courier New"&gt;     &lt;table border="0" cellspacing="0" cellpadding="2" width="795"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="408"&gt;SccInitialize()&lt;/td&gt;            &lt;td valign="top" width="385"&gt;receives context&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="407"&gt;SccOpenProject(context, project, localpath)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;open in this context a connection              &lt;br /&gt;project&amp;lt;----&amp;gt;localpath&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccCheckin(context)/SccGet(context)/etc&lt;/td&gt;            &lt;td valign="top" width="385"&gt;perform any source control operations using the context and the project&amp;lt;----&amp;gt;localpath connection. The file paths needs to be &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccCloseProject(context)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;close the connection open in this context &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccUninitialize(context)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;dispose of context&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;If an IDE needs to open a different connection to the database:&lt;/p&gt;  &lt;p&gt;a) it can reuse an existing context for the new connection, but first it will have to close the currently open connection within that context. Typical order of operations is:&lt;/p&gt;  &lt;blockquote&gt;&lt;font face="Courier New"&gt;     &lt;table border="0" cellspacing="0" cellpadding="2" width="795"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="408"&gt;SccInitialize()&lt;/td&gt;            &lt;td valign="top" width="385"&gt;receives context1&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="407"&gt;SccOpenProject(context1, project1, localpath1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;open in context1 connection              &lt;br /&gt;project1&amp;lt;----&amp;gt;localpath1 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="406"&gt;SccCloseProject(context1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;close the connection open in context1 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccOpenProject(context1, project2, localpath2)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;open in context1 new connection              &lt;br /&gt;project2&amp;lt;----&amp;gt;localpath2 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccCloseProject(context1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;close the new connection open in context1 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccUninitialize(context1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;dispose of context1&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;b) it can create a new context and open the new connection with that context. For this to work, a provider must support the SCC_CAP_REENTRANT capability to declare it is reentrant, thread-safe and that it supports opening multiple connections. An order of operations may be:&lt;/p&gt;  &lt;blockquote&gt;&lt;font face="Courier New"&gt;     &lt;table border="0" cellspacing="0" cellpadding="2" width="795"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="408"&gt;SccInitialize()&lt;/td&gt;            &lt;td valign="top" width="385"&gt;receives context1&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="407"&gt;SccOpenProject(context1, project1, localpath1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;open in context1 connection              &lt;br /&gt;project1&amp;lt;----&amp;gt;localpath1 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="408"&gt;&lt;font color="#008000"&gt;SccInitialize()&lt;/font&gt;&lt;/td&gt;            &lt;td valign="top" width="385"&gt;&lt;font color="#008000"&gt;receives context2&lt;/font&gt;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;&lt;font color="#008000"&gt;SccOpenProject(context2, project2, localpath2)&lt;/font&gt;&lt;/td&gt;            &lt;td valign="top" width="385"&gt;&lt;font color="#008000"&gt;open in context1 new connection                &lt;br /&gt;project2&amp;lt;----&amp;gt;localpath2&lt;/font&gt; &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccCloseProject(context1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;close the new connection open in context1 &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;&lt;font color="#008000"&gt;SccCloseProject(context2)&lt;/font&gt;&lt;/td&gt;            &lt;td valign="top" width="385"&gt;&lt;font color="#008000"&gt;close the new connection open in context2&lt;/font&gt; &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;&lt;font color="#008000"&gt;SccUninitialize(context2)&lt;/font&gt;&lt;/td&gt;            &lt;td valign="top" width="385"&gt;&lt;font color="#008000"&gt;dispose of context2&lt;/font&gt;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="405"&gt;SccUninitialize(context1)&lt;/td&gt;            &lt;td valign="top" width="385"&gt;dispose of context1&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;Note that operations on multiple contexts can be interspersed any way you like as long as the order of the operation &lt;em&gt;within a context &lt;/em&gt;is the correct one.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Versions, capabilities and extended capabilities&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When calling into a MSSCCI provider, an IDE needs to know which source control functionality is supported by the MSSCCI provider (which functions are implemented). There are a couple of functions that return this information.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb166219.aspx"&gt;SccGetVersion&lt;/a&gt; is one of the first functions an IDE will call. This returns the version of the MSSCCI provider (currently there can be providers implementing versions 1.0, 1.1, 1.2 or 1.3 of the MSSCCI spec). Certain functions are defined only by higher number versions MSSCCI spec (were introduced later). Thus if a provider reports supporting version 1.1 of the spec, an IDE won’t even bother binding and calling a function like SccWillCreateSccFile introduced in version 1.2 of the spec.&lt;/p&gt;  &lt;p&gt;When a MSSCCI provider declares implementing a specific version of a spec, it is not required to implement all the functions defined by that spec version. For instance, a MSSCCI 1.2 provider may implement SccCreateSubProject, but may not support features like batching (SccBeginBatch) or viewing file history (SccHistory).&amp;#160; An IDE will not call a function if the MSSCCI provider does not declare supporting it.&lt;/p&gt;  &lt;p&gt;To define the functionality supported, a provider should return the lpSccCaps &lt;a href="http://msdn.microsoft.com/en-us/library/bb166205.aspx"&gt;capabilities flags&lt;/a&gt; during the call to &lt;a href="http://msdn.microsoft.com/en-us/library/bb165660.aspx"&gt;SccInitialize&lt;/a&gt;(). E.g. Set and return the bit SCC_CAP_HISTORY in the lpSccCaps if your provider supports history operations.&lt;/p&gt;  &lt;p&gt;For MSSCCI 1.3 and later providers, additional capabilities flags can be returned by implementing the &lt;a href="http://msdn.microsoft.com/en-us/library/bb165472.aspx"&gt;SccGetExtendedCapabilities&lt;/a&gt;() function.&lt;/p&gt;  &lt;p&gt;Beside flags specifying which functions are implemented, capabilities flags may specify other information about the provider, e.g. whether comments are supported on certain operations. &lt;/p&gt;  &lt;p&gt;Note that an IDE may only use providers implementing specific functionality. E.g. VisualStudio 2002 and later can only use source control providers supporting multiple connections (reentrant providers, with version 1.1 or greater and defining SCC_CAP_REENTRANT flag).&lt;/p&gt;  &lt;p&gt;If the provider does not define a capability flag introduced by a later MSSCCI spec version than the version implemented by the provider, the IDE assumes that functionality is not available in the provider, and may fallback to other scc operations. E.g. If a MSSCCI 1.1 provider is used with VS2003 and later, the lack of the SCC_CAP_MULTICHECKOUT capability will make VS attempt other ways of determining whether the provider supports or not multiple checkouts. Or, if a MSSCCI 1.2 provider is used with VS2005 and later to control websites, recursive enumeration of files in the source control database using SccPopulateDirList is not possible and VS will try alternative (and slower) ways of achieving the same result, using SccPopulateList and recursive SccGet operations.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-5547976753180627138?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/5547976753180627138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=5547976753180627138' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5547976753180627138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5547976753180627138'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2009/10/msscci-primer-how-microsoft-source-code.html' title='A MSSCCI Primer (How Microsoft Source Code Control API works)'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2568050923172828028</id><published>2009-10-23T23:45:00.001-07:00</published><updated>2009-10-23T23:45:04.654-07:00</updated><title type='text'>Windows 7 cannot access Smb shares on Infrant ReadyNAS</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Yesterday I installed Windows 7 upgrading from Vista, which preserved all my settings. Almost. After the first login, Windows 7 popped up balloon warnings that “Could not reconnect all network drives”&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/SuKiYT0ropI/AAAAAAAAAKM/wA017cHqxK0/s1600-h/NetworkDrives%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="NetworkDrives" border="0" alt="NetworkDrives" src="http://lh6.ggpht.com/_ZoHTfJbZeoA/SuKiYovVfDI/AAAAAAAAAKQ/HlFlCzjzdCU/NetworkDrives_thumb%5B1%5D.png?imgmax=800" width="410" height="97" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It turned out that all the drives I had mapped to Samba shares on the Infrant ReadyNAS system and that were working fine in Vista were now inaccessible, and they were showing as disconnected in Windows Explorer.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/SuKiY1hB0EI/AAAAAAAAAKU/9nFrK4YkjQ0/s1600-h/NetworkDrives2%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="NetworkDrives2" border="0" alt="NetworkDrives2" src="http://lh4.ggpht.com/_ZoHTfJbZeoA/SuKiZDT1i7I/AAAAAAAAAKY/xQzjdT938uA/NetworkDrives2_thumb%5B4%5D.png?imgmax=800" width="644" height="204" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Double clicking the shares in Windows Explorer, or attempting to access the server by address &lt;a href="file://\\alinc-nas"&gt;\\alinc-nas&lt;/a&gt; was displaying a logon prompt. Typing the correct password and pressing OK was useless, the logon dialog came back with a “Logon failure: unknown user name or bad password” error.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/SuKiZm3k2LI/AAAAAAAAAKc/Uc62cyHa3t8/s1600-h/Logon2%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Logon2" border="0" alt="Logon2" src="http://lh4.ggpht.com/_ZoHTfJbZeoA/SuKiaNC1BtI/AAAAAAAAAKg/6_W0eDUrSn8/Logon2_thumb%5B2%5D.png?imgmax=800" width="443" height="345" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Attempting to view the shares from command line with “net view” was no better, this one complained “System error 53 has occurred / The network path was not found” or “System error 5 has occurred / Access is denied”&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_ZoHTfJbZeoA/SuKiaYOA80I/AAAAAAAAAKk/TBtANiRDl-Y/s1600-h/Command%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Command" border="0" alt="Command" src="http://lh4.ggpht.com/_ZoHTfJbZeoA/SuKiagJLblI/AAAAAAAAAKo/OfUxo9iHG_k/Command_thumb%5B2%5D.png?imgmax=800" width="394" height="105" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I searched the net and eventually I found the solution. Thanks to Brandon for &lt;a href="http://www.builderau.com.au/blogs/codemonkeybusiness/viewblogpost.htm?p=339270746"&gt;his article&lt;/a&gt;! &lt;/p&gt;  &lt;p&gt;The problem can be solved by modifying a security policy, as described below:&lt;/p&gt;  &lt;p&gt; - Open the StartMenu and search for “Local Security Policy”. Right click the application icon and choose to RunAsAdministrator. (alternatively you can open the Run dialog and launch “secpol.msc”). &lt;/p&gt;  &lt;p&gt;- In the “Local Security Policy” window, expand SecuritySetting/LocalPolicies/SecurityOptions folders in the left pane tree and locate “Network security: LAN Manager authentication level” in the right pane list. &lt;/p&gt;  &lt;p&gt;- Double click the line and change its value from the default “Send NTLMv2 response only” into “Send LM &amp;amp; NTLM – use NTLMv2 session security if negotiated”. Click Ok and agree with the warning. You’re done! The shares should now be accessible (there is no need to reboot).&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_ZoHTfJbZeoA/SuKia5239DI/AAAAAAAAAKs/CKTAJKv50P8/s1600-h/image%5B8%5D.png"&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://lh4.ggpht.com/_ZoHTfJbZeoA/SuKibWwcPoI/AAAAAAAAAKw/veG_1eWnm8o/image_thumb%5B4%5D.png?imgmax=800" width="890" height="483" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ZoHTfJbZeoA/SuKibg7ePkI/AAAAAAAAAK0/3v7PV-XuAj0/s1600-h/image%5B4%5D.png"&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://lh5.ggpht.com/_ZoHTfJbZeoA/SuKicC_CqRI/AAAAAAAAAK4/Zy0j7qUCqSw/image_thumb%5B2%5D.png?imgmax=800" width="435" height="517" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2568050923172828028?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2568050923172828028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2568050923172828028' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2568050923172828028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2568050923172828028'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2009/10/windows-7-cannot-access-smb-shares-on.html' title='Windows 7 cannot access Smb shares on Infrant ReadyNAS'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_ZoHTfJbZeoA/SuKiYovVfDI/AAAAAAAAAKQ/HlFlCzjzdCU/s72-c/NetworkDrives_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-7769169987347912163</id><published>2008-11-05T11:51:00.001-08:00</published><updated>2008-11-05T11:51:02.332-08:00</updated><title type='text'>How to migrate from SourceSafe 6.0 to VSS 2005</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I’ve seen this question asked a couple of times, so I thought it might be time to write a blog entry to have people to point to when I’ll see it again…&lt;/p&gt;  &lt;p&gt;Let me start by saying there are no database format changes between VSS6.0 and VSS2005, thus there is no need to convert the database (like it was the case with previous versions). VSS 6.0 can use a database created with VSS 2005, and vice versa (and only VSS2005 will benefit from new features like checkout local version, time zones, etc).&lt;/p&gt;  &lt;p&gt;There are two possible migration paths:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;a) Want to upgrade from VSS 6.0 to VSS 2005 on the same machine&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Since there is no database conversion required, all you need to do is to install VSS 2005. You may install VSS6 and VSS2005 side by side if you want to test the new bits, but should you decide to uninstall VSS6 you will need to repair your VSS2005 installation (or reinstall it).&lt;/p&gt;  &lt;p&gt;I recommend uninstalling first VSS 6.0. The uninstall will not delete existing VSS databases on the machine. After that, simply install VSS 2005. If you do it in this order, all the VSS binaries (ssapi.dll, ssscc.dll) will remain registered correctly, and you should be able to just open VSS2005 and have things working as before.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;b) Have a machine with VSS 6.0 but want to setup a&amp;#160; new server with VSS2005&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Start by setting up the new server machine (install OS, etc.), install IIS if you need to use the database with FrontPage or plan to use VSS remote.&lt;/p&gt;  &lt;p&gt;Install VSS2005 on the new machine. VSS2005 does not create a new database on setup, like it was the case with VSS6.0.&lt;/p&gt;  &lt;p&gt;A VSS database is comprised by a couple of files on a network share. You will have to copy the VSS databases from the existing machine onto the new machine. Identify the VSS database folders on the old machine. Make sure there are no users still accessing the old database (a good way to do this is to disconnect/remove the network shares on the old machine). Copy the database folder into a new folder on the new machine. Any recursive copy command can be used (xcopy /s, robocopy /mir, WindowsExplorer, etc). On the new machine, share the database folder.&lt;/p&gt;  &lt;p&gt;If you’ve been using the VSS database with FrontPage Server Extensions, you’ll need to write a registry key on the new machine. The VSS2005 installer can’t write this key for you like VSS6 did, because it does not create a new database during setup. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SourceSafe]&lt;/p&gt;    &lt;p&gt;“API Current Database”=”Path to the database on the new machine”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Have all other VSS database users uninstall their VSS 6.0 and install VSS2005. While the database can be used in a mixed client environment, it’s recommended that all clients use VSS2005 to benefit of the new features and avoid inconveniences (e.g. VSS6 users won’t be able to merge UTF8 or Unicode files checked in with VSS2005).&lt;/p&gt;  &lt;p&gt;Communicate the new database path to all all other team members and have them open the new VSS database by pointing VSS Explorer to the new database.&lt;/p&gt;  &lt;p&gt;You may also want now to consider using the new features of VSS 2005. E.g In SSAdmin, Tools/Options/General page consider whether you want to enable CheckoutLocalVersion, set a time zone for the database in the TimeZones tab, use Server/Configure dialog and decide whether you will use this database for remote access or want to configure the LAN service for better performance on LAN, etc.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-7769169987347912163?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/7769169987347912163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=7769169987347912163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7769169987347912163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7769169987347912163'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/11/how-to-migrate-from-sourcesafe-60-to.html' title='How to migrate from SourceSafe 6.0 to VSS 2005'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-6712001526846790370</id><published>2008-06-29T02:30:00.001-07:00</published><updated>2008-06-29T02:30:32.523-07:00</updated><title type='text'>Cannot see shared folders or mapped drives on XBox 360's Media Center Extender that are visible on the Vista Media Center PC</title><content type='html'>&lt;p&gt;On my Vista PC named Jupiter and running Media Center, I logon as Alin and I am able to see shares from another computers (e.g. from a Linux box that is my NAS device). Some of these drives are mapped to local drives on my account, e.g. M:\ -&amp;gt; &lt;a href="file://\\nas\media\music"&gt;\\nas\media\music&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;I setup my Xbox 360 as a Media Center Extender, however when I go to the Library setup and I try to add a new folder to the library, I am no able to select the shares from my NAS device: in the local drives I only see the C:\ drive, and in the folders shared by other computers I don't see the shares from the Linux box...&lt;/p&gt;  &lt;p&gt;Media Center Extender uses a local username named something like MCX1 on the MC PC. It is for this MCX1 user that you have to map a drive to the shared folder to make it appear in the Library as a local drive... This can be done with a NetLogon script.&lt;/p&gt;  &lt;p&gt;Start by creating a folder %Windir%\System32\Repl\Import\Scripts. Now create a batch file, where you map the drives.&amp;#160; An example might look like this:&lt;/p&gt;  &lt;pre&gt;    @echo off&lt;br /&gt;    set CREDENTIALS=/user:LinuxBox\[Username] [Password]&lt;br /&gt;    net use P: &amp;quot;\\LinuxBox\media\Pictures&amp;quot; %CREDENTIALS%&lt;br /&gt;    net use M: &amp;quot;\\LinuxBox\media\Music&amp;quot; %CREDENTIALS% &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Save this file in the folder you created earlier, e.g. as MCXLogonScript.cmd. The location is important. I've read articles this logon file should be placed in C:\netlogon; the help mentions it should be saved in &lt;a href="file://\\vistapc\netlogon"&gt;\\vistapc\netlogon&lt;/a&gt; share, etc., but none of those worked for me. I found the correct path where Windows was looking for the file with &lt;a href="http://www.microsoft.com/technet/sysinternals/systeminformation/processmonitor.mspx"&gt;ProcessMonitor&lt;/a&gt;, and that path on my Vista box was %Windir%\System32\Repl\Import\Scripts.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It's time to associate the logon script with the MCX1 user.&amp;#160; Go to Control Panel -&amp;gt; Administrative Tools -&amp;gt; Computer Management. Under SystemTools/LocalUsersAndGroups/Users, select the MCX1 user and display its Properties. In the Profile tab, type just the file name, MCXLogonScript.cmd.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/alinconstantin/SGdWNpP1zAI/AAAAAAAAAG4/pi65JtneqcM/s1600-h/mcxlogonscript%5B2%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="176" alt="mcxlogonscript" src="http://lh6.ggpht.com/alinconstantin/SGdWN6_Tr6I/AAAAAAAAAG8/lykPn2t4DAg/mcxlogonscript_thumb.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Go to the XBox 360. Close and reopen Media Center here - it will logout and re-login on the PC with the MCX1 user, and this time it will read the logon script and map the drives. If you go now to Tasks/Setting/LibrarySetup and choose AddFoldersToWatch and select AddFoldersOnThisComputer, now you should see the M:\ and P:\ drives that were mapped by the logon script beside the C:\ drive.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-6712001526846790370?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/6712001526846790370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=6712001526846790370' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/6712001526846790370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/6712001526846790370'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/06/cannot-see-shared-folders-or-mapped.html' title='Cannot see shared folders or mapped drives on XBox 360&amp;#39;s Media Center Extender that are visible on the Vista Media Center PC'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/alinconstantin/SGdWN6_Tr6I/AAAAAAAAAG8/lykPn2t4DAg/s72-c/mcxlogonscript_thumb.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-4672989141919809817</id><published>2008-06-29T00:19:00.001-07:00</published><updated>2008-06-29T00:19:47.876-07:00</updated><title type='text'>Windows Media Center not recognizing and not displaying jpg images - showing "unable to display picture" error</title><content type='html'>&lt;p&gt;Last week I tried to view on my TV a couple of pictures recently snapped using an XBox 360 as a Media Center Extender connected to my Vista PC. As much as I tried, I could not convince the Media Center to display the pictures - it was simply not recognizing them. Here are the symptoms I was experiencing:&lt;/p&gt;  &lt;p&gt;1) adding the folder containing the pictures to the Media Center Library (using WMC interface) was recognizing the number of files, but when to display the pictures in that folder, it was showing &amp;quot;0 pictures&amp;quot;. I tried with folders placed in different locations (my account's Pictures folder, the Public Pictures folder, a network folder on my NAS box, etc) without any success.&lt;/p&gt;  &lt;p&gt;2) adding the folder containing the pictures using Media Player's Library worked halfway. When the pictures were added from a NAS folder the pictures were added to the library, but Media Player was not able to show their &lt;a href="http://lh6.ggpht.com/alinconstantin/SGc3gvbMKII/AAAAAAAAAGY/c81ozwu68xc/s1600-h/media4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="media" src="http://lh6.ggpht.com/alinconstantin/SGc3hG1mYhI/AAAAAAAAAGc/76UVgaGeRlw/media_thumb2.png?imgmax=800" width="244" align="right" border="0" /&gt;&lt;/a&gt;thumbnails (for some reason, it was showing correctly the CR2 files, but not the JPG files).&amp;#160; Photo cameras write the images on memory cards,which are usually formatted as FAT, and the names are capitalized, like IMG_0001.JPG. I was copying the photos on my Infrant ReadyNAS 600 device which uses Linux/ext2 as the file system, which is case sensitive. When MediaPlayer was adding the images to its library, he was changing the case of the extension, and was adding the files as IMG_0001.&lt;strong&gt;jpg&lt;/strong&gt; (This could be seen by looking at the Properties of the file in the library). Because the files were hosted on a case-sensitive Samba share on my NAS/Linux box, trying to view the file was displaying &amp;quot;File not found&amp;quot; errors. It believe this is a bug in MediaPlayer, so I reported it to Microsoft. Meanwhile, I looked at &lt;a href="http://www.readynas.com/?page_id=93"&gt;Infrant/Netgear ReadyNAS add-ons&lt;/a&gt; and I found &lt;a href="http://www.readynas.com/download/addons/3.01/ToggleCaseSensitivity_1.0.bin"&gt;ToggleCaseSensitivity&lt;/a&gt; that I used to switch the file system to be case-insensitive. After this, MediaPlayer showed correctly all the files in its library.&lt;/p&gt;  &lt;p&gt;3) now back to MediaCenter. WMC reuses the MediaPlayer's library, thus it should have displayed the files I was able to see with MediaPlayer. However, that turned out not to work as expected. I tried to browse the library ByFolder, and I was navigating to the folders with pictures, but they only displayed &amp;quot;0 items&amp;quot;. Trying to enter the folder showed &amp;quot;No pictures were found&amp;quot; message. I also tried to browse the library ByDate, navigate to the year and month when the pictures were taken. This had a bit more success in the sense that at least it displayed the file names. However, only placeholders were shown for all pictures, with just the picture names. Clicking on one of the files to show the picture caused Media Center to show a message &amp;quot;Unable to display the picture&amp;quot;.&lt;a href="http://lh4.ggpht.com/alinconstantin/SGc3h58tmoI/AAAAAAAAAGg/7r0NSgdxkkk/s1600-h/wmc25.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="188" alt="wmc2" src="http://lh5.ggpht.com/alinconstantin/SGc3iDLRUpI/AAAAAAAAAGk/Oqmqgk6zpNI/wmc2_thumb3.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/alinconstantin/SGc3i7QiBDI/AAAAAAAAAGo/HzPG5zjaBMo/s1600-h/wmc14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="188" alt="wmc1" src="http://lh5.ggpht.com/alinconstantin/SGc3jL2h7tI/AAAAAAAAAGs/23_LQWEuIYY/wmc1_thumb2.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I searched the net and found that many other users had similar problems; there were references to the jpg file associations being messed up.&lt;/p&gt;  &lt;p&gt;Indeed, in the registry the file associations for the jpg extension was looking like this:&lt;/p&gt;  &lt;pre&gt;   [HKEY_CLASSES_ROOT\.JPG]&lt;br /&gt;   @=&amp;quot;JPG_auto_file&amp;quot;&lt;br /&gt;   &amp;quot;Content Type&amp;quot;=&amp;quot;image/jpeg&amp;quot;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Comparing with the setting of another Vista machine, it turned out the important part missing that was causing MediaCenter to skip the files was a missing &lt;strong&gt;PerceivedType &lt;/strong&gt;registry value, that should have been set to &lt;strong&gt;&lt;em&gt;image&lt;/em&gt;&lt;/strong&gt;. (The ContentType was also missing - I restored a couple of weeks ago, when I discovered without it Windows Live Writer has troubles with images - see previous posts). I was also missing the PersistentHandler setting; the&amp;#160; JPG_auto_file was written by IrfanView, which was associated with the jpg files. I don't know if IrfanView was responsible or not for the missing values...&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Anyway, by default, the registry values should look like this:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;   [HKEY_CLASSES_ROOT\.jpg]&lt;br /&gt;   @=&amp;quot;jpegfile&amp;quot;&lt;br /&gt;   &amp;quot;Content Type&amp;quot;=&amp;quot;image/jpeg&amp;quot;&lt;br /&gt;   &lt;strong&gt;&amp;quot;PerceivedType&amp;quot;=&amp;quot;image&amp;quot;&lt;/strong&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/alinconstantin/SGc3kXnF6LI/AAAAAAAAAGw/HTv-koQ6UCg/s1600-h/wmc3%5B3%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="188" alt="wmc3" src="http://lh3.ggpht.com/alinconstantin/SGc3k0yE58I/AAAAAAAAAG0/Atr847Iad2Y/wmc3_thumb%5B1%5D.png?imgmax=800" width="244" align="right" border="0" /&gt;&lt;/a&gt;I was missing similar keys for the&amp;#160; *.jpeg file association. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So I manually added the PerceivedType setting in registry and I've restarted MediaCenter; it immediately recognized the jpg pictures, and now everything looks good again! &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you want to restore the jpg/jpeg file associations to their default values, you can edit manually the registry or you can save the setting below to a file with *.reg extension, then double click the file in Explorer.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;----------------------------------------&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\.jpg]&lt;br /&gt;@=&amp;quot;jpegfile&amp;quot;&lt;br /&gt;&amp;quot;Content Type&amp;quot;=&amp;quot;image/jpeg&amp;quot;&lt;br /&gt;&amp;quot;PerceivedType&amp;quot;=&amp;quot;image&amp;quot;&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\.jpg\OpenWithProgids]&lt;br /&gt;&amp;quot;jpegfile&amp;quot;=&amp;quot;&amp;quot;&lt;br /&gt;&amp;quot;WindowsLive.PhotoGallery.jpg.12.0&amp;quot;=&amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\.jpg\PersistentHandler]&lt;br /&gt;@=&amp;quot;{098f2470-bae0-11cd-b579-08002b30bfeb}&amp;quot;&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\.jpeg]&lt;br /&gt;@=&amp;quot;jpegfile&amp;quot;&lt;br /&gt;&amp;quot;Content Type&amp;quot;=&amp;quot;image/jpeg&amp;quot;&lt;br /&gt;&amp;quot;PerceivedType&amp;quot;=&amp;quot;image&amp;quot;&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\.jpeg\OpenWithProgids]&lt;br /&gt;&amp;quot;jpegfile&amp;quot;=&amp;quot;&amp;quot;&lt;br /&gt;&amp;quot;WindowsLive.PhotoGallery.jpg.12.0&amp;quot;=&amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\.jpeg\PersistentHandler]&lt;br /&gt;@=&amp;quot;{098f2470-bae0-11cd-b579-08002b30bfeb}&amp;quot;&lt;br /&gt;----------------------------------------&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-4672989141919809817?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/4672989141919809817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=4672989141919809817' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4672989141919809817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4672989141919809817'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/06/windows-media-center-not-recognizing.html' title='Windows Media Center not recognizing and not displaying jpg images - showing &amp;quot;unable to display picture&amp;quot; error'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/alinconstantin/SGc3hG1mYhI/AAAAAAAAAGc/76UVgaGeRlw/s72-c/media_thumb2.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-3343990167546683061</id><published>2008-06-21T19:50:00.001-07:00</published><updated>2008-06-21T19:50:22.619-07:00</updated><title type='text'>Speeding up Windows Vista boot and shutdown times</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;One of my friends installed today Vista and complained the boot was taking almost 2 minutes, much longer than in XP. I became curious and I thought I should check on my system what are the boot times...&lt;/p&gt;  &lt;p&gt;I have Vista installed fore a year and a half now, and I don't boot my computer very often. It turned out that for my system, the boot time took more than 4 minutes!!! 1 minute until the login screen, 4 minutes until the system was idle - this was on a Intel DualCore 6600 (2.4GHz) with 2 GB RAM, the machine I bought in December 2006. &lt;/p&gt;  &lt;p&gt;It turns out Microsoft has released some great tools, &lt;em&gt;&lt;strong&gt;XBootMgr &lt;/strong&gt;&lt;/em&gt;and &lt;em&gt;&lt;strong&gt;Performance Analyzer&lt;/strong&gt;&lt;/em&gt;, that can help you improving the performance of the boot and shutdown times. They are included in&amp;#160; &lt;a href="http://www.microsoft.com/whdc/system/sysperf/perftools.mspx"&gt;Windows Performance Tools Kit&lt;/a&gt;. For help with running the tool, see the &lt;a href="http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/PerfAnalyzer_onoff.xps"&gt;On/Off Transition Performance Analyzer&lt;/a&gt; page. I downloaded the kit and installed it in C:\Program Files\Microsoft Windows Performance Toolkit.&lt;/p&gt;  &lt;p&gt;You should also download the &lt;a href="http://shellrevealed.com/files/folders/4411/download.aspx"&gt;autologon.exe&lt;/a&gt; tool. It allows you specifying a username and password that will be used for automatic logon during the performance measuring process. I downloaded the zip file and extracted the tool. From an elevated command prompt, I run the tool like &amp;quot;&lt;strong&gt;&lt;em&gt;&lt;font color="#404040"&gt;autologon /username:Constantin\Alin /set&amp;quot; &lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;and typed my password. (To open an elevated command prompt, open StartMenu, write &amp;quot;command&amp;quot; in the search box, right click the &amp;quot;Command Prompt&amp;quot; and select &amp;quot;Run as Administrator&amp;quot;)&lt;/p&gt;  &lt;p&gt;I did a first run with &amp;quot;&lt;strong&gt;&lt;em&gt;&lt;font color="#404040"&gt;xbootmgr.exe -trace boot&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&amp;quot; (the computer will restart automatically in 5 seconds after running the command). As I told you before, the first boot took more than 4 minutes. After reboot I run&amp;#160; &amp;quot;Performance Analyzer&amp;quot; from the icon installed in StartMenu (or run xperfview), and use the Trace/Open menu item to open the *.etl (event trace log) file saved in the same folder. At a first look it's pretty confusing understanding the log graphs, but the first thing that was clear was that disk accesses were slowing things down. The CPU was used 20% average, but the disk was hit really hard, close to 100% all the time.&lt;/p&gt;  &lt;p&gt;Here are some simple things that you can try to reduce the disk access times:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1) Defragment the harddrive&lt;/strong&gt;. The defragmenter in Vista can be invoked from StartMenu (search for &amp;quot;defrag&amp;quot;). Click the &amp;quot;Defragment Now&amp;quot; button in the dialog and select the drives to defragment. The UI sucks, as there is no progress indicator. You can also invoke the tool from command line (&amp;quot;defrag C: -a -w&amp;quot; if you want to perform a full defragmentation), but again there is no progress indicator. Expect to wait a couple of hours to complete...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2) Eliminate unneeded services and startup programs.&lt;/strong&gt; Nowadays almost every program you install thinks it's necessary to add either a service or a program to run at computer startup, without you actually needing that functionality, or adding features that can be accessed other ways. &lt;/p&gt;  &lt;p&gt;The tools to use for eliminating unneeded services and startup programs are the ServiceManager (accessible from StartMenu, search for &amp;quot;Services&amp;quot;), and either &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx"&gt;Autoruns&lt;/a&gt;, Windows Defender (in Tools/SoftwareExplorer/Startup Programs), or if you're familiar with the registry use directly RegEdit.exe and look under the following keys: &lt;font size="1"&gt;HKLM\Software\Microsoft\Windows\CurrentVersion\Run&lt;/font&gt; and &lt;font size="1"&gt;HKCU\Software\Microsoft\Windows\CurrentVersion\Run.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;For services, look at the services that are Started and decide whether you need them. Look especially for 3rd party services. If you're not sure what a service does, search its name or the program name on Google, or on sites like &lt;a href="http://www.bleepingcomputer.com/startups/advsearch.html"&gt;BleepingComputer&lt;/a&gt;, and you'll find information describing them. If you don't need these services, set them to Disabled or Manual.&lt;/p&gt;  &lt;p&gt;For applications, I prefer leaving the keys in registry in case I need them at a later time, but prefix the application paths with something like &amp;quot;donotrunthisapp&amp;quot; that will cause Windows to skip running the application because it won't find a donotrunthisapp.exe executable.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;a) Services used by hardware I don't have&lt;/em&gt;. If you don't have on your computer devices using Bluetooth, SmartCard, WiFi, TabletPCPen, there is no reason why you'd keep these services enabled... &lt;/p&gt;  &lt;p&gt;&lt;em&gt;b) Helper programs&lt;/em&gt;. There are a lot of these, and I haven't found any downsides by stopping them. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;c) Update checkers&lt;/em&gt;. A lot of applications install either services or startup programs that checks whether they are any updates available for them. I don't understand why these programs needs check for updates on every boot instead of scheduling a task or even better when they are used to run once every week. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;d) Speed launchers and cache managers&lt;/em&gt;. Yes, they may speed up their application, but when their number is growing, they reduce the overall performance of the system...&lt;/p&gt;  &lt;p&gt;Here is a list of what applications I disabled on my machine (I was amazed myself how big the list was):&lt;/p&gt;  &lt;p&gt;Services:&amp;#160; PnkBstrA (PunkBuster Service Component installed by BattleField game and not removed when the game was uninstalled), GoogleUpdater (installed by GoogleEarth), NVIDIA Display Driver Service (some helper service), Adobe LM (set to Manual instead of Disabled, this is the license manager for Adobe software and will be started when needed), NMIndexingService (Nero media indexing service), Creative ALchemy AL1 Licensing Service (I set to Manual), Cyberlink RichVideo Service (RichVideo - I don't need enhanced video editing support), Bluetooth Support Service, Tablet PC Input Service, Smart Card, Smart Card Removal Policy, TPM Base Services (I set to AutomaticDelayed), etc.&lt;/p&gt;  &lt;p&gt;Startup programs: CTHelper and CTxHlp (Creative help programs and API extensions), NMIndexStoreSvr (more Nero indexing), NBKeyScan (used by NeroBackItUp), Steam (used by HalfLife games), RemoteControl, LanguageShortcut and BDRegion (used by Cyberlink DVD software), Adobe Reader Speed Launcher, ehTray (used by MediaCenter tray application), other update software like QuickTime Task, SunJavaUpdateSched, TkBellExe (for RealPlayer),&amp;#160; NvCplDaemon (not needed, I don't overclock the graphic card), NvMediaCenter (not needed to run in tray, display settings can be changed in control panel), etc.&lt;/p&gt;  &lt;p&gt;This is where the biggest improvement came from. After this step, the boot took only 2:10 minutes (30 seconds till the logon screen, 30 more seconds until the desktop appeared, 2:10 until idle)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3) Finally, run again the performance tool &lt;/strong&gt;to force existing internal operating system optimization mechanisms to update their state based on the current configuration of the system&lt;strong&gt;. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To do this, I run the &amp;quot;&lt;strong&gt;&lt;em&gt;&lt;font color="#404040"&gt;xbootmgr.exe -trace boot -prepSystem&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&amp;quot;. For me it rebooted the computer twice. On the first reboot, it decreased the boot time to 1:55 minutes (30 sec until login, 45 until desktop was shown, 1:55 until idle). It then took about 15 minutes to optimize the boot performance, and rebooted again. This time, the whole boot process took 1:08 !!! (26 seconds till login, 1:08 until idle).&lt;/p&gt;  &lt;p&gt;In the end, don't forget to disable the automatic logon. From an elevated command prompt, run the tool like &amp;quot;&lt;strong&gt;&lt;em&gt;&lt;font color="#404040"&gt;autologon /delete&amp;quot; &lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In conclusion, out of 21 applications I was running on startup, I kept only 6 of them I needed; I also removed 10 unneeded services; defragmented the harddrive and optimized the booting time. With all these changes, I was able to reduce the Vista boot time on my computer from more than 4 minutes to only 1 minute and 10 seconds (with the desktop usable in less than 45 seconds)! &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-3343990167546683061?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/3343990167546683061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=3343990167546683061' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3343990167546683061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3343990167546683061'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/06/speeding-up-windows-vista-boot-and.html' title='Speeding up Windows Vista boot and shutdown times'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2045960130012667724</id><published>2008-06-16T16:15:00.000-07:00</published><updated>2008-06-16T16:55:58.893-07:00</updated><title type='text'>Using Windows Live Writer to post on Google-hosted blog</title><content type='html'>&lt;p align="left"&gt;A while ago Microsoft released Windows Live Writer as part of the update to the Windows Live suite, so I thought to give it a try.&lt;/p&gt;&lt;p align="left"&gt;Of course, it was easy to set it up to post on my spaces.live.com - hosted blogs, but it was more interesting to see that it worked fine with my blogspot.com - hosted blog, which is owned by Google...&lt;/p&gt;&lt;p align="left"&gt;Here is how to set it up: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div align="left"&gt;Use the &lt;strong&gt;&lt;em&gt;Weblog &lt;/em&gt;&lt;/strong&gt;/ &lt;em&gt;&lt;strong&gt;Add Weblog Account&lt;/strong&gt;&lt;/em&gt; menu item to launch the wizard&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;Select &lt;strong&gt;&lt;em&gt;Another weblog service&lt;/em&gt;&lt;/strong&gt; and type in the weblog address. If you point directly to the weblog. (e.g. &lt;a href="http://alinconstantin.blogspot.com/"&gt;http://alinconstantin.blogspot.com&lt;/a&gt;), type in the username and password and click next it will just work. However, I found a more interesting way of setting it up by typing in the address of the blog provider page, e.g. &lt;a href="http://www.blogger.com/"&gt;http://www.blogger.com&lt;/a&gt;. When I clicked Next I was presented with another page where I was instructed to select the service provider type. You can see in the image below the list of all blog providers that are recognized by Writer:&lt;br /&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="415" alt="Blog providers recognized by Windows Live Writer" src="http://lh6.ggpht.com/alinconstantin/SFb72gnZLFI/AAAAAAAAAGM/7_HWFzmvzoM/WebLog1%5B3%5D.png?imgmax=800" width="476" border="0" /&gt; &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;Writer asks next the address of page used to post remotely, which for Blogger is in the format: &lt;strong&gt;&lt;i&gt;http://www.blogger.com/feeds/&amp;lt;feed-id&amp;gt;/posts/full&lt;/i&gt;&lt;/strong&gt; (the template is suggested by LiveWritter)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;So you have to fill in the feed-id. For Blogger, you can find the ID by going to your blog Dashboard page, hovering the mouse over the &lt;em&gt;&lt;strong&gt;New Post&lt;/strong&gt;&lt;/em&gt; link, and looking in the status bar (you can right click the link and Copy to clipboard to get the number easier). You can replace the &lt;em&gt;&lt;u&gt;&lt;strong&gt;&amp;lt;feed-id&amp;gt;&lt;/strong&gt;&lt;/u&gt;&lt;/em&gt; in the URL with that number, click Next and the blog setup will be complete. &lt;a href="http://lh6.ggpht.com/alinconstantin/SFb722v8f7I/AAAAAAAAAGQ/BXs3z6iLpZU/s1600-h/writer2%5B4%5D.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 20px 0px; BORDER-RIGHT-WIDTH: 0px" height="322" alt="Obtaining the feed ID for your blog on Blogger" src="http://lh5.ggpht.com/alinconstantin/SFb73bFJWhI/AAAAAAAAAGU/fuphO77rlQw/writer2_thumb%5B1%5D.jpg?imgmax=800" width="640" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p align="left"&gt;I played a bit with Writer and it's a breeze writing new posts. &lt;/p&gt;&lt;p align="left"&gt;Adding images and changing their properties is also easy (no more adding the image in Blogger's editor and having to mess up with the HTML, no more image added in the beginning of the post no matter where it's inserted, etc) . However, you may run into problems when trying to publish or save draft a post containing images (in fact this post was written the next day LiveWritter was made public, but I could only post it now, when I found the solution to this problem). If your post contains images, you may receive an error message &lt;span style="font-size:11;"&gt;&lt;span style="color:#000000;"&gt;"File Upload Failed"&lt;/span&gt;&lt;/span&gt; telling you &lt;span style="font-size:11;"&gt;&lt;span style="color:#000000;"&gt;"The remote server returned an error: (400) Bad Request."&lt;/span&gt;&lt;/span&gt;. It turns out this is caused by missing registry entries for files associations for jpg, png and gif files. Joe Cheng has a solution for the &lt;a href="http://jcheng.wordpress.com/2008/04/23/fix-for-wlw-blogger-error-400-bad-request/"&gt;400 Bad Request File Upload error in LiveWritter&lt;/a&gt;. Indeed, on my machine the ContentType of these file types was missing; Joe's registry fix worked like a charm...&lt;/p&gt;&lt;p align="left"&gt;Anyway, from now on I'll be using Live Writer to write these posts...&lt;/p&gt;&lt;p align="left"&gt;(written using Windows Live Writer)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2045960130012667724?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2045960130012667724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2045960130012667724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2045960130012667724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2045960130012667724'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/06/using-windows-live-writer-to-post-on.html' title='Using Windows Live Writer to post on Google-hosted blog'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/alinconstantin/SFb72gnZLFI/AAAAAAAAAGM/7_HWFzmvzoM/s72-c/WebLog1%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2275713996560532120</id><published>2008-06-14T01:23:00.000-07:00</published><updated>2008-06-14T01:35:17.375-07:00</updated><title type='text'>How to exit full-screen mode for TSClient in Ubuntu</title><content type='html'>If you made the mistake of using TsClient in Ubuntu and connecting to a Windows machine in full-screen mode, you may find hard to exit the Remote Desktop because there is no 'control bar' at the top of the TS window, the same way there is one in Windows' equivalent Mstsc.&lt;br /&gt;You simply can't click any buttton to minimize the window and see the Linux desktop...&lt;br /&gt;&lt;br /&gt;You can use Ctrl+Alt+Enter to toggle the full-screen mode, but with a caveat: if you enabled desktop effects, pressing Ctrl+Alt+Enter appears to do nothing except flashes the screen...&lt;br /&gt;If you have desktop effects enabled, use Ctrl+Alt+Left or use Ctrl+Alt+Right arrows after using Ctrl+Alt+Enter  to toggle between the two virtual desktops used by Ubuntu.&lt;br /&gt;&lt;br /&gt;Note that Ctrl-Alt-Enter toggles two modes: one in which you can switch the desktops with Ctrl+Alt+arrows, and another one in which the arrows don't work, but you can zoom with WinKey+1,WinKey+2, Winkey+3, etc. If you find the arrows not working, press again Ctrl-Alt-Enter to enter the other mode in which Ctrl+Alt+Left / Ctrl+Alt+Right will work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2275713996560532120?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2275713996560532120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2275713996560532120' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2275713996560532120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2275713996560532120'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/06/how-to-exit-full-screen-mode-for.html' title='How to exit full-screen mode for TSClient in Ubuntu'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-8159230008858554778</id><published>2008-06-09T11:08:00.000-07:00</published><updated>2008-06-16T01:00:37.166-07:00</updated><title type='text'>The year of Linux on Desktop? Nah, not this time...</title><content type='html'>Every year I hear freetards proclaiming that year is the year of linux on desktop, when Windows' reign will be overturned. Every year another distribution is "the one" to have, going from RedHat to Suse to Debian to Fedora to Ubuntu to etc, etc...&lt;br /&gt;&lt;br /&gt;So I thought I should take a closer look at this much praised Ubuntu.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Back in college days I used to play a lot with Slakware and RedHat, so I'm not entirely a newbie to linux. However, since I got a real job the free time became scarce. I stopped using linux about 5 years ago, when I realized I was spending more time fixing things than doing something productive with it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I decided to install Ubuntu 8.04 "Hardy Heron" (latest available) on my laptop, a HP Pavilion tx1320Us.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Someone deciding to download a distribution should do it from multiple places, otherwise he might miss important notices. For instance, Hardy is plagued with a critical bug in SSL handling. Only some of the download sites warned me about this, and advised to check immediately for updates and patch the install (-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From the beginning I liked the idea of the "Live CD". It allowed me to get a feeling of what the final experience will be (+).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Selecting the partition to install was confusing (-). I had no free space on the drive, and I had no idea what changes was the installer going to make if I were to select an existing Windows partition. Eventually I booted Vista, resized the partition from there, then restarted the Linux install on the free space. I considered using the manual partitioning, but eventually I decided to let Ubuntu installer do the partitioning. Again I would have liked more information what the automated partitioning was about to do to the drive...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The rest of the install process was easy and with no further problems (+).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Selecting the computer time is incorrect and confusing (-). For some reason, the automated install picked a wrong time for the machine, a couple of hours shifted from the reality. I have no idea why that happened, the time in BIOS was correct... Anyway, I chose to set the time manually. Selecting a timezone is done by selecting a city. The list of available options is limited (e.g. Seattle is not listed, the closer on US Pacific coast are Vancouver and L.A., so I chose the former). The timezone was shown as PDT=GMT-7, when in reality it should have been PDT=GMT-8 and using DST. There was no option for daylight saving time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway, I was amazed to see things working. A couple of years ago I wouldn't even have dream about installing linux on a laptop for lack of drivers. Now, almost everything was working out of the box: bluetooth, touchpad, sound keys, etc. (+). Only the WiFi was not working (but more on that later)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First thing I updated the computer. It downloaded "only" 125MB of updates. (Windows bashers compain about the size of initial updates; I guess linux is no different; anyway, that's ok, the security of the system is more important)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I found out that Vista bashers that complain about UAC are idiots that only used antiquated systems or that live in the Mac fantasy world. Linux is no different than Vista - for almost everything I had to deal with "Cancel or Allow" prompts (editing configuration files in /etc, changing system time, launching administrative programs, etc). In fact, here the prompts are for the user's password - much like in Vista if you're logged on with a user that's not admin.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Where Linux lacks is usability (-) and in hardware support (-). If you get lucky and all works out of the box then you have a system that's quite good. Otherwise, you're screwed. My wife or an average Joe installing Ubuntu will not be able to deal with the problems I've encountered.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are some usability examples:&lt;br /&gt;&lt;br /&gt;- in Display properties, the VisualEffects were set to None, and I cound not enable them (not even Normal). Eventually by running application I stumbled upon System/HardWareDrivers and there was an accelerated NVidia driver was available and installing it allowed enabling these effects. The driver is unsupported and required restart. Why DisplayProperties doesn't ask to install the appropriate driver I don't know...&lt;br /&gt;&lt;br /&gt;- some menu items (like the Synaptic Update Manager) were not doing anything when invoked. There was no message to tell me what's wrong. ("sudo synaptic" from command line worked)&lt;br /&gt;&lt;br /&gt;- setting up the printer was hard. I tried to connect to a printer shared by my domain controller. The printer dialog has an option to Browse network printers, but that was only listing the computers, not the shares; my guess is that Windows domain denied enumerating printers and shares from a computer not in a domain, and there was no option to specify domain user/password(-). I had to go to the Window machine, figure out the exact share name, type the share name manually in linux using smb://computer/printer_share and the domain user and password, after that all worked fine. I finally got my printer working, but I can't see my wife or my father doing the same thing...&lt;br /&gt;&lt;br /&gt;- if you're using TsClient to connect to a Windows machine in full screen you'll find there is no obvious way to return to the linux desktop. It can only be done with a series of key combinations, and figuring that out is not easy (more on that on another post)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Update Manager worked the first time. After a while it discovered new packages requiring updates, and it was prompting to download and install them. I agreed with the prompts, but the result was that UpdateManager was hanging (-).&lt;br /&gt;&lt;br /&gt;Out of the box, Media Player does not play mp3, wma, mpg, files (-). It pointed me to download a codec (with an unintelligible copyright warning message), but when I agreed to download it, it hanged, too (-).&lt;br /&gt;&lt;br /&gt;When these application hung, I could try to close them from the system menu using the Close command, or I could click the X button in the title bar, but the applications refused to close. (-). They had to be killed from Task Manager.&lt;br /&gt;&lt;br /&gt;After a while, I noticed I had accumulated a number of "gsu" processes running. I suspected them to be related with the hangs, and I searched the Internet. It turns out the hangs were due to a known bug. Somehow, the Ubuntu configuration tools saved in the /etc/hosts file the computer name with a domain attached (Mars.Constantin.comcast.net) instead of the computer name (Mars). This caused "sudo" in command line to display an error "Mars not found" and it was preventing applications to display automatically the window where I was supposed to enter credentials to allow those applications to perform maintenance tasks (installing new software). As soon as I modified manually the /etc/hosts file, things got back to normal...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Linux was using APM for power saving, but waking the computer after 40 minutes was not working. The screen remained black no matter whether I was typing something on keyboard or using the mouse (-). I remembered back in the days I was using Ctrl-Alt-Backspace to restart X: it worked as workaround, but I wonder how many newbies are going to figure it out...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The wireless network was not working(-): the wireless card was not detected and not present in Network Manager. The help pages were useless. (-)&lt;br /&gt;&lt;br /&gt;HP Pavilion tx1000 has a Broadcom 4321AG wireless card. On a Vista machine I turned to the community to find the solution... I already had a bcm43xx driver installed but not working (I found later it didn't supported my network card anyway). This driver was retired being replaced by b43 driver; I had this one, too, but this failed to load with missing dependencies. The solution described in &lt;a href="http://aphesz.org/?p=87"&gt;http://aphesz.org/?p=87&lt;/a&gt; was to use a Windows driver :-) from Dell support (I have HP!). You have to install ndiswrapper, run a couple of commands you have no idea what they are doing (and hope they do the right thing). After all this, the wireless interface showed in NetworkManager. You're not done yet... There you have to configure the WiFi access point (name, WAP password, etc). All in all, you get familiar with commands like ifup, ifdown, ndiswrapper, ifconfig, iwconfig, iwscan, etc. Too many things I didn't care about... I just wanted my wifi to work...&lt;br /&gt;&lt;br /&gt;So, I got it to work, but on next reboot it stopped working (-). The WiFi was working, but failed to get an IP address from the DHCP server. To make things confusing, a new interface "wlan0:avahi" was present, that I didn't have before. After more hours of searching the net, it turned out this is a known issue that's been there for at least 2 versions of Ubuntu; other distributions are affected, too. I was not able to find a good solution (what I found was not working for me, or were recommending to modify files that I didn't have - they were for other linux distributions). I gave up eventually and I'll keep doing "sudo ifdown wlan0", "sudo ifup wlan0" whenever I'll need WiFi...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Btw, if you're like me and thought the WiFi configuration tool in Windows sucks, wait until you see the one in linux. It looks like evertytime one switch the wifi network he's connecting to, he will need to mess up with the access point settings. Using the laptop at home and at work with Wifi will be a pain. (Yeah, yeah, I can write my own scripts that switches configurations, restart the network, etc, but why does it have to be this way?)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Conclusions:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;All in all, this was an interesting experience. Linux has definitely advances since last time I looked at it, and is definitely usable on desktop if you find it pre-configured with everything already working and you only do basic tasks (browsing, editing, etc.). However, I wouldn't recommend using it if you're not a computer geek. There are still a lot of usability problems, and bugs that will make you spend hours searching the net for a solution. Sooner or later you'll try to connect a new device, printer, etc and will run into more problems - be prepared to deal with them. Wifi is the biggest offender for configuration and usability.&lt;/p&gt;&lt;p&gt;This is not the year of the linux on desktop, and by the looks of it, it won't be very soon either.&lt;br /&gt;Until everything will "just work" without quirks and usability problems, I'm staying with Windows.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-8159230008858554778?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/8159230008858554778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=8159230008858554778' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8159230008858554778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8159230008858554778'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/06/year-of-linux-on-desktop-nah-not-this.html' title='The year of Linux on Desktop? Nah, not this time...'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-1772017913736260234</id><published>2008-06-08T23:26:00.000-07:00</published><updated>2008-12-11T10:07:12.255-08:00</updated><title type='text'>Lumanari de botez in Seattle (Finding candles for orthodox baptism in Seattle)</title><content type='html'>This is a post I wanted to write one year ago when I was looking for candles for the baptism of our godson, Cosmin. At that time we spent a fair amount of time running in circles for a store named Kaufland, Kaufman or something like this, whose address we didn't know exactly... The church staff couldn't help us either, being as clueless as we were...&lt;br /&gt;&lt;br /&gt;Eventually we found the shop and solved our problem, and I considered writing a blog post for other Romanians looking for candles, but I forgot. Today I was looking for the same store (I found it faster on the Internet this time), and I remembered to write it in case I'll need it ever again....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you're looking for baptism candles (lumanari de botez) in Seattle, it should be easy this time: look for &lt;a id="TaskHost_businessSearchPanel_ctl01_ctl00_ctl00_wllLsrTemplate1_YN926x15807338_title_link" href="http://maps.live.com/localsearch/details.aspx?lid=YN926x15807338&amp;amp;what=Kaufers%20religious&amp;amp;q=Kaufers%20religious&amp;amp;FORM=LLMP&amp;amp;tab=default&amp;amp;SearchID=551867985"&gt;Kaufer's Religious Supplies&lt;/a&gt;, which is located at 901 Harrison St., Seattle.&lt;br /&gt;&lt;br /&gt;Usually, the Romanian baptisms (botezurile) in Seattle are held at &lt;a href="http://maps.live.com/localsearch/details.aspx?lid=YN926x15809040&amp;amp;what=St%20Spiridon%20Cathedral%20Orthodox%20Church&amp;amp;where=Seattle%2c%20Washington%2c%20United%20States&amp;amp;q=St%20Spiridon%20Cathedral%20Orthodox%20Church%2c%20Seattle&amp;amp;FORM=LLMP&amp;amp;tab=default&amp;amp;SearchID=37853514"&gt;St Spiridon Cathedral Orthodox Church&lt;/a&gt;, which is conveniently located on the same street as the store. From the church head west on Harrison street, the store should be on the left side.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/SEzR3M15wUI/AAAAAAAAAGE/z0AzwHjtaPA/s1600-h/Kaufer.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5209769615231140162" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/SEzR3M15wUI/AAAAAAAAAGE/z0AzwHjtaPA/s320/Kaufer.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The store has catholic religious supplies; thell the clerks what you need. The candles are usually 24 or 36" long, simple (not ornated), and can be either extreme white or a bit yellowish (from beeswax). &lt;/p&gt;&lt;p&gt;Good luck!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-1772017913736260234?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/1772017913736260234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=1772017913736260234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1772017913736260234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1772017913736260234'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/06/lumanari-de-botez-in-seattle-finding.html' title='Lumanari de botez in Seattle (Finding candles for orthodox baptism in Seattle)'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoHTfJbZeoA/SEzR3M15wUI/AAAAAAAAAGE/z0AzwHjtaPA/s72-c/Kaufer.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-8161914907417453908</id><published>2008-02-19T17:17:00.000-08:00</published><updated>2008-02-19T21:45:44.375-08:00</updated><title type='text'>The SAK source control strings in Visual Studio's project files</title><content type='html'>If you opened up with notepad a project file used by VisualStudio you may have noticed 4 strings used for source control integration that have all "SAK" values.&lt;br /&gt;&lt;br /&gt;It's pretty much up to the project to persist these 4 values any way the project likes.&lt;br /&gt;&lt;br /&gt;In C# or VB project files these strings appear in the PropertyGroup section of the project: &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;br /&gt;    &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;        &amp;lt;SccProjectName&amp;gt;SAK&amp;lt;/SccProjectName&amp;gt;&lt;br /&gt;        &amp;lt;SccLocalPath&amp;gt;SAK&amp;lt;/SccLocalPath&amp;gt;&lt;br /&gt;        &amp;lt;SccAuxPath&amp;gt;SAK&amp;lt;/SccAuxPath&amp;gt;&lt;br /&gt;        &amp;lt;SccProvider&amp;gt;SAK&amp;lt;/SccProvider&amp;gt;&lt;br /&gt;    &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Similarly, in a VC project the strings appear as attributes on the VisualStudioProject xml node &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;VisualStudioProject ....&lt;br /&gt;        SccProjectName="SAK"&lt;br /&gt;        SccAuxPath="SAK"&lt;br /&gt;        SccLocalPath="SAK"&lt;br /&gt;        SccProvider="SAK" .... /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Or in a Setup project files the strings appear as follow:&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;pre&gt;&lt;br /&gt;    "DeployProject"&lt;br /&gt;    {&lt;br /&gt;        "SccProjectName" = "8:SAK"&lt;br /&gt;        "SccLocalPath" = "8:SAK"&lt;br /&gt;        "SccAuxPath" = "8:SAK"&lt;br /&gt;        "SccProvider" = "8:SAK"&lt;br /&gt;        ....&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;So, what are these strings and what is their meaning?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The 4 strings are used to store the source control bindings of a project. The source control integration and the project exchange these strings using &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivssccproject2.setscclocation.aspx"&gt;SetSccLocation&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivssccmanager2.registersccproject.aspx"&gt;RegisterSccProject&lt;/a&gt; function calls, and the projects persist the 4 values in settings with names resembling the function arguments (lpszSccProjectName, lpszSccLocalPath, lpszSccAuxPath, lpszSccProvider)&lt;br /&gt;&lt;br /&gt;VisualStudio 2003 and older supported only MSSCCI source control providers for scc integration. In MSSCCI, the IDE (VS) needs to persist 3 connection strings (the strings are required for the &lt;a href="http://msdn2.microsoft.com/en-us/library/Bb166506.aspx"&gt;SccOpenProject &lt;/a&gt;calls). The connection strings are provider-dependent, and VS stores these 3 strings plus a 4th one (identifying the provider) in the solution and project files. However, storing the real bindings in the project files makes life harder for developers if the projects are moved either in source control or on local disk, or if the projects are branched, etc. To reduce these problems, VisualStudio tries to take advantage of the settings persisted by the source control provider in the &lt;span style="font-size:85%;"&gt;mssccprj.scc&lt;/span&gt; files (when possible), and stores in the project files just a flag that tells the scc integration package that the project is under source control. The real bindings are persisted by the scc provider (in the &lt;span style="font-size:85%;"&gt;mssccprj.scc&lt;/span&gt; files) and VS reads them from there and uses them when needed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;And there you have it&lt;/strong&gt;: when all 4 source control connection strings in a project have "SAK" values, this is just a flag that tells VS that the real source control bindings of that project are persisted by the MSSCCI scc provider (not by Visual Studio) and should be read from the &lt;span style="font-size:85%;"&gt;mssccprj.scc&lt;/span&gt; file written by the scc provider in the same folder as the project file.&lt;br /&gt;&lt;br /&gt;To my knowledge, the "SAK" strings are the initials of &lt;strong&gt;Sumedh A. Kanetkar&lt;/strong&gt; who worked for source control integration back in 2000 (could it be a coincidence?), but that's not very important. The strings could have been any distinct values that could be recognized later and used as a flag (except empty values - empty string values are understood by projects as "the project is no longer under source control" in the call to SetSccLocation).&lt;br /&gt;&lt;br /&gt;Recently, I've seen another interesting interpretation of these values for Team Foundation Server provider. In this &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=166523&amp;amp;SiteID=1"&gt;forum post&lt;/a&gt; Richard says "SAK" stands for "&lt;strong&gt;Should Already Know&lt;/strong&gt;", because TFS should be able to determine the source control bindings implicitly.&lt;br /&gt;This is more or less true for TFS.&lt;br /&gt;&lt;br /&gt;Technically, TFS has enlistment/workspace management functionality, and this information is stored on the TFS server, not on the client. Thus, TFS is always able to calculate the source control bindings of a project, so it's true, TFS provider "should already know" the scc bindings of a project just based on the location of the project file on disk, and it doesn't need to persist real bindings in the project files.&lt;br /&gt;TFS scc provider in VS2005 and later is a VSIP source control provider, that has full control over what information is written in the solution and project files. TFS could have used and passed any other string values to the project systems to be persisted in the project files.&lt;br /&gt;&lt;br /&gt;To work with VS 2003, TFS also implements a MSSCCI provider that creates mssccprj.scc files (so when a project is added to TFS in VS2003 the scc bindings are usually written having SAK-values with their MSSCCI sense). To make easier the migration path (when such VS2003 project is opened in VS2005) it makes sense to me that TFS would re-use the same SAK strings for TFS VSIP provider. I suspect this is one of the reasons TFS source control provider in VS2005 and VS2008 also writes SAK values for the 4 binding strings.&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-8161914907417453908?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/8161914907417453908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=8161914907417453908' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8161914907417453908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8161914907417453908'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/02/sak-source-control-strings-in-visual.html' title='The SAK source control strings in Visual Studio&apos;s project files'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-1544336578324502510</id><published>2008-01-08T12:18:00.000-08:00</published><updated>2008-12-11T10:07:12.783-08:00</updated><title type='text'>Yahoo mail error -2146823279 gExtContent is undefined</title><content type='html'>In the last couple of weeks I got error messages every time I tried to login to Yahoo! Mail.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="50"&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;span style="font-size:60%;"&gt;Yahoo! Mail experienced a login error:&lt;br /&gt;name:TypeError&lt;br /&gt;message:'gExtContent' is undefined&lt;br /&gt;number:-2146823279&lt;br /&gt;description:'gExtContent' is undefined&lt;br /&gt;&lt;br /&gt;Yahoo! Mail experienced a login error:&lt;br /&gt;name:TypeError&lt;br /&gt;message:Object required&lt;br /&gt;number:-2146827864&lt;br /&gt;description:Object required&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/R4PdVifAuRI/AAAAAAAAAFU/kHEQNw0UFOk/s1600-h/YahooMailFail.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5153205760745847058" style="FLOAT: left; MARGIN: 0px; CURSOR: hand" alt="Yahoo mail error -2146823279 gExtContent is undefined" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/R4PdVifAuRI/AAAAAAAAAFU/kHEQNw0UFOk/s320/YahooMailFail.png" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;However, if I clicked "Try again" in the next page, I could access my mail without problem.&lt;br /&gt;&lt;br&gt;&lt;a href="http://3.bp.blogspot.com/_ZoHTfJbZeoA/R4PeySfAuSI/AAAAAAAAAFc/s7SjaO3SBVM/s1600-h/YahooMailFail2.png"&gt;&lt;img style="float:center; margin:0 0px 0px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_ZoHTfJbZeoA/R4PeySfAuSI/AAAAAAAAAFc/s7SjaO3SBVM/s320/YahooMailFail2.png" border="0" alt="Final page, click Try Again" id="BLOGGER_PHOTO_ID_5153207354178713890" /&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;For a while I just ignored these errors, but today they bothered me enough to make me try fixing the problem.&lt;br /&gt;&lt;br /&gt;I searched the error message on Internet and I found two recommended solutions:&lt;br /&gt;- clear up the browser history, temporary file cache, cookies, etc., and try again&lt;br /&gt;- switch temporarily to Yahoo Mail Classic (there is link in top of page), then switch back to the new style&lt;br /&gt;&lt;br /&gt;While these solutions have worked in the past for me for similar Yahoo errors, today they had no effect.&lt;br /&gt;&lt;br /&gt;However, when I read more carefully the last error page, I realized it was talking about a program modifying the html page and about firewall settings blocking ads. &lt;br /&gt;&lt;br /&gt;It then hit me I was running an Internet Explorer add-on program, &lt;a href="http://www.ie7pro.com/"&gt;IE7 Pro 2.0&lt;/a&gt; that I use for blocking image-ads and Flash-based ads. &lt;br /&gt;&lt;br /&gt;Ad blocking in IE7 Pro can be easily disabled from the context menu (not from firewall settings).&lt;br&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/R4PhhifAuTI/AAAAAAAAAFk/hFskfnlX79g/s1600-h/IE7ProDisableAdBlocking.png"&gt;&lt;img style="float:center; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/R4PhhifAuTI/AAAAAAAAAFk/hFskfnlX79g/s320/IE7ProDisableAdBlocking.png" border="0" alt="Disable ad blocking in IE7 Pro" id="BLOGGER_PHOTO_ID_5153210364950788402" /&gt;&lt;/a&gt;&lt;br /&gt;As soon as I disabled ad blocking, Yahoo! Mail page opened without problem.&lt;br /&gt;&lt;br /&gt;For a permanent solution, I enabled back ad blocking in IE7 Pro, accessed the Yahoo Mail account (got again the errors), and when I got the "Click here to try again" page, I used IE7Pro context menu to select "Ad Blocker / Don't filter this site".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-1544336578324502510?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/1544336578324502510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=1544336578324502510' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1544336578324502510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1544336578324502510'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2008/01/yahoo-mail-error-2146823279-gextcontent.html' title='Yahoo mail error -2146823279 gExtContent is undefined'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoHTfJbZeoA/R4PdVifAuRI/AAAAAAAAAFU/kHEQNw0UFOk/s72-c/YahooMailFail.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-1942814276347631918</id><published>2007-12-11T17:35:00.000-08:00</published><updated>2007-12-11T17:47:42.494-08:00</updated><title type='text'>Visual SourceSafe 2005 Update is available</title><content type='html'>Today Microsoft released the GDR/Update build (kind of ServicePack 1) for SourceSafe 2005. &lt;br /&gt;&lt;br /&gt;The update targets improving the compatibility with VisualStudio 2008, Windows Vista and fixes a couple of bugs affecting performance, stability and reliability (most important, IMHO), plus a few customer annoyances.&lt;br /&gt;&lt;br /&gt;You can download the update from this &lt;a href="http://support.microsoft.com/kb/943847"&gt;Visual SourceSafe 2005 Update MSDN page&lt;/a&gt;. If you're running Visual SourceSafe 2005, it is strongly recommended to upgrade your build. &lt;br /&gt;&lt;br /&gt;Richard Berg maintains in his blog a more detailed &lt;a href="http://blogs.msdn.com/richardb/archive/2007/06/06/list-of-bugs-fixed-in-sourcesafe-2005-gdr.aspx"&gt;list of the bugs fixed&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-1942814276347631918?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/1942814276347631918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=1942814276347631918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1942814276347631918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/1942814276347631918'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/12/visual-sourcesafe-2005-update-is.html' title='Visual SourceSafe 2005 Update is available'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-3327120063386415439</id><published>2007-10-14T12:57:00.000-07:00</published><updated>2008-12-11T10:07:13.048-08:00</updated><title type='text'>Fixing the red menu_HelpPopup_reportertoolmenu error in Netscape Navigator</title><content type='html'>A friend told me today his Netscape Navigator is screwed. The main window showed in the bottom a red error message &lt;font color="#FF0000"&gt;&lt;strong&gt;&amp;lt;menuitem id="menu_HelpPopup_reportertoolmenu"&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_ZoHTfJbZeoA/RxJ704hqkwI/AAAAAAAAAEc/C3D73-q3n5Q/s1600-h/reportertoolmenu.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_ZoHTfJbZeoA/RxJ704hqkwI/AAAAAAAAAEc/C3D73-q3n5Q/s320/reportertoolmenu.png" border="0" alt="menu_HelpPopup_reportertoolmenu" id="BLOGGER_PHOTO_ID_5121291874730676994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was about to tell him to disable his Navigator Add-Ons, when Netscape downloaded and upgraded my Navigator from build 9.0b3 to 9.0rc1, and I started seeing the same problem.&lt;br /&gt;&lt;br /&gt;I searched a bit the net and found out the menu_HelpPopUp_reportertoolmenu is related to a Reporter add-on that ships with SeaMonkey (who came up with this name anyway?!). The &lt;a href="http://reporter.mozilla.org/"&gt;Website Reporter Tool&lt;/a&gt; [Help--&gt;Report Broken Web Site] that is used by Netscape and Firefox does not select correctly its language sometimes and cause this error to appear.&lt;br /&gt;&lt;br /&gt;There were a couple of solutions proposed:&lt;br /&gt;- delete a file chrome.cdf in your profile (&lt;a href="http://groups.google.com/group/mozilla.dev.apps.seamonkey/tree/browse_frm/month/2006-12/51ab3fc01143c28b?rnum=151&amp;_done=%2Fgroup%2Fmozilla.dev.apps.seamonkey%2Fbrowse_frm%2Fmonth%2F2006-12%3F#doc_51ab3fc01143c28b"&gt;more info&lt;/a&gt;)&lt;br /&gt;- switch to another language and back (&lt;a href="http://seamonkey.ilias.ca/troubleshooting/#reportertoolmenu"&gt;more info&lt;/a&gt;)&lt;br /&gt;- uninstall the extension (&lt;a href="http://users.skynet.be/fa258499/faq.html#reportererror"&gt;more info&lt;/a&gt;) either by manually messing with the same chrome.cdf or using Chrome Manager&lt;br /&gt;&lt;br /&gt;None of the proposed solutions worked for me (I don't have a chrome.cdf file in my profile or at least I didn't find it, I have no idea how to switch languages or at least what I've tried had no effect, I had no add-ons installed for Netscape that I could uninstall, and the &lt;a href="http://mnenhy.mozdev.org/installation.html"&gt;Chrome Manager&lt;/a&gt; part of Mnenhy installed but was hanging up on opening the manager window).&lt;br /&gt;&lt;br /&gt;What worked eventually for me was:&lt;br /&gt;- Close Netscape Navigator&lt;br /&gt;- Go to &lt;strong&gt;C:\Program Files\Netscape\Navigator 9\chrome&lt;/strong&gt; folder (or the Chrome subfolder of your Navigator install folder) &lt;br /&gt;- Locate 2 files &lt;strong&gt;reporter.jar&lt;/strong&gt; and &lt;strong&gt;Reporter.manifest&lt;/strong&gt; and delete them&lt;br /&gt;- Restart Netscape Navigator and the red &amp;lt;menuitem id="menu_HelpPoppp_reportertoolmenu" error message should be now gone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-3327120063386415439?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/3327120063386415439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=3327120063386415439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3327120063386415439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3327120063386415439'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/10/fixing-red-menuhelppopupreportertoolmen.html' title='Fixing the red menu_HelpPopup_reportertoolmenu error in Netscape Navigator'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZoHTfJbZeoA/RxJ704hqkwI/AAAAAAAAAEc/C3D73-q3n5Q/s72-c/reportertoolmenu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-3634537786214956033</id><published>2007-10-06T21:43:00.000-07:00</published><updated>2008-12-11T10:07:13.281-08:00</updated><title type='text'>"Service CyberLink Background Capture Service (CBCS) hung on starting" and slow Vista logon on HP tx1000</title><content type='html'>A couple of days ago I bought a HP tx1000 laptop, and I noticed something weird: everytime I was logging on to Vista the screen become black, and the computer appeared to do nothing for a very long period of time; eventually the desktop appeared and things got back to normal.&lt;br /&gt;&lt;br /&gt;I knew something was wrong and I was planning to run eventually some monitoring software to track this down. Fortunately, it was not necessary: Vista came to rescue. When I woke today the laptop from sleep the "Problem Reports and Solutions" dialog popped up, asking to send Microsoft a "Service hung report" for a "ClCapSvc" program. I had 7 of these reports to send, so I set to investigate further.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RwhsiIhqkvI/AAAAAAAAAEU/tWPGDivqcWY/s1600-h/cyberlink.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RwhsiIhqkvI/AAAAAAAAAEU/tWPGDivqcWY/s320/cyberlink.jpg" border="0" alt="Service CyberLink Background Capture Service (CBCS) hung on starting" id="BLOGGER_PHOTO_ID_5118460310166606578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I looked in EventViewer, and the error there was reported as:&lt;br /&gt;"The CyberLink Background Capture Service (CBCS) service is marked as an interactive service.  However, the system is configured to not allow interactive services.  This service may not function properly."&lt;br /&gt;&lt;br /&gt;The service was registered in Services as:&lt;br /&gt;&lt;pre&gt;    CyberLink Background Capture Service (CBCS)&lt;br /&gt;    Provides background buffering, recording and burning functionality for CyberLink Capturing&lt;br /&gt;    "C:\Program Files\HP\QuickPlay\Kernel\TV\CLCapSvc.exe"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I also noticed another related service, that was failing, too:&lt;br /&gt;&lt;pre&gt;    CyberLink Task Scheduler (CTS)&lt;br /&gt;    Enables a user to configure and schedule a automated task for CyberLink Scheduling&lt;br /&gt;    "C:\Program Files\HP\QuickPlay\Kernel\TV\CLSched.exe"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, the mystery was solved. &lt;br /&gt;For me the service was installed as part of HP QuickPlay application, and it's used most likely for recording TV shows (and the other service for scheduling TV shows to be recorded as specific times). It's unclear to me why these services were intalled and automatically started, as I don't even have a TV tuner card!&lt;br /&gt;&lt;br /&gt;It looks like the service comes with other software like Cyberlink PowerCinema, that was probably licensed by HP and repackaged into QuickPlay. Other users had similar problems... &lt;a href="http://www.vistax64.com/vista-hardware-devices/78245-cyberlink-background-capture-service.html"&gt;http://www.vistax64.com/vista-hardware-devices/78245-cyberlink-background-capture-service.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution 1:&lt;/b&gt; Disable the service. In Start menu, type and run Computer Management, select the Services node in the tree, and in the right pane select "CyberLink Background Capture Service (CBCS)". Right click the service, use Properties dialog to set the service to Disabled (Setting to Manual doesn't help, as during the boot some other crappy application will attempt to use the service causing it to start again). Ok the Properties dialog and repeat the procedure for the second service, CyberLink Task Scheduler (CTS).&lt;br /&gt;     &lt;br /&gt;&lt;b&gt;Solution 2:&lt;/b&gt; The version of the CLCapSvc.exe file on my machine was 5.0.2510, and it was part of Hp QuickPlay 3.2. HP offers on its website an updated version of the program, HP QuickPlay Web Update 3.20A. Uninstalling the old version and installing  the new one upgraded the file to version 5.0.2819, which doesn't seem to hangup on boot.&lt;br /&gt;&lt;br /&gt;Since I don't need TV capture, I choose to apply both solutions...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-3634537786214956033?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/3634537786214956033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=3634537786214956033' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3634537786214956033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3634537786214956033'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/10/service-cyberlink-background-capture.html' title='&quot;Service CyberLink Background Capture Service (CBCS) hung on starting&quot; and slow Vista logon on HP tx1000'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoHTfJbZeoA/RwhsiIhqkvI/AAAAAAAAAEU/tWPGDivqcWY/s72-c/cyberlink.jpg' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-90084753949985126</id><published>2007-09-28T15:57:00.001-07:00</published><updated>2008-12-11T10:07:13.541-08:00</updated><title type='text'>Translation engines</title><content type='html'>Microsoft has recently released an update to its &lt;a href="http://search.live.com"&gt;search engine&lt;/a&gt;. Aside from the &lt;a href="http://blogs.msdn.com/livesearch/archive/2007/09/26/introducing-the-new-live-search.aspx"&gt;advertised improvements&lt;/a&gt; I was pleased to discover the addition of a &lt;a href="http://translator.live.com"&gt;translator tool&lt;/a&gt; as an alternative to &lt;a href="http://www.google.com/language_tools?hl=en"&gt;Google Translate&lt;/a&gt;; it also has a URL that for me seems easier to remeber.&lt;br /&gt;&lt;br /&gt;I've played a bit with French-English translation and to me the Live Translator seems better than Google's version.&lt;br /&gt;For other languages, Google wins (e.g. try translating with both engines from Chinese "用部落格分享照片、影音、趣味小工具和最愛清單，盡情秀出你自己" describing Windows Live Spaces :-))&lt;br /&gt;&lt;br /&gt;The translation of a webpage is really interesting. I like the side-by-side comparison, with phrase hightlighting. See for instance the &lt;a href="http://www.windowslivetranslator.com/BV.aspx?MKT=en-US&amp;lp=en_fr&amp;a=cnn.com"&gt; translation of CNN's home page&lt;/a&gt;.&lt;br&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rv2P7ohqkuI/AAAAAAAAAEM/QZj_Ulsilsc/s1600-h/compare.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rv2P7ohqkuI/AAAAAAAAAEM/QZj_Ulsilsc/s320/compare.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5115403006416425698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For me it's not going to be an immediate bye-bye Google, but from now on I'll check both engines when I'll need a translation...&lt;br /&gt;&lt;br /&gt;Try it out for yourself at &lt;a href="http://translator.live.com"&gt;http://translator.live.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-90084753949985126?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/90084753949985126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=90084753949985126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/90084753949985126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/90084753949985126'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/09/translation-engines.html' title='Translation engines'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rv2P7ohqkuI/AAAAAAAAAEM/QZj_Ulsilsc/s72-c/compare.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-3532886124488747102</id><published>2007-09-25T00:11:00.000-07:00</published><updated>2008-12-11T10:07:13.774-08:00</updated><title type='text'>Implementing custom source control glyphs for VSIP scc providers</title><content type='html'>It's the second time in the last month when someone asked me how to implement correctly the &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivssccglyphs.getcustomglyphlist(VS.80).aspx"&gt;IVsSccGlyphs.GetCustomGlyphList&lt;/a&gt; function in their source control provider so they can expose custom source control glyphs.&lt;br /&gt;&lt;br /&gt;So, this time I though I should implement the function myself and see what's going on...&lt;br /&gt;&lt;br /&gt;Of course, on first try I've hit the same problems reported by the customers :-). It turned out quickly that the problems come either from not setting up correctly the image size in the imagelist, from not setting correctly the transparency color, or not declaring the interface on the correct service.&lt;br /&gt;&lt;br /&gt;If you're interested, I've put the sample for download on my website: &lt;a href="http://www.alinconstantin.net/download/Example.SccProvider.WithCustomSccGlyphs.zip"&gt;Visual Studio Source Control Provider with Custom Glyphs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The sample is based on the SccProvider sample in VisualStudio SDK, so you can Windiff the 2 solutions and easily see the code additions. &lt;br /&gt;&lt;br /&gt;Here is how to test the new code:&lt;br /&gt;1. Build the solution in VS2005 and run it. &lt;br /&gt;2. In Tools/Options set the Sample Source Control Provider as the active provider (at this point the shell should call you on IVsSccGlyphs.GetCustomGlyphList to get the custom glyphs suported by your scc provider).&lt;br /&gt;3. Create a new solution, e.g. a ConsoleApplication C# project. &lt;br /&gt;4. Add the solution to source control&lt;br /&gt;5. Add a new file to the project or to the solution&lt;br /&gt;6. The new file should appear in SolutionExplorer with the new "pending add" icon exposed by the package, like in the picture below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rvi3_4hqktI/AAAAAAAAADE/k-EkfSGUpcU/s1600-h/SccGlyphs.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rvi3_4hqktI/AAAAAAAAADE/k-EkfSGUpcU/s320/SccGlyphs.png" border="0" alt="Custom glyph exposed by the sample scc provider" id="BLOGGER_PHOTO_ID_5114039685012427474" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-3532886124488747102?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/3532886124488747102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=3532886124488747102' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3532886124488747102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/3532886124488747102'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/09/implementing-custom-source-control.html' title='Implementing custom source control glyphs for VSIP scc providers'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rvi3_4hqktI/AAAAAAAAADE/k-EkfSGUpcU/s72-c/SccGlyphs.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-5917279333749903149</id><published>2007-09-19T02:32:00.000-07:00</published><updated>2008-12-11T10:07:14.197-08:00</updated><title type='text'>The day Google became irrelevant</title><content type='html'>I keep reading posts and articles claiming that "Google is the best search engine".&lt;br /&gt;&lt;br /&gt;The way I see it, it may still be the &lt;strong&gt;most popular&lt;/strong&gt; search engine, but it's no longer "the best".&lt;br /&gt;It has been beaten a while ago at usability by live.com for image search; it has been beaten in maps quality and features by local.live.com/VEarth, and recently it's not even longer "the best" for relevance of simple web searches...&lt;br /&gt;&lt;br /&gt;You want the proof?&lt;br /&gt;&lt;br /&gt;Here's a comparative search for a product mentioned in my previous blog post.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RvDvf1MtbyI/AAAAAAAAAC0/nLrSPmnzNEo/s1600-h/search1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RvDvf1MtbyI/AAAAAAAAAC0/nLrSPmnzNEo/s320/search1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5111848907200884514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's been more than 10 days since the post was created and google hasn't indexed it yet. To me this is even more unexplicable when I remember that blogger.com is also a Google-owned site. You'd think they'd index first the information on their own servers...&lt;br /&gt;&lt;br /&gt;You may argue that Google's indexes have grown too big when compared with other search engines, that it has to make less frequent passes over the already indexed sites. Let's go with this theory and see what "less frequent" means.&lt;br /&gt;Here's a comparative search for my wife's name. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RvDz2VMtbzI/AAAAAAAAAC8/ABn35EiC-4U/s1600-h/search2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RvDz2VMtbzI/AAAAAAAAAC8/ABn35EiC-4U/s320/search2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5111853691794452274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are now 2 month since my wife has changed jobs and Google still hasn't realized it. Flavia's contact info has been my site for at least 2 years now, yet it doesn't show up on Google in the top 50 results...&lt;br /&gt;&lt;br /&gt;I'm sorry for those Microsoft haters out there who repeat ad nauseam "Google is the best", but at least to me, Google has lost its search relevance. I guess it's time for other search engines to step up and take the leadership.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-5917279333749903149?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/5917279333749903149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=5917279333749903149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5917279333749903149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5917279333749903149'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/09/day-google-became-irrelevant.html' title='The day Google became irrelevant'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZoHTfJbZeoA/RvDvf1MtbyI/AAAAAAAAAC0/nLrSPmnzNEo/s72-c/search1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-8451729218796079530</id><published>2007-09-08T16:26:00.000-07:00</published><updated>2008-12-11T10:07:14.661-08:00</updated><title type='text'>Cross Flow fan replacement for Infrant ReadyNAS 600</title><content type='html'>For safe(r) storage of my data I use an Infrant ReadyNAS 600 in RAID mode 1.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RuMwQTF2B3I/AAAAAAAAACc/yW7bm9vJvsU/s1600-h/ReadyNAS.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5107979458929100658" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RuMwQTF2B3I/AAAAAAAAACc/yW7bm9vJvsU/s200/ReadyNAS.jpg" border="0" /&gt;&lt;/a&gt; &lt;div&gt;The model A of the device uses for cooling a cross-flow fan, which is silent, speed adjustable, and seemed cool looking at the time. While I kept good care of it (blowing it of dust every couple of weeks), after 2 years of use it showed fatigue signs (noise), and in one week it stopped working completely. The device can't work without the fan - the hard drives get easily to 60 degrees Celsius and the device powers itself down for protection.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, it isn't very easy to get a replacement for this fan. Newer ReadyNAS models use regular fans which are cheaper (and easier to buy, I'd add).&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Infrant calls the cross flow fan for ReadyNAS 600 model RN06-FAN1 and a replacement should have been easily bought from their site &lt;a href="http://www.shop-infrant.com/RN06-FAN1.htm"&gt;http://www.shop-infrant.com/RN06-FAN1.htm&lt;/a&gt;. However, Infrant is now Netgear, and while the stock transitions the fan is no longer available for buying.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So I tried to buy the fan from other sources. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Looking on the fan in my device, it shows on its label:&lt;/div&gt;&lt;div&gt;     Cross Flow Fan &lt;/div&gt;&lt;div&gt;     JDH-03009A12 &lt;/div&gt;&lt;div&gt;     Jin Yin Shyang Ent.Co., Ltd.,Taiwan&lt;/div&gt;&lt;br /&gt;&lt;div&gt;A net search shows the JDH03009A12 fan is only available on &lt;a href="http://www.x-cool.biz/product_info.php/products_id/1118"&gt;http://www.x-cool.biz/product_info.php/products_id/1118&lt;/a&gt; which is a Chinese-only site. I tried buying the fan from the site with the help of 2 Chinese-speaking coworkers, but the site has such a bad design I didn't succeed placing an oder (also the site is not secure - doesn't use SSL, and buying from here is a bit shady). The site is owned by Li Yahuiy (yahuiyli AT hotmail.com and yahuiyli AT yahoo.com) which has other auctions for the JDH-03009A12/RN06-FAN1 fan on yahoo site. However, the guy doesn't seem to speeak English, and at least for me, using Google beta translations for every mail is not an option.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Fortunately, I obtained a temporary fan replacement from Infrant (more on this later). The new fan has this info on its label:&lt;/div&gt;&lt;div&gt;     Chiefly&lt;br /&gt;     CCB13898S12L&lt;br /&gt;     Sleeve Bearing&lt;br /&gt;     Chiefly Choice Co., Ltd&lt;/div&gt;&lt;br /&gt;&lt;div&gt;See here both fans (old and temporary replacement):&lt;/div&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RuM2XTF2B5I/AAAAAAAAACs/rgTKkhpYNlI/s1600-h/fan.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5107986176257951634" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RuM2XTF2B5I/AAAAAAAAACs/rgTKkhpYNlI/s200/fan.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;A search for the new model/company finds it on another Taiwanese site &lt;a href="http://www.chiefly-choice.com.tw/DCB13898-SPECIFICATION-DATA.htm"&gt;http://www.chiefly-choice.com.tw/DCB13898-SPECIFICATION-DATA.htm&lt;/a&gt;, but they don't seem to sell it either.&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Anyway, this gave me more confidence I'll be able to find similar fans in the future. It looks like I'll just have to find another cross flow fan, 12V, with dimension 130X45X40.6mm (overall) and 108X32mm(mounting holes). Preferably, this should use 0.12-1.13A.&lt;/p&gt;&lt;p&gt;I did a quick search and it looks like there are other models that fit the description: &lt;br&gt;CRHD-030 Series on &lt;a href="http://www.camyork.com.tw/en_pdc_crhd.htm CRHD-030 Series"&gt;www.camyork.com.tw&lt;/a&gt; (still Taiwan)&lt;br&gt;DF30098V12 models on &lt;a href="http://www.sofasco.com/products/dc_cross/df30a.html"&gt;www.sofasco.com&lt;/a&gt; (Finally a site in U.S.)&lt;/p&gt;&lt;p&gt;While the connector is not the same, the voltage/amperage and dimentions match, so I guess that after changing the connector these fans can be used as replacement without problem.&lt;/p&gt;&lt;p&gt;Hopefully the fan will also be available again from Netgear site, after the stock transfer...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-8451729218796079530?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/8451729218796079530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=8451729218796079530' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8451729218796079530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8451729218796079530'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/09/cross-flow-fan-replacement-for-infrant.html' title='Cross Flow fan replacement for Infrant ReadyNAS 600'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoHTfJbZeoA/RuMwQTF2B3I/AAAAAAAAACc/yW7bm9vJvsU/s72-c/ReadyNAS.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-465381450923569717</id><published>2007-08-17T18:25:00.000-07:00</published><updated>2007-08-17T18:56:41.961-07:00</updated><title type='text'>About SourceSafe physical file names and file numbers</title><content type='html'>If you worked long enough with SourceSafe, you probably heard by now about the physical file names associated with files and projects from a SourceSafe database. The SourceSafe command line &lt;a href="http://msdn2.microsoft.com/en-us/library/ms181098(VS.80).aspx"&gt;ss physical&lt;/a&gt; can be used to display the physical file name associated with a logical file or folder from the VSS database.&lt;br /&gt;&lt;br /&gt;If you look at the the &lt;a href="http://www.ezds.com/html/ss_tools_index.html"&gt;free SourceSafe tools&lt;/a&gt; from the www.ezds.com site you'll find a &lt;a href="http://www.ezds.com/html/ssi_ssnpl.html"&gt;SSNPL&lt;/a&gt; utility whose description says that every SourceSafe file has a number, a physical file name, and a logical file name; ssnpl converts from one to the other.&lt;br /&gt;&lt;br /&gt;If you asked yourself why is the number good for, the answer is simple: when storing a reference to a physical file in another database file, VSS will use the file number instead of the physical file name, because it requires less space on disk.&lt;br /&gt;&lt;br /&gt;So, the question that remains is how does VSS generate these physical file names, and what is this file number calculated?&lt;br /&gt;&lt;br /&gt;Let's start our investigation by creating a new database ("&lt;span style="color:#660000;"&gt;mkss.exe C:\temp\vss"&lt;/span&gt;). The database is initially empty, and in the data folder there is only one file, &lt;span style="color:#660000;"&gt;data\a\aaaaaaaa. &lt;/span&gt;If you use the "&lt;span style="color:#660000;"&gt;ss.exe physical $/&lt;/span&gt;" command you'll find out that &lt;span style="color:#660000;"&gt;AAAAAAAA&lt;/span&gt; physical name is used by the database root.&lt;br /&gt;&lt;br /&gt;From this &lt;a href="http://msdn2.microsoft.com/en-us/library/ms181040(vs.80).aspx"&gt;MSDN article&lt;/a&gt; you'll find that the content of the &lt;span style="color:#660000;"&gt;data\aaaaaaaa.cnt&lt;/span&gt; file in the SourceSafe database reflects the physical name of the last file added to the database. Indeed, the initial content of this file is '&lt;span style="color:#660000;"&gt;AAAAAAAA&lt;/span&gt;' - sign that last created file or folder was the database root.&lt;br /&gt;&lt;br /&gt;Let's add a file into the database. You'll see that the content of the &lt;span style="color:#660000;"&gt;aaaaaaaa.cnt&lt;/span&gt; file is now &lt;span style="color:#660000;"&gt;BAAAAAAA&lt;/span&gt;, and SourceSafe has created a new file on disk, &lt;span style="color:#660000;"&gt;data\b\baaaaaaa&lt;/span&gt;.&lt;br /&gt;&lt;p&gt;Let's continue adding one-by-one new files into the database and each time look at the content of the aaaaaaaa.cnt to see how the new physical files are named. It's easy to see the files are named &lt;span style="color:#660000;"&gt;BAAAAAAA&lt;/span&gt;, &lt;span style="color:#660000;"&gt;CAAAAAAA&lt;/span&gt;, &lt;span style="color:#660000;"&gt;DAAAAAAA&lt;/span&gt;, etc., each file ending up in the data subfolder identified by the first letter of the filename - (&lt;span style="color:#660000;"&gt;data\b\baaaaaaa&lt;/span&gt;, &lt;span style="color:#660000;"&gt;data\c\caaaaaaa&lt;/span&gt;, &lt;span style="color:#660000;"&gt;data\d\daaaaaaa&lt;/span&gt;), etc. After the last letter of the alphabet is reached (&lt;span style="color:#660000;"&gt;ZAAAAAAA&lt;/span&gt;), the filenames wrap back, using the second letter: &lt;span style="color:#660000;"&gt;ABAAAAAA&lt;/span&gt;, &lt;span style="color:#660000;"&gt;BBAAAAAA&lt;/span&gt;, &lt;span style="color:#660000;"&gt;CBAAAAAAA&lt;/span&gt;, etc., with files being created on disk in &lt;span style="color:#660000;"&gt;data\a\abaaaaaaa&lt;/span&gt;, &lt;span style="color:#660000;"&gt;data\b\bbaaaaaa&lt;/span&gt;, &lt;span style="color:#660000;"&gt;data\c\cbaaaaaa&lt;/span&gt;, etc.&lt;br /&gt;So, the SourceSafe naming scheme and location of physical files uses a 26-way hashtable to distribute the files on disk in the a-z subfolders of the data folder.&lt;br /&gt;&lt;br /&gt;If you run the SSNPLtool on the files added into the database (&lt;span style="color:#660000;"&gt;"ssnpl.exe $/ C:\temp\vss\data", &lt;/span&gt;etc.) you'll see their numbers are incremental: 0 (the database root), then 1, 2, 3, 25, 26, 27, .... etc. for each added file.&lt;br /&gt;&lt;br /&gt;It's failry easy now to deduce how the numbering scheme works: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;each file added into the database gets next available number in sequence: 0, 1, 2, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the physical file names are composed of 8 letter characters, using letters A-Z:&lt;span style="color:#666666;"&gt; &lt;strong&gt;&lt;span style="color:#660000;"&gt;[L0][L1][L2][L3][L4][L5][L6][L7]&lt;/span&gt;&lt;/strong&gt; &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;the number associated with a file is: &lt;strong&gt;&lt;span style="color:#660000;"&gt;(L0 - 'A') + 26 * (L1 -'A') + 26^2 * (L2 - 'A') + 26^3 * (L3 - 'A') + ....&lt;/span&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Basically the physical file name is a base-26 representation of the file number, with each base-26-digit represented in A-Z range instead of 0-9A-P. &lt;/p&gt;&lt;p&gt;You should be now able to convert easily between the file numbers and physical file names. &lt;br /&gt;&lt;br /&gt;As for the mapping between physical file names and logical paths in the database, that is a bit more complex, so I'll leave it for another time... &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-465381450923569717?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/465381450923569717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=465381450923569717' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/465381450923569717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/465381450923569717'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/08/about-sourcesafe-physical-file-names.html' title='About SourceSafe physical file names and file numbers'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2228719577025216815</id><published>2007-08-16T22:00:00.000-07:00</published><updated>2008-12-11T10:07:15.140-08:00</updated><title type='text'>Terminal Service client not using saved credentials</title><content type='html'>I had this problem for quite a while now, and it finally bothered me enough to go and search for a solution...&lt;br /&gt;&lt;br /&gt;I use TS client to connect with smartcard from my home Vista machine to various machines at work through a Terminal Services Gateway. &lt;br /&gt;&lt;br /&gt;When I'm connecting to Windows 2003 or Longhorn machines I am only required to input my smartcard pin and this is enough to authenticate me. However, when connecting to my alinc02 Vista machine, things are not that smooth. On this machine, TS asks my smartcard pin, after that it fails with the following message: "Your credentials did not work. Your system administrator does not allow the use of saved credentials to log on to the remote computer because its identity is not fully verified. Please enter new credentials." &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RsUzNzF2B0I/AAAAAAAAACE/q5Kb0xrxT3M/s1600-h/login2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RsUzNzF2B0I/AAAAAAAAACE/q5Kb0xrxT3M/s320/login2.jpg" border="0" alt="'Your credentials did not work. Your system administrator does not allow the use of saved credentials to log on to the remote computer' error message" id="BLOGGER_PHOTO_ID_5099538465212991298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course, after typing my domain user and password the connection succeeded, but why was this dialog necessary?&lt;br /&gt;&lt;br /&gt;I've searched the net for the exact error message but I could not find a solution. So I ended up asking the experts...&lt;br /&gt;&lt;br /&gt;It turned out that my issue was described in &lt;a href="http://blogs.msdn.com/ts/archive/2007/07/31/problems-using-saved-credentials-with-vista-rdp-clients-and-above.aspx"&gt;this article&lt;/a&gt; from Terminal Services Team Blog, under &lt;i&gt;Scenario 1 (Problems using saved credentials with Vista RDP clients - Connecting from home to a TS server through a TS Gateway server)&lt;/i&gt;. There was also a solution proposed, too. However, since I was connecting to a Vista machine, I could not use the recommended solution (tsconfig.msc is only available on servers and I could not get to work on my Vista machine the applet copied from a Longhorn machine).&lt;br /&gt;&lt;br /&gt;Fortunately there is a solution by altering the TS settings on the client side (this solution is not as secure as using certificates on server for server authentication).&lt;br /&gt;In Vista, the Credential Security Support Provider protocol (CredSSP) adds a couple of group policy settings that are described in detail in MSDN &lt;a href="http://msdn2.microsoft.com/en-us/library/bb204773.aspx"&gt;CredSSP group policy settings&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;What I needed to do was:&lt;br /&gt;&lt;br /&gt;1. Log on to your local machine as an administrator.&lt;br /&gt;2. Start Group Policy Editor - "gpedit.msc" and accept the UAC prompt.&lt;br /&gt;3. Navigate to "Computer Configuration\Administrative Templates\System\Credentials Delegation".&lt;br /&gt;4. Double-click the "Allow Saved Credentials with NTLM-only Server Authentication" policy. &lt;br /&gt;5. Enable the policy and then click on the "Show" button to get to the server list. &lt;br /&gt;6. Add "TERMSRV/&lt;Server name&gt;" to the server list, in my case TERMSRV/alinc02.redmond.corp.microsoft.com. Using one wildcard (*) in a name is allowed. For example to enable the setting on all servers in "microsoft.com" domain you can type "TERMSRV/*.microsoft.com".&lt;br /&gt;7. Confirm the changes by clicking on the "OK" button until you return back to the main Group Policy Object Editor dialog.&lt;br /&gt;8. At a command prompt, run "gpupdate" to force the policy to be refreshed immediately on the local machine (although this changed for me after a while)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/RsU5IjF2B2I/AAAAAAAAACU/K40RVFHbypY/s1600-h/credentials.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/RsU5IjF2B2I/AAAAAAAAACU/K40RVFHbypY/s400/credentials.png" border="0" alt="Modify the 'Allow Saved Credentials with NTLM-only Server Authentication' TS Client group policy" id="BLOGGER_PHOTO_ID_5099544972088444770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With this policy enabled, the login to my alinc02 machine now requires only the smartcard pin, same as the other machines. &lt;br /&gt;&lt;br /&gt;(I was told that if I'm not an admin then I may need to set in the rdp file&lt;br /&gt;enablecredsspsupport:i:0, but this was not necessary in my case - setting it just got rid of the error message and replaced it with a regular Vista logon prompt)&lt;br /&gt;&lt;br /&gt;Since we're speaking of group policies, it worth mentioning another setting here, "Allow Delegating Default Credentials", which helps making TS connections to a remote server (in the same domain) without being prompted at all for credentials (current Windows user's credentials are used for the remote server). For more information on this see Mahadev Alladi's &lt;a href="http://blogs.msdn.com/ts/archive/2007/04/19/how-to-enable-single-sign-on-for-my-terminal-server-connections.aspx"&gt;blog article&lt;/a&gt; which inspired the settings in my case, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2228719577025216815?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2228719577025216815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2228719577025216815' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2228719577025216815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2228719577025216815'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/08/terminal-service-client-not-using-saved.html' title='Terminal Service client not using saved credentials'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoHTfJbZeoA/RsUzNzF2B0I/AAAAAAAAACE/q5Kb0xrxT3M/s72-c/login2.jpg' height='72' width='72'/><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-4584062435213504114</id><published>2007-08-01T14:30:00.000-07:00</published><updated>2007-08-01T15:28:41.643-07:00</updated><title type='text'>Visual Source Safe 2005 GDR CTP is available</title><content type='html'>Yesterday Microsoft released the Visual Source Safe 2005 GDR CTP.&lt;br /&gt;(GDR stands for "General Distribution Release" and is a single, cumulative package composed of one or more files used to address a problem in a product - much like a Service Pack. GDRs are intended for public consumption and are made available on external websites)&lt;br /&gt;&lt;br /&gt;You can read the &lt;a href="http://support.microsoft.com/kb/939808"&gt;KnowledgeBase article&lt;/a&gt; detailing the release and download the CTP from this address &lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=faf41edd-924d-449f-aefc-9c86dd499720&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=faf41edd-924d-449f-aefc-9c86dd499720&amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Richard Berg has published in his blog a better &lt;a href="http://blogs.msdn.com/richardb/archive/2007/06/06/list-of-bugs-fixed-in-sourcesafe-2005-gdr.aspx"&gt;list of the bugs fixed&lt;/a&gt; with this GDR.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-4584062435213504114?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/4584062435213504114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=4584062435213504114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4584062435213504114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4584062435213504114'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/08/visual-source-safe-2005-ctp-is.html' title='Visual Source Safe 2005 GDR CTP is available'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-4134183984946948509</id><published>2007-08-01T12:42:00.000-07:00</published><updated>2007-08-01T13:15:07.995-07:00</updated><title type='text'>Continuing education</title><content type='html'>I read today &lt;a href="http://fakesteve.blogspot.com/2007/07/freetards-in-deep-denial.html"&gt;a blog post&lt;/a&gt; about the Linux's success in China. Instructive reading, I learned today a couple of new words:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Borg&lt;/strong&gt; - an "assimilated" Windows user (or drone, with Microsoft probably viewed as Borg Collective)&lt;br /&gt;&lt;strong&gt;Maclot&lt;/strong&gt; - a Mac zealot user (refine definition on google, define:clot)&lt;br /&gt;&lt;strong&gt;Freetard&lt;/strong&gt; - a Linux user or free software zealot (refine definition on google, define:tard)&lt;br /&gt;&lt;br /&gt;In this sense I'm a Borg. Prepare to be assimilated, resistance is futile! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-4134183984946948509?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/4134183984946948509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=4134183984946948509' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4134183984946948509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4134183984946948509'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/08/continuing-education.html' title='Continuing education'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-5195937516305309047</id><published>2007-07-25T12:28:00.000-07:00</published><updated>2007-07-25T13:41:44.258-07:00</updated><title type='text'>About Visual SourceSafe 6.0 build numbers</title><content type='html'>Ok, I wrote some of this info so many times that I've decided to write a page where I could point users to read it directly...&lt;br /&gt;&lt;br /&gt;Here are the SourceSafe 6.0 versions available:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;VSS 6.0 RTM&lt;/strong&gt; - This build is what shipped back in 1998 in the Visual Studio 6.0 box and as standalone product. It's a combination of binaries from builds 8169 and 8163.&lt;br /&gt;The VSS 6.0 build numbers are 4-digits numbers equal to (8000 + number of days since beginning of 1998). E.g. 8001 is 1/1/1998 and 8169 is 6/18/1998.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;VSS 6.0 builds before 6.0b&lt;/strong&gt; - There are a couple of builds shipped between 1998 and 2001 on which I was not able to get too much information.&lt;br /&gt; 8383 - Shipped with Visual Studio 6.0 SP3 (some flavor of original 6.0)&lt;br /&gt; 8790 - SourceSafe 6.0a (my guess is that it shipped as standalone product)&lt;br /&gt; 8835 - Shipped with Visual Studio 6.0 SP4 (some flavor of 6.0a)&lt;br /&gt; 8987 - Shipped with Visual Studio 6.0 SP5 (some flavor of 6.0a)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;VSS 6.0b&lt;/strong&gt; - This build shipped in 2001, but I don't remember the occasion; my guess is that it shipped with a beta version of VS2002. It's a combination of binaries from builds 9119 and 8163.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;VSS 6.0c&lt;/strong&gt; - This build shipped in 2002 in Visual Studio .NET 2002 Enterprise box (VS7.0) and as standalone product. It's a combination of binaries from builds 9447 and 9350. Later, Microsoft included the same build into &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa718360.aspx"&gt;Visual SourceSafe 6 Service Pack 6 (VSS6SP6)&lt;/a&gt;. Users of the older builds can upgrade for free to VSS 6.0c by installing VSS6SP6 (a 5.2MB download) from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=77e4e564-01b2-461a-9fa0-03e138694c7f&amp;DisplayLang=en"&gt;this MSDN page&lt;/a&gt;. Users of VS2002 and later are strongly advised to upgrade at least to this build (older builds don't recognize all VS2002 project types, the source control integration experience is worse, there are also 4 years worth of bug fixes)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;VSS 6.0d build 9848&lt;/strong&gt; - This build shipped in 2003 in Visual Studio .NET 2003 Enterprise box (VS7.1) and as standalone product. It's the original VSS 6.0d release. 6.0d builds address various security issues with older builds, are built using VC7 instead of VC5, etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;VSS 6.0d build 31222&lt;/strong&gt; - This later VSS 6.0d build was included in Visual Studio 6.0 Service Pack 6 (VS6SP6). Do not confuse this with VSS6SP6 that contained VSS 6.0c! Users of older builds can upgrade to this VSS 6.0d build by installing VS6SP6 (a 62MB download) from &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa718364.aspx"&gt;this MSDN page&lt;/a&gt;. You can upgrade your SourceSafe install for free to this build even if you already have VSS 6.0d 9848, and even if you don't have VS6 installed on the machine. You'll notice the build numbering scheme has changed from the incremental 4-digits numbers to 5-digits numbers representing year-month-day when the build was created.&lt;br /&gt;&lt;br /&gt;Of course, there are newer VSS 6.0d builds available (as of writing this post, 61101 is the last build) that are addressing various specific problems some customers encountered. If you think you have a problem one of these builds may fix you can obtain them by calling product support (or request a QFE and have a new build created if the QFE is approved).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-5195937516305309047?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/5195937516305309047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=5195937516305309047' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5195937516305309047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/5195937516305309047'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/07/about-visual-sourcesafe-60-build.html' title='About Visual SourceSafe 6.0 build numbers'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-8253981267488245503</id><published>2007-07-12T02:24:00.000-07:00</published><updated>2008-12-11T10:07:15.433-08:00</updated><title type='text'>Really Right Stuff (RRS) clamp for Bogen/Manfrotto 484RC2 on a Velbon ULTRA-MAXi tripod</title><content type='html'>I just found my travel tripod in the closet and I remembered the hard time I had last year searching the Internet for information on replacing the &lt;a href="http://www.velbon-tripod.com/ultra_maxi.htm"&gt;Velbon ULTRA-MAXi&lt;/a&gt;'s default head with a more sturdy ballhead.&lt;br /&gt;Now that I have a blog I guess it's the right time to post here my solution...&lt;br /&gt;&lt;br /&gt;I decided to replace the head with a &lt;a href="http://www.bhphotovideo.com/c/product/272757-REG/Bogen_Manfrotto_484RC2_484RC2_Mini_Ballhead_Quick.html"&gt;Bogen/Manfrotto 484RC2 ballhead&lt;/a&gt; and mount a RRS clamp on it.&lt;br /&gt;&lt;br /&gt;The original 3-way pan-head of Velbon ULTRA-MAXi comes off easily by twisting it; it reveals a 1/4" screw. The 484RC2 head has a 3/8"-16 hole in its bottom, and to mount it on the tripod base you'll need a &lt;a href="http://www.bhphotovideo.com/c/product/91852-REG/Gitzo_G1141_G1141_Reducer_Bushing_7_5mm.html"&gt;Reducer Bushing 7.5mm (3/8"-16 to 1/4"-20)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now onto the RRS clamp... At the time I bought my clamp, the &lt;a href="http://reallyrightstuff.com/clamps/which_clamp.html"&gt;Really Right Stuff&lt;/a&gt; page listed B2 LR II or B2-Pro clamps suitable for Bogen/Manfrotto 484RC2, which was wrong (those clamps have a threaded hole to be installed on a ballhead with exposed 3/8"-16 threaded post, and they will not work on the 484RC2 ballhead, whose post has a hole after removing the original clamp and screw). I see that now the page was corrected to list B2 AS II and B2 Pro II. Anyway, I got the &lt;a href="http://www.reallyrightstuff.com/rrs/Customkititems.asp?kc=B2%2DAS%2DII%2DM6&amp;eq="&gt;B2 AS II&lt;/a&gt; RRS clamp.&lt;br /&gt;&lt;br /&gt;To screw the clamp on 484RC2 you'll need a M6 screw (RRS kindly provided me both with M6 and 1/4" screws). The screw that came with the 484RC2 head and the original Bogen clamp is also an M6 screw and fits the B2 AS II, too.&lt;br /&gt;&lt;br /&gt;The clamp will not fit perfectly by default on the 484RC2's post because the post has two anti-twist tabs which are wider than the recessed "cross" on the back of the clamp (see the picture below).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RpX2FdXid7I/AAAAAAAAABs/Tooh8oCuxEI/s1600-h/IMG_5840_1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5086241927827978162" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RpX2FdXid7I/AAAAAAAAABs/Tooh8oCuxEI/s320/IMG_5840_1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The clamp will stay better if you rotate it 90 degrees.&lt;br /&gt;For a perfect fit the tabs on 484RC2 have to be cut off completely or adjusted by thinning them with a small file. It's not hard to do it; it took me 10-15 minutes to thin the tabs and now the clamp fits perfectly; the original ballhead clamp continues to work fine, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-8253981267488245503?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/8253981267488245503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=8253981267488245503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8253981267488245503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/8253981267488245503'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/07/really-right-stuff-rrs-clamp-for.html' title='Really Right Stuff (RRS) clamp for Bogen/Manfrotto 484RC2 on a Velbon ULTRA-MAXi tripod'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZoHTfJbZeoA/RpX2FdXid7I/AAAAAAAAABs/Tooh8oCuxEI/s72-c/IMG_5840_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2429934643359374502</id><published>2007-06-12T13:58:00.001-07:00</published><updated>2008-12-11T10:07:15.935-08:00</updated><title type='text'>Apple releases Safari web browser for Windows</title><content type='html'>Apple's Safari 3 beta web browser is now available for Windows. You can download it from &lt;a href="http://www.apple.com/safari/"&gt;http://www.apple.com/safari/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I downloaded yeterday the beta version of the browser, and at a first look I was not impressed. Feature-wise I haven't seen anything that other browsers like Firefox, IE7, Netscape or Opera don't already have: tab browsing, phishing filter, rss reader, etc.&lt;br /&gt;&lt;br /&gt;In fact, comparing with IE7, Safari was worse:&lt;ul&gt;&lt;li&gt;I got a first crash in the browser in less than 3 minutes of using it&lt;/li&gt;&lt;li&gt;Font smooting on LCD monitors was making text worse to read, at least to my eyes&lt;/li&gt;&lt;li&gt;Resizing the windows or zooming, caused elements in page to overlap, making the text impossible to read&lt;/li&gt;&lt;li&gt;Sometimes the scripting was not working&lt;/li&gt;&lt;/ul&gt;See for comparison the rendering of the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms950396.aspx"&gt;MSDN scripting page&lt;/a&gt; where the left tree is not rendered at all, etc. I guess the Apple developpers have to fix a couple more issues before realeasing the final version of the browser...&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;a href="http://1.bp.blogspot.com/_ZoHTfJbZeoA/Rm8KaO8feGI/AAAAAAAAABc/pLjhEaaga3s/s1600-h/Safari.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand" alt="Safari rendering the MSDN Scripting page" src="http://1.bp.blogspot.com/_ZoHTfJbZeoA/Rm8KaO8feGI/AAAAAAAAABc/pLjhEaaga3s/s400/Safari.png" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="400"&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rm8Kj-8feHI/AAAAAAAAABk/hqvG0V4Tbxc/s1600-h/ie.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand" alt="IE7 rendering the MSDN Scripting page" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rm8Kj-8feHI/AAAAAAAAABk/hqvG0V4Tbxc/s400/ie.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;And the issues don't stop here. There are reported &lt;a href="http://www.theregister.co.uk/2007/06/12/safar_crashing_experience/"&gt;crashing issues&lt;/a&gt; with non-English web pages, and a couple of &lt;a href="http://www.theregister.co.uk/2007/06/12/safari_security_bugs/"&gt;security holes&lt;/a&gt;, too. For daily browsing I wouldn't be in hurry to switch to Safari just because it comes from Apple.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So then why is this release a good news?&lt;br /&gt;&lt;br /&gt;Well, Safari seems to be the first browser on Windows platform supporting color-managed web browsing for photo viewing. If you don't know what I'm talking about, download the beta and view this &lt;a href="http://www.gballard.net/psd/go_live_page_profile/embeddedJPEGprofiles.html"&gt;Web Browser Color Management Tutorial&lt;/a&gt; with both Safari and IE. With a color-managed enabled browser, the color of the photo in the right column won't change when hovering the mouse cursor over it or when clicking the picture. Safari will display correctly the pictures.&lt;br /&gt;&lt;br /&gt;If you are viewing photos on web that have embedded color profiles (e.g. created with Photoshop), you might consider doing these tasks with Safari, at least until IE or the other browsers will support color management.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2429934643359374502?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2429934643359374502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2429934643359374502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2429934643359374502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2429934643359374502'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/06/apple-releases-safari-web-browser-for.html' title='Apple releases Safari web browser for Windows'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ZoHTfJbZeoA/Rm8KaO8feGI/AAAAAAAAABc/pLjhEaaga3s/s72-c/Safari.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-2268705444446776048</id><published>2007-05-22T15:19:00.000-07:00</published><updated>2007-05-22T15:20:15.004-07:00</updated><title type='text'>Blogger.com feeds showing in Outlook 12 with 12/31/2006 dates</title><content type='html'>I've noticed that for a while all the posts on blogs hosted by blogger.com appear in Outlook 12 with incorrect dates, all equal to 12/31/2006.&lt;br /&gt;&lt;br /&gt;It looks like Outlook has a problem parsing the ATOM XML feeds from Blogger. Fortunately, there is a workaround (until the bug is fixed): resubscribe to the blog using an RSS 2.0 feed.&lt;br /&gt;&lt;br /&gt;If you didn't know about this, all site feeds on blogger are published by default in Atom 1.0 format. However, if you add &lt;strong&gt;?alt=rss&lt;/strong&gt; to the end of any site feed URL, you can get the same feed in RSS 2.0 format.&lt;br /&gt;&lt;br /&gt;Instead of using the atom subscription feed like &lt;a href="http://alinconstantin.blogspot.com/atom.xml"&gt;&lt;span style="font-size:85%;"&gt;http://alinconstantin.blogspot.com/atom.xml&lt;/span&gt;&lt;/a&gt; , you can (re)subscribe to a blogger feed using an Uri like &lt;a href="http://alinconstantin.blogspot.com/atom.xml?alt=rss"&gt;&lt;span style="font-size:85%;"&gt;http://alinconstantin.blogspot.com/atom.xml?alt=rss&lt;/span&gt;&lt;/a&gt; or &lt;a href="http://alinconstantin.blogspot.com/feeds/posts/default?alt=rss"&gt;&lt;span style="font-size:85%;"&gt;http://alinconstantin.blogspot.com/feeds/posts/default?alt=rss&lt;/span&gt;&lt;/a&gt; and the posts will appear in Outlook 12 with correct dates....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-2268705444446776048?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/2268705444446776048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=2268705444446776048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2268705444446776048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/2268705444446776048'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/05/bloggercom-feeds-showing-in-outlook-12.html' title='Blogger.com feeds showing in Outlook 12 with 12/31/2006 dates'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-187361998079732056</id><published>2007-05-19T23:47:00.000-07:00</published><updated>2008-12-11T10:07:16.444-08:00</updated><title type='text'>Cannot Print or Print Preview from IE7 on Vista</title><content type='html'>Whenever I tried to print or Print Preview with Internet Explorer 7 on Vista I was getting an error message like this:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"Cannot find 'file:///C:/Temp/Low/GAG0N40P.htm'. Make sure the path or Internet address is correct."&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rk_xUkiQhUI/AAAAAAAAABM/qnmYT-CUiT4/s1600-h/printerr.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5066533441522140482" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rk_xUkiQhUI/AAAAAAAAABM/qnmYT-CUiT4/s400/printerr.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;followed by another script error message talking about an error in like 2069 in preview.dlg:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rk_xdkiQhVI/AAAAAAAAABU/xw_Wm7XYvzk/s1600-h/scripterr.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5066533596140963154" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rk_xdkiQhVI/AAAAAAAAABU/xw_Wm7XYvzk/s400/scripterr.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Of course, this happens because I changed the TEMP folder on my machine to C:\Temp. &lt;p&gt;When I try to print or print preview, IE7 creates a subfolder C:\Temp\Low, but this inherits the security settings from the parent folder, and the print fails when IE is not run elevated.&lt;br /&gt;&lt;br /&gt;The solution is to open a Command Prompt in elevated mode (Run as Administrator), and in that window to run the following command&lt;/p&gt;&lt;p&gt;&lt;strong&gt;        icacls C:\Temp\Low /setintegritylevel (OI)(CI)Low&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If everything is ok you should get an output like this&lt;/p&gt;&lt;p&gt;         processed file: C:\Temp\Low&lt;/p&gt;&lt;p&gt;         Successfully processed 1 files; Failed processing 0 files&lt;/p&gt;&lt;p&gt;and after that the Print Preview should work fine.&lt;/p&gt;&lt;p&gt;(Make sure you recreate the Low folder before running the command in case you accidentally deleted the folder)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-187361998079732056?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/187361998079732056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=187361998079732056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/187361998079732056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/187361998079732056'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/05/cannot-print-or-print-preview-from-ie7.html' title='Cannot Print or Print Preview from IE7 on Vista'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZoHTfJbZeoA/Rk_xUkiQhUI/AAAAAAAAABM/qnmYT-CUiT4/s72-c/printerr.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-7653357789828640125</id><published>2007-05-01T22:42:00.000-07:00</published><updated>2007-05-01T22:48:01.174-07:00</updated><title type='text'>SourceSafe Internet configuration guide</title><content type='html'>Today I've updated &lt;a href="http://alinconstantin.members.winisp.net"&gt;my webpage on WinISP&lt;/a&gt; and I've duplicated there the source control-related articles for the unfortunate case when my website is down.&lt;br /&gt;&lt;br /&gt;You'll find the guide for configuring Visual SourceSafe 2005 for Internet usage at:&lt;span style="font-size:85%;"&gt;&lt;ul&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;li&gt;&lt;a href="http://www.alinconstantin.net/webdocs/scc/VSS_Internet.htm"&gt;http://www.alinconstantin.net/webdocs/scc/VSS_Internet.htm &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;li&gt;&lt;a href="http://alinconstantin.members.winisp.net/webdocs/scc/VSS_Internet.htm"&gt;http://alinconstantin.members.winisp.net/webdocs/scc/VSS_Internet.htm&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-7653357789828640125?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/7653357789828640125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=7653357789828640125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7653357789828640125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7653357789828640125'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/05/sourcesafe-internet-configuration-guide.html' title='SourceSafe Internet configuration guide'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-7946484864101264793</id><published>2007-04-13T23:53:00.000-07:00</published><updated>2008-12-11T10:07:17.616-08:00</updated><title type='text'>How to open a HTC3600 to install the battery and SIM</title><content type='html'>I got yesterday a new toy, a HTC 3600 smartphone, and I've hit the first problem with it when I tried to remove the cover and install the battery and SIM card.&lt;br /&gt;At a glance I couldn't figure it out; I read the manuals but I still couldn't understand how to open the HTC3600.&lt;br /&gt;&lt;br /&gt;Here is where I think the problem is:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;the HTC3600 quick guide only make a reference about "sliding" the cover, but doesn't tell you in which direction&lt;br /&gt;&lt;li&gt;"sliding" the cover doesn't seem like an option because it looks like the camera in the back won't allow such motion&lt;br /&gt;&lt;li&gt;the cover could be really tight on some units (at least until you open it a couple of times and it gets loose) and you're afraid of using the force and risk breaking a 600$ phone&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Sounds a bit stupid, doesn't it? Well, I've search the net and so I've discovered I'm not a complete idiot, as many other people had the same issue...&lt;br /&gt;&lt;br /&gt;Eventually, one post pointed me in the right direction. Now that I know how, it's easy to open it (it even opened by itself when I dropped it on the carpet :-))&lt;br /&gt;&lt;br /&gt;Anyway, since many people looking for a solution asked for pictures, I decided to post this blog note.&lt;br /&gt;&lt;br /&gt;The manual is right, the cover does slide in the direction indicated by the arrow.&lt;br /&gt;&lt;br&gt;&lt;a href="http://2.bp.blogspot.com/_ZoHTfJbZeoA/RiB94YD2u1I/AAAAAAAAAAU/znA1a_TJRJY/s1600-h/Open1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5053177189394463570" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="To open HTC3600 phone, slide the cover in this direction" src="http://2.bp.blogspot.com/_ZoHTfJbZeoA/RiB94YD2u1I/AAAAAAAAAAU/znA1a_TJRJY/s320/Open1.jpg" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br&gt;However, it will only move for 3-4 mm in this direction, and then it will stop.&lt;br&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RiB-voD2u3I/AAAAAAAAAAk/I-xbUWLxEiU/s1600-h/Open2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RiB-voD2u3I/AAAAAAAAAAk/I-xbUWLxEiU/s320/Open2.jpg" border="0" alt="HTC 3600 cover slides just a bit, then it can be removed" id="BLOGGER_PHOTO_ID_5053178138582236018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;After that, the cover can be lifted and set aside. Notice the disk around the camera lens is just a cover (not the real lens), and slide together with the HPC3600 cover.&lt;br&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RiB_HID2u4I/AAAAAAAAAAs/uLykm7p7dY8/s1600-h/Open3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_ZoHTfJbZeoA/RiB_HID2u4I/AAAAAAAAAAs/uLykm7p7dY8/s320/Open3.jpg" border="0" alt="HTC3600 and cover" id="BLOGGER_PHOTO_ID_5053178542309161858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;To open the phone you may need to use a bit of force. Here is how I think you can open the phone easier:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;remove the stylus from the phone (the stylus doesn't slide, and it will make it harder for you to grab just the cover and slide it)&lt;br /&gt;&lt;li&gt;take the phone in your left hand as indicated in the picture below (with Call/Cancel buttons towards the palm, and left wrist)&lt;br&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RiCBFoD2u5I/AAAAAAAAAA0/vtZbX3l4GXw/s1600-h/Open4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_ZoHTfJbZeoA/RiCBFoD2u5I/AAAAAAAAAA0/vtZbX3l4GXw/s320/Open4.jpg" border="0" alt="Hold the HTC 3600 phone with left hand to open it" id="BLOGGER_PHOTO_ID_5053180715562613650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;use the right hand index and thumb fingers on the upper/bottom and apply presure towards the right side while holding the phone in left palm&lt;br&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_ZoHTfJbZeoA/RiCBhYD2u6I/AAAAAAAAAA8/CetPQin8kN8/s1600-h/Open5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_ZoHTfJbZeoA/RiCBhYD2u6I/AAAAAAAAAA8/CetPQin8kN8/s320/Open5.jpg" border="0" alt="Slide HTC3600 cover towards right to remove it" id="BLOGGER_PHOTO_ID_5053181192303983522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;the cover should slide 3mm with a click, then stop&lt;br /&gt;&lt;li&gt;you can now lift the cover&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-7946484864101264793?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/7946484864101264793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=7946484864101264793' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7946484864101264793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7946484864101264793'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/04/how-to-open-htc3600-to-install-battery.html' title='How to open a HTC3600 to install the battery and SIM'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ZoHTfJbZeoA/RiB94YD2u1I/AAAAAAAAAAU/znA1a_TJRJY/s72-c/Open1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-4182332524947165454</id><published>2007-03-22T11:09:00.000-07:00</published><updated>2007-03-22T12:09:33.088-07:00</updated><title type='text'>.old and .new files used by Visual SourceSafe</title><content type='html'>I was asked today what are the .old files SourceSafe may leave in the VSS database.&lt;br /&gt;&lt;br /&gt;I had no idea what these files were and initially I mistook them for the .org files created by SourceSafe during the merge process. (If you're interested what the .org and .mrg files are you can find an explanation in this MSDN page &lt;a href="http://msdn2.microsoft.com/en-us/library/ek8hk7e2(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ek8hk7e2(VS.80).aspx&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;I then realized the org/mrg files are created locally, on the client machines, and they have the same name with the sources files involved with the merge, while the .old files were reportedly created in the VSS database. And so I realized my mistake and started to search again...&lt;br /&gt;&lt;br /&gt;It turned out that SourceSafe does create .old files in the VSS database.&lt;br /&gt;&lt;br /&gt;Analyze.exe may create such files when it is run with -f flag (fix mode). When Analyze -f finds a corrupt file, it places a copy of that file in the backup directory, then rewrites the fixed file in the appropriate data\&lt;a-&gt; directory. In some cases, after the original rewrite, another rewrite is necessary. Analyze does not overwrite the copy in the backup directory, but creates a file with the .old extension in the same directory as the original file. Under normal operations, this file should be deleted by the Analyze process. However, in some cases it is not. This KB article describes the problem &lt;a href="http://support.microsoft.com/kb/167258"&gt;http://support.microsoft.com/kb/167258&lt;/a&gt;&lt;br /&gt;I believe this is the main cause why orphaned .old files may exist in the VSS database. The old files are likely safe to delete in this case (after making sure that fixes made by analyze are correct).&lt;br /&gt;&lt;br /&gt;DdConv.exe tool may also create .old files (when converting a VSS4 database format to VSS5 database and it finds out duplicate file entries or mismatches in the parent projects, etc). I guess this was most common back in 1997 but now it is probably less common to see .old files created because of ddconv (databases created by VSS6 should be already in VSS5 or VSS6 format; databases created by VSS2005 are in VSS6 format). Again, investigate the warnings displayed by ddconv, verify the database after conversion is what you expect to be, and it's probably safe to delete the .old files.&lt;br /&gt;&lt;br /&gt;And I found out another case when SourceSafe uses .old files (in fact .new files may be created, too). During a Rollback operation, SourceSafe will create a .new file and will write in it only the entries that have a timestamp older than the date you rollback to. Then, it will rename the current physical file into a .old file, will rename the .new file into the current physical file and will delete the .old file. I suspect it's more likely to see .new files remaining on disk in this case if there is an error during the rollback process (while creating the .new files) - it should be safe to delete these orphaned .new files. I can see .old files remaining on disk in this case if VSS crashes or is killed during this rename process, or if another user writes a new physical file (VSS is not transactional!) causing the rename of .new -&gt; physical to fail. If you have an .old file but not a physical file without extension you should probably rename the .old file back (discard the .old extension) and run analyze on the database. Otherwise just look in the file's history and see if you need/want to redo the rollback, delete the .old file and redo the rollback if necessary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-4182332524947165454?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/4182332524947165454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=4182332524947165454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4182332524947165454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/4182332524947165454'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/03/old-and-new-files-used-by-visual.html' title='.old and .new files used by Visual SourceSafe'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-7860668975080466682</id><published>2007-03-19T02:22:00.000-07:00</published><updated>2007-08-05T23:56:02.970-07:00</updated><title type='text'>How to backup SourceSafe database</title><content type='html'>&lt;strong&gt;Why back up the SourceSafe databases?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;People think that by adding their sources to a VSS database they are "safe" from losing their sources. They are wrong, and here are a couple of examples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Often, the SourceSafe database is stored on the same machine where the project sources are. A hard drive failure will make you lose both the project sources and the VSS database! People discover this only when they try to restore the sources from the VSS database and realize this is gone, too. This is more of a problem for individual developers because in a team you can recover at least latest sources from a teammate's harddrive; however, you lose the source history in that case. Having a database backup on a different machine/tape/dvd will solve this problem&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;SourceSafe is not transactional. A crash of VSS application in the middle of a write operation in the database could cause database corruption. Analyze tool provided with VSS can fix some errors, but sometimes analyze.exe can't fix the corruption (and sometimes even analyze.exe can cause more corruption). Having a database backup can save you a call to product support and can restore the database to a known good state.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;How often should I back up the SourceSafe database? &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Well, that depends on you, but I'd recommend a daily backup. Thus, if something really bad happens you can restore the database to the previous day's backup and only lose a day's work...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Deciding the backup strategy&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Before writing a backup script you have to decide on a backup strategy. First, decide what exactly are you trying to backup: &lt;/p&gt;&lt;p&gt;1) You can choose to back up only the latest version of the sources. You'll find on the Internet a lot of scripts that claim to do "SourceSafe backup"; they simply do a GetLatest in a folder. Personally I don't consider this a real backup solution: the reason you add the sources in a VSS database in the first place instead of creating daily archives is to have history of changes; this method does not preserve history. In case you're interested in latest sources only you can probably use directly &lt;a href="http://msdn2.microsoft.com/en-us/library/byx8tbka(VS.80).aspx"&gt;Shadow Folders&lt;/a&gt; feature of SourceSafe instead of such "backup" process...&lt;/p&gt;&lt;p&gt;2) You can choose to backup only a portion of the database containing a project of interest. SourceSafe comes with two utilities, &lt;a href="http://msdn2.microsoft.com/en-us/library/t9d14fh1(VS.80).aspx"&gt;SSArc.exe&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/b4ch74ts(VS.80).aspx"&gt;SSRestor.exe&lt;/a&gt; (Archive and Restore) that can help with this task. For their usage please see the MSDN documentation.&lt;br /&gt;SSArc/SSRestor use for the backup file a binary proprietary format, and the archive size cannot be larger than 2GB (4GB in VSS2005). VSS6 does not warn when this limit is reached, causing silent corruption of the archive. Because of this limit I wouldn't recommend this method for backing up large amounts of data. A possible advantage of this method is that you can specify an option to archive tool to delete the old versions of the files that you just archived - this is nice to use to reduce the database size in case you don't care about files history. While you can specify the root of the database as the project to be backed up, when restoring such archive the files will end up in a subfolder. If you're interested in backing up the database root I'd strongly recommend using the 3rd method.&lt;br /&gt;&lt;br /&gt;3) You can choose to backup the whole database. The VSS database is just a collection of files stored on your local disk or on a network share, so any file backup utility or directory replication service/program should work just fine.&lt;br /&gt;The "poor man's solution" is to use "xcopy /s" command to simply copy the whole database in the backup target location.&lt;br /&gt;However, as a single developer I prefer using robocopy.exe (Robust File Copy utility). For older operating systems this utility is distributed with &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;DisplayLang=en"&gt;Windows Resource Kitt&lt;/a&gt;; if you have Vista or later you already have this utility installed. robocopy will only copy newer/different files so it will save bandwidth when copying the database on a network machine. Robocopy will also retry the operation (in case you're backing up to a network location and the network goes down), and supports a /Mir parameter useful if you're using the same target location every day (it will also delete unnecessary files that would otherwise be orphaned).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Running Analyze.exe during backup&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A good practice for a SourceSafe database administrator is to run regularly Analyze.exe (SourceSafe Analyze Tool) on the database to indentify and fix possible corruption. The sooner corruption is identified the easier will be to fix it; waiting more could only cause more things to become corrupted, too. Thus, it is a good practice to run analyze.exe at the same time you backup the database.&lt;br /&gt;There is one catch though: sometimes analyze.exe may cause corruption, too, or may fix things but not in the way you'd expect. While analyze.exe creates backups of the files it touches, it is often easier to simply have the database copy before running analyze (so you can easily revert to it in case something bad happens with analyze).&lt;br /&gt;I'd recommend that in your nightly script you first back up the VSS database location, then run analyze on the database.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Things to take care of before running backup/analyze&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Before running backup or analyze you'd want to make sure no user accesses the VSS database. Letting users access and modifying the database during backup could cause the backup copy to be only half way updated. Letting users access and modify the database during analyze could cause analyze to fail, detect false-positive errors or fix errors that don't really exist.&lt;br /&gt;&lt;br /&gt;You can prevent VSS users from opening &lt;strong&gt;new&lt;/strong&gt; connections to the VSS database by locking the database. From a batch script this can be done easily by creating a 0-byte file data\loggedin\admin.lck in the database. (Don't forget to unlock the database by deleting this file when you're done with the backup).&lt;br /&gt;&lt;br /&gt;However, closing existing connections to the database may be a tricky task. The best time to run backup/analyze is during the night, when the chance of someone having connections and writing in the VSS database is small. While you should remind your colleagues to close VS and VSS before leaving home, it is likely sooner or later someone will still leave applications opened with connections to the database.&lt;br /&gt;&lt;br /&gt;If you have a shared VSS database you should worry about remote connections. Sourcesafe is a distributed client application, and remote machines will access the database network share directly. There is no good way of closing these connections. You can for instance delete and recreate the database network share (using net share /delete command), but then you'll have hard time restoring the user permissions on the share. A better way may be to close directly the shared opened files (use the "net file" command, parse its output and extract the file IDs then use "net file /close" for the IDs of the file in the VSS database). Of course, disconnecting opened files or file share can cause database corruption, too (again the need for running analyze frequently on the database). A small mitigation is disconnecting the files at night, when they are likely opened in read-mode rather than write, and when the chance of causing corruption is smaller.&lt;br /&gt;&lt;br /&gt;And then you have to worry about processes running on the machine hosting the VSS database. These can be your own processes (e.g. VisualStudio, VSSExplorer, SSAdmin, SS.exe, etc) or other user's processes (if the machine is a Terminal Services server). Here you can choose to simply kill the applications (devenv.exe, ssexp.exe, ssadmin.exe, ss.exe, etc) using tools like pskill.exe from Sysinternal's/Microsoft's &lt;a href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/PsTools.mspx"&gt;PsTools suite&lt;/a&gt;. Again, killing processes may introduce database corruption (or with VSS2005 you may see warning messages about possible corruption); try as much as possible to close manually the applications instead of killing them.&lt;br /&gt;&lt;br /&gt;If you're running SourceSafe 2005 you may also have services on the database machine that keep connections to the database. The VSS Lan Service should be stopped before the backup (net stop ssservice) and restarted after backup is complete (net start ssservice). Also, if your database is enabled for Internet access, the IIS host process and VSS service may access the database so you should stop and restart IIS (net stop w3svc / net start w3svc) after locking the VSS database (such that further incoming VSS Internet connections will be denied).&lt;/p&gt;&lt;p&gt;Stopping and restarting IIS host process may be required even for SourceSafe 6.0 server installations if you're using VSS-controlled FrontPage web projects. On the server, FrontPage uses ssapi.dll to open connections to the local SourceSafe database, therefore you must restart the web server to force FrontPage to close his connections.&lt;/p&gt;&lt;p&gt;Similar considerations apply for 3rd party services and applications that provide remote/Internet access to the VSS database.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;When you're done with the backup&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Don't forget to restart any services you may have stopped during the backup. Also, don't forget to unlock the database by deleting the ssadmin.lck file.&lt;br /&gt;You may also want to parse the Analyze's output and mail you a summary report, so you can review the next day any fixes analyze may have done to the database.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Backup scripts&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Sorry, I won't provide you here with any backup scripts. Just search the Internet for "SourceSafe backup" and you'll find a couple of free scripts. Note however that not all these scripts will take care of all the situations described above, so you may need to tweak and improve them yourself to better suit your needs.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-7860668975080466682?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/7860668975080466682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=7860668975080466682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7860668975080466682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7860668975080466682'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/03/how-to-backup-sourcesafe-database.html' title='How to backup SourceSafe database'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7306978581108695483.post-7506132962450631067</id><published>2007-03-10T11:01:00.000-08:00</published><updated>2007-03-10T11:36:23.424-08:00</updated><title type='text'>No sound in Remote Desktop (Terminal Services) sessions to Windows 2003</title><content type='html'>I've hit this problem yesterday, and since it took me an hour to solve it I thought I should post the solution here...&lt;br /&gt;&lt;br /&gt;Basically, I was connecting from work using Terminal Services / Remote Desktop to my home machine, a Windows 2003 Server, and I was trying to listen music.&lt;br /&gt;Unfortunately, Windows Media Player was giving me the following error:&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;"Windows Media Player cannot play the file because there is a problem with your sound device. There might not be a sound device installed on your computer, it might be in use by another program, or it might not be functioning properly."&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I knew a couple months ago I was listening to my music on the home machine, so why isn't it working now?&lt;br /&gt;&lt;br /&gt;In the help page I found the error code C00D11BA: "Cannot play the file" but the description there was not very helpful. I checked all the drivers, all appeared to be installed correctlyand working. Since I recently switched my network from a workgroup to a domain configuration, I thought there might be a domain policy preventing audio playing in TS sessions. But I found no such setting. I then thought client's configuration might be the culprit (I only had Vista clients), especially because connecting to other servers at work and trying to play sound files produced the same error. But no, that wasn't it.&lt;br /&gt;I spent an hour searching the Internet, browsing articles that talked about enabling/disabling sound in client RDP settings, reinstalling DirectX on server, etc., etc.&lt;br /&gt;&lt;br /&gt;Eventually I came up upon the right solution ...&lt;br /&gt;&lt;br /&gt;Windows 2003 Server allows disabling certain resources in Remote Desktop sessions, and guess what? The sound is by default disabled for Windows Terminal Services sessions...&lt;br /&gt;&lt;br /&gt;So, here is how to re-enable audio in TS sessions on Win2003:&lt;br /&gt;- Launch "Control Panel" (Start Menu / Settings / Control Panel)&lt;br /&gt;- In "Administrative Tools", launch "Terminal Services Configuration"&lt;br /&gt;- In the mmc applet, select the Connections node, select the RDP-Tcp session settings in the right pane, right click it and open the Properties page.&lt;br /&gt;- Click the "Client Settings" tab&lt;br /&gt;- In the bottom of this dialog where the "Disable the following:" section is, uncheck the "Audio mapping" which is checked by default.&lt;br /&gt;- Ok the Properties dialog.&lt;br /&gt;&lt;br /&gt;If you are connected already to a TS session, you'll have to LogOut first (no, Disconnect won't be enough!), then LogIn again to the server, and voila! Now your audio files should play fine.&lt;br /&gt;&lt;br /&gt;It's obvious now that you know about this hidden setting, isn't it? ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7306978581108695483-7506132962450631067?l=alinconstantin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alinconstantin.blogspot.com/feeds/7506132962450631067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7306978581108695483&amp;postID=7506132962450631067' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7506132962450631067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7306978581108695483/posts/default/7506132962450631067'/><link rel='alternate' type='text/html' href='http://alinconstantin.blogspot.com/2007/03/no-sound-in-remote-desktop-terminal.html' title='No sound in Remote Desktop (Terminal Services) sessions to Windows 2003'/><author><name>Alin Constantin</name><uri>http://www.blogger.com/profile/16976709451979541487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/_ZoHTfJbZeoA/SZRl7qsp2rI/AAAAAAAAAJk/_tpCi9A5mTw/S220/Alin.Constantin.jpg'/></author><thr:total>8</thr:total></entry></feed>
