<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>novolocus.com &#187; 2008 &#187; January</title>
	<atom:link href="http://www.novolocus.com/2008/01/feed" rel="self" type="application/rss+xml" />
	<link>http://www.novolocus.com</link>
	<description>Whatever Andy Burns is working on...</description>
	<pubDate>Tue, 18 Nov 2008 12:00:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Handling Errors when doing file IO</title>
		<link>http://www.novolocus.com/2008/01/23/handling-errors-when-doing-file-io/</link>
		<comments>http://www.novolocus.com/2008/01/23/handling-errors-when-doing-file-io/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 13:53:59 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/23/handling-errors-when-doing-file-io/</guid>
		<description><![CDATA[I came across a pattern in .NET that I’d not thought of before. The scenario is, I’m reading from a file and deserializing it’s contents (a List of ‘Foo’ objects). Exceptions can be thrown at two points:

When I’m reading the file
When I’m deserialising the xml

Obviously, I want to make sure that the file handle is [...]]]></description>
			<content:encoded><![CDATA[<p>I came across a pattern in .NET that I’d not thought of before. The scenario is, I’m reading from a file and deserializing it’s contents (a List of ‘Foo’ objects). Exceptions can be thrown at two points:</p>
<ul>
<li>When I’m reading the file</li>
<li>When I’m deserialising the xml</li>
</ul>
<p>Obviously, I want to make sure that the file handle is released if the deserialisation fails. However, I can’t deal with that in a single try block,  as if the exception is in the file IO, then the file handle won’t exist to close in a finally block! <span id="more-336"></span>In other words, this won’t work:</p>
<p><code>try {<br />
FileStream f = new FileStream(path, FileMode.Open, FileAccess.Read);<br />
_fooList = (List&lt;Foo&gt;) fooSerializer.Deserialize(f);<br />
} catch (Exception e) {<br />
//handle File IO or Serialisation exception<br />
} finally {<br />
f.close();   // This line doesn’t work. Outside variable scope.<br />
}</code></p>
<p>The problem is that if there is an IO exception, f won’t exist to close. Moving the definition of the <code>FileStream</code> to outside the try just causes a compilation error as the <code>f.close()</code> line may be using an uninitialized variable, so you have to check it first, like so:</p>
<p><code>FileStream f = null;<br />
try {<br />
f = new FileStream(path, FileMode.Open, FileAccess.Read);<br />
_fooList = (List<foo>) fooSerializer.Deserialize(f);<br />
} catch (Exception e2) {<br />
//handle File IO exception or Serialisation exception.<br />
} finally {<br />
if (f != null) {<br />
f.close();<br />
}<br />
}</foo></code></p>
<p>That just seems, well, clunky. I&#8217;d prefer to have the variable scoped inside the try, as that&#8217;s where it is used, and the checking if <code>f</code> is null is just annoying. Initially, to solve this I came up with:</p>
<p><code>try {<br />
FileStream f = new FileStream(path, FileMode.Open, FileAccess.Read);<br />
try {<br />
_fooList = (List&lt;Foo&gt;)fooSerializer.Deserialize(f);<br />
} catch (Exception e1){<br />
//handle Serialisation Exception<br />
} finally {<br />
f.close();<br />
}<br />
} catch (Exception e2) {<br />
//handle File IO exception<br />
}</code></p>
<p>Yuck! I don’t like that you have to handle exceptions in two places, and the complexity of two try..catch blocks, albeit that I liked having <code>f</code> scoped inside a try block. After some thinking, I found a better way:</p>
<p><code>try {<br />
using (FileStream f = new FileStream(path, FileMode.Open, FileAccess.Read))<br />
{<br />
_fooList = (List&lt;Foo&gt;) fooSerializer.Deserialize(f);<br />
}<br />
}<br />
catch (Exception ex)<br />
{<br />
//handle either File IO or Serialisation exception.<br />
}</code></p>
<p>This works as the <code>using{}</code> block automatically calls  <code>dispose()</code> on the object created in the top line of it (<code>f</code> in this case)  when you leave the block, and <code>dispose()</code> and <code>close()</code> are synonymous on <code>FileStreams</code>.</p>
<p>Also, even if the <code>using {}</code> block doesn’t tidy up the <code>FileStream</code> when you leave because of an exception (and I’m pretty sure it does), you are now outside the variable scope of <code>f</code>, so the garbage collector will clear it up – which includes calling <code>f</code>’s finalizer (or destructor, for C++ bods) which in turn calls <code>dispose()</code> if required.</p>
<p>Thus, your file will <em>not</em> be stuck open.</p>
<p>Anyway, the short of it - the above pattern is a good way of opening a file and doing stuff with it, while handling errors in one catch block, and making sure that exceptions don’t leave the file locked open.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/23/handling-errors-when-doing-file-io/feed/</wfw:commentRss>
		</item>
		<item>
		<title>.NET Framework versions, language versions, and CLR versions - all a bit fraught&#8230;</title>
		<link>http://www.novolocus.com/2008/01/11/net-framework-versions-language-versions-and-clr-versions-all-a-bit-fraught/</link>
		<comments>http://www.novolocus.com/2008/01/11/net-framework-versions-language-versions-and-clr-versions-all-a-bit-fraught/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 14:06:07 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/11/net-framework-versions-language-versions-and-clr-versions-all-a-bit-fraught/</guid>
		<description><![CDATA[The .NET framework is a bit confusing until you get your head round the components of it, and the way that Microsoft name things. 
.NET has a thing called the common language runtime (CLR). (This is the .NET equivalent of the Java Runtime). Different versions are essentially different VMs, and can coexist. The CLR runs [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">The .NET framework is a bit confusing until you get your head round the components of it, and the way that Microsoft name things.<o:p> </o:p></p>
<p class="MsoNormal">.NET has a thing called the <strong>common language runtime (CLR)</strong>. (This is the .NET equivalent of the Java Runtime). Different versions are essentially different VMs, and can coexist. The CLR runs code that is an <strong>Intermediate Language (IL)</strong> (aka the Common Intermediate Language (CIL)). Whatever code you write in C# or VB.NET actually only gets partially compiled into IL code. It&#8217;s a lot like Java Bytecode.<o:p> </o:p></p>
<p class="MsoNormal">The Base Classes are the library of DLLs for the framework (and are sometimes incorrectly referred to <u>as</u> the framework). Think of it as Win32 for .NET. These constitute the .NET API – and have different versions too. A different version of the base classes, though, does not mean a different CLR – for example, frameworks version 2, 3 and 3.5 all use the same CLR, but present a different external API and have different language features. Indeed, the base classes of framework version 3.5 are a superset of version 3, which are a superset of 2. This means framework 2 code will run on machines with the 3.5 installed.</p>
<p class="MsoNormal"><o:p> </o:p>The languages have different versions too, and this is where things start to get confusing. The different language versions have different compilers, which  emit backward compatible IL. This is to be expected since there is no new version of the CLR. In plain terms this means that all the new language features can be used with older projects. E.g. C# 3.0 code can run on the .NET 2 Framework, provided you haven’t used any of the libraries that are part of a later framework. The C# 3.0 code will be partially compiled into the same version of  IL code as your C# 2.0 code, so the only problems come if you are using libraries that aren’t part of that .NET Framework.</p>
<p class="MsoNormal"> <em>(Note to self - must remember - C# version is independent of </em> <em>Framework version)</em></p>
<p class="MsoNormal"><o:p> </o:p>So why would you want to use C# 3.0 over C# 2.0? Well, the language adds a number of new features too – such as <a href="http://www.danielmoth.com/Blog/2007/03/automatic-properties-in-c3.html">automatic properties</a>, <a href="http://www.danielmoth.com/Blog/2007/08/relaxed-delegates.html">relaxed delegates</a>, <a href="http://www.danielmoth.com/Blog/2007/02/object-initializers-in-c-30-and-vb9.html">object initialisers</a>, <a href="http://www.danielmoth.com/Blog/2007/02/option-infer-in-vb9.html">type inference</a>, <a href="http://www.danielmoth.com/Blog/2007/02/anonymous-types-in-c-30-and-vb9.html">anonymous types</a>, <a href="http://www.danielmoth.com/Blog/2007/02/extension-methods-c-30-and-vb9.html">extension methods</a>, <a href="http://www.danielmoth.com/Blog/2007/02/lambda-expressions-in-vb9.html">lambdas</a> and <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=343893">partial methods</a>.</p>
<p class="MsoNormal"><o:p> </o:p>Hopefully this chart might explain things a bit. I’m pretty sure it’s right, although I’m recreating it from memory and can’t entirely remember&#8230;<o:p><br />
</o:p></p>
<table class="MsoNormalTable" style="border-collapse: collapse" border="0" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid black; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal"><strong><o:p><br />
</o:p></strong></td>
<td style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal"><strong>Framework Version 1.1<o:p></o:p></strong></p>
</td>
<td style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal"><strong>Framework Version 2.0<o:p></o:p></strong></p>
</td>
<td style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal"><strong>Framework Version 3<o:p></o:p></strong></p>
</td>
<td style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal"><strong>Framework Version 3.5<o:p></o:p></strong></p>
</td>
</tr>
<tr>
<td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal"><strong>CLR<o:p></o:p></strong></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">1.1</p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">2.0</p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">2.0</p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">2.0</p>
</td>
</tr>
<tr>
<td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal"><strong>Library versions<o:p></o:p></strong></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">1.1</p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">2.0</p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">3.0 (including 2.0 sp1)</p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 119.7pt" valign="top" width="160">
<p class="MsoNormal">3.5 (including 2.0 sp1 &amp; 3.0 sp1)</p>
</td>
</tr>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Similar chart here:</p>
<p class="MsoNormal"><a href="http://www.leonmeijer.nl/archive/2007/06/11/50.aspx">http://www.leonmeijer.nl/archive/2007/06/11/50.aspx</a></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">…though the Microsoft guy who presented to me didn’t say anything about a CLR 3.0. I suppose there may be one which is backwardly compatibile?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/11/net-framework-versions-language-versions-and-clr-versions-all-a-bit-fraught/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Changing the SmallSearchInputBox delegate control</title>
		<link>http://www.novolocus.com/2008/01/10/changing-the-smallsearchinputbox-delegate-control/</link>
		<comments>http://www.novolocus.com/2008/01/10/changing-the-smallsearchinputbox-delegate-control/#comments</comments>
		<pubDate>Thu, 10 Jan 2008 09:31:50 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/10/changing-the-smallsearchinputbox-delegate-control/</guid>
		<description><![CDATA[A colleague of mine was wanting to make some changes to the SmallSearchInputBox delegate control in SharePoint 2007. That&#8217;s the control that appears on most pages, looking like:

This control is a &#8216;Delegate control&#8217; - that is, you can create features to override the currently used control. What my colleague wanted to do was not display [...]]]></description>
			<content:encoded><![CDATA[<p>A colleague of mine was wanting to make some changes to the SmallSearchInputBox delegate control in SharePoint 2007. That&#8217;s the control that appears on most pages, looking like:</p>
<p style="text-align: center"><img src="http://www.novolocus.com/wp-content/uploads/2008/01/smallsearchinputbox.png" alt="SmallSearchInputBox" /></p>
<p>This control is a &#8216;Delegate control&#8217; - that is, you can create features to override the currently used control. What my colleague wanted to do was not display the &#8216;Scope&#8217; drop down list, the Advanced Search link, and to include prompt text (something like &#8216;Enter Search&#8230;&#8217;). A quick dig into the FEATURES folder in 12 Hive showed that the control had a number of properties.</p>
<p><em>(The features that this information applies to are the OSearchBasicFeature and OSearchEnhancedFeature. Both contain files called ‘SearchArea.xml’, and that contains the code below. I found the folders with this in:</em></p>
<p><em> %12 Hive%\Template\Features\OSearchBasicFeature</em></p>
<p><em>%12 Hive%\Template\Features\OSearchEnhancedFeature )</em></p>
<p><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt;<br />
&lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&gt;<br />
&lt;Control<br />
Id="SmallSearchInputBox"<br />
Sequence="25"<br />
ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"&gt;<br />
&lt;Property Name="GoImageUrl"&gt;/_layouts/images/gosearch.gif&lt;/Property&gt;<br />
&lt;Property Name="GoImageUrlRTL"&gt;/_layouts/images/goRTL.gif&lt;/Property&gt;<br />
&lt;Property Name="GoImageActiveUrl"&gt;/_layouts/images/gosearch.gif&lt;/Property&gt;<br />
&lt;Property Name="GoImageActiveUrlRTL"&gt;/_layouts/images/goRTL.gif&lt;/Property&gt;<br />
&lt;Property Name="UseSiteDefaults"&gt;true&lt;/Property&gt;<br />
&lt;Property Name="FrameType"&gt;None&lt;/Property&gt;<br />
&lt;Property Name="ShowAdvancedSearch"&gt;true&lt;/Property&gt;<br />
&lt;/Control&gt;<br />
&lt;/Elements&gt;</code></p>
<p>This shows a property <code>ShowAdvancedSearch</code> which sounded pretty promising for turning off the Advanced Search link. We decided to see what other properties were available, and found <a href="http://clintcherry.spaces.live.com/blog/cns!AEC0DCBC460E45B9!421.entry">a good article by Clint Cherry </a>about the SmallSearchInputBox control, and the <a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.searchboxex_members.aspx">MSDN docs</a>. The Property tags in the XML for the delegate control set the properties of the web control class - e.g. GoImageUrl matches the GoImageUrl property on the class. Much to our pleasure, we found the <code>QueryPromptString</code> displays text in the search control which vanishes when it receives focus, and the <code>DropDownMode</code> property allows us to turn off the scope dropdown list. Hurrah!</p>
<p>For the values that you can set the drop down mode to, <a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.dropdownmodes.aspx">see the MSDN docs</a> again</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/10/changing-the-smallsearchinputbox-delegate-control/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What happens when a K2 BlackPearl Licence expires?</title>
		<link>http://www.novolocus.com/2008/01/09/what-happens-when-a-k2-blackpearl-licence-expires/</link>
		<comments>http://www.novolocus.com/2008/01/09/what-happens-when-a-k2-blackpearl-licence-expires/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 13:52:01 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[K2]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/09/what-happens-when-a-k2-blackpearl-licence-expires/</guid>
		<description><![CDATA[So, I&#8217;d built a demo with a short-term licence key - one that expired at the end of December. This was unfortunate as the demo got moved to January. Anyway, what happened when the licence expired? Um, sudden workflow death. The workflow host ceased functioning - so my workflows which were in progress wouldn&#8217;t do [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;d built a demo with a short-term licence key - one that expired at the end of December. This was unfortunate as the demo got moved to January. Anyway, what happened when the licence expired? Um, sudden workflow death. The workflow host ceased functioning - so my workflows which were in progress wouldn&#8217;t do anything, and even the worklists stopped functioning.</p>
<p>Hmm. Seems a bit brutal to me - I&#8217;d expected that the in progress workflows might be possible to continue, albeit that I wouldn&#8217;t expect to be able to start new processes. I suppose maybe it makes sense, &#8216;cos otherwise people would be able to still be using &#8216;in progress&#8217; workflows for years afterwards, but it was a bit of a shock.</p>
<p>On the other hand, updating the licence wasn&#8217;t too hard - <a href="https://portal.k2workflow.com/licensekey/Default.aspx">provided you can find the URL</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/09/what-happens-when-a-k2-blackpearl-licence-expires/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Why SharePoint Records Management will struggle&#8230;</title>
		<link>http://www.novolocus.com/2008/01/08/why-sharepoint-records-management-will-struggle/</link>
		<comments>http://www.novolocus.com/2008/01/08/why-sharepoint-records-management-will-struggle/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 13:13:54 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Records Management]]></category>

		<category><![CDATA[Taxonomy]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/08/why-sharepoint-records-management-will-struggle/</guid>
		<description><![CDATA[I recently got a lot of my old APS photos scanned, and I&#8217;ve been working my way through them all, trying to sort them out and arrange them. I&#8217;ve been doing this by, well, putting them in folders such as &#8216;2003-06 - French Alps Kayaking&#8217;. At the same time, though, I wanted to give my [...]]]></description>
			<content:encoded><![CDATA[<p>I recently got a lot of my old APS photos scanned, and I&#8217;ve been working my way through them all, trying to sort them out and arrange them. I&#8217;ve been doing this by, well, putting them in folders such as &#8216;2003-06 - French Alps Kayaking&#8217;. At the same time, though, I wanted to give my friends copies of the photo&#8217;s which they were in, and I did this by, well, creating another folder for each of them, and copying pictures into them too. Not dreadfully sophisticated.</p>
<p>A couple of my friends asked why I didn&#8217;t just use some albuming application, or something like Flickr, and tag the images. That way, I could browse by multiple criteria. And I&#8217;ve gotta say, it would be neat. However, I want to be able to look at these photos when I&#8217;m an old man. I mean, my grandfather was showing me pictures of when he was a kid - so that&#8217;s about 75 years ago. Does anyone consider 75 year survival times for digital media? Nope. But I suspect that file systems and JPEGs, even if they aren&#8217;t still in use, will be easier to migrate. Flickr? Well, obviously, no website has &#8216;Established 1932&#8242; on it. I&#8217;m not sure I&#8217;d trust something like that to still be around. Other tagging and abluming products - again, I&#8217;m not convinced. I decided I&#8217;d stick with just folders.</p>
<p>This set me thinking about Record Management, and taxonomy vs tagging.<span id="more-329"></span></p>
<p>Tagging has a lot of benefits if you&#8217;re dealing with a <em>lot</em> of files. Essentially, you can have multiple views onto a pool of documents. That&#8217;s cool. And when we assign meta-data to a file (through use of Content Types), that&#8217;s sort of what we&#8217;re doing; enabling views onto a pool files. You can do that through either views on a list, or search, but the end result is pretty much the same.</p>
<p>Storing records by taxonomy alone has a number of issues - you have to be very organised, you have to make sure that people are saving to the correct location, multiple views onto the same files isn&#8217;t possible. But it has advantages too. It&#8217;s simple, and people can trust that the file is in a specific location, rather than something which may appear in a particular view.</p>
<p>And there&#8217;s the thing - simple, and trusted. And that&#8217;s what Records Managers like. They&#8217;re used to taxonomies of records; they call them File Plans. Heck, the practise of RM is usually doing in roughly the same way as filing cabinet, drawer, folder. The industry is used to its taxonomies, and used to things going in one location. Sure, just as tagging and taxonomy isn&#8217;t necessarily and &#8216;either/or&#8217; proposition your RM system might be capturing metadata too - but for comfort and safety, Records Managers are always going to want a File Plan.</p>
<p><a href="http://technet2.microsoft.com/Office/en-us/library/037fb582-6448-4baf-85d4-6e6221f216551033.mspx?mfr=true">SharePoint&#8217;s record management doesn&#8217;t provide that</a>. Sure, you can route content types to a particular library, and then place the files into automatically created folders, but that&#8217;s not really the same. And document libraries are awkward given the depth some File Plans go to. Given the idea that you&#8217;ll use search to find documents in your records repository, the position of the files in a hierarchy isn&#8217;t so important. And using search is, I think, a more realistic approach for a system with <em>lots</em> of records. But it means changing your approach to RM, it requires trust, and Records Managers are a naturally conservative bunch.</p>
<p>And that&#8217;s why I think although the technology is fine - fulfills the technical requirements and is probably more scalable - I don&#8217;t think it&#8217;ll catch on very easily. At least, not in UK Government. It&#8217;s a tough sell because it&#8217;s different, and isn&#8217;t as comfortable as simpler solutions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/08/why-sharepoint-records-management-will-struggle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Setting up an Email Server</title>
		<link>http://www.novolocus.com/2008/01/08/setting-up-an-email-server/</link>
		<comments>http://www.novolocus.com/2008/01/08/setting-up-an-email-server/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 09:44:52 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Coding]]></category>

		<category><![CDATA[Web Servers]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/08/setting-up-an-email-server/</guid>
		<description><![CDATA[A short, useful article about setting a machine up as a mail server - this proved useful when I was setting up a machine for a demo recently. I must confess, I&#8217;ve never set up a mail server before, but it was quite simple, apart from the problems I had with finding the right Windows [...]]]></description>
			<content:encoded><![CDATA[<p>A short, useful article about <a href="http://www.ilopia.com/Articles/WindowsServer2003/EmailServer.aspx">setting a machine up as a mail server</a> - this proved useful when I was setting up a machine for a demo recently. I must confess, I&#8217;ve never set up a mail server before, but it was quite simple, apart from the problems I had with finding the right Windows Server installation disc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/08/setting-up-an-email-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;Error occurred adding the feature to the farm&#8221; when deploying K2 workflow</title>
		<link>http://www.novolocus.com/2008/01/07/error-occurred-adding-the-feature-to-the-farm-when-deploying-k2-workflow/</link>
		<comments>http://www.novolocus.com/2008/01/07/error-occurred-adding-the-feature-to-the-farm-when-deploying-k2-workflow/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 17:34:17 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[K2]]></category>

		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/07/error-occurred-adding-the-feature-to-the-farm-when-deploying-k2-workflow/</guid>
		<description><![CDATA[This problem proved a real puzzler for me - but the guys on the K2 underground came through with a good answer - the Application Pool Identity of the Moss Site Collection must be part of the Farm Administrators group. (Which makes sense when you think about it. The K2 web services are running under [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://k2underground.com/forums/20936/ShowThread.aspx#20936">This problem</a> proved a real puzzler for me - but the guys on the <a href="http://k2underground.com/forums/default.aspx">K2 underground</a> came through with a good answer - the Application Pool Identity of the Moss Site Collection must be part of the Farm Administrators group.<em> (Which makes sense when you think about it. The K2 web services are running under the App pool identity of the site collection, and they&#8217;re trying to deploy features to the farm&#8230;)</em></p>
<p>Unfortunately, I then suffered a second problem - and error of &#8216;Value cannot be null&#8217; when trying to deploy a workflow associated with a SharePoint Content Type. Sadly, all this was worked on last minute just before Christmas, so I&#8217;ve forgotten a lot of what I did to my machine. I met with some of the guys from K2 who were very helpful, and we did quite a lot. My memories are:</p>
<ul>
<li>Installed SP1 for [blackpearl]</li>
<li>Installed Office 2007 <em>(I was in a hurry and forgot, okay?)</em></li>
<li>Stopped trying to associate the workflow with a content type and instead associated it with a specific list - which worked for the demo, but associating with the content type is a far, far cooler idea.</li>
<li>Changed my form to <a href="http://k2underground.com/forums/thread/19309.aspx">allow &#8220;Cross-Domain Access for User Form Templates&#8221;</a> and changed the <a href="http://k2underground.com/forums/thread/19309.aspx">data connection timeouts in SharePoint to be longer</a> - as several of the guys in the thread noted, this does seem to be an issue with K2 workflows in VMs - but then my 2GB RAM machine was running a VM with MOSS, SQL2005, K2 and a DC, SMTP and POP services on it.</li>
<li>Gave more rights to K2 to some of the users. I had to give the App pool more permissions than I had, in order to allow it to display worklists, which also makes sense.</li>
<li>Sorted out a misconfiguration in IIS.</li>
</ul>
<p>I&#8217;m sure I&#8217;ve missed other things, but it was so long ago now, I can&#8217;t quite remember. The only other thing I can remember doing was sitting around <em>a lot</em> waiting for everthing to work. The applications were quick enough when they&#8217;d been compiled, but that meant that the first time I hit some of the pages, well, there was a lot of waiting. And errors from timeouts. Particularly we had problems with contacting SQL Reporting Services from some of the K2 wizards, but found that if you waited a moment or two and then tried again then they were okay.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/07/error-occurred-adding-the-feature-to-the-farm-when-deploying-k2-workflow/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Uploading Files to SharePoint using the Web Services</title>
		<link>http://www.novolocus.com/2008/01/07/uploading-files-to-sharepoint-using-the-web-services/</link>
		<comments>http://www.novolocus.com/2008/01/07/uploading-files-to-sharepoint-using-the-web-services/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 15:20:06 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.novolocus.com/2008/01/07/uploading-files-to-sharepoint-using-the-web-services/</guid>
		<description><![CDATA[Thankfully, someone seems to have looked at other ways of uploading files via the web services - this time using a direct PUT command. That is an approach which is a little odd, to be honest, and I suppose not really Web Services so much as plain old web-server. Still, I&#8217;m going to have a [...]]]></description>
			<content:encoded><![CDATA[<p>Thankfully, someone seems to have looked at <a href="http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html">other ways of uploading</a> <a href="http://geek.hubkey.com/2007_11_01_archive.html">files via the web services</a> - this time using a direct PUT command. That is an approach which is a little odd, to be honest, and I suppose not really Web Services so much as plain old web-server. Still, I&#8217;m going to have a look at this approach - and it&#8217;d be great if it works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.novolocus.com/2008/01/07/uploading-files-to-sharepoint-using-the-web-services/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
