<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUAFR3k-fSp7ImA9WhJREk8.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950</id><updated>2012-07-13T19:55:16.755-04:00</updated><category term="linux" /><category term="Visual Studio" /><category term="Windows Forms" /><category term="active directory" /><category term="Microsoft" /><category term="CRM" /><category term="freemind" /><category term="SharePoint" /><category term="PerformancePoint" /><category term="Windows Server 2008" /><category term="wf" /><category term="adobe" /><category term="Kerberos" /><category term="Citrix" /><category term=".NET 3.5 SP1" /><category term="cross-platform" /><category term="MapPoint" /><category term="DFS" /><category term="&quot;Windows 7&quot;" /><category term="zenoss" /><category term="android" /><category term="Caliburn" /><category term="no-ip" /><category term="WCF" /><category term="TrueCrypt" /><category term="windows" /><category term="MOSS" /><category term="Mono" /><category term="IIS7" /><category term="ubuntu" /><category term="wmi" /><category term="WPF" /><category term="vista" /><category term="Silverlight" /><title>/dev/arthur</title><subtitle type="html">Computer-related interests that make my friends' eyes glaze over when I start talking.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://devarthur.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/xBRzKO" /><feedburner:info uri="blogspot/xbrzko" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkAFRXY4cCp7ImA9WxFbFE4.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-1033234784013969213</id><published>2010-07-06T11:38:00.001-04:00</published><updated>2010-07-06T11:38:34.838-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-06T11:38:34.838-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IIS7" /><title>Diagnosing 401.3 errors with a new IIS 7 website deployment</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I recently worked to help diagnose why a new website we deployed was getting 401.3 errors on its site images. It used forms authentication, and we could get some of the pages to load, but none of the images would load. I had confirmed that the application pool identity was a member of IIS_IUSRS, but the problem persisted.&lt;br/&gt;&lt;br/&gt;&lt;a href='http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx'&gt;Process Monitor&lt;/a&gt; was invaluable in diagnosing this issue. After filtering its process name to w3wp, It revealed that we were getting 'access denied' messages trying to fetch the images running under the context of NT AUTHORITY\IUSR:&lt;br/&gt;&lt;br/&gt;&lt;img src='http://lh5.ggpht.com/_0UNL_lijppY/TDNMFJdFMJI/AAAAAAAAAh0/0j18rgcQG5Y/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;br/&gt;After researching this a bit ("&lt;a href='http://support.microsoft.com/kb/247603'&gt;401.3 Unauthorized Due to ACL on Resource&lt;/a&gt;," "&lt;a href='http://forums.iis.net/t/1147103.aspx'&gt;Thread: IUSR Built-in Account Associated with Users Group?&lt;/a&gt;" ) I took a look at the ACL for the images folder. In building the server, someone had removed the built-in Users group from having any permissions on C:\inetpub or its descendants. &lt;b&gt;NT AUTHORITY\IUSR relies on its intrinsic membership in the built-in Users group to get rights to any anonymous access folders, so NT security was shutting us down.&lt;/b&gt; I replaced the rights at C:\inetpub with the defaults I found on another unmodified web server and the site began to work:&lt;br/&gt;&lt;br/&gt;&lt;img src='http://lh6.ggpht.com/_0UNL_lijppY/TDNNn0Y3XnI/AAAAAAAAAh4/TL7TqqwRE8Q/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/-Kb6WsxDMoY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/1033234784013969213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2010/07/diagnosing-4013-errors-with-new-iis-7.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1033234784013969213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1033234784013969213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/-Kb6WsxDMoY/diagnosing-4013-errors-with-new-iis-7.html" title="Diagnosing 401.3 errors with a new IIS 7 website deployment" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_0UNL_lijppY/TDNMFJdFMJI/AAAAAAAAAh0/0j18rgcQG5Y/s72-c/%5BUNSET%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2010/07/diagnosing-4013-errors-with-new-iis-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEEQX88fip7ImA9WxFVEk0.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-8133611671568889614</id><published>2010-06-10T17:16:00.001-04:00</published><updated>2010-06-10T17:16:40.176-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-10T17:16:40.176-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android, Eclipse, and Windows 7 x64</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I'm diving into Android development these days. While the platform shows a lot of promise and provides many compelling features, I had a few speed bumps getting started with Android development in Eclipse, the predominant IDE. I had a fairly recent version  (dated Dec. 2009, I believe) of Eclipse Galileo installed from a previous project to which I wanted to add the Android SDK and plugin. My initial installation attempt was not successful--while the SDK installed properly and would load the Android SDK and AVD Manager, and the plugin itself also reported a successful installation, there was no evidence of Eclipse knowing anything about Android--there were no project templates, samples, or preferences. &lt;br/&gt;&lt;br/&gt;Thinking that this was due to the age of my Eclipse installation, I renamed the Eclipse installation folder and fetched a fresh download of the latest version. My second installation attempt appeared to work with the new copy; the Android plugin registered properly this time and I was able to create and debug projects. Then I tried to install a second plugin--the &lt;a href='http://www.woodwardweb.com/teamprise/goodbye_teampri.html'&gt;Team Explorer Everywhere 2010 plugin for Eclipse&lt;/a&gt;--and voila, not only did all of the Android bits vanish, but the TFS plugin didn't register either.&lt;br/&gt;&lt;br/&gt;I started looking at my folder locations. My workstation is a Windows 7 x64 with UAC enabled. Eclipse was deployed to C:\Program Files (x86)\Eclipse, and I had dropped the Android SDK folder into C:\Program Files (x86)\Eclipse\android-sdk-windows ("put it anywhere," I thought...). I had a suspicion that UAC was interfering with Eclipse's plugin management, so I moved the entire Eclipse installation folder including the Android bits to my user folder, adjusted the Android Eclipse plugin setting and system path entry for the SDK location, and tried again. This time, I was able to get the Android plugin to function, but when I tried to create projects from the Android samples, I got access control errors on the .project file of anything I tried to open. &lt;br/&gt;&lt;br/&gt;In the end, the following cookbook worked:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Eclipse installed to &lt;b&gt;%USERPROFILE%\Documents\eclipse&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Android SDK installed to &lt;b&gt;%USERPROFILE%\Documents\android-sdk-windows&lt;/b&gt; &lt;i&gt;and set up in that location (ran the tool to download all of the SDK components directly there)&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Plugins installed in Eclipse via the standard method (&lt;b&gt;Help | Install New Software&lt;/b&gt;)&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;After doing this, all of the plugins played nicely with each other, and I no longer got warnings creating the Android sample projects. &lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/ZVIaaBWLelA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/8133611671568889614/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2010/06/android-eclipse-and-windows-7-x64.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/8133611671568889614?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/8133611671568889614?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/ZVIaaBWLelA/android-eclipse-and-windows-7-x64.html" title="Android, Eclipse, and Windows 7 x64" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2010/06/android-eclipse-and-windows-7-x64.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04NRXY8eCp7ImA9WxFSFUw.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-6375475956231025729</id><published>2010-04-17T11:58:00.002-04:00</published><updated>2010-04-17T11:59:54.870-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-17T11:59:54.870-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adobe" /><title>Someone please tell me...</title><content type="html">...why the Adobe Reader updater, popping up on a freshly-rebooted Windows system, says a system restart is required? What, is PDF functionality part of the kernel?&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/7c00oeDM2ic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/6375475956231025729/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2010/04/someone-please-tell-me.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/6375475956231025729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/6375475956231025729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/7c00oeDM2ic/someone-please-tell-me.html" title="Someone please tell me..." /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2010/04/someone-please-tell-me.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQFRng9cCp7ImA9WxBbGE4.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-6018310089360925788</id><published>2010-03-17T11:04:00.000-04:00</published><updated>2010-03-17T11:05:17.668-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-17T11:05:17.668-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zenoss" /><title>Error moving the Zenoss database to a new MySQL server</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;We recently grew our Zenoss 2.3.3 installation by installing a dedicated MySQL server and moving the events database to that server. Events were being collected and written, but we could not move any events to history, and the zenactions log showed the following:&lt;br/&gt;&lt;blockquote&gt;2010-03-17 05:31:26 ERROR zen.Events: (1449, "The user specified as a definer ('zenoss'@'localhost') does not exist")&lt;br/&gt;&lt;/blockquote&gt;It turns out this error was coming from MySQL. There is a trigger, status_delete, on the events.status table that controls moving events to history; apparently, the application code is designed to simply delete the status table rows when instructed, and the trigger then moves the rows to the history table. The trigger has a definer specified that indicates the zenoss user must be @locahost (yes, that bold code is commented out):&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;CREATE&lt;br/&gt;    &lt;i&gt;&lt;b&gt;/*!50017 DEFINER = 'zenoss'@'localhost' */&lt;/b&gt;&lt;/i&gt;&lt;br/&gt;    TRIGGER `status_delete` BEFORE DELETE ON `status` &lt;br/&gt;    FOR EACH ROW INSERT INTO history SET&lt;br/&gt;            dedupid=OLD.dedupid,&lt;br/&gt;            evid=OLD.evid,&lt;br/&gt;            device=OLD.device,&lt;br/&gt;            component=OLD.component,&lt;br/&gt;            eventClass=OLD.eventClass,&lt;br/&gt;            eventKey=OLD.eventKey,&lt;br/&gt;            summary=OLD.summary,&lt;br/&gt;            message=OLD.message,&lt;br/&gt;            severity=OLD.severity,&lt;br/&gt;            eventState=OLD.eventState,&lt;br/&gt;            eventClassKey=OLD.eventClassKey,&lt;br/&gt;            eventGroup=OLD.eventGroup,&lt;br/&gt;            stateChange=OLD.stateChange,&lt;br/&gt;            firstTime=OLD.firstTime,&lt;br/&gt;            lastTime=OLD.lastTime,&lt;br/&gt;            COUNT=OLD.count,&lt;br/&gt;            prodState=OLD.prodState,&lt;br/&gt;            suppid=OLD.suppid,&lt;br/&gt;            manager=OLD.manager,&lt;br/&gt;            agent=OLD.agent,&lt;br/&gt;            DeviceCLass=OLD.DeviceClass,&lt;br/&gt;            Location=OLD.Location,&lt;br/&gt;            Systems=OLD.Systems,&lt;br/&gt;            DeviceGroups=OLD.DeviceGroups,&lt;br/&gt;            ipAddress=OLD.ipAddress,&lt;br/&gt;            facility=OLD.facility,&lt;br/&gt;            priority=OLD.priority,&lt;br/&gt;            ntevid=OLD.ntevid,&lt;br/&gt;            ownerid=OLD.ownerid,&lt;br/&gt;            deletedTime=NULL,&lt;br/&gt;            clearid=OLD.clearid,&lt;br/&gt;            DevicePriority=OLD.DevicePriority,&lt;br/&gt;            eventClassMapping=OLD.eventClassMapping,&lt;br/&gt;            monitor=OLD.monitor;&lt;br/&gt;$$&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;DELIMITER ;&lt;br/&gt;&lt;br/&gt;I fixed it by changing it to the following, and then dropping and recreating the trigger:&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;CREATE&lt;br/&gt;    TRIGGER `status_delete` BEFORE DELETE ON `status` &lt;br/&gt;    FOR EACH ROW INSERT INTO history SET&lt;br/&gt;            dedupid=OLD.dedupid,&lt;br/&gt;            evid=OLD.evid,&lt;br/&gt;            device=OLD.device,&lt;br/&gt;            component=OLD.component,&lt;br/&gt;            eventClass=OLD.eventClass,&lt;br/&gt;            eventKey=OLD.eventKey,&lt;br/&gt;            summary=OLD.summary,&lt;br/&gt;            message=OLD.message,&lt;br/&gt;            severity=OLD.severity,&lt;br/&gt;            eventState=OLD.eventState,&lt;br/&gt;            eventClassKey=OLD.eventClassKey,&lt;br/&gt;            eventGroup=OLD.eventGroup,&lt;br/&gt;            stateChange=OLD.stateChange,&lt;br/&gt;            firstTime=OLD.firstTime,&lt;br/&gt;            lastTime=OLD.lastTime,&lt;br/&gt;            COUNT=OLD.count,&lt;br/&gt;            prodState=OLD.prodState,&lt;br/&gt;            suppid=OLD.suppid,&lt;br/&gt;            manager=OLD.manager,&lt;br/&gt;            agent=OLD.agent,&lt;br/&gt;            DeviceCLass=OLD.DeviceClass,&lt;br/&gt;            Location=OLD.Location,&lt;br/&gt;            Systems=OLD.Systems,&lt;br/&gt;            DeviceGroups=OLD.DeviceGroups,&lt;br/&gt;            ipAddress=OLD.ipAddress,&lt;br/&gt;            facility=OLD.facility,&lt;br/&gt;            priority=OLD.priority,&lt;br/&gt;            ntevid=OLD.ntevid,&lt;br/&gt;            ownerid=OLD.ownerid,&lt;br/&gt;            deletedTime=NULL,&lt;br/&gt;            clearid=OLD.clearid,&lt;br/&gt;            DevicePriority=OLD.DevicePriority,&lt;br/&gt;            eventClassMapping=OLD.eventClassMapping,&lt;br/&gt;            monitor=OLD.monitor;&lt;br/&gt;$$&lt;br/&gt;&lt;br/&gt;DELIMITER ;&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;I did try just dropping and recreating the trigger without the change, but it seems the "commented out" definer was responsible for our error, as I duplicated the same error when trying to delete events from the mysql client directly as user zenoss. I then removed the comment completely and recreated the trigger, and the “move to history” function began working.&lt;br/&gt;&lt;br/&gt;Note that the age_events stored procedure also has a localhost definer. If you script it out and change the definer specification to the IP of the Zenoss server, that too will function.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=dc548f30-cd60-8241-acb4-dd911a66a99e' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/OGRDt169-3A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/6018310089360925788/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2010/03/error-moving-zenoss-database-to-new.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/6018310089360925788?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/6018310089360925788?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/OGRDt169-3A/error-moving-zenoss-database-to-new.html" title="Error moving the Zenoss database to a new MySQL server" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2010/03/error-moving-zenoss-database-to-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4HRXo4cSp7ImA9WxBbEEg.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-7703811561216726170</id><published>2010-03-08T07:18:00.003-05:00</published><updated>2010-03-08T07:22:14.439-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T07:22:14.439-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zenoss" /><title>Deleting all devices from Zenoss with zendmd</title><content type="html">We upgraded our Zenoss 2.3.3 installation to 2.5.2 in a test  environment, but wanted to retain only a few of the hundreds of devices  that were monitored by the system. We tried deleting these from the web  UI, but it would not complete--it always timed out and never seemed to  delete anything. I then turned to a zendmd script, which worked wonders:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;for dev in dmd.Devices.getSubDevices():&lt;br /&gt;&amp;nbsp;&amp;nbsp;print dev.id&lt;br /&gt;&amp;nbsp;&amp;nbsp;dev.deleteDevice()&lt;br /&gt;commit()&lt;br /&gt;reindex()&lt;br /&gt;commit()&lt;/blockquote&gt;This ran quickly and took out all of our devices. We then added  back in the ones we wanted. Note: this does not delete performance  graphs or events for the affected devices, so you can add them back in  and still have this information available.&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/-defURN1Ef8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/7703811561216726170/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2010/03/deleting-all-devices-from-zenoss-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/7703811561216726170?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/7703811561216726170?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/-defURN1Ef8/deleting-all-devices-from-zenoss-with.html" title="Deleting all devices from Zenoss with zendmd" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2010/03/deleting-all-devices-from-zenoss-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAHQ3k_fip7ImA9WxBWE0Q.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-2554987205254214038</id><published>2010-02-05T13:15:00.001-05:00</published><updated>2010-02-05T13:15:32.746-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-05T13:15:32.746-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="Caliburn" /><title>Using Caliburn inside of Windows Forms with WPF UserControls/ElementHost</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I'm working to have a little MVVM action inside of our application, but it's Windows Forms, so I am using an ElementHost to get the WPF UserControl objects loaded. There are aspects to MVVM that cry out for frameworks to help you (binding double-click events to ListViewItem objects being one important one for me). I tried about a million things to get the very powerful Caliburn WPF application framework to do something--anything--in this hybrid context. It was the last thing I tried that worked! ;)&lt;br/&gt;&lt;br/&gt;There seem to be two key things you must do to get Caliburn properly registered and listening in this context:&lt;br/&gt;&lt;ol&gt;&lt;li&gt;You have to use the "WithAssemblies" option on the framework configuration call, passing in a reference to the current assembly, along with the "WithPresentationFramework" call. &lt;/li&gt;&lt;li&gt;You must spin up Caliburn &lt;i&gt;before the entry point UserControl is initialized and assigned to the ElementHost.&lt;/i&gt; If the UserControl is set as the Child via the Windows Forms designer, this means that you must initialize Caliburn in the Form containing the ElementHost's constructor &lt;i&gt;before its InitializeComponent call.&lt;/i&gt;&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;   &lt;font face='monospace'&gt; public partial class Form1 : Form&lt;br/&gt;    {&lt;br/&gt;        public Form1()&lt;br/&gt;        {&lt;br/&gt;            CaliburnFramework.ConfigureCore()&lt;br/&gt;                &lt;font color='#cc0000'&gt;.WithAssemblies(System.Reflection.Assembly.GetExecutingAssembly())&lt;/font&gt;&lt;br/&gt;                &lt;font color='#cc0000'&gt;.WithPresentationFramework()&lt;/font&gt;&lt;br/&gt;                .Start();&lt;br/&gt;            &lt;font color='#cc0000'&gt;InitializeComponent(); // must come after the above&lt;/font&gt;&lt;br/&gt;        }&lt;br/&gt;    }&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;I went down several dead-ends before discovering this, such as thinking I needed a non-null System.Windows.Application.Current class, thinking I needed to initialize the framework inside of the UserControl's constructor, etc. I hope this helps someone.&lt;br/&gt;&lt;br/&gt;You can download the sample application &lt;a href='http://sites.google.com/site/devarthur/blog-support/WindowsFormsCaliburn.zip?attredirects=0&amp;amp;d=1'&gt;here&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=1b48a4c9-f80c-8f05-8437-b86e23030763' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/Kd4DfV8VzTw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/2554987205254214038/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2010/02/using-caliburn-inside-of-windows-forms.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/2554987205254214038?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/2554987205254214038?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/Kd4DfV8VzTw/using-caliburn-inside-of-windows-forms.html" title="Using Caliburn inside of Windows Forms with WPF UserControls/ElementHost" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2010/02/using-caliburn-inside-of-windows-forms.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QAQng6eyp7ImA9WhZSFk8.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-7296133106994911502</id><published>2010-01-20T13:43:00.003-05:00</published><updated>2011-03-31T21:29:03.613-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-31T21:29:03.613-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="MapPoint" /><title>Silent Installation of Microsoft MapPoint 2009 -- without changing browser settings</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I had the pleasure of working with a friend of mine on performing silent installations of Microsoft MapPoint 2009. Out of the box, MapPoint's installer prompts the user for several settings, and by default has checked to change the home page and default search provider to Live/Bing Search as well as to install the Live Search toolbar.  While you can get it to perform a silent installation without too much trouble and omit the toolbar as part of this, it still changes the browser settings during the installation, unless you perform the following procedure we discovered...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1) Create an administrative installation&lt;/b&gt;&lt;br /&gt;
Insert/explode your MapPoint DVD/iso and get a command prompt open to that location. Run:&lt;br /&gt;
&lt;blockquote&gt;Setup.exe /a&lt;br /&gt;
&lt;/blockquote&gt;This will prompt you for a location in which to place the administrative/server installation.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2) Edit Setup.ini to turn off Live Toolbar installation&lt;br /&gt;
&lt;/b&gt;Working now in the server installation folder, edit Setup.ini in its root and change the following setting from 1 to 0:&lt;br /&gt;
&lt;blockquote&gt;[LIVETOOLBAR]&lt;br /&gt;
INCLUDE_LIVETOOLBAR=0&lt;br /&gt;
&lt;/blockquote&gt;&lt;b&gt;3) Edit data.msi to disable browser settings changes&lt;br /&gt;
&lt;/b&gt;There are no settings we could find exposed in the setup.ini to turn off taking over the browser settings. To disable this behavior, we edited data.msi (at &lt;b&gt;.\mappoint\MSMap\data.msi&lt;/b&gt; in the admin installation folder), which is one of the MSI files called by MapPoint setup. Editing the MSI requires a tool called Orca that is part of the Windows SDK (we used version 6.0a). After installing the Windows SDK, I found Orca's installation MSI located at &lt;b&gt;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\Orca.Msi&lt;/b&gt;. First, double-click this MSI to install Orca, then run the tool.&lt;br /&gt;
&lt;br /&gt;
In Orca then, open &lt;b&gt;data.msi&lt;/b&gt; from the admin installation folder. This shows you the series of tables and components within the MSI with their values used. There are several components you need to change under the tables listed below. You are editing the &lt;b&gt;Condition&lt;/b&gt; field. &lt;i&gt;HINT: sort the tables on condition and all of these will be grouped together.&lt;/i&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Component &amp;gt; MP_NA_IE_Homepage&lt;/b&gt;: SETLIVEHOMEPAGE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND NOT Installed&lt;/li&gt;
&lt;li&gt;&lt;b&gt;InstallExecuteSequence &amp;gt; SetLiveSearchAsIE6SearchEngine&lt;/b&gt;: SETLIVESEARCHSERVICE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND IEBUILDVERSION&amp;lt;70000 AND NOT Installed &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;InstallExecuteSequence &amp;gt; ResetDefaultSearchProvider&lt;/b&gt;: SETLIVESEARCHSERVICE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND IEBUILDVERSION&amp;gt;70000 AND (LIVESEARCHSTATE=0 OR LIVESEARCHSTATE=1) AND NOT Installed&lt;/li&gt;
&lt;li&gt;&lt;b&gt;InstallExecuteSequence &amp;gt; InstallAndSetLiveSearchProviderAsIE7Default&lt;/b&gt;: SETLIVESEARCHSERVICE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND IEBUILDVERSION&amp;gt;70000 AND LIVESEARCHSTATE=0 AND NOT Installed&lt;/li&gt;
&lt;li&gt;&lt;b&gt;InstallExecuteSequence &amp;gt; SetLiveSearchInstallAndSetAsDefaultGuid&lt;/b&gt;: SETLIVESEARCHSERVICE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND IEBUILDVERSION&amp;gt;70000 AND LIVESEARCHSTATE=0 AND NOT Installed&lt;/li&gt;
&lt;li&gt;&lt;b&gt;InstallExecuteSequence &amp;gt; SetLiveSearchProviderAsIE7Default&lt;/b&gt;: SETLIVESEARCHSERVICE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND IEBUILDVERSION&amp;gt;70000 AND LIVESEARCHSTATE=1 AND NOT Installed&lt;/li&gt;
&lt;li&gt;&lt;b&gt;InstallExecuteSequence &amp;gt; SetLiveSearchSetAsDefaultGuid&lt;/b&gt;: SETLIVESEARCHSERVICE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND IEBUILDVERSION&amp;gt;70000 AND LIVESEARCHSTATE=1 AND NOT Installed&lt;/li&gt;
&lt;li&gt;&lt;b&gt;InstallExecuteSequence &amp;gt; GetLiveSearchProviderState&lt;/b&gt;: SETLIVESEARCHSERVICE&amp;lt;&amp;gt;"&lt;b&gt;0&lt;/b&gt;" AND IEBUILDVERSION&amp;gt;70000 AND NOT Installed&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;Finally, edit the &lt;b&gt;Value&lt;/b&gt; field of the &lt;b&gt;Property&lt;/b&gt; table to put those zeroes into the stored settings:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;INSTALLLIVETOOLBAR:&lt;/b&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SETLIVEHOMEPAGE&lt;/b&gt;: 0&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SETLIVESEARCHSERVICE&lt;/b&gt;: 0&lt;/li&gt;
&lt;/ul&gt;The INSTALLLIVETOOLBAR setting may not need to be tweaked as it does seem to respond to the Setup.ini setting, but we turned it off for good measure.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Once you are done editing the values, save the MSI as data.msi and replace the one in the MapPoint admin installation folder.&lt;br /&gt;
&lt;/u&gt;&lt;b&gt;&lt;br /&gt;
4) Perform a silent installation&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
With your shiny new modified administrative installer, get a command prompt open and run:&lt;br /&gt;
&lt;blockquote&gt;Setup.exe /quiet&lt;br /&gt;
&lt;/blockquote&gt;You will see msiexec.exe running in Task Manager but there will be no visible prompts. Once those terminate, MapPoint 2009 is installed, and it should have left your browser settings alone.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie"&gt;&lt;img style="visibility: visible ! important;" src="http://img.zemanta.com/pixy.gif?x-id=0ef5a7de-05fc-863d-bd03-ab46136d874f" alt="" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/pyekSwm8q0U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/7296133106994911502/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2010/01/silent-install-of-microsoft-mappoint.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/7296133106994911502?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/7296133106994911502?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/pyekSwm8q0U/silent-install-of-microsoft-mappoint.html" title="Silent Installation of Microsoft MapPoint 2009 -- without changing browser settings" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2010/01/silent-install-of-microsoft-mappoint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMESHY6cCp7ImA9WxNRE0k.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-7497111700484415007</id><published>2009-09-07T12:46:00.003-04:00</published><updated>2009-09-07T12:53:29.818-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-07T12:53:29.818-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zenoss" /><title>Best practice around Zenoss template bindings</title><content type="html">After working with Zenoss Core for a few years now, I wanted to pass along a tip that would have saved me a lot of time had I known it in the beginning: &lt;span style="font-weight: bold;"&gt;do not bind performance templates to individual devices, or make local modified copies of templates on devices.&lt;/span&gt; Once you do this, the device no longer inherits template bindings from the parent device class, but you have no good way to know that this condition exists unless you drill into the device and examine its template bindings.&lt;br /&gt;&lt;br /&gt;When you move a device from one class to another, if it lacks local bindings or overridden templates, it will inherit the bindings of the new class. However, this does not occur if you have made any local changes as above. Also, if you bind new performance templates to its parent, it ignores these new bindings if you have made any local changes. I highly recommend that if you need local changes to a device, make a new device class and make the template binding changes to the &lt;span style="font-style: italic;"&gt;class&lt;/span&gt;. Then, move the device to the new class, and it will pick up the new bindings.&lt;br /&gt;&lt;br /&gt;To clear this condition on a device once you have made local changes, you must &lt;span style="font-weight: bold;"&gt;reset bindings&lt;/span&gt; to be those of its container. On the device, go to &lt;span style="font-weight: bold;"&gt;More | Templates&lt;/span&gt;, then use the drop-down arrow next to "Performance templates for &lt;span style="font-style: italic;"&gt;device&lt;/span&gt;," and finally &lt;span style="font-weight: bold;"&gt;Reset Bindings&lt;/span&gt;.&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/RUx2Qhk-_so" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/7497111700484415007/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/09/best-practice-around-zenoss-template.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/7497111700484415007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/7497111700484415007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/RUx2Qhk-_so/best-practice-around-zenoss-template.html" title="Best practice around Zenoss template bindings" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/09/best-practice-around-zenoss-template.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08NRHc7fip7ImA9WxNRE0k.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-6712892716675117103</id><published>2009-09-07T12:38:00.003-04:00</published><updated>2009-09-07T12:44:55.906-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-07T12:44:55.906-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><title>Updating the UI from a BackgroundWorker in WPF</title><content type="html">This approach enabled me to flexibly send messages to objects on the UI thread while processing from a BackgroundWorker object in WPF. Otherwise, the UI thread doesn't update if the BackgroundWorker code tries to manipulate its objects during processing. First I created this UIUpdater:&lt;br /&gt;&lt;blockquote&gt;    public delegate void UpdateTextDelegate(string message);&lt;br /&gt;&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Sends messages to the UI thread via the dispatcher.&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    class UIUpdater&lt;br /&gt;    {&lt;br /&gt;        #region ctor&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Initializes a new instance of the &lt;see cref="UIUpdater"&gt; class.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="uiDispatcher"&gt;The dispatcher in scope for the UI.&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="uiUpdateDelegate"&gt;Function that will apply the message to the appropriate control(s).&lt;/param&gt;&lt;br /&gt;        public UIUpdater(Dispatcher uiDispatcher, UpdateTextDelegate uiUpdateDelegate)&lt;br /&gt;        {&lt;br /&gt;            if (default(Dispatcher) == uiDispatcher) throw new ArgumentNullException("uiDispatcher");&lt;br /&gt;            if (default(UpdateTextDelegate) == uiUpdateDelegate) throw new ArgumentNullException("uiUpdateDelegate");&lt;br /&gt;&lt;br /&gt;            dispatcher = uiDispatcher;&lt;br /&gt;            updateTextDelegate = uiUpdateDelegate;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        #region member variables&lt;br /&gt;        Dispatcher dispatcher = default(Dispatcher);&lt;br /&gt;        UpdateTextDelegate updateTextDelegate = default(UpdateTextDelegate);&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        #region methods&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Sends the message.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="message"&gt;The message.&lt;/param&gt;&lt;br /&gt;        public void SendMessage(string message)&lt;br /&gt;        {&lt;br /&gt;            if (default(string) == message) throw new ArgumentNullException("message"); // allow string.Empty&lt;br /&gt;            dispatcher.BeginInvoke(&lt;br /&gt;                DispatcherPriority.Normal,&lt;br /&gt;                (ThreadStart)delegate() {&lt;br /&gt;                    updateTextDelegate(message);                       &lt;br /&gt;                });&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;To use it, in the BackgroundWorker_DoWork event handler, initialize it and pass it into your objects that implement the background work. Give it a reference to your dispatcher and a delegate that will handle updates from the background thread:&lt;br /&gt;&lt;blockquote&gt;UIUpdater updater = new UIUpdater(mainWindow.Dispatcher, new UpdateTextDelegate(UpdateStatus));&lt;br /&gt;&lt;br /&gt;DoMyWork(updater);&lt;br /&gt;&lt;/blockquote&gt;Then from the code doing the background work, you can call the SendMessage delegate to safely pass along the message:&lt;br /&gt;&lt;blockquote&gt;updater.SendMessage("Deleting all items from the " + listName + " list...");&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/ZXxCA-M1EYs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/6712892716675117103/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/09/updating-ui-from-backgroundworker-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/6712892716675117103?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/6712892716675117103?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/ZXxCA-M1EYs/updating-ui-from-backgroundworker-in.html" title="Updating the UI from a BackgroundWorker in WPF" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/09/updating-ui-from-backgroundworker-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIFQ3w9fip7ImA9WxNRE0k.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-3133498736879929025</id><published>2009-09-07T11:28:00.004-04:00</published><updated>2009-09-07T12:21:52.266-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-07T12:21:52.266-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><title>Programmatically creating a recursive view with WSS web services</title><content type="html">I had a project where I wanted to do a few things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a view using the Windows SharePoint Services' web services&lt;/li&gt;&lt;li&gt;Make this view recursive&lt;/li&gt;&lt;li&gt;Set the display style to the alternating line style&lt;/li&gt;&lt;/ul&gt;What I discovered is that there is not feature parity between the WSS object model and the web service. Also, while it is possible to create the view and make it recursive, there is no support in the WSS 3.0 web services for setting the style on a view.&lt;br /&gt;&lt;br /&gt;To create a recursive view:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Add Web Reference&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;First, add a web  reference to the Views web  service. You can do this by adding an ASMX web reference in your project to http://yourSharePointSiteUrl/resources/_vti_bin/views.asmx.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Create the Client &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;SharePointViewService.Views viewClient = new MyProject.SharePointViewService.Views();&lt;br /&gt;viewClient.Credentials = System.Net.CredentialCache.DefaultCredentials;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Create the View via the Web Service&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;When working with the WSS web services, the basic model is to send the XML fragments to the method call and then parse the result for exceptions.&lt;br /&gt;&lt;blockquote&gt;XmlNode result = viewClient.AddView(listName, viewName, viewFieldsNode, queryNode, rowLimitNode, type, false);  // the last parameter: isDefaultView&lt;br /&gt;&lt;/blockquote&gt;Here are examples of the parameter values for the above:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;listName:&lt;/span&gt; "My List"&lt;br /&gt;&lt;span style="font-style: italic;"&gt;viewName:&lt;/span&gt; "My View"&lt;br /&gt;&lt;span style="font-style: italic;"&gt;viewFieldsNode (outer XML):&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;ViewFields&amp;gt;&amp;lt;FieldRef Name="LinkTitle" /&amp;gt;&lt;br /&gt; &amp;lt;FieldRef Name="Item_x0020_Number" /&amp;gt;&lt;br /&gt; &amp;lt;FieldRef Name="Description" /&amp;gt;&lt;br /&gt; &amp;lt;FieldRef Name="Release" /&amp;gt;&lt;br /&gt; &amp;lt;FieldRef Name="Module" /&amp;gt;&lt;br /&gt;&amp;lt;/ViewFields&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;queryNode (outer XML):&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;Query&amp;gt;&lt;br /&gt; &amp;lt;OrderBy&amp;gt;&lt;br /&gt;   &amp;lt;FieldRef Name="Item_x0020_Number" /&amp;gt;&lt;br /&gt; &amp;lt;/OrderBy&amp;gt;&lt;br /&gt; &amp;lt;GroupBy Collapse="TRUE" GroupLimit="100"&amp;gt;&lt;br /&gt;   &amp;lt;FieldRef Name="Release" /&amp;gt;&lt;br /&gt;   &amp;lt;FieldRef Name="Module" /&amp;gt;&lt;br /&gt; &amp;lt;/GroupBy&amp;gt;&lt;br /&gt;&amp;lt;/Query&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;rowLimitNode (outer XML):&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;RowLimit Paged="TRUE"&amp;gt;100&amp;lt;/RowLimit&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;type:&lt;/span&gt; "HTML"&lt;br /&gt;&lt;br /&gt;If exceptions occur, you will have meaningful data in the return value from the AddView method call.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Update the View to Set the Recursive Property&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;You cannot create the view as a recursive view--the key is that you must follow up the add call with an update call to set this property.&lt;br /&gt;&lt;blockquote&gt;XmlDocument vp = new XmlDocument();&lt;br /&gt;vp.AppendChild(vp.CreateElement("View"));&lt;br /&gt;vp.DocumentElement.SetAttribute("Scope", "Recursive");&lt;br /&gt;viewClient.UpdateView(addView.ListName, viewResult.Name, vp, default(XmlNode), default(XmlNode), default(XmlNode), default(XmlNode), default(XmlNode));&lt;/blockquote&gt;I sincerely hope this helps someone, as the documentation for the WSS web services, particularly the Views web service, is significantly lacking.&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/vN15o97V-0Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/3133498736879929025/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/09/programmatically-creating-recursive.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/3133498736879929025?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/3133498736879929025?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/vN15o97V-0Y/programmatically-creating-recursive.html" title="Programmatically creating a recursive view with WSS web services" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/09/programmatically-creating-recursive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMQ346cSp7ImA9WxJbGEw.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-5592963584217645051</id><published>2009-07-28T16:15:00.000-04:00</published><updated>2009-07-28T16:18:02.019-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-28T16:18:02.019-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zenoss" /><title>Zenoss 2.3.3 error moving device organizers</title><content type="html">I encountered an interesting error today with Zenoss 2.3.3 (yes, 2.4 has been out for some time, but we've been having trouble getting a clean upgrade process). I had the following device classes with devices:&lt;br /&gt;&lt;br /&gt;/Server/Windows/Sync/DatacenterA&lt;br /&gt;- device1&lt;br /&gt;- device2&lt;br /&gt;- device3&lt;br /&gt;/Server/Windows/Sync/DatacenterB&lt;br /&gt;- device4&lt;br /&gt;- device5&lt;br /&gt;- device6&lt;br /&gt;&lt;br /&gt;As these were all production machines, I wanted to differentiate them from the other dev and QA machines. I created the organizer /Server/Windows/Sync/Production and moved the ../DatacenterA and ../DatacenterB &lt;u&gt;organizers&lt;/u&gt; with their devices under the new /Server/Windows/Sync/Production and...&lt;br /&gt;&lt;br /&gt;...everything broke for the moved devices. All zencommand and zenperfsnmp-based monitoring just stopped cold. When starting zenperfsnmp in debug mode, I noticed errors on its first run like:&lt;br /&gt;&lt;br /&gt;2009-07-27 17:15:45 WARNING zen.zenperfsnmp: Error loading config for devices ['device1', 'device2']&lt;br /&gt;2009-07-27 17:15:45 WARNING zen.zenperfsnmp: Error loading config for devices ['device3', device4']&lt;br /&gt;2009-07-27 17:15:45 WARNING zen.zenperfsnmp: Error loading config for devices ['device5', device6']&lt;br /&gt;&lt;br /&gt;To correct this, I ended up moving the organizers back to their original locations, creating &lt;u&gt;new&lt;/u&gt; organizers with the structure I wanted, and moving the &lt;i&gt;individual devices&lt;/i&gt; (not the organizers) to the new organizer structure.&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;Now if I could just get &lt;a href="http://forums.zenoss.com/viewtopic.php?p=36857"&gt;this issue fixed&lt;/a&gt; I'd have no more zenperfsnmp/zencommand mysteries!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/sD4ocSMGInM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/5592963584217645051/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/07/zenoss-233-error-moving-device.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/5592963584217645051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/5592963584217645051?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/sD4ocSMGInM/zenoss-233-error-moving-device.html" title="Zenoss 2.3.3 error moving device organizers" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/07/zenoss-233-error-moving-device.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEEQXo-cSp7ImA9WxJRE0U.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-4044909582503933740</id><published>2009-05-15T07:55:00.002-04:00</published><updated>2009-05-15T07:56:40.459-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-15T07:56:40.459-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zenoss" /><title>Zenoss zencommand daemon overload</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I think we have found that the zencommand daemon in Zenoss Core has some very reachable limits with regard to the number of commands it will process. We have been increasing our command monitoring lately and got to a point where zencommand, the daemon responsible for running these types of monitoring functions, had 1,200 commands in each cycle. I noticed that some of the performance templates that graphed the counters fetched by our commands had gaps--sometimes large gaps--and some had simply quit entirely. The odd thing was that we didn't really get any warnings (our VP went looking for graphed data and, ummm, didn't find it).&lt;br /&gt;&lt;br /&gt;If I took one of the devices with templates that weren't graphing and manually ran zencommand against that device, it worked perfectly and fetched all the counters from the various commands. Stracing it didn't show any errors either. But with the amount of load we were providing, it was definitely silently dropping commands.&lt;br /&gt;&lt;br /&gt;Zencommand seems to be a rather single-threaded beast. Its ability to get everything done is a function of the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The number of data sources it is processing&lt;/li&gt;&lt;li&gt;The number of monitored devices&lt;/li&gt;&lt;li&gt;The cycle time of the data sources it is processing&lt;/li&gt;&lt;/ul&gt;I was able to collapse some of our data sources so that instead of 1,200 commands I got down to around 560, and voila--the graphs that had not been painting suddenly began working correctly. To avoid this issue, I recommend the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The native Device template uses SNMP (and SNMP Informant on the Windows side) to read the base CPU, memory, and paging counters. To avoid deploying SNMP Informant everywhere, some time ago we had changed to using a different template that used zencommand and remote WMI calls to read these in. I am going to change this back to using Device, which will take quite a bit of load off of zencommand.&lt;/li&gt;&lt;li&gt;Watch the cycle time. Does anyone have QoS recommendations for the resolution of performance counters? 60 second cycle times are a bit aggressive, but what works well--3 minutes? 5 minutes?&lt;/li&gt;&lt;li&gt;Always validate that the graphs are painting after making changes affecting zencommand. If you roll out a new template, don't just look at that template to make sure it's working--look at other things zencommand is handling after you roll it out. As we discovered, adding too much load can silently break other things.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img src="http://img.zemanta.com/pixy.gif?x-id=a6f4656d-7fbe-88e8-88e6-619c0a651bdd" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/CHfwiYKi5Dc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/4044909582503933740/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/05/zenoss-zencommand-daemon-overload.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/4044909582503933740?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/4044909582503933740?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/CHfwiYKi5Dc/zenoss-zencommand-daemon-overload.html" title="Zenoss zencommand daemon overload" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/05/zenoss-zencommand-daemon-overload.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMSXs6fCp7ImA9WxNRFEw.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-2036289331677141808</id><published>2009-05-11T10:57:00.003-04:00</published><updated>2009-09-08T07:44:48.514-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-08T07:44:48.514-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="&quot;Windows 7&quot;" /><title>Windows 7 RC x64 impressions</title><content type="html">I rebuilt my machine due to system instability and decided to go with Windows 7 x64 this time now that we have a release candidate. So far, this is running much better than Vista ever did and some of the new features are compelling. I think my favorite feature so far is how the window manager groups related windows behind the application icon only, and--wait for it--lets you CLOSE them from the window preview when you hover over the icon. You no longer need to raise the window first and use its close controls or right-click to close-the 'x' icon is right there on the preview. This seems simple, but it's a great improvement.&lt;br /&gt;&lt;br /&gt;Another nice feature is the selection of a wireless network. This works the same as Ubuntu does now and just shows you the available networks with a single click. Each has radio buttons to select it. No more wading through multiple screens just to change networks.&lt;br /&gt;&lt;br /&gt;I have hit one bug: I have files on my desktop (as shown in \Users\user\Desktop), but the desktop itself is completely clean. I can right-click on the desktop and create new files, but while these appear in an Explorer folder pointed to that location, they vanish from the desktop itself. Has anyone else run into this?&lt;br /&gt;** Update: I'm an idiot; it's a setting to show icons on the desktop. I am not sure why this was off by default. The setting is under Control Panel\Appearance and Personalization\Personalization\Change desktop icons, and you check &lt;span style="font-weight: bold;"&gt;User's Files&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Overall, I highly recommend giving the RC a spin.&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/F7f-5HIpRgA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/2036289331677141808/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/05/windows-7-rc-x64-impressions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/2036289331677141808?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/2036289331677141808?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/F7f-5HIpRgA/windows-7-rc-x64-impressions.html" title="Windows 7 RC x64 impressions" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/05/windows-7-rc-x64-impressions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYCQ3k6eCp7ImA9WxJSFUg.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-666838873663410286</id><published>2009-05-05T16:16:00.001-04:00</published><updated>2009-05-05T16:42:42.710-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-05T16:42:42.710-04:00</app:edited><title>Ubuntu 9.04 and .local domain access</title><content type="html">I had to re-discover why my organization's .local internal domain wouldn't resolve on Ubuntu 9.04. I was unable to ping or RDP to any of the machines using their fully-qualified names (e.g. server.domain.local), although this DID work if I used the NetBIOS names (e.g. server). After researching for a bit, I rediscovered something someone helped me with a long time ago when I thought this issue was related to DNS resolution over a PPTP VPN connection (it is not in fact related to this).&lt;br /&gt;&lt;br /&gt;The issue: the avahi daemon. As I understand it, it grabs the .local domain as its own and interferes with ping, RDP, and other communication when using the fully-qualified .local domain names. There are two fixes I know of:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Disable avahi. I understand this can interfere with apps that use avahi, so...&lt;/li&gt;&lt;li&gt;Edit the &lt;span style="font-weight: bold;"&gt;hosts&lt;/span&gt; line if /etc/nsswitch.conf to read:&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;FROM:&lt;br /&gt;hosts:     files mdns4_minimal [NOTFOUND=return] dns mdns4&lt;br /&gt;&lt;br /&gt;TO:&lt;br /&gt;hosts:     files dns mdns4_minimal mdns4&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/KRqz7Xc_cdE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/666838873663410286/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/05/ubuntu-904-and-local-domain-access.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/666838873663410286?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/666838873663410286?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/KRqz7Xc_cdE/ubuntu-904-and-local-domain-access.html" title="Ubuntu 9.04 and .local domain access" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/05/ubuntu-904-and-local-domain-access.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkICRngzcSp7ImA9WxVWFUo.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-5220629551404190599</id><published>2009-02-25T10:09:00.001-05:00</published><updated>2009-02-25T10:09:27.689-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-25T10:09:27.689-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IIS7" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET 3.5 SP1" /><category scheme="http://www.blogger.com/atom/ns#" term="WCF" /><title>IIS7 and net.tcp only WAS hosting</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I was interested in having net.tcp-only hosting (no HTTP) for a WAS-activated WCF service in IIS7. I found that IIS uses icons that trick you into thinking the site is in an error state when in reality it is not. Here are the steps I took to host my service:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;i&gt;&lt;b&gt;Create the Website&lt;/b&gt;&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;I didn't want to use a virtual directory to host my service, so I created a new web site in IIS Manager (right-click&lt;b&gt; Sites&lt;/b&gt;, then &lt;b&gt;Add Web Site&lt;/b&gt;). The key here is to select the &lt;b&gt;net.tcp&lt;/b&gt; binding type and specify the port in the &lt;b&gt;Binding Information&lt;/b&gt; section:&lt;br/&gt;&lt;br/&gt;&lt;img src='http://lh4.ggpht.com/_0UNL_lijppY/SaVS7ZX9fMI/AAAAAAAAANY/JbAzLq1DWCE/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;br/&gt;After doing this, IIS7 will show the website in what appears to be an error state (it will have a red 'X' next to the website icon and many of the right-panel &lt;b&gt;Actions&lt;/b&gt; menu options (notably the entire &lt;b&gt;Manage Web Site &lt;/b&gt;section, containing the restart/start/stop controls and Advanced Settings&lt;b&gt; &lt;/b&gt;link) will not appear. THIS SEEMS TO BE A RED HERRING. It will show the red 'X' whenever there are no HTTP bindings for the service. Here is what it looked like on a different site I set up in this manner:&lt;br/&gt;&lt;br/&gt;&lt;img src='http://lh3.ggpht.com/_0UNL_lijppY/SaVW2TWIRfI/AAAAAAAAANg/vfnysPYpztg/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;br/&gt;The service &lt;i&gt;will function&lt;/i&gt; in spite of the fact that it doesn't show as started. Starting/stopping the service must be done via the controls on the site's application pool (right-clicking it works):&lt;br/&gt;&lt;br/&gt;&lt;img src='http://lh4.ggpht.com/_0UNL_lijppY/SaVXrvGoYdI/AAAAAAAAANk/_1DiIJT5pRg/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;i&gt;&lt;b&gt;Add Filesystem Components&lt;br/&gt;&lt;/b&gt;&lt;/i&gt;&lt;br/&gt;At a minimum, you need your &lt;b&gt;.svc file&lt;/b&gt;, a &lt;b&gt;web.config&lt;/b&gt; file, and a &lt;b&gt;bin&lt;/b&gt; folder containing the assembly(ies) that implement your service in the website root folder:&lt;br/&gt;&lt;br/&gt;&lt;img src='http://lh5.ggpht.com/_0UNL_lijppY/SaVT3Rom_MI/AAAAAAAAANc/gHEmhzoV4js/%5BUNSET%5D.png?imgmax=800' style='max-width: 800px;'/&gt;&lt;br/&gt;&lt;br/&gt;The .svc file simply contains the declaration of the class that implements the service:&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;&amp;lt;%@ServiceHost language="c#" Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService" %&amp;gt;&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;In the web.config, you can omit all references to HTTP bindings, and set up the Metadata Exchange (mex) endpoint to use the net.tcp binding. You can even omit that if you don't need the service to be discoverable, although it helps to retain it:&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br/&gt;&amp;lt;configuration&amp;gt;&lt;br/&gt;  &amp;lt;system.serviceModel&amp;gt;&lt;br/&gt;    &amp;lt;services&amp;gt;&lt;br/&gt;      &amp;lt;service &lt;br/&gt;          name="Microsoft.ServiceModel.Samples.CalculatorService"&lt;br/&gt;          behaviorConfiguration="CalculatorServiceBehavior"&amp;gt;&lt;br/&gt;&lt;br/&gt;        &amp;lt;endpoint    address=""&lt;br/&gt;                    binding="netTcpBinding"&lt;br/&gt;                    contract="Microsoft.ServiceModel.Samples.ICalculator" /&amp;gt;&lt;br/&gt;        &amp;lt;endpoint    address="mex"&lt;br/&gt;                    binding="mexTcpBinding"&lt;br/&gt;                    contract="IMetadataExchange" /&amp;gt;&lt;br/&gt;      &amp;lt;/service&amp;gt;&lt;br/&gt;    &amp;lt;/services&amp;gt;&lt;br/&gt;&lt;br/&gt;    &amp;lt;!--For debugging purposes set the includeExceptionDetailInFaults attribute to true--&amp;gt;&lt;br/&gt;    &amp;lt;behaviors&amp;gt;&lt;br/&gt;      &amp;lt;serviceBehaviors&amp;gt;&lt;br/&gt;        &amp;lt;behavior name="CalculatorServiceBehavior"&amp;gt;&lt;br/&gt;          &amp;lt;serviceMetadata /&amp;gt; &amp;lt;!--You do not need this node if you remove the mex endpoint--&amp;gt;&lt;br/&gt;          &amp;lt;serviceDebug includeExceptionDetailInFaults="False" /&amp;gt;&lt;br/&gt;        &amp;lt;/behavior&amp;gt;&lt;br/&gt;      &amp;lt;/serviceBehaviors&amp;gt;&lt;br/&gt;    &amp;lt;/behaviors&amp;gt;&lt;br/&gt;  &amp;lt;/system.serviceModel&amp;gt;&lt;br/&gt;&amp;lt;/configuration&amp;gt;&lt;br/&gt;&lt;/font&gt;&lt;/blockquote&gt;Note that I did not specify any port information in the address for the endpoint using netTcpBinding as I wanted it to simply use the binding specified for the website (in the case of the website I showed creating up top, TCP over port 11111). &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;i&gt;&lt;b&gt;Create a Client&lt;/b&gt;&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;After this, you should be able to point to the service via net.tcp and generate a proxy. In Visual Studio 2008, you can use the &lt;b&gt;Add Service Reference&lt;/b&gt; facility in your client project by specifying the following, substituting your service's TCP port for the '11111':&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;net.tcp://localhost:11111/service.svc/mex&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=1135db9b-c895-4ccd-b38a-d431b27a892f' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/JwpYW_Na-FQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/5220629551404190599/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/02/iis7-and-nettcp-only-was-hosting.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/5220629551404190599?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/5220629551404190599?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/JwpYW_Na-FQ/iis7-and-nettcp-only-was-hosting.html" title="IIS7 and net.tcp only WAS hosting" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_0UNL_lijppY/SaVS7ZX9fMI/AAAAAAAAANY/JbAzLq1DWCE/s72-c/%5BUNSET%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/02/iis7-and-nettcp-only-was-hosting.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QFQH06fip7ImA9WxVWE0Q.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-2802106826428848177</id><published>2009-02-23T08:13:00.002-05:00</published><updated>2009-02-23T08:21:51.316-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-23T08:21:51.316-05:00</app:edited><title>Error on MOSS list submissions after December 2008 cumulative update</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I recently patched my MOSS development environment to the post-SP1 December 2008 cumulative updates. The patch applied successfully (although it did require two reboots, one for the WSS cumulative update and a second for the MOSS one). In testing the site after the update, everything seemed to work well until I tried to add an item to a list. I then got this "Page has been modified since you opened it" error:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_0UNL_lijppY/SaKfTMrLsEI/AAAAAAAAANU/r_LiWxS1Wac/%5BUNSET%5D.png?imgmax=800" style="max-width: 800px;" /&gt;&lt;br /&gt;&lt;br /&gt;I followed the "refresh page" link and re-attempted my submission, and it succeeded the second time. I then tried a different list and received the same results. It seems that each list needs to be touched once before new list submissions will succeed.&lt;br /&gt;&lt;br /&gt;** UPDATE: Perhaps there is a timer job that is fixing the lists. I tried another test after waiting a bit, and this time, I did not get the above refresh error upon making the first list submission. Patience may be the applicable virtue here.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img src="http://img.zemanta.com/pixy.gif?x-id=7ed6a641-093f-49cc-a8f3-a38afbf5b7fb" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/hXVY8pffyMY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/2802106826428848177/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/02/error-on-moss-list-submissions-after.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/2802106826428848177?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/2802106826428848177?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/hXVY8pffyMY/error-on-moss-list-submissions-after.html" title="Error on MOSS list submissions after December 2008 cumulative update" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_0UNL_lijppY/SaKfTMrLsEI/AAAAAAAAANU/r_LiWxS1Wac/s72-c/%5BUNSET%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/02/error-on-moss-list-submissions-after.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMGR3o4eip7ImA9WxFXEkw.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-479293771469871152</id><published>2009-02-19T20:21:00.003-05:00</published><updated>2010-05-18T15:53:46.432-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-18T15:53:46.432-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Visual Studio 2008 x64: The Project Location is Not Trusted</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Aargh... here's hoping I can save someone else some time on this. I raised a new Windows Server 2008 x64 .NET build machine and loaded up Visual Studio 2008 on there. I then tried to open up a project stored on a network share via a UNC path (\\server\share\my.sln) and got the dreaded "project location is not trusted" dialog.&lt;br /&gt;&lt;br /&gt;I started looking for the .NET Framework 2.0 Configuration utility in the Administrative Tools area so I could grant FullTrust to my share. It isn't there. Apparently it used to deploy as part of the .NET Framework 2.0 SDK, but the .NET 3.5 (Windows 2008) SDK no longer includes it. This is a shame because the alternative, CasPol.exe, is harder to work with.&lt;br /&gt;&lt;br /&gt;At any rate, I fired up a Windows Server 2008 command shell and ran the following command to trust my network share (for those not familiar with CasPol and its syntax, here is an &lt;a href="http://blogs.msdn.com/shawnfa/archive/2004/12/30/344554.aspx"&gt;excellent post&lt;/a&gt;):&lt;br /&gt;&lt;blockquote&gt;caspol.exe -m -ag 1.2 -url file://\\server/share/* FullTrust&lt;br /&gt;&lt;/blockquote&gt;However, upon opening my project, I was continuing to get prompted that the location was not trusted. Finally I noticed that the Windows Server 2008 command shell was an x64 command shell... and Visual Studio 2008 is a 32-bit (x86) application. &lt;b&gt;You have to set the security policy separately for the appropriate version of the .NET Framework.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I then navigated to the x86 version of caspol (%windir%\Microsoft.NET\Framework\v2.0.50727\caspol.exe), issued the same command... and voila, no more prompting!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img src="http://img.zemanta.com/pixy.gif?x-id=a2700f0f-aa52-4891-853b-3561589fbc01" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/0nF_VMDH9bM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/479293771469871152/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/02/visual-studio-2008-x64-project-location.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/479293771469871152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/479293771469871152?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/0nF_VMDH9bM/visual-studio-2008-x64-project-location.html" title="Visual Studio 2008 x64: The Project Location is Not Trusted" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/02/visual-studio-2008-x64-project-location.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAGRn04cSp7ImA9WxVQEEs.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-4061213179927732524</id><published>2009-01-27T09:28:00.001-05:00</published><updated>2009-01-27T09:32:07.339-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-27T09:32:07.339-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><title>Guidance on Ahead of Time Compilation for Mono 2.2?</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Does anyone have recommendations on using ahead of time compilation for the system libraries under Mono 2.2? The Mono website has &lt;a href='http://www.mono-project.com/AOT'&gt;this article&lt;/a&gt; with some (outdated?) information about how to carry it out. I tried following the instructions with the following exceptions:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;I found multiple mscorlib.dll assemblies (at /usr/lib/mono/1.0, 2.0, 2.1) and tried AOT-compiling all of them. Only the 1.0 and 2.0 assemblies succeeded. The 2.1 assembly kept referring to the 2.0 assembly and never produced the .so file for itself.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Several assemblies (System.Xml.dll for one) in the GAC failed to precompile. The AOT compilation process for that one complained that it could not load the System assembly. &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;When I tried executing Mono executables (themselves also AOT-compiled and working prior to my pre-compilation of the system assemblies), they universally failed with Mono framework errors.&lt;br/&gt;&lt;br/&gt;Has anyone successfully AOT-compiled the system assemblies under Mono 2.2? Is this even a good idea, assuming there's a way to make it work?&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/PnGOVFSvS_I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/4061213179927732524/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/01/guidance-on-ahead-of-time-compilation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/4061213179927732524?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/4061213179927732524?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/PnGOVFSvS_I/guidance-on-ahead-of-time-compilation.html" title="Guidance on Ahead of Time Compilation for Mono 2.2?" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/01/guidance-on-ahead-of-time-compilation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAASXk-fyp7ImA9WxVQEEs.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-1762715110578235462</id><published>2009-01-19T09:35:00.001-05:00</published><updated>2009-01-27T09:32:28.757-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-27T09:32:28.757-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><title>Yet another WPF HyperlinkButton control</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I wanted a general purpose implementation of the Silverlight HyperlinkButton for WPF that supported binding things like the font, font weight, etc. so I quickly rolled this puppy. It has its own Click event so clients can subscribe appropriately. I am sure there are some enhancements lurking, but it seems to do the job:&lt;br/&gt;&lt;b&gt;&lt;br/&gt;XAML:&lt;/b&gt;&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;&amp;lt;UserControl x:Class="Controls.HyperlinkButton"&lt;br/&gt;    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br/&gt;    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br/&gt;    x:Name="root"&lt;br/&gt;    &amp;gt;&lt;br/&gt;    &amp;lt;TextBlock x:Name="hyperlinkContentText" &lt;br/&gt;        Text="{Binding HyperlinkContent, ElementName=root}" &lt;br/&gt;        FontSize="{Binding FontSize, ElementName=root, Path=FontSize}"&lt;br/&gt;        FontFamily="{Binding FontFamily, ElementName=root, Path=FontFamily}" &lt;br/&gt;        FontStretch="{Binding FontStretch, ElementName=root, Path=FontStretch}"&lt;br/&gt;        FontStyle="{Binding FontStyle, ElementName=root, Path=FontStyle}"&lt;br/&gt;        FontWeight="{Binding FontWeight, ElementName=root, Path=FontWeight}"&lt;br/&gt;        Foreground="{Binding Foreground, ElementName=root, Path=Foreground}"&lt;br/&gt;        Background="{Binding Background, ElementName=root, Path=Background}"&lt;br/&gt;        Opacity="{Binding Opacity, ElementName=root, Path=Opacity}"&lt;br/&gt;        OpacityMask="{Binding OpacityMask, ElementName=root, Path=OpacityMask}"&lt;br/&gt;        MouseEnter="hyperlinkContentText_MouseEnter" &lt;br/&gt;        MouseLeave="hyperlinkContentText_MouseLeave" &lt;br/&gt;        MouseLeftButtonDown="hyperlinkContentText_MouseLeftButtonDown" /&amp;gt;&lt;br/&gt;&amp;lt;/UserControl&amp;gt;&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;b&gt;Code-behind:&lt;/b&gt;&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;using System;&lt;br/&gt;using System.Collections.Generic;&lt;br/&gt;using System.Linq;&lt;br/&gt;using System.Text;&lt;br/&gt;using System.Windows;&lt;br/&gt;using System.Windows.Controls;&lt;br/&gt;using System.Windows.Data;&lt;br/&gt;using System.Windows.Documents;&lt;br/&gt;using System.Windows.Input;&lt;br/&gt;using System.Windows.Media;&lt;br/&gt;using System.Windows.Media.Imaging;&lt;br/&gt;using System.Windows.Navigation;&lt;br/&gt;using System.Windows.Shapes;&lt;br/&gt;&lt;br/&gt;namespace Controls&lt;br/&gt;{&lt;br/&gt;    /// &amp;lt;summary&amp;gt;&lt;br/&gt;    /// Interaction logic for HyperlinkButton.xaml&lt;br/&gt;    /// &amp;lt;/summary&amp;gt;&lt;br/&gt;    public partial class HyperlinkButton : UserControl&lt;br/&gt;    {&lt;br/&gt;        #region dependency properties&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Dependency property for hyperlink text content.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        public static readonly DependencyProperty HyperlinkContentProperty;&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region routed events&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Routed event for handling the "button" click.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        public static readonly RoutedEvent ClickEvent;&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region ctor&lt;br/&gt;        #region static&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Initializes the &amp;lt;see cref="HyperlinkButton"/&amp;gt; class.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        static HyperlinkButton()&lt;br/&gt;        {&lt;br/&gt;            FrameworkPropertyMetadata fpm = new FrameworkPropertyMetadata(string.Empty);&lt;br/&gt;            HyperlinkContentProperty = DependencyProperty.Register(&lt;br/&gt;                "HyperlinkContent", &lt;br/&gt;                typeof(string), &lt;br/&gt;                typeof(FrameworkElement), &lt;br/&gt;                fpm);&lt;br/&gt;&lt;br/&gt;            ClickEvent = EventManager.RegisterRoutedEvent(&lt;br/&gt;                "Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(HyperlinkButton));&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region instance&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Initializes a new instance of the &amp;lt;see cref="HyperlinkButton"/&amp;gt; class.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        public HyperlinkButton()&lt;br/&gt;        {&lt;br/&gt;            InitializeComponent();&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region properties&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Gets or sets the content of the hyperlink.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;value&amp;gt;The content of the hyperlink.&amp;lt;/value&amp;gt;&lt;br/&gt;        public string HyperlinkContent&lt;br/&gt;        {&lt;br/&gt;            get { return (string)GetValue(HyperlinkContentProperty); }&lt;br/&gt;            set { SetValue(HyperlinkContentProperty, value); }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Occurs when [click].&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        public event RoutedEventHandler Click&lt;br/&gt;        {&lt;br/&gt;            add&lt;br/&gt;            {&lt;br/&gt;                AddHandler(ClickEvent, value);&lt;br/&gt;            }&lt;br/&gt;            remove&lt;br/&gt;            {&lt;br/&gt;                RemoveHandler(ClickEvent, value);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region event handlers&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Handles the MouseEnter event of the hyperlinkContentText control.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="sender"&amp;gt;The source of the event.&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="e"&amp;gt;The &amp;lt;see cref="System.Windows.Input.MouseEventArgs"/&amp;gt; instance containing the event data.&amp;lt;/param&amp;gt;&lt;br/&gt;        private void hyperlinkContentText_MouseEnter(object sender, MouseEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            hyperlinkContentText.TextDecorations = TextDecorations.Underline;&lt;br/&gt;            hyperlinkContentText.Cursor = Cursors.Hand;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Handles the MouseLeave event of the hyperlinkContentText control.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="sender"&amp;gt;The source of the event.&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="e"&amp;gt;The &amp;lt;see cref="System.Windows.Input.MouseEventArgs"/&amp;gt; instance containing the event data.&amp;lt;/param&amp;gt;&lt;br/&gt;        private void hyperlinkContentText_MouseLeave(object sender, MouseEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            hyperlinkContentText.TextDecorations = null;&lt;br/&gt;            hyperlinkContentText.Cursor = Cursors.Arrow;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Handles the MouseLeftButtonDown event of the hyperlinkContentText control. Maps it to the click&lt;br/&gt;        /// event of this control and suppresses it after raising Click.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="sender"&amp;gt;The source of the event.&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="e"&amp;gt;The &amp;lt;see cref="System.Windows.Input.MouseButtonEventArgs"/&amp;gt; instance containing the event data.&amp;lt;/param&amp;gt;&lt;br/&gt;        private void hyperlinkContentText_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            e.Handled = true;&lt;br/&gt;            RaiseEvent(new RoutedEventArgs(ClickEvent, this));&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;    }&lt;br/&gt;}&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/oGXT6C8L0Bw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/1762715110578235462/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2009/01/yet-another-wpf-hyperlinkbutton-control.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1762715110578235462?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1762715110578235462?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/oGXT6C8L0Bw/yet-another-wpf-hyperlinkbutton-control.html" title="Yet another WPF HyperlinkButton control" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2009/01/yet-another-wpf-hyperlinkbutton-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEACQHs9fSp7ImA9WxVQEEs.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-91541690157834101</id><published>2008-12-19T16:11:00.002-05:00</published><updated>2009-01-27T09:32:41.565-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-27T09:32:41.565-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zenoss" /><title>Zenoss 2.3.2 LDAP authentication with Ubuntu 8.04 and the stack installer</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I was able to get the Active Directory authentication module loaded for our Ubuntu Server 8.04 stack installer-based Zenoss 2.3.2 installation. There is a bit of &lt;a href="http://lists.zenoss.org/pipermail/zenoss-users/2008/019462.html"&gt;confusion about how to do this, &lt;/a&gt;as the &lt;a href="http://www.zenoss.com/community/docs/howtos/how-to-authenticate-via-ldap/"&gt;wiki instructions for setup&lt;/a&gt; assume you are using the RPM-based installer or have installed from source. This turned out to not be too difficult given that the Ubuntu 8.04 distribution comes with the &lt;b&gt;python-ldap&lt;/b&gt; package. In summary, you need to link in the distribution's installed python-ldap components into the site packages path &lt;i&gt;for Zenoss's local Python 2.4 runtime&lt;/i&gt; and compile them. Here are the steps (these assume you have already downloaded and placed the LDAPUserFolder and LDAPMultiPlugins packages in the path identified in the wiki instructions):&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Install python-ldap&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;(As root)&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:monospace;"&gt;aptitude install python-ldap&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;u&gt;&lt;b&gt;Link python-ldap components to Zenoss's site packages path&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;We need the _ldap.so binary compiled against Python 2.4 and the source files. As the zenoss user:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:monospace;"&gt;#The Zenoss local Python site package path is $ZENHOME/lib/python!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;cd $ZENHOME/lib/python&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;mkdir ldap&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;mkdir ldap/schema&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldif.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldapurl.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/lib/python2.4/site-packages/_ldap.so&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;cd ldap&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/async.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/controls.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/filter.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/__init__.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/modlist.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/cidict.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/dn.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/functions.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/ldapobject.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/sasl.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;cd schema&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/schema/__init__.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/schema/models.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/schema/subentry.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;ln -s /usr/share/pyshared/ldap/schema/tokenizer.py&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;u&gt;&lt;b&gt;Compile .py files&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Now that we have the files linked in from the global shared Python path (where the python-ldap deb installer put them), we need to compile all of the .py files using Zenoss's local python 2.4 installation:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:monospace;"&gt;cd $ZENHOME/lib/python&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;python /usr/local/zenoss/python/lib/python2.4/py_compile.py ldif.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;python /usr/local/zenoss/python/lib/python2.4/py_compile.py ldapurl.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;cd ldap&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;python /usr/local/zenoss/python/lib/python2.4/py_compile.py *.py&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;cd schema&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;python /usr/local/zenoss/python/lib/python2.4/py_compile.py *.py&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family:monospace;"&gt;&lt;span style="font-family:sans-serif;"&gt;Now that everything is compiled, restart zope (as zenoss, &lt;b&gt;zopectl restart&lt;/b&gt;) and you can proceed with the rest of the instructions in the above wiki article. You will now see the &lt;b&gt;ActiveDirectory Multi Plugin&lt;/b&gt;&lt;/span&gt; &lt;span style="font-family:sans-serif;"&gt;in the plugin list on the http://zenoss-installation:8080/zport/acl_users/manage_workspace page.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/8DpxTXeUn2g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/91541690157834101/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2008/12/zenoss-232-ldap-authentication-with.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/91541690157834101?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/91541690157834101?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/8DpxTXeUn2g/zenoss-232-ldap-authentication-with.html" title="Zenoss 2.3.2 LDAP authentication with Ubuntu 8.04 and the stack installer" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2008/12/zenoss-232-ldap-authentication-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUFR3kzeCp7ImA9WxRaFEk.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-1962337934397486948</id><published>2008-12-16T10:43:00.002-05:00</published><updated>2008-12-16T10:43:36.780-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-16T10:43:36.780-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DFS" /><title>Faster DFS recovery application</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;In trying to set up &lt;a href="http://www.ditii.com/2008/04/05/windows-server-2008-dfs-replication/"&gt;DFS replication&lt;/a&gt;, we had a number of files that were not present in both the primary DFS partner and the destination partner. In this case, DFS will move all of the files "missing" from the primary partner out of the tree and into a separate pre-existing path on each destination volume. Microsoft will provide you with a recovery script that calls xcopy to, based on the generated PreExistingManifest.xml file, move the files back into their original locations.&lt;br /&gt;&lt;br /&gt;The problem we had was that shelling out to xcopy when you have millions of relatively small files was going to take, well, months to complete. I built the following .NET (3.5, C#) console application which proved to do this at hundreds of times the rate of the Microsoft script. The only issue is that it does not replicate permissions; since we did not need that for our recovery, it fit the bill.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Please use at your own risk. I make no warranties. I recommend specifying an alternate recovery path when calling the application so you can validate output first.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;small&gt;&lt;span style="font-family:Courier New;"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Xml.Linq;&lt;br /&gt;&lt;br /&gt;namespace DFSRecovery&lt;br /&gt;{&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Handles copying DFS files back into the original folder structure.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    class Program&lt;br /&gt;    {&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// The main application loop.&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="args"&amp;gt;The args. See usage text.&amp;lt;/param&amp;gt;&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            if (args.Length &amp;lt; 3)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine("\nDFSRecovery version " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + " [Arthur Penn, http://devarthur.blogspot.com]");&lt;br /&gt;                Console.WriteLine("Usage: DFSRecovery.exe \"\\\\path\\to\\PreExistingManifest.xml\" \"\\\\path\\to\\pre-existing\\folder\" \"\\\\path\\to\\output\\folder\" [print only=true|false]");&lt;br /&gt;                Environment.Exit(1);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // Load the PreExistingManifest.xml document and select the values we need&lt;br /&gt;            var doc = XDocument.Load(args[0]);&lt;br /&gt;            string preExistingFolder = args[1];&lt;br /&gt;            string outputFolder = args[2];&lt;br /&gt;            bool printOnly = false;&lt;br /&gt;            if (args.Length &amp;gt; 3)&lt;br /&gt;            {&lt;br /&gt;                printOnly = bool.Parse(args[3]);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            int rc = 0;&lt;br /&gt;&lt;br /&gt;            var actions = from n in doc.Descendants("Resource")&lt;br /&gt;                          select new {&lt;br /&gt;                              FileOrFolder = ((string)n.Descendants("Attributes").First()),&lt;br /&gt;                              Source = Path.Combine(preExistingFolder, (string)n.Descendants("NewName").First()),&lt;br /&gt;                              Destination = Path.Combine(outputFolder, ((string)n.Descendants("Path").First()).Substring(7,&lt;br /&gt;                                ((string)n.Descendants("Path").First()).Length - 7))&lt;br /&gt;                          };&lt;br /&gt;&lt;br /&gt;            foreach (var item in actions)&lt;br /&gt;            {&lt;br /&gt;                try&lt;br /&gt;                {&lt;br /&gt;                    if (File.Exists(item.Source))&lt;br /&gt;                    {&lt;br /&gt;                        if (File.Exists(item.Destination))&lt;br /&gt;                        {&lt;br /&gt;                            if (printOnly)&lt;br /&gt;                            {&lt;br /&gt;                                Console.WriteLine("Target file exists: \"" + item.Destination + "\"");&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                        else&lt;br /&gt;                        {&lt;br /&gt;                            CopyFile(item.Source, item.Destination, printOnly);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        // It's a directory&lt;br /&gt;                        CopyDirectory(item.Source, item.Destination, printOnly);&lt;br /&gt;                        //break;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                catch (Exception x)&lt;br /&gt;                {&lt;br /&gt;                    rc = 1;&lt;br /&gt;                    Console.WriteLine("Exception copying \"" + item.Source + "\" to \"" + item.Destination +&lt;br /&gt;                        "\": " + x.ToString());&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            Environment.Exit(rc);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// Ensures the directory is present.&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="path"&amp;gt;The path.&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="isDirectory"&amp;gt;if set to &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; [is directory].&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="printOnly"&amp;gt;if set to &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; [print only].&amp;lt;/param&amp;gt;&lt;br /&gt;        static void EnsureDirectory(string path, bool isDirectory, bool printOnly)&lt;br /&gt;        {&lt;br /&gt;            string targetFolder = (isDirectory ? path : path.Substring(0, path.LastIndexOf("\\")));&lt;br /&gt;            if (Directory.Exists(targetFolder))&lt;br /&gt;            {&lt;br /&gt;                if (printOnly)&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine("Target folder exists: \"" + targetFolder + "\"");&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                if (printOnly)&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine("Creating target folder: \"" + targetFolder + "\"");&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    Directory.CreateDirectory(targetFolder);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// Copies the directory.&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="sourcePath"&amp;gt;The source path.&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="destinationPath"&amp;gt;The destination path.&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="printOnly"&amp;gt;if set to &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; [print only].&amp;lt;/param&amp;gt;&lt;br /&gt;        static void CopyDirectory(string sourcePath, string destinationPath, bool printOnly)&lt;br /&gt;        {&lt;br /&gt;            EnsureDirectory(destinationPath, true, printOnly);&lt;br /&gt;            foreach (string file in Directory.GetFiles(sourcePath))&lt;br /&gt;            {&lt;br /&gt;//#if DEBUG&lt;br /&gt;//                Console.Write("From CopyDirectory: ");&lt;br /&gt;//#endif&lt;br /&gt;                string fileName = file.Substring(file.LastIndexOf("\\") + 1);&lt;br /&gt;                CopyFile(file, Path.Combine(destinationPath, fileName), printOnly);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // Recursively process directories&lt;br /&gt;            foreach (string directory in Directory.GetDirectories(sourcePath))&lt;br /&gt;            {&lt;br /&gt;                string sourceSubDirectory = directory.Substring(directory.LastIndexOf("\\") + 1);&lt;br /&gt;                string destinationSubDirectory = Path.Combine(destinationPath, sourceSubDirectory);&lt;br /&gt;&lt;br /&gt;                CopyDirectory(directory, destinationSubDirectory, printOnly);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;        /// Copies the file.&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="sourcePath"&amp;gt;The source path.&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="destinationPath"&amp;gt;The destination path.&amp;lt;/param&amp;gt;&lt;br /&gt;        /// &amp;lt;param name="printOnly"&amp;gt;if set to &amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; [print only].&amp;lt;/param&amp;gt;&lt;br /&gt;        static void CopyFile(string sourcePath, string destinationPath, bool printOnly)&lt;br /&gt;        {&lt;br /&gt;            if (printOnly)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine("Copying \"" + sourcePath + "\" to \"" + destinationPath + "\"");&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                EnsureDirectory(destinationPath, false, printOnly);&lt;br /&gt;                File.Copy(sourcePath, destinationPath);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/small&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/3kmK3hYsXW4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/1962337934397486948/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2008/12/faster-dfs-recovery-application.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1962337934397486948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1962337934397486948?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/3kmK3hYsXW4/faster-dfs-recovery-application.html" title="Faster DFS recovery application" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2008/12/faster-dfs-recovery-application.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEADQ3w6eSp7ImA9WxVQEEs.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-5376463061463930364</id><published>2008-11-13T09:07:00.001-05:00</published><updated>2009-01-27T09:32:52.211-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-27T09:32:52.211-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Capturing Control Key Sequences in Silverlight 2</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;It took me a while to locate this, but I found in &lt;a href='http://msdn.microsoft.com/en-us/library/cc189015%28VS.95%29.aspx' target='_blank'&gt;this MSDN article&lt;/a&gt; how to capture control key sequences in Silverlight 2. I was expecting to be able to 'and' the control key with the pressed alpha key, but that's not the way it works. I attached the following event handler to my layout root grid's KeyUp event. This performs a 'save' when pressing Ctrl+S, and 'save and close' when pressing Ctrl+Shift+S:&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// Handles keyboard shortcuts.&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="sender"&amp;gt;Event sender.&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="e"&amp;gt;Event args.&amp;lt;/param&amp;gt;&lt;br/&gt;        private void LayoutRoot_KeyUp(object sender, KeyEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            if ((Keyboard.Modifiers &amp;amp; ModifierKeys.Control) == ModifierKeys.Control)&lt;br/&gt;            {&lt;br/&gt;                switch (e.Key)&lt;br/&gt;                {&lt;br/&gt;                    case Key.S:&lt;br/&gt;                        // Ctrl+S: save; Ctrl+Shift+S: save and close&lt;br/&gt;                        e.Handled = true;&lt;br/&gt;                        SaveMyItem((Keyboard.Modifiers &amp;amp; ModifierKeys.Shift) == ModifierKeys.Shift);&lt;br/&gt;                        break;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/jkjf0ZaZxj0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/5376463061463930364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2008/11/capturing-control-key-sequences-in.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/5376463061463930364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/5376463061463930364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/jkjf0ZaZxj0/capturing-control-key-sequences-in.html" title="Capturing Control Key Sequences in Silverlight 2" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2008/11/capturing-control-key-sequences-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAMR3c5cSp7ImA9WxVQEEs.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-1173110776252791863</id><published>2008-10-28T10:36:00.004-04:00</published><updated>2009-01-27T09:33:06.929-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-27T09:33:06.929-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Compiling Mono 2.0.1 on Ubuntu Gutsy Server 8.04</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I didn't want to use the aging Mono version present in Ubuntu Server 8.04, so I set out to compile Mono 2.0 (and subsequently 2.0.1, via the same process). This turned out not to be too bad.&lt;br /&gt;&lt;br /&gt;First, install the requisite packages:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;"&gt;aptitude install build-essential swig autoconf gawk mono-common binfmt-support bison pkg-config libglib2.0-dev&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Yes, that's not a typo--you do want one of Ubuntu's Mono packages, mono-common. This will enable shell execution of Mono executables via ./ notation rather than having to execute "mono /path/to/executable."&lt;br /&gt;&lt;br /&gt;Once you are done, download and unpack the source for Mono. This will get you 2.0.1:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;"&gt;wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.0.1.tar.bz2&lt;br /&gt;tar xf mono-2.0.1.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Now you are ready to build and install Mono (the make step will take a while):&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;"&gt;cd mono-2.0.1&lt;br /&gt;./configure --with-libgdiplus=no&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;Lastly, you need one symlink so the binfmt-support package can execute Mono executables directly via the shell:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;"&gt;ln -s /usr/local/bin/mono /usr/bin/cli&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;That's it. Typing the command "mono -V" should yield the about information for Mono 2.0.1. Follow the &lt;a name="N1021B"&gt;&lt;/a&gt;&lt;a href="http://www.ibm.com/developerworks/library/l-mono/index.html"&gt;instructions under "&lt;/a&gt;&lt;span class="atitle"&gt;&lt;a href="http://www.ibm.com/developerworks/library/l-mono/index.html"&gt;Testing the Mono installation"&lt;/a&gt; and confirm you can not only build and execute the example.exe application, but that you can execute it with ./ notation (e.g. ./example.exe).&lt;br /&gt;&lt;br /&gt;Cheers!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/7RX22hMGgZU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/1173110776252791863/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2008/10/compiling-mono-201-on-ubuntu-gutsy.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1173110776252791863?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/1173110776252791863?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/7RX22hMGgZU/compiling-mono-201-on-ubuntu-gutsy.html" title="Compiling Mono 2.0.1 on Ubuntu Gutsy Server 8.04" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2008/10/compiling-mono-201-on-ubuntu-gutsy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IBQXk8eip7ImA9WxRQFUU.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-8938829205170093921</id><published>2008-10-09T17:49:00.002-04:00</published><updated>2008-10-09T17:59:10.772-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-09T17:59:10.772-04:00</app:edited><title>D-Link DWL-G122 wireless USB adapter on Vista</title><content type="html">I have a D-Link DWL-G122 wireless adapter (B/G) that I wanted to get working on Vista. I found a few posts, including &lt;a href="http://thevistaforums.com/index.php?showtopic=5351"&gt;this forum thread&lt;/a&gt;, but nothing worked for me. It turns out I have an older revision &lt;span style="font-weight: bold;"&gt;B&lt;/span&gt; adapter... and I ended up getting this to work by installing the Windows XP drivers for the revision B from D-Link:&lt;br /&gt;&lt;br /&gt;ftp://files.dlink.com.au/products/DWL-G122/REV_B/Drivers/&lt;br /&gt;&lt;br /&gt;I installed this by right-clicking the adapter in Device Manager, choosing:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Update Driver Software...&lt;/li&gt;&lt;li&gt;Browse my computer for driver software&lt;/li&gt;&lt;li&gt;Let me pick from a list of device drivers on my computer&lt;/li&gt;&lt;li&gt;Network Adapters category&lt;/li&gt;&lt;li&gt;"Have Disk" button... then finally browsing to the extracted contents of the above driver.&lt;/li&gt;&lt;/ol&gt;Enjoy.&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/YZcjEhBfTiw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/8938829205170093921/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2008/10/d-link-dwl-g122-wireless-usb-adapter-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/8938829205170093921?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/8938829205170093921?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/YZcjEhBfTiw/d-link-dwl-g122-wireless-usb-adapter-on.html" title="D-Link DWL-G122 wireless USB adapter on Vista" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2008/10/d-link-dwl-g122-wireless-usb-adapter-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8NQH09fSp7ImA9WxRWEk0.&quot;"><id>tag:blogger.com,1999:blog-2243616480538523950.post-4090327251667301292</id><published>2008-10-05T19:02:00.002-04:00</published><updated>2008-10-28T10:41:31.365-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-28T10:41:31.365-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vista" /><title>Vista power saving never activates... thoughts?</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I was hoping for some help with getting Vista's power saving to function. I have a Windows Vista Business Service Pack 1 (x64) installation. I have power options set up as follows:&lt;br/&gt;&lt;br/&gt;Turn off the display:&lt;br/&gt;[on battery] 5 minutes&lt;br/&gt;[plugged in] 20 minutes&lt;br/&gt;&lt;br/&gt;Put the computer to sleep:&lt;br/&gt;[on battery] 15 minutes&lt;br/&gt;[plugged in] 1 hour&lt;br/&gt;&lt;br/&gt;Initially, power saving was working as expected. However, now it never enters power saving mode or even turns off the monitor. I have tried changing the plan settings around (including changing from one plan to another and creating a custom plan with the desired settings) with no success.&lt;br/&gt;&lt;br/&gt;Does anyone have any ideas?&lt;br/&gt;&lt;br/&gt;** UPDATE 28 Oct ** This was caused by the Vista Photos screensaver! Other screensavers allowed power saving to function, but the Photos screensaver did not. &lt;br/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/xBRzKO/~4/0bL4NxcQGZk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devarthur.blogspot.com/feeds/4090327251667301292/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://devarthur.blogspot.com/2008/10/vista-power-saving-never-activates.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/4090327251667301292?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2243616480538523950/posts/default/4090327251667301292?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/xBRzKO/~3/0bL4NxcQGZk/vista-power-saving-never-activates.html" title="Vista power saving never activates... thoughts?" /><author><name>The Penns</name><uri>http://www.blogger.com/profile/17211487566848322316</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devarthur.blogspot.com/2008/10/vista-power-saving-never-activates.html</feedburner:origLink></entry></feed>
