<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Simon's Software Stuff</title><link>http://harriyott.com/index.aspx</link><language>en</language><managingEditor>noreply@blogger.com (Simon)</managingEditor><lastBuildDate>Wed, 23 Jul 2008 18:41:41 -0500</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">410</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><description></description><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/harriyott/simonssoftwarestuff" type="application/rss+xml" /><feedburner:emailServiceId>33641</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:browserFriendly>(Enter a personal message you would like to have appear at the top of your feed.)</feedburner:browserFriendly><item><title>Extension methods in C# again</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/330015538/extension-methods-in-c-again.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Tue, 08 Jul 2008 12:48:16 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-6141850749378733897</guid><description>I'm getting extension methods into my regular "coding vocabulary" (i.e. I remembered to use one). I was wondering why String didn't have a Right() method, to save doing maths to work out the numbers to call SubString(), so I decided to write one.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=nydnPa"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=nydnPa" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=jLy36J"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=jLy36J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=5oTJ8J"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=5oTJ8J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/330015538" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F07%2Fextension-methods-in-c-again.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/07/extension-methods-in-c-again.aspx</feedburner:origLink></item><item><title>Extension methods in C#</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/316261421/extension-methods-in-c.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 20 Jun 2008 09:57:30 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-6420797439147689124</guid><description>I recently needed to encrypt a string with MD5 encryption. Not having used this before, I looked at the MSDN page for the &lt;a href="http://tinyurl.com/6gdsqj"&gt;MD5 class&lt;/a&gt;. There was a ComputeHash method, but no overload took a string parameter - just a stream or a byte array.&lt;br /&gt;&lt;br /&gt;I may be naive, but I would have thought encrypting a string would be a common enough task to warrant its own overload, but apparently not. It is common enough though, for some example code that converts the string to a byte array, calls ComputeHash, and converts the result to a hex string. This example seems to work fine, so I don't know why it isn't just squished into the class in the framework.&lt;br /&gt;&lt;br /&gt;Not wanting to just add this example to the class I was working on, I thought I would write my first ever extension method, and add the example as an overload to the MD5 framework class.  I read about extension methods in the marvelous &lt;a href="http://www.amazon.co.uk/exec/obidos/redirect?link_code=ur2&amp;tag=harriyottcom-21&amp;camp=1634&amp;creative=6738&amp;path=ASIN%2F1590598849"&gt;Pro C# 2008 and the .NET 3.5 Plaform&lt;/a&gt;, which are straightforward, but the syntax is a little unintuitive:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public static class MD5Extensions&lt;br /&gt;{&lt;br /&gt; public static string ComputeHash(this MD5 md5, string input)&lt;br /&gt; {&lt;br /&gt;  byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(input));&lt;br /&gt;  StringBuilder sBuilder = new StringBuilder();&lt;br /&gt;  for (int i = 0; i &lt; data.Length; i++)&lt;br /&gt;  {&lt;br /&gt;   sBuilder.Append(data[i].ToString("x2"));&lt;br /&gt;  }&lt;br /&gt;  return sBuilder.ToString();&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In short, both the class and the method should be defined as static, and the first parameter has "this" before the type, which is the class that is being extended.  I'm going to have to keep looking this up, as there are three things to remember. I would have preferred a new keyword, extended, which works in the same way as partial classes, like so:&lt;br /&gt;&lt;pre&gt;public extended class MD5&lt;br /&gt;{&lt;br /&gt; public string ComputeHash(string input)&lt;br /&gt; {&lt;br /&gt;  ...&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This would have been far easier to remember, and would actually look like the programmer's intention. I'm sure there must be a good reason for the way it has been done though.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=VZLKay"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=VZLKay" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=sQoCkI"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=sQoCkI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=wOt6dI"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=wOt6dI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/316261421" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F06%2Fextension-methods-in-c.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/06/extension-methods-in-c.aspx</feedburner:origLink></item><item><title>Re-inventing the toll</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/302875023/re-inventing-toll.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Mon, 02 Jun 2008 05:11:24 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-8445931262614310573</guid><description>One of the side-effects of being a developer is that I often find myself &amp;quot;debugging&amp;quot; things outside of the IDE, or the computer itself. Recently I went somewhere that involved driving across the Dartford crossing on the M25*.  There's a tunnel under the River Thames for northbound traffic, and a huge bridge for southbound traffic. There are toll gates for both directions south of the river.&lt;br /&gt;&lt;br /&gt;As I was in a long, southbound queue (caused by the toll) on my return journey, I started thinking about why there were two tolls in operation at the same time, and two resultant traffic jams, and what to do about it. I think I've come up with a way to ease the jams.&lt;br /&gt;&lt;br /&gt;The obvious first choice is to dispense with the tolls altogether, since the bridge paid for itself in 2003.  The government aren't going to do that though.&lt;br /&gt;&lt;br /&gt;I reckon that almost everyone that uses the bridge in one direction uses it again in the opposite direction very shortly afterwards. In my case, it was about 7 hours after. Very few people make journeys from their home or place of work and don't return via the same route in the opposite direction.&lt;br /&gt;&lt;br /&gt;On my journey, I had two toll transactions, of &amp;pound;1 each way. I think it would be better to have one transaction of &amp;pound;2 instead, that would cover both journeys. In this way, one set of tolls could be closed, and allow traffic to flow freely through, removing one traffic jam altogether.&lt;br /&gt;&lt;br /&gt;Depending on the traffic flow, the tolls could be changed over to reduce an extremely long tailback. If this happened in the middle of the day, then some people may have to pay twice, and others nothing at all. Although this doesn't sound fair, it should even out over time.&lt;br /&gt;&lt;br /&gt;Should I suggest this to Boris, or is it a silly idea?&lt;br /&gt;&lt;br /&gt;* Actually, it isn't the M25 at the crossing, it's the A282. I presume this is so that learner drivers can cross the river without going into town, as they're not allowed on motorways.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=b5Ckw2"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=b5Ckw2" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=2VtdBI"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=2VtdBI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=7tIwtI"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=7tIwtI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/302875023" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F06%2Fre-inventing-toll.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/06/re-inventing-toll.aspx</feedburner:origLink></item><item><title>NxtGenUG FEST08</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/302802667/nxtgenug-fest08.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Mon, 02 Jun 2008 02:19:37 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-7934629104285692977</guid><description>Dave McMahon has asked me to let you know about FEST08. In his words:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"FEST08 the annual NxtGenUG one-day event takes place ar Microsoft Reading on Thursday 12th June.  As ever it's going to be an action packed day with great content from the likes of Mike Taulty ,Oliver Sturm , Dave Sussman and other top speakers.  No doubt there will be bundles of 'swag' and prizes and Pizza somewhere down the line - there always is when the nxtGenUG Boyz are around.  There seems to be a few more of them this year with the Cambridge and Southampton crews joining in the mix.&lt;br /&gt; &lt;br /&gt;So got to &lt;a href="http://www.nxtgenug.net/fest08/"&gt;http://www.nxtgenug.net/fest08/&lt;/a&gt; for details and to register your place.  It's free to all NxtGenUG members and a mere £49.99 to non-members - bargain!  Oh and also if you're around the night before there is a G(r)eek dinner to toast Daniel Moth on his way to the states.  &lt;a href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=140"&gt;http://www.nxtgenug.net/ViewEvent.aspx?EventID=140&lt;/a&gt; is the link to signup to."&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=ldUR0P"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=ldUR0P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=6Gnz2I"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=6Gnz2I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=ifLyrI"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=ifLyrI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/302802667" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F06%2Fnxtgenug-fest08.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/06/nxtgenug-fest08.aspx</feedburner:origLink></item><item><title>Converting SVG images to PNG in C#</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/296360735/converting-svg-images-to-png-in-c.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 23 May 2008 01:47:04 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-4898461041698635015</guid><description>I've been dynamically generating SVG images for the intranet I'm working on.  I initially chose SVG, as it's an XML format, which is easy to manipulate in C#. I've started with the template picture, and added elements based on the data pulled from the database. These elements are lines and text, positioned according to the data.&lt;br /&gt;&lt;br /&gt;There have been two minor problems so far. Firstly, although FireFox displays SVG files beautifully, IE just shows the XML. No biggie, as there's only a few users, and I can tell them to use FireFox (a pragmatic bug fix!).  The other problem is that one of the users wants to copy and paste the image into PowerPoint. With a BMP, JPEG or PNG image, the context menu has a &lt;em&gt;copy&lt;/em&gt; option that just isn't there with SVG, so there's no simple way to get it into PowerPoint. Time to bite the bullet (whatever that means) and convert the image to PNG.&lt;br /&gt;&lt;br /&gt;I decided not to convert my code to use the System.Drawing to generate PNGs from the database data, as I'd already solved that problem. Surely conversion would be easier...&lt;br /&gt;&lt;br /&gt;The obvious first step is to Google for a free SVG to PNG library, or example code on CodePlex or something, but I couldn't see anything amongst the noise of shareware apps that did conversions through a GUI.  I did however, &lt;a href="http://zkwarl.blogspot.com/2006/08/inkscape-tip-use-inkscape-on-command.html"&gt;find mention&lt;/a&gt; of &lt;a href="http://www.inkscape.org/"&gt;inkscape&lt;/a&gt;'s &lt;a href="http://inkscape.modevia.com/inkscape-man.html"&gt;command line interface&lt;/a&gt;. Inkscape is an open source SVG editor, which I used to create the image template.&lt;br /&gt;&lt;br /&gt;I tried it out, and it was really quick, and the resultant PNG file was indistinguishable (that's a longer word than it sounds) from the original. Now to call it from the .ashx.  This was quite simple, but I'll put the code here for any future Googlers (and there'll be some, there always is. If it's you, then hello and welcome. You're the reason I wrote this post). First, the "spec":&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write the SVG file to disk&lt;/li&gt;&lt;li&gt;Start inkscape as a process with the correct parameters&lt;/li&gt;&lt;li&gt;Send the PNG file back to the browser&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Now the code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void ProcessRequest(HttpContext context)&lt;br /&gt;{&lt;br /&gt; context.Response.ContentType = "image/png";&lt;br /&gt; &lt;br /&gt; String svgXml = GetSvgImageXml(context);&lt;br /&gt; string svgFileName = GetSvgFileName(context);&lt;br /&gt; using (StreamWriter writer = new StreamWriter(svgFileName, false))&lt;br /&gt; {&lt;br /&gt;  writer.Write(svgXml);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; string pngFileName = GetPngFileName(context);&lt;br /&gt;&lt;br /&gt; string inkscapeArgs = &lt;br /&gt;  "-f " + svgFileName + " -e \"" +&lt;br /&gt;  context.Server.MapPath(PngRelativeDirectory) + "\\" +&lt;br /&gt;  pngFileName + "\"";&lt;br /&gt;&lt;br /&gt; Process inkscape = Process.Start(&lt;br /&gt;   new ProcessStartInfo(&lt;br /&gt;    "C:\\program files\\inkscape\\inkscape.exe",&lt;br /&gt;    inkscapeArgs));&lt;br /&gt; inkscape.WaitForExit(3000);&lt;br /&gt; context.Server.Transfer(PngRelativeDirectory + pngFileName);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;There's only one drawback that I can see, and that's having to install inkscape on the server. It's fine for me and my intranet, but may not be possible on hosted servers.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=dWxZZb"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=dWxZZb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=u48zPH"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=u48zPH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=IewXaH"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=IewXaH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/296360735" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F05%2Fconverting-svg-images-to-png-in-c.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/05/converting-svg-images-to-png-in-c.aspx</feedburner:origLink></item><item><title>Dell has a screw loose</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/278365739/dell-has-screw-loose.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Sat, 26 Apr 2008 11:58:50 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-1714789492234209243</guid><description>A friend of mine has a new computer, her very first, and she asked me to set it up for her. I plugged everything in, switched it on, and got a black screen with some hardwareish words on it. It looked like it hadn't booted properly, so I wondered if something had come adrift in transit.&lt;br /&gt;&lt;br /&gt;As I tilted the computer ready to open it, there was a gentle &amp;quot;clonk&amp;quot; noise from within. Once I'd opened the case, I saw that the hard drive was connected by only one of its two cables, hence the boot failure. I also saw that the hard drive wasn't attached to anything, and was completely out of its bay and resting on the motherboard.  &lt;br /&gt;&lt;br /&gt;This was rather surprising, as it should have been screwed into the case. I checked inside the case, but there were no screws rattling around. Not that they could have come off, as the screw-holes in the bay were covered by the side of the case. No, the screws were quite simply never there in the first place. All 4 of them.&lt;br /&gt;&lt;br /&gt;Fortunately, my friend's mum had given her a really old Dell (Pentium III old), which was unused in a cupboard and about to go to the tip. I opened it up, and eventually found 4 screws that fitted the hard drive. I attached the hard drive into the new PC, connected the cables and it all works fine. &lt;br /&gt;&lt;br /&gt;The question remains though, how on earth can Dell fail on something so basic? Not being into hardware, I don't know whether a minimum-wage worker forgot to screw it in, or the robot's screw pot was empty, but either way, I would have expected better from Dell.&lt;br /&gt;&lt;br /&gt;[Tags:  &lt;a href="http://technorati.com/tag/dell" rel="tag"&gt;dell&lt;/a&gt; &lt;a href="http://technorati.com/tag/hard%20drive" rel="tag"&gt;hard drive&lt;/a&gt; &lt;a href="http://technorati.com/tag/fail" rel="tag"&gt;fail&lt;/a&gt;]
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=T3pFSk"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=T3pFSk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=TbX3mLG"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=TbX3mLG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=jMcIvFG"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=jMcIvFG" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/278365739" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F04%2Fdell-has-screw-loose.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/04/dell-has-screw-loose.aspx</feedburner:origLink></item><item><title>Geek Dinner with Mike Hadlow</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/276502033/geek-dinner-with-mike-hadlow.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Wed, 23 Apr 2008 18:37:26 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-2661165424993705948</guid><description>Many thanks to &lt;a href="http://mikehadlow.blogspot.com/"&gt;Mike Hadlow&lt;/a&gt;, who gave an excellent presentation with code samples about inversion of control containers tonight. A link to the source code for the examples will appear on &lt;a href="http://mikehadlow.blogspot.com/"&gt;his blog&lt;/a&gt; soon.&lt;br /&gt;&lt;br /&gt;Good to meet a few new people too, and catch up with various people I haven't seen for a while.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=zppacg"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=zppacg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=M2WncDG"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=M2WncDG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=oyvI9OG"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=oyvI9OG" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/276502033" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F04%2Fgeek-dinner-with-mike-hadlow.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/04/geek-dinner-with-mike-hadlow.aspx</feedburner:origLink></item><item><title>Working in Uckfield</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/273132860/working-in-uckfield.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 18 Apr 2008 15:35:55 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-141171939074474521</guid><description>Despite my &lt;a href="http://harriyott.com/2008/04/for-last-3-months-or-so-ive-been.aspx"&gt;enthusiasm for co-werking in Brighton&lt;/a&gt;, I have a problem. I live in Uckfield.  Not that it's a problem in general; I love being near the country-side, being able to afford a house, and seeing someone I know &lt;i&gt;every&lt;/i&gt; time I go into town.  Uckfield is a small town, and contrasts greatly with Brighton. &lt;br /&gt;&lt;br /&gt;Brighton has free wi-fi along the seafront, and in lots of caf&amp;eacute;s, bars and restaurants. Brighton has lots of web agencies, software companies, financial institutions and a thriving tech community. &lt;br /&gt;&lt;br /&gt;Uckfield is somewhat different. There are very few tech companies in Uckfield. Apart from one or two geek dinners that I organised a while back, there is no tech community in Uckfield. Just like with clothes shopping, you'd have to go to Brighton for that. I've tried working in various catering establishments in Uckfield, but they're not that geared up for it.&lt;br /&gt;&lt;br /&gt;Here's a quick run down on what Uckfield has to offer the mobile worker:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Vespa&lt;/strong&gt;. The only place in Uckfield with free wi-fi. Despite this, I've been there only once. MTV was on quite loud, playing music I didn't like. It closes at 4pm, which means I had to find somewhere else to go.  The coffee was fine, but I didn't feel that comfortable there.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The Coffee House&lt;/strong&gt;. Opposite Vespa, but not near enough to filch their wi-fi. I've met Heath, the guy in charge, only twice, but already he feels like a friend. Very friendly and welcoming. There aren't many tables, and the chairs are rather uncomfortable for working at though.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Costa&lt;/strong&gt;. The nicest interior by far, and I like the coffee. I asked about wi-fi, and they said they're always asked, but apparently the owner isn't that bothered about it. They might put it in and charge for it one day. I did manage to connect to someone else's unsecured network sitting in the front of the shop though.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Luna&lt;/strong&gt;. Being a restaurant, it's open after the caf&amp;eacute;s close, so I'll head there if I'm working late. I'm always made to feel welcome, although it is disconcerting sitting near couples out for a romantic meal (I'm sure they're less than delighted too). Although it advertises wi-fi on the sandwich board outside, it hasn't been working for yonks.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There are a few other places to try, but they look even less promising than these. Even though it takes an hour to get to Brighton in rush hour, it's still a good alternative.  Clearly there's no mention of co-working in Uckfield (although I can use a window-less room in our church office), so I'm hoping that &lt;a href="http://www.facebook.com/group.php?gid=32800515346&amp;ref=nf"&gt;The Source&lt;/a&gt; will be a good option when it opens soon.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=HT5RPU"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=HT5RPU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=W7B1oKG"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=W7B1oKG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=88wys3G"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=88wys3G" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/273132860" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F04%2Fworking-in-uckfield.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/04/working-in-uckfield.aspx</feedburner:origLink></item><item><title>Shared Office Space</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/273115736/for-last-3-months-or-so-ive-been.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 18 Apr 2008 15:01:52 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-9098430496013735016</guid><description>For the last 3 months or so, I've been working from home, and I've loved it. The flexibility, the commute, and the better family life are huge advantages, but the biggest disadvantage, for me anyway, is the loss of office life. I'm working in my spare room, which is small, contains a bed, an open wardrobe and a small table and chair. It needs painting, and the sun shines in mercilessly, so I have to close the curtains.  Some days I don't leave the house, and other days I may not see my family until the afternoon.  After a couple of months, the novelty started wearing off, and despite the advantages, I was feeling lonely.&lt;br /&gt;&lt;br /&gt;As I'm now getting into twitter, I &lt;a href="http://twitter.com/harriyott/statuses/773288202"&gt;twittered my loneliness&lt;/a&gt;, for no other reason than I fancied telling anyone who would listen. I was surprised when &lt;a href="http://twitter.com/richardvahrman"&gt;@richardvahrman&lt;/a&gt; replied, generously &lt;a href="http://twitter.com/richardvahrman/statuses/773305207"&gt;offering me a desk&lt;/a&gt; in his office. I spent the next day in a lovely office in Hove overlooking the sea, and had a very productive time.  There were 5 of us working in the office, and nobody working for the same company (the others rent desk space from Richard). It seemed like good old office life again, with long periods of companionable, busy silence, interspersed with the occasional techy discussion or general banter. &lt;br /&gt;&lt;br /&gt;I was also invited to &lt;a href="http://thewerks.org.uk/space"&gt;The Werks&lt;/a&gt;, also in Hove, so I went along a week or so later.  The Werks is just brilliant. It's a co-working office, where people turn up and work. (Generally it seems to be people like me who work with laptops, rather than people who work with pneumatic drills.)  I turned up quite early, and I was the only one there, so I just plugged my laptop in, connected to the wi-fi and got to work. Before long, a couple more people turned up, some who I knew from various Brighton geek events, and some strangers. We all sat round the same table, busying away, with the occasional chat, and sharing advice when appropriate.  Again, a really productive environment, as it felt like being at work, as opposed to being at home.  I've been back once since, and it was just as good.&lt;br /&gt;&lt;br /&gt;There are a few different ways of doing it, which are &lt;a href="http://thewerks.org.uk/space/coworking-space"&gt;priced accordingly&lt;/a&gt;.  Occasional use (couple of times a month) is free (with contributions welcome), 2-3 days a week costs &amp;pound;60p/m, which seems very reasonable. So let's say that's 12 days a month, that makes it a fiver per day. An excellent alternative to renting an office.  It's possible to rent a fixed desk and move in too, so there's a good mix of people there.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=xIQlZ6"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=xIQlZ6" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=1wWM5nG"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=1wWM5nG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=mVUJBjG"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=mVUJBjG" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/273115736" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F04%2Ffor-last-3-months-or-so-ive-been.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/04/for-last-3-months-or-so-ive-been.aspx</feedburner:origLink></item><item><title>Sussex Geek Dinner</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/258877945/sussex-geek-dinner.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Thu, 27 Mar 2008 04:53:40 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-8889679144553109080</guid><description>After a break of 9 months (with the exception of the joint Christmas geek dinner with the girls), I'm glad to say that I've arranged another Sussex geek dinner.&lt;br /&gt;&lt;br /&gt;This time, Mike Hadlow will be speaking on "Alternative Architectures: Inversion of Control".  In Mike's words:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"I'm going to talk about how to write software, specifically .NET, as a collection of components using a design pattern called 'inversion of control'. It'll include a little bit about why it's good to do this and I'll also show you an eCommerce web site built with these techniques."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;It's on 23rd April 2008 at 8pm, at the Black Horse, Church St, Brighton, and you can &lt;a href="http://upcoming.yahoo.com/event/463325/"&gt;sign up on upcoming.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a couple of years, I used a subdomain of &lt;a href="http://geekdinner.co.uk"&gt;geekdinner.co.uk&lt;/a&gt; to arrange the geek dinners, but the server crashed, and it isn't back up again yet.  After initial concern, I decided to use existing social networks to publicise events, so there's now a &lt;a href="http://www.facebook.com/group.php?gid=2403962697"&gt;Facebook group&lt;/a&gt;, a &lt;a href="http://icanhaz.com/linkedinsgd"&gt;LinkedIn group&lt;/a&gt;, an &lt;a href="http://upcoming.yahoo.com/group/2528/"&gt;upcoming.org group&lt;/a&gt; and a &lt;a href="http://groups.google.com/group/sussex-geek-dinner"&gt;Google groups group&lt;/a&gt;. Hopefully that should cover everyone.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=YuAthU"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=YuAthU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=6iLi98F"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=6iLi98F" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=luEdbAF"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=luEdbAF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/258877945" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F03%2Fsussex-geek-dinner.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/03/sussex-geek-dinner.aspx</feedburner:origLink></item><item><title>Pulling data from Excel</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/242291976/pulling-data-from-excel.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Wed, 27 Feb 2008 13:57:22 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-6992860984404369922</guid><description>I spent much of today pulling data from Excel to put into SQL Server tables.  The data was pretty well formatted, but each row of spreadsheet data traverses many database tables.&lt;br /&gt;&lt;br /&gt;I saved the spreadsheet to CSV, and then used my trusty friend, the &lt;a href="http://secretgeek.net/wscg.htm"&gt;world's simplest code generator (javascript edition)&lt;/a&gt;, to generate SQL statements from the many rows of CSV which I pasted into SQL Manager, e.g.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;INSERT INTO People (FirstName, LastName) VALUES ('$2', '$3')&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Some of them became quite convoluted, as once I'd inserted rows into the People table, I had to look up the IDs for the link tables.  Also, there were a couple of Irish names with apostrophes in them, so I used a regular expression to double them up:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;~(:Wh)'~([,|:Wh]|\))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;n.b. I think this is a Visual Studio style regex, as it seems a little different to what I vaguely remember (&lt;a href="http://harriyott.com/2007/05/regular-expressions-sorry-have-we-met.aspx"&gt;not that I do remember, that is&lt;/a&gt;).
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=mGt2ER"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=mGt2ER" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=JN8oWCE"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=JN8oWCE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=asl5kEE"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=asl5kEE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/242291976" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F02%2Fpulling-data-from-excel.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/02/pulling-data-from-excel.aspx</feedburner:origLink></item><item><title>Tip - using units of measure</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/242003516/tip-using-units-of-measure.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Wed, 27 Feb 2008 03:39:30 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-1942796762627303044</guid><description>When naming a variable or database column that is used to store a measure, include the units of measure in the name.  For example, instead of calling a column &lt;em&gt;Height&lt;/em&gt;, call it &lt;em&gt;HeightInInches&lt;/em&gt;.  This prevents misunderstandings in future maintenance.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=KAFc1s"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=KAFc1s" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=oPT2SjE"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=oPT2SjE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=xtNcwNE"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=xtNcwNE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/242003516" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F02%2Ftip-using-units-of-measure.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/02/tip-using-units-of-measure.aspx</feedburner:origLink></item><item><title>Lines of code != running time</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/239392237/lines-of-code-running-time.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 22 Feb 2008 06:38:06 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-5934124433289007521</guid><description>I've just realised I do a bizarre thing in my subconscious when I'm coding.  Now I'm all .NET 3.5, I've been writing code like:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;feeds.ForEach(f =&gt; ProcessFeed(f));&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;One line of code instead of the usual four (OK, so two lines were the curly brackets) to write a foreach loop.&lt;br /&gt;&lt;br /&gt;Now the thing is, I've unwittingly felt like the code now runs faster because the method is shorter.  Of course that isn't true, but having nicer, shorter, eleganter, maintainabler code feels like it should be more efficient too.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=MqlHBE"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=MqlHBE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=GUWiehE"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=GUWiehE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=OB4tynE"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=OB4tynE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/239392237" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F02%2Flines-of-code-running-time.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/02/lines-of-code-running-time.aspx</feedburner:origLink></item><item><title>Microsoft to buy Yahoo!?</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/227403441/microsoft-to-buy-yahoo.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 01 Feb 2008 12:52:01 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-5428130551036180995</guid><description>I've been using flickr, upcoming and del.icio.us since before they were bought by Yahoo, and I was a little nervous about them all joining my Yahoo profile.  Am I going to have to sign into these with my Microsoft Live account now?
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=y2cwgb"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=y2cwgb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=aX6xNYE"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=aX6xNYE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=AzHAU3E"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=AzHAU3E" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/227403441" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F02%2Fmicrosoft-to-buy-yahoo.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/02/microsoft-to-buy-yahoo.aspx</feedburner:origLink></item><item><title>SQL CLR - System.InvalidOperationException: The context connection is already in use.</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/220470876/sql-clr-systeminvalidoperationexception.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Mon, 21 Jan 2008 11:07:43 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-795260041616372845</guid><description>I'm now writing stored procedures in C#, on the SQL CLR, as I have some complex data mangling to do, which I've already solved in C# elsewhere.  Instead of converting the code to a long T-SQL stored procedure, I decided to stick it in as is.&lt;br /&gt;&lt;br /&gt;Anyway, I got an error message "System.InvalidOperationException: The context connection is already in use." when calling the stored procedure from a trigger. In the trigger, I defined a new connection, did some stuff and called the stored procedure:&lt;br /&gt;&lt;pre&gt;using (SqlConnection cn = new SqlConnection("context connection=true"))&lt;br /&gt;{&lt;br /&gt;    int stuffID = GetStuffIdFromDatabase(cn);&lt;br /&gt;    StoredProcedures.usp_GetMyStuff(stuffID);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;and in the stored procedure, I ran an update statement:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    SqlContext.Pipe.ExecuteAndSend(new SqlCommand("UPDATE Stuff SET [Description] = 'Updated from trigger' WHERE ID = " + stuffID));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I googled around for a while without much luck, but eventually realised that the &lt;code&gt;SqlContext.Pipe.ExecuteAndSend&lt;/code&gt; must be creating its own connection.  I moved the stored procedure call out of the using block, and it all worked fine.&lt;br /&gt;&lt;br /&gt;n.b. I posted this for the benefit of other people who will, in future, google for the error message.  If you are one of these people, I hope it helps you, because my regular readers have undoubtedly moved on by now...
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=njAblJ"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=njAblJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=KlWOpfD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=KlWOpfD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=EJJdDED"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=EJJdDED" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/220470876" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F01%2Fsql-clr-systeminvalidoperationexception.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/01/sql-clr-systeminvalidoperationexception.aspx</feedburner:origLink></item><item><title>Setting a column value to NULL in SQL Server Management Studio</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/220353032/setting-column-value-to-null-in-sql.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Mon, 21 Jan 2008 06:32:53 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-713360371118271965</guid><description>If you've opened a table in SSMS, and you want to clear an existing value to NULL, click on the value, and press &lt;strong&gt;Ctrl+0&lt;/strong&gt; (zero).
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=NXoLII"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=NXoLII" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=UUX6oiD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=UUX6oiD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=gNDAAYD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=gNDAAYD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/220353032" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F01%2Fsetting-column-value-to-null-in-sql.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/01/setting-column-value-to-null-in-sql.aspx</feedburner:origLink></item><item><title>First adventures with DLinq</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/218919132/first-adventures-with-dlinq.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 18 Jan 2008 09:29:16 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-7539364952026808560</guid><description>Hurrah! I get to use DLinq, therefore making me a &lt;strong&gt;DLinquent&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;[n.b. I googled for "dlinquent dlinq" to see if anyone else has thought of that pun before, and there were no results, which means I thought of it first, hence I am officially witty. Others have used the term dlinquent, but in a different context, thus they cannot justifiably diminish my wittiness.  If anyone else tries to pass off "DLinquent" as their own, please refer them to this blog post. Thanks.]&lt;br /&gt;&lt;br /&gt;OK, here goes.  Let me select a couple of hundred rows from a table and do something with them:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var musicians = from t in DB.Musicians&lt;br /&gt;                select t&lt;br /&gt;&lt;br /&gt;foreach (Musician musician in musicians)&lt;br /&gt;{&lt;br /&gt;    // Do a thing ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cool.  Now lets do some other stuff:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;foreach (Musician musician in musicians)&lt;br /&gt;{&lt;br /&gt;    foreach (Album album in musician.Albums)&lt;br /&gt;    {&lt;br /&gt;        // Do a thing ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wow. Even more cool. Actually, hang on, that took ages. Let's try that again with a stopwatch.  Hmm. 4 seconds, and there are only 200 musicians, and the database is on the local machine.&lt;br /&gt;&lt;br /&gt;Time for SQL profiler, and stepping through the code...&lt;br /&gt;&lt;br /&gt;OK, so the select doesn't actually &lt;em&gt;run&lt;/em&gt; the select against the database, it just defines it.  The foreach runs a select statement. So does the next foreach. Back to the top foreach again. Yup, another select against the database. And another, and another, and, er, hang on, it's &lt;strong&gt;fetching data one row at a time&lt;/strong&gt;. I think it would be quicker to get it all at the beginning, and do the stuff when it's all been fetched.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var musicians = from t in DB.Musicians&lt;br /&gt;                select t&lt;br /&gt;&lt;strong&gt;Array&amp;lt;Musician&amp;gt; musiciansArray = musicians.ToArray();&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;foreach (Musician musician in musiciansArray)&lt;br /&gt;{&lt;br /&gt;    foreach (Album album in musician.Albums)&lt;br /&gt;    {&lt;br /&gt;        // Do a thing ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That's a bit faster. It's fetched all the musicians when it built the array.  The albums are still being fetched one at a time though. [Please excuse me while I google...]&lt;br /&gt;&lt;br /&gt;Aha! Right, try again.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;DataLoadOptions loadOptions = new DataLoadOptions();&lt;br /&gt;loadOptions.LoadWith&lt;Musicians&gt;(m =&gt; m.Albums);&lt;br /&gt;DB.LoadOptions = loadOptions;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;var musicians = from t in DB.Musicians&lt;br /&gt;                select t&lt;br /&gt;Array&amp;lt;Musician&amp;gt; musiciansArray = musicians.ToArray();&lt;br /&gt;&lt;br /&gt;foreach (Musician musician in musiciansArray)&lt;br /&gt;{&lt;br /&gt;    foreach (Album album in musician.Albums)&lt;br /&gt;    {&lt;br /&gt;        // Do a thing ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Brilliant. Now the albums are loaded at the same time as the musicians, right up front.  Down to two hundredths of a second.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=uaFRHy"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=uaFRHy" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=ug7WdjD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=ug7WdjD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=CHcjF5D"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=CHcjF5D" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/218919132" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F01%2Ffirst-adventures-with-dlinq.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/01/first-adventures-with-dlinq.aspx</feedburner:origLink></item><item><title>Backup Buddies</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/218276677/backup-buddies.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Thu, 17 Jan 2008 08:43:32 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-7293965678091278343</guid><description>OK, so I've just had a great idea. &lt;br /&gt;&lt;br /&gt;Consider Cyril, who I've been in sporadic touch with for the last 10 years or so.  We'd like to think that we were friends, but as we live so far apart, we only see each other every 10 years or so, and the rest of the time we phone or email. &lt;br /&gt;&lt;br /&gt;Cyril has lots of photos (3Gb) that he'll never want to lose. He's backed them all up to an external drive, so if his main hard drive breaks, he'll still have the photos.  However, if a Cessna 172 falls onto Cyril's house, and breaks both drives, he'll have no photos.  He might just get round to uploading them all to an ftp site somewhere, but in the mean time, he needs a &lt;span style="font-weight: bold;"&gt;backup buddy&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;What Cyril does is put all his photos in a password-protected zip file (so I can't sneak a peek), burns the zip file onto a DVD*, and sends it to me in the post.  When I get the DVD, I'll check that I can see the zip file, and then put the DVD in a safe place.  As I live 218 miles away from Cyril, when the plane lands in his lounge, the DVD won't be damaged, so I'll send him a copy for when he's found a new computer (and house. And plane).&lt;br /&gt;&lt;br /&gt;Clearly it's not the most robust solution, but it's a quick and cheap way for storing data that won't change.&lt;br /&gt;&lt;br /&gt;As it's my idea, I'm prepared to be a backup buddy for up to &lt;span style="font-weight: bold;"&gt;5&lt;/span&gt; people.  If you'd like me to keep a DVD or two safe for you in Uckfield, East Sussex, UK, then &lt;a href="http://harriyott.com/contact.aspx"&gt;send me an email&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;* Or a pen drive, or whatever.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=UaQCk3"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=UaQCk3" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=QeaJcBD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=QeaJcBD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=Sg0uA9D"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=Sg0uA9D" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/218276677" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F01%2Fbackup-buddies.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/01/backup-buddies.aspx</feedburner:origLink></item><item><title>Syncronising IDs across databases</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/218182570/syncronising-ids-across-databases.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Thu, 17 Jan 2008 05:20:29 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-2580182560646628251</guid><description>Let us suppose you have a customer, who has a website, which has a database. Let us also suppose that you have a local version of this website and database that you use for development and support.  Let us also suppose that you periodically update your database with data from the live site.&lt;br /&gt;&lt;br /&gt;Let us suppose (alright, that's the last time I'll say it) that since the last update, you have added rows to a table with an &lt;span style="font-weight: bold;"&gt;auto-incrementing ID column&lt;/span&gt; on your database, and the customer has done the same with her database.  When you next come to synchronise the databases, you have two different rows with ID 3948.  What to do?&lt;br /&gt;&lt;br /&gt;In SQL Server, the &lt;span style="font-weight: bold;"&gt;identity seed&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;identity increment&lt;/span&gt; both default to 1.  These can be changed to get around this problem.  Changing them both to 10 on the live database will mean that all rows will end in zero (10, 20, 30 ...).  On the development database, changing the seed to 5 and the increment to 10 will mean that all new rows will end in 5 (15, 25, 35 ...).&lt;br /&gt;&lt;br /&gt;When merging the two databases, the rows should slot nicely between each other. A nice side effect is that you can tell which site a row was added from by the last number in the ID.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=ddKRIH"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=ddKRIH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=dFQVzQD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=dFQVzQD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=QU1pm3D"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=QU1pm3D" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/218182570" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F01%2Fsyncronising-ids-across-databases.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/01/syncronising-ids-across-databases.aspx</feedburner:origLink></item><item><title>Breakpoint bug in Visual Studio 2008</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/217709004/breakpoint-bug-in-visual-studio-2008.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Wed, 16 Jan 2008 09:56:28 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-1161131410041597855</guid><description>I'm not sure if this is just my setup, but I've noticed a little buglet.  You can try this at home too. You just need Visual Studio 2008 and a .NET 3.5 C# project:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Using the mouse, position the cursor on a line of code (e.g. line 38)&lt;/li&gt;&lt;li&gt;Without changing the mouse position, click in the breakpoint margin on a different line of code (e.g. line 51).&lt;/li&gt;&lt;li&gt;Notice that the breakpoint appears on line 38, instead of the expected line 51.&lt;/li&gt;&lt;li&gt;Clicking again in line 51's margin removes the breakpoint on line 38.&lt;/li&gt;&lt;/ol&gt;A little annoying, as I tend to use the mouse for breakpoints more than the F9 key.&lt;br /&gt;&lt;br /&gt;[Tags:  &lt;a href="http://technorati.com/tag/visualstudio2008" rel="tag"&gt;visualstudio2008&lt;/a&gt; &lt;a href="http://technorati.com/tag/bug" rel="tag"&gt;bug&lt;/a&gt;]
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=sb2Qji"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=sb2Qji" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=SyrJCID"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=SyrJCID" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=0N4ZsfD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=0N4ZsfD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/217709004" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F01%2Fbreakpoint-bug-in-visual-studio-2008.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/01/breakpoint-bug-in-visual-studio-2008.aspx</feedburner:origLink></item><item><title>My next contract - a championship football club</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/217018502/my-next-contract-championship-football.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Tue, 15 Jan 2008 07:31:32 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-1210393466975920167</guid><description>Yesterday I started a new software consultancy contract for a championship football club. They are already using &lt;a href="http://matchmatix.com"&gt;MatchMatix&lt;/a&gt;, my own &lt;a href="http://en.wikipedia.org/wiki/Micro_ISV"&gt;micro-ISV&lt;/a&gt; software product, for analysing matches and players (in real time). For the next three months I'll be integrating this with a new database and intranet.&lt;br /&gt;&lt;br /&gt;As I have full control of the development process, I can choose my own development practices, including test-driven development.  It's been a while since I worked anywhere that encouraged TDD, and I'm really enjoying writing a unit test, and then making it pass, and then running the whole suite of tests, and checking they still pass.&lt;br /&gt;&lt;br /&gt;I'm also pleased to be using .NET 3.5, so I've rustled up some database access classes with sqlmetal, and I'm using DLinq to call them.  I'm planning some WPF action soon too.&lt;br /&gt;&lt;br /&gt;You'll be happy to know, that although I will be launching MatchMatix at some point in the near future, this blog won't start going all Joel on Software, and talking lots about the product.  If I do mention it, the focus will be on the related technology.  When it's appropriate, I'll start a blog on the MatchMatix site where I can trumpet its virtues.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=sT5SDz"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=sT5SDz" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=u4uvldD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=u4uvldD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=13LAPyD"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=13LAPyD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/217018502" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2008%2F01%2Fmy-next-contract-championship-football.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2008/01/my-next-contract-championship-football.aspx</feedburner:origLink></item><item><title>Visual Studio 2008 Snippets</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/195777955/visual-studio-2008-snippets.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Wed, 05 Dec 2007 16:52:50 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-4136332222893616846</guid><description>In Visual Studio 2005, there was a handy snippet to generate a property, which included a private variable and a public get and set, appropriately coded.  By typing &lt;code&gt;prop&lt;/code&gt; and pressing tab, you got the following, which helped you choose the names:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://harriyott.com/uploaded_images/prop2005-704067.Png" alt="Snippet for Visual Studio 2005 properties" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;With VS2008, there is a handy new feature, automatic properties, that work in the same way, but don't need the private member, the return or the assignment.  This too has a snippet:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://harriyott.com/uploaded_images/prop2008-736679.Png" alt="Snippet for Visual Studio 2008 properties" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Cool.  What's also cool is that you can compile .NET 2.0 projects in VS2008 as well as 3.0 and 3.5 without switching IDEs.  So, whilst working on my .NET 2.0 project, I typed &lt;code&gt;prop&lt;/code&gt; and tabbed as usual, and got the new snippet.  Which didn't compile. A nice touch would have been to have different snippets for different framework versions, automatically selected by the version the project was set to.  I'm not sure whether to call this a bug or not, but it is certainly slightly irksome.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=Kcyx1E"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=Kcyx1E" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=S9pqTVC"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=S9pqTVC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=Hv67g3C"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=Hv67g3C" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/195777955" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2007%2F12%2Fvisual-studio-2008-snippets.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2007/12/visual-studio-2008-snippets.aspx</feedburner:origLink></item><item><title>Cubeworks are hiring</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/185300419/cubeworks-are-hiring.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Thu, 15 Nov 2007 10:49:25 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-4826990298753459268</guid><description>&lt;a href="http://cubeworks.co.uk"&gt;Cubeworks&lt;/a&gt;, where I am currently contracting, are looking to recruit an ASP.NET / C# web developer.  &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cubeworks.co.uk/assets/images/cubeworks_logo.gif" alt="Cubeworks' logo" /&gt;&lt;br /&gt;&lt;br /&gt;I'm &lt;a href="http://harriyott.com/2007/10/what-simon-did-next.aspx"&gt;really enjoying working here&lt;/a&gt;, which is why I'm letting you know about the role.  Full job details on &lt;a href="http://www.wiredsussex.com/jobs/Vacancy.asp?Item=4878"&gt;Wired Sussex&lt;/a&gt;.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=rpHVZ6"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=rpHVZ6" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=7wPj90B"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=7wPj90B" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=5Mj93RB"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=5Mj93RB" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/185300419" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2007%2F11%2Fcubeworks-are-hiring.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2007/11/cubeworks-are-hiring.aspx</feedburner:origLink></item><item><title>What do you call a woman with a name on her head?</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/183615907/what-do-you-call-woman-with-name-on-her.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Mon, 12 Nov 2007 09:10:43 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-5858672723975475582</guid><description>Monica.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=do9ijX"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=do9ijX" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=EdqLPpB"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=EdqLPpB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=jiAwsIB"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=jiAwsIB" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/183615907" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2007%2F11%2Fwhat-do-you-call-woman-with-name-on-her.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2007/11/what-do-you-call-woman-with-name-on-her.aspx</feedburner:origLink></item><item><title>London Girl Geek Dinners on Woman's Hour</title><link>http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~3/182412738/london-girl-geek-dinners-on-womans-hour.aspx</link><author>noreply@blogger.com (Simon)</author><pubDate>Fri, 09 Nov 2007 16:28:41 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7937700.post-434061689388966063</guid><description>My wife mentioned in passing that she listened to Woman's Hour on Radio 4 this morning, and there was an article about the &lt;a href="http://www.londongirlgeekdinners.co.uk/"&gt;London girl geek dinners&lt;/a&gt;, interviewing the organiser and hostess, the lovely &lt;a href="http://www.sarahblow.com"&gt;Sarah Blow&lt;/a&gt;.  I thought Sarah came across very well, and it shows what a good job she's done, not only organising the London events, but also being involved with starting girl geek dinners in other areas.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.technet.com/eileen_brown/"&gt;Eileen Brown&lt;/a&gt;, who I've known of for years, but never met, was interviewed too, and spoke about women's roles in the IT industry.  &lt;br /&gt;&lt;br /&gt;Despite the piece being slightly patronising ("it may only be a matter of time before the world sees the first female Bill Gates"), it was a good overview to raise the profile both of the event, and of women in technology.  You can listen to it on the &lt;a href="http://www.bbc.co.uk/radio/aod/radio4_aod.shtml?radio4/womanshourdrama_fri"&gt;BBC website&lt;/a&gt; for the next 6 days, just shy of 15 minutes into the show.
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?a=x3iAzy"&gt;&lt;img src="http://feeds.feedburner.com/~a/harriyott/simonssoftwarestuff?i=x3iAzy" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=F57wmNB"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=F57wmNB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?a=hBBeAkB"&gt;&lt;img src="http://feeds.feedburner.com/~f/harriyott/simonssoftwarestuff?i=hBBeAkB" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/harriyott/simonssoftwarestuff/~4/182412738" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=harriyott/simonssoftwarestuff&amp;itemurl=http%3A%2F%2Fharriyott.com%2F2007%2F11%2Flondon-girl-geek-dinners-on-womans-hour.aspx</feedburner:awareness><feedburner:origLink>http://harriyott.com/2007/11/london-girl-geek-dinners-on-womans-hour.aspx</feedburner:origLink></item><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=harriyott/simonssoftwarestuff</feedburner:awareness></channel></rss>
