<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Bob's Mental Moshpit</title>
	<atom:link href="http://bobhood.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bobhood.wordpress.com</link>
	<description>"Most people would rather die than think; in fact, they do so." - Bertrand Russell</description>
	<lastBuildDate>Wed, 18 Jan 2012 19:35:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='bobhood.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Bob's Mental Moshpit</title>
		<link>http://bobhood.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://bobhood.wordpress.com/osd.xml" title="Bob&#039;s Mental Moshpit" />
	<atom:link rel='hub' href='http://bobhood.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Tips For Debugging a Windows Shell Extension</title>
		<link>http://bobhood.wordpress.com/2011/04/10/tips-for-debugging-a-windows-shell-extension/</link>
		<comments>http://bobhood.wordpress.com/2011/04/10/tips-for-debugging-a-windows-shell-extension/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 03:14:09 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Shell Extension]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=263</guid>
		<description><![CDATA[This is just a brief article to note the debugging work flow I used while recently developing the Associated Windows Shell Extension. Windows Shell Extensions can be a bit tricky to debug, especially when you use the live Windows Explorer to test your work, as I do. The work flow I use is not very [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=263&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is just a brief article to note the debugging work flow I used while recently developing the <a href="http://bobhood.wordpress.com/2011/02/10/associated-a-windows-shell-extension/">Associated Windows Shell Extension</a>.  Windows Shell Extensions can be a bit tricky to debug, especially when you use the live Windows Explorer to test your work, as I do.  The work flow I use is not very complicated, and doesn&#8217;t require hacking the Windows Registry (as some techniques do).  There are other work flows that run separate Explorer processes, and do not require elevated privileges, but this is the work flow I use.</p>
<p>It should be noted that some actions documented herein will likely require elevated privileges.  I am always Administrator, so do not typically run into difficulties.  If you do not operate as Administrator, you may need to do so in order to successfully accomplish tasks listed in this article.</p>
<h2>[ Keep 'Em Separated ]</h2>
<p>While developing a Shell Extension, I like to set up a folder that will contain all the files that will ultimately be included in the distributed product.  <em>This is never the Visual Studio project&#8217;s debug or release folder</em>.  Aside from having issues compiling if you have a Shell Extension active in Explorer, you run the risk of having the files deleted by a project &#8220;Clean&#8221; or just by hand-deleting those folders.</p>
<p>You can place the folder to contain these files anywhere you like, but I like to create one under the target folder (e.g., &#8220;C:\Program Files (x86)\&#8230;&#8221;).  This lets me see how the code will behave in its live folder as I develop it.</p>
<p>As I&#8217;m developing, I manually copy the build product (the Shell Extension DLL) into the target folder and install it into the running Explorer process from there.  This, of course, requires command-line actions, but having a UN*X background, I almost always have a DOS window open all the time.</p>
<p>In any case, you should not use your project debug or release folder as your working folders.  You will often find that you will want the in-development Shell Extension active and usable in Explorer while you are also tweaking and re-compiling the project.  If you have the Shell Extension found in the project&#8217;s debug or release folders installed and active in Explore, your build process will be unable to overwrite it, and you will find yourself performing addition uninstalls each time you want to build again.</p>
<h2>[ Adding Your Extension ]</h2>
<p>Once you&#8217;ve built your working Shell Extension DLL, you&#8217;ll need to register it into the Explorer process.  Registration is performed using the <code>regsvr32</code> command-line utility.</p>
<p><font color="#00FFFF"><code>regsvr32 /s Associated_x64.dll</code></font></p>
<p>This call registers the Shell Extension with Explorer.  The &#8220;/s&#8221; option merely suppresses the GUI confirmation dialog.  It may be useful to call <code>regsvr32</code> without this switch just to confirm that your Extension registered successfully.</p>
<p>It should be noted that this call does not immediately load the Extension DLL into Explorer.  Not until the Extension is used does the DLL actually get loaded and locked into Explorer&#8217;s process space.  For example, a Context Menu Shell Extension would be loaded only when a right-click context menu is activated in Explorer.  So, until the DLL is actually loaded for use by Explorer, it can be freely removed by another call to <code>regsvr32</code> which will unregister it:</p>
<p><font color="#00FFFF"><code>regsvr32 /s /u Associated_x64.dll</code></font></p>
<p>If your Extension DLL is locked into Explorer&#8217;s process space, however, this call to unregister will not completely detach the shared library.  It will remain locked in Explorer&#8217;s process space.  Explorer must be restarted to completely release the shared library.  Usually, this is done using a reboot; you&#8217;ll often see program installers do this when you uninstall applications that have Extensions locked in Explorer&#8217;s process space.  With elevated privileges, however, you needn&#8217;t be that drastic.</p>
<h2>[ Debugging the Bugger ]</h2>
<p>Of course, you&#8217;ll only be able to actually debug an active Extension if you have a debug build capable of loading into Explorer.  This means the shared library can find all of its dependent files, either in it&#8217;s working folder, or somewhere along the PATH.  How this is configured is left as an exercise for the reader, but your Extension will fail to load into Explorer if any of its dependent files are not locatable by one of these methods.</p>
<p>After a successful registration of your debug build with Explorer, you&#8217;ll want to start the process of debugging it.  This is accomplished by loading up the Extension project in Visual Studio (it probably already is), and setting break points within the code where you wish the Extension to stop during its execution.  With the debug environment prepared, debugging begins when you attach your Visual Studio debugging session to the running Explorer process.  This is done by selecting &#8220;Attach to Process&#8230;&#8221; from the Debug menu:</p>
<p><img src="http://10.38.1.136/DebuggingShellExtension/vs_attachtoprocess.png" alt="Debug-&gt;Attach to Process..." /></p>
<p>This opens a dialog that lists all the current processes, sorted alphabetically.  Locate the &#8220;explorer.exe&#8221; process, and select &#8220;Attach&#8221;:</p>
<p><img src="http://10.38.1.136/DebuggingShellExtension/vs_explorer.png" alt="The Explorer process entry" /></p>
<p>Your debug session is now active.  You may now interact with your Extension in the active Explorer, and your breakpoints will hit just as though you were running the Extension as a stand-alone process.</p>
<p>When you are finished, you can simply detach from the running process (terminating your debug session will also work, but may kill the host process.)</p>
<h2>[ Reset ]</h2>
<p>As I&#8217;ve mentioned, once your Extension is loaded into Explorer&#8217;s process space, Explorer itself must be terminated in order to release the shared library.  Rebooting Windows accomplishes this, but this sort of solution is horribly disruptive to the development work flow.  Instead, you can manually terminate and restart Explorer, and in between, unregister your Shell Extension.</p>
<p>I use the following simple batch file to accomplish all these steps in one call:</p>
<p><font color="#00FFFF"><code>@echo off<br />
taskkill /F /IM explorer.exe<br />
regsvr32 /s /u %1<br />
start C:\Windows\explorer.exe</code></font></p>
<p>The steps simply terminate the running Explorer process, unregister the indicated Shell Extension file, and then restart Explorer.  Of course, you will need elevated privileges in order to kill Explorer, so if you do not run with these by default, you may need to modify certain calls (like &#8220;taskkill&#8221;) with the &#8220;runas&#8221; option in order to request elevated privileges.</p>
<p>Once the shared library has been removed from Explorer, you are free to overwrite the Extension file with your updated build, and then re-register to star the fun all over again.  <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/263/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=263&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2011/04/10/tips-for-debugging-a-windows-shell-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://10.38.1.136/DebuggingShellExtension/vs_attachtoprocess.png" medium="image">
			<media:title type="html">Debug-&#62;Attach to Process...</media:title>
		</media:content>

		<media:content url="http://10.38.1.136/DebuggingShellExtension/vs_explorer.png" medium="image">
			<media:title type="html">The Explorer process entry</media:title>
		</media:content>
	</item>
		<item>
		<title>Associated: A Windows Shell Extension</title>
		<link>http://bobhood.wordpress.com/2011/02/10/associated-a-windows-shell-extension/</link>
		<comments>http://bobhood.wordpress.com/2011/02/10/associated-a-windows-shell-extension/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 15:35:59 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[MRU]]></category>
		<category><![CDATA[Shell Extension]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=190</guid>
		<description><![CDATA[Necessity is indeed the mother of invention. Most things you see around you in life are there because somebody one day had a need that the current crop of available tools could not satisfy. Seeing the need, a tool maker then created (and eventually refined) a tool so everybody could get the job done. Of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=190&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lucidgears.com/Associated/Associated.png" alt="Associated Logo" /></p>
<p>Necessity is indeed the mother of invention.  Most things you see around you in life are there because somebody one day had a need that the current crop of available tools could not satisfy.  Seeing the need, a tool maker then created (and eventually refined) a tool so everybody could get the job done.  Of course, one of the really cool things about being a tool maker is that you never have to wait for somebody else to solve your problem.</p>
<p>My &#8220;necessity&#8221; began with VMware.  I tend to use this software often, and I have many associated virtual machines that I maintain.  From its GUI, the software provides a menu (called &#8220;Windows&#8221;) that lists all the recent VMs that you have run.  However, the menu seems to be limited to about 10 entries.  In addition, in the version I&#8217;m using, when you hit that limit, instead of dropping some unused entry to make room, it seems to just forget the VM the next time you run the application instead of adding it to the menu.  These two shortcomings alone are enough to drive me crazy, and so came the inspiration for <font color="#00CCCC">Associated</font>.</p>
<h2>[ An Improved MRU List ]</h2>
<p>Such menus as VMware&#8217;s &#8220;Windows&#8221; are called MRUs, which stands for &#8220;Most Recently Used&#8221;.  While they are dynamic, adding entries implicitly, they can lack some nicer &#8212; or even some sane &#8212; features.  So, I decided to create an MRU that could be applied to any program that I have installed, not just one that would address the shortcomings in VMware&#8217;s interface.  To do this, I have created a Windows Shell Extension.  A Shell Extension is designed to extend the functionality of the Windows Shell (i.e., Explorer).  By utilizing this, I can create MRU functionality that can be provided to any application.</p>
<p>As the name implies, <font color="#00CCCC">Associated</font> is a Windows Shell Extension that adds a context menu entry that will maintain a list of &#8220;associated&#8221; elements for any given application.  In terms of VMware, this would be a list of associated virtual machines much like that provided by the &#8220;Windows&#8221; menu within the application.  However, as a Shell Extension, I don&#8217;t even need to run the application before I select a VM to run from a list.  The same can be applied to other applications.</p>
<p>The drawback to this approach, however, is that you must explicitly add entries to your MRU for each application (whereas, within the context of the running application, such features can be implicit).  I&#8217;ve tried to make this task as easy as possible, and have added some value to the <font color="#00CCCC">Associated</font> MRU that most application-based MRUs don&#8217;t offer.</p>
<h2>[ Install The Extension ]</h2>
<p>Download the installer for the extension that matches your Windows flavor (32-bit or 64-bit):</p>
<ul>
<li><a href="http://www.lucidgears.com/Associated/Associated_Win32_installer.exe">Associated_Win32_installer.exe</a> (1.0)</li>
<li><a href="http://www.lucidgears.com/Associated/Associated_Win64_installer.exe">Associated_Win64_installer.exe</a> (1.0)</li>
</ul>
<p><font color="#00CCCC">Associated</font> requires at least Windows Vista.</p>
<p>After you&#8217;ve installed the extension, your Windows context menu will have a new entry when you right-click on an executable file (or a link object that represents one):</p>
<p><img src="http://www.lucidgears.com/Associated/image1.png" alt="New Context Menu Entry" /></p>
<p>This entry is your new <font color="#00CCCC">Associated</font> MRU menu.  It will present a varying list of associated documents, depending upon the file/link context selected.  Of course, immediately after installation, you&#8217;ll have yet to add any associations to the database, so your <font color="#00CCCC">Associated</font> sub-menu will contain only common actions.</p>
<p><img src="http://www.lucidgears.com/Associated/image2.png" alt="Common Menu Actions" /></p>
<p>The most important of these common actions is the &#8220;Settings&#8221; action.</p>
<h2>[ Filling Your Database ]</h2>
<p>You can open the settings for <font color="#00CCCC">Associated</font> by selecting it from the context menu (or by running it from the Start Menu entry for Associated).  When opened for the first time, it will be pretty sparse:</p>
<p><img src="http://www.lucidgears.com/Associated/image3.png" alt="The Settings Window" /></p>
<p>Everything in the settings dialog is managed from context menus.  Right-clicking on the blank area of the list will give you the option to add a new application to the database:</p>
<p><img src="http://www.lucidgears.com/Associated/image4.png" alt="The Settings Context Menu" /></p>
<p>You can then use the file-selection dialog to navigate to the application you wish to add, and then select it.  As an example, I use the &#8220;vmrun.exe&#8221; application provided with VMware to launch my virtual machines, so I locate that and select it:</p>
<p><img src="http://www.lucidgears.com/Associated/image5.png" alt="Selecting An Application" /></p>
<p>This adds the first entry to the <font color="#00CCCC">Associated</font> database:</p>
<p><img src="http://www.lucidgears.com/Associated/image6.png" alt="Our First Application" /></p>
<p>Alternatively, you can quickly add new entries to the database from the context menu.  If you select an application that is not already registered, you are given the option to do so by the <font color="#00CCCC">Associated</font> context menu:</p>
<p><img src="http://www.lucidgears.com/Associated/image6a.png" alt="Registering From The Menu" /></p>
<p>This will open the Settings dialog with the application already added and ready to be configured.</p>
<p>By itself, the application entry will do us little good.  We must now add a list of associated files to this application.  However, before doing so, we might want to edit default settings for this entry.</p>
<h2>[ Adding Some Defaults ]</h2>
<p>Right-clicking on the application entry provides a context menu where &#8220;Edit Defaults&#8221; can be selected:</p>
<p><img src="http://www.lucidgears.com/Associated/image7.png" alt="Editing Defaults" /></p>
<p>Default settings allow us to apply values to each associated entry as we add them, to cut down on the amount of typing needed.  In the case of my virtual machines, I want to select a folder where they reside (they needn&#8217;t all reside there, but in my case, they do), so that each time I add a new association for &#8220;vmrun.exe&#8221;, it will start me off in that folder.</p>
<p>Additionally, I can add common &#8220;Options&#8221; that will be filled in for each association (described in more detail later):</p>
<p><img src="http://www.lucidgears.com/Associated/image8.png" alt="Editing Defaults" /></p>
<p>With some default values established, we can start adding associations for this application.</p>
<h2>[ Adding Associations ]</h2>
<p>Select &#8220;Add Association&#8221; from the application context menu to start selecting associations for your new entry.</p>
<p><img src="http://www.lucidgears.com/Associated/image9.png" alt="Adding An Association" /></p>
<p>This will give you a file-selection dialog box.  If you set a path in the defaults for this application entry, then the dialog box should start you in that location (otherwise, it will place you back in the last location where you selected a file).  For my example, I navigate to the folder that contains a VM that I want to add as an association, and select it:</p>
<p><img src="http://www.lucidgears.com/Associated/image10.png" alt="Selecting An Association" /></p>
<p>This then opens a settings dialog (identical to the &#8220;Defaults&#8221; for the application) where you can edit information about the association.  If you have defaults set for &#8220;Name&#8221; and/or &#8220;Options&#8221;, those fields will be filled in automatically.  If not, then the base name of the file will be used as the name.</p>
<p><img src="http://www.lucidgears.com/Associated/image11.png" alt="Association Settings" /></p>
<p>When you are happy with the settings, press &#8220;Ok&#8221; to add the association to your application entry:</p>
<p><img src="http://www.lucidgears.com/Associated/image12.png" alt="A Completed Association" /></p>
<p>Once you&#8217;ve pressed &#8220;Ok&#8221; on the Settings dialog, the database will be updated, and you will now have an association available to your application when you right-click on it within the Shell:</p>
<p><img src="http://www.lucidgears.com/Associated/image13.png" alt="Testing Your Association" /></p>
<h2>[ Popularity ]</h2>
<p>When your MRU list only contains two or three entries, those entries are all quickly accessible, no matter how often you select them.  However, as an MRU list gets rather large, it can be handy to have those entries that are used more frequently than the rest filter to the top so they are the quickest to access and launch.  This mechanism is known as &#8220;popularity sorting,&#8221; or &#8220;popularity filtering&#8221;.</p>
<p><font color="#00CCCC">Associated</font> provides this type of quick-selection mechanism.  For example, I&#8217;ve completely populated my list of associated VMs, giving me a list of 16 entries:</p>
<p><img src="http://www.lucidgears.com/Associated/image14.png" alt="A Populated List" /></p>
<p>Notice in the image above that most entries have a popularity rating of zero.  There are four entries, however, that have popularity values greater than zero.  This represents the number of times those entries have been selected for launching from the Shell context menu.  With popularity enabled on the application, context menu entries are presented in descending popularity order.</p>
<p>For example, this same list (shown above in the order they were added) would appear like this on the context menu when popularity is enabled:</p>
<p><img src="http://www.lucidgears.com/Associated/image15.png" alt="Popularity List" /></p>
<p>You can disable popularity sorting, and the order presented on the context menu will exactly match the order in the settings dialog.  In addition, you can reset an individual entry&#8217;s popularity rating to zero, or you can reset to zero the entire popularity rating of an application&#8217;s association list.</p>
<p>Of course, there are also times when you might not want popularity sorting on your list.  For example, Visual Studio uses popularity sorting for its &#8220;Recent Projects&#8221; list (available on the &#8220;Start Page&#8221;).  This would be a case where I would <i>not</i> want popularity sorting enabled, because I like to keep related solutions grouped together.  Since this is a behavior I cannot control from within Visual Studio, I can of course control it from the <font color="#00CCCC">Associated</font> context menu:</p>
<p><img src="http://www.lucidgears.com/Associated/image15a.png" alt="Popularity Turned Off" /></p>
<p>So, no matter how many times I select entries from this menu, they will always remain in this order on the context menu for Visual Studio.  Take that, Microsoft!</p>
<h2>[ Constructing Options ]</h2>
<p>As shown in the &#8220;Edit Defaults&#8221; image, the &#8220;Options&#8221; entry can have some odd-looking tokens.  These letter tokens represent specific elements of specific values, and are used as placeholders for these values.  Each letter token is signaled with a dollar sight (&#8220;$&#8221;) and is surrounded by a pair of braces (&#8220;{}&#8221;).</p>
<p>Each letter represents an element of a path, where lower-case letters refer to the path to the associated file, and upper-case letters refer to the path to the application file.  Here is the complete list of substitution tokens:</p>
<ul>
<li>${f}&#8230;The entire associated path (including file and extension)</li>
<li>${F}&#8230;The entire application path (including file and extension)</li>
<li>${p}&#8230;The path to the associated file</li>
<li>${P}&#8230;The path to the application file</li>
<li>${b}&#8230;The base associated file name</li>
<li>${B}&#8230;The base application file name</li>
<li>${x}&#8230;The associated file extension</li>
<li>${X}&#8230;The application file extension</li>
</ul>
<p>In the defaults for &#8220;vmrun.exe&#8221;, I entered text into the &#8220;Options&#8221; field that looked like:</p>
<table>
<tr>
<td><code>start "${f}"</code></td>
</tr>
</table>
<p>The literal text &#8220;start&#8221; in this example above is an application-defined value; &#8220;vmrun.exe&#8221; requires and expects it to be the first value it encounters if we are asking it to run a VM.  Following that, I&#8217;ve added a substitution token that will provide me with the full path to the association file.  Note that I&#8217;ve enclosed this token in quotation marks in case the path contains things like spaces that would cause the shell to choke.</p>
<p>When editing individual association values, the &#8220;Test&#8221; button to the right of the &#8220;Options&#8221; field is enabled.  Pressing this button will cause the value in the &#8220;Options&#8221; field to be interpreted (i.e., tokens will be substituted from currently defined values), and it will display the results so you can ensure that you&#8217;ve properly formatted the values.  For example:</p>
<p><img src="http://www.lucidgears.com/Associated/image16.png" alt="Testing Options" /></p>
<p>In most cases, if you need substitution, you&#8217;ll be using just the ${f} token surrounded by quotation marks in your &#8220;Options&#8221;.  However, if you leave the &#8220;Options&#8221; field empty, or there are no substitution tokens detected in the value entered into this field, <font color="#00CCCC">Associated</font> will automatically append the full path to the associated file to the end of the &#8220;Options&#8221; value (or <em>as</em> the &#8220;Options&#8221; value if it is empty).</p>
<h2>[ The Rest of the Settings ]</h2>
<p>Let&#8217;s quickly look at the remainder of the options in &#8220;Settings.&#8221;</p>
<p>At the top level, right-clicking on an empty area of the list will give you a context menu with these entries:</p>
<p><img src="http://www.lucidgears.com/Associated/image17.png" alt="List Options" /></p>
<p>&#8220;Add Application&#8221; adds a new application entry to the list.  Application entries must be unique; duplicates are not allowed.</p>
<p>&#8220;Paste&#8221; will appear on this top-level context menu if you have copied an application to the internal clipboard.  See below for more detail about copying and pasting.</p>
<p>&#8220;Clear List&#8221; will clear the entire list of your defined applications (and associations).  Be careful with this:  It cannot be undone once you press &#8220;Ok&#8221; on the dialog.</p>
<p>For applications, you&#8217;ll get this context menu:</p>
<p><img src="http://www.lucidgears.com/Associated/image18.png" alt="Application Options" /></p>
<p>&#8220;Add Association&#8221; has been covered.  You use this to add new file associations to your application.</p>
<p>&#8220;Update&#8221; is used to change the application to which the entry points.  This allows you to switch the application without having to rebuild your list of associations.</p>
<p>&#8220;Edit Defaults&#8221; has been covered.  These defaults help you when adding associations.</p>
<p>&#8220;Reset Popularity Rating&#8221; will reset the popularity rating values to zero for all currently defined associations of this application.</p>
<p>&#8220;Elevated Privileges&#8221; should be enabled if the application requires elevated privileges to run.  This executes the process with a &#8220;runas&#8221; verb.  If enabled, you may be prompted to enter Administrator credentials in order to successfully launch the application.</p>
<p>&#8220;Launch Minimized&#8221; will launch the application so that it minimizes to the task bar.  Turn this off to launch in a normal window.</p>
<p>&#8220;Enable Popularity&#8221; turns popularity sorting on or off for the selected application.  Popularity counting continues even if popularity sorting is turned off.</p>
<p>&#8220;Copy&#8221; and &#8220;Paste&#8221; provide clipboard-like functions for the application.  Copying the application makes it available for pasting to a new application entry.  Pasting an application will require you to select a new application for the entry (no two entries can point at the same application) and all associated file entries will be copied to the new entry.</p>
<p>&#8220;Delete&#8221; will delete the application entry, along with all associated files.</p>
<p>For associations, this context menu is available:</p>
<p><img src="http://www.lucidgears.com/Associated/image19.png" alt="Association Options" /></p>
<p>&#8220;Edit&#8221; allows you to edit the settings for this individual association.</p>
<p>&#8220;Reset Popularity Rating&#8221; is identical to the action for the application, except it will only apply to this association.</p>
<p>&#8220;Copy&#8221; and &#8220;Paste&#8221; are also identical to the application, except they only work with the selected association.  Pasting the association will add it to the current application context (whether an application is explicitly selected, or an association within an application is selected).  Since associations can be duplicated, you can quickly duplicate an association entry for an application by copying and pasting within the same application context.  You can also hold down the Ctrl key while dragging an association to make a copy of it.</p>
<p>&#8220;Delete&#8221; will delete the individual association.</p>
<h2>[ Legal ]</h2>
<p><font color="#00CCCC">Associated</font> uses the <a href="http://qt.nokia.com">Qt Toolkit</a>, which is Copyright © 2011 Nokia<br />
<font color="#00CCCC">Associated</font> uses icons that are Copyright © 2010-2011 <a href="http://remitrom73.deviantart.com/">*Remitrom73</a></p>
<p>All else is Copyright © 2011 Bob Hood</p>
<p>Simply put:  <font color="#00CCCC">Associated</font> is free software.  You may use it in any environment you wish, whether commercial or personal, as long as you do so at your own risk.  I accept no responsibility, real or imagined, for any damages caused by your usage of my software.</p>
<p>Enjoy.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/190/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=190&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2011/02/10/associated-a-windows-shell-extension/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/Associated.png" medium="image">
			<media:title type="html">Associated Logo</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image1.png" medium="image">
			<media:title type="html">New Context Menu Entry</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image2.png" medium="image">
			<media:title type="html">Common Menu Actions</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image3.png" medium="image">
			<media:title type="html">The Settings Window</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image4.png" medium="image">
			<media:title type="html">The Settings Context Menu</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image5.png" medium="image">
			<media:title type="html">Selecting An Application</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image6.png" medium="image">
			<media:title type="html">Our First Application</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image6a.png" medium="image">
			<media:title type="html">Registering From The Menu</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image7.png" medium="image">
			<media:title type="html">Editing Defaults</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image8.png" medium="image">
			<media:title type="html">Editing Defaults</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image9.png" medium="image">
			<media:title type="html">Adding An Association</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image10.png" medium="image">
			<media:title type="html">Selecting An Association</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image11.png" medium="image">
			<media:title type="html">Association Settings</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image12.png" medium="image">
			<media:title type="html">A Completed Association</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image13.png" medium="image">
			<media:title type="html">Testing Your Association</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image14.png" medium="image">
			<media:title type="html">A Populated List</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image15.png" medium="image">
			<media:title type="html">Popularity List</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image15a.png" medium="image">
			<media:title type="html">Popularity Turned Off</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image16.png" medium="image">
			<media:title type="html">Testing Options</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image17.png" medium="image">
			<media:title type="html">List Options</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image18.png" medium="image">
			<media:title type="html">Application Options</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/Associated/image19.png" medium="image">
			<media:title type="html">Association Options</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows 7 and the User account</title>
		<link>http://bobhood.wordpress.com/2011/01/10/windows-7-and-the-user-account/</link>
		<comments>http://bobhood.wordpress.com/2011/01/10/windows-7-and-the-user-account/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 22:47:31 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[software installation]]></category>
		<category><![CDATA[User account]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=181</guid>
		<description><![CDATA[Typically, when I set up a new Windows machine for somebody, I simply allow the default account to remain as an Administrator (when I do my personal machines, I actually take complete control, activating the &#8220;Administrator&#8221; account and using that for myself). When there is a one-to-one mapping of person-to-account on a machine, then there [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=181&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Typically, when I set up a new Windows machine for somebody, I simply allow the default account to remain as an Administrator (when I do my personal machines, I actually take <em>complete</em> control, activating the &#8220;Administrator&#8221; account and using that for myself).  When there is a one-to-one mapping of person-to-account on a machine, then there are typically no issues with things like installing software.  The person who uses the machine has complete access to do whatever they need or wish (good or bad).</p>
<p>Recently, I set up a new machine with Windows 7 designed explicitly for use by multiple people.  I was tired of my son installing something that ended up on my wife&#8217;s desktop, cluttering it to the point where she couldn&#8217;t find her software.  Of course, this is the result of everybody being an Administrator&#8211;installed software gets installed for &#8220;All Users&#8221; by default.  I wanted each user to have the ability to install their own software, separate from anybody else who uses the machine, and only those things that I installed from the actual &#8220;Administrator&#8221; account to be available to everybody (e.g., printers).</p>
<p>Well, Microsoft&#8217;s notion of account control is overly simplified out of the box.  There are only two options given to you when you set an account type:  <strong>Administrator</strong> or <strong>Standard</strong> user.  &#8220;Administrator&#8221; is, of course, the ruler of the machine.  There&#8217;s pretty much nothing an Administrator cannot do.  Of course, it&#8217;s a bad account-type choice when you&#8217;re letting non-technical people use the machine.</p>
<p>The other option is &#8220;Standard.&#8221;  This would seem like the correct choice for the typical user, someone to whom you could give some control over their own environment without allowing them to affect or damage anybody else&#8217;s.  However, after much frustration, I discovered this not to be the case.  A &#8220;Standard&#8221; user is intended only to be able to <em><strong>use</strong></em> installed software, not to be able to customize their own environment by <em>installing</em> software.  Not acceptable: I needed something with a bit more granularity.</p>
<p>As usual, the functionality I needed was buried a bit deeper.  This is what I did to solve this particular problem.  If there&#8217;s a better solution that I&#8217;ve missed, I&#8217;d love to hear about it.</p>
<h3>[ Microsoft Management Console ]</h3>
<p>To configure the permissions in greater detail, you need to access the Microsoft Management Console.  You get to this by running the command &#8220;mmc&#8221; from the Start menu in Windows 7.  This will open the Management Console window.  For me, it looked like this on the initial run:</p>
<p><img src="http://www.lucidgears.com/MMC/mmc1.png" alt="Initial MMC window" /></p>
<p>In this state, there isn&#8217;t much you can do in terms of permissions.  From the File menu, select &#8220;Add/Remove Snap-in&#8230;&#8221; (or press Ctrl-M).  This brings up another window where the permission settings that will need to be manipulated can be selected and added to the Console.  From the Snap-in window, select the &#8220;Local Users and Groups&#8221; option, and &#8220;Add&#8221; it.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc2.png" alt="Add/Remove Snap-in" /></p>
<p>This will open another window so you can &#8220;Choose Target Machine.&#8221;  It should have the &#8220;Local Computer&#8221; option selected by default.  If not, then make sure that option is selected, press the &#8220;Finish&#8221; button, and then press &#8220;Ok&#8221;.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc3.png" alt="Choosing the Target Machine" /></p>
<p>Back at the MMC window, you should now have both &#8220;Users&#8221; and &#8220;Groups&#8221; options available that enumerate the accounts and groups that currently reside on your machine.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc4.png" alt="Users and Groups added" /></p>
<p>Selecting the &#8220;Groups&#8221; tab, you&#8217;ll then want to double-click on the &#8220;Power Users&#8221; option in the list on the right.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc5.png" alt="Selecting Power Users" /></p>
<p>This will open the &#8220;Power Users Properties&#8221; window.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc6.png" alt="Power Users Properties" /></p>
<p>From this window, press the &#8220;Add&#8221; button.  This will open yet another window for adding users to the &#8220;Power Users&#8221; group.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc7.png" alt="Selecing Users To Add" /></p>
<p>Hold on.  We need to go yet deeper into the oubliette by pressing the &#8220;Advanced&#8221; button on this panel.  This will open the last (I promise) window we&#8217;ll need to access, the &#8220;Select Users&#8221; window.  On this window, you&#8217;ll want to press the &#8220;Find Now&#8221; button.  This button will cause the list at the bottom of the panel to be filled will all the current Users known to your system.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc8.png" alt="Finding All Users" /></p>
<p>As pictured, when the list is populated, you&#8217;ll want to find the &#8220;Everyone&#8221; entry, select it, and then press &#8220;Ok.&#8221;  This will take you back to the &#8220;Select Users&#8221; window, with the object name field filled in with the &#8220;Everyone&#8221; user.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc9.png" alt="Everyone Filled In" /></p>
<p>Again, press &#8220;Ok&#8221; to return to the &#8220;Power User Properties&#8221; panel, which will then have the &#8220;Everyone&#8221; entry in its &#8220;Members&#8221; list.  From here, you can press a final &#8220;Ok&#8221; to return to the Management Console window with your settings applied.</p>
<p>At this point, you have just added &#8220;Everyone&#8221; on the machine to the &#8220;Power Users&#8221; account.  This gives them some of the abilities of the Administrator, and in particular, the elevated ability to install software.  This does not, however, provide them with the capacity to install software into the privileged directories (e.g., &#8220;C:\Program Files (x86)&#8221;, and &#8220;C:\Program Files&#8221; under 64-bit Windows).  This is intended behavior in this particular tutorial.  I wanted the users to have Administrator-like installation privileges, but don&#8217;t want them cluttering up common areas and other users&#8217; desktops.  When installing software, each non-Administrator user will need to select an area within which they have read-write permissions (either somewhere under &#8220;C:\Users\&lt;login&gt;&#8221;, or on some secondary partition, if one is available).  This will keep their software modifications only within the domain of their account.</p>
<p>Finally, you will need to save the changes you&#8217;ve made to the Management Console session.  If you do not do this explicitly from the File menu, closing the window will prompt you to save.</p>
<p><img src="http://www.lucidgears.com/MMC/mmc10.png" alt="Saving Your Settings" /></p>
<p>You will need to save this console session in order for your changes to be applied to all the other accounts.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=181&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2011/01/10/windows-7-and-the-user-account/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc1.png" medium="image">
			<media:title type="html">Initial MMC window</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc2.png" medium="image">
			<media:title type="html">Add/Remove Snap-in</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc3.png" medium="image">
			<media:title type="html">Choosing the Target Machine</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc4.png" medium="image">
			<media:title type="html">Users and Groups added</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc5.png" medium="image">
			<media:title type="html">Selecting Power Users</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc6.png" medium="image">
			<media:title type="html">Power Users Properties</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc7.png" medium="image">
			<media:title type="html">Selecing Users To Add</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc8.png" medium="image">
			<media:title type="html">Finding All Users</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc9.png" medium="image">
			<media:title type="html">Everyone Filled In</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/MMC/mmc10.png" medium="image">
			<media:title type="html">Saving Your Settings</media:title>
		</media:content>
	</item>
		<item>
		<title>Fixing your XBox 360&#8242;s RRoD</title>
		<link>http://bobhood.wordpress.com/2010/12/30/fixing-your-xbox-360s-rrod/</link>
		<comments>http://bobhood.wordpress.com/2010/12/30/fixing-your-xbox-360s-rrod/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 23:15:53 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[xbox 360 rrod]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=155</guid>
		<description><![CDATA[I know there are a plethora of YouTube videos and blog posts out there about fixing the &#8220;Red Ring of Death&#8221; on your XBox 360. Fixing the RRoD turned into a multi-million dollar industry, truth be told. Well, I&#8217;m going to show you how to fix yours using about $4 worth of parts so you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=155&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I know there are a plethora of YouTube videos and blog posts out there about fixing the &#8220;Red Ring of Death&#8221; on your XBox 360.  Fixing the RRoD turned into a multi-million dollar industry, truth be told.  Well, I&#8217;m going to show you how to fix yours using about $4 worth of parts so you can get yours up and running without having to spend any more just to find the right path.  To date, I have successfully fixed two machines using these steps, and as I write this article, I am in the process of correcting a third (pictured).  So far, my approach, cherry picked from several sources, has proven successful &#8212; and here it is for you to use, free.</p>
<p>First, I&#8217;m not going to cover taking your machine apart and putting it back together &#8212; there are plenty of easily found tutorials out there that cover that aspect.  Nor will I be covering the removal of the X clamps &#8212; again, there are plenty of tutorials out there that provide you with that information.  I&#8217;m only going to cover the work required on the motherboard, and the final step of super-heating after the machine has been re-assembled.  As a pre-cursor, however, in case the tutorials don&#8217;t cover it, you will need a Torx screwdriver set in order to fully disassemble the console.  I personally use <a href="http://www.homedepot.com/buy/tools-hardware/hand-tools/husky/6-piece-hex-screwdriver-set-114546.html">this one from Husky</a>.</p>
<p>Second, if your machine is still under warranty, <strong>DO NOT REPAIR IT YOURSELF</strong>!  You can get your Red Ring of Death fixed for free by Microsoft, and keep your machine&#8217;s warranty intact.  Contact your Microsoft dealer, or log into your XBox Live account to get the information.  If you proceed with opening the case on your XBox 360 while it is under warranty, <strong>you will void that warranty</strong>.</p>
<p>Please fully read through this entire article before you begin anything, and be aware that I assume no responsibility for any damages or voided warranties that you may cause as a result of following my instructions.  You proceed with any instructions contained herein at your own risk.</p>
<h2>[ Preparing The Motherboard ]</h2>
<p>If you have disassembled your case, removed your motherboard, and removed the heat sinks (having first removed the X clamps), you should be looking at something like this:</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00611.png" alt="XBox 360 motherboard" /></p>
<p>In addition, you&#8217;ll have your two heat sinks set aside, like this:</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00618.png" alt="XBox 360 heat sinks" /></p>
<p>You&#8217;ll note that the clamp connectors have been removed (arrows).  These will be discarded (along with the X clamps), so be sure to remove them from your heat sinks.</p>
<p>Next, you&#8217;ll need to clean both the chips (GPU and CPU) and the heat sinks.  In the photo above, you can see that I&#8217;ve already done the cleaning on the heat sinks.  The chips also need to be cleaned as much as possible.  I&#8217;d recommend you concentrate your cleaning attentions mostly on the top of the chips.  You want them to look as clean and polished as possible.  There will likely be excess thermal paste around the outside of the chip (this gets squeezed out by the heat sink), and you should try to get as much as you can, but <strong>DO NOT ATTEMPT TO FORCE</strong> the excess paste off the chip board.  There is additional circuitry surrounding the chips, and you don&#8217;t want to risk damaging them by trying to remove all the paste.</p>
<p>Here&#8217;s a shot of the cleaned chips, ready for re-assembly:</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00619.png" alt="Cleaned GPU" /></p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00620.png" alt="Cleaned CPU" /></p>
<p>When I clean chips that have had prior thermal paste applied, I first use a strip of hard plastic (cut from something like an old credit or ID card) and scrape as much of the excess paste from the top of the chip, and from the surrounding area (being careful not to use too much force), as I can get.  <strong>Do not use anything metal to scrape thermal paste</strong>.  Hard plastic is the best thing to use as it will not scratch the top of the chip, nor do damage to the surrounding circuitry unless you&#8217;re really trying to.</p>
<p>I then use a Q-Tip and apply a citrus-based remover (like <a href="http://www.google.com/products/catalog?q=GooGone&amp;oe=utf-8&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a&amp;um=1&amp;ie=UTF-8&amp;cid=8761233094339033141&amp;ei=Zd4cTZ3tLoqusAPCqNybCg&amp;sa=X&amp;oi=product_catalog_result&amp;ct=image&amp;resnum=6&amp;ved=0CEkQ8gIwBQ#">GOO Gone</a>) to one end of the tip.  This I gently rub around the top of the chip, being extra careful not to let any of it get off the top and onto the surrounding area.  Letting a citrus-based removal agent interact with the circuit board is probably a really bad idea.  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Once I have dislodged/dissolved as much paste as I can, I turn the Q-Tip around and use the dry end to pick up as much from the top of the chip as possible.  I won&#8217;t get everything, but I want to make sure I don&#8217;t have a lake of GOO remover sitting on top of the chip.  I then get a cotton ball and put some Isopropyl (&#8220;rubbing&#8221;) alcohol onto it, the purer, the better (I use 91%, but there are higher ones out there).  Using the cotton ball, I rub the top of the chip until I have removed all the remaining solvent and paste.  I then let it all dry until there&#8217;s no wetness left anywhere.</p>
<h2>[ Modifying The Case ]</h2>
<p>Because we are going to be replacing the fasteners for the heat sinks, we&#8217;re going to need a little more space in the place where the motherboard sits.  The holes where the X clamps were secured to the metal case will need to be drilled out so that the heads of the fasteners (see the <strong>Re-assembly</strong> section below) will rest comfortably without applying any pressure to, or warping, the motherboard.</p>
<p>Using a 23/64&#8243; metal drill bit (a 3/8&#8243; would probably also work, but would make slightly larger holes that might overlap in the center cuts; you can see in the photo below how close those holes are with the 23/64&#8243; bit), I drill out the 8 screw holes that are used to anchor the motherboard (via the X clamps) to the metal case.  I typically place the case on top of a wood 2&#215;4, aligning the holes to make sure they are over the wood, and then drill each.  After all 8 are done, I use cable cutters and/or a Dremel to reduce any sharp burs or edges.</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00622.png" alt="Modified case" /></p>
<h2>[ Re-assembly ]</h2>
<p>I use the following supplies to re-assemble the heat sinks onto the motherboard.  I get all of the hardware from Home Depot for a total cost of around $4US:</p>
<ul>
<li>8x #10-32 x 1/2&#8243; machine screws (round head)
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00613.png" alt="Machine screws" /></li>
<li>8x 5/32&#8243; neoprene rubber washers (since they only come in packages of 4, you&#8217;ll need two packages)
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00615.png" alt="Neoprene washers" /></li>
<li>12x 5/32&#8243; metal washers
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00616.png" alt="Metal washers" /></li>
<li>Thermal paste (any good-quality will do)</li>
</ul>
<p>Apply thermal paste to each of the three chips.  Place a dab on each, about the size of a grain of rice, sized appropriately for the chip (e.g., on the smaller GPU chip, place a smaller grain of rice than the larger chips).  This is only one of two schools of thought on applying thermal compound.  The other advocates spreading the paste as thinly across the top of the chip as you can before applying the heat sink.  I used to do this; I don&#8217;t anymore.  It is far better to let the heat sink spread the paste and fill in any gaps than to have you do it by hand and try (impossibly) to get the paste thin and level.</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00627.png" alt="Applying thermal paste" /></p>
<p>This next step is a bit tricky, and it has taken me a bit to get it down.  You&#8217;ll need to align the heat sink on one side of the motherboard while threading the bolts through the motherboard and into the holes on the heat sink, all while keeping the surface of the heat sink as much away from the thermal paste as possible.  I tend to situate the motherboard on its edge, holding the heat sink approximately in place with one hand on the chip side while just starting the threading of the fasteners with the other from the bottom.  Once each of the fasteners has been started, the heat sink will be properly aligned, and you can then press it down onto the chip, spreading the thermal paste.</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00625.png" alt="Aligning the heat sinks" /></p>
<p>While holding the heat sink in place, gradually thread each fastener a little further into place (one or two turns), rotating around to each fastener such that the thermal paste will spread evenly and from the center.  As each fastener gets closer to maximum, you want to be sure that you do not over tighten.  Let me re-iterate that:  <strong>DO NOT OVER-TIGHTEN THE FASTENERS</strong>.  You want the heat sink held securely and evenly in place (the failing of the X clamps), but you don&#8217;t want to apply so much tension via the fasteners that you do any warping of the chip or the motherboard.  Imagine your goal is to be able to pick up the motherboard by just the heat sink, without it moving at all, and without the fasteners being clamped down to where they will tighten no farther.<br />
<H4>Attaching the CPU Heat Sink</H4><br />
For the CPU heat sink (the tallest heat sink with the copper bottom), we&#8217;re going to use 1x machine screw, 1x neoprene washer and 1x metal washer for each fastener slot.</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00609.png" alt="CPU fasteners" /></p>
<p><H4>Attaching the GPU Heat Sink</H4><br />
The GPU heat sink (the flat heat sink) will require 1x machine screw, 1x neoprene washer, and 2x metal washers for each fastener slot.</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00607.png" alt="GPU fasteners" /></p>
<p>Once the heat sinks are securely in place, you are ready to re-assemble your XBox 360.  When placing the motherboard back in the case, make sure the heads of the machine screws fit nicely into the holes you drilled in the case.  They will not protrude very far, but rather will just have a place for their heads to rest comfortably without pressing on any part of the case.</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00623.png" alt="Screw heads resting in holes" /></p>
<h2>[ Cook It! ]</h2>
<p>With your XBox 360 re-assembled, you are ready for the final phase:  <strong>Super-heating</strong>.  This is the so-called &#8220;towel trick&#8221;, and entails the following:</p>
<ul>
<li>Connect power to the XBox 360.</li>
<li>Using a number of large towels (I use four), wrap the 360 such that all of its ventilation holes are covered.</li>
<li>Reach inside without dislodging any towels, and power on the 360.</li>
<li>Leave the machine wrapped and powered for at least 20 minutes.</li>
</ul>
<p>Yes, this sounds scary.  I was apprehensive the first time I did it, keeping my eye on the machine the whole time just to make sure it didn&#8217;t burst into flames (or if it did, that I could get the hell outta there fast).  But, it does work, with no adverse affects on the machine or the towels.</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00631.png" alt="Super-heating the console" /></p>
<p>Once the machine has super heated for at least 20 minutes, you can unwrap it, power it off, and put away the towels.  If all has gone well, and the Computer Gods are smiling down upon thee, you can fully connect your console, power it on, and have a working XBox 360 once again.</p>
<h2>[ And Finally... ]</h2>
<p>The machine pictured in this article was being repaired in real time (while I was writing it).  Here it is after being powered on:</p>
<p><img src="http://www.lucidgears.com/XBox360_rrod/DSC00633.png" alt="Working console" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=155&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2010/12/30/fixing-your-xbox-360s-rrod/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00611.png" medium="image">
			<media:title type="html">XBox 360 motherboard</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00618.png" medium="image">
			<media:title type="html">XBox 360 heat sinks</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00619.png" medium="image">
			<media:title type="html">Cleaned GPU</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00620.png" medium="image">
			<media:title type="html">Cleaned CPU</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00622.png" medium="image">
			<media:title type="html">Modified case</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00613.png" medium="image">
			<media:title type="html">Machine screws</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00615.png" medium="image">
			<media:title type="html">Neoprene washers</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00616.png" medium="image">
			<media:title type="html">Metal washers</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00627.png" medium="image">
			<media:title type="html">Applying thermal paste</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00625.png" medium="image">
			<media:title type="html">Aligning the heat sinks</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00609.png" medium="image">
			<media:title type="html">CPU fasteners</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00607.png" medium="image">
			<media:title type="html">GPU fasteners</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00623.png" medium="image">
			<media:title type="html">Screw heads resting in holes</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00631.png" medium="image">
			<media:title type="html">Super-heating the console</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/XBox360_rrod/DSC00633.png" medium="image">
			<media:title type="html">Working console</media:title>
		</media:content>
	</item>
		<item>
		<title>Android Market and the Zenithink ZT-180</title>
		<link>http://bobhood.wordpress.com/2010/08/30/android-market-and-the-zenithink-zt-180/</link>
		<comments>http://bobhood.wordpress.com/2010/08/30/android-market-and-the-zenithink-zt-180/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 16:33:21 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Android Market]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[tablet]]></category>
		<category><![CDATA[Zenithink]]></category>
		<category><![CDATA[ZT-180]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=112</guid>
		<description><![CDATA[You&#8217;re probably scratching your head: What the heck is a Zenithink ZT-180? Well, the ZT-180 is a 10.2&#8243; Touch Tablet running Android 2.1 (details here). I purchased mine directly from China (via eBay), but I hear rumors that it is starting to sell domestically in the US. You may run into one eventually. Admittedly, this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=112&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You&#8217;re probably scratching your head:  What the heck is a Zenithink ZT-180?  Well, the ZT-180 is a 10.2&#8243; Touch Tablet running Android 2.1 (details <a href="http://androidforums.com/tablets-mids/132917-zenithink-zt-180-1ghz-10-tablet.html">here</a>).  I purchased mine directly from China (via eBay), but I hear rumors that it is starting to sell domestically in the US.  You may run into one eventually.</p>
<p>Admittedly, this article is targeted to a comparatively small segment of people who own the Zenithink ZT-180, but those who do own one find that its firmware doesn&#8217;t automatically come with the Android Market.  This issue has been resolved by others (whom I will entirely credit herein).  I am writing this article to fill in some gaps that I had to work through on my own through trial-and-error.  This will hopefully leave you, the ZT-180 owner, with a clear guide to enabling the Android Market on your device.  (And it will leave me with a reminder of what I need to do after I flash the next update.  <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>
<h2>Setup</h2>
<p><font color="#FF0000">NOTE</font>: <i>Please read the entire article before taking any action.  There may be updates you should be aware of appended to the end.</i></p>
<p>First, if you don&#8217;t already have it, download the current <a href="http://developer.android.com/sdk/index.html">Android SDK</a> and unzip it to a location of your choosing.  You will also need a current version of the <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk6-jsp-136632.html">Java JDK</a> installed on your machine.  Then, download the <a href="http://www.lucidgears.com/ZT-180/RPMScript0.9.zip">RPMScript0.9</a> (courtesy of <a href="http://forum.xda-developers.com/showthread.php?t=740631&amp;page=61">rpmccormick&#8217;s work</a> [post #604]).  This file should be copied into the tools folder of your Android SDK (e.g., [install-path]\android-sdk-windows\tools) and extracted there.  This will create a sub-folder called &#8220;RPM-addon&#8221; that you will use later on.</p>
<p>Next, you&#8217;re going to need a Market id for your device.  <a href="http://www.slatedroid.com/wiki/index.php?title=Fix_Market_For_Slates">This guide</a> provides details on using an Android 1.6 AVD from the Android SDK to generate a unique Market id for use with your ZT-180.  Follow the steps, and write down the id that your AVD generates.  You&#8217;ll need to provide it in a later step.</p>
<h2>Updating the ZT-180</h2>
<p>You should flash your ZT-180 device to 0818 (mine was 0803 when it arrived).  <a href="http://www.lucidgears.com/ZT-180/ZT-180_0818fw.rar">This archive</a> (courtesy of www.iBeau.net) will provide you with all the files you need to accomplish this, including instructions.</p>
<p>Some notes about the flashing process:</p>
<ul>
<li>This will only work with 32-bit Windows systems (I performed my flashing under XP, because it was the only machine I had that was 32-bit).</li>
<li>Flashing from a 32-bit Windows VM will not work.  The first element flashed (uboot) will cause the device to be disconnected, and then subsequent attempts by the flasher to find the device in order to continue the flash will fail.  It must be performed from a stand-alone operating system installation.</li>
<li>You may end up flashing several times while you are working on this, so keep your 32-bit machine handy until you&#8217;re satisfied with the results.</li>
</ul>
<h2>Off To Market</h2>
<p>Once you&#8217;ve flashed your device to 0818, you need to install a couple of files.  They are: <a href="http://www.lucidgears.com/ZT-180/UniversalAndroot.apk">UniversalAndroot.apk</a>, which gives you the ability to provide root access to applciations; <a href="http://www.lucidgears.com/ZT-180/ggdown_adbWireless.apk">adbWireless.apk</a>, which will allow you to interact with your ZT-180 over your wireless connection using the Android SDK&#8217;s adb command.</p>
<ul>
<li>Install both applications (from a TF/microSD card, from a USB drive, or by selecting the links above directly from your ZT-180).</li>
<li>Run the Universal Androot application, and &#8220;root&#8221; your device.  Rooting the device must succeed for you to be able to continue.</li>
<li>Once you&#8217;ve &#8220;rooted&#8221; your device, reboot (you may not have to do this, but I found that I had to in order to get the next application to run).</li>
<li>Go into &#8220;Settings -&gt; Sound &amp; Display -&gt; Screen Timeout&#8221; and change your screen timeout to 10 minutes.  This prevents the Android setup screen from timing out while you&#8217;re waiting.  You can set it back to whatever value you like after you have completed the Android Market setup.</li>
<li>Make sure your WiFi is connected to the same network as the machine where the Android SDK resides, and then run the adbWireless application.
<ul>
<li>The adbWireless application will start in an active state, but don&#8217;t be fooled: it is not really active.  You need to turn it off (press the Red button) and then turn it back on again (press the Green button) in order to actually get the adbWireless to function.</li>
</ul>
</li>
</ul>
<p>Once your device is ready and waiting on the WiFi, open a shell window (command prompt under Windows) and navigate to the location where you extracted the RPMScript0.9 files (e.g., [install-path]\android-sdk-windows\tools\RPM-addon).  At this point, you should run the &#8220;RPMScript.bat&#8221; file found in that folder, and follow the instructions (to the letter) found in <a href="http://forum.xda-developers.com/showpost.php?p=7894515&amp;postcount=604">rpmccormick&#8217;s post</a> for version 0.9 of his script.</p>
<p>Some things to note:</p>
<ul>
<li>Your ZT-180 is showing you the IP address of the device while the adbWireless is running.  Be sure to use that.</li>
<li>Typically, I connect to the device before running the script using the command &#8220;adb connect &lt;IP&gt;:5555&#8243; command shown by adbWireless, but it is probably not necessary.  The RPMScript will connect as one of its steps.  How you do it is up to you.</li>
<li>The RPMScript is broken into two steps.  Follow them, along with rpmccormick&#8217;s instructions in his post.  The first action in each step will likely result in an &#8220;error: device not found&#8221; message, but you can safely ignore that and move onto the next steps.</li>
<li>After each reboot, you&#8217;ll need to hard reset the device by holding down the power button for 10 seconds to cycle the device off.  This is noted in the instructions of the RPMScript after you reboot, but it bears repeating here.</li>
<li>Since you set your screen time out to 10 minutes, the Android setup screen should not time out, and after the 5 minute wait, you should continue with the instructions.</li>
</ul>
<p>Sub-step #3 of step #1 of the RPMScript (&#8220;Delete unessasary [sic] files&#8230;&#8221;) will run through your freshly flashed 0818 device and remove currently installed applications.  You may or may not want to remove everything it suggests.  I chose only to remove a subset of items.  Here&#8217;s how my step ended up:</p>
<p><img src="http://www.lucidgears.com/ZT-180/appDelete.jpg" alt="appDelete.jpg" /></p>
<h2>Let&#8217;s Go Shopping!</h2>
<p>After you complete the two-step process, the Market should be available on your device.  You need only start it, log into or set up your account, let it synchronize, and then run it again, accepting the terms of service, before you have full access to the Android Market on your Zenithink ZT-180!</p>
<p><font color="#00F0F0">UPDATE 9/2/2010</font>: New firmware released for the ZT-180, <a href="http://www.lucidgears.com/ZT-180/ZT-180_0827fw.rar">0827</a>:</p>
<ul>
<li>Improved 1080p video support
<li>Added support for evdo 3G device
</ul>
<p>Haven&#8217;t flashed this yet, nor attempted a new activation of the market.  I will post an update when I do.</p>
<p>There is also an update to RPMScript, <a href="http://www.lucidgears.com/ZT-180/RPMScript1.2.zip">RPMScript1.2</a>.  As with the new firmware, I have yet to use this, and will include info any differences it may have from 0.9 after I flash the new firmware.</p>
<p><font color="#00F0F0">UPDATE 9/4/2010</font>: I flashed my ZT-180 with 0827 using the RPMScript1.2.  All went well until I attempted to use the Market.  Using the Market gave me an error message &#8220;Server unavailable. Please try again later.&#8221;.  I tried over and over to get it to work, even going so far as to generate a new androidID, thinking that might be the issue, but got the same error when I tried to bring up the market.</p>
<p>However, it turns out not to be an issue with the firmware, but rather a synchronization issue with the Market.  Since it had all worked immediately with 0818, I expected the same thing with this firmware, and interpreted this error message as a failure in the process.  However, posts from the great guys over at <a href="http://forum.xda-developers.com/showthread.php?t=740631">xda-developers</a> (thanks, notsaw!) made me realize that I had to let the tablet sit for a while and the Market would eventually enable itself.  I now have the Market working under 0827!</p>
<p><font color="#00F0F0">UPDATE 10/31/2010</font><br />
Here are links to various firmware downloads from my personal server:</p>
<p><a href="http://www.lucidgears.com/ZT-180/ZT-180_0827fw.rar">0827</a><br />
<a href="http://www.lucidgears.com/ZT-180/ZT-180_0818fw.rar">0818</a><br />
<a href="http://www.lucidgears.com/ZT-180/0929_system_img_cb.7z">0929 System Image (&#8220;Christian Buchner&#8221; version)</a><br />
<a href="http://www.lucidgears.com/ZT-180/ZT-180_1013_600.rar">1013 1024&#215;600</a><br />
<a href="http://www.lucidgears.com/ZT-180/ZT-180_1013_576.rar">1013 1024&#215;576</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/112/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=112&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2010/08/30/android-market-and-the-zenithink-zt-180/feed/</wfw:commentRss>
		<slash:comments>302</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://www.lucidgears.com/ZT-180/appDelete.jpg" medium="image">
			<media:title type="html">appDelete.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Welcome to Snow Leopard: Mac OS X 10.6 and VMware Workstation 7</title>
		<link>http://bobhood.wordpress.com/2009/12/18/welcome-to-snow-leopard-mac-os-x-10-6-and-vmware-workstation-7/</link>
		<comments>http://bobhood.wordpress.com/2009/12/18/welcome-to-snow-leopard-mac-os-x-10-6-and-vmware-workstation-7/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 04:30:58 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=68</guid>
		<description><![CDATA[You know how things get easier with practice? Well, there wasn&#8217;t much required for this feat: Installing Mac OS X 10.6 (a.k.a. Snow Leopard) into a VMware Workstation 7 virtual machine. Workstation 7 appears to have greatly improved support for the Mac operating systems to the point that installing Snow Leopard into a virtual machine [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=68&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You know how things get easier with practice?  Well, there wasn&#8217;t much required for this feat: Installing Mac OS X 10.6 (a.k.a. Snow Leopard) into a VMware Workstation 7 virtual machine.  Workstation 7 appears to have greatly improved support for the Mac operating systems to the point that installing Snow Leopard into a virtual machine is much easier than it was with <a href="http://bobhood.wordpress.com/2009/06/12/installing-ideneb-1-4-under-vmware-6-5-2/">Mac OS X 10.5.6 under VMware 6.5.2</a>.  In fact, in this version (I&#8217;m using 7.0.0 build-203739), you can install VMware Tools yourself, and enable sound!</p>
<h3>Credit Where It&#8217;s Due</h3>
<p>I actually did very little experimentation/exploration this time.  I did some cherry picking of steps from a number of places (most notably, the <a href="http://www.insanelymac.com">Insanely Mac</a> forums).  I give particular credit to Talyn&#8217;s post in that forum for giving me the clue to use the ISO image instead of the DMG, and for the Ensoniq audio driver link.</p>
<h3>Part 1: Baking the Cake</h3>
<h4>Here We Go&#8230;</h4>
<p>Before you begin making <em>any</em> modifications, please read through these instructions at least once, just to make all the steps are clear and that you haven&#8217;t missed anything.</p>
<p>Let&#8217;s get started:</p>
<ol>
<li>First, get yourself the retail version of Mac OS X 10.6 (Snow Leopard).  <strong>This will only work with the retail version of the operating system DMG</strong>.  Use your favorite search site to find the DMG.  Since you&#8217;ll need to use the ISO version for this tutorial, you might want to find that instead, allowing you to skip the next step.</li>
<li>Next, convert the DMG file into an ISO.  I used <a href="http://vu1tur.eu.org/tools/">dmg2iso</a> to convert my retail DMG to ISO.  If you plan to use a converter other than the one I&#8217;m recommending, beware of converters that create ISOs that are considerably smaller than the original DMG.  They probably won&#8217;t work.</li>
<li>Download <a href="http://dl.dropbox.com/u/29510717/darwin-wks7.zip">darwin-wks7.zip</a> and extract its single file, &#8220;darwin.iso&#8221;. You&#8217;ll be using this in a couple of places, so remember where you saved it.</li>
<li>Grab <a href="http://dl.dropbox.com/u/29510717/vmware-darwin-200.zip">vmware-darwin-200.zip</a>, and extract its contents.  This will create a folder called &#8220;vmware-darwin-200/&#8221; that contains all the archive&#8217;s files.  This distribution will need to be installed into your VMware Workstation 7 directory.  Although instructions for installing this are included with the archive, it simply takes a &#8220;<code>setup.cmd install</code>&#8221; from within the extracted folder to complete.  <strong>However</strong>, before you actually perform the install, you need to copy the &#8220;darwin.iso&#8221; file you extracted from darwin-wks7.zip into the &#8220;vmware-darwin-200/&#8221; folder, replacing the file with the same name that is already there.  Once the new &#8220;darwin.iso&#8221; is in place, you may proceed with the install.</li>
<li>In VMware Workstation 7, create a new virtual machine.  You should use the same settings as those documented in <a href="http://bobhood.wordpress.com/2009/06/12/installing-ideneb-1-4-under-vmware-6-5-2/">Mac OS X 10.5.6 under VMware 6.5.2</a>.  The interface has changed a bit in VMware Workstation 7, so some screen shots will not be exact.  However, it doesn&#8217;t have to be an <em>exact</em> match, since in this tutorial, instead of altering one or two lines of the resulting VMX file as we did in the Leopard tutorial, we&#8217;ll be replacing the contents of the entire file as well.</li>
<li>At this point, close Workstation 7.  Locate the VMX file that was newly created for your VM; for example, if you named your VM &#8220;Mac OS X 10.6&#8243;, then the file you&#8217;ll want to locate is called &#8220;Mac OS X 10.6.vmx&#8221;.  Open this file in your favorite text editor (not a word processor!), and replace the <em>entire</em> contents of the file with the following text:<br />
<table>
<tbody>
<tr>
<td width="50"></td>
<td><code>.encoding = "windows-1252"<br />
config.version = "8"<br />
virtualHW.version = "7"<br />
maxvcpus = "4"<br />
scsi0.present = "TRUE"<br />
scsi0.virtualDev = "lsilogic"<br />
memsize = "1024"<br />
scsi0:0.present = "TRUE"<br />
<em><b>scsi0:0.fileName = "Mac OS X 10.6.vmdk"</b></em><br />
ide1:0.present = "TRUE"<br />
ide1:0.fileName = "M:\SL.iso"<br />
ide1:0.deviceType = "cdrom-image"<br />
floppy0.startConnected = "FALSE"<br />
floppy0.fileName = ""<br />
floppy0.autodetect = "TRUE"<br />
ethernet0.present = "TRUE"<br />
ethernet0.connectionType = "bridged"<br />
ethernet0.virtualDev = "e1000"<br />
ethernet0.wakeOnPcktRcv = "FALSE"<br />
ethernet0.addressType = "generated"<br />
usb.present = "TRUE"<br />
ehci.present = "TRUE"<br />
sound.present = "TRUE"<br />
sound.fileName = "-1"<br />
sound.autodetect = "TRUE"<br />
pciBridge0.present = "TRUE"<br />
pciBridge4.present = "TRUE"<br />
pciBridge4.virtualDev = "pcieRootPort"<br />
pciBridge4.functions = "8"<br />
pciBridge5.present = "TRUE"<br />
pciBridge5.virtualDev = "pcieRootPort"<br />
pciBridge5.functions = "8"<br />
pciBridge6.present = "TRUE"<br />
pciBridge6.virtualDev = "pcieRootPort"<br />
pciBridge6.functions = "8"<br />
pciBridge7.present = "TRUE"<br />
pciBridge7.virtualDev = "pcieRootPort"<br />
pciBridge7.functions = "8"<br />
vmci0.present = "TRUE"<br />
roamingVM.exitBehavior = "go"<br />
<em><b>displayName = "Mac OS X 10.6"</b></em><br />
guestOS = "darwin10-64"<br />
nvram = "FreeBSD 64-bit.nvram"<br />
virtualHW.productCompatibility = "hosted"<br />
extendedConfigFile = "FreeBSD 64-bit.vmxf"<br />
ethernet0.generatedAddress = "00:0c:29:bd:20:0f"<br />
tools.syncTime = "FALSE"<br />
uuid.location = "56 4d 88 b8 b2 24 d5 cc-10 76 a6 69 9f cb f9 46"<br />
uuid.bios = "56 4d 7d f0 84 2d 67 43-25 a6 19 4f 14 bd 20 0f"<br />
cleanShutdown = "FALSE"<br />
replay.supported = "TRUE"<br />
replay.filename = ""<br />
scsi0:0.redo = ""<br />
pciBridge0.pciSlotNumber = "17"<br />
pciBridge4.pciSlotNumber = "21"<br />
pciBridge5.pciSlotNumber = "22"<br />
pciBridge6.pciSlotNumber = "23"<br />
pciBridge7.pciSlotNumber = "24"<br />
scsi0.pciSlotNumber = "16"<br />
usb.pciSlotNumber = "32"<br />
ethernet0.pciSlotNumber = "33"<br />
sound.pciSlotNumber = "34"<br />
ehci.pciSlotNumber = "35"<br />
vmci0.pciSlotNumber = "36"<br />
vmotion.checkpointFBSize = "16777216"<br />
ethernet0.generatedAddressOffset = "0"<br />
vmci0.id = "347938831"<br />
tools.remindInstall = "FALSE"</code></p>
<p><code>ich7m.present = "TRUE"<br />
keyboard.vusb.enable = "TRUE"<br />
mouse.vusb.enable = "TRUE"<br />
usb:0.present = "TRUE"<br />
usb:1.present = "TRUE"<br />
usb:1.deviceType = "hub"<br />
usb:0.deviceType = "mouse"<br />
monitor.virtual_exec = "hardware"<br />
monitor.virtual_mmu = "software"<br />
ide1:0.startConnected = "TRUE"<br />
disable_acceleration = "FALSE"<br />
checkpoint.vmState = ""<br />
ide1:0.autodetect = "TRUE"<br />
vmi.present = "FALSE"<br />
smc.present = "FALSE"</code></td>
</tr>
</tbody>
</table>
<p>Alter the lines italicized above to match the name you gave to your VM.  As you can see in this example, I used the name &#8220;Mac OS X 10.6&#8243;.</li>
<li>Restart Workstation 7, and select the VMX file you just modified.  Mount your converted ISO file (the one you converted from the DMG) into the VM using &#8220;Use ISO image file&#8221; (you&#8217;ll see that it is currently pointing to something called &#8220;<code>M:\SL.iso</code>&#8220;).   Note that this differs from the Leopard tutorial, where we used a logical drive where the iDeneb ISO had been mounted.</li>
<li>Check the settings of the VM, and adjust those things that you want.  For example, increase or decrease the amount a RAM allocated, the processors accessed, etc.  In most cases, you should leave the settings as they are.</li>
<li>Power on the VM.  If everything went well, you should find yourself prompted to hit &#8220;F8&#8243; to enter boot options.  Do NOT enter the &#8220;Graphics Mode&#8221; trick suggested in the Leopard tutorial.  Leave the VM to use the resolution it wants for now.  The reason for this is that we will be installing the VMware tools into this VM, and setting a Graphics Mode explicitly (either from the boot prompt, or using the /Library/Preferences/SystemConfiguration/com.apple.Boot.plist modification) will hose your VM to the point of making it unusable once the VMware tools are activated.  You can enter the &#8220;-v&#8221; flag it you like (I always do).</li>
<li>Once you reach the install screen, follow the same partitioning steps as found in the Leopard tutorial, with this exception:  The &#8220;Master Boot Record&#8221; format <strong>must be</strong> &#8220;GUID Partition Table&#8221; for Snow Leopard to function.</li>
<li>Apply your partition formatting, and proceed with the installation.</li>
</ol>
<h3>Part 2: Adding the Icing</h3>
<p>Now that you&#8217;ve gotten Snow Leopard installed (you do have it installed, right?), you&#8217;ll want to get some final touches applied.  Leave the retail ISO mounted in the VM, and you should be able to reboot at will with no issues.</p>
<p>Here are a few final things to do:</p>
<ol>
<li>Perform an Apple software update; e.g., my retail ISO installed 10.6, but there was an update to 10.6.2 available.  Reboot after updates are applied.</li>
<li>Download and install the <a href="http://sourceforge.net/projects/vmsvga2/files/Audio/SnowLeopard/EnsoniqAudioPCI_1.0.2_for_SnowLeopard.mpkg.tar.gz/download">Ensoniq Audio Driver for Snow Leopard</a>.  This package will enable audio in the Snow Leopard VM (yay!).</li>
<li>Finally, install the VMware Tools distribution.  Installing this will give you, among other things, the ability to change the VM&#8217;s screen resolution via the OS X System Preferences.
<ol>
<li>&#8220;Eject&#8221; the Mac OS X Install CD ROM from within Snow Leopard.  This will disconnect the device from the operating system.</li>
<li>While the VM is running, right-click on the CD ROM widget at the bottom-right of the VMware window, opening its pop-up menu:
<p><a href="http://bobhood.files.wordpress.com/2009/12/vmware_cdrom.png"><img class="alignnone size-full wp-image-89" title="VMware_CDROM" src="http://bobhood.files.wordpress.com/2009/12/vmware_cdrom.png?w=600" alt="VMware CD ROM menu"   /></a></li>
<li>In the &#8220;Settings&#8230;&#8221; panel, mount the &#8220;darwin.iso&#8221; file (remember where you saved it?) in place of the retail ISO image you used to install Snow Leopard, and press &#8220;Ok&#8221;.</li>
<li>From the CD ROM pop-up menu once again, select the &#8220;Connect&#8221; option to connect the device back to the VM.  This will mount the &#8220;darwin.iso&#8221; image into the running Snow Leopard VM:
<p><a href="http://bobhood.files.wordpress.com/2009/12/darwiniso.png"><img src="http://bobhood.files.wordpress.com/2009/12/darwiniso.png?w=600" alt="" title="DarwinISO"   class="alignnone size-full wp-image-99" /></a></li>
<li>Open the mounted image, and drag the &#8220;Install VWware Tools&#8221; package to your Snow Leopard desktop to make a copy of it:
<p><a href="http://bobhood.files.wordpress.com/2009/12/vmware_tools.png"><img src="http://bobhood.files.wordpress.com/2009/12/vmware_tools.png?w=600" alt="" title="VMware_Tools"   class="alignnone size-full wp-image-100" /></a></li>
<li>Unmount the &#8220;darwin.iso&#8221; image within Snow Leopard, and reverse the process you performed to make it available.  Re-select the retail ISO image, and re-connect it.</li>
<li>Install the VMware Tools package, and reboot your Snow Leopard VM.</li>
</ol>
</li>
</ol>
<h3>Part 3: Having a Piece</h3>
<p>I must say, compared to the hassle of getting Leopard running in VMware, this was streamlined and painless.  The &#8220;Holy Grail&#8221; now appears to be comfortably situated in the cabinet, along side the other drinking glasses.  Running OS X in a virtual machine is no longer a &#8220;new frontier.&#8221;  Now, instead of focusing on the process, you are free to focus on using the product.</p>
<p>Have fun!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=68&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2009/12/18/welcome-to-snow-leopard-mac-os-x-10-6-and-vmware-workstation-7/feed/</wfw:commentRss>
		<slash:comments>235</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/12/vmware_cdrom.png" medium="image">
			<media:title type="html">VMware_CDROM</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/12/darwiniso.png" medium="image">
			<media:title type="html">DarwinISO</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/12/vmware_tools.png" medium="image">
			<media:title type="html">VMware_Tools</media:title>
		</media:content>
	</item>
		<item>
		<title>Adding builder priority to Buildbot 0.7.10</title>
		<link>http://bobhood.wordpress.com/2009/06/24/adding-builder-priority-to-buildbot-0-7-10/</link>
		<comments>http://bobhood.wordpress.com/2009/06/24/adding-builder-priority-to-buildbot-0-7-10/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 02:46:02 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[automated building]]></category>
		<category><![CDATA[Buildbot]]></category>
		<category><![CDATA[prioritization]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=50</guid>
		<description><![CDATA[(Preface: This article discusses the usage of an open-source build automation tool known as Buildbot. Some familiarity with the tool &#8212; better, some need for builder prioritization within buildbot &#8212; would be helpful.) I&#8217;m currently managing the automated build/test system for my project (the most recent of many hats that I&#8217;ve been required to wear [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=50&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>(Preface:  This article discusses the usage of an open-source build automation tool known as <a href="http://buildbot.net/trac">Buildbot</a>.  Some familiarity with the tool &#8212; better, some need for builder prioritization within buildbot &#8212; would be helpful.)</p>
<p>I&#8217;m currently managing the automated build/test system for my project (the most recent of many hats that I&#8217;ve been required to wear during my tenure).  We are using Buildbot to manage the builds for three platforms (Windows, Linux, Mac OS X), two architectures (32-bit and 64-bit), and four branches of development (one new product, two branches of a legacy product, and N-number of growing private developer branches).  Doing the numbers, and trying to apply the result to six available machines for performing automated builds and test cases, it becomes clear that some level of priority management is needed to ensure the higher-priority builds complete before the lower-priority are serviced.</p>
<p>Buildbot 0.7.10 includes prioritizations based upon the submission time of a build request (Buildbot 0.7.9, the version currently in use on my Buildbot master, doesn&#8217;t even provide this).  Unfortunately, this level of prioritizing is insufficient to my needs.  I need to prioritize the builders themselves, not just the build requests across all builders, so that certain builds will be serviced on the same build slave prior to others.  For this reason, I&#8217;ve made some slight modifications to the Buildbot 0.7.10 sources in order to add this capability.  Herein, I document the changes I&#8217;ve made in case you need this ability as well (or care to suggest improvements).</p>
<h3>The Master Config</h3>
<p>In my Buildbot master.cfg file, I have added a new dictionary item called &#8216;priority&#8217; to each builder definition.  Priorities of zero (0) have the highest serviceability, with all other positive integers being inversely proportional to their priority (i.e., the larger the number, the increasingly lower its priority).  For example, my builder definitions now look something like this:</p>
<table border="0">
<tbody>
<tr>
<td>
<pre><code>b1 = {'name': "TOP_Win32",
      'slavename': "Pyramid_8Core",
      'builddir': "win_32",
      'factory': f1,
      'priority': 0,
     }
</code></pre>
</td>
</tr>
<tr>
<td>&#8230;</td>
</tr>
<tr>
<td>
<pre><code>b_bob_win = {'name': "TOP_Win64_bob",
             'slavename': "Pyramid_8Core",
             'builddir': "win_64_bob",
             'factory': f_bob_win,
             'priority': 3,
            }
</code></pre>
</td>
</tr>
</tbody>
</table>
<h3>Buildbot Modifications</h3>
<p>To accommodate this approach, several small changes need to be made to a number of the Buildbot 0.7.10 files.  You&#8217;ll need to find these files within your Buildbot 0.7.10 installation.  For example, given Python 2.4 under Linux, you might find these files in:</p>
<table border="0">
<tbody>
<tr>
<td>/usr/lib/python2.4/site-packages/buildbot-0.7.10/buildbot</td>
</tr>
</tbody>
</table>
<p>All file references made below will be relative to your active Buildbot installation location.</p>
<h4>[ process/builder.py ]</h4>
<p>We modify the <strong>Builder</strong> class in this file to contain priorities set in the builder definition of the master.cfg file.  The <code>__init__()</code> method receives this new code (placed anywhere within):</p>
<table border="0">
<tbody>
<tr>
<td>
<pre><code>self.priority = 0
if setup.has_key('priority'):
    self.priority = int(setup['priority'])
</code></pre>
</td>
</tr>
</tbody>
</table>
<p>Further down, in the <code>compareToSetup()</code> method, code is added to deal with changes in the priority setting (for example, when executing &#8220;buildbot reconfig master&#8221;):</p>
<table border="0">
<tbody>
<tr>
<td>
<pre><code>if setup.has_key('priority'):
    if int(setup['priority']) != self.priority:
        diffs.append('priority changed from %d to %d' \
                     % (self.priority, int(setup['priority'])))
</code></pre>
</td>
</tr>
</tbody>
</table>
<p>The <strong>Builder</strong> class also requires this simple new method, used in sorting builders by priority:</p>
<table border="0">
<tbody>
<tr>
<td>
<pre><code>def getPriority(self):
    return self.priority
</code></pre>
</td>
</tr>
</tbody>
</table>
<h4>[ master.py ]</h4>
<p>This file will contain the largest modifications of the two.  We are going to enhance the sorting function found in the <code>maybeStartAllBuilds()</code> method.  Following the definition of the <code>_sort()</code> function within that method, remove these trailing lines:</p>
<table border="0">
<tbody>
<tr>
<td>
<pre><code>builders.sort(cmp=_sortfunc)
for b in builders:
    b.maybeStartBuild()
</code></pre>
</td>
</tr>
</tbody>
</table>
<p>and replace them with the following code:</p>
<table border="0">
<tbody>
<tr>
<td>
<pre><code>builders.sort(key=lambda b: b.getPriority())

priority_high = builders[0].getPriority()
priority_low = builders[-1].getPriority()

sorted_builders = []
while priority_high &lt;= priority_low:
    priority_builders = [b for b in builders if b.getPriority() == priority_high]
    priority_builders.sort(cmp=_sortfunc)
    sorted_builders += priority_builders
    priority_high += 1

for b in sorted_builders:
    b.maybeStartBuild()
</code></pre>
</td>
</tr>
</tbody>
</table>
<p>Briefly, the replacement code does the following:</p>
<ul>
<li>First, the local <code>builders[]</code> list is sorted into priority order, with the highest priority builders at the front, and the lowest priority builders bringing up the rear.</li>
<li>Next, the priority boundaries are gathered into local variables <code>priority_high</code> and <code>priority_low</code>, and these priorities are used to iterate over the <code>builders[]</code> list.</li>
<li>Each priority iteration sorts the specific priorities based upon the submission times of their build requests (if any).  When complete, the effect is that the builder list is now sorted on two key values, builder priority and build request submission time.</li>
<li>Finally, the resulting two-key list is iterated over, with the highest-priority builder having the oldest build request at the top of the list, and the lowest-priority builder with the newest build request at the bottom.  It should be noted that, regardless of whether or not a builder contains pending build requests, the <code>maybeStartBuild()</code> method needs to be called.  This method updates the status display, and failing to call it can leave the Web interface displaying inaccurate information (e.g., the Waterfall can display a &#8220;building&#8221; status for an &#8220;idle&#8221; slave).</li>
</ul>
<h3>Wrapping Up</h3>
<p>These changes do not go so far as to &#8220;abort&#8221; active builds based upon priority &#8212; in other words, killing builds in progress so that higher-priority builds can use the slave.  Such actions can get messy if they are not handled correctly (e.g., the aborted build needs to be re-queued with the same submission time).  These changes I&#8217;ve provided here only affect &#8220;pending&#8221; builds, making sure priorities give the next available slave to the more-critical builder with waiting build requests.  If a &#8220;pending&#8221; priority queuing mechanism is too tame for your needs, it shouldn&#8217;t take much to modify these changes to make an &#8220;abort&#8221; priority queue.</p>
<p>So far, these modifications to Buildbot 0.7.10 appear to be working well for my specific situation.  They may work as well for you, or you may need something slightly different.  In any case, I hope these changes can serve as a starting point for achieving your specific needs.  Good luck.  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=50&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2009/06/24/adding-builder-priority-to-buildbot-0-7-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing Mac OS X 10.5.6 under VMware 6.5.2</title>
		<link>http://bobhood.wordpress.com/2009/06/12/installing-ideneb-1-4-under-vmware-6-5-2/</link>
		<comments>http://bobhood.wordpress.com/2009/06/12/installing-ideneb-1-4-under-vmware-6-5-2/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 20:51:06 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[iDeneb]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=25</guid>
		<description><![CDATA[One of the current &#8220;Holy Grails&#8221; of virtual machinery is getting a functional installation of Mac OS X into a VMware virtual machine.   There&#8217;s a lot of Google talk out there about how to do it, but not everybody seems to be successful.  I certainly wasn&#8217;t for quiet some time.  However, I sat down today [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=25&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the current &#8220;Holy Grails&#8221; of virtual machinery is getting a functional installation of Mac OS X into a VMware virtual machine.   There&#8217;s a lot of Google talk out there about how to do it, but not everybody seems to be successful.  I certainly wasn&#8217;t for quiet some time.  However, I sat down today and decided to give it my best shot again, and this time I succeeded!  Not only did I succeed with iDeneb 1.4 (which installs Mac OS X 10.5.6), I successfully upgraded that release to 10.5.7.  Cool.  <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I&#8217;m documenting here the steps I followed (many times, just to make sure they worked for me) to achieve a successful Mac OS X 10.5.x install in a VMware Workstation 6.5.2 machine.  There is no sound, but there is networking, which is far more important to me.  If you find a way to get audio working, you might post it here.</p>
<p>Be aware that these steps worked for me, but YMMV.  If you are not successful using them, there&#8217;s not much I can do to help you out.  I had to experiment over and over to find these working steps; you will probably have to do the same to overcome your problems.  For the purposes of this tutorial, I&#8217;ll be using the file &#8220;iDeneb_v1.4_10.5.6.iso&#8221;.</p>
<h3>Here We Go</h3>
<p>1.  First, of course, you need to grab the iDeneb 1.4 distribution (Mac OS X 10.5.6).  Google it, or use your <a href="http://thepiratebay.org/torrent/4726660/iDeneb_v1.4_OSx86_ISO">favorite torrent search engine</a>.<br />
2.  Mount the iDeneb ISO as a drive (using something like UltraISO or Virtual CloneDrive).  Note the drive letter of the DVD.<br />
3.  Create a new virtual machine in VMware.  The following sequence of screen grabs should show you all the settings you need to create for the new environment:</p>
<table border="0">
<tbody>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap1" src="http://bobhood.files.wordpress.com/2009/06/snap1.png?w=600" alt="Snap1"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td valign="center">Tell VMware that you will install the operating system later:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap2" src="http://bobhood.files.wordpress.com/2009/06/snap2.png?w=600" alt="Snap2"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>For operating system type, Select &#8220;Other&#8221;, and then &#8220;FreeBSD 64-bit&#8221;:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap3" src="http://bobhood.files.wordpress.com/2009/06/snap3.png?w=600" alt="Snap3"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>I named it &#8220;10.5&#8243; because I will upgrade from the 10.5.6 on the iDeneb 1.4 image to 10.5.7.  You can call it whatever you like, of course:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap4" src="http://bobhood.files.wordpress.com/2009/06/snap4.png?w=600" alt="Snap4"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>Choose the number of processors to let the OS use:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap5" src="http://bobhood.files.wordpress.com/2009/06/snap5.png?w=600" alt="Snap5"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>Allocate an amount of memory to use:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap6" src="http://bobhood.files.wordpress.com/2009/06/snap6.png?w=600" alt="Snap6"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>Unless you know what you&#8217;re doing, select &#8220;Bridged networking&#8221;:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap7" src="http://bobhood.files.wordpress.com/2009/06/snap7.png?w=600" alt="Snap7"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>Drive-type settings:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap8" src="http://bobhood.files.wordpress.com/2009/06/snap8.png?w=600" alt="Snap8"   /><br />
<img class="size-full wp-image-26 alignnone" title="Snap9" src="http://bobhood.files.wordpress.com/2009/06/snap9.png?w=600" alt="Snap9"   /><br />
<img class="size-full wp-image-26 alignnone" title="Snap10" src="http://bobhood.files.wordpress.com/2009/06/snap10.png?w=600" alt="Snap10"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>Set the space available on the disc.  The installation will consume 6-7GB, and the update will consume even more.  If you need to do more on the drive, increase that size here:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap11" src="http://bobhood.files.wordpress.com/2009/06/snap11.png?w=600" alt="Snap11"   /></td>
</tr>
<tr>
<td width="20" height="50"></td>
<td>Don&#8217;t power on the machine yet:</td>
</tr>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap12" src="http://bobhood.files.wordpress.com/2009/06/snap12.png?w=600" alt="Snap12"   /></td>
</tr>
</tbody>
</table>
<p>4.  Edit the machine settings, and set the CD/DVD drive to use the one that you noted earlier where the iDeneb 1.4 image is mounted:</p>
<table border="0">
<tbody>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap13" src="http://bobhood.files.wordpress.com/2009/06/snap13.png?w=600" alt="Snap13"   /></td>
</tr>
</tbody>
</table>
<p>5.  Power on the machine.  You&#8217;ll want to be sure you click in the window immediately so it captures the mouse/keyboard focus.  When prompted to press &#8220;F8&#8243; for startup options, press it.  Then, at the &#8220;boot:&#8221; prompt, you can enter options you want for starting the installer.  I use the following (&#8216;-v&#8217; means show diagnostic messages; I recommend entering at least that):</p>
<table border="0">
<tbody>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap14" src="http://bobhood.files.wordpress.com/2009/06/snap14.png?w=600" alt="Snap14"   /></td>
</tr>
</tbody>
</table>
<p>6.  Now, if you&#8217;re lucky, at this point you should boot into the iDeneb installer.   When you get to the installation prompt, you&#8217;ll want to go to the &#8220;Utilities&#8221; menu, and launch &#8220;Disk Utility&#8221;.  From this interface, select the VM disc, and then select the &#8220;Partition&#8221; tab:</p>
<table border="0">
<tbody>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap15" src="http://bobhood.files.wordpress.com/2009/06/snap15.png?w=600" alt="Snap15"   /></td>
</tr>
</tbody>
</table>
<p>7.  Create a single-partition layout, leaving the volume type as &#8220;Mac OS Extended (Journaled)&#8221;.  <em>This volume type is important</em>:  I was unable to get the VM to boot with any other type:</p>
<table border="0">
<tbody>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap16" src="http://bobhood.files.wordpress.com/2009/06/snap16.png?w=600" alt="Snap16"   /></td>
</tr>
</tbody>
</table>
<p>8.  Select the &#8220;Options&#8221; button, and change the disc to use a &#8220;Master Boot Record&#8221; partition.  The other types failed to work for me:</p>
<table border="0">
<tbody>
<tr>
<td width="20"></td>
<td><img class="size-full wp-image-26 alignnone" title="Snap17" src="http://bobhood.files.wordpress.com/2009/06/snap17.png?w=600" alt="Snap17"   /></td>
</tr>
</tbody>
</table>
<p>9.  &#8220;Apply&#8221; your partition settings, and exit the &#8220;Disk Utility&#8221;.<br />
10.  Proceed with the installation, selecting your VM disc as the target partition (it will be the only one, if you followed these instructions).<br />
11.  When the installation completes, you&#8217;ll be prompted to restart.  Do so, but when the machine gets back to the boot prompt, &#8220;Stop&#8221; it immediately (don&#8217;t worry, this won&#8217;t harm anything) so that you are back to the VMware desktop and the VM is powered off.<br />
12.  Change the &#8220;CD/DVD&#8221; settings of the VM from the specific iDeneb drive back to &#8220;Auto&#8221;.  DO NOT UNMOUNT THE DVD.  You&#8217;ll want to leave the iDeneb DVD mounted in the operating system, because it seems to be the only way to allow the VM to actually boot correctly.<br />
13.  Shut down VMware.<br />
14.  Open the .vmx file of the new iDeneb machine (e.g., &#8220;Mac OS X 10.5.vmx&#8221;), and find the line that starts with &#8220;guestOS&#8221;.  It should contain the entry &#8220;freebsd-64&#8243;.  Change this to &#8220;darwin-64&#8243;, and save the file.<br />
15.  Re-start VMware, and power on the Mac OS X VM.  Let the boot screen time out, and if the gods are smiling down upon you, you will boot into Mac OS X 10.5.6.</p>
<h3>Post-installation Booting</h3>
<p>Of course, things did not go this smoothly for me.  It took me a couple of boot attempts to get the operating system to come up (boot-hang-kill-repeat).  When it did, I did all the set up stuff, and it took me into the OS X desktop.  Once I get everything set up that is boot dependent (like updates and screen resolution), I plan to simply suspend the VM so that I can unmount the iDeneb DVD, and then simply power on the VM whenever I need it.</p>
<h3>Screen Resolution</h3>
<p>There are two ways to control the screen resolution.  You can enter it at the boot prompt (see the previous image), but this is cumbersome, and can typically lead to a failed boot.  Or, you can change the com.apple.Boot.plist file to make the resolution permament (my preferred approach).  Both approaches require a boot up sequence in order to be successful.  You can read about implementing both approaches <a href="http://pcwizcomputer.com/index.php?option=com_content&amp;task=view&amp;id=31&amp;Itemid=32">here</a>.</p>
<h3>Good Luck</h3>
<p>If you&#8217;ve been looking for a successful way to create a portable Macintosh, I hope this approach works for you.  Being a software engineer, it&#8217;s really fantastic to be able to carry Linux, Mac OS X, and Vista along with me on a single machine when I&#8217;m away from home.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=25&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2009/06/12/installing-ideneb-1-4-under-vmware-6-5-2/feed/</wfw:commentRss>
		<slash:comments>122</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap1.png" medium="image">
			<media:title type="html">Snap1</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap2.png" medium="image">
			<media:title type="html">Snap2</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap3.png" medium="image">
			<media:title type="html">Snap3</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap4.png" medium="image">
			<media:title type="html">Snap4</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap5.png" medium="image">
			<media:title type="html">Snap5</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap6.png" medium="image">
			<media:title type="html">Snap6</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap7.png" medium="image">
			<media:title type="html">Snap7</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap8.png" medium="image">
			<media:title type="html">Snap8</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap9.png" medium="image">
			<media:title type="html">Snap9</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap10.png" medium="image">
			<media:title type="html">Snap10</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap11.png" medium="image">
			<media:title type="html">Snap11</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap12.png" medium="image">
			<media:title type="html">Snap12</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap13.png" medium="image">
			<media:title type="html">Snap13</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap14.png" medium="image">
			<media:title type="html">Snap14</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap15.png" medium="image">
			<media:title type="html">Snap15</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap16.png" medium="image">
			<media:title type="html">Snap16</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/06/snap17.png" medium="image">
			<media:title type="html">Snap17</media:title>
		</media:content>
	</item>
		<item>
		<title>Life with the My Book Studio Edition II</title>
		<link>http://bobhood.wordpress.com/2009/05/24/life-with-the-my-book-studio-edition-ii/</link>
		<comments>http://bobhood.wordpress.com/2009/05/24/life-with-the-my-book-studio-edition-ii/#comments</comments>
		<pubDate>Mon, 25 May 2009 01:46:54 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sleeping]]></category>
		<category><![CDATA[WDH2Q20000N]]></category>
		<category><![CDATA[western digital]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=13</guid>
		<description><![CDATA[Two months ago, I purchased a Western Digital My Book Studio Edition II. This little gem is a 2TB external storage system that sports a quadruple interface (including eSATA, which was one of the the reasons I purchased it), and a RAID0 or RAID1 configuration (which is the other reason).  It was my intention to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=13&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Two months ago, I purchased a Western Digital My Book Studio Edition II.</p>
<div id="attachment_14" class="wp-caption alignleft" style="width: 160px"><img class="size-full wp-image-14" title="Western Digital My Book Studio Edition II" src="http://bobhood.files.wordpress.com/2009/05/207687210.jpg?w=600" alt="Western Digital My Book Studio Edition II"   /><p class="wp-caption-text">Western Digital My Book Studio Edition II</p></div>
<p>This little gem is a 2TB external storage system that sports a quadruple interface (including eSATA, which was one of the the reasons I purchased it), and a <a href="http://en.wikipedia.org/wiki/RAID">RAID0</a> or <a href="http://en.wikipedia.org/wiki/RAID">RAID1</a> configuration (which is the other reason).  It was my intention to employ the eSATA interface, which is the fastest external interface available, to allow me to seemlessly move between my desktop and notebook environments.  I envisioned accomplishing this by moving all my &#8220;volatile&#8221; file data, including files in use by running applications, onto the SEII in a RAID1 configuration, having both my desktop and notebook pointing at these files via their local discs using Windows Vista&#8217;s new symbolic link support.  In this fashion, I could simply disconnect the SEII from one machine, connect it to the other, and have all my most recent file changes instantly available.</p>
<p>Well, this ambitious undertaking came to fruition.  Running in RAID1, the SEII mirrors my files from one 1TB drive onto the second for safety.  I substituted the application data files and folders (Skype, Firefox, Thunderbird, etc.) on the local HDD with Vista symlinks which redirect to the files on the SEII.  My applications don&#8217;t even know that their data files are not where they are being found.  For example, here&#8217;s a portion of my application data folder as it looks today:</p>
<table border="0">
<tbody>
<tr>
<td>
<pre>...
 8/25/2008  21:22         &lt;DIR&gt;    Forte
 4/26/2009  19:14    &lt;SYMLINKD&gt;    G7PS [W:\Users\Administrator\AppData\G7PS]
12/12/2008  10:44         &lt;DIR&gt;    GnuPG
 2/12/2009  12:34         &lt;DIR&gt;    gtk-2.0
 2/22/2009  15:16         &lt;DIR&gt;    HP
 3/20/2008  19:52         &lt;DIR&gt;    Media Center Programs
10/18/2008  16:31         &lt;DIR&gt;    mIRC
 4/11/2009  10:47    &lt;SYMLINKD&gt;    Mozilla [W:\Users\Administrator\AppData\Mozilla]
 2/08/2008  20:04         &lt;DIR&gt;    Nero
 4/11/2009  10:47    &lt;SYMLINKD&gt;    Skype [W:\Users\Administrator\AppData\Skype]
...</pre>
</td>
<td></td>
</tr>
</tbody>
</table>
<p>Both machines contain the same symlinks pointing at the same locations, so, as long as the external drive is connected and powered on, my environment follows me.</p>
<p>However, a problem surfaced:  The SEII was narcoleptic!  If left too long without any kind of activity, it falls asleep, and if it is asleep for too long, its assigned drive drops off of Windows&#8217; radar.  Now, I&#8217;m all for being &#8220;green&#8221;, but when I have open files on the drive and it decides to take a permanent nap (as far as Windows is concerned), not only do my applications complain loudly, there&#8217;s a real likelihood of damaging the file system on the SEII.  This latter disaster has already happened to me once, and I had to run through the resulting &#8220;found.000&#8243; folder to try and figure out what files went to the right location.  Of course, I went to the Western Digital site, looking for a solution to this sleeping sickness.  Unfortunately, the impression I got from Western Digital is that it is a programmed behavior, and they are not at all interested in changing it.</p>
<p>Can nothing ever go smoothly?</p>
<p>As I&#8217;m fond of telling others, you have to be smarter than the hardware.  Obviously, the firmware in the device is programmed to sleep after a predefined amount of time passes without disc activity.  As long as I&#8217;m getting IM&#8217;s, or mail is arriving, or I&#8217;m browsing the Interwebs, the drive is busy changing files.  However, if some passage of time occurs where nothing happens on the drive (perhaps it&#8217;s the weekend and I&#8217;m playing an MMO), I can say &#8216;goodnight&#8217; to my SEII, and the integrity of its file system.  The solution is to keep the device &#8220;busy&#8221;, even when those things using it are not.  Luckily, I&#8217;m a software engineer, and know how to outsmart the hardware.</p>
<p>After trying a few approaches, I lit upon one that so far appears to work.  The device has not fallen asleep on me for nearly a week now, even after letting it sit idle for a few hours while I went to the movies.  The solution is simple enough:  keep it &#8220;busy&#8221;, without impacting its performance.  The solution I devised takes the form of a Python script:</p>
<pre>#!/usr/local/bin/python

import os
import time
import random
import binascii

file_list = []

def path_visitor((files, max),thisdir,nameshere):
    if len(files) &gt;= max:
        # remove all sub-folders from the list to stop any further search
        for name in nameshere:
            full_path = os.path.join(thisdir,name)
            if os.path.isdir(full_path):
                nameshere.remove(name)
        return

    for name in nameshere:
        full_path = os.path.join(thisdir,name)
        if not os.path.isdir(full_path):
            value = random.randint(0, 200000)
            if value &gt;= 199000:
                files.append(full_path)

def calculate_crc32(file):
    crc = 0
    f = open(file, 'rb')
    data = 'bob'

    while len(data) != 0:
        data = f.read(1024*512)
        crc = binascii.crc32(data, crc)

    f.close()

    open('w:\\crc32.txt', 'w').write('0x%08x\n' % (crc &amp; 0xffffffff))

def construct_file_list():
    global file_list

    file_list = []
    os.path.walk('w:\\',path_visitor,(file_list, 1440))

random.seed()

while True:
    if (len(file_list) == 0) or (not os.path.exists(file_list[-1])):
        construct_file_list()

    time.sleep(60)

    calculate_crc32(file_list[-1])
    file_list.pop()</pre>
<p>The script initially gathers a list of random files on the device up to a maximum value (I use 1440, because there are that many minutes in 24 hours), and then, at intervals of 1 minute, processes each file, reading it to calculate a CRC32 value, and then writing this value to a small file on the drive&#8217;s root partition.  When it runs out of files to process, or when it encounters a file that is now missing from the device, it refreshes its random file cache, and starts again.  You can see that I have hard-coded some things (like the drive path, the maximum number of files to cache, etc.), but this is typical for a special-purpose tool like this.  Also, the scanning code assumes something about the population of the device (I currently have over 400,000 files on it), so the numbers I use to randomly select files are tuned to give me the 1440 files I want across as wide a sampling of the files on the devices as possible.  You&#8217;ll likely need to tweak these numbers for your specific situation.</p>
<p>You can run this script manually from a command prompt, and then minimize it to the task bar.  However, I opted to install the script as a Windows service (using <a href="http://support.microsoft.com/kb/137890">srvany</a>).  Once installed, I set the service to run manually, and then created a batch file in my Startup folder that simply calls &#8216;net start KeepWDS2Alive&#8217; to start the new service whenever I log into my Windows account.  This way, the service (and, thus, the script) is only running when I actually have applications dependent upon the alertness of the SEII.</p>
<p>It is a shame that Western Digital decided that they know what is best for the person who wishes to use their hardware.  If it wasn&#8217;t simply arrogance on their part, they could at least explain the hardware requirements that made them decide to hamper this otherwise fine device.  However, software is always the brains of the beast, and if you know how, you can always be smarter than the hardware.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=13&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2009/05/24/life-with-the-my-book-studio-edition-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>

		<media:content url="http://bobhood.files.wordpress.com/2009/05/207687210.jpg" medium="image">
			<media:title type="html">Western Digital My Book Studio Edition II</media:title>
		</media:content>
	</item>
		<item>
		<title>CentOS and the annoying login BEEP!</title>
		<link>http://bobhood.wordpress.com/2009/01/26/centos-and-the-annoying-login-beep/</link>
		<comments>http://bobhood.wordpress.com/2009/01/26/centos-and-the-annoying-login-beep/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 17:44:12 +0000</pubDate>
		<dc:creator>bobhood</dc:creator>
				<category><![CDATA[Computers]]></category>

		<guid isPermaLink="false">http://bobhood.wordpress.com/?p=11</guid>
		<description><![CDATA[CentOS (a Linux distribution based upon RedHat Enterprise Linux) has this rather annoying overuse of the PC speaker.  It beeps incredibly loudly when the login prompt is available, as well as whenever you do something within the operating system that it doesn&#8217;t care for.  It is noticeably excessive, however, is becomes rather embarrassing when you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=11&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>CentOS (a Linux distribution based upon RedHat Enterprise Linux) has this rather annoying overuse of the PC speaker.  It beeps incredibly loudly when the login prompt is available, as well as whenever you do something within the operating system that it doesn&#8217;t care for.  It is noticeably excessive, however, is becomes rather embarrassing when you are in a room full of people and your computer is continuously beeping.</p>
<p>After searching for a solution on other sites, I tried the &#8216;blacklist&#8217; solution.  This basically involves adding the &#8216;pcspkr&#8217; kernel module to the blacklist file found in /etc/modprobe.d/blacklist.  This solution did not appear to work for me:  The obnoxiously loud BEEP continued to ring at the login prompt and attract unwanted attention.</p>
<p>If this blacklist solution doesn&#8217;t work for you, you can try mine.  My solution?  Simply remove the module manually at boot time.  To accomplish this, edit (as root) your /etc/rc.d/rc.local file and add the following line somewhere within:</p>
<p><code>modprobe -r pcspkr</code></p>
<p>It&#8217;s just that simple.  This command will remove (<code>-r</code>) the PC Speaker module (<code>pcspkr</code>) from the kernel during boot up, and you will no longer be bothered with the annoying login BEEP!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bobhood.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bobhood.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bobhood.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bobhood.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bobhood.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bobhood.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bobhood.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bobhood.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bobhood.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bobhood.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bobhood.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bobhood.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bobhood.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bobhood.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bobhood.wordpress.com&amp;blog=4436195&amp;post=11&amp;subd=bobhood&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bobhood.wordpress.com/2009/01/26/centos-and-the-annoying-login-beep/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5f40de2ba7c1335aecd578c95dde227f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bobhood</media:title>
		</media:content>
	</item>
	</channel>
</rss>
