<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/1.5.1.3" -->
<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/"
>

<channel>
	<title>Oliver Sturm's weblog</title>
	<link>http://www.sturmnet.org/blog</link>
	<description>General musings and programming stuff</description>
	<pubDate>Mon, 07 Jul 2008 15:40:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5.1.3</generator>
	<language>en</language>

		<item>
		<title>Feedback on my NxtGenUG Fest 08 session - Handling data in F#</title>
		<link>http://www.sturmnet.org/blog/archives/2008/07/07/feedback-on-my-nxtgenug-fest-08-session-handling-data-in-f/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/07/07/feedback-on-my-nxtgenug-fest-08-session-handling-data-in-f/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 15:40:15 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/07/07/feedback-on-my-nxtgenug-fest-08-session-handling-data-in-f/</guid>
		<description><![CDATA[	It occurred to me today to look at the feedback that a lot of you have left for the session I did at the NxtGenUG Fest 08 event a few weeks ago. Thanks to everybody who did so, it&#8217;s always appreciated!
	Now, there are a few points I&#8217;d like to comment on - feedback as usual [...]]]></description>
			<content:encoded><![CDATA[	<p>It occurred to me today to look at the feedback that a lot of you have left for the session I did at the NxtGenUG Fest 08 event a few weeks ago. Thanks to everybody who did so, it&#8217;s always appreciated!</p>
	<p>Now, there are a few points I&#8217;d like to comment on - feedback as usual was varied, the overall average not too high&#8230; but that&#8217;s to be expected, especially with a topic like that in the context of the day.</p>
	<p>To the 21 people who left an 8 or 9 rating - thanks! There&#8217;s not much to say about this since comments were very positive.</p>
	<p>The comments on the 7s are a bit more interesting - some of them are still positive, some others are more critical. In order of appearance in the list.</p>
	<p><em>&gt; Second time in a row Oliver has overrun and not covered everything on his agenda, the same happened last year with his WPF session. He needs to work on his timings.</em></p>
	<p>Hm&#8230; well, I don&#8217;t agree. Perhaps I should post about this in general, because apparently my point of view in this regard isn&#8217;t well understood - I get comments about this all the time. In a nutshell, my sessions typically include content that most likely I&#8217;m not going to have time to present. The reason it&#8217;s in there (in the form of slides and/or samples) is because I found it interesting during the research phase of session preparation and I&#8217;m thinking it might be interesting to the people who download my slides and samples after the presentation. It might also come in handy when I deliver the presentation again, with a slightly different target time (this varies a lot from event to event - everything between 55 and 90 minutes for a session slot is quite common). If I remember, I try to explain this in most sessions - I don&#8217;t remember whether I did this time or not.</p>
	<p>Of course there are also considerations specific to the event in question. For starters, Dave insisted when he talked to me that I submit something entirely new, not something that was previously done elsewhere. Looking at the presentations I saw on the day, I have my doubts whether everybody adhered to that rule, but I did - as a result, this was a first run for the presentation, and these will always be a bit less perfect on timing than subsequent runs, no matter how well prepared somebody is. </p>
	<p>Finally, of course, I didn&#8217;t run over - I simply adjusted the session content to fit the time frame and left out a few minor bits at the end because time didn&#8217;t allow for them. If you don&#8217;t like it, my apologies - these bits and bobs are out there in the wide world whether you like it or not. As it is, they are included in the slide deck, and it seems you&#8217;re saying I should have left them out. Go figure.</p>
	<p><em>&gt; I think the session would have benefited from getting onto the code samples sooner.     <br />&gt; Whetted our apetites, but didn&#8217;t make time to cover the more exciting parts.      <br />&gt; Super fast, but I enjoyed having an introduction to this.      <br />&gt; I thought drilled too quickly into the code examples.</em></p>
	<p>Yeah well&#8230; what are you going to do in 60 minutes, when 90% of the audience are on the &quot;F-what?&quot; level to begin with? And as you can see, this is a subject that splits any audience&#8230;</p>
	<p><em>&gt; There was no sense of where this language&#8217;s niche was.</em></p>
	<p>Fair enough - I can&#8217;t tell you though. Still waiting on the MS niche definition committee to finish its work. In the meantime, just listen, get up to speed if it sounds interesting, and make up your own mind.</p>
	<p><em>&gt; In places I felt that the presentation and samples could have been tightened up a bit. Removing a bit of waffle.</em></p>
	<p>Interesting to hear that - I don&#8217;t think the majority would agree that there could have been much more in it though.</p>
	<p><em>&gt; Oliver picked an interesting subject, but could really have benefitted from giving a concrete reason for using this language - the benefits of functional languages over imperative perhaps? As it was: interesting but ultimately not useful for everyday coding</em></p>
	<p>I was leaving that part open to your own imagination at this point. I think I did mention areas in which people are currently using F#, and of course general internet content about functional programming will bring up a lot of ideas. Anyway, I think you got the right impression - for the majority of developers, F# is probably not an everyday programming language today, and who knows if it will ever be.</p>
	<p><em>&gt; &#8230; I was left wondering why I would choose to use it for data access over c#</em></p>
	<p>I wasn&#8217;t saying you would. Some of the techniques I showed were from the functional part of the programming world, but that doesn&#8217;t mean you can only use them in F# either. In general the session was supposed to be an introduction to the language and some of the more obscure (from the typical .NET programmer&#8217;s point of view) practices, as well as to point out that F# is a .NET language after all and a lot of the standard technology can be used just as easily as it can from C#.</p>
	<p><em>&gt; Interesting stuff&#8230; though more of an introduction to F# than handling data!</em></p>
	<p>Yes, that&#8217;s what it turned out to be. Or at least it was half and half, I guess&#8230; the NxtGenUG guys always ask for bleeding edge technology and their event focus was where the data handling part came from. On second thought, it turned out that the necessary basics took up a bit too much room in this presentation. Will have to ask for a double slot next time, to do a separate introduction and the data handling thing in its whole glory <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
	<p><em>&gt; I liked the happy go lucky presentation style</em></p>
	<p>Eh? <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
	<p><em>&gt; &#8230; it was too left field for a mainstream session &#8230;.</em></p>
	<p>I agree. It wasn&#8217;t supposed to be a mainstream session. The way I&#8217;ve always understood it, the NxtGenUG Fest isn&#8217;t supposed to be a mainstream event.</p>
	<p><em>&gt; personally I dont and neither did anyone around me have any real interest in F#</em></p>
	<p>Out of the other 52 who left feedback, around 48 did though.</p>
	<p><em>&gt; Really not sure</em></p>
	<p>I think the answer is 42. <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/07/07/feedback-on-my-nxtgenug-fest-08-session-handling-data-in-f/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Remapping Command keys to Ctrl in VMWare</title>
		<link>http://www.sturmnet.org/blog/archives/2008/07/01/remapping-command-keys-to-ctrl-in-vmware/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/07/01/remapping-command-keys-to-ctrl-in-vmware/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 17:19:01 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
	<category>Mac</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/07/01/remapping-command-keys-to-ctrl-in-vmware/</guid>
		<description><![CDATA[	On the Mac itself, I have remapped the caps lock key (does anybody actually use that thing these days?) to Command (that&#8217;s the key with the weird symbol&#8230; ah well, one of the keys with weird symbols &#60;g&#62;) . I had always done the same thing on Windows, where it required registry changes, so I [...]]]></description>
			<content:encoded><![CDATA[	<p>On the Mac itself, I have remapped the caps lock key (does anybody actually use that thing these days?) to Command (that&#8217;s the key with the weird symbol&#8230; ah well, one of the keys with weird symbols &lt;g&gt;) . I had always done the same thing on Windows, where it required registry changes, so I was positively surprised to find that on the Mac it&#8217;s just a system preferences option&#8230; Microsoft, here&#8217;s how you do that kind of thing:</p>
	<p>
<img src="http://www.sturmnet.org/wp-images/200807011814.jpg" width="417" height="279" alt="200807011814.jpg" /></p>
	<p>Now, while I&#8217;ve found it useful on the Mac to have the Command key easily accessible (although Ctrl is still used in too many places, like terminals and things&#8230; gotta find a solution to that), that key is recognized as a Windows key in VMWare. So I changed one of the registry trickery files so that the Windows keys get remapped to Ctrl for use in Windows. Works like a charm. Here&#8217;s what the content of that .reg file looks like:</p>
	<fieldset><pre>
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,5B,E0,1d,00,5C,E0,00,00,00,00
</pre></fieldset>
	<p>Hope it helps somebody!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/07/01/remapping-command-keys-to-ctrl-in-vmware/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Blogging from my new MacBook</title>
		<link>http://www.sturmnet.org/blog/archives/2008/06/14/blogging-from-my-new-macbook/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/06/14/blogging-from-my-new-macbook/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 22:59:23 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
	<category>Mac</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/06/14/blogging-from-my-new-macbook/</guid>
		<description><![CDATA[	Would you believe it, I got a MacBook recently. It&#8217;s fantastic, there&#8217;s no other way to describe it. OS X is amazing, Windows apps seem to run faster in VMWare Fusion than they do on native Windows, and the applications are just&#8230; well, can&#8217;t find any more superlatives. Holy cow!
	I&#8217;ll certainly post more about this [...]]]></description>
			<content:encoded><![CDATA[	<p>Would you believe it, I got a MacBook recently. It&#8217;s fantastic, there&#8217;s no other way to describe it. OS X is amazing, Windows apps seem to run faster in VMWare Fusion than they do on native Windows, and the applications are just&#8230; well, can&#8217;t find any more superlatives. Holy cow!</p>
	<p>I&#8217;ll certainly post more about this in the future. I&#8217;m not planning on abandoning Windows, or .NET, or anything like that - on the contrary, I want to see what other platforms have to offer these days, be it for competition or compatibility. Mono is supposed to be able to run most Windows Forms apps these days, I hear&#8230; now I only need some time <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
	<p>If you haven&#8217;t had a look at the Mac since they started building Intel based machines, go do so as soon as you can. You are really missing out.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/06/14/blogging-from-my-new-macbook/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>TechEd done, NxtGenUG FEST 08 is next</title>
		<link>http://www.sturmnet.org/blog/archives/2008/06/08/teched-done-nxtgenug-fest-08-is-next/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/06/08/teched-done-nxtgenug-fest-08-is-next/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 16:16:17 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/06/08/teched-done-nxtgenug-fest-08-is-next/</guid>
		<description><![CDATA[	I&#8217;m still in Orlando now, but later today I&#8217;ll be on a refreshing (?) flight back to the UK. TechEd was very good &#8212; lots of people very interested in DX products, we won loads of awards and had a good laugh about the Telerik guys  
	Later this week I&#8217;ll be in Reading for [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;m still in Orlando now, but later today I&#8217;ll be on a refreshing (?) flight back to the UK. TechEd was very good &#8212; lots of people very interested in DX products, we won loads of awards and had a good laugh about the Telerik guys <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
	<p>Later this week I&#8217;ll be in Reading for the NxtGenUG FEST 08 event on June 12th. Hate to state the obvious, but it&#8217;s the 2008 incarnation of their yearly FEST event. A day of great speakers and sessions, the usual (well, usual for NxtGenUG standards &#8212; if your&#8217;e not familiar with it, be prepared to be amazed) assortment of swag, pizza and so on&#8230; It costs a bit of money for non-members of NxtGenUG, but it&#8217;s still quite a bargain at 49.99, and of course it&#8217;s free for members. <a href="http://www.nxtgenug.net/fest08/">Sign up is here</a>, and there&#8217;s a G(r)eek dinner the night before. Originally it was planned to send Daniel Moth off to the states, but now I hear he can&#8217;t make it to the dinner&#8230; anyway, if you happen to be in Reading on the night of the 11th, <a href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=140">sign up here</a> and join us for the geek dinner!</p>
	<p>Right, that&#8217;s it &#8212; I have some sessions to prepare&#8230;</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/06/08/teched-done-nxtgenug-fest-08-is-next/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>BA Executive Club? Ridiculous.</title>
		<link>http://www.sturmnet.org/blog/archives/2008/05/21/ba-executive-club-ridiculous/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/05/21/ba-executive-club-ridiculous/#comments</comments>
		<pubDate>Wed, 21 May 2008 18:23:45 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/05/21/ba-executive-club-ridiculous/</guid>
		<description><![CDATA[	I&#8217;ve had a BA Executive Club account for about 18 months. During that time I must have been on perhaps 15 BA flights - some UK domestic, some within Europe, some to the US. For quite a while I&#8217;ve also had a BA-sponsored American Express card, which pays miles into my Executive Club account. I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve had a BA Executive Club account for about 18 months. During that time I must have been on perhaps 15 BA flights - some UK domestic, some within Europe, some to the US. For quite a while I&#8217;ve also had a BA-sponsored American Express card, which pays miles into my Executive Club account. I&#8217;m not flying on BA all the time, because I find that pretty hard to do - basically I wouldn&#8217;t pay extra to fly with a particular airline, and usually it&#8217;s hard enough to find flights that go to the right place at the right time anyway. Overall I certainly fly more than most people I know. I&#8217;ve collected roughly 30000 miles up to now - is that much? I don&#8217;t know.</p>
	<p>Today I thought I&#8217;d look into something that I&#8217;ve never looked into before: see whether it makes sense to upgrade a flight with those miles. I&#8217;d tried before to use the online function to do that, but every time I&#8217;d been told there was some sort of problem and I should contact my &quot;booking agent&quot;. Flight booked online, sometimes even through BA directly, so wtf is that about the booking agent? Why no proper information about what the problem is? Hm&#8230;</p>
	<p>So I took the time to call them and spend 20 minutes in a phone queue. Of course it was the wrong phone queue - even though I&#8217;d taken the number from that online error page, there&#8217;s a different, Executive Club specific number I should be using. Okay, got transferred. Other girl, same problem, transferring me elsewhere again. Finally somebody who knows what to do, he looks at my booking and goes &quot;well, that&#8217;s not the right kind of ticket&quot;. What? Kind of ticket? &quot;Yes, you should have a &#8216;flexible&#8217; ticket so you can change it later. When booking online, there&#8217;s a choice between a cheap and a flexible ticket.&quot; Ah, how stupid of me.</p>
	<p>I ask the guy if I could theoretically get anything useful for my 30000 miles on my flight to Orlando and it turns out that 25000 miles will buy me an upgrade to World Traveller Plus. Wow! Hallelujah! Just 18 months of careful airline selection and already can I afford 10 additional centimetres of leg room! So he goes, &quot;I&#8217;m going to call our sales guys and ask them what the upgrade to a flexible ticket would cost for the trip.&quot; Comes back, and it turns out that upgrade costs about 420 quid. I say hey, that&#8217;s a bit expensive, isn&#8217;t it and he replies &quot;no, and that&#8217;s just for one leg of the trip because &lt;weird stuff here&gt; - you can&#8217;t get the upgrade on the way back, but for the one leg it&#8217;s just 12500 miles&quot;.</p>
	<p>Phew. That&#8217;s it, is it? Pay around 3 times the price for the London-Orlando leg of the trip to get a flexible ticket, and then 12500 miles to upgrade to the next, almost identical, class of travel. Frickin&#8217; unbelievable.</p>
	<p>Now, people tell me there&#8217;s more to frequent flyer programs - for instance, when you fly enough within one year, you get into a higher class and then you get all sorts of benefits like 150% miles on the mile (What&#8217;s the idea with &quot;miles&quot; anyway? The miles I get credited don&#8217;t have any similarity to the distance between the start and end of my flight.) and free upgrades to higher classes. Well, BA do 125% and 150% miles, yes. <a href="https://www.britishairways.com/travel/ecbenftcompare/execclub/_gf/en_gb">Other benefits available here</a> (or probably not, because you have to be a privileged person with your own login in order to see this). But as far as I can tell they never give me any free upgrades, whatever I do. And most importantly, to be a better Executive Club member than I am today, I need to collect Tier Points. Now wtf are Tier Points suddenly? Check my account - I have ZERO of them. I need another 600 and 4 qualifying flights to get to Silver membership. Hm&#8230; </p>
	<p>Looking around, I see where to get Tier Points from. Obviously I don&#8217;t get them from the kinds of flights I always use, otherwise I&#8217;d have some. But <a href="https://www.britishairways.com/travel/ecjoinqualifying/execclub/_gf/en_gb">there&#8217;s a wild list</a> stating that depending on the class and area I fly in there are 20 different fare classes (yes, really!) and all of them collect Tier Points (no further details). For some reason apparently I manage to travel outside these classes all the time - no info on that either. </p>
	<p>Now how to figure out what fare class a ticket is in? Oh, easy: look at your boarding card. Yes, that card you get at the airport to carry around for an hour. And yes, the info is on that part of the card that gets ripped off and taken away from you when you board your plane. If you have some form of printed ticket that nobody uses anymore these days, it might also be on there. E-Tickets? Nah, not on there. Well, go figure.</p>
	<p>Eat shit, Executive Club.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/05/21/ba-executive-club-ridiculous/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>F# compiler considered too linear</title>
		<link>http://www.sturmnet.org/blog/archives/2008/05/20/f-compiler-considered-too-linear/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/05/20/f-compiler-considered-too-linear/#comments</comments>
		<pubDate>Tue, 20 May 2008 18:33:45 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/05/20/f-compiler-considered-too-linear/</guid>
		<description><![CDATA[	In my continuing efforts to make XPO work fully with F#, I found the next problem to deal with: the extremely linear way of thinking of the F# compiler.
	Basically, the compiler seems to read each source code file from top to bottom. Generally, things that are defined below the current line can&#8217;t be referred to [...]]]></description>
			<content:encoded><![CDATA[	<p>In my continuing efforts to make <a href="http://www.devexpress.com/xpo">XPO</a> work fully with F#, I found the next problem to deal with: the extremely linear way of thinking of the F# compiler.</p>
	<p>Basically, the compiler seems to read each source code file from top to bottom. Generally, things that are defined below the current line can&#8217;t be referred to in the current line. Apart from the order of lines in source code files, the order of source code files in the project is equally important, since the compiler handles them in precisely that order.&#160; </p>
	<p><em>Hint for Visual Studio users: While the order of source code files in the project is represented correctly in the Visual Studio Solution Explorer, it can&#8217;t be changed from there. Instead, it is necessary to edit the project file and swap source code files around manually. Right-click the project in Visual Studio and select &quot;Unload Project&quot; from the context menu. Right-click the project again and select &quot;Edit &lt;projectname&gt;.fsharpp&quot;. When you&#8217;re done making your changes, use the context menu a third time to select &quot;Reload Project&quot;. You will see that the order of files in Solution Explorer has changed according to the changes you made in the project file.</em></p>
	<p>In some schools of though on programming, this linear view of things might seem quite normal, but in .NET it is not. In main-stream .NET programming, it was widely regarded a great innovation when C# took care of the old problems that C and C++ had in that regard (no more header files!!!). Pascal wasn&#8217;t any better, and many other languages - most of them had some sort of &quot;pre-declaration&quot; feature that had to be used when, for instance, a reference to a certain type needed to be created before the type itself was declared. Nothing like that in C# &#8212; the compiler looks at all the types and namespaces declared somewhere in my current project and figures things out for me. Great, that&#8217;s how it should be.</p>
	<p>In all fairness, in F# there&#8217;s at least one very obvious reason why the compiler takes that linear approach: type augmentations. They basically mean that depending on the position in code, a class might have a certain member or not. If you&#8217;re not familiar with the feature, look at this example:</p>
	<fieldset><pre>type MyClass() =
    let answer = 42
	
let mc1 = new MyClass()
	
// At this point Output can't be found on mc1
//mc1.Output()
	
let output x = printfn &quot;%d&quot; x
	
type MyClass with
    member x.Output() = output 52
	
let mc2 = new MyClass()
mc2.Output()
	
// Now Output is part of MyClass, so I can even call
// it on my &quot;old&quot; instance
mc1.Output()</pre></fieldset>
	<p></p>
	<div class="important">
<p>Before I get to my particular use case &#8212; just generally speaking, <strong>the ordering requirements</strong> introduced by linear compiling <strong>seem like a great and quite unnecessary hassle in the vast majority of cases</strong>. F# has a very strong type inference system, because it is deemed to be unnecessary for the developer to mark all types explicitly in order to implement strong typing. In the same way, <strong>the compiler could automatically find types and namespaces in my current project regardless of their location, and it could detect those cases where types change through augmentation</strong>.</p>
</div>
	<p>The particular case I&#8217;m dealing with is that of persistent business class hierarchies. These hierarchies are typically interrelated to the point where one or more networks of classes are formed. As an example, consider modelling a hospital. You&#8217;d have a whole bunch of different types of people to store, so you&#8217;d have classes for People and Addresses, Employees, which might be Nurses, Doctors and cleaning and housekeeping personnel, Patients with relationships to the Nurses and Doctors, Rooms, Floors and OperatingTheatres which are assigned to Doctors or Teams of Doctors. Visitors, CarParks, the whole Accounting and Booking business&#8230; the list is endless. It is quite clear that many of these types have references to many other types, and typically a one-to-many relationship is modelled with a collection property on one end and a simple reference on the other end, so as soon as there&#8217;s a relationship there, it will result in two classes interrelating.</p>
	<p>Sure, not all classes interrelate, so it might be possible, taking a lot of time and great care, to separate the classes into groups that are hopelessly tangled, but have only unidirectional references outside the group. Of course it might make sense in the example above for almost all classes to have a reference to the Hospital type, since that is important if there&#8217;s ever more than one hospital being handled at once. There might be other such &quot;special&quot;, high-level objects that make the grouping approach really complicated. In any case the task of sorting the classes into such groups is extremely tedious and the grouping breaks easily, as soon as any class is changed to include or exclude a property that refers to another class. You might wonder why I&#8217;m going on about the grouping thing at all &#8212; well, read on, that&#8217;s what F# wants me to do.</p>
	<p>Have I mentioned that persistent business class hierarchies can be large? Apart from having private fields and public members for each and every piece of data that is associated with the various entities, the classes will typically also contain certain parts of business logic functionality. Depending on the architectural approach that is used, validation logic might live in these classes, as well as a lot of the state handling that many entities need. To mention some numbers, a C# project I&#8217;ve worked on myself &#8212; really just a medium size application &#8212; has 75 persistent classes and a total of 11263 lines of code in these classes.</p>
	<div class="important">
<p>Now, why am I going on about these interrelated networks of classes? Quite simple: because <strong>F# requires me to declare all interrelated classes in one block of code!</strong> Yes, that&#8217;s right. <strong>I can&#8217;t put some of the classes into other files. I can&#8217;t put them in different namespaces.</strong> The only valid syntax to declare interrelated classes in F# is this:</p>
</div>
	<fieldset><pre>type ClassA() =
    let foo = new ClassB()
	
and
 ClassB() =
    let foo = new ClassA()</pre></fieldset>
	<p>As you can see, this uses the <strong>&quot;and&quot; keyword</strong> to concatenate the two type declarations. This doesn&#8217;t hold true for classes only, but for all types. One of my first thoughts about this was that it shouldn&#8217;t be that much of a problem if my application made use of lots of interfaces and dependency injection throughout to remove the need for direct references from one class to another. But in the end this approach only shifts the problem to the interfaces - at a rough count, that class hierarchy from my old project would require me to declare 75 interfaces with 520 properties and around 300 other members. For those declarations, the problem is still the same, and while the volume may be smaller, it&#8217;s still significant. Plus, of course, it requires my application architecture to work in a very specific way, I need to create all those interfaces for no real reason whatsoever, &#8230; doesn&#8217;t sound like a very good idea.</p>
	<p>In the end I don&#8217;t think that this problem is entirely particular to my use case. In other class hierarchies, dependencies might typically be somewhat more linear than they are in those hierarchies I&#8217;ve described, but interrelations are still rather common. So here are the important points I want to make:</p>
	<div class="important">
	<ol>
	<li>For this particular use case, <strong>we need a change that allows us to declare interrelated classes separately</strong>. There&#8217;s a very similar problem for namespaces - perhaps not quite as severe, but that&#8217;s just because there aren&#8217;t going to be as many namespaces as there are classes. To solve these issues, I guess a &quot;pre-declaration&quot; feature like I described above could do the job (perhaps as an attribute), but what we really need is &#8230; see (2). </li>
	<li><strong>The F# compiler should handle all type resolution matters automatically, independent of declaration order</strong>, apart from those cases where order is important due to type augmentation. It is my belief that the compiler could detect such &quot;significant-order&quot; cases automatically, so there shouldn&#8217;t be a need for any new keywords or decorations to make this work. <strong>This intelligent implementation is what I expect from a language compiler in the year 2008</strong>, and with the ambitions F# has as a multi-paradigm language, we should expect no less. </li>
	</ol>
	</div>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/05/20/f-compiler-considered-too-linear/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Null values for F# classes</title>
		<link>http://www.sturmnet.org/blog/archives/2008/05/19/null-values-for-f-classes/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/05/19/null-values-for-f-classes/#comments</comments>
		<pubDate>Mon, 19 May 2008 22:34:12 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/05/19/null-values-for-f-classes/</guid>
		<description><![CDATA[	The next problem I found in my efforts to make XPO work with F# is documented here: Null values for F# classes - basically, I can&#8217;t just set a variable that has a reference to another object to null in F#.
	The general assumption in F# is that null values are a threat and so the [...]]]></description>
			<content:encoded><![CDATA[	<p>The next problem I found in my efforts to make XPO work with F# is documented here: <a href="http://cs.hubfs.net/forums/5957/ShowThread.aspx#5957">Null values for F# classes</a> - basically, I can&#8217;t just set a variable that has a reference to another object to null in F#.</p>
	<p>The general assumption in F# is that null values are a threat and so the languages discourages their use. I totally see the point and if all I wanted to do was create classes (or perhaps not even those) for use in F# itself, I wouldn&#8217;t have a problem with it - but interop is an important thing for F#, as I see it, and all the rest of the .NET world makes elaborate use of null values. Null values are the (rather more dangerous) alternative to F# Options to most .NET developers - exactly the same purpose, just a less elegant implementation.</p>
	<p>I haven&#8217;t given up on <a href="http://www.hubfs.net">the Hub</a> yet, although I have to say I haven&#8217;t received any useful replies from there yet&#8230; and the people who do reply are rather those that like to write forum posts than those who really know what they&#8217;re talking about <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Anyway, perhaps I&#8217;ll get lucky with a blog post again - <a href="http://lorgonblog.spaces.live.com/">Brian</a>, are you still reading? <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
	<p><strong>UPDATE:</strong> I found the solution to this problem in <a href="http://blogs.msdn.com/dsyme/archive/2008/05/02/full-release-notes-for-f-1-9-4.aspx">the release notes for F# 1.9.4</a>: use the Unchecked.defaultof&lt;T&gt; function. I guess that&#8217;s the new functionality that was referred to earlier. Great!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/05/19/null-values-for-f-classes/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>gentoo/Shorewall/DISABLE_IPV6</title>
		<link>http://www.sturmnet.org/blog/archives/2008/05/18/gentooshorewalldisable_ipv6/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/05/18/gentooshorewalldisable_ipv6/#comments</comments>
		<pubDate>Sun, 18 May 2008 13:07:14 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/05/18/gentooshorewalldisable_ipv6/</guid>
		<description><![CDATA[	Something I just stumbled upon. I was configuring Shorewall 4, and there&#8217;s a flag called DISABLE_IPV6 in shorewall.conf. Oh yeah, I thought, that makes sense - I don&#8217;t yes IPV6, so I&#8217;ll set that to Yes. Did so, and when I ran Shorewall it showed my lots of error messages like this:
	FATAL: Module ip6_tables not [...]]]></description>
			<content:encoded><![CDATA[	<p>Something I just stumbled upon. I was configuring Shorewall 4, and there&#8217;s a flag called DISABLE_IPV6 in shorewall.conf. Oh yeah, I thought, that makes sense - I don&#8217;t yes IPV6, so I&#8217;ll set that to Yes. Did so, and when I ran Shorewall it showed my lots of error messages like this:</p>
	<fieldset><pre>FATAL: Module ip6_tables not found.
ip6tables v1.3.8: can't initialize ip6tables table `filter': iptables who? (do you need to insmod?)
Perhaps ip6tables or your kernel needs to be upgraded.</pre></fieldset>
	<p>Well, I don&#8217;t have ip6_tables compiled, which is just the reason I liked that flag when I saw it. Read the source, and I found that the flag doesn&#8217;t mean &quot;don&#8217;t use IPV6&quot;, but rather it means &quot;use ip6tables to take some special action to disable IPV6&quot;. Well.</p>
	<p>I searched for the piece of documentation I was missing (because I wasn&#8217;t assuming there&#8217;d be anything to misinterpret about the meaning of that flag), but I still can&#8217;t find anything&#8230; apart from <a href="http://forums.vpslink.com/showthread.php?p=12330">this forum post</a> where somebody states &quot;&#8230; <em>this is because in a perversely twisted form of logic the configuration file requires you to have IPV6 support to be able to disable it</em> &#8230;&quot; Well put.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/05/18/gentooshorewalldisable_ipv6/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Oddities in F#/C# interaction</title>
		<link>http://www.sturmnet.org/blog/archives/2008/05/16/oddities-in-fc-interaction/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/05/16/oddities-in-fc-interaction/#comments</comments>
		<pubDate>Fri, 16 May 2008 23:29:19 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/05/16/oddities-in-fc-interaction/</guid>
		<description><![CDATA[	I have been working on getting a sample for using XPO from F#. My first sample was easily created back in January this year:
	
#light
open DevExpress.Xpo
type Person = class
  inherit XPObject as base
  public new(session : Session) = { inherit XPObject(session);
    name = string.Empty
  }
	
  val mutable private name [...]]]></description>
			<content:encoded><![CDATA[	<p>I have been working on getting a sample for using <a href="http://www.devexpress.com/xpo">XPO</a> from F#. My first sample was easily created back in January this year:</p>
	<fieldset><pre>
#light
open DevExpress.Xpo
type Person = class
  inherit XPObject as base
  public new(session : Session) = { inherit XPObject(session);
    name = string.Empty
  }
	
  val mutable private name : string
	
  member public x.Name
    with get() = x.name
    and set(v) = x.name &lt;- v
end
	
let person = new Person(XpoDefault.Session)
person.Name &lt;- &quot;Wally&quot;
person.Save()
</pre></fieldset>
	<p>This works just fine - great. Now I wanted to create a slightly more evolved sample using more of the standard XPO features, and use that to develop some best practices. I also had the idea to create some <a href="http://www.devexpress.com/coderush">CodeRush</a> templates similar to those we have for C# and VB.</p>
	<p>All this turned out much more complicated than I thought, for a variety of different reasons. The first issue I stumbled upon was that <a href="http://cs.hubfs.net/forums/thread/5919.aspx">I can&#8217;t call our standard helper method SetPropertyValue correctly from F#</a>. It looks like a bug to me, since I did a lot of very similar tests, and only with the precise combination of parameters and return type that this method has does the F# call to it fail. If it&#8217;s confirmed to be a bug, it&#8217;ll get fixed - but so far I haven&#8217;t heard anything, and I want a workable solution now. </p>
	<p>I started working on one - see below -, but first I had to decide which type of mutable fields I was going to use for my persistent classes. F# allows class fields to be declared &quot;mutable&quot;, which means they can be changed (if this sounds like an ordinary thing to you, I recommend you read up on your functional programming theory &lt;g&gt;). It also allows to declare values as &quot;ref cells&quot;, which wraps the actual values in an additional class internally.</p>
	<p>Our standard SetPropertyValue method uses a &quot;ref&quot; parameter in its C# implementation. Of course that method isn&#8217;t working anyway, so I was considering writing my own helper method for the time being. C# ref parameters are not something F# deals with extremely gracefully in my opinion, the main reasons for which are probably that changeable values are not foremost in peoples&#8217; minds in that language, and there&#8217;s support for multiple return values using tuples, so the use cases from ref parameters are much reduced anyway. The only way (afaik - <a href="http://cs.hubfs.net/forums/thread/5921.aspx">a topic I&#8217;m still a little unsure about</a>) that F# ever passes a parameter by reference is if the value I&#8217;m using is a ref cell in F#.</p>
	<p>The problem with using multiple return values instead of the by-reference type method, whether we&#8217;re talking about the standard helper method or a new one, is that it changes the requirements of the syntax at the call site. Optimally, I would like the helper API to be very easy to use. I also want to perform change notification from within the helper method. Using multiple return values, the pattern could look like this:</p>
	<fieldset><pre>
let setValue oldVal newVal =
    ((oldVal &lt;&gt; newVal), newVal)
let testSetValue1 newVal =
    let mutable testval = 10
    // This is the line I'd need in my property setters
    match (setValue testval newVal) with | true, __n -&gt; testval &lt;- __n | _ -&gt; ()
	
    printfn &quot;testval: %d&quot; testval
	
testSetValue1 10
testSetValue1 42
</pre></fieldset>
	<p>There are several things wrong with this. First, the line I need to use in each property setter is rather complicated. I&#8217;d integrate it in a template, but there are people who don&#8217;t use templates, and anyway it just looks wrong to reproduce that sort of thing in every single property. Second, the naming of the helper function is really no longer correct - it doesn&#8217;t actually set the value of the property anymore, it just finds out whether setting the value is required at all. Of course if that&#8217;s all I want to do, I should change the function&#8217;s name and I don&#8217;t need multiple return values after all&#8230; the real problem is that the actual setting of the value happens in the property setter code. And that brings me to third: if I was to integrate change notification in the helper function, this would now happen <strong>before</strong> the property change actually takes place (and that&#8217;s still assuming that it takes place at all, which is not under the control of the helper function anymore).</p>
	<p>So all this looked bad to me and I decided to go with the by-reference type helper function after all. This works only if the value I&#8217;m actually setting from inside the helper function is a ref cell. In C#, it&#8217;s possible to take any given variable and pass a reference to it into a method that requires such a reference. Not so in F#, apparently. Unless a value is declared to be a ref cell, it can&#8217;t be used in this way. Declaring as a ref cell in turn means that there&#8217;s an extra wrapper class created for the value - quite a bit of unnecessary overhead it seems, particularly when dealing with large numbers of fields such as there are typically in persistent classes. But since ref cells are the only way to make the F# compiler pass something by reference, there&#8217;s no way around that. I did some additional tests with temporary ref cells and other things, but this only made the overhead worse, not better. So I decided to accept things as they are and move on.</p>
	<p>One other thing I should mention about ref cells: they require special syntax when used in code, basically they need to be dereferenced in order to access the actual value. So instead of writing &quot;foo&quot; to access the value foo, I now have to write &quot;!foo&quot; (yeah, looks like &quot;not foo&quot;, but it&#8217;s not, if you know what I mean &lt;g&gt;). Quite inconvenient as well, if you write a lot of business logic in your class and prefer to use the private field directly. Probably better to use the public properties where possible, then you don&#8217;t have that problem.</p>
	<p>My next step was to try and pull the helper functions which can&#8217;t be called in their original C# implementation into F# as a workaround. That looked pretty simple to begin with - our C# implementation is actually quite a bit more complex because we have to jump through some hoops to get the equality comparison right (that&#8217;s the reason for having the <a href="http://cs.hubfs.net/forums/thread/5919.aspx">conflicting overloads</a> I mentioned earlier). I created a base class that I was going to use for further objects:</p>
	<fieldset><pre>
type FSharpBaseClass =
    inherit XPObject as base
    public new(session: Session) = { inherit XPObject(session) }
    member public x.SetPropertyValueFS propertyName oldVal newVal =
        let needsSetting = !oldVal &lt;&gt; newVal
        if needsSetting then
             oldVal := newVal
        x.OnChanged(propertyName, !oldVal, newVal)
        needsSetting
</pre></fieldset>
	<p>And lo and behold, here&#8217;s the next inexplicable F# issue: <a href="http://cs.hubfs.net/forums/thread/5933.aspx">I can&#8217;t call the OnChanged method</a>! Again, no idea why that is - I did a bunch of tests with very similar setups and all of these work. OnChanged can&#8217;t be called though, I get a compiler error: <em>Error 5 A protected member is called or a base variable is being used. This is currently only allowed in the direct implementation of members since they could escape their object scope.</em></p>
	<p>Of course there&#8217;s not a single page that Google can find about this problem, that would have been boring. Ah well. That&#8217;s it for today in any case. To be continued.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/05/16/oddities-in-fc-interaction/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>WPF styles and default behavior</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/28/wpf-styles-and-default-behavior/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/28/wpf-styles-and-default-behavior/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 17:59:59 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/28/wpf-styles-and-default-behavior/</guid>
		<description><![CDATA[	After my recent presentation at the VBUG conference, somebody sent me this question: &#34;I have code to style a button and several triggers to change the button&#8217;s background color. For some reason, the trigger for the IsPressed property doesn&#8217;t seem to work. Why?&#34; Here&#8217;s the style code that was being used (this actually includes some [...]]]></description>
			<content:encoded><![CDATA[	<p>After my recent presentation at the VBUG conference, somebody sent me this question: &quot;I have code to style a button and several triggers to change the button&#8217;s background color. For some reason, the trigger for the IsPressed property doesn&#8217;t seem to work. Why?&quot; Here&#8217;s the style code that was being used (this actually includes some changes I made to the original, but never mind that):</p>
	<fieldset><pre language="xml">
&lt;Style TargetType=&quot;{x:Type Button}&quot;&gt;
  &lt;Setter Property=&quot;Background&quot; Value=&quot;Red&quot;/&gt;
  &lt;Style.Triggers&gt;
    &lt;Trigger Property=&quot;IsMouseOver&quot; Value=&quot;True&quot;&gt;
      &lt;Setter Property=&quot;Background&quot; Value=&quot;Green&quot;/&gt;
    &lt;/Trigger&gt;
    &lt;Trigger Property=&quot;IsPressed&quot; Value=&quot;True&quot;&gt;
      &lt;Setter Property=&quot;FontWeight&quot; Value=&quot;Bold&quot;/&gt;
      &lt;Setter Property=&quot;Width&quot; Value=&quot;200&quot; /&gt;
      &lt;Setter Property=&quot;Background&quot; Value=&quot;Lime&quot; /&gt;
    &lt;/Trigger&gt;
  &lt;/Style.Triggers&gt;
&lt;/Style&gt;
</pre></fieldset>
	<p>With a few buttons on a form and this style code installed in App.xaml, you can easily see that he&#8217;s right - the IsMouseOver property change triggers a change of the background color to green, but IsPressed seems to do its job only partly, since it misses setting the Background property to Lime. In the original example, the change to the background color in that trigger was actually the only thing that was supposed to happen, so it looked like nothing was happening at all. With my changes, it seems obvious that the trigger is observed correctly, but the Background property change doesn&#8217;t seem to be executed.</p>
	<p><img src="http://www.sturmnet.org/wp-images/blend-editcontroltemplate.png" align="right" />The reason for this behavior is simple: there are standard templates in place that format the buttons in the way we&#8217;re normally used to seeing a button formatted. On Vista that means setting the background color to a certain gradient, displaying a rounded rectangle, and having certain animations in place that are executed when the button is focused, the mouse moves over it or it is clicked. This standard behavior is also implemented as control templates using triggers, and so interests collide - the triggers in the sample code actually do set the background color to Green or Lime, only the standard trigger quickly starts doing something else. As a result, the IsMouseOver trigger sets the color to Green only for a short while before the standard animation sets in, and in the IsPressed case the color is actually never seen.</p>
	<p>To solve this problem I used Blend to get hold of the standard control template for a button. I opened my test solution in Blend, selected one of my buttons and used the context menu entry Edit Control Parts (Template) | Edit a Copy&#8230; to have a block of code for the base template inserted into my XAML file. Note that this block is inserted into the Window class XAML file by default. In many cases this is actually the sensible solution, but in the sample application I had my styles defined in App.xaml, so I had to move the block across to that file. If you do this, be aware that there&#8217;s also an XML namespace Microsoft_Windows_Themes inserted by Blend, which you have to move together with the code in order to make things work.</p>
	<p>Now, if you have a close look at this code that has been created by Blend, you will see that there are three &quot;events&quot; called RenderDefaulted, RenderMouseOver and RenderPressed configured to call various elements of the ButtonBase class, which are pulled in using the TemplateBinding syntax extension. In addition, there are some triggers that are also involved with changing the button&#8217;s appearance in response to various events.</p>
	<p>For this example, I chose to remove all those elements to break things down to an extremely basic button that doesn&#8217;t react visually anymore (apart from my own triggers) to mouse moves or clicks. In reality this might not always be the right thing to do - this article is just meant as a starting point for readers to figure out what they need to do in their own use cases. Anyway, after my modifications, this is what I was left with:</p>
	<fieldset><pre language="xml">
&lt;ControlTemplate x:Key=&quot;buttonTemplate&quot; TargetType=&quot;{x:Type ButtonBase}&quot;&gt;
  &lt;Microsoft_Windows_Themes:ButtonChrome x:Name=&quot;Chrome&quot;
     SnapsToDevicePixels=&quot;True&quot;
     Background=&quot;{TemplateBinding Background}&quot;
     BorderBrush=&quot;{TemplateBinding BorderBrush}&quot;&gt;
    &lt;ContentPresenter
       HorizontalAlignment=&quot;{TemplateBinding HorizontalContentAlignment}&quot;
       Margin=&quot;{TemplateBinding Padding}&quot;
       VerticalAlignment=&quot;{TemplateBinding VerticalContentAlignment}&quot;
       SnapsToDevicePixels=&quot;{TemplateBinding SnapsToDevicePixels}&quot;
       Content=&quot;{TemplateBinding Content}&quot;
       ContentTemplate=&quot;{TemplateBinding ContentTemplate}&quot;
       RecognizesAccessKey=&quot;True&quot;/&gt;
  &lt;/Microsoft_Windows_Themes:ButtonChrome&gt;
&lt;/ControlTemplate&gt;
</pre></fieldset>
	<p> Blend had automatically inserted a Template attribute for this control template into XAML, to make the particular button, which I had called the context menu on, work with this template. So I just had to run the application and there it was - two buttons still working in the same way as ever, and a third one without any of the animations and perfect green and lime colors depending on mouse state. Great!</p>
	<p><img src="http://www.sturmnet.org/wp-images/controltemplating.png" /></p>
	<p>You can download the source code for my test application here: <a href="http://www.sturmnet.org/wp-images/WPFControlTemplating.zip">WPFControlTemplating.zip</a> (9016 bytes)</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/28/wpf-styles-and-default-behavior/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Impressions from the VBUG conference</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/27/impressions-from-the-vbug-conference/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/27/impressions-from-the-vbug-conference/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 13:59:54 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/27/impressions-from-the-vbug-conference/</guid>
		<description><![CDATA[	VBUG did their Spring 2008 Conference last week. In the beginning, Andy was tired , Chris was enthusiastic  and Tim was &#8230;  &#8230; also there. Dave was hungry  and then he couldn&#8217;t get in . When he finally made it, he was the only one in Rich&#8217;s session  and had to [...]]]></description>
			<content:encoded><![CDATA[	<p><strong><a href="http://www.vbug.com/">VBUG</a> did their <a href="http://www.vbug.com/Conference/Conference-April-2008.aspx">Spring 2008 Conference</a> last week. In the beginning, <a href="http://www.andrewwestgarth.co.uk/">Andy</a> was tired <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2979.jpg" align="middle" />, Chris was enthusiastic <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2980.jpg" align="middle" /> and <a href="http://dotnettim.spaces.live.com/">Tim</a> was &#8230; <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2984.jpg" align="middle" /> &#8230; also there. <a href="http://nxtgenug.spaces.live.com/">Dave</a> was hungry <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2987.jpg" align="middle" /> and then he couldn&#8217;t get in <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2990.jpg" align="middle" />. When he finally made it, he was the only one in Rich&#8217;s session <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2994.jpg" align="middle" /> and had to be revived <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2993.jpg" align="middle" />. Not quite Dave&#8217;s event - he was scared of his computer <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3069.jpg" align="middle" /> and ended up starting his own presentation early <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3036.jpg" align="middle" />. </strong></p>
	<p><strong>Mark <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3065.jpg" align="middle" />, <a href="http://www.garyshort.org/">Gary</a> <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3077.jpg" align="middle" /> and Rich sang <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3101.jpg" align="middle" />, and everybody danced <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3072.jpg" align="middle" /> <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3093.jpg" align="middle" /></strong></p>
	<p><strong>In the end it was all as it should be. </strong></p>
	<p><strong><img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_3024.jpg" align="middle" /> <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2998.jpg" align="middle" /> <img src="http://www.sturmnet.org/wp-images/vbugspring2008/IMG_2997.jpg" align="middle" /></strong></p>
	<p><strong>Great event, guys!</strong></p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/27/impressions-from-the-vbug-conference/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>DX takes all the awards plus Product of the Year</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/27/dx-takes-all-the-awards-plus-product-of-the-year/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/27/dx-takes-all-the-awards-plus-product-of-the-year/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 11:55:26 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/27/dx-takes-all-the-awards-plus-product-of-the-year/</guid>
		<description><![CDATA[	Developer Express have won each of the 8 (eight!!) categories we entered for this year&#8217;s asp.netPRO Magazine Reader&#8217;s Choice Awards. Wow! 
	The categories we entered were Best Add-in, Best Charting and Graphics Tool, Best Component Set, Best Grid, Best Navigation Suite, Best Online Editor, Best Printing/Reporting Tool and Best Scheduling/Calendar Tool. Our overall package DXperience [...]]]></description>
			<content:encoded><![CDATA[	<p>Developer Express have won each of the 8 (eight!!) categories we entered for this year&#8217;s asp.netPRO Magazine Reader&#8217;s Choice Awards. Wow! </p>
	<p>The categories we entered were Best Add-in, Best Charting and Graphics Tool, Best Component Set, Best Grid, Best Navigation Suite, Best Online Editor, Best Printing/Reporting Tool and Best Scheduling/Calendar Tool. Our overall package DXperience was also named Product of the Year. </p>
	<p><a href="http://community.devexpress.com/blogs/aspnet/archive/2008/04/25/you-have-voted-and-we-re-stunned.aspx">Look here for more info, the official thank-you to everybody and a few words from Julian.</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/27/dx-takes-all-the-awards-plus-product-of-the-year/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Locked myself out of Vista? Help! - Solved</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/25/locked-myself-out-of-vista-help/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/25/locked-myself-out-of-vista-help/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 12:28:53 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/25/locked-myself-out-of-vista-help/</guid>
		<description><![CDATA[	It appears I&#8217;ve managed to do a pretty stupid thing - personally I rather feel like Windows let me do a stupid thing, but that&#8217;s probably a matter of perspective  
	Anyway, I was trying out some things with UAC, looking at the way different elevation prompts are displayed depending on whether or not the [...]]]></description>
			<content:encoded><![CDATA[	<p>It appears I&#8217;ve managed to do a pretty stupid thing - personally I rather feel like Windows let me do a stupid thing, but that&#8217;s probably a matter of perspective <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
	<p>Anyway, I was trying out some things with UAC, looking at the way different elevation prompts are displayed depending on whether or not the current user is an Administrators member or not, and so on. Previously I was working in what appears to be the default configuration, which my user account being a member of the local Administrators group and the Administrator account disabled and without password. </p>
	<p>I activated the Administrator account and gave it a password. Then I removed my own account from the Administrators group and added Power Users instead. I played around with this setup and then decided to go back where I came from - <strong>only I made a mistake, I disabled the Administrator account first, before assigning the Administrators group back to my own account.</strong></p>
	<p>As a result, <strong>I can&#8217;t currently find a way to get Administrator privileges on my system!</strong> I can&#8217;t log in as Administrator because the account is disabled. For the same reason I can&#8217;t use the &quot;runas&quot; command to run any admin tools. And elevation offers only my own account (pretty weird that - why does it offer to elevate into my own account if I&#8217;m not an Administrators member at all?), which allows me, after entering my password, to bring up Computer Management - but I still can&#8217;t make changes to any account settings, obviously.</p>
	<p><strong>What do I do?</strong> I can see that I wasn&#8217;t thinking enough before making those changes, but I&#8217;m still having a hard time believing that I managed to lock myself out completely, i.e. the only solution is a restore from backup. <strong>Any ideas, please?</strong></p>
	<p>&#160;</p>
	<p><strong>Update: </strong>I found a solution on this very helpful page: <a title="http://www.jimmah.com/vista/Administration/locked_out_of_admin.aspx" href="http://www.jimmah.com/vista/Administration/locked_out_of_admin.aspx">http://www.jimmah.com/vista/Administration/locked_out_of_admin.aspx</a> I feel quite lucky that the no. 1 option actually worked for me and I didn&#8217;t have to use any of the other two - but at least there seems to be hope even if the situation is worse than mine turned out to be. In case you need that article and the above link should have stopped working, I have a local copy of it that I might be prepared to pass on in that event. <strong>Thanks to everybody who helped!</strong></p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/25/locked-myself-out-of-vista-help/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Not using the Secure Desktop?</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/25/not-using-the-secure-desktop/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/25/not-using-the-secure-desktop/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 10:18:15 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/25/not-using-the-secure-desktop/</guid>
		<description><![CDATA[	Using Local Security Policy settings (specifically the one called &#34;User Account Control: Switch to the secure desktop when prompting for elevation&#34;), I can modify Vista&#8217;s behaviour when showing elevation prompts, so that the elevation dialog is simply shown as a normal window on the current desktop. I like this behaviour much better, but I&#8217;m wondering [...]]]></description>
			<content:encoded><![CDATA[	<p>Using Local Security Policy settings (specifically the one called &quot;User Account Control: Switch to the secure desktop when prompting for elevation&quot;), I can modify Vista&#8217;s behaviour when showing elevation prompts, so that the elevation dialog is simply shown as a normal window on the current desktop. I like this behaviour much better, but I&#8217;m wondering if there&#8217;s any security related reason why the so-called secure desktop is actually more secure. If you know, please tell me!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/25/not-using-the-secure-desktop/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>32 bit Explorer on Vista 64</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/23/32-bit-explorer-on-vista-64/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/23/32-bit-explorer-on-vista-64/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 12:49:41 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/23/32-bit-explorer-on-vista-64/</guid>
		<description><![CDATA[	There&#8217;s a pretty big problem with shell extensions when you try to run 64 bit Windows - they either come in 64 or 32 bit varieties, and each &#34;group&#34; of extensions will only be loaded into a corresponding host application. In other words, Windows Explorer runs as a 64 bit executable by default and it [...]]]></description>
			<content:encoded><![CDATA[	<p>There&#8217;s a pretty big problem with shell extensions when you try to run 64 bit Windows - they either come in 64 or 32 bit varieties, and each &quot;group&quot; of extensions will only be loaded into a corresponding host application. In other words, Windows Explorer runs as a 64 bit executable by default and it only loads shell extensions for 64 bit. Many alternative file manager tools only come in 32 bit versions so far, and they will only load 32 bit extensions. </p>
	<p>Some extensions come in both 32 bit and 64 bit versions, and it should be possible to install them both. I&#8217;ve seen some extensions do this automatically and then it works fine - but some other vendors distribute both versions of their products with exactly the same file naming, so you can only install either one of them. </p>
	<p>The whole thing seems a bit stupid to me&#8230; I wonder if it wouldn&#8217;t be possible to create a 64 bit shell extension that includes the 32 bit extensions in the 64 shell. Yes, I know I can&#8217;t load the extensions directly, but I could run a separate 32 bit executable that loads them and passes over all relevant information to the 64 extension - and the other way round of course. This could work both ways actually, also enabling 64 bit extensions to be available in 32 bit hosts. Of course that&#8217;s quite a bit of information that has to be transferred very carefully, mapped correctly and so on&#8230; just the sort the thing that Microsoft could have done in Windows, probably not the sort of thing I&#8217;m going to take on myself over the next weekend.</p>
	<p>Now, for most applications I&#8217;ve been able to use Explorer for 64 bit extensions and <a href="http://www.altap.cz/salam_en/index.html">Altap Salamander</a>, which I use anyway, for the 32 bit ones. But I encountered a worse kind of problem the other day, when I was trying to <a href="http://www.redchairsoftware.com/anapod/">Anapod</a> (brilliant iPod tool, btw - can&#8217;t begin to describe how much better than <a href="http://www.apple.com/itunes/">iTunes</a> it is). Anapod comes only in a 32 bit version so far. It installed just fine and then it ran the tray application and connected to my iPod. Great. Problem was, the context menu entry I normally used to bring up Anapod Explorer and access the contents of my iPod wasn&#8217;t working - some weird error message. </p>
	<p>After a little while, I figured out what was going on. Normally, Anapod installs a top level shell extension, which displays an icon for the iPod in the main &quot;Computer&quot; window in Explorer. Said context menu entry simply goes and brings up an Explorer window in the right location. Because the extension that was installed was 32 bit, my 64 bit Explorer couldn&#8217;t open a window in that location. Hm. Of course there was also no other way to get to that location from the 64 bit Explorer.</p>
	<p>I thought for a bit and then remembered that there&#8217;s a 32 bit version of Explorer also installed on the system. By default the path to it is <code>C:\Windows\SysWOW64\explorer.exe</code>. I tried running it, but I still couldn&#8217;t access the Anapod shell extension. After a while I found that Task Manager listed the second running Explorer instance as 64 bit - why? I don&#8217;t really know. The funny thing is that if you watch Task Manager closely while running that version of Explorer, you&#8217;ll see that for a very short time it actually shows the &quot;*32* marker, but then this goes away and it&#8217;s 64 bit again. I don&#8217;t have an idea why that happens - I&#8217;ve only been using 64 bit Windows for a few weeks and I don&#8217;t know anything at all about its execution model.</p>
	<p>The solution I finally found (my apologies - I don&#8217;t remember where I found it and I didn&#8217;t store a bookmark) involves a way to run a 32 bit Explorer instance on 64 bit Windows, but it&#8217;s certainly not intuitive. To make it work, you need to create a shortcut to Explorer (I&#8217;m actually still using the SysWOW64 one, but I believe the standard one should work equally well) somewhere and then change it&#8217;s properties. Set the Target of the shortcut to this: <code>C:\Windows\SysWOW64\explorer.exe /separate, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}</code>. Great, isn&#8217;t it? Again, I don&#8217;t really understand this at all, just passing it on <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
	<p>This solution works just fine with Anapod. I still can&#8217;t use the context menu entry to bring up the Explorer window, but with the tray tool running and the iPod connected, I just open a 32 bit instance of Explorer and browse into the iPod from there.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/23/32-bit-explorer-on-vista-64/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>CardWhat on the rise, Barry Dorrans reading up on it</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/23/cardwhat-on-the-rise-barry-dorrans-reading-up-on-it/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/23/cardwhat-on-the-rise-barry-dorrans-reading-up-on-it/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 12:25:45 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/23/cardwhat-on-the-rise-barry-dorrans-reading-up-on-it/</guid>
		<description><![CDATA[	
]]></description>
			<content:encoded><![CDATA[	<p><img src="http://www.sturmnet.org/wp-images/IMG00018small.jpg" /></p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/23/cardwhat-on-the-rise-barry-dorrans-reading-up-on-it/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>64 and 32 bit PowerShell execution policies stored separately</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/10/64-and-32-bit-powershell-execution-policies-stored-separately/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/10/64-and-32-bit-powershell-execution-policies-stored-separately/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 13:22:24 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/10/64-and-32-bit-powershell-execution-policies-stored-separately/</guid>
		<description><![CDATA[	Just stumbled upon this due to some confusion about the version of PowerShell I was running on my 64 bit Vista machine. I ran PowerShell from the start menu, using the context menu to bring it up as Administrator. Then I set the execution policy to RemoteSigned:
	Set-ExecutionPolicy RemoteSigned
	I ran PowerShell as a normal user (through [...]]]></description>
			<content:encoded><![CDATA[	<p>Just stumbled upon this due to <a href="http://www.sturmnet.org/blog/archives/2008/04/10/slickrun-on-64-bit-vista/">some confusion about the version of PowerShell I was running</a> on my 64 bit Vista machine. I ran PowerShell from the start menu, using the context menu to bring it up as Administrator. Then I set the execution policy to RemoteSigned:</p>
	<p><code>Set-ExecutionPolicy RemoteSigned</code></p>
	<p>I ran PowerShell as a normal user (through SlickRun - brought up the 32 bit PowerShell without me noticing at first), tried to run a script and it failed. <code>Get-ExecutionPolicy</code> still showed <code>Restricted</code>. Wtf?</p>
	<p>Turns out that the execution policies for 32 and 64 bit PowerShells are stored separately. I don&#8217;t know, I can&#8217;t figure out any value in this apart from the obvious &quot;let&#8217;s fuck with their minds&quot; conspiracy idea. Probably something that wasn&#8217;t really done on purpose, but still pretty important to know.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/10/64-and-32-bit-powershell-execution-policies-stored-separately/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>SlickRun on 64 bit Vista</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/10/slickrun-on-64-bit-vista/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/10/slickrun-on-64-bit-vista/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 13:17:00 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/10/slickrun-on-64-bit-vista/</guid>
		<description><![CDATA[	I was fighting some problems with SlickRun for a while after installing 64 bit Vista on my machine recently. I noticed issues with powershell (SlickRun was always running the 32 bit version of it, even though the path explicitely specified the 64 bit version), and when I wanted to create a command to run SnippingTool, [...]]]></description>
			<content:encoded><![CDATA[	<p>I was fighting some problems with <a href="http://www.bayden.com/SlickRun/">SlickRun</a> for a while after installing 64 bit Vista on my machine recently. I noticed issues with powershell (SlickRun was always running the 32 bit version of it, even though the path explicitely specified the 64 bit version), and when I wanted to create a command to run SnippingTool, it turned out to be impossible&#8230; there are some very weird things going on in 64 bit Windows. </p>
	<p>For example, Explorer shows me SnippingTool.exe in c:\windows\system32 (system32? Go figure), while my 32 bit Altap Salamander doesn&#8217;t show the same file in that location. In SlickRun it was equally impossible to configure my command to use that path, and when I tried to use the path to the start menu .lnk file instead, SlickRun&#8217;s path completion feature actually showed the .lnk file, but running it was still impossible.</p>
	<p>After a little search, I found <a href="http://groups.msn.com/bayden/slickrun.msnw?action=get_message&amp;mview=0&amp;ID_Message=590">this forum post here</a>, which describes an option for 64 bit systems. Quoting (I don&#8217;t trust forum content to be there when I go back later):</p>
	<blockquote><p>Try this:</p>
	<ul>
<li>Close SlickRun </li>
	<li>Open C:\users\yourname\appdata\roaming\slickrun </li>
	<li>Edit SlickRun.ini </li>
	<li>In the [General] section, add the line: </li>
   </ul>
	<p><strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Wow64Hack=1</strong></p></blockquote>
	<p>I activated this hack and things are better now - the PowerShell command runs the 64 bit version, and the SnippetTool can be run from it&#8217;s (alleged) c:\windows\system32 location. I still can&#8217;t use the .lnk file though, since I get a number (five or so) error message about Crypt32.dll when I try.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/10/slickrun-on-64-bit-vista/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Upcoming events - VBUG Spring conference and lots of DDDs</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/10/upcoming-events-vbug-spring-conference-and-lots-of-ddds/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/10/upcoming-events-vbug-spring-conference-and-lots-of-ddds/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 10:08:54 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/10/upcoming-events-vbug-spring-conference-and-lots-of-ddds/</guid>
		<description><![CDATA[	There are several events coming up in the next few weeks, where I&#8217;m going to be speaking. Hope to meet some of you there! 
	If you haven&#8217;t considered coming to any of these events, now is the time to do so - there&#8217;s lots of stuff going on, and since all of these events happen [...]]]></description>
			<content:encoded><![CDATA[	<p>There are several events coming up in the next few weeks, where I&#8217;m going to be speaking. Hope to meet some of you there! </p>
	<p>If you haven&#8217;t considered coming to any of these events, now is the time to do so - there&#8217;s lots of stuff going on, and since all of these events happen &quot;off the beaten track&quot;, we hope to see some people there who couldn&#8217;t easily make it to the more &quot;standard&quot; event locations in Reading or Dublin.</p>
	<p>Here&#8217;s where I&#8217;m going to be:</p>
	<p><a href="http://www.vbug.com/Conference/Conference-April-2008.aspx">VBUG Spring Conference</a>, Birmingham, UK - April 24th</p>
	<p><a href="http://www.dddireland.com/">DDD Ireland</a>, Galway - May 3rd</p>
	<p><a href="http://developerdayscotland.com/main/Default.aspx">DDD Scotland</a>, Glasgow - May 10th</p>
	<p>I believe I&#8217;m also going to be at the <a href="http://www.northeastscotland.net/DNN4/">North East Scotland .NET User Group</a> on May 14th, but they don&#8217;t have an announcement for the event yet. Hope to confirm that later.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/10/upcoming-events-vbug-spring-conference-and-lots-of-ddds/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>MVP Summit next week</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/10/mvp-summit-next-week/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/10/mvp-summit-next-week/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 09:45:27 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/10/mvp-summit-next-week/</guid>
		<description><![CDATA[	I&#8217;m going to be in Seattle next week for Microsoft&#8217;s annual global MVP Summit. Would love to meet some of you there - if you see me around, please say hi, or contact me if you want to sort something out in advance.
]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;m going to be in Seattle next week for Microsoft&#8217;s annual global MVP Summit. Would love to meet some of you there - if you see me around, please say hi, or contact me if you want to sort something out in advance.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/10/mvp-summit-next-week/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Still an MVP</title>
		<link>http://www.sturmnet.org/blog/archives/2008/04/10/still-an-mvp/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/04/10/still-an-mvp/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 09:15:35 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/04/10/still-an-mvp/</guid>
		<description><![CDATA[	Granted, I&#8217;m a bit late mentioning this, but I still want to do it. Microsoft gave me another MVP award in the C# category on April 1st. I&#8217;m honored - thank you very much, Microsoft, and the various people involved.
	As usual, I hope to find the time one day to do a bit more blogging [...]]]></description>
			<content:encoded><![CDATA[	<p>Granted, I&#8217;m a bit late mentioning this, but I still want to do it. Microsoft gave me another MVP award in the C# category on April 1st. I&#8217;m honored - thank you very much, Microsoft, and the various people involved.</p>
	<p>As usual, I hope to find the time one day to do a bit more blogging than I&#8217;ve done in the last year or so. At least I am finding time to do a lot of speaking at user groups and events. If I haven&#8217;t been at your group and you would like me to, feel free to contact me!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/04/10/still-an-mvp/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>NxtGenUG Fest 08 Registration is open</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/28/nxtgenug-fest-08-registration-is-open/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/28/nxtgenug-fest-08-registration-is-open/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 14:07:12 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/28/nxtgenug-fest-08-registration-is-open/</guid>
		<description><![CDATA[	Here&#8217;s the Fest08 page, and there&#8217;s a paragraph on registration right at the top. I&#8217;ll be doing a new session there, called &#8220;Handling data in F#&#8221;. 
	Last year this one-day event was great, I&#8217;m sure it&#8217;s going to be another day full of fantastic content this year. &#8220;Data today, data tomorrow&#8221; is the motto this [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://www.nxtgenug.net/fest08/">Here&#8217;s the Fest08 page</a>, and there&#8217;s a paragraph on registration right at the top. I&#8217;ll be doing a new session there, called &#8220;Handling data in F#&#8221;. </p>
	<p>Last year this one-day event was great, I&#8217;m sure it&#8217;s going to be another day full of fantastic content this year. &#8220;Data today, data tomorrow&#8221; is the motto this time - a great idea, I think, since almost everybody works with data in some shape or form these days. So, I hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/28/nxtgenug-fest-08-registration-is-open/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Are you in Ireland next week? I am! Come along and win!</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/28/are-you-in-ireland-next-week-i-am-come-along-and-win/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/28/are-you-in-ireland-next-week-i-am-come-along-and-win/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 11:49:22 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/28/are-you-in-ireland-next-week-i-am-come-along-and-win/</guid>
		<description><![CDATA[	I&#8217;m going to be in Galway, Cork and Dublin next week. 
	In Galway, I&#8217;ll do a WPF session for GMIT students on Monday afternoon, and &#8220;Functional Programming in C# 3.0&#8243; in the evening at GAMTUG. If you want to be there, follow this link for all the details!
	On Tuesday I&#8217;m going to be in Cork, [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;m going to be in Galway, Cork and Dublin next week. </p>
	<p>In Galway, I&#8217;ll do a WPF session for GMIT students on Monday afternoon, and &#8220;Functional Programming in C# 3.0&#8243; in the evening at GAMTUG. If you want to be there, <a href="http://gamtug.spaces.live.com/blog/cns!3E6F2F13756DBDAB!980.entry">follow this link for all the details</a>!</p>
	<p>On Tuesday I&#8217;m going to be in Cork, delivering a WPF session again. <a href="http://gamtug.spaces.live.com/blog/cns!3E6F2F13756DBDAB!981.entry">Here&#8217;s the link for that one</a> - hope to see you there as well! The video is actually about my WPF introduction, but if there&#8217;s enough time, I might well do the longer &#8220;WPF in business applications&#8221; talk instead. We&#8217;ll see.</p>
	<p>Wednesday I move on to Dublin, where I&#8217;m going to meet up with a lot of other people for <a href="http://imtc.firstport.ie/">the fantastic IMTC conference</a>. They still have room and the speakers list is impressive, so if you can make it to Dublin for April 2-4, or even for one of the days (sessions are 3rd and 4th), I&#8217;d recommend this! My sessions are on Thursday, I&#8217;ll be doing an <a href="http://imtc.firstport.ie/lecture.aspx?lid=110">introduction to LINQ</a> as well as <a href="http://imtc.firstport.ie/lecture.aspx?lid=109">Functional Programming in C# 3.0</a>.</p>
	<p><strong>During all my sessions I&#8217;ll be giving away complimentary </strong><a href="http://www.devexpress.com"><strong>Developer Express</strong></a><strong> licenses!</strong> (Well, I&#8217;ll talk to the organizers to prevent p****ing them off, but I would like to do that at every session.) </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/28/are-you-in-ireland-next-week-i-am-come-along-and-win/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Who puts IPv6 entries in my hosts file?</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/27/who-puts-ipv6-entries-in-my-hosts-file/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/27/who-puts-ipv6-entries-in-my-hosts-file/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 20:27:41 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/27/who-puts-ipv6-entries-in-my-hosts-file/</guid>
		<description><![CDATA[	I just had a weird problem - for some reason IE wouldn&#8217;t run my XAF (eXpressApp Framework) web applications (ASP.NET) anymore. At first I suspected some sort of installation problem, since I&#8217;d just installed the new 8.1.1 version, and not long ago this used to work just fine. But for some unrelated reasons I uninstalled [...]]]></description>
			<content:encoded><![CDATA[	<p>I just had a weird problem - for some reason IE wouldn&#8217;t run my XAF (<a href="http://www.devexpress.com/xaf">eXpressApp Framework</a>) web applications (ASP.NET) anymore. At first I suspected some sort of installation problem, since I&#8217;d just installed the new 8.1.1 version, and not long ago this used to work just fine. But for some unrelated reasons I uninstalled and reinstalled, and the problem was still the same. </p>
	<p>In the URL for the application, I tried replacing &#8220;localhost&#8221; with &#8220;127.0.0.1&#8243; and I found that this solved the problem. I ping&#8217;d localhost and I noticed that it was using ::1 as the address instead of 127.0.0.1 - the IPv6 equivalent. I looked in my hosts file and there was an entry in there, combining ::1 with localhost. Removing that entry solved the problem.</p>
	<p>Now, this is a bit weird&#8230; I actually thought I didn&#8217;t even IPv6 enabled at all, which would have explained why connections to ::1 wouldn&#8217;t work. But I found that it was in fact active - not sure why, I believe I switched it off at some point. Pinging ::1 is not a problem. So why can&#8217;t IE connect to it? And who added the ::1 entry to my hosts file recently? Or was it previously working in spite of that entry?</p>
	<p>Bizarre Windows network stuff&#8230; see, that&#8217;s why I still love Linux for my servers. Text based config files that never suddenly change automatically. Great.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/27/who-puts-ipv6-entries-in-my-hosts-file/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>F# - Things I learned today</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/23/f-things-i-learned-today/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/23/f-things-i-learned-today/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 20:33:48 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/23/f-things-i-learned-today/</guid>
		<description><![CDATA[	I was playing around a bit today with F#, trying to write some real code that interfaces with WPF. Here are a few things I found - very much a &#8220;note to self&#8221; thing, but if you happen to be interested, please comment or ask.
	Number 1 - implementing interfaces that include events is a PITA
	I [...]]]></description>
			<content:encoded><![CDATA[	<p>I was playing around a bit today with F#, trying to write some real code that interfaces with WPF. Here are a few things I found - very much a &#8220;note to self&#8221; thing, but if you happen to be interested, please comment or ask.</p>
	<p><strong>Number 1 - implementing interfaces that include events is a PITA</strong></p>
	<p>I was trying to implement <a href="http://msdn2.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx">INotifyPropertyChanged</a>, which contains the event PropertyChanged. Eventually I found a working description in <a href="http://cs.hubfs.net/forums/thread/3735.aspx">this forum thread</a>. I&#8217;ve now implemented the interface and a helper method to fire the event like this:</p>
	<fieldset><pre>  interface INotifyPropertyChanged with
    member x.add_PropertyChanged(handler: PropertyChangedEventHandler) =
      x.notifyPropertyChangedHandlers &lt;- (Delegate.Combine(x.notifyPropertyChangedHandlers, handler) <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_confused.gif' alt=':?' class='wp-smiley' /> &gt; PropertyChangedEventHandler)
    member x.remove_PropertyChanged(handler: PropertyChangedEventHandler) =
      x.notifyPropertyChangedHandlers &lt;- (Delegate.Remove(x.notifyPropertyChangedHandlers, handler) <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_confused.gif' alt=':?' class='wp-smiley' /> &gt; PropertyChangedEventHandler)
	
  member private x.PropertyChanged(propertyName) =
    x.notifyPropertyChangedHandlers.Invoke(x, new PropertyChangedEventArgs(propertyName))
</pre></fieldset>
	<p><em>Hm&#8230; my stupid blogging system apparently likes those smileys that crept into the code sample above. That&#8217;s the downcast operator being used where the smileys appear&#8230; colon, questionmark, greater than. Sorry about that.</em></p>
	<p>No idea whether this is the best way - at this point I found for the first time that documentation is currently badly lacking&#8230; no mention of anything like this in any official place I could find, nor in Don Syme&#8217;s or Robert Pickering&#8217;s books (the latter wrote the forum reply at least &lt;g&gt;). Was this forgotten? What&#8217;s worse than having no docs is that there are so many outdated examples around that I spent half the time trying something that obviously didn&#8217;t work any longer because the approach had been revised.</p>
	<p><strong>Number 2 - class syntax has a lot of weird restrictions</strong></p>
	<p>Yeah, well&#8230; weird is perhaps not the right word, I admit. But it certainly seems weird, since they&#8217;ve just invented two entirely different sets of valid elements for classes with implicit construction sequences and those without. Basically I had a class that was instantiated with a Window reference and hooked up to an event from that Window. Handling that event, the class was performing a calculation and then it was supposed to fire a property changed event. </p>
	<p>Now, to fire the event correctly, of course I need a reference to the current instance, which for some reason is only available in members (those that use the &#8220;member&#8221; keyword), not in function values created using the &#8220;let&#8221; keyword. The reason for that is probably that the &#8220;let&#8221; elements are only valid in an implicit initialization sequence and as such they&#8217;re practically part of the constructor code. Still, it took a while for me to realize that, since in most languages there&#8217;s a reference to the current instance available in the constructor - it&#8217;s probably a good idea not to have that reference in the constructor, since it prevents calling members before initialization is complete.</p>
	<p>Anyway, so my event handler for the Window event had to be a member itself, not just a function value as I&#8217;d had it before. The problem was that in this case I needed a reference to the current instance to even hook up the event, which wasn&#8217;t available to me because I was using a construction sequence.</p>
	<p>There is a syntax for explicit constructors that allows creating a reference to the current instance. This is still implemented cleanly, because the syntax requires that first a constructor (not necessarily the same one) has to run and initialize all values, before the additional block is executed that can access the current instance. Using that syntax in conjunction with my initialization sequence wasn&#8217;t really working, so I had to convert my class entirely to using just an explicit constructor. That involves getting rid of all &#8220;let&#8221;s, using &#8220;val&#8221;s for all fields, can&#8217;t use in-place initialization and so on&#8230; </p>
	<p>So, just in case anybody reads this who&#8217;s in a discussion mood - I&#8217;m aware that in the end it&#8217;s all my fault <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  But it is pretty hard to figure out how this all works, I didn&#8217;t find it to be well documented anywhere, and the compiler messages are really crappy about half the time. </p>
	<p><strong>Number 3 - Buggy behaviour of the &#8220;new() = { &#8230; } then &#8230;&#8221; syntax</strong></p>
	<p>This is the syntax I referred to before. In general it works fine - only I found that the compiler is really anal about the formatting of the expression, at least in #light syntax mode. I tried it without the #light at some point and found that it was actually more tolerant - but I had other trouble with that (doesn&#8217;t warrant an entry here since I didn&#8217;t investigate in depth - basically my &#8220;class&#8221; and &#8220;end&#8221; keywords allegedly didn&#8217;t match up whatever I did) and so I switched back to #light. In the end I got it working by formatting like this - all sorts of variations easily break things.</p>
	<fieldset><pre>  new(state: int) as x =
    { state = state;
      blah = "hi" }
    then
      x.state &lt;- x.state * x.state
</pre></fieldset>
	<p><strong>Number 4 - class type eating up &#8220;do&#8221; block behind it, in spite of indentation</strong></p>
	<p>I had my main code file formatted along these lines:</p>
	<fieldset><pre>type MyClass =
  ... stuff in my class
	
[&lt;STAThread&gt;]
do
  ... stuff to get my app running
</pre></fieldset>
	<p>That&#8217;s what I had the whole time, and I guess an important detail might be that I had a &#8220;do&#8221; block in my class while I was using the implicit initialization sequence. Later I removed the &#8220;do&#8221; block, and when I finally got everything to compile without errors (that stupid formatting thing with the new() above took me quite a while), suddenly my application wasn&#8217;t doing anything at all anymore! I placed a breakpoint on the first line of the app start block and execution didn&#8217;t even get there.</p>
	<p>I found the source of that problem by looking at the compiled app with Reflector. Surprisingly, my startup method was entirely empty, and the code in that &#8220;do&#8221; block, even though clearly indented to live outside the class, had been pulled into a static constructor for the class. Wow. I haven&#8217;t had the need yet to actually create a static class constructor in F#, but my guess is that it uses a similar syntax. Anyway, given the indentation it seems pretty clear to me that in this case this shouldn&#8217;t happen. Well, who knows&#8230;</p>
	<p>Anyway, I fixed the problem by adding &#8220;class&#8221; and &#8220;end&#8221; to the class type, so my code looks like this now:</p>
	<fieldset><pre>type MyClass = class
  ... stuff in my class
end
	
[&lt;STAThread&gt;]
do
  ... stuff to get my app running
</pre></fieldset>
	<p>Oh yeah - and why did I have that class in the same file in the first place? Well&#8230; I&#8217;ve previously blogged about <a href="http://www.sturmnet.org/blog/archives/2008/03/18/f-the-thing-with-the-namespaces/">some weird things with namespaces in F#</a>, and apparently that wasn&#8217;t the end of it. I tried to move the class into a different file and put it into an explicit namespace, but whatever I did, the compiler insisted that it couldn&#8217;t see the class in that block of code that becomes the startup method of a Windows application. Yes, I had an &#8220;open&#8221; line in that file of course. Another thing to investigate further, since I have no plausible idea what was going on there.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/23/f-things-i-learned-today/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>F# - The thing with the namespaces</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/18/f-the-thing-with-the-namespaces/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/18/f-the-thing-with-the-namespaces/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 21:42:12 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/18/f-the-thing-with-the-namespaces/</guid>
		<description><![CDATA[	I just spent a little while hunting down an interesting problem in a little F# app. I had a bunch of code in a single file and I was going to structure it a bit and move certain parts into separate files. I started out from some code like this:
	namespace Sturm.MyNamespace
	
type ICommandLine = begin
  [...]]]></description>
			<content:encoded><![CDATA[	<p>I just spent a little while hunting down an interesting problem in a little F# app. I had a bunch of code in a single file and I was going to structure it a bit and move certain parts into separate files. I started out from some code like this:</p>
	<fieldset><pre>namespace Sturm.MyNamespace
	
type ICommandLine = begin
  abstract member Parts: string list
end
	
type IPlugin =
  abstract member CanHandle: ICommandLine -&gt; bool
  abstract member Handle: ICommandLine -&gt; unit
	
type blah =
  val mutable dummy: int
  interface IPlugin with
    member x.CanHandle(commandLine) = false
    member x.Handle(commandLine) = x.dummy &lt;- 1
  end
  new() = { dummy = 0 }
</pre></fieldset>
	<p>Yeah, I know - useless code. The point is that there are dependencies between the three types. So I was trying to move the interfaces into a different file, and suddenly the type <code>blah</code> couldn&#8217;t find the interfaces anymore. Interesting.</p>
	<p>The solution to this is simple, but looks a bit stupid. At the start of my new file, I had of course repeated the namespace declaration <code>namespace Sturm.MyNamespace</code>, but that is not enough. Even though that puts all the types in the same namespace, it is still necessary to explicitely open the namespace as well, if you&#8217;re going to access elements that have been defined elsewhere for the same namespace. So I need this header in the file with the class type:</p>
	<fieldset><pre>namespace Sturm.MyNamespace
open Sturm.MyNamespace</pre></fieldset>
	<p>While I can see the logic behind that, it doesn&#8217;t seem like a very useful approach&#8230; perhaps I&#8217;ll figure out the reasons later, right now I&#8217;m glad I&#8217;ve found a solution.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/18/f-the-thing-with-the-namespaces/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Vista spooling/printing delay - new problems</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/17/vista-spoolingprinting-delay-new-problems/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/17/vista-spoolingprinting-delay-new-problems/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 10:07:25 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/17/vista-spoolingprinting-delay-new-problems/</guid>
		<description><![CDATA[	I recently posted about this issue I was having with a weird delay when trying to print and I thought I&#8217;d found a solution to it. But now I&#8217;ve discovered that the solution was responsible for new problems&#8230; particularly when trying to print large files (not large by numbers of pages, but by content - [...]]]></description>
			<content:encoded><![CDATA[	<p>I recently posted about <a href="http://www.sturmnet.org/blog/archives/2008/02/05/vista-spoolingprinting-delay-solved/">this issue I was having with a weird delay when trying to print</a> and I thought I&#8217;d found a solution to it. But now I&#8217;ve discovered that the solution was responsible for new problems&#8230; particularly when trying to print large files (not large by numbers of pages, but by content - big scanned images or things like that), I&#8217;m suddenly getting error messages every time about timeouts.</p>
	<p>I haven&#8217;t spent too much time trying to fix this issue, but switching the printer port back to the RAW protocol provided an immediate workaround - the delay is back, but I can print whatever I want. Pretty interesting, as I&#8217;ve printed probably a hundred documents since I first switched to LPR. No idea where this comes from&#8230; I guess I&#8217;ll just switch the protocols selectively until I find time to hunt down a real solution.</p>
	<p>Update: I just noticed that even with the protocol set to RAW, it doesn&#8217;t work every time - it used to work just fine, no idea what happened&#8230;</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/17/vista-spoolingprinting-delay-new-problems/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Registrations are open for DDD Ireland and DDD Scotland!</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/17/registrations-are-open-for-ddd-ireland-and-ddd-scotland/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/17/registrations-are-open-for-ddd-ireland-and-ddd-scotland/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 10:01:38 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/17/registrations-are-open-for-ddd-ireland-and-ddd-scotland/</guid>
		<description><![CDATA[	Roughly based on the original concept for the Developer Developer Developer day, both Ireland and Scotland are getting their own DDDs for the first time in 2008. Some slight differences in organization, but great content and speakers nevertheless - see the agendas here for Ireland and here for Scotland. May 3rd (Ireland) and May 10th [...]]]></description>
			<content:encoded><![CDATA[	<p>Roughly based on the original concept for the <a href="http://www.developerday.co.uk">Developer Developer Developer day</a>, both Ireland and Scotland are getting their own DDDs for the first time in 2008. Some slight differences in organization, but great content and speakers nevertheless - see the agendas <a href="http://www.dddireland.com/agenda-1.htm">here for Ireland</a> and <a href="http://developerdayscotland.com/main/Agenda/tabid/68/Default.aspx">here for Scotland</a>. May 3rd (Ireland) and May 10th (Scotland) are the dates, and I&#8217;m sure it&#8217;s going to be great!</p>
	<p>Find the <a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032370583&amp;culture=en-US">registration page for DDD Ireland here</a> and <a href="http://developerdayscotland.com/main/DelegateRegistration/tabid/69/Default.aspx">the one for DDD Scotland here</a>. Hope to see you all there!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/17/registrations-are-open-for-ddd-ireland-and-ddd-scotland/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>What&#8217;s wrong with the Vista start menu?</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/14/whats-wrong-with-the-vista-start-menu/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/14/whats-wrong-with-the-vista-start-menu/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 15:35:34 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/14/whats-wrong-with-the-vista-start-menu/</guid>
		<description><![CDATA[	I&#8217;m really undecided about the Vista start menu&#8230; since I&#8217;ve started using Vista, I&#8217;ve had several different approaches for running applications:
	
Some applications run automatically when I log on to Windows
	Some applications I run manually after most logins, like e.g. Outlook. I have icons for those in the Quick Launch toolbar. 
	I use SlickRun to run [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;m really undecided about the Vista start menu&#8230; since I&#8217;ve started using Vista, I&#8217;ve had several different approaches for running applications:</p>
	<ol>
<li>Some applications run automatically when I log on to Windows</li>
	<li>Some applications I run manually after most logins, like e.g. Outlook. I have icons for those in the Quick Launch toolbar. </li>
	<li>I use SlickRun to run those applications I use most regularly, but which are not running all the time. The Quick Launch toolbar also has icons for some other things that I run occasionally - often enough so I want to have the accessible, but seldom enough to make me think I&#8217;m going to forget the name of a SlickRun command if I were to create one for them.</li>
	<li>I use the Start Menu with its Search functionality to run things that I use rarely.</li>
</ol>
	<p>I see how this doesn&#8217;t seem like an intuitive system, but it actually is for me. </p>
	<p>Now, the Start Menu on Vista is really weird&#8230; it has this nice Search feature, which is very useful, but occasionally I can&#8217;t remember what the name of some item is, so I actually expand &#8220;All Programs&#8221; - and that&#8217;s where things start to go wrong. The Start Menu is so horribly slow that it&#8217;s practically unusable - it sometimes takes 20 seconds or so to expand a folder in the All Programs list. Why? No idea. I&#8217;ve been noticing the same thing on a previous Vista installation on a different machine, so it doesn&#8217;t seem to be related to my installation. It certainly has to do with the number of applications installed, but then the old Start Menu always coped with that just fine and certainly my 160GB laptop hdd can&#8217;t be home to the Vista installation with the largest number of installed apps in the world, can it?</p>
	<p>Another thing is that even with SP1 installed, working in the Start Menu is something that sometimes crashes Explorer. Again, no idea why - it happens either when clicking around in the All Programs hierarchy, or when entering a Search term and looking through the result list. It almost seems that it&#8217;s most related to the duration I have the Start Menu open, since I don&#8217;t think it happens when I just open it, quickly select something and close it again.</p>
	<p>I tried switching back to the Classic Start Menu, which has a nice effect on performance the list of installed apps fills the entire screen, but at least it comes up within 2 seconds or so. But the Classic Start Menu doesn&#8217;t have any features, not even those it should have according to the Options dialog - apparently it&#8217;s supposed to &#8220;store and display a list of recently opened programs&#8221;, but it doesn&#8217;t. It also doesn&#8217;t show top-level Administrative Tools, Computer or Network entries and it doesn&#8217;t support Search.</p>
	<p>As a result, both Start Menu implementations are really unusable, though for totally different reasons. Why don&#8217;t they ever get it right?</p>
	<p>I know there are other launcher applications out there (apart from SlickRun), but I&#8217;ve found those lacking in simple ways - I don&#8217;t want such an app to take up a lot of memory if it&#8217;s going to be running all the time, and the command features that SlickRun has are really the absolute minimum of what I need. OTOH, SlickRun doesn&#8217;t support working with the Start Menu content, which seems like a pretty useful and simple idea. Perhaps some other tools do? If I ever find time, this would be something to look into. If you know something I don&#8217;t, please comment and tell me!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/14/whats-wrong-with-the-vista-start-menu/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>DevWeek session, slides and samples and info</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/14/devweek-session-slides-and-samples-and-info/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/14/devweek-session-slides-and-samples-and-info/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 11:47:04 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/14/devweek-session-slides-and-samples-and-info/</guid>
		<description><![CDATA[	Thanks to everybody who attended my session at DevWeek! I hope you liked it, I certainly had a lot of fun doing it.
	First of all, here&#8217;s the download of slides and samples from the session: Functional Programming in C# 3.0 (718950 bytes)
	Second, I&#8217;ve had a little thought about that example I was asked about during [...]]]></description>
			<content:encoded><![CDATA[	<p>Thanks to everybody who attended my session at DevWeek! I hope you liked it, I certainly had a lot of fun doing it.</p>
	<p>First of all, here&#8217;s the download of slides and samples from the session: <a href="/download/FunctionalProgrammingInCSharp3.0.zip">Functional Programming in C# 3.0</a> (718950 bytes)</p>
	<p>Second, I&#8217;ve had a little thought about that example I was asked about during the session. It was one of the methods in the first basic example, and it looks like this:</p>
	<fieldset><pre>public static IEnumerable<memberinfo> GetAllMembersFunctional( ) {
  return AppDomain.CurrentDomain.GetAssemblies( ).SelectMany(
    assembly =&gt; assembly.GetTypes( ).SelectMany(
      type =&gt; type.GetMembers( )));
}
</memberinfo></pre></fieldset>
	<p>The question about it is whether this is a &#8220;real&#8221; functional implementation of the functionality or not, given that <code>GetAssemblies</code> returns information that changes dynamically outside my own function. I first pointed out in the session that the example was of course about the implementation of the method, not necessarily about whether or not you would want to implement a function that does precisely this same thing, especially if you subscribe to the &#8220;pure&#8221; theory of functional programming.</p>
	<p>The more important thing about this came to my mind a bit later, but it depends a little bit on perspective. From the perspective of the guy who implements this method, I could say &#8220;Of course this is entirely valid - I&#8217;m simply calling other functions to return information to me (even though those functions don&#8217;t take parameters, so perhaps the source of the data is just a little suspect). I&#8217;m not the one who makes the decision to actually retrieve the information from what might be considered unreliable shared storage.&#8221; On the other hand, the function in question (GetAssemblies) is a function from my &#8220;runtime libraries&#8221;, in the form of the .NET framework, and it could equally well be said that I have to be aware of the nature of such functions and whether or not they do something I don&#8217;t want to do, and perhaps make the decision not to use them.</p>
	<p>In the end it all comes down to discipline again. Modern functional programming, especially when applied to real world problems, is rarely &#8220;pure&#8221;. There&#8217;s sometimes a necessity to deal with shared data and external state to solve real-world problems. Modern functional languages recognize that and provide the means to do it, thereby removing restrictions and pushing the problem back into the area of discipline. There are small steps being taken to remind you of that choice you made, like the fact that you need special keywords in F# to create mutable variables. But if it&#8217;s your choice to try to live without shared state, it&#8217;s also your responsibility to adhere to that choice as much as you can, and decide sensibly about situations where you can&#8217;t.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/14/devweek-session-slides-and-samples-and-info/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>London .NET user group slides and samples</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/14/london-net-user-group-slides-and-samples/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/14/london-net-user-group-slides-and-samples/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 11:31:11 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/14/london-net-user-group-slides-and-samples/</guid>
		<description><![CDATA[	So here they are, the slides and samples of that Functional Programming in C# 3.0 session. My apologies for the slight delay - I already received a few emails about it - but my flight home was cancelled yesterday and everything was a bit chaotic.
	Functional Programming in C# 3.0 (718950 bytes)
	Have fun!
]]></description>
			<content:encoded><![CDATA[	<p>So here they are, the slides and samples of that Functional Programming in C# 3.0 session. My apologies for the slight delay - I already received a few emails about it - but my flight home was cancelled yesterday and everything was a bit chaotic.</p>
	<p><a href="/download/FunctionalProgrammingInCSharp3.0.zip">Functional Programming in C# 3.0</a> (718950 bytes)</p>
	<p>Have fun!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/14/london-net-user-group-slides-and-samples/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Testing Sony Vaio support, the conclusion</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/11/testing-sony-vaio-support-the-conclusion/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/11/testing-sony-vaio-support-the-conclusion/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 12:34:08 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/11/testing-sony-vaio-support-the-conclusion/</guid>
		<description><![CDATA[	The computer arrived back here yesterday, with a new motherboard and a screen cleaning cloth in apology for my troubles. Allegedly it had also been &#8220;thoroughly cleaned&#8221;, but I don&#8217;t think so - it wasn&#8217;t extremely dirty anyway, but the dust that gathers on the sides of the keys (the keyboard is a bit weird [...]]]></description>
			<content:encoded><![CDATA[	<p>The computer arrived back here yesterday, with a new motherboard and a screen cleaning cloth in apology for my troubles. Allegedly it had also been &#8220;thoroughly cleaned&#8221;, but I don&#8217;t think so - it wasn&#8217;t extremely dirty anyway, but the dust that gathers on the sides of the keys (the keyboard is a bit weird that way, hard to describe) was still there.</p>
	<p>Anyway, and more importantly, the computer worked. So good work on that, Sony, and the turnaround was good as well!</p>
	<p>For some reason the support guys apparently found they had to restore the hdd to it&#8217;s factory state though - I don&#8217;t quite understand which part of replacing a motherboard necessitated that step, but there you go. Acronis TrueImage (great product, btw!!) spent a few hours restoring my complete disk image, and after that the system was running just fine again. </p>
	<p>One thing I noticed was that Windows thought it was no longer activated on the machine - presumably because of the mobo exchange. I only noticed by chance though - three days to go before activation - and that&#8217;s not good. I might have been somewhere without an internet connection in three days, when suddenly my Windows stops working&#8230; why don&#8217;t they display a large notification dialog in such a case?</p>
	<p>So, to summarize - it took one week from contacting Sony support to getting back the fixed device, plus the additional work required to get everything back the way it was. I&#8217;m not really disappointed by this, but still it has to be said that even in this most positive of outcomes there&#8217;s still a lot to be desired.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/11/testing-sony-vaio-support-the-conclusion/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Testing Sony Vaio support, part 3 - machine is on its way back</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/10/testing-sony-vaio-support-part-3-machine-is-on-its-way-back/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/10/testing-sony-vaio-support-part-3-machine-is-on-its-way-back/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 12:21:22 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/10/testing-sony-vaio-support-part-3-machine-is-on-its-way-back/</guid>
		<description><![CDATA[	There was a bit of a confusion last week, when the DHL guy didn&#8217;t have all the details - apparently the Sony guys were expecting the machine to come in the next day and when it didn&#8217;t, they called me to ask why the pickup had gone wrong. Well, I had already received the receipt [...]]]></description>
			<content:encoded><![CDATA[	<p>There was a bit of a confusion last week, when the DHL guy didn&#8217;t have all the details - apparently the Sony guys were expecting the machine to come in the next day and when it didn&#8217;t, they called me to ask why the pickup had gone wrong. Well, I had already received the receipt from DHL by then and I called them to tell them so, but by that time they had already received the machine and it was scheduled for repair. That was Thursday last week.</p>
	<p>I went to Germany for Cebit on Friday, and in the late afternoon I received an SMS telling me the machine had been shipped back! No further information though. I tried tracking the package on my BlackBerry, but found that the DHL tracking website doesn&#8217;t find a BlackBerry web browser worthy of accessing that info. Tracking on the computer was somewhat impaired by the fact that while they&#8217;d sent me that SMS, I didn&#8217;t have the same info as an email. Hm. Also, even though I had a case number from Sony, I wasn&#8217;t able to find any status info about the case on their support page - I do have an &#8220;eSupport&#8221; account there, but the case wasn&#8217;t listed in there.</p>
	<p>Anyway, tracking tells me that I should receive the package today (Monday 9th), so I&#8217;m hopeful - assuming everything&#8217;s really fine with the machine, that would be a pretty good turn-around.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/10/testing-sony-vaio-support-part-3-machine-is-on-its-way-back/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>WPF talk at Scottish Developers</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/06/wpf-talk-at-scottish-developers/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/06/wpf-talk-at-scottish-developers/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 11:34:38 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/06/wpf-talk-at-scottish-developers/</guid>
		<description><![CDATA[	My talk yesterday at Scottish Developers in Edinburgh went fine - the meeting wasn&#8217;t huge, but I had the impression that the topic was interesting to everybody. If you were there, thank you again, and please feel free to contact me if you come up with questions!
	Here&#8217;s the download of slides and samples from that [...]]]></description>
			<content:encoded><![CDATA[	<p>My talk yesterday at Scottish Developers in Edinburgh went fine - the meeting wasn&#8217;t huge, but I had the impression that the topic was interesting to everybody. If you were there, thank you again, and please feel free to contact me if you come up with questions!</p>
	<p>Here&#8217;s the download of slides and samples from that event:</p>
	<p><a href="/download/BusinessAppsWithWPFScottishDevs.zip">BusinessAppsWithWPFScottishDevs.zip</a> (1229546 bytes)</p>
	<p><b>Update:</b> I noticed that the slides were not in the download - my apologies about that, it&#8217;s corrected.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/06/wpf-talk-at-scottish-developers/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Microsoft shows us how to retire data</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/04/microsoft-shows-us-how-to-retire-data/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/04/microsoft-shows-us-how-to-retire-data/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 17:17:02 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/04/microsoft-shows-us-how-to-retire-data/</guid>
		<description><![CDATA[	Microsoft has come up with a good example of how you should handle the process of deprecating data. 
	Have a look at my MVP profile here. 
	You&#8217;ll see that in a lot of profile entries for speaking engagements, the string &#8220;RETIRED &#8212; DO NOT SELECT&#8221; is shown. Why is that? Very simple: at some point [...]]]></description>
			<content:encoded><![CDATA[	<p>Microsoft has come up with a good example of how you should handle the process of deprecating data. </p>
	<p><a href="https://mvp.support.microsoft.com/profile/oliver.sturm">Have a look at my MVP profile here.</a> </p>
	<p>You&#8217;ll see that in a lot of profile entries for speaking engagements, the string &#8220;RETIRED &#8212; DO NOT SELECT&#8221; is shown. Why is that? Very simple: at some point the selection &#8220;.NET&#8221;, for instance, was a valid one, but now it had to be changed. Of course there are approaches to retiring data that would have left the old strings in place, but then those mechanisms introduce considerable overhead in the data gathering process. As the strings that are shown now also include the old strings, there was no conceivable reason not to go the easy way.</p>
	<p>Thanks to the unknown delevoper/db admin who published this great sample!</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/04/microsoft-shows-us-how-to-retire-data/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Basta Spring 2008 slides and samples</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/04/basta-spring-2008-slides-and-samples/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/04/basta-spring-2008-slides-and-samples/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 16:37:19 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/04/basta-spring-2008-slides-and-samples/</guid>
		<description><![CDATA[	I apologize for the delay - with my computer dying and everything, it took me longer than it should have to make my slides and samples for the Basta sessions available here. They should also be available here (but aren&#8217;t, yet) and each delegate will get sent a CD sooner or later - that&#8217;s as [...]]]></description>
			<content:encoded><![CDATA[	<p>I apologize for the delay - with my computer dying and everything, it took me longer than it should have to make my slides and samples for the Basta sessions available here. They should also be available <a href="http://www.basta.net/c2008">here</a> (but aren&#8217;t, yet) and each delegate will get sent a CD sooner or later - that&#8217;s as much info as I have.</p>
	<p>Anyway, here are the downloads for my sessions (some of them together with <a href="http://codebetter.com/blogs/ian_cooper/">Ian Cooper</a>):</p>
	<p><a href="/download/BastaSpring2008/CSharpWorkshop.zip">C# 3.0 Workshop - Everything you need to know about C# 3.0</a> (1551978 bytes)</p>
	<p><a href="/download/BastaSpring2008/EinfuehrungZuCSharp3.0.zip">Einfuehrung zu C# 3.0</a> (1168992 bytes)</p>
	<p><a href="/download/BastaSpring2008/CSharp3-InteressanteUseCasesAusserhalbVonLINQ.zip">C# 3.0 - Interessante Use Cases ausserhalb von LINQ</a> (644553 bytes)</p>
	<p><a href="/download/BastaSpring2008/ExtensibleLINQing.zip">Extensible LINQing</a> (402259 bytes)</p>
	<p><a href="/download/BastaSpring2008/FutureOfCSharpAndOther.NETLanguages.zip">The future of C# and other .NET languages</a> (838316 bytes)</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/04/basta-spring-2008-slides-and-samples/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Testing Sony Vaio support, part 2 - DHL</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/04/testing-sony-vaio-support-part-2-dhl/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/04/testing-sony-vaio-support-part-2-dhl/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 16:13:13 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/04/testing-sony-vaio-support-part-2-dhl/</guid>
		<description><![CDATA[	Just a short update: the DHL guy just left. He did bring a box and a plastic bag to package the machine, as I was promised by the support guy yesterday, but he claimed I should have all the information that goes on the various stickers for the package&#8230; well, I don&#8217;t. The Sony guy [...]]]></description>
			<content:encoded><![CDATA[	<p>Just a short update: the DHL guy just left. He did bring a box and a plastic bag to package the machine, as I was promised by the support guy yesterday, but he claimed I should have all the information that goes on the various stickers for the package&#8230; well, I don&#8217;t. The Sony guy had told me that DHL would have all they need to handle things. Anyway, he took the package away, promised to deal with all the paper work later and return a receipt to me tomorrow (or so). I would have been hesitant about this, but as I know the guy - as well as you know your DHL delivery man, but at least it&#8217;s always been the same man for the last 8 months - I guess it&#8217;ll be alright like that. Wait and see, yet again.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.sturmnet.org/blog/archives/2008/03/04/testing-sony-vaio-support-part-2-dhl/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Testing Sony Vaio support, part 1</title>
		<link>http://www.sturmnet.org/blog/archives/2008/03/03/testing-sony-vaio-support-part-1/</link>
		<comments>http://www.sturmnet.org/blog/archives/2008/03/03/testing-sony-vaio-support-part-1/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 11:19:28 +0000</pubDate>
		<dc:creator>Oliver Sturm</dc:creator>
		
	<category>General</category>
		<guid>http://www.sturmnet.org/blog/archives/2008/03/03/testing-sony-vaio-support-part-1/</guid>
		<description><![CDATA[	My Vaio VGN-SZ4 died last week while I was at Basta in Germany. One minute it was working fine, just sitting there on the table with the large external display attached, the next it was just displaying weird colorful flashing things on both screens, and it hung of course. So I switched it off, and [...]]]></description>
			<content:encoded><![CDATA[	<p>My Vaio VGN-SZ4 died last week while I was at Basta in Germany. One minute it was working fine, just sitting there on the table with the large external display attached, the next it was just displaying weird colorful flashing things on both screens, and it hung of course. So I switched it off, and since then I&#8217;m unable to switch it back on. It just turns on the power and bluetooth leds, I hear the DVD drive initialize, and when it was still warm I could hear the fan running a little bit as well - when switching off, I can hear the hdd park itself, and that&#8217;s it. Nothing on the display, no beeps, nothing blinking, nothing.</p>
	<p>So I called Sony support this morning, since the machine is still in warranty. The guy had me go through a few steps and asked a few questions, but I&#8217;d tried the obvious things already - took out the memory sticks and popped them back in, tried using just one of them at a time, tried to run with and without the battery (and a second battery as well) and with and without the power adapter. Tried switching the Stamina/Speed switch, which also switches from primary to secondary graphics hardware on this device. All to no avail. He had me take out the battery and hold the power button, &#8220;in case there&#8217;s static built up in the machine&#8221;. Any scientific background to that one? I don&#8217;t know. In any case, it didn&#8217;t help.</p>
	<p>So he said he could arrange for DHL to come pick up the machine tomorrow, which is nice. Having the original packaging (which I don&#8217;t) is apparently not important, nor is having any packaging at all (which I might have had), since the DHL guy is supposed to have &#8220;a box and a plastic bag&#8221; available when he comes here to collect. I hope the guy knows that <img src='http://www.sturmnet.org/blog/wp-images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
	<p>Then we moved on the topic of backups. I do have nice and current data backups and I&#8217;m already (more or less) up and running on my old Acer machine, so I thought that wasn&#8217;t going to be a problem, until he informed me that the tech guys may well have to restore the hdd to the base state of that system. He wasn&#8217;t able to tell me why they would do that, assuming the hdd isn&#8217;t broken of course, and although he went away to confirm, he said they couldn&#8217;t promise to call and let me know before they considered doing that either. </p>
	<p>So I said okay, I&#8217;m going to take out 