<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.mediawhole.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CE8FQHk5eip7ImA9WxBbE0g.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877</id><updated>2010-03-12T11:13:31.722+11:00</updated><title>Dirty Words</title><subtitle type="html">Putting the "darn" in "darn it!" since your daddy was a wee boy.

Runtime comments on .net development, SharePoint WCM, and software engineering</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.mediawhole.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>234</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.mediawhole.com/DirtyWords" /><feedburner:info uri="dirtywords" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ak4FRn48eCp7ImA9WxBUF0s.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-4350427552695011873</id><published>2010-03-05T17:01:00.001+11:00</published><updated>2010-03-05T17:01:57.070+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-05T17:01:57.070+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Things to Remember" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Services" /><title>Enable testing of web services</title><content type="html">&lt;p&gt;I’m bound to forever forget how to switch on (or off) the ASP.NET web service test screen and documentation options. For future reference:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/b2c0ew36(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/b2c0ew36(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;or add this to the system.web section of the service’s web.config file:&lt;/p&gt;  &lt;p&gt;&amp;lt;webServices&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;protocols&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add name=&amp;quot;HttpSoap12&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add name=&amp;quot;HttpSoap&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add name=&amp;quot;HttpGet&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add name=&amp;quot;HttpPost&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/protocols&amp;gt;     &lt;br /&gt;&amp;lt;/webServices&amp;gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-4350427552695011873?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=r0TP0fVm90M:hh_YcEOHTzs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=r0TP0fVm90M:hh_YcEOHTzs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/r0TP0fVm90M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/4350427552695011873/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/03/enable-testing-of-web-services.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/4350427552695011873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/4350427552695011873?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/r0TP0fVm90M/enable-testing-of-web-services.html" title="Enable testing of web services" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/03/enable-testing-of-web-services.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ICRng8fCp7ImA9WxBUFUo.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-611890469317279469</id><published>2010-03-03T12:23:00.001+11:00</published><updated>2010-03-03T12:26:07.674+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-03T12:26:07.674+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="HTTP" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><title>Fiddler redirects localhost. to IP address</title><content type="html">&lt;p&gt;Debugging local HTTP traffic using Fiddler, while not intuitive, is easily accomplished by adding a dot to your localhost address. In other words, &lt;a href="http://localhost:1234"&gt;http://localhost:1234&lt;/a&gt; becomes &lt;a href="http://localhost.:1234"&gt;http://localhost.:1234&lt;/a&gt; and traffic is captured like it always is. &lt;/p&gt;  &lt;p&gt;This wasn’t quite working for me this morning: localhost was resolving to the IP address of the host machine, without the port or directory bits. I’d earlier disabled capturing by clicking the “Capturing” button in the status bar and that seemed to be causing this behaviour; enabling capture once again and the old dot trick worked again.&lt;/p&gt;  &lt;p&gt;Incidentally, after closing Fiddler, I noticed IE8 does the same thing so this is likely a browser behaviour rather than a Fiddler oddity. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-611890469317279469?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=RUNaxQX8D7I:WV1YTLCmNJI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=RUNaxQX8D7I:WV1YTLCmNJI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/RUNaxQX8D7I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/611890469317279469/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/03/fiddler-redirects-localhost-to-ip.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/611890469317279469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/611890469317279469?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/RUNaxQX8D7I/fiddler-redirects-localhost-to-ip.html" title="Fiddler redirects localhost. to IP address" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/03/fiddler-redirects-localhost-to-ip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUADQ3cyeCp7ImA9WxBWGUs.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-241010740394841830</id><published>2010-02-12T20:42:00.001+11:00</published><updated>2010-02-12T20:42:52.990+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-12T20:42:52.990+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="List Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Practice" /><title>Best Practice List Development in SharePoint</title><content type="html">&lt;p&gt;I had the honour of speaking on the subject of best practice SharePoint list development at last weekend’s &lt;a href="http://www.sharepointsaturday.org/"&gt;SharePoint Saturday&lt;/a&gt; event held in &lt;a href="http://www.sharepointsaturday.org/perth"&gt;Perth&lt;/a&gt;, Western Australia but I want to take this discussion one step further. I’m therefore creating this post to point to my slide deck from the event and as an index for follow-on, detailed posts about some of the items I had to gloss over. There’s precious little out there, in a single location, on the subject of list development guidelines and I’m hoping to change that. If you want to contribute what you feel is a best practice I’ve missed or challenge one of the practices I do have listed, please comment and join the discussion.&lt;/p&gt;  &lt;p&gt;Slides are available here: Best Practices for Developing SharePoint Lists (&lt;a href="http://sites.google.com/a/mediawhole.com/www/DevelopingSharePointListsPUBLIC.pptx?attredirects=0&amp;amp;d=1"&gt;PowerPoint&lt;/a&gt; | &lt;a href="http://sites.google.com/a/mediawhole.com/www/DevelopingSharePointListsPUBLIC.pdf?attredirects=0&amp;amp;d=1"&gt;PDF&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Here are the two key resources I cite in the presentation: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb687949.aspx"&gt;Best Practices: Common Coding Issues When Using the SharePoint Object Model&lt;/a&gt;&amp;#160;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa973248.aspx"&gt;Best Practices: Using Disposable Windows SharePoint Services Objects&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-241010740394841830?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=0vooWVyjAHw:MmakZtzsPVA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=0vooWVyjAHw:MmakZtzsPVA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/0vooWVyjAHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/241010740394841830/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/02/best-practice-list-development-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/241010740394841830?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/241010740394841830?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/0vooWVyjAHw/best-practice-list-development-in.html" title="Best Practice List Development in SharePoint" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/02/best-practice-list-development-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYNRXYyfip7ImA9WxBWF0Q.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-6104504197363541323</id><published>2010-02-10T20:13:00.001+11:00</published><updated>2010-02-10T20:13:14.896+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-10T20:13:14.896+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web Design" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>YSlow Configuration “Use a Content Delivery Network (CDN)”</title><content type="html">&lt;p&gt;The &lt;a href="http://www.westernaustralia.com"&gt;westernaustralia.com&lt;/a&gt; site is served to users all over the world from the most remote city in the world: Perth, Western Australia. In other words, we target users in core markets across Australasia, Europe, and North America and while we expect a consistent homepage load time below ten seconds in all cases, Perth to New York, Perth to London, and, really, Perth to &lt;em&gt;anywhere&lt;/em&gt; equates to high latency, congestion, and poor response times. Couple that with SharePoint, a rich, interactive site design, and an excessive number of page requests and you'll begin to appreciate why we chose to serve the site across &lt;a href="http://www.akamai.com"&gt;Akamai&lt;/a&gt;'s content delivery network. &lt;/p&gt;  &lt;p&gt;I'll describe the setup in detail someday but for now, I've finally managed to convince &lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow&lt;/a&gt; the site is being served using a CDN; while we use better tools for global performance measurement (Gomez), seeing a low grade—in part because the hundred-odd requests were perceived to be served without a CDN—was starting to get me down ;) YSlow is a great plugin for analysing your site in Firebug but it's grading system can be a bit tough. &lt;/p&gt;  &lt;p&gt;The &lt;a href="http://developer.yahoo.com/yslow/faq.html#faq_cdn"&gt;YSlow FAQ&lt;/a&gt; will tell you how to configure the plugin to acknowledge the use of a CDN by setting a &lt;strong&gt;extensions.yslow.cdnHostnames&lt;/strong&gt; preference. I won't repeat those details here but will expand on how the string value might be configured to tell YSlow a CDN is in use—whether you’re telling the truth or not. It’s surprisingly simple.&lt;/p&gt;  &lt;p&gt;In our particular case, &lt;a href="http://www.westernaustralia.com"&gt;www.westernaustralia.com&lt;/a&gt; is a CNAME to an Akamai URL so telling YSlow to use akamai.com as a CDN doesn’t make sense and YSlow isn’t smart enough to figure things out on its own. Since &lt;a href="http://www.westernaustralia.com"&gt;www.westernaustralia.com&lt;/a&gt; is implicitly its own CDN, configuring the the extensions.yslow.cdnHostnames value as &lt;a href="http://www.westernaustralia.com"&gt;westernaustralia.com&lt;/a&gt; sorts everything out. I had to restart Firefox (3.5.x) and reload the page for things to take effect. &lt;/p&gt;  &lt;p&gt;If you’re not using a CDN and want to turn off this particular component of your grade (or at least make it an “A”), simply add your own URL; regardless of whether you’re actually using a CDN, YSlow will think you are. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-6104504197363541323?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=e1r20HNbLTo:_0i2gxALfjo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=e1r20HNbLTo:_0i2gxALfjo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/e1r20HNbLTo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/6104504197363541323/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/02/yslow-configuration-use-content.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/6104504197363541323?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/6104504197363541323?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/e1r20HNbLTo/yslow-configuration-use-content.html" title="YSlow Configuration “Use a Content Delivery Network (CDN)”" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/02/yslow-configuration-use-content.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMQXg6fSp7ImA9WxBWF0g.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-3514006806715175620</id><published>2010-02-10T10:56:00.001+11:00</published><updated>2010-02-10T10:56:20.615+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-10T10:56:20.615+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web Content Management" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Parts" /><title>SharePoint 404: The resource cannot be found</title><content type="html">&lt;p&gt;If a page element is missing—either a user control hasn’t been deployed or something else that needs to be in place for the page to compile dynamically is awol—you might be the proud owner of a 404 even though the page itself does exist. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.&amp;#160; Please review the following URL and make sure that it is spelled correctly.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;After setting the SafeMode element’s CallStack element true in web.config, turning off CustomErrors, and setting the debug=”true” attribute on the compilation element, you’re possibly looking at a beautiful ASP.NET error message with no stack trace and not a lot to go on. &lt;/p&gt;  &lt;p&gt;Well here’s a trick: view source on the error page and and scroll down below the closing HTML tag. Behold the stack trace! It should tell you exactly where to look for the problem.&lt;/p&gt; &lt;center&gt;   &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td&gt;&lt;script src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=cde7edc2" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt; &lt;/td&gt;          &lt;td&gt;&lt;script src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=48840e1d" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt; &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-3514006806715175620?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=ig5ds5m3mo4:bGtt7sjFqr8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=ig5ds5m3mo4:bGtt7sjFqr8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/ig5ds5m3mo4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/3514006806715175620/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/02/sharepoint-404-resource-cannot-be-found.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/3514006806715175620?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/3514006806715175620?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/ig5ds5m3mo4/sharepoint-404-resource-cannot-be-found.html" title="SharePoint 404: The resource cannot be found" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/02/sharepoint-404-resource-cannot-be-found.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIHRng5fip7ImA9WxBWFk4.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-3625670522179093208</id><published>2010-02-09T00:37:00.001+11:00</published><updated>2010-02-09T00:42:17.626+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-09T00:42:17.626+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web Content Management" /><category scheme="http://www.blogger.com/atom/ns#" term="List Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Tourism WA" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Design" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Caching" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Parts" /><title>westernaustralia.com Relaunch and Other Website Recent Activities</title><content type="html">&lt;p&gt;If you’ve been following the progress of the &lt;a href="http://www.westernaustralia.com" target="_blank"&gt;westernaustralia.com&lt;/a&gt; website over the years, you’ll already know the site was one of the first in Australia to be launched on the MOSS 2007 platform and has been &lt;a href="http://blog.mediawhole.com/2009/04/westernaustraliacom-makes-top-10-moss.html"&gt;consistently&lt;/a&gt; voted as one of the &lt;a href="http://www.topsharepoint.com/western-australia" target="_blank"&gt;top&lt;/a&gt; fully branded SharePoint sites in the world ever since. Having worked on the site since the get-go and as the current technical lead for the project, I’m the proud owner of the site’s programmatic aspects; today I’m tickled pink to tell you, the SharePoint community, about yesterday’s launch of the new &lt;a href="http://www.tourism.wa.gov.au"&gt;Tourism Western Australia&lt;/a&gt; brand, &lt;a href="http://www.tourism.wa.gov.au/Experience_Extraordinary/Pages/Experience_Extraordinary.aspx"&gt;Experience Extraordinary&lt;/a&gt;, and, more specifically, the brand’s impact on the westernaustralia.com website. &lt;/p&gt;  &lt;p&gt;At the moment we’re working with the Digital Marketing team on a two (or three phase) approach (depending on how you look at it) to implement the new brand. The &lt;a href="http://blog.mediawhole.com/2009/08/westernaustraliacom-site-re-launch-on.html"&gt;first phase&lt;/a&gt; unfolded in August last year and involved the neutralisation of the preceding brand’s elements (The Real Thing) while the latest &lt;a href="http://blog.mediawhole.com/2009/03/putting-creative-agencies-on-notice.html" target="_blank"&gt;creative design agency&lt;/a&gt;, &lt;a href="http://www.hostville.com.au/" target="_blank"&gt;Host&lt;/a&gt;, was appointed. Phase 1 of the new brand implementation kicked off in the dev team a little over three weeks back and involved making the Photoshop mockups provided by Host into a living website. This work focused largely on the page banners (vibrant imagery, the tab, and extra height), the navigation, the background colour (trust me—everything is more complicated than you might think at first glance with wa.com!), what we call the ePostcards element, and the footer elements. &lt;/p&gt;  &lt;p&gt;Here’s a picture of what I think is a visually stunning website and a vast improvement over its predecessor:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.westernaustralia.com/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="wacom homepage 4 Experience Extraordinary Phase 1" border="0" alt="wacom homepage 4 Experience Extraordinary Phase 1" src="http://lh6.ggpht.com/_kuHIq0i1UO4/S3ATnFI1PGI/AAAAAAAADNA/6WtbJhPKpqA/wacom%20homepage%204%20Experience%20Extraordinary%20Phase%201%5B4%5D.png?imgmax=800" width="405" height="664" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Phase 2 holds still more secrets but you can bet we’ll be making all the middle bits fit with the rest of the changes. One of the challenges we’ll be facing is getting the home page weight down from a whopping 1750KB and 100 requests. Stunning, certainly, but our CDN of choice (&lt;a href="http://www.akamai.com/"&gt;Akamai&lt;/a&gt;) allows us to get away with this sort of monkey business. &lt;/p&gt;  &lt;p&gt;In addition to all the glam, we also took the opportunity to overhaul the heading infrastructure. This subsystem is designed to give content editors the ability to upload new banner images and all of the corresponding display data required to render the Flash banner. The Flash banner itself was built by Host from our previous banner and it takes as a parameter an XML file providing all the information it needs to display the banner images, text, links, and colours. &lt;/p&gt;  &lt;p&gt;Obviously this data is stored in a list to which the FlashBanner.cs web part communicates at render time. Like I say, nothing in wa.com is as it first appears and one of the more complex requirements was allowing a subsite to override the banners displayed for for it and its children (in effect to support the major subsections of the site such as the destinations). Apart from simply walking up the site hierarchy recursively until a banner list is found, we then needed interrogate the list and emit an XML file acceptable to the banner; the URL to the file is finally cached with a dependency on the file itself. &lt;/p&gt;  &lt;p&gt;Interestingly, this was one of the first times we started using event receivers on the banner lists to invalidate the cache when a banner is added, edited, or deleted; this keeps the content editors happy and productive and is one less of those annoying “is my banner cached in the browser cache | Akamai | reverse proxy| application cache | output cache | blob cache?” questions ;)&lt;/p&gt;  &lt;p&gt;I’ll also point out we’re using a simple custom list for this instead of a picture library or custom list derived from a picture library. The previous version of this list was in fact a custom picture library but it suffered from broken thumbnails (which we now know &lt;a href="http://www.novolocus.com/2009/05/21/no-thumbnails-for-custom-picture-library-definition/"&gt;how to fix&lt;/a&gt;) and proved rather cumbersome to use in practice (no reordering, a difficult view, etc). The move away from the picture library wasn’t, in retrospect, necessarily a great decision but it was probably the best decision at the time and came with considerable deliberation. The one major problem with the current approach is banner images must be uploaded separately to a real picture library and then referenced from the list; this is a bit of a double-up and disconnects the image itself from its metadata. As our understanding of list development and the peculiarities of these other list types increases, we may revisit this approach.&lt;/p&gt;  &lt;p&gt;Also at a technical level, we recently move the site from our old IBM BladeCenter kit running Windows Server 2003 x86, MOSS 2007 SP1 (not even the Infrastructure Updates—gasp!), .NET 3.0, and a non-clustered SQL Server 2005 x86 database server. Everything was virtualised on ESX 4.0. We actually had three of these farms: one in prod, one in DR, and one for authoring; as content deployment never worked for the site, this meant a daily backup and restore of the content database from authoring to production and corresponding switch to or from DR (with DR actually being treated as a standby prod environment). That must have really sucked for our admin who had did that essentially manual task every business day since launch in May 2007. What. A. Drag. &lt;/p&gt;  &lt;p&gt;From that setup, we moved to what was briefly the &lt;a href="http://blog.mediawhole.com/2008/12/christmas-came-early.html"&gt;bees knees&lt;/a&gt;: Windows Server 2008 x64, MOSS 2007 SP2 + June 2009 CU, .NET 3.5 SP1, and a clustered SQL Server 2008 x64 database environment. Everything is still virtualised on ESX 4.0 and the entire setup is mirrored in DR. We’ve finally done away with the authoring farm so content editors are editing content in the production farm (we’re working towards a tiered security design and approval workflows, by the way, but our content editors have been working with the environment for years now and are mature in their understanding of how not to break the site ;). So no more daily content deployments and those of us in the dev team can finally start working with .NET 3.5 and LINQ. &lt;/p&gt;  &lt;p&gt;For more on how we run the site, check out my Perth SharePoint User Group presentations and videos (things have changed but not that much): &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.mediawhole.com/2009/02/how-we-do-wcm-at-tourism-wa-im-speaking.html"&gt;http://blog.mediawhole.com/2009/02/how-we-do-wcm-at-tourism-wa-im-speaking.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.mediawhole.com/2009/03/presenting-at-next-sharepoint-user.html"&gt;http://blog.mediawhole.com/2009/03/presenting-at-next-sharepoint-user.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you’ve read this far, you deserve the chance to win a prize. Want the opportunity to take an extraordinary taxi ride around the state of Western Australia? If so, check out the “brand activation” microsite: &lt;a title="http://www.extraordinarytaxiride.com.au/" href="http://www.extraordinarytaxiride.com.au/"&gt;http://www.extraordinarytaxiride.com.au/&lt;/a&gt;&lt;/p&gt;  &lt;h6&gt;Note: I am employed by Tourism WA as a contractor working for Diversus. Mediawhole, mediawhole.com, and this blog are not associated directly with Tourism Western Australia or the westernaustralia.com website. The information provided above&amp;#160; is published independently as a member of the public and does not reflect the views of Tourism Western Australia or Diversus. Please consult a Tourism WA representative for more information about its brand, campaigns, and websites.&lt;/h6&gt;  &lt;center&gt;    &lt;table&gt;&lt;tbody&gt; &lt;tr&gt;         &lt;td&gt;&lt;script src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=cde7edc2" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt; &lt;/td&gt;          &lt;td&gt;&lt;script src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=48840e1d" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt; &lt;/td&gt;       &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-3625670522179093208?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=HGnnU4Nabn0:zyC9ekibl1g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=HGnnU4Nabn0:zyC9ekibl1g:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/HGnnU4Nabn0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/3625670522179093208/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/02/westernaustraliacom-relaunch-and-other.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/3625670522179093208?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/3625670522179093208?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/HGnnU4Nabn0/westernaustraliacom-relaunch-and-other.html" title="westernaustralia.com Relaunch and Other Website Recent Activities" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/02/westernaustraliacom-relaunch-and-other.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EFQ34_fCp7ImA9WxBXEk4.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-9079045728675264402</id><published>2010-01-22T01:14:00.002+11:00</published><updated>2010-01-23T19:33:32.044+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-23T19:33:32.044+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Administration" /><category scheme="http://www.blogger.com/atom/ns#" term="Things to Remember" /><category scheme="http://www.blogger.com/atom/ns#" term="64-bit" /><category scheme="http://www.blogger.com/atom/ns#" term="Virtualization" /><title>Buying a laptop? Make sure it supports VT</title><content type="html">&lt;p&gt;Just borrowed a colleague’s Toshiba M300/Intel Core2 Duo Mobile Processor &lt;a href="http://ark.intel.com/cpu.aspx?groupID=36750&amp;amp;code=p7350" target="_blank"&gt;P7350&lt;/a&gt; laptop only to find the CPU doesn’t support VT (or the Intel Virtualization Technology/hardware-assisted virtualisation) required by Hyper-V and VMware; I was planning to use this laptop for Hyper-V-based demos. Rats.&lt;/p&gt;&lt;p&gt;The laptop in question is only six months old and otherwise nicely equipped with 4GB of RAM and a 320GB hard drive so it’s a shame about this niggle… back to Virtual PC and 32-bit for me I suppose—how quaint! &lt;/p&gt;&lt;p&gt;Which leads me this mental note: when buying a laptop go to extreme lengths to determine whether the CPU offers VT and do some Googling to determine whether it can actually be enabled in the BIOS (apparently the various manufacturers can disable/enable VT at their discretion). &lt;/p&gt;&lt;p&gt;In the P7350 case, Intel’s technical data was incorrect on publication—originally specifying support for VT. If you’ve actually got one of these and are reading this post, sorry mate—hope you weren’t planning to do too much 64-bit virtualisation!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-9079045728675264402?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=-o-U2UAXzmo:7n38E1a2MBk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=-o-U2UAXzmo:7n38E1a2MBk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/-o-U2UAXzmo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/9079045728675264402/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/buying-laptop-make-sure-its-supports-vt.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/9079045728675264402?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/9079045728675264402?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/-o-U2UAXzmo/buying-laptop-make-sure-its-supports-vt.html" title="Buying a laptop? Make sure it supports VT" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/buying-laptop-make-sure-its-supports-vt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINQ3c_fip7ImA9WxBQGUg.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-6970851354348979939</id><published>2010-01-20T13:29:00.001+11:00</published><updated>2010-01-20T13:29:52.946+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-20T13:29:52.946+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Administration" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="64-bit" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>SharePoint 2007 Slipstreamed Installer</title><content type="html">&lt;p&gt;I hadn’t noticed previously but Microsoft released slipstreamed SP2 installers (x86 and x64) at the end of 2009:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3015FDE4-85F6-4CBC-812D-55701FBFB563&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=3015FDE4-85F6-4CBC-812D-55701FBFB563&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2e6e5a9c-ebf6-4f7f-8467-f4de6bd6b831&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=2e6e5a9c-ebf6-4f7f-8467-f4de6bd6b831&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Makes life a little bit easier so you don’t have to do the slipstreaming &lt;a href="http://blogs.technet.com/seanearp/archive/2009/05/20/slipstreaming-sp2-into-sharepoint-server-2007.aspx"&gt;yourself&lt;/a&gt;. Apparently previous installers will not work with Windows Server 2008 R2. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-6970851354348979939?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=7cPMHP90SBE:UDRktJFf_Jk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=7cPMHP90SBE:UDRktJFf_Jk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/7cPMHP90SBE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/6970851354348979939/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/sharepoint-2007-slipstreamed-installer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/6970851354348979939?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/6970851354348979939?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/7cPMHP90SBE/sharepoint-2007-slipstreamed-installer.html" title="SharePoint 2007 Slipstreamed Installer" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/sharepoint-2007-slipstreamed-installer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMCRX4_fip7ImA9WxBQFkk.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-1839551886934987298</id><published>2010-01-16T22:14:00.001+11:00</published><updated>2010-01-16T22:14:24.046+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-16T22:14:24.046+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Administration" /><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell" /><category scheme="http://www.blogger.com/atom/ns#" term="Active Directory" /><title>Manage Active Directory Users and Groups with PowerShell</title><content type="html">&lt;p&gt;With a new dawn and the SharePoint 2010 beta upon us, I figured it was finally time to a) dip my toes into the PowerShell pool and b) learn how to automate the creation of users, groups, organisational units, and other objects within Active Directory. In the PS case, it still seems like an unnecessary evil and, between all the other things on my “TO LEARN” list, it hasn’t been a high priority; that said, it seems to work and I kind of, sort of, maybe just like it. We’ll see… On the automation front, I figured I’ll probably blow away more than my fair share of development environments before my time is up so I might as well make creating the darned things a little bit easier and more repeatable. &lt;/p&gt;  &lt;p&gt;My search for information along these lines quickly led me to Quest’s &lt;a href="http://www.quest.com/activeroles-server/arms.aspx" target="_blank"&gt;ActiveRoles Management Shell for Active Directory&lt;/a&gt;—a set of PowerShell commandlets. The download is free and if you grab it I’d also strongly suggest you pull down the admin guide as well—it’s comprehensive and includes examples. To install, run the .msi and finish the wizard with the defaults. &lt;/p&gt;  &lt;p&gt;From there you’ll need to add the related snap-in in a PS window as follows:&lt;/p&gt;  &lt;p&gt;Add-PSSnapin Quest.ActiveRoles.ADManagement&lt;/p&gt;  &lt;p&gt;The first thing I wanted to create was a user object and this was reasonably straightforward. Be warned some of the commandlets take a lot of arguments, the names of which don’t always correspond to the UI you see in the AD Users and Computers snap-in: password is –UserPassword, for example, and Job Title is simply –Title. Here’s the command I used:&lt;/p&gt;  &lt;p&gt;new-QADUser -name 'Bob' -ParentContainer 'OU=DirtyWords,DC=spdev,DC=mediawhole,DC=com' -SamAccountName 'Bob' -UserPassword 'TH1Smis1s' -FirstName 'Bob' -DisplayName 'Bob' -UserPrincipalName 'bob@spsdev.mediawhole.com' -Title CEO&lt;/p&gt;  &lt;p&gt;This creates the user but new-QADUser doesn’t allow you set all of the things I want to using the standard parameters. In my case, I also want to set the account to never expire. To do this, I used the set-QADUser commandlet as well, which seems to let you get to much more detail:&lt;/p&gt;  &lt;p&gt;set-QADUser 'CN=Bob,OU=DirtyWords,DC=spdev,DC=mediawhole,DC=com' -PasswordNeverExpires $true&lt;/p&gt;  &lt;p&gt;Next I created a new group using the new-QADGroup commandlet:&lt;/p&gt;  &lt;p&gt;new-QADGroup -ParentContainer 'OU=DirtyWords,DC=spdev,DC=mediawhole,DC=com' -name 'Managers' -samAccountName 'Managers' -grouptype 'Security' -groupscope 'Global'&lt;/p&gt;  &lt;p&gt;…before adding my new user to my new group with the add-QADGroupMember commandlet:&lt;/p&gt;  &lt;p&gt;add-QADGroupMember -identity 'CN=Managers,OU=DirtyWords,DC=spdev,DC=mediawhole,DC=com' -member 'CN=Bob,OU=DirtyWords,DC=spdev,DC=mediawhole,DC=com'&lt;/p&gt;  &lt;p&gt;This last exercise proved somewhat troublesome as the examples in the admin guide and specific documentation about the –member parameter indicated I could supply ‘spsdev\Bob’ in place of the string above I ended up using successfully. The error message was fairly explicit about this:&lt;/p&gt;  &lt;p&gt;Add-QADGroupMember : Cannot resolve directory object for the given identity: 'spsdev.mediawhole.com\bob'.&lt;/p&gt;  &lt;p&gt;One other commandlet I haven’t yet managed to get working is the new-QADObject commandlet to create a new OU:&lt;/p&gt;  &lt;p&gt;new-QADObject -ParentContainer 'DC=spsdev,DC=mediawhole,DC=com' -type 'organizationalUnit' -NamingProperty 'ou' -name 'Dirty Words'&lt;/p&gt;  &lt;p&gt;This command fails on the type parameter with; &lt;/p&gt;  &lt;p&gt;New-QADObject : A referral was returned from the server…&lt;/p&gt;  &lt;p&gt; + CategoryInfo&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : NotSpecified: (:) [New-QADObject], COMException   &lt;br /&gt; + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Quest.ActiveRoles.ArsPowerShellSnapIn.Powers    &lt;br /&gt;hell.Cmdlets.NewObjectCmdlet&lt;/p&gt;  &lt;p&gt;I’ll probably look back at this post one day after figuring this one out and laugh at my lack of understanding but for now it’s got me stumped.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-1839551886934987298?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=WQMfg1iFjjw:yxVjGzb0qsg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=WQMfg1iFjjw:yxVjGzb0qsg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/WQMfg1iFjjw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/1839551886934987298/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/manage-active-directory-users-and.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1839551886934987298?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1839551886934987298?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/WQMfg1iFjjw/manage-active-directory-users-and.html" title="Manage Active Directory Users and Groups with PowerShell" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/manage-active-directory-users-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cFSXw-fCp7ImA9WxBQEkU.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-8061194698998844893</id><published>2010-01-12T18:23:00.001+11:00</published><updated>2010-01-12T18:23:38.254+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-12T18:23:38.254+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Administration" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Virtualization" /><category scheme="http://www.blogger.com/atom/ns#" term="Hyper-V" /><title>Can’t start Hyper-V VM after Windows Server 2008 R2 upgrade</title><content type="html">&lt;p&gt;Oh the tedium… Having used Windows Server 2008 R2 for a while, I was keen to upgrade the Hyper-V host environment supporting my dev infrastructure from RTM to R2. R2 seems faster and more refined; I was also wanting to play with the latest version of the System Center Virtual Machine Manager—which requires R2.&lt;/p&gt;  &lt;p&gt;The upgrade process went smoothly once I figured out the installer would eventually present me with the upgrade option after telling it to install the Windows Server 2008 R2 Standard (Full Installation) option; this was briefly confusing to me&amp;#160; since I didn’t want to do a full installation! I shut down all my VMs properly beforehand and everything seemed pretty much good (I did have to recreate the one VM I normally auto-start but luckily I was able to reuse the .vhd itself and the machine came back to life with little hassle). &lt;/p&gt;  &lt;p&gt;Today, however, I went to create a new VM but was unable to start it post-creation. Clicking start popped up a message telling me the VM could not initialize and Hyper-V could not create or access saved state file. The physical location of my VMs hadn’t changed but I read this error message as a permissions issue—but where to start?! The only thing I had to go on was that I was creating the new VM on another volume. &lt;/p&gt;  &lt;p&gt;Fortunately Jevgenij Martynenko saved the day for myself and others in &lt;a href="http://social.technet.microsoft.com/Forums/en-US/windowsserver2008r2virtualization/thread/b26fe762-62eb-48ec-b538-ddeed61e1fae"&gt;this&lt;/a&gt; forum post with the old trick of granting access to the root of the drive. I remember having to do this for ASP.NET back in the day for some reason…&lt;/p&gt;  &lt;p&gt;Anyway, as per the instructions, I granted ‘Authenticated Users’ ‘List folder / read data’ permission to the root of my E:\ drive, setting the scope drop down to This folder only. I did not replace all child object permissions as apparently that causes more problems.&lt;/p&gt;  &lt;p&gt;Starting the new VM was successful after this change.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-8061194698998844893?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=h_-2N8X05so:vkElHcb7yOo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=h_-2N8X05so:vkElHcb7yOo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/h_-2N8X05so" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/8061194698998844893/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/cant-start-hyper-v-vm-after-windows.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/8061194698998844893?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/8061194698998844893?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/h_-2N8X05so/cant-start-hyper-v-vm-after-windows.html" title="Can’t start Hyper-V VM after Windows Server 2008 R2 upgrade" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/cant-start-hyper-v-vm-after-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMRH06eSp7ImA9WxBQEko.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-1797129165409854942</id><published>2010-01-12T18:03:00.001+11:00</published><updated>2010-01-12T18:03:05.311+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-12T18:03:05.311+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Administration" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Virtualization" /><category scheme="http://www.blogger.com/atom/ns#" term="Installation" /><title>Windows Server 2008 R2 Scratch Disk</title><content type="html">&lt;p&gt;When building out a new VM I’ve occasionally created a second disk for holding non-system files and temporary data; this disk is easy to blow away every so often and saves the hassles of defragging and compressing. &lt;/p&gt;  &lt;p&gt;I recently built a Windows Server 2008 R2 VM and created a system drive and secondary drive in Hyper-V manager before installing the OS. During the OS installation process, I created a new partition and noticed—but thought nothing of—the fact the installer didn’t nag me about creating a reserved system partition as well. &lt;/p&gt;  &lt;p&gt;Carrying on my merry way, I eventually found the secret system reserved partition on my “scratch” disk (d:\) when I went to format what I expected was a completely unallocated disk. Bummer—I’m not clear on the ramifications of simply deleting this reserved partition but it currently means dragging around an additional 6GB of D: drive and being unable to blow away my scratch disk. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-1797129165409854942?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Beq8Y96y3Oc:Q_NW_LsPMNY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Beq8Y96y3Oc:Q_NW_LsPMNY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/Beq8Y96y3Oc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/1797129165409854942/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/windows-server-2008-r2-scratch-disk.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1797129165409854942?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1797129165409854942?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/Beq8Y96y3Oc/windows-server-2008-r2-scratch-disk.html" title="Windows Server 2008 R2 Scratch Disk" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/windows-server-2008-r2-scratch-disk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUACQHs_cCp7ImA9WxBQEE4.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-8571290726326335563</id><published>2010-01-09T22:33:00.001+11:00</published><updated>2010-01-09T22:49:21.548+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-09T22:49:21.548+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="List Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><title>I’m Speaking at SharePoint Saturday Perth this February</title><content type="html">&lt;p&gt;How exciting—our very first &lt;a href="http://www.sharepointsaturday.org/perth/"&gt;SharePoint Saturday event in Perth&lt;/a&gt;! A BIG shout out to &lt;a href="http://wss.made4the.net/"&gt;Jeremy Thake&lt;/a&gt; for organising the venue, speakers, sponsors, prizes, and everything &lt;a href="http://www.sharepointsaturday.org/perth/" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" border="0" align="right" src="http://www.sharepointsaturday.org/perth/SiteImages/SharePointSaturday.png" width="190" height="81" /&gt;&lt;/a&gt;else! The &lt;a href="http://www.sharepointsaturday.org/perth/Pages/speakers.aspx"&gt;speaker line-up&lt;/a&gt; looks fantastic and the &lt;a href="http://www.sharepointsaturday.org/perth/Pages/meetings.aspx"&gt;sessions&lt;/a&gt; cover a range of topics so I reckon this is going to be a great day. &lt;/p&gt;  &lt;p&gt;In addition to attending the event, I’ll also be presenting on the subject of SharePoint list development. Here’s the official blurb for my talk:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Lists are key to understanding the power of the SharePoint platform and provide core data storage and management facilities in a SharePoint environment. Lists can be customised to suit custom requirements but doing so isn’t always straightforward. &lt;/p&gt;    &lt;p&gt;Learn how to create, deploy, manage, and interact with SharePoint lists in this jam-packed session. Discussion will cover the pros and cons of using SharePoint lists before focusing on methods for creating and deploying lists between environments in a repeatable manner; techniques for working with lists and data using the SharePoint API with also be demonstrated. &lt;/p&gt;    &lt;p&gt;Existing experience with the SharePoint UI, a cursory knowledge of content types, and ASP.NET development experience is recommended but not assumed.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If there’s anything you’d like me to cover in particular please drop me a line or post a comment below. If all goes well I’ll also be recording the session so feel free to make a request or post a question even if you’re unable to attend in person.&lt;/p&gt;  &lt;p&gt;Finally, &lt;a href="http://www.diversus.com.au/microsoft_sharepoint_perth.shtml"&gt;Diversus&lt;/a&gt; are sponsoring the event and their package includes a JVC video camera to be given away—thanks guys!!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.diversus.com.au" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Diversus - Perth SharePoint Development" border="0" alt="Diversus - Perth SharePoint Development" src="http://lh6.ggpht.com/_kuHIq0i1UO4/S0hpjv7_8eI/AAAAAAAADME/ScQBKRiwkKA/Diversus%20Logo%5B4%5D.png?imgmax=800" width="244" height="52" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-8571290726326335563?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=jPt2G4mwYEw:HD_PNnkyx-g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=jPt2G4mwYEw:HD_PNnkyx-g:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/jPt2G4mwYEw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/8571290726326335563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/im-speaking-at-sharepoint-saturday.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/8571290726326335563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/8571290726326335563?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/jPt2G4mwYEw/im-speaking-at-sharepoint-saturday.html" title="I’m Speaking at SharePoint Saturday Perth this February" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/im-speaking-at-sharepoint-saturday.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4FQn4_fCp7ImA9WxBRGU8.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-5203352990720967095</id><published>2010-01-08T13:59:00.001+11:00</published><updated>2010-01-08T14:55:13.044+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-08T14:55:13.044+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Workflow" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Add and manage workflows using the API</title><content type="html">&lt;p&gt;Programmatically applying and configuring an out-of-the-box workflow to a SharePoint list isn’t the most obvious thing to do but fortunately it’s not exactly hard either. I had to dig around a bit to find the pieces I need to do this and thought I’d share…&lt;/p&gt;  &lt;h5&gt;List Settings - Versioning&lt;/h5&gt;  &lt;p&gt;In my case I’m applying an approval workflow to a Pages library created by the Publishing feature; before I wrangle the workflow I need to configure the versioning settings on my Pages list. Through the UI, I can do this by configuring these settings as follows:&lt;a href="http://lh6.ggpht.com/_kuHIq0i1UO4/S0aeIGVnYSI/AAAAAAAADL0/IFZe4mnSXTs/s1600-h/Configure_List_Versioning_for_Workflow%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Configure_List_Versioning_for_Workflow" border="0" alt="Configure_List_Versioning_for_Workflow" src="http://lh4.ggpht.com/_kuHIq0i1UO4/S0ae19w2TaI/AAAAAAAADL4/_4mnIef9oqw/Configure_List_Versioning_for_Workflow_thumb%5B1%5D.png?imgmax=800" width="240" height="329" /&gt;&lt;/a&gt;Essentially, content approval is required, users need to be able to create major and minor (draft) versions, all editors should be able to see all drafts, and checkout is required to edit documents. &lt;/p&gt;  &lt;p&gt;To do this setup programmatically, I set the following properties on my Pages list:&lt;/p&gt;  &lt;p&gt;SPList pages = web.Lists [&amp;quot;Pages&amp;quot;];&lt;/p&gt;  &lt;p&gt;// Require content approval    &lt;br /&gt;pages.EnableModeration = true;     &lt;br /&gt;// Create major and minor versions     &lt;br /&gt;pages.EnableVersioning = true;     &lt;br /&gt;pages.EnableMinorVersions = true;     &lt;br /&gt;// Who should see draft items     &lt;br /&gt;pages.DraftVersionVisibility = DraftVisibilityType.Author;     &lt;br /&gt;// Require documents to be checked out before they can be edited     &lt;br /&gt;pages.ForceCheckout = true; &lt;/p&gt;  &lt;p&gt;pages.Update ();&lt;/p&gt;  &lt;h5&gt;Remove Existing Workflows&lt;/h5&gt;  &lt;p&gt;In some cases, you may also want to cleanup a list’s existing workflows (i.e. remove them) and this is easily accomplished using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.removeworkflowassociation(office.14).aspx"&gt;SPList.RemoveWorkflowAssociation()&lt;/a&gt; method. Note several examples on the interwebs suggest doing this within a foreach loop but doing so will invalidate the enumerator after the first item is removed; use a for loop or a while loop instead:&lt;/p&gt;  &lt;p&gt;// Remove existing workflows    &lt;br /&gt;for (int associationIndex = 0; associationIndex &amp;lt; pages.WorkflowAssociations.Count; associationIndex++)     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SPWorkflowAssociation workflowAssociation = pages.WorkflowAssociations [associationIndex];     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; pages.RemoveWorkflowAssociation (workflowAssociation);     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;If you need to remove individual workflows, inspect the SPWorkflowAssociation.Name property.&lt;/p&gt;  &lt;h5&gt;Workflow Setup…&lt;/h5&gt;  &lt;p&gt;With that out of the way, let’s move on to the workflow configuration proper. In short, it’s all about the collection of &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.aspx"&gt;SPWorkflowAssociation&lt;/a&gt; objects exposed through the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.workflowassociations.aspx"&gt;WorkflowAssociations&lt;/a&gt; property of the SPList class. The &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.associationdata.aspx"&gt;AssociationData&lt;/a&gt; property exposed by the SPWorkflowAssociation class is also crucial. &lt;/p&gt;  &lt;h5&gt;Task and History List Management&lt;/h5&gt;  &lt;p&gt;When you setup a workflow through the UI, you’ll be prompted to specify names for the task and history lists (the latter of which will be hidden); when you’re doing this programmatically, you have to manage this part yourself. It would have been nice if the API did this automatically but it doesn’t. The CreateListAssociation method we’ll examine in a moment also requires a reference to each list so you need to a) determine if each list exists or create it and b) retrieve a reference to each list. To wrap all of this logic up together, here’s my helper method (based on &lt;a href="http://blogit.create.pt/blogs/marcosilva/archive/2007/12/10/SharePoint-Associating-a-Workflow-to-a-list.aspx"&gt;this by Marco&lt;/a&gt;):&lt;/p&gt;  &lt;p&gt;private void EnsureWorkflowLists (SPWeb web, out SPList taskList, out SPList historyList)    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; const string WORKFLOW_TASK_LIST_NAME = &amp;quot;Workflow Tasks&amp;quot;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; const string WORKFLOW_HISTORY_LIST_NAME = &amp;quot;Workflow History&amp;quot;; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; // Task list &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; try    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; taskList = web.Lists [WORKFLOW_TASK_LIST_NAME]; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine (&amp;quot;Tasks list found.&amp;quot;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; catch (System.ArgumentException)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // List does not exist so create it     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Guid taskListId = web.Lists.Add (WORKFLOW_TASK_LIST_NAME, string.Empty, SPListTemplateType.Tasks);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; taskList = web.Lists [taskListId]; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine (&amp;quot;Created task list for web.&amp;quot;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; // History List &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; try    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; historyList = web.Lists [WORKFLOW_HISTORY_LIST_NAME];     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine (&amp;quot;History list found.&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; catch (ArgumentException)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Guid historyListId = web.Lists.Add (WORKFLOW_HISTORY_LIST_NAME, string.Empty, SPListTemplateType.WorkflowHistory);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; historyList = web.Lists [historyListId];     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; historyList.Hidden = true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; historyList.Update (); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine (&amp;quot;Created history list for web.&amp;quot;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;Call EnsureWorkflowLists method like so:&lt;/p&gt;  &lt;p&gt;SPList taskList;    &lt;br /&gt;SPList historyList;     &lt;br /&gt;EnsureWorkflowLists (web, out taskList, out historyList);&lt;/p&gt;  &lt;h5&gt;Workflow Template&lt;/h5&gt;  &lt;p&gt;Before you can finally create the new workflow association, you’ll also need an SPWorkflowTemplate. You can do this by calling the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowtemplatecollection.gettemplatebyname.aspx"&gt;GetTemplateByName&lt;/a&gt; method hanging indirectly off the SPWeb object:&lt;/p&gt;  &lt;p&gt;SPWorkflowTemplate approvalTemplate = web.WorkflowTemplates.GetTemplateByName (&amp;quot;Approval&amp;quot;, System.Globalization.CultureInfo.CurrentCulture);&lt;/p&gt;  &lt;p&gt;If you have any issues here, ensure the Routing Workflows feature (or the relevant feature for whatever OOB workflow you’re dealing with) is enabled at the site collection level (/_layouts/ManageFeatures.aspx?Scope=Site).&lt;/p&gt;  &lt;h5&gt;Create the Workflow Association&lt;/h5&gt;  &lt;p&gt;With the leg work behind us, actually applying a new workflow association to the list and configuring it is quite easy, with one exception I’ll cover in a moment. To begin, create a new workflow association using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.createlistassociation.aspx"&gt;SPWorkflowAssociation.CreateListAssociation&lt;/a&gt; method and supply the workflow template and list references created previously:&lt;/p&gt;  &lt;p&gt;SPWorkflowAssociation approvalWorkFlowAssociation = SPWorkflowAssociation.CreateListAssociation (approvalTemplate, &amp;quot;Page Approval&amp;quot;, taskList, historyList);&lt;/p&gt;  &lt;p&gt;Note the name parameter “Page Approval” is arbitrary but will appear in the UI and notification emails; I therefore aim to make it user friendly and somewhat specific. &lt;/p&gt;  &lt;p&gt;The created object can then be configured, in particular using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.allowmanual.aspx"&gt;AllowManual&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.autostartchange.aspx"&gt;AutoStartChange&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.autostartcreate.aspx"&gt;AutoStartCreate&lt;/a&gt; properties. &lt;/p&gt;  &lt;p&gt;As mentioned, there’s one last hurdle and that’s providing the XML string to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation.associationdata.aspx"&gt;SPWorkflowAssociation.AssociationData&lt;/a&gt; property. As far as I’m aware, this is the only way to specify the nominated approvers group and a few other properties such as the ability to delegate tasks and whether a change to the list item should interrupt the current workflow. I believe the easiest way to create this string is to copy an example (below) or configure the workflow as desired in the UI and use &lt;a href="http://www.codeplex.com/spm"&gt;SharePoint Manager&lt;/a&gt; to extract the XML from the workflow association (highlighted in the image below). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_kuHIq0i1UO4/S0ae27mRYXI/AAAAAAAADL8/aC0mxVs2xts/s1600-h/WorkflowAssociations_AssociationData_SPM%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="WorkflowAssociations_AssociationData_SPM" border="0" alt="WorkflowAssociations_AssociationData_SPM" src="http://lh5.ggpht.com/_kuHIq0i1UO4/S0afk4HziAI/AAAAAAAADMA/LTGtiRBVMVU/WorkflowAssociations_AssociationData_SPM_thumb%5B2%5D.png?imgmax=800" width="429" height="151" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;pre&gt;&amp;lt;my:myFields xml:lang=&amp;quot;en-us&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:my=&amp;quot;http://schemas.microsoft.com/office/infopath/2003/myXSD&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;my:Reviewers&amp;gt;&lt;br /&gt;    &amp;lt;my:Person&amp;gt;&lt;br /&gt;      &amp;lt;my:DisplayName&amp;gt;Approvers&amp;lt;/my:DisplayName&amp;gt;&lt;br /&gt;      &amp;lt;my:AccountId&amp;gt;Approvers&amp;lt;/my:AccountId&amp;gt;&lt;br /&gt;      &amp;lt;my:AccountType&amp;gt;SharePointGroup&amp;lt;/my:AccountType&amp;gt;&lt;br /&gt;    &amp;lt;/my:Person&amp;gt;&lt;br /&gt;  &amp;lt;/my:Reviewers&amp;gt;&lt;br /&gt;  &amp;lt;my:CC&amp;gt;&amp;lt;/my:CC&amp;gt;&lt;br /&gt;  &amp;lt;my:DueDate xsi:nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/my:DueDate&amp;gt;&lt;br /&gt;  &amp;lt;my:Description&amp;gt;&amp;lt;/my:Description&amp;gt;&lt;br /&gt;  &amp;lt;my:Title&amp;gt;&amp;lt;/my:Title&amp;gt;&lt;br /&gt;  &amp;lt;my:DefaultTaskType&amp;gt;1&amp;lt;/my:DefaultTaskType&amp;gt;&lt;br /&gt;  &amp;lt;my:CreateTasksInSerial&amp;gt;false&amp;lt;/my:CreateTasksInSerial&amp;gt;&lt;br /&gt;  &amp;lt;my:AllowDelegation&amp;gt;true&amp;lt;/my:AllowDelegation&amp;gt;&lt;br /&gt;  &amp;lt;my:AllowChangeRequests&amp;gt;true&amp;lt;/my:AllowChangeRequests&amp;gt;&lt;br /&gt;  &amp;lt;my:StopOnAnyReject&amp;gt;true&amp;lt;/my:StopOnAnyReject&amp;gt;&lt;br /&gt;  &amp;lt;my:WantedTasks xsi:nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/my:WantedTasks&amp;gt;&lt;br /&gt;  &amp;lt;my:SetMetadataOnSuccess&amp;gt;false&amp;lt;/my:SetMetadataOnSuccess&amp;gt;&lt;br /&gt;  &amp;lt;my:MetadataSuccessField&amp;gt;&amp;lt;/my:MetadataSuccessField&amp;gt;&lt;br /&gt;  &amp;lt;my:MetadataSuccessValue&amp;gt;&amp;lt;/my:MetadataSuccessValue&amp;gt;&lt;br /&gt;  &amp;lt;my:ApproveWhenComplete&amp;gt;true&amp;lt;/my:ApproveWhenComplete&amp;gt;&lt;br /&gt;  &amp;lt;my:TimePerTaskVal xsi:nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/my:TimePerTaskVal&amp;gt;&lt;br /&gt;  &amp;lt;my:TimePerTaskType xsi:nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/my:TimePerTaskType&amp;gt;&lt;br /&gt;  &amp;lt;my:Voting&amp;gt;false&amp;lt;/my:Voting&amp;gt;&lt;br /&gt;  &amp;lt;my:MetadataTriggerField&amp;gt;&amp;lt;/my:MetadataTriggerField&amp;gt;&lt;br /&gt;  &amp;lt;my:MetadataTriggerValue&amp;gt;&amp;lt;/my:MetadataTriggerValue&amp;gt;&lt;br /&gt;  &amp;lt;my:InitLock&amp;gt;true&amp;lt;/my:InitLock&amp;gt;&lt;br /&gt;  &amp;lt;my:MetadataStop&amp;gt;false&amp;lt;/my:MetadataStop&amp;gt;&lt;br /&gt;  &amp;lt;my:ItemChangeStop&amp;gt;true&amp;lt;/my:ItemChangeStop&amp;gt;&lt;br /&gt;  &amp;lt;my:GroupTasks&amp;gt;true&amp;lt;/my:GroupTasks&amp;gt;&lt;br /&gt;&amp;lt;/my:myFields&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Drop the XML into the SPWorkflowAssociation object you just created using the AssociationData property and you’re all set to add the association to your list using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.addworkflowassociation.aspx"&gt;SPList.AddWorkflowAssociation&lt;/a&gt; method:&lt;/br&gt;&lt;/br&gt;pages.AddWorkflowAssociation (approvalWorkFlowAssociation);&lt;/br&gt;&lt;/br&gt;Before updating the list list, you may also want to configure your new workflow as the default content approval workflow:&lt;/br&gt;&lt;/br&gt;pages.DefaultContentApprovalWorkflowId = approvalWorkFlowAssociation.Id;&lt;/br&gt;&lt;/br&gt;Follow that with pages.Update () and you’re done!&lt;br /&gt;&lt;center&gt;   &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td&gt;&lt;script type="text/javascript" src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=cde7edc2"&gt;&lt;/script&gt; &lt;/td&gt;          &lt;td&gt;&lt;script type="text/javascript" src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=48840e1d"&gt;&lt;/script&gt; &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-5203352990720967095?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=vkWuGyxZRjk:QBzav8dG-GI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=vkWuGyxZRjk:QBzav8dG-GI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/vkWuGyxZRjk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/5203352990720967095/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/add-and-manage-workflows-using-api.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/5203352990720967095?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/5203352990720967095?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/vkWuGyxZRjk/add-and-manage-workflows-using-api.html" title="Add and manage workflows using the API" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/add-and-manage-workflows-using-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4FQXoyeyp7ImA9WxBRFU8.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-1734286456361276773</id><published>2010-01-04T00:21:00.001+11:00</published><updated>2010-01-04T00:21:50.493+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-04T00:21:50.493+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Administration" /><category scheme="http://www.blogger.com/atom/ns#" term="Things to Remember" /><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>Enable ICMP echo (ping) in Windows Server 2008 R2</title><content type="html">&lt;p&gt;Windows Server 2008 won’t respond to ping requests out of the box—they’re blocked by default in the Windows Firewall ruleset. In the pre-R2 days, I used a simple command to enable ping in my development environments but apparently &lt;em&gt;netsh firewall&lt;/em&gt; has been deprecated:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;netsh firewall set icmpsetting 8&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The replacement is—wait for it—&lt;em&gt;&lt;a href="http://support.microsoft.com/kb/947709"&gt;netsh advfirewall firewall&lt;/a&gt;&lt;/em&gt;, like so:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;netsh advfirewall firewall add rule name=”ICMP Allow incoming V4 echo request” protocol=icmpv4:8,any dir=in action=allow&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Richard Siddaway has a &lt;a href="http://msmvps.com/blogs/richardsiddaway/archive/2009/08/30/enable-ping.aspx"&gt;PowerShell equivalent&lt;/a&gt; (presumably, I haven’t tried it myself but should have, I know… tsk, tsk).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-1734286456361276773?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=xLTBpYHCG6A:ZhPKb4NtnsU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=xLTBpYHCG6A:ZhPKb4NtnsU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/xLTBpYHCG6A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/1734286456361276773/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2010/01/enable-icmp-echo-ping-in-windows-server.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1734286456361276773?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1734286456361276773?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/xLTBpYHCG6A/enable-icmp-echo-ping-in-windows-server.html" title="Enable ICMP echo (ping) in Windows Server 2008 R2" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.mediawhole.com/2010/01/enable-icmp-echo-ping-in-windows-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABQH0-fyp7ImA9WxBSFkw.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-216414620757323019</id><published>2009-12-24T12:39:00.001+11:00</published><updated>2009-12-24T12:39:11.357+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-24T12:39:11.357+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><title>(!) All conflicts resolved but no files checked in due to initial conflicts</title><content type="html">&lt;p&gt;&lt;font face="arial"&gt;A minor annoyance with VS2008 SP1 and TFS 2008 SP1 today when attempting a check in. Here’s the stack trace:&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font face="arial"&gt;Delete a folder and a bunch of images from VS Solution Explorer yesterday (right-click, Delete)&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Check in the deletion and explicitly check for the delete action for the relevant files during the check in process&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Arrive this morning to do a final cleanup and make sure everything in the project was checked in before Christmas… hey, all those images are still wanting to be checked in!&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Attempt check in from Solution Explorer (specify comment, work item as per our policy configuration); Resolve Conflicts dialog pops up with the message “(!) All conflicts resolved but no files checked in due to initial conflicts”. Try again… believing, from memory, I’d seen this problem before and a second check in attempt had solved it. Same deal. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Resume Conflict Resolution from File –&amp;gt; Source Control. Nothing found, “All conflicts resolved”&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Attempt check in from Source Control Explorer window in VS; same deal.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Drop into the VS 2008 Command Prompt and navigate to the solution; &lt;strong&gt;tf checkin&lt;/strong&gt; and &lt;strong&gt;tf resolve&lt;/strong&gt; produce the same results as VS. tf checkin tells me “Conflict: The latest version of item $/… is deleted.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Try &lt;strong&gt;tf resolve . /r /auto:AcceptTheirs &lt;/strong&gt;but the command tells me “There are no conflicts to resolve”&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Confirm folder and images are definitely not present in either the project (via Solution Explorer) or the source control tree (via Source Control Explorer). &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Get Specific Version with ‘Overwrite all files even if the local version matches the specified version’ option checked; no change to the project or file system; same error message on check in.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="arial"&gt;Undo Pending Changes… from Solution Explorer context menu. Success! Now I have nothing left to check in (any other files not involved in the deletion process were checked in separately) and TFS is tangle-free yet again. &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-216414620757323019?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=DRLodL6y26k:LCHPq7Ds4dI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=DRLodL6y26k:LCHPq7Ds4dI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/DRLodL6y26k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/216414620757323019/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/all-conflicts-resolved-but-no-files.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/216414620757323019?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/216414620757323019?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/DRLodL6y26k/all-conflicts-resolved-but-no-files.html" title="(!) All conflicts resolved but no files checked in due to initial conflicts" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/all-conflicts-resolved-but-no-files.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHRHo9eCp7ImA9WxBSFUo.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-742301855744225121</id><published>2009-12-24T01:42:00.001+11:00</published><updated>2009-12-24T01:42:15.460+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-24T01:42:15.460+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Installing Live Mesh Beta on Windows Server 2008 R2</title><content type="html">&lt;p&gt;&lt;font face="Arial"&gt;It’s never easy… the downloader doesn’t seem to work from the web or somesuch, or at the very least add a new key named &lt;strong&gt;Installer&lt;/strong&gt; below &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;&lt;strong&gt;HKEY_LOCAL_MACHINE&lt;/strong&gt;\&lt;strong&gt;Software&lt;/strong&gt;\&lt;strong&gt;Policies&lt;/strong&gt;\&lt;strong&gt;Microsoft&lt;/strong&gt;\&lt;strong&gt;Windows&lt;/strong&gt;\&lt;strong&gt;Installer&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;and then create a DWORD named &lt;strong&gt;DisableMSI&lt;/strong&gt;. Set the value to 0.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;In my case I’d already downloaded the installer so I ran it locally, no change to UAC, no reboot, no –force switch on the installer. I’m meshed.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa368304(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/aa368304(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa368304(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-742301855744225121?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Xh3lyJc5eec:PogtPTYZk3U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Xh3lyJc5eec:PogtPTYZk3U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/Xh3lyJc5eec" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/742301855744225121/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/installing-live-mesh-beta-on-windows.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/742301855744225121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/742301855744225121?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/Xh3lyJc5eec/installing-live-mesh-beta-on-windows.html" title="Installing Live Mesh Beta on Windows Server 2008 R2" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/installing-live-mesh-beta-on-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMFSH48eip7ImA9WxBSFkw.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-7898981247163858690</id><published>2009-12-24T00:02:00.006+11:00</published><updated>2009-12-24T11:10:19.072+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-24T11:10:19.072+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><title>errorData during SharePoint 2010 Products and Technologies Configuration Wizard</title><content type="html">&lt;p&gt;&lt;span style="font-family: arial"&gt;When specifying database settings for my new SharePoint 2010 beta farm, I came up against an error pop I’ve never seen before under 2007:&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;font face="Arial"&gt;&lt;span style="font-style: italic"&gt;An error has occurred while validating the configuration settings.&amp;#160; An exception of type System.ArgumentNullException was thrown.&amp;#160; Additional exception information:&amp;#160; The errorData argument cannot be null or zero length.       &lt;br /&gt;        &lt;br /&gt;Parameter name: errorData&lt;/span&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font face="Arial"&gt;&lt;span style="font-style: normal"&gt;M’kay. What does that mean?!? I wonder to myself.       &lt;br /&gt;        &lt;br /&gt;Checking the application log revealed a critical error that set me straight:&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;&lt;span style="font-style: italic"&gt;SQL database login for 'master' on instance 'SP2010BETA' failed. Additional error information from SQL Server is included below.       &lt;br /&gt;        &lt;br /&gt;Login failed for user 'SPDEV\Administrator'.&lt;/span&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;span style="font-style: normal"&gt;&lt;font face="Arial"&gt;I’m trying a least privilege install and of was still logged in as the administrator, instead of the setup user (criminal); I configured the setup account as an admin during the SQL Server 2008 install but not the administrator account I was using.       &lt;br /&gt;        &lt;br /&gt;Login as setup and I’m back on track. Of course, &lt;/font&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en/sharepoint2010general/thread/8fffb030-c118-4e36-94ab-8601b25f3a97"&gt;&lt;font face="Arial"&gt;by the sound of it&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt;, I shouldn't be doing least privilege in 2010. &lt;/font&gt;&lt;/span&gt;    &lt;br /&gt;&lt;/p&gt; &lt;center&gt;   &lt;br /&gt;    &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td&gt;&lt;script src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=cde7edc2" type="text/javascript"&gt;&lt;/script&gt;             &lt;br /&gt;&lt;/td&gt;          &lt;td&gt;&lt;script src="http://sharepointads.com/members/scripts/banner.php?a_aid=NA&amp;amp;a_bid=48840e1d" type="text/javascript"&gt;&lt;/script&gt;             &lt;br /&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;br /&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt; &lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;/center&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-7898981247163858690?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=KBpB9ftQ9hI:zumRoMIcuWg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=KBpB9ftQ9hI:zumRoMIcuWg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/KBpB9ftQ9hI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/7898981247163858690/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/errordata-during-sharepoint-2010.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/7898981247163858690?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/7898981247163858690?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/KBpB9ftQ9hI/errordata-during-sharepoint-2010.html" title="errorData during SharePoint 2010 Products and Technologies Configuration Wizard" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/errordata-during-sharepoint-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4AQHY4eCp7ImA9WxBSE0g.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-683683917265252892</id><published>2009-12-21T12:29:00.001+11:00</published><updated>2009-12-21T12:29:01.830+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-21T12:29:01.830+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="User Groups" /><title>SharePoint Saturday Perth Announced</title><content type="html">&lt;p&gt;&lt;font face="Arial"&gt;The very first SharePoint Saturday event is coming up in the new year (early February). Check out the details here and submit your speaker submissions by 4 Jan:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.sharepointsaturday.org/perth/default.aspx" href="http://www.sharepointsaturday.org/perth/default.aspx"&gt;&lt;font face="Arial"&gt;http://www.sharepointsaturday.org/perth/default.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;See you there!&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-683683917265252892?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Gtttzj3w_j4:ziBKs1VxrqI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Gtttzj3w_j4:ziBKs1VxrqI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/Gtttzj3w_j4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/683683917265252892/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/sharepoint-saturday-perth-announced.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/683683917265252892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/683683917265252892?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/Gtttzj3w_j4/sharepoint-saturday-perth-announced.html" title="SharePoint Saturday Perth Announced" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/sharepoint-saturday-perth-announced.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8MQ3c5eCp7ImA9WxBTGUg.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-1541990104589277621</id><published>2009-12-16T19:08:00.001+11:00</published><updated>2009-12-16T19:08:02.920+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-16T19:08:02.920+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Things to Remember" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Caching" /><category scheme="http://www.blogger.com/atom/ns#" term="MOSS" /><title>Flushing the Blob Cache</title><content type="html">&lt;p&gt;&lt;font face="Arial"&gt;Sean McDonough has a really comprehensive post on several options for flushing the MOSS 2007 blob cache. Worth a read if you’re in need:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sharepointinterface.com/2009/10/30/manually-clearing-the-moss-2007-blob-cache/"&gt;&lt;font face="Arial"&gt;http://sharepointinterface.com/2009/10/30/manually-clearing-the-moss-2007-blob-cache/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-1541990104589277621?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=2u4zT9Afz0s:waXUJGO-DnE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=2u4zT9Afz0s:waXUJGO-DnE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/2u4zT9Afz0s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/1541990104589277621/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/flushing-blob-cache.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1541990104589277621?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/1541990104589277621?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/2u4zT9Afz0s/flushing-blob-cache.html" title="Flushing the Blob Cache" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/flushing-blob-cache.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACRX46fip7ImA9WxBSE0s.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-2116262489149277346</id><published>2009-12-16T11:59:00.003+11:00</published><updated>2009-12-21T15:12:44.016+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-21T15:12:44.016+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Inner exception details displayed instead of wrapper exception</title><content type="html">&lt;p&gt;&lt;span style="font-family:Arial;"&gt;Wrapping an exception using the Exception (string, Exception) constructor and throwing the new exception in place of the original isn’t behaving as expected for me today: ASP.NET 3.5 displays the inner exception message in its default exception display; I expected to see the wrapper exception message. Oddly enough, details pertaining to the wrapper are logged to the Application event log. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;So this:&lt;/span&gt; &lt;/p&gt;try {&lt;br /&gt;// Setup to make something go wrong&lt;br /&gt;throw new Exception ("Inner exception");&lt;br /&gt;}&lt;br /&gt;catch (Exception ex)&lt;br /&gt;{&lt;br /&gt;// Wrap the inner exception and throw&lt;br /&gt;// a new exception instead&lt;br /&gt;throw new Exception ("wrapper exception", ex);&lt;br /&gt;} &lt;p&gt;&lt;span style="font-family:arial;"&gt;spits out this (note both the message and source error clearly pointing at the inner exception line):&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;i&gt;Inner exception&lt;/i&gt;&lt;/h4&gt;&lt;p&gt;&lt;b&gt;Description: &lt;/b&gt;An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Exception Details: &lt;/b&gt;System.Exception: Inner exception &lt;/p&gt;&lt;p&gt;&lt;b&gt;Source Error:&lt;/b&gt; &lt;/p&gt;&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;Line 18: try&lt;br /&gt;Line 19: {&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;Line 20: throw new Exception ("Inner exception");&lt;/span&gt;&lt;br /&gt;Line 21: }&lt;br /&gt;Line 22: catch (Exception ex) &lt;p&gt;&lt;span style="font-family:Arial;"&gt;Despite what the message and highlighted code reveal, the stack trace does imply the wrapper exception was involved along the way. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;[Exception: Inner exception]&lt;br /&gt;_Default.Page_Load(Object sender, EventArgs e) in Default.aspx.cs:20 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;[Exception: wrapper exception]&lt;br /&gt;_Default.Page_Load(Object sender, EventArgs e) in Default.aspx.cs:24 … &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;Adding a second try/catch to catch any exception of type Exception and inspecting the results locates the inner exception property where I’d expect it to be. Alternatively, “swallowing” the inner exception in the original catch block and throwing a new exception using the Exception (string) constructor does just that—no sign of the inner exception. I’ve additionally tried catching different types of exception (I was originally throwing ApplicationExceptions and catch Exceptions) and constructing my own exception classes with the same effect. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;Maybe I’m missing something but this seems like pretty basic stuff and a &lt;a href="http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic48955.aspx"&gt;few&lt;/a&gt; &lt;a href="http://objectmix.com/dotnet/115566-inner-exception-thrown-control-invoke-instead-outer-exception-framework-bug.html"&gt;other&lt;/a&gt; vaguely related search results hint that I’m not alone with this one. Of course, I can always handle all exceptions myself to prevent anything killing the application but the current approach is convenient at the moment for debugging outside production where it’s less convenient to attach a debugger or check the event logs. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;If you’ve got any ideas or have come across this yourself, I’d love to hear your thoughts!&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-2116262489149277346?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Y0L9DEB_0-g:1PYbYl3sRfQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=Y0L9DEB_0-g:1PYbYl3sRfQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/Y0L9DEB_0-g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/2116262489149277346/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/inner-exception-details-displayed.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/2116262489149277346?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/2116262489149277346?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/Y0L9DEB_0-g/inner-exception-details-displayed.html" title="Inner exception details displayed instead of wrapper exception" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/inner-exception-details-displayed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcEQng6fCp7ImA9WxBTEEQ.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-2127246160005296035</id><published>2009-12-06T20:00:00.001+11:00</published><updated>2009-12-06T20:00:03.614+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-06T20:00:03.614+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Search" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Design" /><category scheme="http://www.blogger.com/atom/ns#" term="SEO" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><title>The Keywords Meta Tag Doesn’t Matter</title><content type="html">&lt;p&gt;&lt;font face="Arial"&gt;Every wondered if the major search engines still consider the keywords meta tag? Well most don’t and haven’t for a very long time. Here’s the latest from the search engine driving the majority of search-based traffic to your sites:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://googlewebmastercentral.blogspot.com/2009/09/google-does-not-use-keywords-meta-tag.html"&gt;&lt;font face="Arial"&gt;http://googlewebmastercentral.blogspot.com/2009/09/google-does-not-use-keywords-meta-tag.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Manual keyword maintenance, automated keyword builders, and so on: goodbye and good riddance!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-2127246160005296035?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=XMYnzXXPvnQ:wuTkr4SAwqA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=XMYnzXXPvnQ:wuTkr4SAwqA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/XMYnzXXPvnQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/2127246160005296035/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/keywords-meta-tag-doesnt-matter.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/2127246160005296035?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/2127246160005296035?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/XMYnzXXPvnQ/keywords-meta-tag-doesnt-matter.html" title="The Keywords Meta Tag Doesn’t Matter" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/keywords-meta-tag-doesnt-matter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UBR3g_fSp7ImA9WxNaF0k.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-9106919589451327503</id><published>2009-12-02T18:22:00.001+11:00</published><updated>2009-12-02T20:14:16.645+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T20:14:16.645+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><title>TFS Screen Captures with Snagit</title><content type="html">&lt;p&gt;&lt;font face="Arial"&gt;If you’ve been working with TFS and TFS Web Access (Team Plain) you’re likely aware the product is graceless about screen captures—a critical part to describing many types of bug. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;With products like &lt;/font&gt;&lt;a href="http://www.atlassian.com/software/jira/"&gt;&lt;font face="Arial"&gt;JIRA&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; you can simply PrtScn and paste the resulting screen grab directly into their web-based interface; TFS offers nothing of the sort (maybe in 2010?) and you must use a third party tool to save out your screen shot and upload it to the work item as a file attachment. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;I’ve seen a few attempts to write controls to make the necessary magic happen within the Visual Studio environment but that doesn’t cut it where the majority of TFS users interact with the system through a browser. I have yet to find a solution for the browser end but in my travels did today come across a free &lt;/font&gt;&lt;a href="http://www.techsmith.com/snagit/accessories/teamsystem.asp"&gt;&lt;font face="Arial"&gt;Snagit output&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; from &lt;/font&gt;&lt;a href="http://www.techsmith.com/"&gt;&lt;font face="Arial"&gt;TechSmith&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; that will attach a Snagit screen shot to a work item for users with Team System installed. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;As an extra output, you simply Finish your capture to the Team System output and a new work item window appears so you can fill in the basics. It’s not web-based but does work quite well, dropping the screenshot under the File Attachments tab and it is free if you’ve already got &lt;/font&gt;&lt;a href="http://www.techsmith.com/screen-capture.asp"&gt;&lt;font face="Arial"&gt;Snagit&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; installed (which isn’t free).&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-9106919589451327503?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=PQzuHQWGM5Q:FX1Wl7_M5lI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=PQzuHQWGM5Q:FX1Wl7_M5lI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/PQzuHQWGM5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/9106919589451327503/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/tfs-screen-captures-with-snagit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/9106919589451327503?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/9106919589451327503?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/PQzuHQWGM5Q/tfs-screen-captures-with-snagit.html" title="TFS Screen Captures with Snagit" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/tfs-screen-captures-with-snagit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04BR3s_fyp7ImA9WxNaF04.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-7697344672296876965</id><published>2009-12-02T16:32:00.001+11:00</published><updated>2009-12-02T16:32:36.547+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T16:32:36.547+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web Design" /><category scheme="http://www.blogger.com/atom/ns#" term="IIS" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><title>Failure serving a file with a percentage character in the file name</title><content type="html">&lt;font size="2" face="Arial"&gt;An unexpected 404 error cropped up today while attempting to serve an image file with a percentage character in the file name. Windows has no issues with percentages but apparently IIS or something else in the pipeline refused to serve this file. Interestingly, the '%' character &lt;a href="http://www.opinionatedgeek.com/DotNet/Tools/UrlEncode/Encode.aspx"&gt;URL-encodes&lt;/a&gt; as '%25'... go figure.&lt;/font&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-7697344672296876965?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=7p-i_6jRGaA:OpBg7oY5oaU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=7p-i_6jRGaA:OpBg7oY5oaU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/7p-i_6jRGaA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/7697344672296876965/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/12/failure-serving-file-with-percentage.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/7697344672296876965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/7697344672296876965?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/7p-i_6jRGaA/failure-serving-file-with-percentage.html" title="Failure serving a file with a percentage character in the file name" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/12/failure-serving-file-with-percentage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4CR3s5fyp7ImA9WxNbEEU.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-6198829296297970229</id><published>2009-11-13T16:02:00.001+11:00</published><updated>2009-11-13T16:09:26.527+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T16:09:26.527+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web Content Management" /><category scheme="http://www.blogger.com/atom/ns#" term="Things to Remember" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Design" /><category scheme="http://www.blogger.com/atom/ns#" term="IE" /><title>CMYK .jpg images don’t render in IE and Firefox</title><content type="html">&lt;p&gt;&lt;font face="Arial"&gt;For the second time in recent memory I was today faced with a &amp;quot;broken&amp;quot; image in IE 8 and Firefox 2.x due to the image being saved using the CMYK colour mode instead of RGB. Interestingly, Chrome was quite happy to display the image as it was; I had to open it in Photoshop, change the mode to RGB, and save it back for the other browsers to respond. Apparently saving for web does the same thing.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;Here’s the image in CMYK:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://lh4.ggpht.com/_kuHIq0i1UO4/SvzoevYpLdI/AAAAAAAAC_M/XtL1jGrGaGE/s1600-h/CMYK%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="CMYK" border="0" alt="CMYK" src="http://www.mediawhole.com-a.googlepages.com/CMYK.jpg" width="204" height="124" /&gt;&lt;/a&gt;&amp;#160;&lt;/font&gt;&lt;font face="Arial"&gt;And here it is again in RGB:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_kuHIq0i1UO4/Svzof2vb8YI/AAAAAAAAC_U/0FqiK-mU1y8/s1600-h/RGB%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="RGB" border="0" alt="RGB" src="http://lh6.ggpht.com/_kuHIq0i1UO4/SvzognXb4LI/AAAAAAAAC_Y/trCzfO3Yl-c/RGB_thumb%5B1%5D.jpg?imgmax=800" width="204" height="124" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-6198829296297970229?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=08a9SFapwpo:Ld21wtnzRng:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=08a9SFapwpo:Ld21wtnzRng:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/08a9SFapwpo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/6198829296297970229/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/11/cmyk-jpg-images-dont-render-in-ie-and.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/6198829296297970229?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/6198829296297970229?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/08a9SFapwpo/cmyk-jpg-images-dont-render-in-ie-and.html" title="CMYK .jpg images don’t render in IE and Firefox" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/11/cmyk-jpg-images-dont-render-in-ie-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYARXwyfyp7ImA9WxNbEEU.&quot;"><id>tag:blogger.com,1999:blog-158104178192097877.post-3228451438694969315</id><published>2009-11-13T15:55:00.001+11:00</published><updated>2009-11-13T15:55:44.297+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T15:55:44.297+11:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Things to Remember" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Networking" /><title>My Network Places in Windows Server 2008</title><content type="html">&lt;p&gt;&lt;font face="Arial"&gt;Where has My Network Places gone in Windows Server 2008? I'm not quite sure but you can add a new network place by right-clicking on Computer in Windows Explorer and selecting Add a Network Location from the context menu. For example, connect to a picture library in a SharePoint content database using this address: &lt;/font&gt;&lt;a href="http://my_site:30000/Lists/MyPicturesList"&gt;&lt;font face="Arial"&gt;http://my_site:30000/Lists/MyPicturesList&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_kuHIq0i1UO4/SvzmzC13UTI/AAAAAAAAC_E/vd3y9DRQ7UY/s1600-h/Add%20a%20Network%20Location%20in%20Windows%20Server%202008%5B3%5D.png"&gt;&lt;font face="Arial"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Add a Network Location in Windows Server 2008" border="0" alt="Add a Network Location in Windows Server 2008" src="http://lh6.ggpht.com/_kuHIq0i1UO4/Svzmz-mePEI/AAAAAAAAC_I/RIRAt7BK9v0/Add%20a%20Network%20Location%20in%20Windows%20Server%202008_thumb%5B1%5D.png?imgmax=800" width="244" height="195" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;After stepping through the wizard, the network location will appear alongside your other mapped drives, etc.&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Dirty Words (Michael Hanes) - &lt;a href="http://blog.mediawhole.com"&gt;blog.mediawhole.com&lt;/a&gt;
&lt;a href="mailto:info@mediawole.com"&gt;mailto:info@mediawole.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/158104178192097877-3228451438694969315?l=blog.mediawhole.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=BCHXW3OKn_s:8VBSwSjYXAE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mediawhole.com/~ff/DirtyWords?a=BCHXW3OKn_s:8VBSwSjYXAE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DirtyWords?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DirtyWords/~4/BCHXW3OKn_s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mediawhole.com/feeds/3228451438694969315/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.mediawhole.com/2009/11/my-network-places-in-windows-server.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/3228451438694969315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/158104178192097877/posts/default/3228451438694969315?v=2" /><link rel="alternate" type="text/html" href="http://feeds.mediawhole.com/~r/DirtyWords/~3/BCHXW3OKn_s/my-network-places-in-windows-server.html" title="My Network Places in Windows Server 2008" /><author><name>michhes</name><uri>http://www.blogger.com/profile/01877569030107816208</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16649840598410406290" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.mediawhole.com/2009/11/my-network-places-in-windows-server.html</feedburner:origLink></entry></feed>
