<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2243616480538523950</id><updated>2011-12-16T07:02:25.460-05: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 type='text'>/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='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Arthur Penn</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>100</openSearch:itemsPerPage><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='IIS7'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1033234784013969213?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1033234784013969213'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2010/07/diagnosing-4013-errors-with-new-iis-7.html' title='Diagnosing 401.3 errors with a new IIS 7 website deployment'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8133611671568889614?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8133611671568889614'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2010/06/android-eclipse-and-windows-7-x64.html' title='Android, Eclipse, and Windows 7 x64'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='adobe'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6375475956231025729?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6375475956231025729'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2010/04/someone-please-tell-me.html' title='Someone please tell me...'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6018310089360925788?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6018310089360925788'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2010/03/error-moving-zenoss-database-to-new.html' title='Error moving the Zenoss database to a new MySQL server'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7703811561216726170?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7703811561216726170'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2010/03/deleting-all-devices-from-zenoss-with.html' title='Deleting all devices from Zenoss with zendmd'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Caliburn'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-2554987205254214038?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/2554987205254214038'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2010/02/using-caliburn-inside-of-windows-forms.html' title='Using Caliburn inside of Windows Forms with WPF UserControls/ElementHost'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='MapPoint'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7296133106994911502?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7296133106994911502'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2010/01/silent-install-of-microsoft-mappoint.html' title='Silent Installation of Microsoft MapPoint 2009 -- without changing browser settings'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7497111700484415007?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7497111700484415007'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/09/best-practice-around-zenoss-template.html' title='Best practice around Zenoss template bindings'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6712892716675117103?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6712892716675117103'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/09/updating-ui-from-backgroundworker-in.html' title='Updating the UI from a BackgroundWorker in WPF'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3133498736879929025?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3133498736879929025'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/09/programmatically-creating-recursive.html' title='Programmatically creating a recursive view with WSS web services'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-5592963584217645051?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/5592963584217645051'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/07/zenoss-233-error-moving-device.html' title='Zenoss 2.3.3 error moving device organizers'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-4044909582503933740?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4044909582503933740'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/05/zenoss-zencommand-daemon-overload.html' title='Zenoss zencommand daemon overload'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Windows 7&quot;'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-2036289331677141808?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/2036289331677141808'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/05/windows-7-rc-x64-impressions.html' title='Windows 7 RC x64 impressions'/><author><name>Arthur Penn</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></entry><entry><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><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-666838873663410286?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/666838873663410286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/666838873663410286'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/05/ubuntu-904-and-local-domain-access.html' title='Ubuntu 9.04 and .local domain access'/><author><name>Arthur Penn</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>4</thr:total></entry><entry><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><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 type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-5220629551404190599?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/5220629551404190599'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/02/iis7-and-nettcp-only-was-hosting.html' title='IIS7 and net.tcp only WAS hosting'/><author><name>Arthur Penn</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></entry><entry><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><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-2802106826428848177?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/2802106826428848177'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/02/error-on-moss-list-submissions-after.html' title='Error on MOSS list submissions after December 2008 cumulative update'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-479293771469871152?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/479293771469871152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/479293771469871152'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/02/visual-studio-2008-x64-project-location.html' title='Visual Studio 2008 x64: The Project Location is Not Trusted'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-4061213179927732524?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4061213179927732524'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/01/guidance-on-ahead-of-time-compilation.html' title='Guidance on Ahead of Time Compilation for Mono 2.2?'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1762715110578235462?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1762715110578235462'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2009/01/yet-another-wpf-hyperlinkbutton-control.html' title='Yet another WPF HyperlinkButton control'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-91541690157834101?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/91541690157834101'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/12/zenoss-232-ldap-authentication-with.html' title='Zenoss 2.3.2 LDAP authentication with Ubuntu 8.04 and the stack installer'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='DFS'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1962337934397486948?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1962337934397486948'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/12/faster-dfs-recovery-application.html' title='Faster DFS recovery application'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-5376463061463930364?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/5376463061463930364'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/11/capturing-control-key-sequences-in.html' title='Capturing Control Key Sequences in Silverlight 2'/><author><name>Arthur Penn</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></entry><entry><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><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 type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1173110776252791863?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1173110776252791863'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/10/compiling-mono-201-on-ubuntu-gutsy.html' title='Compiling Mono 2.0.1 on Ubuntu Gutsy Server 8.04'/><author><name>Arthur Penn</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></entry><entry><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><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8938829205170093921?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8938829205170093921'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/10/d-link-dwl-g122-wireless-usb-adapter-on.html' title='D-Link DWL-G122 wireless USB adapter on Vista'/><author><name>Arthur Penn</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></entry><entry><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><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-4090327251667301292?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&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'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4090327251667301292'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/10/vista-power-saving-never-activates.html' title='Vista power saving never activates... thoughts?'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7428784128252253924</id><published>2008-10-01T09:49:00.002-04:00</published><updated>2009-01-27T09:33:18.059-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>MOSS doesn't like having the indexer role moved</title><content type='html'>We needed to expand our MOSS farm from one server to two so that we could have the search and indexing performed by a second machine, as we were putting the one poor server under significant periodic load. So, we stood up the second instance and joined it to the farm, and attempted to assign the search and indexing roles to this new instance. After doing so, when we would go to the search settings link in the SSP, we got the following message:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;“The search service is currently offline.&lt;span&gt;  &lt;/span&gt;Visit the Services on Server page&lt;/i&gt; &lt;i&gt;in SharePoint Central Administration to verify whether the service is &lt;/i&gt;&lt;i&gt;enabled. This might also be because an indexer move is in progress.”&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I searched and found wildly different solutions for fixing this. I ended up doing the following things to correct it:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;On the new index server, I had to stop and restart the Office Search role after the initial move. I did this with stsadm via the following commands: &lt;span style="font-weight: bold;"&gt;1) stsadm -o osearch -action stop  2) stsadm -o osearch -action start -role IndexQuery -farmserviceaccount DOMAIN\accountname -farmservicepassword PASSWORD&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Access the &lt;span style="font-weight: bold;"&gt;SSP administration page&lt;/span&gt; (http://url-of-central-admin/_admin/managessp.aspx), and on the drop-down menu for the SSP in question, choose &lt;span style="font-weight: bold;"&gt;Edit Properties&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;In the section titled &lt;span style="font-weight: bold;"&gt;Process Accounts with access to this SSP&lt;/span&gt;, add the search service account to the dialog box.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the section titled &lt;span style="font-weight: bold;"&gt;Index Server&lt;/span&gt;, select the new index server for the farm.&lt;/li&gt;&lt;li&gt;Click &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt; to apply your changes.&lt;/li&gt;&lt;li&gt;Reboot the index server and restart full crawls of the content sources.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7428784128252253924?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7428784128252253924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/10/moss-doesnt-like-having-indexer-role.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7428784128252253924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7428784128252253924'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/10/moss-doesnt-like-having-indexer-role.html' title='MOSS doesn&apos;t like having the indexer role moved'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-799958738310407696</id><published>2008-09-25T08:29:00.007-04:00</published><updated>2008-09-25T08:38:05.342-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Enable Silverlight in MOSS - web.config changes</title><content type='html'>I know there are numerous articles on this, but here are the web.config changes I made to enable Silverlight in Microsoft Office SharePoint Server 2007 (modified parent node names in &lt;span style="font-weight: bold;"&gt;bold&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configuration/configSections&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&amp;gt;&lt;br /&gt;  &amp;lt;sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&amp;gt;&lt;br /&gt;    &amp;lt;section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /&amp;gt;&lt;br /&gt;    &amp;lt;sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&amp;gt;&lt;br /&gt;      &amp;lt;section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /&amp;gt;&lt;br /&gt;      &amp;lt;section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" /&amp;gt;&lt;br /&gt;      &amp;lt;section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /&amp;gt;&lt;br /&gt;      &amp;lt;section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /&amp;gt;&lt;br /&gt;    &amp;lt;/sectionGroup&amp;gt;&lt;br /&gt;  &amp;lt;/sectionGroup&amp;gt;&lt;br /&gt;&amp;lt;/sectionGroup&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configuration/&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;system.web/httpHandlers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;remove verb="*" path="*.asmx" /&amp;gt;&lt;br /&gt;  &amp;lt;add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&amp;gt;&lt;br /&gt;  &amp;lt;add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&amp;gt;&lt;br /&gt;  &amp;lt;add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configuration/&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;system.web/httpModules&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&amp;gt;&lt;br /&gt;  &amp;lt;add name="Session" type="System.Web.SessionState.SessionStateModule" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configuration/&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;system.web/compilation/assemblies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /&amp;gt;&lt;br /&gt;    &amp;lt;add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /&amp;gt;&lt;br /&gt;    &amp;lt;add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&amp;gt;&lt;br /&gt;    &amp;lt;add assembly="System.Web.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&amp;gt;&lt;br /&gt;    &amp;lt;add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configuration/&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;system.web/pages&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;controls&amp;gt;&lt;br /&gt;    &amp;lt;add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&amp;gt;&lt;br /&gt;    &amp;lt;add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&amp;gt;&lt;br /&gt;  &amp;lt;/controls&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configuration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;system.web.extensions&amp;gt;&lt;br /&gt;&amp;lt;scripting&amp;gt;&lt;br /&gt;  &amp;lt;webServices /&amp;gt;&lt;br /&gt;&amp;lt;/scripting&amp;gt;&lt;br /&gt;&amp;lt;/system.web.extensions&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-799958738310407696?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/799958738310407696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/09/enable-silverlight-in-moss-webconfig.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/799958738310407696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/799958738310407696'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/09/enable-silverlight-in-moss-webconfig.html' title='Enable Silverlight in MOSS - web.config changes'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-908636042728200974</id><published>2008-09-11T13:23:00.005-04:00</published><updated>2009-01-27T09:33:36.648-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRM'/><title type='text'>Customing Microsoft Dynamics CRM 4.0 menus and toolbars</title><content type='html'>I've been embarking on a new adventure of staging Microsoft Dynamics CRM 4.0 for my company to replace a home-grown, ad-hoc CRM system. As part of this, I have needed to customize some of its menus and toolbars.&lt;br /&gt;&lt;br /&gt;The basic mechanism for doing this is to:&lt;br /&gt;&lt;br /&gt;1. Enable ISV Config. You do this by navigating to &lt;span style="font-weight: bold;"&gt;Settings | Administration | System Settings | Customization tab&lt;/span&gt;, then choosing one of the client options under &lt;span style="font-weight: bold;"&gt;"Custom menus and toolbars:"&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_0UNL_lijppY/SMlVejmbzHI/AAAAAAAAAGM/4kAOe-jWpok/s1600-h/CRMISVConfig-enable.png"&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0UNL_lijppY/SMlYwao9tII/AAAAAAAAAG8/3EHHqLHrXVQ/s1600-h/CRMISVConfig-enable.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_0UNL_lijppY/SMlYwao9tII/AAAAAAAAAG8/3EHHqLHrXVQ/s320/CRMISVConfig-enable.png" alt="" id="BLOGGER_PHOTO_ID_5244820829857756290" border="0" /&gt;&lt;/a&gt;&lt;/blockquote&gt;2. Once done, export the ISV Config and change it. To get a copy of it, go to &lt;span style="font-weight: bold;"&gt;Settings | Customization | Export Customizations&lt;/span&gt;, select the &lt;span style="font-weight: bold;"&gt;ISV Config&lt;/span&gt; item, and click the &lt;span style="font-weight: bold;"&gt;Export Selected Customizations&lt;/span&gt; button.&lt;br /&gt;&lt;br /&gt;You should either keep a copy of this file for reference before changing it, as it contains many sample objects, or at least refer to &lt;a href="http://msdn.microsoft.com/en-us/library/aa680301.aspx"&gt;this MSDN article&lt;/a&gt; which references possibly the same sample.&lt;br /&gt;&lt;br /&gt;You may wonder how to get rid of all the default customizations present in the initial sample--it's chock full of menus, toolbars, etc. Here is the &lt;a href="http://sites.google.com/site/devarthur/blog-support/isv.config.minimal.xml.zip?attredirects=0"&gt;minimal ISV Config XML structure&lt;/a&gt; without any of the sample objects. Add your own objects to this minimal file, and then...&lt;br /&gt;&lt;br /&gt;3. Re-import your modified ISV.config.xml file (&lt;span style="font-weight: bold;"&gt;Settings | Customization | Import Customizations&lt;/span&gt;). MS CRM validates the XML upon upload, not upon import, so you will receive a notice of any validation errors immediately upon clicking the &lt;span style="font-weight: bold;"&gt;Upload&lt;/span&gt; button. Don't forget to click the &lt;span style="font-weight: bold;"&gt;Import Selected Customizations&lt;/span&gt; button after you have a successful upload. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-908636042728200974?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/908636042728200974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/09/customing-microsoft-dynamics-crm-40.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/908636042728200974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/908636042728200974'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/09/customing-microsoft-dynamics-crm-40.html' title='Customing Microsoft Dynamics CRM 4.0 menus and toolbars'/><author><name>Arthur Penn</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://2.bp.blogspot.com/_0UNL_lijppY/SMlYwao9tII/AAAAAAAAAG8/3EHHqLHrXVQ/s72-c/CRMISVConfig-enable.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1147427174512495775</id><published>2008-09-08T11:13:00.004-04:00</published><updated>2008-09-08T12:13:48.299-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight web part - Code Access Security and Startup Permissions</title><content type='html'>I built a web part based upon the &lt;a href="http://feeds.feedburner.com/%7Er/sharepointteamblog/%7E3/369933457/updated-silverlight-blueprints-for-sharepoint-with-support-for-silverlight-2-beta-2-released-to-codeplex.aspx"&gt;Silverlight 2 beta 2 guidance&lt;/a&gt; and encountered an interesting situation. If a user that did not have administrative privileges on the web server was the first to browse the portal hosting the web part, the user would simply receive a 403 (Forbidden) error page.&lt;br /&gt;&lt;br /&gt;I had been working with a web part installer based upon the &lt;a href="http://www.codeplex.com/sharepointinstaller"&gt;SharePoint Solution Installer&lt;/a&gt; (an excellent project to simplify installation of web part packages), and my WSP specified a custom code access security policy. Additionally, my web part referenced Enterprise Library 4.0 assemblies that I had built and signed. So my troubleshooting initially focused around the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Changing the custom code access security policy to grant unrestricted access to the web part (no effect);&lt;/li&gt;&lt;li&gt;Changing the trust level for the entire WSS site to Full (no effect);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Registering the Ent Lib assemblies via InstallUtil (no effect);&lt;/li&gt;&lt;li&gt;Adding the Ent Lib assemblies to the GAC (they were running in bin before--no effect);&lt;/li&gt;&lt;li&gt;Removing all reference to Ent Lib from my web part assembly (no effect).&lt;/li&gt;&lt;/ul&gt;Finally, I &lt;span style="font-weight: bold;"&gt;added System.Web.Silverlight.dll to the GAC&lt;/span&gt;, and voila--the site started working. I backed out all other changes and it continued working.&lt;br /&gt;&lt;br /&gt;In case it helps, I believe this is the minimal CAS policy for a web part that hosts an application via Silverlight:&lt;br /&gt;&lt;br /&gt;&amp;lt;CodeAccessSecurity&amp;gt;&lt;br /&gt;   &amp;lt;PolicyItem&amp;gt;&lt;br /&gt;       &amp;lt;PermissionSet Name="Web Part Permission Set" class="NamedPermissionSet" version="1" Description="Permission set for Silverlight-hosting web part"&amp;gt;&lt;br /&gt;           &amp;lt;IPermission class="AspNetHostingPermission" version="1" Level="Medium" /&amp;gt;&lt;br /&gt;           &amp;lt;IPermission class="SecurityPermission" version="1" Flags="Execution" /&amp;gt;&lt;br /&gt;           &amp;lt;IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"&lt;br /&gt;                        version="1" ObjectModel="True" /&amp;gt;&lt;br /&gt;       &amp;lt;/PermissionSet&amp;gt;&lt;br /&gt;       &amp;lt;Assemblies&amp;gt;&lt;br /&gt;           &amp;lt;Assembly Name="My.WebPart" Version="1.0.0.0" PublicKeyBlob="---insert long encoded public key blob extracted with sn -Tp here ---" /&amp;gt;&lt;br /&gt;       &amp;lt;/Assemblies&amp;gt;&lt;br /&gt;   &amp;lt;/PolicyItem&amp;gt;&lt;br /&gt;&amp;lt;/CodeAccessSecurity&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1147427174512495775?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1147427174512495775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/09/silverlight-web-part-code-access.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1147427174512495775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1147427174512495775'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/09/silverlight-web-part-code-access.html' title='Silverlight web part - Code Access Security and Startup Permissions'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7865803462685027130</id><published>2008-09-04T09:14:00.003-04:00</published><updated>2008-09-04T09:19:23.124-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='TrueCrypt'/><title type='text'>Windows Desktop Search 4.0 + TrueCrypt = crash?</title><content type='html'>I used TrueCrypt to encrypt the entire system disk for a Vista x64 installation. Everything was running fine on this, until suddenly I started having frequent (every 40-50 minutes) crashes. I had just installed Visual Studio 2008, so I thought perhaps the SQL Express instance it installed was causing some incompatibility... but after disabling those services, and in fact removing every piece of VS 2008, I was still suffering the crashes.&lt;br /&gt;&lt;br /&gt;Finally I waded through the recent updates and noticed that Windows Desktop Search 4.0 had been recently applied. I can't prove this, but I think I may have rebooted (and hence the service got started) during my application updates. Regardless, I stopped and disabled the service and have had no crashes since.&lt;br /&gt;&lt;br /&gt;I did set Vista to record crash dumps, but it always fails to load the crash dump driver, and so I was not able to capture any data about the crashes I experienced. Has anyone else experienced problems with this combination of applications? The system drive has a single partition and is NTFS-formatted within the TrueCrypt container, for what it's worth.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7865803462685027130?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7865803462685027130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/09/windows-desktop-search-40-truecrypt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7865803462685027130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7865803462685027130'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/09/windows-desktop-search-40-truecrypt.html' title='Windows Desktop Search 4.0 + TrueCrypt = crash?'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-3136904771634680826</id><published>2008-09-03T14:31:00.008-04:00</published><updated>2009-01-27T09:33:47.802-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF web service setup with integrated security</title><content type='html'>I found setting up a WCF web service to use Windows integrated security to be a somewhat less-than-transparent process, so I thought I'd publish the steps I used to make it work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Set IIS to allow Negotiate authentication in addition to NTLM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To do this, you need to find the web site identifier. In IIS 6.0, run IIS Manager and choose the Web Sites node and note the identifier of the web site that will host your web service:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0UNL_lijppY/SL7ZgY38FxI/AAAAAAAAAF0/guaDavWgmuA/s1600-h/WCFIntegrated01-IIS.png"&gt;&lt;blockquote&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_0UNL_lijppY/SL7ZgY38FxI/AAAAAAAAAF0/guaDavWgmuA/s320/WCFIntegrated01-IIS.png" alt="" id="BLOGGER_PHOTO_ID_5241866166761953042" border="0" /&gt;&lt;/blockquote&gt;&lt;/a&gt;&lt;br /&gt;Once done, drop to a command prompt and execute the following:&lt;br /&gt;&lt;blockquote&gt;cscript C:\inetpub\AdminScripts adsutil.vbs &lt;span style="font-weight: bold;"&gt;GET w3svc/&lt;identifier from="" above=""&gt;&amp;lt;identifier from above&amp;gt;/root/NTAuthenticationProviders&lt;/identifier&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;For example:&lt;br /&gt;&lt;blockquote&gt;cscript C:\inetpub\AdminScripts adsutil.vbs GET w3svc/174926873/root/NTAuthenticationProviders&lt;/blockquote&gt;&lt;br /&gt;This will report output like the following:&lt;br /&gt;&lt;blockquote&gt;Microsoft (R) Windows Script Host Version 5.6&lt;br /&gt;Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.&lt;br /&gt;&lt;br /&gt;NTAuthenticationProviders       : (STRING) "&lt;span style="font-weight: bold;"&gt;Negotiate,NTLM&lt;/span&gt;"&lt;/blockquote&gt;If the NTAuthenticationProviders node reads "Negotiate,NTLM" you need make no changes. If it reads simply "NTLM" you must set it as follows:&lt;br /&gt;&lt;blockquote&gt;cscript C:\inetpub\AdminScripts adsutil.vbs &lt;span style="font-weight: bold;"&gt;SET w3svc/&lt;identifier from="" above=""&gt;&amp;lt;identifier from above&amp;gt;/root/NTAuthenticationProviders "Negotiate,NTLM"&lt;/identifier&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Use at most one host header&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are workarounds, but out of the box you will get errors if you have more than one host header configured on the IIS web.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Set Windows integrated security, except for the .svc file&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In IIS Manager's &lt;span style="font-weight: bold;"&gt;Directory Security&lt;/span&gt; tab for the web site (accessed via right-click&lt;span style="font-weight: bold;"&gt; | Properties&lt;/span&gt;), click &lt;span style="font-weight: bold;"&gt;Edit&lt;/span&gt; in the &lt;span style="font-weight: bold;"&gt;Authentication and access control&lt;/span&gt; section. At the web site level, &lt;span style="font-weight: bold;"&gt;Enable anonymous access&lt;/span&gt; should be &lt;span style="font-weight: bold;"&gt;unchecked &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;Integrated Windows authentication&lt;/span&gt; should be &lt;span style="font-weight: bold;"&gt;checked.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now click on your web site to view its files. You should see the .svc file listed. Right-click this file and go to &lt;span style="font-weight: bold;"&gt;Properties&lt;/span&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0UNL_lijppY/SL7ct4mC00I/AAAAAAAAAF8/zUNd1ln6j48/s1600-h/WCFIntegrated02-svc.png"&gt;&lt;blockquote&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_0UNL_lijppY/SL7ct4mC00I/AAAAAAAAAF8/zUNd1ln6j48/s320/WCFIntegrated02-svc.png" alt="" id="BLOGGER_PHOTO_ID_5241869697150014274" border="0" /&gt;&lt;/blockquote&gt;&lt;/a&gt;This time, go to the &lt;span style="font-weight: bold;"&gt;File Security &lt;/span&gt;tab and click the &lt;span style="font-weight: bold;"&gt;Edit&lt;/span&gt; button in the &lt;span style="font-weight: bold;"&gt;Authentication and access control&lt;/span&gt; section. This file should have both anonymous access and integrated Windows authentication checked:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_0UNL_lijppY/SL7dRyi9IuI/AAAAAAAAAGE/VNs_IoKHvsw/s1600-h/WCFIntegrated03-svc.png"&gt;&lt;blockquote&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_0UNL_lijppY/SL7dRyi9IuI/AAAAAAAAAGE/VNs_IoKHvsw/s320/WCFIntegrated03-svc.png" alt="" id="BLOGGER_PHOTO_ID_5241870314001736418" border="0" /&gt;&lt;/blockquote&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Use an integrated security binding&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lastly, you need to use an integrated security web service binding in web.config. Here is an example:&lt;br /&gt;&lt;blockquote&gt;  &amp;lt;system.serviceModel&amp;gt;&lt;br /&gt; &amp;lt;bindings&amp;gt;&lt;br /&gt;   &amp;lt;basicHttpBinding&amp;gt;&lt;br /&gt;     &amp;lt;binding name="IntegratedBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"&amp;gt;&lt;br /&gt;       &amp;lt;readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /&amp;gt;&lt;br /&gt;       &amp;lt;security mode="TransportCredentialOnly"&amp;gt;&lt;br /&gt;         &amp;lt;transport clientCredentialType="Windows" /&amp;gt;&lt;br /&gt;       &amp;lt;/security&amp;gt;&lt;br /&gt;     &amp;lt;/binding&amp;gt;&lt;br /&gt;   &amp;lt;/basicHttpBinding&amp;gt;&lt;br /&gt; &amp;lt;/bindings&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="serviceBehavior"&amp;gt;&lt;br /&gt;       &amp;lt;serviceMetadata httpGetEnabled="true" httpGetUrl="" /&amp;gt;&lt;br /&gt;       &amp;lt;serviceDebug includeExceptionDetailInFaults="true" /&amp;gt;&lt;br /&gt;       &amp;lt;!--&amp;lt;serviceAuthorization impersonateCallerForAllOperations="true" /&amp;gt;--&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;services&amp;gt;&lt;br /&gt;   &amp;lt;service name="My.Service.OrderService" behaviorConfiguration="serviceBehavior"&amp;gt;&lt;br /&gt;     &amp;lt;endpoint address="" binding="basicHttpBinding" bindingConfiguration="IntegratedBinding" name="integratedBasicHttpEndpoint" contract="My.Service.IOrderService" /&amp;gt;&lt;br /&gt;     &amp;lt;endpoint address="mex" binding="mexHttpBinding" name="mexEndpoint" contract="IMetadataExchange" /&amp;gt;&lt;br /&gt;   &amp;lt;/service&amp;gt;&lt;br /&gt; &amp;lt;/services&amp;gt;&lt;br /&gt; &amp;lt;serviceHostingEnvironment aspNetCompatibilityEnabled="false" /&amp;gt;&lt;br /&gt;&amp;lt;/system.serviceModel&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3136904771634680826?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/3136904771634680826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/09/wcf-web-service-setup-with-integrated.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3136904771634680826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3136904771634680826'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/09/wcf-web-service-setup-with-integrated.html' title='WCF web service setup with integrated security'/><author><name>Arthur Penn</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://2.bp.blogspot.com/_0UNL_lijppY/SL7ZgY38FxI/AAAAAAAAAF0/guaDavWgmuA/s72-c/WCFIntegrated01-IIS.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1873257568767911079</id><published>2008-08-25T13:37:00.002-04:00</published><updated>2008-08-25T13:45:46.435-04:00</updated><title type='text'>Enterprise Library data block and return values</title><content type='html'>I've seen various posts discussing how to get return values from calls via the Enterprise Library data block, but many seemed convoluted. I didn't need multiple output parameters, just the one integer. Here's what I did to capture the return value from a stored procedure call:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Within the stored procedure&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;CREATE PROCEDURE [dbo].[GetReturnValue]&lt;br /&gt;AS&lt;br /&gt;RETURN 1&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Enterprise Library call&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;Database db = DatabaseFactory.CreateDatabase();&lt;br /&gt;DbCommand cmd = db.GetStoredProcCommand("dbo.GetReturnValue");&lt;br /&gt;db.AddParameter(cmd, "return_value", DbType.Int32, ParameterDirection.ReturnValue, null, DataRowVersion.Default, null);&lt;br /&gt;&lt;br /&gt;db.ExecuteNonQuery(cmd);&lt;br /&gt;&lt;br /&gt;int myReturnValue = Convert.ToInt32(db.GetParameterValue(cmd, "return_value"));&lt;br /&gt;&lt;/blockquote&gt;HTH.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1873257568767911079?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1873257568767911079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/08/enterprise-library-data-block-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1873257568767911079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1873257568767911079'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/08/enterprise-library-data-block-and.html' title='Enterprise Library data block and return values'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-8985178589095672516</id><published>2008-08-17T21:50:00.003-04:00</published><updated>2008-08-17T21:55:03.820-04:00</updated><title type='text'>Feeling insecure? Bothered by the economy?</title><content type='html'>While this blog has strictly been a technology-focused affair (all work and no play makes Jack a dull boy), a friend of mine has excellent insights on mental health and how recent turbulence in the economy affects us. If you're interested, I highly recommend his blog:&lt;br /&gt;&lt;a href="http://anotetomyselfandwhoeverelsecares.blogspot.com/"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;a href="http://anotetomyselfandwhoeverelsecares.blogspot.com/"&gt;A Note to Myself and Whoever Else Cares&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8985178589095672516?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/8985178589095672516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/08/feeling-insecure-bothered-by-economy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8985178589095672516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8985178589095672516'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/08/feeling-insecure-bothered-by-economy.html' title='Feeling insecure? Bothered by the economy?'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7009353217690445543</id><published>2008-08-17T21:10:00.004-04:00</published><updated>2008-08-17T21:55:44.992-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='cross-platform'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Copying files from Linux to Windows</title><content type='html'>If you ever have occasion to copy files from Linux to Windows, you may discover that this process is not as simple as it may seem. It's fairly easy to take a USB drive formatted with the FAT or NTFS filesystem and physically transport the files from one environment to the other, but there are other complexities you must manage:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. File Naming Rules&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On ext3 filesystems, one of the most common filesystems in the Linux world, there are many legal filenames that are illegal on Windows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Filenames with double quotes (")&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Filenames with colons (:)&lt;/li&gt;&lt;li&gt;Filenames with backslashes (\)&lt;/li&gt;&lt;li&gt;etc.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://sites.google.com/site/devarthur/blog-support/RenamefilestocopyfromLinux.sh?attredirects=0"&gt;This script&lt;/a&gt; will, when executed from the path you wish to examine, rename the files so that they have legal names for Windows environments.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Path Length&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While ext3 has no maximum length for paths and a 255-character limit for filenames, Windows' NTFS restricts each each path component (directory or filename) to a maximum of up to 255 characters long (from &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_file_systems"&gt;Wikipedia&lt;/a&gt;). You have to examine the source folders to confirm you don't have any path component names that are too long to copy. &lt;span style="font-weight: bold;"&gt;DO NOT TRUST THE SUCCESS OF THE FILE COPY TO VALIDATE THIS.&lt;/span&gt; It seems that the Linux NTFS implementation (at least on Ubuntu 8.04) allows paths that would be legal for ext3, and that work while the Linux machine is using the NTFS-formatted drive, but that are NOT legal when consumed by Windows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Case Sensitivity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Windows filenames are not case-sensitive, but Linux filenames are. This means that if you have two files in one folder on the Linux source system as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;myDocument.doc&lt;/li&gt;&lt;li&gt;MyDocument.doc&lt;/li&gt;&lt;/ul&gt;Only one of these will copy to the destination, or odd errors will result when you attempt to copy them.  To identify these issues, and to confirm you haven't been bitten by any of the above problems...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Compare, compare, compare&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Always use a file and folder compare tool like &lt;a href="http://winmerge.org/"&gt;WinMerge&lt;/a&gt; to make sure that everything did copy over properly. Make sure you investigate any differences it identifies, because those are likely issues with case-sensitivity, path lengths, or other problems. This prevents you from thinking you have a good copy of the file tree when you don't. I recommend editing WinMerge's compare options so that only the file size and time are considered when comparing the results of large copy operations so that the comparison completes in a timely fashion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. Text File Handling&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lastly, you must be aware that text files have different end-of-line delimiters on Linux vs. Windows. This means that at a minimum Windows programs that don't understand this (Notepad) will show the text all run together rather than having separate lines as it should be. Cross-platform applications using the files (e.g. the instant messenger application &lt;a href="http://pidgin.im/"&gt;Pidgin&lt;/a&gt;) will fail on Windows because they expect Windows text file formats.&lt;br /&gt;&lt;br /&gt;To avoid these issues, after getting a successful copy, use a Unix-to-Windows text file converter application. I have had good luck with &lt;a href="http://www.totato.com/eolconverter/"&gt;EOL Converter&lt;/a&gt; (as an added bonus, it is also free. :) )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7009353217690445543?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7009353217690445543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/08/copying-files-from-linux-to-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7009353217690445543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7009353217690445543'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/08/copying-files-from-linux-to-windows.html' title='Copying files from Linux to Windows'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6892823455994472017</id><published>2008-08-15T18:45:00.002-04:00</published><updated>2008-08-15T18:49:58.558-04:00</updated><title type='text'>iTunes on Vista won't play any songs</title><content type='html'>This was annoying. iTunes 7.7 quit playing tracks--any tracks, not just DRM-infested ones--on my Vista installation recently. There was no sound after hitting play and the playhead would not progress. I ran down the &lt;a href="http://support.apple.com/kb/TS1362"&gt;suggestions from Apple about this problem&lt;/a&gt; to no avail.&lt;br /&gt;&lt;br /&gt;After googling, I discovered &lt;a href="http://vista.blorge.com/2007/04/16/vista-itunes-and-readyboost-do-not-play-well/"&gt;this post&lt;/a&gt; where the author had trouble with video playback after attaching a ReadyBoost-configured USB drive.  Sure enough, I removed my ReadyBoost drive and rebooted, and voila--iTunes is again playing songs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6892823455994472017?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6892823455994472017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/08/itunes-on-vista-wont-play-any-songs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6892823455994472017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6892823455994472017'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/08/itunes-on-vista-wont-play-any-songs.html' title='iTunes on Vista won&apos;t play any songs'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-3429634343103488662</id><published>2008-07-17T11:33:00.010-04:00</published><updated>2008-07-17T12:05:24.817-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PerformancePoint'/><title type='text'>PerformancePoint 2007 Monitoring Server permissions</title><content type='html'>The Monitoring Server component of PerformancePoint 2007 is responsible for managing the user rights as far as being able to publish dashboards, edit existing dashboards, etc. &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2007/11/01/performancepoint-monitoring-server-security.aspx"&gt;This article&lt;/a&gt; got me most of the way there in understanding how to set up user permissions, but I think it's helpful to point out a few other items.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dashboard Designer is the interface for Monitoring Server user security.&lt;/span&gt;&lt;br /&gt;This was not immediately clear to me. There are two basic aspects to the permissions: global permissions (such as administrator rights, being able to publish new dashboards, etc.) and per-Dashboard permissions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;To configure server (global) role assignments:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Dashboard Designer, hit the Office button and then the Options button on the resulting menu:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_0UNL_lijppY/SH9pguZjoJI/AAAAAAAAAEc/O0VJJguplcc/s1600-h/DashboardDesigner-1Options.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_0UNL_lijppY/SH9pguZjoJI/AAAAAAAAAEc/O0VJJguplcc/s320/DashboardDesigner-1Options.PNG" alt="" id="BLOGGER_PHOTO_ID_5224010103705018514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the resulting Server tab, hit the Connect button:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_0UNL_lijppY/SH9pm5a8_YI/AAAAAAAAAEk/VJa7X4krDys/s1600-h/DashboardDesigner-2Connect.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_0UNL_lijppY/SH9pm5a8_YI/AAAAAAAAAEk/VJa7X4krDys/s320/DashboardDesigner-2Connect.PNG" alt="" id="BLOGGER_PHOTO_ID_5224010209742880130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once it logs in, hit Permissions:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_0UNL_lijppY/SH9pq5BLsxI/AAAAAAAAAEs/lDSxuyLamo8/s1600-h/DashboardDesigner-3Permissions.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_0UNL_lijppY/SH9pq5BLsxI/AAAAAAAAAEs/lDSxuyLamo8/s320/DashboardDesigner-3Permissions.PNG" alt="" id="BLOGGER_PHOTO_ID_5224010278354268946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the resulting Permissions dialog, you can add users in DOMAIN\name form, specifying their &lt;a href="http://technet.microsoft.com/en-us/library/bb821194%28TechNet.10%29.aspx"&gt;server (global) role&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_0UNL_lijppY/SH9puoyNJvI/AAAAAAAAAE0/q82VloRRugg/s1600-h/DashboardDesigner-4Permissions.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_0UNL_lijppY/SH9puoyNJvI/AAAAAAAAAE0/q82VloRRugg/s320/DashboardDesigner-4Permissions.PNG" alt="" id="BLOGGER_PHOTO_ID_5224010342715959026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;To configure permissions for individual dashboards:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open the desired dashboard On its &lt;span style="font-weight: bold;"&gt;Properties&lt;/span&gt; tab, there is a &lt;span style="font-weight: bold;"&gt;Permissions&lt;/span&gt; section at the bottom:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_0UNL_lijppY/SH9py6KdbtI/AAAAAAAAAE8/Ku3_7oNLNE4/s1600-h/DashboardDesigner-5DashboardPerms.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_0UNL_lijppY/SH9py6KdbtI/AAAAAAAAAE8/Ku3_7oNLNE4/s320/DashboardDesigner-5DashboardPerms.PNG" alt="" id="BLOGGER_PHOTO_ID_5224010416100568786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Add your users (DOMAIN\name format again) and specify Reader or Editor roles. After changing these permissions, you must publish the dashboard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3429634343103488662?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/3429634343103488662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/07/performancepoint-2007-monitoring-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3429634343103488662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3429634343103488662'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/07/performancepoint-2007-monitoring-server.html' title='PerformancePoint 2007 Monitoring Server permissions'/><author><name>Arthur Penn</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://bp2.blogger.com/_0UNL_lijppY/SH9pguZjoJI/AAAAAAAAAEc/O0VJJguplcc/s72-c/DashboardDesigner-1Options.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1854328452481909909</id><published>2008-07-17T07:11:00.003-04:00</published><updated>2008-08-17T21:06:53.019-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Vista Page File in Netherworld</title><content type='html'>I had an odd problem with a Windows Vista SP1 installation. I suddenly began getting &lt;a href="http://www.emphess.net/2008/03/27/vista-annoyance-close-programs-to-prevent-information-loss/"&gt;"your computer is low on memory" warnings&lt;/a&gt; when nothing really had changed with the way I use the machine. I looked at Task Manager and saw that it was showing page file use of ~1700M / ~1800M. When I went to Advanced System Settings (System Properties) to examine the page file size (Advanced tab, Performance settings, then the Advanced tab again) it showed the total page file size as.... 0 MB!&lt;br /&gt;&lt;br /&gt;I knew I had enabled a page file previously when I set up the machine, so I rebooted--and it still showed 0 MB for the page file size. So, I went to assign a new 4096 MB page file. When I did this, it gave me a message stating that pagefile.sys already existed (!) and asked if I wanted to overwrite it. I half expected the machine to die painfully when I approved this action, but it did not... and knock on particleboard, I haven't gotten any of the warnings since.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1854328452481909909?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1854328452481909909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/07/vista-page-file-in-netherworld.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1854328452481909909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1854328452481909909'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/07/vista-page-file-in-netherworld.html' title='Vista Page File in Netherworld'/><author><name>Arthur Penn</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>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7887178305672137699</id><published>2008-07-10T14:34:00.009-04:00</published><updated>2008-07-14T07:37:19.633-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET 3.5 SP1'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF in .NET 3.5 SP1 and Enterprise Library - TypeInitializationException</title><content type='html'>I have been fighting a maddening issue. It seems that if you have a WCF service under the .NET 3.5 SP1 beta that is impersonating the caller--either using the ServiceModel pipeline or ASP.NET Compatibility Mode--calls to Enterprise Library assemblies (at least for logging or data access needs) will fail with the following exception:&lt;br /&gt;&lt;blockquote&gt;"The type initializer for 'Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry' threw an exception."&lt;/blockquote&gt;When you dig for the inner exception, you find:&lt;br /&gt;&lt;blockquote&gt;Could not load file or assembly 'System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Access is denied.&lt;/blockquote&gt;I've tried numerous things to get around this, such as:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Changing the application pool identity to Local System&lt;/li&gt;&lt;li&gt;Directly referencing System.Management in the service assembly&lt;/li&gt;&lt;li&gt;Adding System.Management (and the Ent Lib assemblies, for that matter) to the &amp;lt;assemblies&amp;gt; node in the web.config&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;** Update - 11 Jul 2008:&lt;/span&gt; Client configuration changes were required to correct the problem.  In the client's app.config, configure a behavior for the endpoint to allow impersonation:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;client&amp;gt;&lt;br /&gt; &amp;lt;endpoint address="http://server/WcfService1/Service1.svc"&lt;br /&gt;     binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"&lt;br /&gt;     contract="ServiceReference2.IService1" name="BasicHttpBinding_IService1"&lt;br /&gt;           &lt;span style="font-weight: bold;"&gt;behaviorConfiguration="endpointBehavior"&lt;/span&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/client&amp;gt;&lt;br /&gt;&amp;lt;behaviors&amp;gt;&lt;br /&gt; &amp;lt;endpointBehaviors&amp;gt;&lt;br /&gt;     &amp;lt;&lt;span style="font-weight: bold;"&gt;behavior name="endpointBehavior"&lt;/span&gt;&amp;gt;&lt;br /&gt;         &amp;lt;clientCredentials&amp;gt;&lt;br /&gt;             &lt;span style="font-weight: bold;"&gt;&amp;lt;windows allowedImpersonationLevel="Impersonation"/&amp;gt;&lt;/span&gt;&lt;br /&gt;         &amp;lt;/clientCredentials&amp;gt;&lt;br /&gt;     &amp;lt;/behavior&amp;gt;&lt;br /&gt; &amp;lt;/endpointBehaviors&amp;gt;&lt;br /&gt;&amp;lt;/behaviors&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;Then, for some reason, an IIS reset was needed to make the client start working. &lt;a href="http://agilior.pt/blogs/bruno.camara/archive/2008/02/19/3721.aspx"&gt;This article&lt;/a&gt; describes the problem in detail.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeplex.com/entlib/Thread/View.aspx?ThreadId=29040"&gt;Here's the thread&lt;/a&gt; over on the Enterprise Library forums where I was corresponding about the issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7887178305672137699?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7887178305672137699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/07/wcf-in-net-35-sp1-and-enterprise.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7887178305672137699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7887178305672137699'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/07/wcf-in-net-35-sp1-and-enterprise.html' title='WCF in .NET 3.5 SP1 and Enterprise Library - TypeInitializationException'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-4827602144738587571</id><published>2008-06-27T09:54:00.003-04:00</published><updated>2009-01-27T09:33:59.520-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight and REST for corporate (intranet) applications</title><content type='html'>Danger Will Robinson, Silverlight 2 beta 2's WebClient implementation does not support passing integrated security credentials. I was hoping to implement a RESTful services tier for my intranet Silverlight application using Windows Integrated Security. While this does work brilliantly when using IE as a client, the Silverlight client cannot call the services. There seems to be no good workaround: I could use ASP.NET authentication services using Forms authentication against AD, but I would have to present the client with a login prompt.&lt;br /&gt;&lt;br /&gt;FYI, the service configuration for WCF REST and integrated security is as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;  &amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;     &amp;lt;behaviors&amp;gt;&lt;br /&gt;         &amp;lt;endpointBehaviors&amp;gt;&lt;br /&gt;             &amp;lt;behavior name="webBehavior"&amp;gt;&lt;br /&gt;                 &amp;lt;webHttp/&amp;gt;&lt;br /&gt;                 &amp;lt;!--&amp;lt;enableWebScript/&amp;gt;--&amp;gt;&lt;br /&gt;             &amp;lt;/behavior&amp;gt;&lt;br /&gt;         &amp;lt;/endpointBehaviors&amp;gt;&lt;br /&gt;     &amp;lt;/behaviors&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;serviceHostingEnvironment aspNetCompatibilityEnabled="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;bindings&amp;gt;&lt;br /&gt;         &amp;lt;webHttpBinding&amp;gt;&lt;br /&gt;             &amp;lt;binding name="integratedWebHttpBinding"&amp;gt;&lt;br /&gt;                 &amp;lt;security mode="TransportCredentialOnly"&amp;gt;&lt;br /&gt;                     &amp;lt;transport clientCredentialType="Windows"/&amp;gt;&lt;br /&gt;                 &amp;lt;/security&amp;gt;&lt;br /&gt;             &amp;lt;/binding&amp;gt;&lt;br /&gt;         &amp;lt;/webHttpBinding&amp;gt;&lt;br /&gt;     &amp;lt;/bindings&amp;gt;&lt;br /&gt;   &lt;br /&gt;     &amp;lt;services&amp;gt;&lt;br /&gt;         &amp;lt;service name="AppNamespace.Service"&amp;gt;&lt;br /&gt;             &amp;lt;endpoint        address=""&lt;br /&gt;                           behaviorConfiguration="webBehavior"&lt;br /&gt;                           binding="webHttpBinding"&lt;br /&gt;                           bindingConfiguration="integratedWebHttpBinding"&lt;br /&gt;                           contract="AppNamespace.Service" /&amp;gt;&lt;br /&gt;         &amp;lt;/service&amp;gt;        &lt;br /&gt;     &amp;lt;/services&amp;gt;&lt;br /&gt; &amp;lt;/system.serviceModel&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-4827602144738587571?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/4827602144738587571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/06/silverlight-and-rest-for-corporate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4827602144738587571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4827602144738587571'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/06/silverlight-and-rest-for-corporate.html' title='Silverlight and REST for corporate (intranet) applications'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-8219218121292547868</id><published>2008-06-25T08:50:00.008-04:00</published><updated>2009-03-24T11:57:19.187-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kerberos'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2008'/><title type='text'>MOSS and Kerberos on Windows Server 2008 - a gotcha</title><content type='html'>I've been through the Kerberos mill repeated times--getting the SPNs lined up, making sure the computer and service accounts are trusted for delegation, making sure the times on the servers are within 15 minutes, etc. But I couldn't make Kerberos authentication work on my MOSS web applications on a Windows Server 2008 server.&lt;br /&gt;&lt;br /&gt;I opened a ticket on this with Microsoft and discovered that IIS 7.0 has kernel mode authentication turned on by default. MOSS has a problem with this and it will completely break Kerberos for those web applications. To turn this off:&lt;br /&gt;&lt;br /&gt;In Server Manager, select the web application for which you want to fix Kerberos authentication:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_0UNL_lijppY/SGJA3tHzBfI/AAAAAAAAAD4/AGlFOrgclr8/s1600-h/MOSSKerb1.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_0UNL_lijppY/SGJA3tHzBfI/AAAAAAAAAD4/AGlFOrgclr8/s320/MOSSKerb1.PNG" alt="" id="BLOGGER_PHOTO_ID_5215802644197737970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select its Authentication tool:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_0UNL_lijppY/SGJBMEmI1sI/AAAAAAAAAEA/3lL2NaDd8Ko/s1600-h/MOSSKerb2.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_0UNL_lijppY/SGJBMEmI1sI/AAAAAAAAAEA/3lL2NaDd8Ko/s320/MOSSKerb2.PNG" alt="" id="BLOGGER_PHOTO_ID_5215802994096395970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now choose Advanced Settings:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_0UNL_lijppY/SGJBWCX43rI/AAAAAAAAAEI/7zILEVbjcyk/s1600-h/MOSSKerb3.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_0UNL_lijppY/SGJBWCX43rI/AAAAAAAAAEI/7zILEVbjcyk/s320/MOSSKerb3.PNG" alt="" id="BLOGGER_PHOTO_ID_5215803165298450098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finally, make sure the "Enable Kernel-mode authentication" checkbox is UNCHECKED:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_0UNL_lijppY/SGJBY4MGP5I/AAAAAAAAAEQ/YPqk336dFkE/s1600-h/MOSSKerb4.PNG"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_0UNL_lijppY/SGJBY4MGP5I/AAAAAAAAAEQ/YPqk336dFkE/s320/MOSSKerb4.PNG" alt="" id="BLOGGER_PHOTO_ID_5215803214104248210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apply your changes and you should be good to go. It is not necessary to reset IIS or bounce the application pool to make it take effect. Don't forget that you still have to configure the web in MOSS Central Administration to use Kerberos (Negotiate) authentication instead of NTLM in addition to all the other normal domain-based Kerberos setup steps. Cheers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;** UPDATE 24 Mar 2009 **&lt;/span&gt;&lt;br /&gt;Apparently the kernel mode authentication setting also breaks NTLM authentication on WS 2008, so this is not specific to making Kerberos work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8219218121292547868?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/8219218121292547868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/06/moss-and-kerberos-on-windows-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8219218121292547868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8219218121292547868'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/06/moss-and-kerberos-on-windows-server.html' title='MOSS and Kerberos on Windows Server 2008 - a gotcha'/><author><name>Arthur Penn</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://bp1.blogger.com/_0UNL_lijppY/SGJA3tHzBfI/AAAAAAAAAD4/AGlFOrgclr8/s72-c/MOSSKerb1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-3467723024264545870</id><published>2008-06-13T10:25:00.009-04:00</published><updated>2008-06-25T09:04:26.986-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Moving Silverlight 2 beta 1 applications to beta 2</title><content type='html'>With new times come a new Silverlight beta, released last week. I set out to update my beta 1 applications to beta 2. First, I let it run the project through the upgrade wizard. After that, I found there were several more steps, starting with &lt;a href="http://silverlight.net/forums/t/17500.aspx"&gt;&lt;span style="font-weight: bold;"&gt;fixing your installation&lt;/span&gt;...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Remove and Re-Add System.Windows References&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="file:///C:/Users/apenn/AppData/Local/Temp/moz-screenshot-1.jpg" alt="" /&gt;This includes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;System.Windows&lt;/li&gt;&lt;li&gt;System.Windows.Browser&lt;/li&gt;&lt;li&gt;System.Windows.Controls.Data&lt;/li&gt;&lt;li&gt;System.Windows.Controls.Extended (this one will likely not be needed now as many controls have moved into the base assemblies)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Update Namespaces of the Silverlight User Control and Application Objects&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Make this change in App.xaml and any other user control (*.xaml) objects.&lt;br /&gt;&lt;br /&gt;From:&lt;br /&gt;&lt;blockquote&gt;xmlns="http://schemas.microsoft.com/client/2007"&lt;br /&gt;&lt;/blockquote&gt;To:&lt;br /&gt;&lt;blockquote&gt;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;&lt;/blockquote&gt;This avoids mystery "invalid XAML" errors from the Silverlight control on web pages:&lt;br /&gt;&lt;blockquote&gt;Sys.InvalidOperationException: Invalid XAML for control 'Xaml1'. [] (line 1, col 229): The element is not valid in the given namespace.&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Update the Deployment Node Namespace in AppManifest.xaml&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;From:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="HCHB.ServiceRequests" EntryPointType="HCHB.ServiceRequests.App" RuntimeVersion="2.0.30226.2"&amp;gt;&lt;/blockquote&gt;To:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;Deployment xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="HCHB.ServiceRequests" EntryPointType="HCHB.ServiceRequests.App" RuntimeVersion="2.0.30523.6"&amp;gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Update the Silverlight Control Declaration&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Find the Silverlight control on the web page(s) in your site and update the node accordingly, from:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/Silverlight1.xap" Version="2.0" Width="100%" Height="100%" /&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;To:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;asp:Silverlight ID="Silverlight1" runat="server" Source="~/ClientBin/Silverlight1.xap" MinimumVersion="2.0.30523" Width="100%" Height="100%" /&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Change the Cross-Domain Access Policy&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;This prevents &lt;a href="http://silverlight.net/forums/t/17733.aspx"&gt;404 errors when calling my web services.&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;From:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;access-policy&amp;gt;&lt;br /&gt; &amp;lt;cross-domain-access&amp;gt;&lt;br /&gt;   &amp;lt;policy&amp;gt;&lt;br /&gt;     &amp;lt;allow-from&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/blockquote&gt;To:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;access-policy&amp;gt;&lt;br /&gt;   &amp;lt;cross-domain-access&amp;gt;&lt;br /&gt;       &amp;lt;policy&amp;gt;&lt;br /&gt;           &amp;lt;allow-from http-request-headers="*"&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/blockquote&gt;  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3467723024264545870?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/3467723024264545870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/06/moving-silverlight-2-beta-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3467723024264545870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3467723024264545870'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/06/moving-silverlight-2-beta-1.html' title='Moving Silverlight 2 beta 1 applications to beta 2'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-9151871559443057378</id><published>2008-05-31T21:17:00.021-04:00</published><updated>2008-05-31T23:06:48.014-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freemind'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>FreeMind manual installation in Ubuntu Hardy 8.04</title><content type='html'>So you like the mind mapping software &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt;, but the distribution package for Ubuntu 8.04 is hideously out of date. Your solution awaits... simply by installing FreeMind from source. While this is fairly easy to follow, there is some complexity with getting full desktop integration. I am including the steps I followed, but if you scroll all the way to the bottom, you can find a compiled archive with 0.9.0 beta 17 included with a script to do all the work referenced in the article.&lt;br /&gt;&lt;br /&gt;First, you need a few packages (if you are going to use the version of FreeMind I compiled below,  you do not need sun-java6-jdk):&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;sudo aptitude install sun-java6-jre sun-java6-fonts sun-java6-jdk&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now download FreeMind. I recommend the latest beta version, found &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=7118&amp;amp;package_id=188772"&gt;here.&lt;/a&gt; You will also need to download &lt;a href="http://ant.apache.org/bindownload.cgi"&gt;Apache Ant&lt;/a&gt;. There is an Ant package in the Hardy repositories, but it is broken, so you will need the binaries directly from Apache. I used &lt;a href="http://http//apache.siamwebhosting.com/ant/binaries/apache-ant-1.7.0-bin.tar.bz2"&gt;1.7.0, the latest version available&lt;/a&gt; at the time of this article.&lt;br /&gt;&lt;br /&gt;Unpack Ant and copy it to its destination (execute the following in a terminal wherever you placed the downloaded Ant archive):&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;tar xf apache-ant-1.7.0-bin.tar.bz2&lt;br /&gt;sudo mkdir /usr/local/ant&lt;br /&gt;sudo mv apache-ant-1.7.0/* /usr/local/ant&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Set up Ant's environment variables:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;gksu gedit /etc/rc.local&lt;br /&gt;&lt;br /&gt;# In gedit, append the following to this file before "exit 0":&lt;br /&gt;&lt;br /&gt;export ANT_HOME=/usr/local/ant&lt;br /&gt;export PATH=${PATH}:${ANT_HOME}/bin&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Reboot for the above to take effect, or just execute the two export commands within your current terminal. Now you are ready to compile FreeMind. Unpack it and build it with Ant:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;tar xf freemind-src-0.9.0_Beta_17.tar.gz&lt;br /&gt;cd freemind&lt;br /&gt;ant&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now copy the built contents of the dist folder into /opt/freemind, and set up the executable:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;sudo mkdir /opt/freemind&lt;br /&gt;sudo cp -R ../bin/dist/* /opt/freemind&lt;br /&gt;sudo chmod +x /opt/freemind/freemind.sh&lt;br /&gt;sudo ln -s /opt/freemind/freemind.sh /usr/local/bin/freemind&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Congratulations, you can now run FreeMind by simply typing the command: freemind&lt;br /&gt;&lt;br /&gt;The harder part was registering the x-freemind MIME type and getting Gnome to open .mm files with a double-click (and having an icon assigned to those files!). For the MIME type, there are two existing conflicting MIME types you will have to get rid of: x-troff-mm and x-matlab. As I have no use for these applications, this is not a problem for me. These are defined in /usr/share/mime/packages/freedesktop.org.xml, and you have to comment out the nodes as follows:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&amp;lt;mime-type type="text/x-matlab"&amp;gt;&lt;br /&gt; &amp;lt;sub-class-of type="text/plain"/&amp;gt;&lt;br /&gt; &amp;lt;comment&amp;gt;MATLAB script/function&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="bg"&amp;gt;Ð¡ÐºÑ€Ð¸Ð¿Ñ‚/Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� â€” MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="ca"&amp;gt;script/funciÃ³ MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="cs"&amp;gt;Skript/funkce MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="de"&amp;gt;MATLAB-Skript/-Funktion&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="en_GB"&amp;gt;MATLAB script/function&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="es"&amp;gt;script/funciÃ³n de MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="eu"&amp;gt;MATLAB script/funtzioa&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="fi"&amp;gt;MATLAB-skripti/funktio&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="fr"&amp;gt;script/fonction MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="hu"&amp;gt;MATLAB parancsfÃ¡jl/funkciÃ³&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="it"&amp;gt;Script/Funzione MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="ja"&amp;gt;MATLAB ã‚¹ã‚¯ãƒªãƒ—ãƒˆ/é–¢æ•°&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="ko"&amp;gt;MATLAB ìŠ¤í�¬ë¦½íŠ¸/í•¨ìˆ˜&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="nb"&amp;gt;Skript/funksjon for MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="nl"&amp;gt;MATLAB-script/functie&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="nn"&amp;gt;MATLAB-skript/funksjon&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="pl"&amp;gt;Skrypt/funkcja MATLABa&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="pt_BR"&amp;gt;Script/funÃ§Ã£o do MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="sv"&amp;gt;MATLAB-skript/funktion&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="uk"&amp;gt;Ð¡Ñ†ÐµÐ½Ð°Ñ€Ñ–Ð¹/Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="vi"&amp;gt;VÄƒn lá»‡nh/chá»©c nÄƒng MATLAB&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;magic priority="10"&amp;gt;&lt;br /&gt;   &amp;lt;match value="%" type="string" offset="0"/&amp;gt;&lt;br /&gt; &amp;lt;/magic&amp;gt;&lt;br /&gt; &amp;lt;magic priority="50"&amp;gt;&lt;br /&gt;   &amp;lt;match value="function" type="string" offset="0"/&amp;gt;&lt;br /&gt; &amp;lt;/magic&amp;gt;&lt;br /&gt; &amp;lt;glob pattern="*.m"/&amp;gt;&lt;br /&gt; &amp;lt;alias type="text/x-octave"/&amp;gt;&lt;br /&gt;&amp;lt;/mime-type&amp;gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;...and....&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&amp;lt;mime-type type="text/x-troff-mm"&amp;gt;&lt;br /&gt; &amp;lt;sub-class-of type="text/plain"/&amp;gt;&lt;br /&gt; &amp;lt;comment&amp;gt;Troff MM input document&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="bg"&amp;gt;Ð˜Ð·Ñ…Ð¾Ð´ÐµÐ½ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚ â€” Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="ca"&amp;gt;document d'entrada Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="cs"&amp;gt;VstupnÃ­ dokument Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="da"&amp;gt;Troff MM inddata-dokument&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="de"&amp;gt;Troff-MM-Eingabedokument&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="el"&amp;gt;Î­Î³Î³Ï�Î±Ï†Î¿/Ï€Ï�ÏŒÎ³Ï�Î±Î¼Î¼Î± ÎµÎ½Ï„Î¿Î»ÏŽÎ½ troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="en_GB"&amp;gt;Troff MM input document&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="eo"&amp;gt;eniga dokumento de Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="es"&amp;gt;documento de entrada Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="eu"&amp;gt;Troff MM sarrerako dokumentua&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="fi"&amp;gt;Troff MM -syÃ¶teasiakirja&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="fr"&amp;gt;document d'entrÃ©e Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="hu"&amp;gt;Troff MM bemeneti dokumentum&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="it"&amp;gt;Documento di input Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="ja"&amp;gt;Troff MM å…¥åŠ›ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="ko"&amp;gt;Troff MM input ë¬¸ì„œ&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="lt"&amp;gt;Troff MM Ä¯vesties dokumentas&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="ms"&amp;gt;Dokumen input Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="nb"&amp;gt;Troff MM-inndatadokument&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="nl"&amp;gt;Troff MM-invoerdocument&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="nn"&amp;gt;Troff MM inndata-dokument&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="pl"&amp;gt;Dokument wejÅ›ciowy Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="pt"&amp;gt;documento origem Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="pt_BR"&amp;gt;Documento de entrada Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="sq"&amp;gt;Dokument input-i Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="sr"&amp;gt;Troff MM ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="sv"&amp;gt;Troff MM-indatadokument&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="uk"&amp;gt;Ð’Ñ…Ñ–Ð´Ð½Ð¸Ð¹ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚ Troff MM&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="vi"&amp;gt;TÃ i liá»‡u nháº­p MM Troff&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;comment xml:lang="zh_CN"&amp;gt;Troff MM è¾“å…¥æ–‡æ¡£&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;glob pattern="*.mm"/&amp;gt;&lt;br /&gt;&amp;lt;/mime-type&amp;gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You then need to add a file at /usr/share/mime/packages/freemind.xml with the following contents:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"&amp;gt;&lt;br /&gt;&amp;lt;mime-type type="application/x-freemind"&amp;gt;&lt;br /&gt; &amp;lt;comment&amp;gt;FreeMind Mind Map&amp;lt;/comment&amp;gt;&lt;br /&gt; &amp;lt;glob pattern="*.mm"/&amp;gt;&lt;br /&gt;&amp;lt;/mime-type&amp;gt;&lt;br /&gt;&amp;lt;/mime-info&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Once you have edited/created these files, you need to update the MIME database:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;sudo update-mime-database /usr/share/mime&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To assign icons to the FreeMind .mm files, It turns out you have to create 48x48, 32x32, and 24x24 icons (PNG files) for FreeMind, copy these to /usr/share/icons/gnome under the appropriate size-named folders, and then update the icon cache. I used GIMP to create the icons based on an svg icon that came with the FreeMind source package. Each icon PNG must be named gnome-mime-application-x-freemind.png. To update the icon cache once these are in place:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;sudo gtk-update-icon-cache --force gnome&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Once you are done, log out and back in, and enjoy your FreeMind goodness.&lt;br /&gt;&lt;br /&gt;NOW, if that all seems a bit much... I have created an archive containing a script that does everything except set up the main menu item pointing to FreeMind. It contains a version of FreeMind 0.9.0 beta 17 I compiled (on 64-bit Ubuntu, so this may or may not work on 32-bit versions) along with the modifications to the MIME types and the icons I created.&lt;br /&gt;&lt;br /&gt;Download it here: &lt;a href="http://sites.google.com/site/devarthur/blog-support/freemind-0.9.0_Beta_17.tar.bz2?attredirects=0"&gt;freemind-0.9.0_Beta_17.tar.bz2 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-9151871559443057378?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/9151871559443057378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/05/freemind-manual-installation-in-ubuntu.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/9151871559443057378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/9151871559443057378'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/05/freemind-manual-installation-in-ubuntu.html' title='FreeMind manual installation in Ubuntu Hardy 8.04'/><author><name>Arthur Penn</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>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1633266924544985353</id><published>2008-05-05T10:00:00.009-04:00</published><updated>2008-06-26T11:56:32.009-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='active directory'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Integrating Ubuntu Hardy Heron 8.04 with Active Directory</title><content type='html'>I have three primary goals with integrating Ubuntu Server with Active Directory:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Join the server to the domain&lt;/li&gt;&lt;li&gt;Allow domain admins to be Ubuntu Server administrators&lt;/li&gt;&lt;li&gt;Allow Windows clients in domain groups access to Samba shares&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Goal #1: Join the Server to the Domain&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://anothersysadmin.wordpress.com/2008/04/06/howto-active-directory-authentication-in-ubuntu-804/"&gt;this post&lt;/a&gt; for helping with this portion. The steps are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo apt-get install likewise-open&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo  domainjoin-cli join fqdn.of.your.domain Administrator&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo update-rc.d likewise-open defaults&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo /etc/init.d/likewise-open start&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Goal #2: Allow Active Directory Domain Administrators to Administer Ubuntu&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=644795"&gt;Ubuntu Forums&lt;/a&gt; to the rescue... thanks, gotee12. This will allow members of the Domain Admins AD group to issue sudo commands. From a command prompt:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;visudo&lt;/li&gt;&lt;li&gt;Add this line to the resulting file:&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;pre&gt;%YOURDOMAINNAME\\domain^admins ALL=(ALL) ALL&lt;/pre&gt;&lt;/blockquote&gt;Note the carat symbol to substitute for spaces.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Goal #3: Allow Windows Clients in Domain Groups to Access Samba Shares&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;*** UPDATE *** &lt;/span&gt;My friend Chris got the plumbing to wire up Likewise Open with Samba figured out. Good grief, this was opaque:&lt;br /&gt;&lt;a href="http://chrplunk.blogspot.com/2008/06/allow-windows-clients-in-active.html"&gt;http://chrplunk.blogspot.com/2008/06/allow-windows-clients-in-active.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now you have to set up your shares. The shares are defined as individual text files under &lt;span style="font-weight: bold;"&gt;/var/lib/samba/usershares&lt;/span&gt;. Create a file in this folder named with the name of the share (e.g. "test") and contents like the following, but be careful--match the spaces and casing with nothing extra, and **make sure the file name is in all lowercase regardless of the casing of the share name**:&lt;br /&gt;&lt;blockquote&gt;#VERSION 2&lt;br /&gt;path=/path/to/shared/folder&lt;br /&gt;comment=&lt;br /&gt;usershare_acl=&amp;lt;Group SID&amp;gt;:&amp;lt;access modifier&amp;gt;&lt;br /&gt;guest_ok=y&lt;/blockquote&gt;For example:&lt;br /&gt;&lt;blockquote&gt;#VERSION 2&lt;br /&gt;path=/testShare&lt;br /&gt;comment=&lt;br /&gt;usershare_acl=S-1-1-0:F&lt;br /&gt;guest_ok=y&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;To get the SID&lt;/span&gt; of the group that will have access to enter in the usershare_acl row, execute:&lt;br /&gt;&lt;blockquote&gt;wbinfo -n "DOMAIN\group"&lt;/blockquote&gt;(S-1-1-0 is &lt;span style="font-weight: bold;"&gt;Everyone&lt;/span&gt;.)&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;access modifiers&lt;/span&gt; after the group SID are as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;R - read-only&lt;/li&gt;&lt;li&gt;F - full access&lt;/li&gt;&lt;li&gt;D - deny access&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The last thing you need do is to set the permissions on the shared folder itself. I found it easiest to give world-writable permissions to the folder, as it seemed not to dereference my group memberships at the folder permission level (unlike Samba at the share level). So:&lt;br /&gt;&lt;blockquote&gt;chmod -R 0777 /path/to/shared/folder&lt;/blockquote&gt; If anyone knows how to get the group security to work at the folder level so it need not be world-writable, I'd appreciate a comment. I tried:&lt;br /&gt;&lt;blockquote&gt;chgrp -R 'DOMAIN\group' /path/to/shared/folder&lt;br /&gt;chmod -R 2770 /path/to/shared/folder&lt;/blockquote&gt;...but I kept getting access denied.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;*** UPDATE 2 ***&lt;/span&gt; I had to grant read access to everyone for the usershares folder to avoid 'cannot stat' errors by ordinary users:&lt;br /&gt;&lt;blockquote&gt;chmod o+r /var/lib/samba/usershares&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Original post for this section follows:&lt;br /&gt;&lt;br /&gt;Oooh, I haven't managed to get this one to work. I can issue successful commands like the following while logged on to the Ubuntu machine with my domain credentials:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;smbclient -k -L //dmsc01&lt;br /&gt;OS=[Windows Server 2003 R2 3790 Service Pack 2] Server=[Windows Server 2003 R2 5.2]&lt;br /&gt;&lt;br /&gt;   Sharename       Type      Comment&lt;br /&gt;   ---------       ----      -------&lt;br /&gt;   C$              Disk      Default share&lt;br /&gt;   IPC$            IPC       Remote IPC&lt;br /&gt;   ADMIN$          Disk      Remote Admin&lt;br /&gt;OS=[Windows Server 2003 R2 3790 Service Pack 2] Server=[Windows Server 2003 R2 5.2]&lt;br /&gt;&lt;br /&gt;   Server               Comment&lt;br /&gt;   ---------            -------&lt;br /&gt;&lt;br /&gt;   Workgroup            Master&lt;br /&gt;   ---------            -------&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;So SOMETHING's working, but I can't manage to get remote machines to connect to hosted shares. I've tried the following smb.conf (key lines included):&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;workgroup = mydomain&lt;br /&gt;security = ads&lt;br /&gt;realm = MYDOMAIN.LOCAL&lt;br /&gt;encrypt passwords = yes&lt;br /&gt;idmap uid = 10000-40000&lt;br /&gt;idmap gid = 10000-40000&lt;br /&gt;template homedir = /dev/null&lt;br /&gt;template shell = /bin/false&lt;br /&gt;winbind separator = \&lt;br /&gt;winbind use default domain = yes&lt;br /&gt;winbind enum users = yes&lt;br /&gt;winbind enum groups = yes&lt;br /&gt;winbind cache time = 300&lt;br /&gt;winbind nested groups = yes&lt;br /&gt;&lt;br /&gt;#=====================Shares====================&lt;br /&gt;[tmp]&lt;br /&gt;path = /tmp&lt;br /&gt;browseable = yes&lt;br /&gt;writeable = yes&lt;br /&gt;guest ok = no&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;All I get when attempting to connect, however, is errors like the following in the client logs:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;[2008/05/05 10:27:14, 1] libads/kerberos_verify.c:ads_secrets_verify_ticket(237)&lt;br /&gt;ads_secrets_verify_ticket: failed to fetch machine password&lt;br /&gt;[2008/05/05 10:27:14, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)&lt;br /&gt;Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;And from the log.winbindd-idmap:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;[2008/05/05 10:25:11, 1] nsswitch/idmap_tdb.c:idmap_tdb_alloc_init(397)&lt;br /&gt;idmap uid range missing or invalid&lt;br /&gt;idmap will be unable to map foreign SIDs&lt;br /&gt;[2008/05/05 10:25:11, 0] nsswitch/idmap.c:idmap_alloc_init(750)&lt;br /&gt;ERROR: Initialization failed for alloc backend, deferred!&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Any ideas?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1633266924544985353?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1633266924544985353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/05/integrating-ubuntu-hardy-heron-804-with.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1633266924544985353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1633266924544985353'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/05/integrating-ubuntu-hardy-heron-804-with.html' title='Integrating Ubuntu Hardy Heron 8.04 with Active Directory'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-8689689848368700790</id><published>2008-04-30T13:33:00.014-04:00</published><updated>2008-05-01T10:55:48.126-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight 2.0 integration with Windows Forms</title><content type='html'>Here's how you can host Silverlight 2.0 beta 1 applications in existing Windows Forms applications and have two-way communication between them. There may be an ActiveX approach that will accomplish this, but the approach I took was with a WebBrowser control.&lt;br /&gt;&lt;br /&gt;First, set up the Windows Forms client. I'll use Form1, the hardest working form of them all. I simply drag the WebBrowser control onto the form. In its constructor, I set a few properties needed for having the embedded WebBrowser:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;public partial class Form1 : Form {&lt;br /&gt;    public Form1() {&lt;br /&gt;        InitializeComponent();&lt;br /&gt;&lt;br /&gt;        webBrowser1.AllowWebBrowserDrop =&lt;br /&gt;            webBrowser1.IsWebBrowserContextMenuEnabled =&lt;br /&gt;            webBrowser1.WebBrowserShortcutsEnabled = false;&lt;br /&gt;            webBrowser1.ObjectForScripting = this;&lt;br /&gt;&lt;br /&gt;        webBrowser1.Navigate("http://&amp;lt;url of Silverlight application&amp;gt;");&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I also added a property and a method in the Windows Form for the hosted Silverlight application to call:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;public void ButtonClicked(string message) {&lt;br /&gt;    MessageBox.Show("ButtonClicked: " + message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public string Test {&lt;br /&gt;    set {&lt;br /&gt;        MessageBox.Show("Test: " + value);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In the Silverlight application, use managed code like the following (e.g. in a click event handler, load event, etc.) to call the custom methods on the hosting form (note that you need a reference to System.Windows.Browser to get to the browser):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;using System.Windows.Browser;&lt;br /&gt;/* ... */&lt;br /&gt;&lt;br /&gt;string msg = "Clicked at " + DateTime.Now.ToString();&lt;br /&gt;HtmlWindow w = HtmlPage.Window;&lt;br /&gt;ScriptObject o = (ScriptObject)w.GetProperty("external");&lt;br /&gt;if (null != o)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        // Set a property value on the host form&lt;br /&gt;        o.SetProperty("Test", msg);&lt;br /&gt;&lt;br /&gt;        // Call a method on the host form&lt;br /&gt;        o.Invoke("ButtonClicked", new object[] { msg });&lt;br /&gt;    }&lt;br /&gt;    catch { }&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Note the catch block: I haven't yet discovered how to detect if the Silverlight application is being hosted in a WebBrowser from inside (if it is being run directly in a browser, the 'external' object exists but invoking custom properties and methods will fail).&lt;br /&gt;&lt;br /&gt;Calling methods in the Silverlight application from the WebBrowser control is a bit more complex and involves a few steps:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1) Stage the Silverlight application and methods for scripting&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In App.xaml, you must register each Silverlight page for scripting support. For example, if I have a page called Page, I need code like the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Page p = new Page();&lt;br /&gt;this.RootVisual = p;&lt;br /&gt;HtmlPage.RegisterScriptableObject("Page", p); // The identifier ("Page") here is arbitrary and refers to your key for identifying the object from script&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now that I've done this, I have to mark each Silverlight page class with the &lt;strong&gt;ScriptableType&lt;/strong&gt; attribute:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[ScriptableType()]&lt;br /&gt;public partial class Page : UserControl&lt;br /&gt;{&lt;br /&gt;    /* ... */&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Also, each public method I intend to call in the marked class from external script must be marked with the attribute:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[ScriptableMember()]&lt;br /&gt;public void SetSearchText(string msg)&lt;br /&gt;{&lt;br /&gt;    /* ... */&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2) Set up scripting support in the web page hosting the Silverlight application&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The WebBrowser control can call script methods within the page, but doesn't seem to be able to call the Silverlight control object directly (I made several attempts to do this but was unsuccessful). What I ended up doing that worked was to set up a script method corresponding to each method I want to call within the Silverlight application. &lt;br /&gt;&lt;br /&gt;First, alter the tag on the Silverlight control so that it calls a script method of yours when it loads:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div  style="height:100%;"&amp;gt;&lt;br /&gt;    &amp;lt;asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/MySilverlightApp.xap" Version="2.0" Width="100%" Height="100%" &lt;strong&gt;OnPluginLoaded="pluginLoaded"&lt;/strong&gt; /&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now, add a script block in the HEAD tag with a method corresponding to the above to store a reference to the Silverlight control when it loads:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;head runat="server"&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Test Page For DiggSample&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;        var scControl;&lt;br /&gt;        &lt;br /&gt;        function pluginLoaded(sender) {&lt;br /&gt;            scControl = sender.get_element();&lt;br /&gt;        }       &lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Next, add one script method for each method you marked exposed within the Silverlight application. Note the formatting (you must call it in the form: &lt;strong&gt;objectName.Content.&amp;lt;name you chose as the Silverlight script object identifier&amp;gt;.method(arguments)&lt;/strong&gt;):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    function SetSearchText(msg) {&lt;br /&gt;        scControl.Content.Page.SetSearchText(msg);&lt;br /&gt;    }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Finally, from within the Windows Forms application, you can call the method you exposed via the WebBrowser control as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private void btnSetSearchText_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    webBrowser1.Document.InvokeScript("SetSearchText", new string[] { "foo" });&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That's it--you should be able to have two-way communication between the Windows Forms application and the Silverlight application hosted via its WebBrowser control.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8689689848368700790?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/8689689848368700790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/silverlight-20-integration-with-windows.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8689689848368700790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8689689848368700790'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/silverlight-20-integration-with-windows.html' title='Silverlight 2.0 integration with Windows Forms'/><author><name>Arthur Penn</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6154469046902036470</id><published>2008-04-29T09:59:00.003-04:00</published><updated>2008-04-29T10:43:18.013-04:00</updated><title type='text'>Debugging Kerberos authentication issues</title><content type='html'>I have found the following registry key to be of greatest assistance when debugging Kerberos issues. It sets the following parameters:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Turns on verbose debug logging&lt;/li&gt;&lt;li&gt;Forces Kerberos to use TCP instead of UDP (MaxPacketSize parameter)&lt;/li&gt;&lt;li&gt;Increases the token size so that users with large numbers of groups will fit inside the Kerberos ticket&lt;/li&gt;&lt;/ul&gt;Just save the following as a .reg file and double-click it on your server to enter it into the registry.&lt;br /&gt;&lt;br /&gt;----COPY BELOW THIS LINE----&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters]&lt;br /&gt;"LogLevel"=dword:00000001&lt;br /&gt;"KerbDebugLevel"=dword:ffffffff&lt;br /&gt;"LogToFile"=dword:00000000&lt;br /&gt;"MaxTokenSize"=dword:0000ea60&lt;br /&gt;"MaxPacketSize"=dword:00000001&lt;br /&gt;&lt;br /&gt;----COPY ABOVE THIS LINE----&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6154469046902036470?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6154469046902036470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/debugging-kerberos-authentication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6154469046902036470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6154469046902036470'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/debugging-kerberos-authentication.html' title='Debugging Kerberos authentication issues'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-562035239897911029</id><published>2008-04-29T09:44:00.006-04:00</published><updated>2008-05-05T16:30:20.373-04:00</updated><title type='text'>PerformancePoint 2007 Monitoring Server per user authentication</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_0UNL_lijppY/SBcv0ucWoMI/AAAAAAAAACY/RsSBjjEPUsA/s1600-h/SPNs.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_0UNL_lijppY/SBcv0ucWoMI/AAAAAAAAACY/RsSBjjEPUsA/s320/SPNs.PNG" alt="" id="BLOGGER_PHOTO_ID_5194673278061813954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I had an interesting time getting Kerberos authentication working for PerformancePoint 2007 Monitoring Server. The &lt;a href="http://technet.microsoft.com/en-us/library/bb794637.aspx"&gt;deployment guide&lt;/a&gt; is pretty thorough, but I had some issues getting the Kerberos authentication to function. After making the changes recommended in the guide for Kerberos auth and per-user security, the Dashboard Designer would produce the following error when trying to refresh:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Unable to connect to the specified server. Make sure the address is correct.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After reviewing &lt;a href="http://devarthur.blogspot.com/2008/04/debugging-kerberos-authentication.html"&gt;Kerberos logging messages&lt;/a&gt;, I found that this was a Kerberos error. I used adsiedit to set SPNs rather than the SetSPN utility as I find it a bit faster to work with. I set the service principal names above on the Monitoring Server application pool identity domain account (locate the account in the tree, right-click and choose &lt;span style="font-weight: bold;"&gt;Properties&lt;/span&gt;, select the &lt;span style="font-weight: bold;"&gt;servicePrincipalName&lt;/span&gt; attribute, and click &lt;span style="font-weight: bold;"&gt;Edit&lt;/span&gt;). This is because:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;My &lt;span style="font-weight: bold;"&gt;PPSMonitoring&lt;/span&gt; web runs on the dppt01 server on port 40000;&lt;/li&gt;&lt;li&gt;My &lt;span style="font-weight: bold;"&gt;PPSPlanningWebServices&lt;/span&gt; web runs on the dppt01 server on port 46787; and&lt;/li&gt;&lt;li&gt;My &lt;span style="font-weight: bold;"&gt;PPSPlanningAdminConsole&lt;/span&gt; web runs on the dppt01 server on port 46788.&lt;/li&gt;&lt;/ul&gt;This wasn't sufficient to make it work, however. I also had to:&lt;br /&gt;&lt;br /&gt;- Set one more SPN (for both the short and fully-qualified domain name) on &lt;span style="font-weight: bold;"&gt;both the server's computer account and the Monitoring Server application pool identity:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;HTTP/dppt01.domain.local&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HTTP/dppt01&lt;/li&gt;&lt;/ul&gt;- &lt;span style="font-weight: bold;"&gt;Change the application pool identity of the PPSMonitoringCentral app pool &lt;/span&gt;(for some reason, the installer defaulted this to Network Service instead of my app pool identity, ppt-pool-dev).&lt;br /&gt;&lt;br /&gt;After doing these steps and allowing for replication, Dashboard Designer was again able to connect and enumerate resources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-562035239897911029?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/562035239897911029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/performancepoint-2007-monitoring-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/562035239897911029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/562035239897911029'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/performancepoint-2007-monitoring-server.html' title='PerformancePoint 2007 Monitoring Server per user authentication'/><author><name>Arthur Penn</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://bp1.blogger.com/_0UNL_lijppY/SBcv0ucWoMI/AAAAAAAAACY/RsSBjjEPUsA/s72-c/SPNs.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-3915260978718687249</id><published>2008-04-25T12:36:00.006-04:00</published><updated>2008-04-29T09:44:08.209-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='PerformancePoint'/><title type='text'>Integrating PerformancePoint 2007 into MOSS</title><content type='html'>Being new to PerformancePoint 2007, it wasn't immediately apparent to me how to integrate it into MOSS. I found that you do this by installing the Dashboard Viewer for SharePoint Services on the MOSS server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prerequisites on MOSS Server&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft ASP.NET 2.0 AJAX Extensions 1.0&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Installation&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Mount the PerformancePoint 2007 media in the MOSS server.&lt;/li&gt;&lt;li&gt;Choose the Monitoring Server installation and complete it.&lt;/li&gt;&lt;li&gt;Run the Monitoring Server Configuration Manager.&lt;/li&gt;&lt;li&gt;Uncheck all options except for the Dashboard Viewer for SharePoint Services.&lt;/li&gt;&lt;li&gt;Select the site collection in which to install the Dashboard Viewer.&lt;/li&gt;&lt;/ol&gt;If you need to later install the Dashboard Viewer web part on an additional site collection, &lt;a href="http://blogs.msdn.com/performancepoint/archive/2007/11/12/how-do-i-deploy-the-monitoring-web-part-on-a-separate-sharepoint-web-application-on-the-same-sharepoint-web-server.aspx"&gt;this post&lt;/a&gt; has an excellent guide to doing so. In step 2 where the author references uploading the master page, I did this differently:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Navigated to &lt;span style="font-weight: bold;"&gt;http://&lt;portal&gt;/_catalogs/masterpage/Forms/AllItems.aspx&lt;/span&gt;, and clicked the &lt;span style="font-weight: bold;"&gt;Upload&lt;/span&gt; button.&lt;/li&gt;&lt;li&gt;Browsed to &lt;span style="font-weight: bold;"&gt;%programfiles%\Microsoft Office PerformancePoint Server\3.0\Monitoring\Assemblies\&lt;/span&gt; and chose &lt;span style="font-weight: bold;"&gt;PerformancePointDefault.master&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Once uploaded, used the context menu on the uploaded master page and used the &lt;span style="font-weight: bold;"&gt;Approve/Reject&lt;/span&gt; link to approve the uploaded item.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3915260978718687249?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/3915260978718687249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/integrating-performancepoint-2007-into.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3915260978718687249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3915260978718687249'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/integrating-performancepoint-2007-into.html' title='Integrating PerformancePoint 2007 into MOSS'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-3441575316120313703</id><published>2008-04-22T10:14:00.008-04:00</published><updated>2008-04-23T17:10:31.520-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Citrix'/><title type='text'>Further adventures with Citrix WISP installation</title><content type='html'>Continuing with &lt;a href="http://devarthur.blogspot.com/2008/03/access-denied-with-citrix-wisp.html"&gt;earlier efforts to get WISP working&lt;/a&gt;, I attempted to re-add/re-deploy the solutions after first undeploying/removing them. Prerequisite steps:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Turn on WISP logging. &lt;/span&gt;You can import the following registry key to do so (save as a .reg file and double-click it; don't forget to actually create the folder):&lt;br /&gt;&lt;br /&gt;------COPY BELOW THIS LINE-----&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\WISP]&lt;br /&gt;"LogFolder"="C:\\temp\\WISP_logs"&lt;br /&gt;-----COPY ABOVE THIS LINE-----&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Turn on verbose MOSS (ULS) logging:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;pre wrap=""&gt;Open Central Administration, click Operations.&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre wrap=""&gt;Click Diagnostic Logging.&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre wrap=""&gt;Under the Event Throttling section, set Verbose in "Least critical event&lt;br /&gt;to report to the trace log."&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre wrap=""&gt;Under the Trace log section, type 20 in Number of log files.&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre wrap=""&gt;Click OK.&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;To add the solutions:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o addsolution -filename CitrixWssCore.wsp&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o addsolution -filename CitrixAppDeliveryWebPart.wsp&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o addsolution -filename CitrixContentRedirection.wsp&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o addsolution -filename CitrixMossCore.wsp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While adding seems to be pretty safe, you have to be very careful about the order of deployment of the various WSPs. The CitrixWssCore.wsp must be deployed first, and this deployment doesn't necessarily work. You must carefully review stsadm output to see what your results were before proceeding. After initiating the deployment, check the &lt;span style="font-weight: bold;"&gt;Timer Job Status&lt;/span&gt; page in CA to see if the job is complete and/or run &lt;span style="font-weight: bold;"&gt;stsadm -o enumsolutions&lt;/span&gt; and look for the solution in the list with the &lt;span style="font-weight: bold;"&gt;Deployed&lt;/span&gt; node set to true.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o deploysolution -name CitrixWssCore.wsp -immediate -allowgacdeployment&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On this attempt, I was deploying CitrixWssCore.wsp first as directed.  Note the value of the &lt;span style="font-weight: bold;"&gt;LastOperationResult&lt;/span&gt; node:&lt;br /&gt;&lt;br /&gt;&amp;lt;Solution Name=&amp;quot;citrixwsscore.wsp&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;Id&amp;gt;fe3deba9-9b5d-4105-9983-2af1db3c0e42&amp;lt;/Id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;File&amp;gt;CitrixWssCore.wsp&amp;lt;/File&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;Deployed&amp;gt;FALSE&amp;lt;/Deployed&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;WebApplicationSpecific&amp;gt;FALSE&amp;lt;/WebApplicationSpecific&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;ContainsGlobalAssembly&amp;gt;TRUE&amp;lt;/ContainsGlobalAssembly&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;ContainsCodeAccessSecurityPolicy&amp;gt;FALSE&amp;lt;/ContainsCodeAccessSecurityPolicy&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;LastOperationResult&amp;gt;DeploymentFailedFileCopy&amp;lt;/LastOperationResult&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;LastOperationTime&amp;gt;4/21/2008 4:14 PM&amp;lt;/LastOperationTime&amp;gt;&lt;br /&gt;&amp;lt;/Solution&amp;gt;&lt;br /&gt;&lt;br /&gt;I didn't find any particular reason for this failure, but I repeated the operation, and the next time got success values in these nodes. &lt;br /&gt;&lt;br /&gt;Once I deployed the key prerequisite package, it was on to the others. The CitrixAppDeliveryWebPart also balked:&lt;br /&gt;&lt;br /&gt;&amp;lt;Solution Name=&amp;quot;citrixappdeliverywebpart.wsp&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;Id&amp;gt;8a0a1be2-7648-4703-9cca-8ea0fa625793&amp;lt;/Id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;File&amp;gt;CitrixAppDeliveryWebPart.wsp&amp;lt;/File&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;Deployed&amp;gt;FALSE&amp;lt;/Deployed&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;WebApplicationSpecific&amp;gt;TRUE&amp;lt;/WebApplicationSpecific&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;ContainsGlobalAssembly&amp;gt;FALSE&amp;lt;/ContainsGlobalAssembly&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;ContainsCodeAccessSecurityPolicy&amp;gt;TRUE&amp;lt;/ContainsCodeAccessSecurityPolicy&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;LastOperationResult&amp;gt;DeploymentFailedFeatureInstall&amp;lt;/LastOperationResult&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;LastOperationTime&amp;gt;4/22/2008 10:34 AM&amp;lt;/LastOperationTime&amp;gt;&lt;br /&gt;&amp;lt;/Solution&amp;gt;&lt;br /&gt;&lt;br /&gt;This also occurred on my second attempt. So I started digging through the MOSS ULS logs (it's a good idea to turn on verbose logging before starting operations like this, as exceptions do not generally get logged to the Windows event log). I found the following key message:&lt;br /&gt;&lt;br /&gt;Line 19554 : 04/22/2008 10:41:33.12  OWSTIMER.EXE (0x058C)                    0x1404 Windows SharePoint Services    Topology                       8zpd High     Solution Deployment : Error - Add Feature definition for citrixappdeliverywebpart.wsp Exception message - A feature with ID 94af8a34-19db-4114-876d-5a7a587a8405 has already been installed in this farm.  Use the force attribute to explicitly re-install the feature. &lt;br /&gt;&lt;br /&gt;Apparently, the uninstall procedure (I had made earlier attempts to install these solutions) did not properly remove the features. I was able to get this one to pass by adding the &lt;span style="font-weight: bold;"&gt;-force&lt;/span&gt;&lt;span&gt; switch to the stsadm deploy solution command.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o deploysolution -name CitrixAppDeliveryWebPart.wsp -immediate -allowgacdeployment -allowcaspolicies -url http://server -force&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;After this, I forced the remaining solution deployments as well (CitrixContentRedirection.wsp and CitrixMossCore.wsp) and the rest succeeded.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o deploysolution -name CitrixContentRedirection.wsp -immediate -allowgacdeployment -force&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o deploysolution -name CitrixMossCore.wsp -immediate -allowgacdeployment -force&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After deployment of these features comes activation. Unless your application pool identity has admin privileges in various areas (this should not be the case), you will need to use the stsadm commands to activate the features. You must activate the CitrixAccessCore feature, and you must activate it before the others. Fortunately, activation does not use a timer job, so you get immediate feedback from stsadm about the success or failure of your request.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixAccessCore -url http://server&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixTopNavigation -url http://server&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixQuickLaunchNavigation -url http://server&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixAdministrationTool -url http://server&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixAppDeliveryWebPart -url http://server&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixContentRedirectionModule -url http://server&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixContentRedirectionMenu -url http://server&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;stsadm -o activatefeature -name CitrixContentRedirectionNewMenu -url http://server&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The key step after getting everything installed is to configure the connection to the Citrix farm. From the site collection root, go to &lt;span style="font-weight: bold;"&gt;Site Settings | Modify All Site Settings&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&gt; Citrix Administration&lt;/span&gt; and specify the applicable settings. At first I tried going to the Advanced Administration and copying the contents of our Citrix farm's &lt;span style="font-weight: bold;"&gt;WebInterface.conf&lt;/span&gt; file into the large textbox, but that is not sufficient.&lt;br /&gt;&lt;br /&gt;Now if I could just get past the "No Resources found" message presented by the Citrix Application Delivery web part...&lt;br /&gt;&lt;br /&gt;*** UPDATE ***&lt;br /&gt;I got the Application Delivery web part working. It turned out the CitrixWssCore feature did not deploy properly in spite of the success message returned by stsadm -o enumsolutions. The contents of the WISP logs were the only place I saw the exception:&lt;br /&gt;&lt;br /&gt;AccessCore.DeploymentJob: Wednesday, April 23, 2008 1:36:01 PM&lt;br /&gt;Service Provider Deployment run as Identity: DOMAIN\server-farm-account&lt;br /&gt;CreateEventLog() Error: Requested registry access is not allowed.&lt;br /&gt;   at System.ThrowHelper.ThrowSecurityException(ExceptionResource resource)&lt;br /&gt;   at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)&lt;br /&gt;   at System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData)&lt;br /&gt;   at System.Diagnostics.EventLog.CreateEventSource(String source, String logName)&lt;br /&gt;   at Citrix.WISP.Util.CoreLog.CreateEventLog(CultureInfo locale)&lt;br /&gt;....&lt;br /&gt;Info: Attempting to create Web Virtual Directory (CitrixAccessPlatform-f6ec3ff1-328a-4fdf-b78b-61f0f5b703d0):&lt;br /&gt;ADS Path: IIS://localhost/W3SVC/1634379371/Root/f6ec3ff1-328a-4fdf-b78b-61f0f5b703d0&lt;br /&gt;File Path: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\CitrixAccessPlatform\f6ec3ff1-328a-4fdf-b78b-61f0f5b703d0&lt;br /&gt;IISObject: Exception has been thrown by the target of an invocation.&lt;br /&gt;&lt;br /&gt;Our MOSS server farm account was not a local machine administrator on the SharePoint machine, and apparently this is required for the CitrixWssCore deployment to create the custom event log and its web site. I had to grant these rights and the redeploy the solution with the &lt;span style="font-weight:bold;"&gt;-force&lt;/span&gt; option to correct it. The key point is that &lt;span style="font-weight:bold;"&gt;you must review all possible logs, including the WISP logs, to check for installation/deployment problems.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Citrix, won't you please build a real installer for WISP that will take care of some of these details/checks?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3441575316120313703?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/3441575316120313703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/further-adventures-with-citrix-wisp.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3441575316120313703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3441575316120313703'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/further-adventures-with-citrix-wisp.html' title='Further adventures with Citrix WISP installation'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-3426326821175184143</id><published>2008-04-20T21:55:00.005-04:00</published><updated>2008-04-20T22:15:20.715-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='no-ip'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Infrequent IP address changes and No-IP</title><content type='html'>I use &lt;a href="http://www.no-ip.com/"&gt;No-IP&lt;/a&gt; to provide dynamic DNS services so I can have remote access to my machine at home. However, the No-IP client doesn't send updates when my IP address doesn't change, and with my provider it tends to not change for quite some time. This causes No-IP to send me warning messages that my host is going to be deactivated from inactivity. In these notices, there is a link you can click to keep your host alive with its current IP. That got me thinking how I could force a periodic update.&lt;br /&gt;&lt;br /&gt;I wrote the following script, pagecheck, to allow fetching an arbitrary web page and checking for some simple content in the page output:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:78%;"&gt;#!/bin/bash&lt;br /&gt;#Gets a web page and searches it for the specified text; if not found, or if a wget error results, returns&lt;br /&gt;#an error code and prints error text.&lt;br /&gt;#Arthur Penn - 16 Apr 2008&lt;br /&gt;&lt;br /&gt;if [ $# -ne 2 ]; then&lt;br /&gt;   echo "pagecheck \"URL to page\" \"Success text to expect\""&lt;br /&gt;   exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;PAGE=$(wget --no-verbose -O - "$1" 2&gt;&amp;amp;1)&lt;br /&gt;RC=$?&lt;br /&gt;if [ 0 -eq $RC ]; then&lt;br /&gt;   SUCCESS=$(echo "$PAGE" | grep "$2")&lt;br /&gt;   if [ -n "$SUCCESS" ]; then&lt;br /&gt;       exit 0&lt;br /&gt;   else&lt;br /&gt;       echo "Did not find success message of \"$2\" in $1:"&lt;br /&gt;       echo "$PAGE"&lt;br /&gt;       exit 1&lt;br /&gt;   fi&lt;br /&gt;else&lt;br /&gt;   echo "$PAGE"&lt;br /&gt;   exit 1&lt;br /&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This uses wget to fetch the web page and look for the content, and only prints output when it encounters problems. This makes it suitable for cron jobs. I added this script to /usr/local/bin (save it to a text file, and then: sudo cp pagecheck /usr/local/bin &amp;amp;&amp;amp; sudo chmod +x /usr/local/bin/pagecheck). I then added the following script into the /etc/cron.monthly folder so it gets run once per month (don't do this more often to avoid excessive No-IP updates):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/bash&lt;br /&gt;# Touches the no-ip.com host dialog to confirm that the URL is still in use&lt;br /&gt;/usr/local/bin/pagecheck "http://www.no-ip.com/hostactive.php?host=&lt;span style="color: rgb(255, 0, 0);"&gt;myhost&lt;/span&gt;&amp;amp;domain=&lt;span style="color: rgb(255, 0, 0);"&gt;noipdomain.net&lt;/span&gt;" "Update Successful"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;T0 use this, you need to update the portions in red to match your No-IP domain (e.g. if your No-IP domain is fred.atx.net, the host would be "fred," and the domain would be "atx.net."&lt;br /&gt;&lt;br /&gt;Since doing this, I haven't gotten any of the host deactivation messages from No-IP.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3426326821175184143?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/3426326821175184143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/infrequent-ip-address-changes-and-no-ip.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3426326821175184143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3426326821175184143'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/infrequent-ip-address-changes-and-no-ip.html' title='Infrequent IP address changes and No-IP'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1728879038333933451</id><published>2008-04-15T16:06:00.003-04:00</published><updated>2008-04-20T22:11:40.935-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Make zenwin and zenwinmodeler ignore WMI errors</title><content type='html'>(This tip is also on the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/MakeZenwinAndZenwinmodelerIgnoreWMIErrors"&gt;Zenoss wiki&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;At least in version 2.1.1, zenwin, zenwinmodeler, and zeneventlog have (IMO) a critical defect: if there are any /Status/WMI/Conn issues not in history for the device, they ignore the device. On our network, for some reason we end up with a lot of these events ('timegenerated' errors, various intermittent failures to connect, etc.). This causes the monitoring of our Windows servers to dramatically fall off as the system runs, and we miss critical issues.&lt;br /&gt;&lt;br /&gt;I changed the behavior of these three systems to go ahead and attempt monitoring even if WMI issues are encountered. I learned that most of the time these WMI issues are spurious and successful monitoring CAN still be attempted. If you use this code, I recommend combining it with event commands to restart the zenoss daemons when it finds them dead.&lt;br /&gt;&lt;br /&gt;Also, in zenwin, I added/improved the exception handling; a failure to create the watcher object occurs outside of a try block. Much of this code is an attempt to keep zenwin from crashing if it tries to monitor a Windows Server 2008 machine (Zenoss is not compatible with WS 2008 or Vista's WMI interface, and zenwin cannot monitor services on these devices). I ended up adding a hardcoded exclusion list so I can otherwise monitor the machine but have zenwin skip it. For some reason, zeneventlog seems to not crash, although it is not able to retrieve events from the WS 2008 machine either.&lt;br /&gt;&lt;br /&gt;Please see the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/MakeZenwinAndZenwinmodelerIgnoreWMIErrors"&gt;Zenoss wiki&lt;/a&gt; for the zenwin and zenwinmodeler diffs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1728879038333933451?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1728879038333933451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/make-zenwin-and-zenwinmodeler-ignore.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1728879038333933451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1728879038333933451'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/make-zenwin-and-zenwinmodeler-ignore.html' title='Make zenwin and zenwinmodeler ignore WMI errors'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6913589872173108532</id><published>2008-04-06T09:16:00.002-04:00</published><updated>2008-04-20T22:12:00.537-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Find Zenoss event classes with transforms</title><content type='html'>(This tip is also on the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/FindEventClassesWithTransforms"&gt;Zenoss wiki.&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you have entered transforms but can't remember where you entered them, type the following in zendmd (run zendmd from the command line on the Zenoss server as the zenoss user):&lt;/p&gt; &lt;pre class="doctest-block"&gt;&gt;&gt;&gt; for ec in dmd.Events.getSubOrganizers():&lt;br /&gt;...      if ec.transform:&lt;br /&gt;...      print ec.getOrganizerName()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6913589872173108532?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6913589872173108532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/find-zenoss-event-classes-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6913589872173108532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6913589872173108532'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/find-zenoss-event-classes-with.html' title='Find Zenoss event classes with transforms'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-3178144466985071610</id><published>2008-04-05T22:09:00.004-04:00</published><updated>2008-04-20T22:12:23.322-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Custom Zenoss graph based on multiple data points</title><content type='html'>(This tip is also on the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/CreatingCustomCalculatedGraphsBasedOnMultipleDataPoints"&gt;Zenoss Wiki&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;If you want to make a custom graph in Zenoss based on more than one data point (such as a ratio or other calculation), you will need to enter a custom graph definition for RRDTool  to use. I found some good guides on how to define graphs with RRDTool (such as &lt;a href="http://oss.oetiker.ch/rrdtool/tut/cdeftutorial.en.html"&gt;this tutorial on CDEF&lt;/a&gt; and others at that site), but it took me a while to put this together with the available data points and variables in Zenoss so the graph would work.&lt;br /&gt;&lt;br /&gt;Edit the performance template to which you wish to add the graph. Click the drop-down arrow next to &lt;span style="font-weight: bold;"&gt;Graph Definitions&lt;/span&gt; and choose "&lt;span style="font-weight: bold;"&gt;Add Graph...&lt;/span&gt;" and name it.&lt;br /&gt;&lt;br /&gt;Click on the &lt;span style="font-weight: bold;"&gt;Graph Custom Definition&lt;/span&gt; tab and you are presented with a blank slate for your new graph's definition. It may be easiest to start with an example. I entered the following custom graph definition:&lt;br /&gt;&lt;br /&gt;DEF:BusyThreads-raw=${here/fullRRDPath}/appThreads_BusyThreads.rrd:ds0:AVERAGE&lt;br /&gt;DEF:RequestsPerSecond-raw=${here/fullRRDPath}/appThreads_RequestsPerSecond.rrd:ds0:AVERAGE&lt;br /&gt;DEF:AppCurrentConnections-raw=${here/fullRRDPath}/currentConnections_appCurrentConnections.rrd:ds0:AVERAGE&lt;br /&gt;CDEF:connectionsToThreads=AppCurrentConnections-raw,1,RequestsPerSecond-raw,BusyThreads-raw,+,+,/&lt;br /&gt;LINE:connectionsToThreads#00cc00:"Connections to Threads/Thread Activity Ratio"&lt;br /&gt;GPRINT:connectionsToThreads:LAST:cur\:%5.2lf%s&lt;br /&gt;GPRINT:connectionsToThreads:AVERAGE:avg\:%5.2lf%s&lt;br /&gt;GPRINT:connectionsToThreads:MAX:max\:%5.2lf%s\j&lt;br /&gt;&lt;br /&gt;To break this apart, I have two data sources and three data points involved in my ratio that are part of the performance template with this graph:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Data source: appThreads&lt;/span&gt;&lt;br /&gt;This data source has two data points, BusyThreads and RequestsPerSecond.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Data source: currentConnections&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;This data source has one data point, appCurrentConnections.&lt;br /&gt;&lt;br /&gt;What I want to graph is a ratio based on these data points as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;appCurrentConnections / (BusyThreads + RequestsPerSecond + 1) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Basically, I want a measure of the amount of work in the queue (current connections) divided by the amount of work output my application is producing (a combination of the busy threads and requests per second it is handling, plus one to avoid the possibility of a divide-by-zero error).&lt;br /&gt;&lt;br /&gt;With that established, we need to define the RRD DEFs (variables) used in the graph, one for each of the variables in the above calculation. Here's the one for the busy threads variable. I supplied &lt;span style="font-weight: bold;"&gt;BusyThreads-raw&lt;/span&gt; as the name that is used in the graph line:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DEF:BusyThreads-raw=${here/fullRRDPath}/appThreads_BusyThreads.rrd:ds0:AVERAGE&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The key above is the TALES expression to get the variable from the Zenoss performance template into our RRDTool DEF variable: &lt;span style="font-weight: bold;"&gt;${here/fullRRDPath}/dataSourceName_dataPointName&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Regarding the :AVERAGE at the end: While there are many different RRD functions, the most common one I've seen used is the AVERAGE function, which takes a recent rolling average of the value in question. Please consult the RRDTool documentation for going deeper with this.&lt;br /&gt;&lt;br /&gt;After providing DEF lines for each variable in my calculation, I need a CDEF line (calculated definition) for the actual calculation that puts the calculation together:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CDEF:connectionsToThreads=AppCurrentConnections-raw,1,RequestsPerSecond-raw,BusyThreads-raw,+,+,/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The calculation uses reverse Polish notation and the CDEF tutorial above has an excellent guide to understanding it, but basically you can think of it as a stack: the variables and constants are pushed onto the stack in order from left to right, and when the first operator (the leftmost plus sign) hits the stack, the top two items (in this case, the BusyThreads-raw and RequestsPerSecond-raw variables) are popped off the stack and added together (the operator is applied). The result is pushed back onto the stack. The next plus sign adds this sum with 1, and finally the division operator divides the AppCurrentConnections-raw variable by the topmost stack item (1 + RequestsPerSecond-raw + BusyThreads-raw).&lt;br /&gt;&lt;br /&gt;Once we have our connectionsToThreads variable, we can graph it. The next line defines the one line on our graph:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LINE:connectionsToThreads#00cc00:"Connections to Threads/Thread Activity Ratio"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It refers to the connectionsToThreads variables, defines a color in hex notation, and defines a label. Finally, we can print some additional information on the graph:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;GPRINT:connectionsToThreads:LAST:cur\:%5.2lf%s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; GPRINT:connectionsToThreads:AVERAGE:avg\:%5.2lf%s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; GPRINT:connectionsToThreads:MAX:max\:%5.2lf%s\j&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here we print the last, average, and maximum values of our graph line on the currently-viewed graph section.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Limitation: Thresholding&lt;/span&gt;&lt;br /&gt;One thing I could not get working was to define a threshold based on my calculated value above. It seems that the thresholds are only valid on the values of the data points themselves, and I couldn't get a threshold working on my derived value above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-3178144466985071610?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/3178144466985071610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/custom-zenoss-graph-based-on-multiple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3178144466985071610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/3178144466985071610'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/custom-zenoss-graph-based-on-multiple.html' title='Custom Zenoss graph based on multiple data points'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-2605370640326560651</id><published>2008-04-05T20:07:00.006-04:00</published><updated>2008-04-20T22:12:40.138-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Moving a Zenoss event to history via the Transform expression</title><content type='html'>(This tip is also on the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/MovingAZenossEventToHistoryViaTheTransformExpression"&gt;Zenoss Wiki&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;There are cases where certain events are just noise and you want them moved to history automatically, but perhaps without having ALL of the events in that event class moved to history. For example, you may wish to &lt;a href="http://devarthur.blogspot.com/2008/04/move-event-in-zenoss-from-one-event.html"&gt;move certain events from one event class to another based on matching text&lt;/a&gt; and at the same time have these go straight to history.&lt;br /&gt;&lt;br /&gt;To do this, enter the following in Transform of the event class mapping:&lt;br /&gt;&lt;br /&gt;evt._action="history"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-2605370640326560651?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/2605370640326560651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/moving-zenoss-event-to-history-via.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/2605370640326560651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/2605370640326560651'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/moving-zenoss-event-to-history-via.html' title='Moving a Zenoss event to history via the Transform expression'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-4062965789095847663</id><published>2008-04-05T19:29:00.003-04:00</published><updated>2008-04-20T22:13:09.083-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Move an event in Zenoss from one event class to another based on event text</title><content type='html'>(This tip is also on the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/MoveAnEventInZenossFromOneEventClassToAnotherBasedOnEventText"&gt;Zenoss Wiki&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Many events map to the /App/Failed event class, most notably the Windows Application Error_1000 error (http://&amp;lt;your Zenoss server&amp;gt;:8080/zport/dmd/Events/App/Failed/instances/Application%20Error_1000). I wanted to move some of these Application Error_1000 events to other event classes based on matching particular applications, but to leave the rest in /App/Failed. How does one do this?&lt;br /&gt;&lt;br /&gt;To begin, confirm that you have an existing event class to receive the events. If not, create a new one by navigating through the "Events" tree from the left navigation to get to the desired parent class, and once there, click the drop-down arrow next to &lt;span style="font-weight: bold;"&gt;Subclasses&lt;/span&gt; and choose "&lt;span style="font-weight: bold;"&gt;Add New Organizer...&lt;/span&gt;" Enter the name for the new event class, e.g. "MyApplication."&lt;br /&gt;&lt;br /&gt;Second, map an additional event class mapping to Application Error_1000. In /zport/dmd/Events/App/Failed, click the drop-down arrow to the left of &lt;span style="font-weight: bold;"&gt;EventClass Mappings&lt;/span&gt; and choose "&lt;span style="font-weight: bold;"&gt;Add Mapping...&lt;/span&gt;" For the ID of the mapping, type &lt;span style="font-weight: bold;"&gt;Application Error_1000_&amp;lt;name of the application to handle differently&amp;gt;&lt;/span&gt;, e.g. "Application Error_1000_MyApplication." (This event class mapping doesn't &lt;span style="font-style: italic;"&gt;have&lt;/span&gt; to be named this way, but it helps to have the application name as the suffix, so that the mapping gets grouped with any other Application Error_1000 mappings in the list.)&lt;br /&gt;&lt;br /&gt;Once you have done this, edit the properties of the new mapping. There are three key things you need to set:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Event Class Key:&lt;/span&gt; Set this to: &lt;span style="font-style: italic;"&gt;Application Error_1000&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Regex:&lt;/span&gt; I'm sure you can put in much more complicated regular expressions, but all that is necessary is to type some text from the event message, which will usually contain the application's executable name. If this is the case, all you need to enter is something like: &lt;span style="font-style: italic;"&gt;MyApplication.exe&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Transform:&lt;/span&gt; Here, you need to key in the Python expression that will re-map the event to a different event class, e.g.: &lt;span style="font-style: italic;"&gt;evt.eventClass="/App/Failed/MyApplication"&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Save your changes to this new event class mapping. Now you need to sequence all the Application Error_1000* events so that  this custom entry is matched first. Edit the new mapping and click on the &lt;span style="font-weight: bold;"&gt;Sequence&lt;/span&gt; tab. Make sure that your new mapping (&lt;span style="font-style: italic;"&gt;Application Error_1000_MyApplication&lt;/span&gt;) has a &lt;span style="font-weight: bold;"&gt;lower sequence number&lt;/span&gt; than the generic Application Error_1000 entry. I'm not sure if the sequence numbers need to start at zero, but I've done it that way. So, make your new class sequence 0, and the generic Application Error_1000 class sequence 1. Don't forget to save your changes.&lt;br /&gt;&lt;br /&gt;That's it--the events matching your custom event class mapping will be moved to the target event class, and all the others will be left in the original class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-4062965789095847663?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/4062965789095847663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/move-event-in-zenoss-from-one-event.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4062965789095847663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4062965789095847663'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/move-event-in-zenoss-from-one-event.html' title='Move an event in Zenoss from one event class to another based on event text'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6653868245992197818</id><published>2008-04-05T17:14:00.006-04:00</published><updated>2008-04-20T22:14:10.925-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Change Zenoss event severity based on message text</title><content type='html'>(This tip is also on the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/ChangeEventSeverityBasedOnEventMessageText"&gt;Zenoss Wiki&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;If you have events being mapped to a particular event class, generally one event severity gets applied to all of those events. If, however, you want to change the event severity of certain events based on the contents of the event message, do the following:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Navigate to the event class (under "Classes' in the left navigation, click Events, and then navigate to the event class containing the events you wish to conditionally map).&lt;/li&gt;&lt;li&gt;Using to drop-down arrow in the tab bar, choose More | Transform&lt;/li&gt;&lt;li&gt;In the Transform entry area, enter the following:&lt;/li&gt;&lt;/ol&gt;         &lt;br /&gt;if evt.message.find("text to find") &gt;= 0:&lt;br /&gt;    evt.severity = &amp;lt;desired severity&amp;gt;&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;&lt;br /&gt;if evt.message.find("timegenerated") &gt;= 0:&lt;br /&gt;    evt.severity = 3&lt;br /&gt;&lt;br /&gt;The above will change the severity of any events containing the text "timegenerated" from the default for the event class to 3 (warning). For your convenience, the event severity values are as follows:&lt;br /&gt;&lt;br /&gt;&lt;table style="display: inline; font-size: 1em; border-collapse: collapse;" border="1"&gt;&lt;tbody&gt; &lt;tr&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;5&lt;/div&gt;&lt;/td&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;Critical&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;4&lt;/div&gt;&lt;/td&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;Error&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;3&lt;/div&gt;&lt;/td&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;Warning&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;2&lt;/div&gt;&lt;/td&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;Info&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;1&lt;/div&gt;&lt;/td&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;Debug&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;0&lt;/div&gt;&lt;/td&gt; &lt;td class="ms-rtetablecells" style="vertical-align: top;"&gt; &lt;div&gt;Clear&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6653868245992197818?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6653868245992197818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/change-zenoss-event-severity-based-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6653868245992197818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6653868245992197818'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/change-zenoss-event-severity-based-on.html' title='Change Zenoss event severity based on message text'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1118656342708930226</id><published>2008-04-05T16:51:00.003-04:00</published><updated>2008-04-05T16:59:02.996-04:00</updated><title type='text'>Zenoss Percentage Used for /Perf/Filesystem events</title><content type='html'>By default, Zenoss does not show the percentage of the filesystem used when showing disk space events (/Perf/Filesystem). The approach detailed below (also on the &lt;a href="http://www.zenoss.com/community/wiki/tips-and-tricks/PercentageUsedForFilesystemThresholdImproved"&gt;Zenoss Wiki&lt;/a&gt;) does the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Shows both the percentage used in the event summary as well as the amount of free space remaining in GB&lt;/li&gt;&lt;li&gt;Changes the event severity to critical (red) when the percentage free is 5% or less&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Access http://&lt;your&gt;:8080/zport/dmd/Events/Perf/Filesystem and enter the following for the transform:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;fs_id = device.prepId(evt.component)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;for f in device.os.filesystems():&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if f.id != fs_id: continue&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p = (float(f.usedBytes()) / f.totalBytes()) * 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;freeAmtGB = (float(f.totalBytes() - f.usedBytes())) / 1024 / 1024 / 1024&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;evt.summary = "Disk space low: %3.1f%% used (%3.2f GB free)" % (p, freeAmtGB)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if p &gt;= 95.0: evt.severity = 5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break&lt;/span&gt;&lt;/span&gt;&lt;/your&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1118656342708930226?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1118656342708930226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/04/zenoss-percentage-used-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1118656342708930226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1118656342708930226'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/04/zenoss-percentage-used-for.html' title='Zenoss Percentage Used for /Perf/Filesystem events'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7450204638033482442</id><published>2008-03-26T07:34:00.003-04:00</published><updated>2008-04-22T09:59:40.873-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Citrix'/><title type='text'>Access Denied with Citrix WISP</title><content type='html'>I was attempting to install and activate the Citrix Web Interface for SharePoint on MOSS 2007 but was getting nowhere. The solutions appeared to add, deploy, and activate without error, but when I hit any of the Citrix administration links on the site collection root’s Site Settings page in the portal, all I received was 'Unknown Error.'&lt;br /&gt;&lt;br /&gt;I had to first apply a registry hack to get the Citrix code to log anything that was going wrong. From its admin guide:&lt;br /&gt;&lt;br /&gt;You can also find useful troubleshooting information in the log files stored in sharepoint\LOGS\LogFolder, where LogFolder is a location you can specify by setting a string value for LogFolder in the following registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\WISP.&lt;br /&gt;&lt;br /&gt;Without creating this key, nothing is logged. After creating it, I could see a curious sequence of events when trying to activate the Citrix Access Core feature:&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;Adding List Item Event Receiver: Added&lt;br /&gt;Adding List Item Event Receiver: Deleting&lt;br /&gt;Adding List Item Event Receiver: Deleted&lt;br /&gt;Elevating privilege, now running as DOMAIN\moss-pool-dev&lt;br /&gt;Adding new configuration update job (ConfigUpdateJob-default-WIConfiguration(DMOSS01))&lt;br /&gt;AddConfigurationUpdateJob() Error: Access denied.&lt;br /&gt; at Microsoft.SharePoint.Administration.SPPersistedObject.Update()&lt;br /&gt; at Microsoft.SharePoint.Administration.SPJobDefinition.Update()&lt;br /&gt; at Citrix.WISP.Configuration.Jobs.UpdateJob..ctor(String jobName, SPSite site, SPServer server, String configurationName, String configurationType, String filename, List`1 featureIds, SPJobLockType targetType)&lt;br /&gt; at Citrix.WISP.Configuration.Jobs.Installer.&lt;&gt;c__DisplayClass2.&lt;addconfigurationupdatejob&gt;b__0()&lt;br /&gt;End of Elevating privilege, now running as DOMAIN\apenn&lt;br /&gt;Adding new job CitrixAccessCoreDeployment(DMOSS01)(Citrix Access Core Service Provider Deployment) to DMOSS01(Application)&lt;br /&gt;AddDeploymentJob() Error: Access denied.&lt;br /&gt; at Microsoft.SharePoint.Administration.SPPersistedObject.Update()&lt;br /&gt; at Microsoft.SharePoint.Administration.SPJobDefinition.Update()&lt;br /&gt; at Citrix.WISP.AccessCore.Jobs.DeploymentJob..ctor(String jobName, SPSite site, SPServer server, SPJobLockType targetType, String title)&lt;br /&gt; at Citrix.WISP.AccessCore.Jobs.Installer.&lt;&gt;c__DisplayClass2.&lt;adddeploymentjob&gt;b__0()&lt;br /&gt;Updating Property Citrix.WISP.Site.Active in site https://devextranet.DOMAIN.local with value True&lt;br /&gt;CitrixContentRedirectionModule: Add the web.config mod&lt;br /&gt;- SPWebApp Name: Customer Extranet&lt;br /&gt;- add/remove here: configuration/system.web/compilation/expressionBuilders&lt;br /&gt;- the following: &lt;add expressionprefix="WISP" type="Citrix.WISP.Util.ExpressionBuilders.ResourceExpressionBuilder, WISP.Util, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2a1c4d50c069f5e4"&gt;&lt;br /&gt;CitrixAccessCore::Activate Error: Access to the path 'C:\Inetpub\wwwroot\wss\VirtualDirectories\devextranet.DOMAIN.local80\web.config' is denied.&lt;br /&gt; at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)&lt;br /&gt; at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)&lt;br /&gt; at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)&lt;br /&gt; at System.Xml.XmlDocument.Save(String filename)&lt;br /&gt; at Microsoft.SharePoint.Administration.SPWebApplication.ApplyWebConfigModifications()&lt;br /&gt; at Microsoft.SharePoint.Administration.SPWebService.ApplyWebConfigModifications()&lt;br /&gt; at Citrix.WISP.AccessCore.FeatureReceiver.&lt;&gt;c__DisplayClass2.&lt;changeexpressionbuilderinwebconfig&gt;b__0()&lt;br /&gt; at Microsoft.SharePoint.SPSecurity.CodeToRunElevatedWrapper(Object state)&lt;br /&gt; at Microsoft.SharePoint.SPSecurity.&lt;&gt;c__DisplayClass4.&lt;runwithelevatedprivileges&gt;b__2()&lt;br /&gt; at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)&lt;br /&gt; at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)&lt;br /&gt; at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)&lt;br /&gt; at Citrix.WISP.AccessCore.FeatureReceiver.changeExpressionBuilderInWebConfig(SPWebApplication app, Boolean remove)&lt;br /&gt; at Citrix.WISP.AccessCore.FeatureReceiver.FeatureActivated(SPFeatureReceiverProperties properties)&lt;br /&gt;CitrixAccessCore: Ended at Monday, March 24, 2008 9:51:03 AM&lt;br /&gt;&lt;br /&gt;It was apparent it was trying to take some actions under the application pool identity for the web application which failed with 'access denied,' and then was trying to use MY account (a domain administrator, MOSS farm administrator, and local MOSS server administrator) for other actions and STILL getting 'access denied!'&lt;br /&gt;&lt;br /&gt;The administrator's guide for WISP does state:&lt;br /&gt;&lt;br /&gt;To complete the installation you must have server farm administrator permissions, meaning you must be a member of the&lt;br /&gt;administrators group on each of your Web and Application servers, and SQL security administrator with database creator rights on each of your SQL servers.&lt;br /&gt;&lt;br /&gt;Those rights my account had; however, to correct the 'access denied' problem, I had to make my APPLICATION POOL IDENTITY:&lt;br /&gt;&lt;/runwithelevatedprivileges&gt;&lt;/changeexpressionbuilderinwebconfig&gt;&lt;/add&gt;&lt;/adddeploymentjob&gt;&lt;/addconfigurationupdatejob&gt;&lt;ul&gt;&lt;li&gt;A member of the Farm Administrators group in MOSS; and &lt;/li&gt;&lt;li&gt;A local machine administrator on the MOSS server.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;C'mon Citrix, the application pool identity is supposed to be a low-privileged account.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7450204638033482442?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7450204638033482442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/03/access-denied-with-citrix-wisp.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7450204638033482442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7450204638033482442'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/03/access-denied-with-citrix-wisp.html' title='Access Denied with Citrix WISP'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7005263786239654920</id><published>2008-02-14T20:08:00.003-05:00</published><updated>2008-04-20T22:14:59.968-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu rkhunter configuration</title><content type='html'>I recently added rkhunter, a rootkit detection utility, to my Ubuntu installation. After doing so, I started picking up warnings from cron during its daily scan:&lt;br /&gt;&lt;pre wrap=""&gt;Warning: Found enabled inetd service: /usr/sbin/vmware-authd&lt;br /&gt;Warning: Hidden directory found: &lt;i class="moz-txt-slash"&gt;&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;etc&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;&lt;/i&gt;.java&lt;br /&gt;Warning: Hidden directory found: &lt;i class="moz-txt-slash"&gt;&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;dev&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;&lt;/i&gt;.static&lt;br /&gt;Warning: Hidden directory found: &lt;i class="moz-txt-slash"&gt;&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;dev&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;&lt;/i&gt;.udev&lt;br /&gt;Warning: Hidden directory found: &lt;i class="moz-txt-slash"&gt;&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;dev&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;&lt;/i&gt;.initramfs&lt;br /&gt;Warning: Hidden file found: &lt;i class="moz-txt-slash"&gt;&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;dev&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;&lt;/i&gt;.tmp-2-0: block special (2/0)&lt;/pre&gt;Research indicates that these particular warnings are spurious--I know I have VMware running, and the others seem to be facets of the way Ubuntu is constructed. To suppress them, I added the following lines to /etc/rkhunter.conf:&lt;br /&gt;&lt;br /&gt;ALLOWHIDDENDIR=/etc/.java&lt;br /&gt;ALLOWHIDDENDIR=/dev/.static&lt;br /&gt;ALLOWHIDDENDIR=/dev/.udev&lt;br /&gt;ALLOWHIDDENDIR=/dev/.initramfs&lt;br /&gt;ALLOWHIDDENFILE=/dev/.tmp-2-0&lt;br /&gt;INETD_ALLOWED_SVC=/usr/sbin/vmware-authd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7005263786239654920?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7005263786239654920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/02/ubuntu-rkhunter-configuration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7005263786239654920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7005263786239654920'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/02/ubuntu-rkhunter-configuration.html' title='Ubuntu rkhunter configuration'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-4332138087664945522</id><published>2008-01-11T08:21:00.002-05:00</published><updated>2008-04-22T10:00:05.282-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>MOSS audiences and missing AD groups</title><content type='html'>I had a problem where I was trying to construct audiences in MOSS with members based on certain Active Directory groups, but I had a handful of groups that did not appear in the "browse" dialog on the Add Audience Rule page. It turns out these groups were empty, and that the group list is populated by reading the groups each user is a member of during the profile import. This dialog does NOT contact AD.&lt;br /&gt;&lt;br /&gt;I added an account to the groups in question and repeated the profile import. Voila--the groups appeared in the browse dialog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-4332138087664945522?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/4332138087664945522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/01/moss-audiences-and-missing-ad-groups.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4332138087664945522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/4332138087664945522'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/01/moss-audiences-and-missing-ad-groups.html' title='MOSS audiences and missing AD groups'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-48354630440787264</id><published>2008-01-10T07:32:00.001-05:00</published><updated>2008-04-20T22:17:12.466-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Zenoss Core web site (Zope application server) crash</title><content type='html'>&lt;div&gt;We had two Zenoss winexe processes go out of control yesterday. They consumed  all available CPU and RAM and caused the rest of the daemons to crash/slow down.  When we restarted Zenoss ("zenoss stop" followed by "zenoss start"), all Zenoss  daemons came up, but zopectl (the Zope application server daemon) immediately  died.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;We found several of the following errors in $ZENHOME/log/event.log that  appeared to be related:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;2008-01-09T10:15:36 ERROR Zope.SiteErrorLog &lt;a href="http://pmon01.hchb.local:8080/zport/RenderServer/render"&gt;http://server.domain.local:8080/zport/RenderServer/render&lt;/a&gt;&lt;br /&gt;Traceback  (most recent call last):&lt;br /&gt;File  "usr/local/zenoss/lib/python/Zope2/App/startup.py", line 167, in  zpublisher_exception_hook&lt;br /&gt;File  "usr/local/zenoss/lib/python/ZPublisher/Publish.py", line 120, in publish&lt;br /&gt; File "usr/local/zenoss/lib/python/Zope2/App/startup.py", line 233, in  commit&lt;br /&gt;File "usr/local/zenoss/lib/python/transaction/_manager.py", line 84,  in commit&lt;br /&gt;File "usr/local/zenoss/lib/python/transaction/_transaction.py",  line 381, in commit&lt;br /&gt;File  "usr/local/zenoss/lib/python/transaction/_transaction.py", line 379, in  commit&lt;br /&gt;File "usr/local/zenoss/lib/python/transaction/_transaction.py", line  424, in _commitResources&lt;br /&gt;File  "usr/local/zenoss/lib/python/ZODB/Connection.py", line 462, in commit&lt;br /&gt;File  "usr/local/zenoss/lib/python/ZODB/Connection.py", line 495, in  _commit&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ConflictError: database conflict error (oid 0x3b, class  Products.ZenUtils.PObjectCache.PObjectCache)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;u&gt;&lt;br /&gt;Remediation:&lt;/u&gt;&lt;/div&gt; &lt;ol&gt;&lt;li&gt;Make sure zeoctl is started (as zenoss, "zeoctl start" followed by a few  seconds pause and then "zenoss status" to confirm it has a PID and is running).  &lt;/li&gt;&lt;li&gt;cd $ZENHOME/var  &lt;/li&gt;&lt;li&gt;rm *.zec (this deletes invalid cache files that are causing the above error)   &lt;/li&gt;&lt;li&gt;zopectl start  &lt;/li&gt;&lt;li&gt;Wait a few seconds, then check if Zope stays running (use "zenoss status" or  just hit the website to confirm).&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-48354630440787264?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/48354630440787264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/01/zenoss-core-web-site-zope-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/48354630440787264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/48354630440787264'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/01/zenoss-core-web-site-zope-application.html' title='Zenoss Core web site (Zope application server) crash'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7629692674092350828</id><published>2008-01-04T09:15:00.002-05:00</published><updated>2008-04-22T10:00:29.138-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>WSS/MOSS SP1 application caused DCOM activation error</title><content type='html'>I applied the WSS 3.0 SP1 and MOSS SP1 to one of my MOSS installations and started getting the following errors:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Application Log&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;Event Source:    Office SharePoint Server&lt;br /&gt;Event Category:    Office Server Shared Services&lt;br /&gt;Event ID:    6482&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID&lt;br /&gt;{3D42CCB1-4665-4620-92A3-478F47389230}&lt;br /&gt;to the user HCHB\moss-svc-prd SID (S-1-5-21-796845957-484763869-839522115-12856).  This security permission can be modified using the Component Services administrative tool.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;System Log&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Event Source:    DCOM&lt;br /&gt;Event Category:    None&lt;br /&gt;Event ID:    10016&lt;br /&gt;&lt;br /&gt;The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID&lt;br /&gt;{3D42CCB1-4665-4620-92A3-478F47389230}&lt;br /&gt;to the user HCHB\moss-svc-prd SID (S-1-5-21-796845957-484763869-839522115-12856).  This security permission can be modified using the Component Services administrative tool.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_0UNL_lijppY/R35BZByD3PI/AAAAAAAAAAM/VFIdLcgtIuE/s1600-h/OSearch.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://bp3.blogger.com/_0UNL_lijppY/R35BZByD3PI/AAAAAAAAAAM/VFIdLcgtIuE/s320/OSearch.png" alt="" id="BLOGGER_PHOTO_ID_5151626921989364978" border="0" /&gt;&lt;/a&gt;I tracked down these class IDs and it turns out they belong to the &lt;span style="font-weight: bold;"&gt;OSearch &lt;/span&gt;DCOM application. I swear, I wish in this modern era that MOSS didn't use DCOM. To fix this, verify that your primary MOSS service account is in the &lt;span style="font-weight: bold;"&gt;Distributed COM Users&lt;/span&gt; group on the MOSS server. Then, in &lt;span style="font-weight: bold;"&gt;dcomcnfg&lt;/span&gt;, locate the OSearch application and choose &lt;span style="font-weight: bold;"&gt;Properties&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;On the &lt;span style="font-weight: bold;"&gt;Security&lt;/span&gt; tab, &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_0UNL_lijppY/R35BnByD3QI/AAAAAAAAAAU/rK5cEcutc6A/s1600-h/OSearchProperties.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://bp3.blogger.com/_0UNL_lijppY/R35BnByD3QI/AAAAAAAAAAU/rK5cEcutc6A/s320/OSearchProperties.png" alt="" id="BLOGGER_PHOTO_ID_5151627162507533570" border="0" /&gt;&lt;/a&gt;click &lt;span style="font-weight: bold;"&gt;Edit&lt;/span&gt; on the Launch and Activation Permissions area and add the &lt;span style="font-weight: bold;"&gt;Distributed COM Users&lt;/span&gt; group to the ACL. Check both the &lt;span style="font-weight: bold;"&gt;Local Launch&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;Local Activation&lt;/span&gt; for this group. Restart OSearch (net stop osearch followed by net start osearch at a command prompt) and that should fix the problem.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7629692674092350828?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7629692674092350828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2008/01/wssmoss-sp1-application-caused-dcom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7629692674092350828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7629692674092350828'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2008/01/wssmoss-sp1-application-caused-dcom.html' title='WSS/MOSS SP1 application caused DCOM activation error'/><author><name>Arthur Penn</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://bp3.blogger.com/_0UNL_lijppY/R35BZByD3PI/AAAAAAAAAAM/VFIdLcgtIuE/s72-c/OSearch.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-8711921717493713463</id><published>2007-12-20T14:18:00.000-05:00</published><updated>2008-04-22T10:01:18.417-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wmi'/><title type='text'>WQL Queries Fail Against Valid Performance Counters</title><content type='html'>I was trying to run WQL queries against remote Windows systems to read things such as the current IIS connections. The query looks like the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SELECT CurrentConnections FROM Win32_PerfFormattedData_W3SVC_WebService&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I kept getting an 0x80041010 ("Invalid Class") error from the remote DCOM objects even though the performance objects clearly were visible and monitorable in perfmon. This error code means that either:&lt;br /&gt;&lt;br /&gt;- You are trying to query a non-existant performance object;&lt;br /&gt;- The performance object exists and has not been registered; or&lt;br /&gt;- The performance object is not registered properly.&lt;br /&gt;&lt;br /&gt;I went through a number of troubleshooting steps, including jacking around with dcomcnfg (launch/activation permissions, default authentication levels), re-registering performance counter DLLs, etc. and nothing helped. Finally, executing the following command on the target servers proved to be the key:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;winmgmt /clearadap        &lt;/span&gt;&lt;span&gt;(thanks to &lt;a href="http://blogs.technet.com/rbeard47/pages/wmi-performance-counters.aspx"&gt;this site&lt;/a&gt; for advising about this clear command)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;winmgmt /resyncperf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This tool fixes invalid registry entries around the performance DLLs and fixed all of my WQL problems.&lt;br /&gt;&lt;br /&gt;Some other steps that may help:&lt;br /&gt;&lt;br /&gt;If the performance objects haven't been registered, install the Windows Server Support Tools, and run exctrlst. This tool allows you to uncheck and re-check the registered performance objects and may help with the above. If you use this tool on any classes, follow the execution with a call to winmgmt as above.&lt;br /&gt;&lt;br /&gt;To rebuild all Performance counters including extensible and third party counters in Windows Server 2003, type the following commands at a command prompt. Press ENTER after each command.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cd \%windir%\system32&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;lodctr /R&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Additional WMI Troubleshooting Resources&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa394603.aspx"&gt;WMI Troubleshooting (MSDN)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/help/wmi.mspx"&gt;WMI Isn't Working!&lt;/a&gt; (TechNet--good troubleshooting tips)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=09dfc342-648b-4119-b7eb-783b0f7d1178&amp;amp;displayLang=en"&gt;Scriptomatic 2.0&lt;/a&gt;: This tool shows you a list of all registered WMI classes on the machine with the WQL format class names.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ks-soft.net/hostmon.eng/wmi/index.htm"&gt;WMI Explorer&lt;/a&gt;: Another good tool for exploring registered WMI classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8711921717493713463?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/8711921717493713463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/12/wql-queries-fail-against-valid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8711921717493713463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8711921717493713463'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/12/wql-queries-fail-against-valid.html' title='WQL Queries Fail Against Valid Performance Counters'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1339748719085943797</id><published>2007-10-19T16:27:00.000-04:00</published><updated>2008-01-07T22:11:39.424-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>GnuCash 2.2 on Ubuntu Gutsy - with OFX Direct Connect!</title><content type='html'>When I started running Ubuntu Gutsy (7.10) about a month and a half ahead of its release this week, its GnuCash package was still in the 2.0 series, and I wanted to run 2.2. While 2.2 is now in the official repositories, I understand that &lt;a href="http://ubuntuforums.org/showthread.php?t=293494"&gt;a licensing issue&lt;/a&gt; prevents the Ubuntu GnuCash package from shipping with OFX Direct Connect enabled (it will import qfx/ofx files but not connect directly to financial institutions to retrieve transactions, as one of mine requires). So, with both of these goals in mind, I set out to build my own GnuCash 2.2 with OFX Direct Connect. Unfortunately, this process is not for the average user...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Building GnuCash&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, get a terminal open and install all the dependencies for this process:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo aptitude install libktoblzcheck1-dev libqt3-mt-dev libofx-dev libxml2-dev libgconf2-dev guile-1.6-slib guile-1.6-dev libglib2.0-dev libgtk2.0-dev libgnomeui-dev libgoffice-0-dev libgtkhtml3.8-dev libgwenhywfar38-dev slib gettext devscripts build-essential&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Whew! Now we need to build &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=34542"&gt;libchipcard3-3.0.3&lt;/a&gt;, a dependency of the aqbanking library we will build later. This has no dependencies. For the uninitiated, this process consists of unpacking the archive and then executing the following in a terminal:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cd  &lt;name&gt;[folder in which you unpacked libchipcard]&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/name&gt;&lt;/span&gt;&lt;br /&gt;That done, we build &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=115695"&gt;aqbanking 2.3.2&lt;/a&gt;. This is similar to building libchipcard above, but you have to pass some arguments when running the configure step:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;./configure --with-frontends="cbanking g2banking qbanking"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now download and unpack the latest &lt;a href="http://www.gnucash.org/pub/gnucash/sources/stable/"&gt;GnuCash 2.2 source&lt;/a&gt;. You are looking for the latest archive starting with just "gnucash." Go through the same process again, except do the following for the configure step:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;./configure --enable-ofx --enable-hbci&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Configuring OFX Direct Connect&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's it--once you are done, you should have a shiny installed GnuCash 2.2 with OFX Direct Connect support (you will have an Actions &gt; Online Actions menu). Next comes the frustrating process of figuring out how to connect to your bank! This is where applications like Quicken and Microsoft Money have done the hard work for you and baked in all these details. Unfortunately, it is somewhat difficult to find out the parameters you need to pass from the Direct Connect interface to get a successful download.  The GnuCash wiki has a &lt;a href="http://wiki.gnucash.org/wiki/OFX_Direct_Connect_Bank_Settings"&gt;nice article&lt;/a&gt; that details some of the settings and contains instructions for downloading a script that will pull down the raw information about thousands  of financial institutions. Follow these instructions to get the configuration information about your bank.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Add a User&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you have this done and have located the details for your financial institution, in GnuCash, go to Tools &gt; Online Banking Setup. The Online Banking Setup Wizard will launch. Click the Forward button until you see the button labeled Start Aqbanking Wizard, and click it. In the AqBanking Wizard, go to the Users tab and click New.&lt;br /&gt;&lt;br /&gt;Here's where the guesswork begins. Many fields exist in the wizard that may or may not be used by your particular institution. For example, for Charles Schwab, I put my online login (user) name in all three of the User name, User Id, and Customer Id fields. If you are downloading transactions from a bank account, put your bank's ABA routing number (the number at the bottom left of your checks) in the Bank Id field, and specify the country of your bank. For my credit card, I did specify the country, but put arbitrary text in the Bank Id field (I probably could have left it blank).&lt;br /&gt;&lt;br /&gt;Now let's move on to the OFX tab. Using the information downloaded about your financial institution, enter any of the FID, ORG, and Broker Id values that the institution is using (there will be values for those nodes in the downloaded XML file). Put the OFX server URL in the Server URL field in its complete https:// format. It doesn't seem to matter if you specify HTTP 1.0 or 1.1, and in fact with the version of the code I compiled, it always saves it as 1.0 regardless of what I do.&lt;br /&gt;&lt;br /&gt;For the checkboxes at the bottom, typically just check the following and then click the Get Accounts button:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Supports Account List Download&lt;/li&gt;&lt;li&gt;Supports Statement Download&lt;/li&gt;&lt;li&gt;(and, if a credit card) Send Empty Bank Id&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;You will be prompted for your password, and then it should pull down all the settings for the account(s) you have at that institution under the Accounts tab. You may wish to review what it downloaded and poke around in these settings, but I can't give any specific advice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Downloading Transactions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you have set up your institutions and accounts, you are ready to download. NOTE: some institutions (like Chase) have a setting in your online (not GnuCash) account configuration to enable OFX download before any of this will work. To get your transactions, open the account in GnuCash and click Actions &gt; Online Actions &gt; Get Transactions. When downloading for the first time, you may be prompted to accept the SSL certificate of the site, and you WILL be prompted to associate the GnuCash account with the OFX account you set up. Once you have done this, for subsequent downloads, just open the GnuCash account, go to the Get Transactions as above, and key in your password (the application does not store passwords).&lt;br /&gt;&lt;br /&gt;I hope this helps someone. While not for the faint of heart, it IS possible to have GnuCash downloading transactions directly from your bank/credit card company without any intervening file downloads.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1339748719085943797?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1339748719085943797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/10/gnucash-22-on-ubuntu-gutsy-with-ofx.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1339748719085943797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1339748719085943797'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/10/gnucash-22-on-ubuntu-gutsy-with-ofx.html' title='GnuCash 2.2 on Ubuntu Gutsy - with OFX Direct Connect!'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-738128007774428242</id><published>2007-10-03T21:44:00.000-04:00</published><updated>2007-10-16T20:49:16.169-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 7.10 Keyboard Shortcuts in compiz (Appearance &gt; Visual Effects)</title><content type='html'>I love the eye candy compiz provides in Ubuntu 7.10. (To enable this, go to System &gt; Preferences &gt; Appearance, and on the Visual Effects tab, turn on Normal or Extra effects.) However, as a keyboard shortcut nut, I lamented the fact that enabling these horked all my non-standard application launch shortcuts I had entered into gconf-editor. I dug around and figured out how to fix them. (Gripe: KDE handles this configuration waaaay better.)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;Run gconf-editor (Alt+F2, and type gconf-editor in the dialog box).&lt;/li&gt;&lt;li&gt;Drill down to apps | compiz | general | allscreens | options.&lt;/li&gt;&lt;li&gt;There are a series of command&lt;span style="font-style: italic;"&gt;x&lt;/span&gt; keys (command0 through command11). Pick any empty one(s) and type the command to start the application(s) you desire, e.g. for command0: speedcrunch&lt;/li&gt;&lt;li&gt;For any command&lt;span style="font-style: italic;"&gt;x&lt;/span&gt; you entered, find the corresponding run_command&lt;span style="font-style: italic;"&gt;x&lt;/span&gt;_key node further down the screen. Type the keystroke you desire to trigger running the command.  Special keys are:&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Control: &amp;lt;Control&amp;gt;  &lt;ctrl&gt;&lt;/ctrl&gt;&lt;/li&gt;&lt;li&gt;Alt: &amp;lt;Alt&amp;gt; &lt;alt&gt;&lt;/alt&gt;&lt;/li&gt;&lt;li&gt;Windows key: &amp;lt;Super&amp;gt; &lt;super&gt;&lt;/super&gt;&lt;/li&gt;&lt;li&gt;Shift: &amp;lt;Shift&amp;gt; &lt;shift&gt;&lt;br /&gt;&lt;/shift&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;So, to set the key sequence Windows+Alt+s to launch SpeedCrunch in the example above, I would type (not press) the following in run_command0_key: &lt;super&gt;&lt;alt&gt;&amp;lt;Super&amp;gt;&amp;lt;Alt&amp;gt;s&lt;br /&gt;&lt;br /&gt;Does anyone know how to represent the escape key? It used to be "Escape", but that doesn't seem to work with any of the combinations I tried.&lt;br /&gt;&lt;br /&gt;&lt;/alt&gt;&lt;/super&gt;** UPDATE 15 Oct: I learned that you can more naturally set the shortcut commands and keystrokes by installing the compizconfig-settings-manager package. Once installed, this is accessed via the System &gt; Preferences &gt; Advanced Desktop Effects Settings menu entry.&lt;br /&gt;&lt;br /&gt;Under its Command options, you can enter the commands that get stored in the commandx keys above. Then on the Actions tab under the Commands section, you can click in the Key column and type in the keystroke you wish to set for each command. I still had problems getting the Ctrl+Shift+Escape keystroke mapped, but for many keystrokes this is much easier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-738128007774428242?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/738128007774428242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/10/ubuntu-710-keyboard-shortcuts-in-compiz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/738128007774428242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/738128007774428242'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/10/ubuntu-710-keyboard-shortcuts-in-compiz.html' title='Ubuntu 7.10 Keyboard Shortcuts in compiz (Appearance &gt; Visual Effects)'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-1517748409266335572</id><published>2007-09-20T07:56:00.001-04:00</published><updated>2007-09-20T07:56:41.923-04:00</updated><title type='text'>Microsoft Hotfix Request Form</title><content type='html'>&lt;p&gt;&lt;a href="http://support.microsoft.com/gp/CUHotFix_LandingPage_Request"&gt;http://support.microsoft.com/gp/CUHotFix_LandingPage_Request&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;I learned today that there is a web page you can use to request Microsoft hotfixes&lt;span style=""&gt; &lt;/span&gt;that are not available for public download. You supply your email address and the KB article number and a representative will contact you within eight hours.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-1517748409266335572?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/1517748409266335572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/09/microsoft-hotfix-request-form.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1517748409266335572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/1517748409266335572'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/09/microsoft-hotfix-request-form.html' title='Microsoft Hotfix Request Form'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6916063604808889028</id><published>2007-02-08T19:58:00.000-05:00</published><updated>2007-02-08T20:06:42.697-05:00</updated><title type='text'>Associating FreeMind mind map files with FreeMind in KDE</title><content type='html'>&lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt; is a fantastic cross-platform mind map application. If you haven't used it, I highly recommend it as it is a revolutionary way of taking notes, organizing thoughts, and planning.&lt;br /&gt;&lt;br /&gt;On Windows, the FreeMind installer offers to associate its .mm files with the application in Windows Explorer. On KDE however, you have to do this yourself. I happened to put the missing pieces together on how to do this when looking over Beagle index logs that revealed the FreeMind MIME type to me. The steps are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Run kcontrol (KDE Control Center).&lt;/li&gt;&lt;li&gt;Under KDE Components, choose File Associations.&lt;/li&gt;&lt;li&gt;Click Add. Change the group to text, and enter x-troff-mm for the type name.&lt;/li&gt;&lt;li&gt;Under Filename Patterns, enter *.mm. Fill in the description as FreeMind Mind Map. &lt;/li&gt;&lt;li&gt;Under Application Preference Order, click Add, and browse to the FreeMind application (on mine, it installed under Office; you can probably just enter /usr/bin/freemind).&lt;/li&gt;&lt;li&gt;Click Apply and you're all done.&lt;/li&gt;&lt;/ol&gt;If you want to associate the FreeMind icon while you are here, you'll have to download it from the source tree. In the 0.8.0 source zip file, it's at freemind/images/FreeMindWindowIcon.png. I copied this to /usr/share/icons and then made the association in kcontrol.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6916063604808889028?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6916063604808889028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/02/associating-freemind-mind-map-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6916063604808889028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6916063604808889028'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/02/associating-freemind-mind-map-files.html' title='Associating FreeMind mind map files with FreeMind in KDE'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-7923406257941270519</id><published>2007-02-02T14:06:00.001-05:00</published><updated>2008-04-22T10:01:41.823-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='wf'/><title type='text'>Visual Studio Extensions for WF conflict with Office Live Meeting 2005</title><content type='html'>Not sure if this is related to me trying to develop on Vista, but when I run the installer for Visual Studio 2005 Extensions for Windows Workflow Foundation (EN), it tries to repair or reinstall &lt;span style="font-weight: bold;"&gt;Office Live Meeting 2005&lt;/span&gt; and never actually installs the WF extensions. I had to let it remove Live Meeting (repair didn't work) before it would actually install the extensions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-7923406257941270519?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/7923406257941270519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/02/visual-studio-extensions-for-wf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7923406257941270519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/7923406257941270519'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/02/visual-studio-extensions-for-wf.html' title='Visual Studio Extensions for WF conflict with Office Live Meeting 2005'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6113650309076956209</id><published>2007-01-31T19:16:00.000-05:00</published><updated>2008-04-22T10:13:07.814-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>Good CSS reference guide for MOSS</title><content type='html'>http://www.heathersolomon.com/content/sp07cssreference.htm&lt;br /&gt;&lt;br /&gt;This site has a good guide to the MOSS CSS classes, useful for when you are trying to override certain styles to customize the portal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6113650309076956209?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6113650309076956209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/01/good-css-reference-guide-for-moss.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6113650309076956209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6113650309076956209'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/01/good-css-reference-guide-for-moss.html' title='Good CSS reference guide for MOSS'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6050253287740379160</id><published>2007-01-31T16:46:00.000-05:00</published><updated>2008-04-22T10:13:30.266-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Missing telnet client in Vista</title><content type='html'>I needed to check if an SMTP server would respond on the correct port and DNS name. I fired up telnet from a command prompt... and discovered that there was no telnet client. &lt;a href="http://blogs.msdn.com/shamit/archive/2006/07/07/659513.aspx"&gt;This post&lt;/a&gt; indicates it's disabled by default and contains instructions for enabling it again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6050253287740379160?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6050253287740379160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/01/missing-telnet-client-in-vista.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6050253287740379160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6050253287740379160'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/01/missing-telnet-client-in-vista.html' title='Missing telnet client in Vista'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-2863524260288354618</id><published>2007-01-12T16:22:00.000-05:00</published><updated>2008-04-22T10:13:30.266-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Vista RTM and its networking "tuning"</title><content type='html'>I was having some maddening issues with Vista Business RTM:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MSN Messenger was constantly getting disconnected, but Google Talk stayed rock solid.&lt;/li&gt;&lt;li&gt;LiveMeeting (the Windows version) would not stay connected.&lt;/li&gt;&lt;li&gt;Firefox would halfway load a web page and then freeze.&lt;/li&gt;&lt;/ul&gt;It seems that Vista was automatically tuning my networking settings. Since declining this assistance, the above programs started running normally. The fix for me was to disable network auto tuning:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click Start and type cmd.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When  cmd.exe appears, right click and select Run as Administrator.&lt;/li&gt;&lt;li&gt;Enter the following command: netsh int tcp set global autotuninglevel=disabled&lt;/li&gt;&lt;li&gt;Reboot after getting the OK message.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-2863524260288354618?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/2863524260288354618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2007/01/vista-rtm-and-its-networking-tuning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/2863524260288354618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/2863524260288354618'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2007/01/vista-rtm-and-its-networking-tuning.html' title='Vista RTM and its networking &quot;tuning&quot;'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-8776446171697337792</id><published>2006-10-17T13:50:00.000-04:00</published><updated>2008-04-22T10:13:30.266-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>SQL Server 2005 Developer and AdventureWorks on Vista</title><content type='html'>I had a problem getting the AdventureWorks sample database that I installed to run under Vista RC1. SQL Server Management Studio kept reporting an error when I tried to access either the AdventureWorks or AdventureWorksDW databases. To get around this, I discovered that I needed to add my Windows user account to the sysadmin server role. After doing this, I was able to access both databases.&lt;br /&gt;&lt;br /&gt;On a side note, I can't get SQL Server 2005 SP1 to install. It keeps prompting with a dialog box reading "Error performing inpage operation" regardless of whether or not I run the installer as administrator. Looks like I'm stuck waiting for &lt;a href="http://www.microsoft.com/sql/howtobuy/windowsvistasupport.mspx"&gt;SQL Server 2005 SP2&lt;/a&gt; for this to work right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8776446171697337792?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/8776446171697337792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2006/10/sql-server-2005-developer-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8776446171697337792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8776446171697337792'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2006/10/sql-server-2005-developer-and.html' title='SQL Server 2005 Developer and AdventureWorks on Vista'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-8819055378426095751</id><published>2006-10-06T08:00:00.000-04:00</published><updated>2008-04-22T10:13:30.267-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Getting Virtual Server 2005 R2 to work under Vista</title><content type='html'>I found an &lt;a href="http://blogs.msdn.com/mattlind/archive/2006/09/06/742356.aspx"&gt;excellent post&lt;/a&gt;  discussing how to make Virtual Server 2005 work on Vista, but the key thing that helped me was changing the authentication on the VirtualServer virtual directory to Basic Authentication (it was originally Anonymous Authentication). This prevented me from having to run IE as an administrator.&lt;br /&gt;&lt;br /&gt;Update 16 Oct: after moving my VMs back to my machine, I discovered that the basic auth enabled me to start the machines and use the virtual machine web site, but when I tried the ActiveX control to actually control the machines, it would not accept my user account when prompting for the remote control. Virtual Server 2005 R2 SP1 beta 2 did not help. I ended up going back to Windows integrated security for the VirtualServer virtual directory and doing a "Run as Administrator" on IE before browsing to the administration website.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-8819055378426095751?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/8819055378426095751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2006/10/getting-virtual-server-2005-r2-to-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8819055378426095751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/8819055378426095751'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2006/10/getting-virtual-server-2005-r2-to-work.html' title='Getting Virtual Server 2005 R2 to work under Vista'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-6674500140057627271</id><published>2006-09-29T07:43:00.000-04:00</published><updated>2008-04-22T10:13:30.267-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Burning software for Vista?</title><content type='html'>Aargh, it seems to be pretty difficult to find any CD/DVD burning software for Vista. I had been using Nero 6 but it is marked as not compatible upon install (and I've read of other users having a problem with this). Any thoughts as to what I can use?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-6674500140057627271?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/6674500140057627271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2006/09/burning-software-for-vista.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6674500140057627271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/6674500140057627271'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2006/09/burning-software-for-vista.html' title='Burning software for Vista?'/><author><name>Arthur Penn</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></entry><entry><id>tag:blogger.com,1999:blog-2243616480538523950.post-547903711546290669</id><published>2006-09-28T08:25:00.000-04:00</published><updated>2008-04-22T10:13:59.450-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Early Windows Vista RC1 impressions</title><content type='html'>My hard drive died, so I rebuilt my laptop with Windows Vista RC1. Here are my initial impressions after a week living with Vista:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Good&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Backup is integrated and does scheduled backups with differentials&lt;/li&gt;&lt;li&gt;Shore is purty&lt;/li&gt;&lt;li&gt;New security features exist to allow 'sudo' when executing programs with elevated privilege needed&lt;/li&gt;&lt;li&gt;BitLocker drive encryption (in Vista Ultimate) is native&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Bad&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Trend AntiVirus does not install&lt;/li&gt;&lt;li&gt;FreeMind&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Open dialog fails (but you can open mindmaps by drag-and-drop or double-click association)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Save As dialog fails (so, you need to have a blank mindmap to copy for new maps); existing maps can be saved&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Uses a ton of HD space (~10GB just for Vista alone)&lt;/li&gt;&lt;li&gt;Nero 6 doesn't work&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Other Points of Interest&lt;/span&gt;&lt;ul&gt;&lt;li&gt;.NET Framework 1.1 is not installed; have to install it and the SP1 patch for it to function&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2243616480538523950-547903711546290669?l=devarthur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devarthur.blogspot.com/feeds/547903711546290669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://devarthur.blogspot.com/2006/09/early-windows-vista-rc1-impressions.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/547903711546290669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2243616480538523950/posts/default/547903711546290669'/><link rel='alternate' type='text/html' href='http://devarthur.blogspot.com/2006/09/early-windows-vista-rc1-impressions.html' title='Early Windows Vista RC1 impressions'/><author><name>Arthur Penn</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></entry></feed>
