<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-15675557</id><updated>2010-02-21T10:22:37.756Z</updated><title type='text'>the Technophile</title><subtitle type='html'>the blog that loves technology...frequently.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default?start-index=26&amp;max-results=25'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15675557.post-141397782493238745</id><published>2008-05-10T12:14:00.002+01:00</published><updated>2008-05-10T12:19:15.053+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axosoft'/><category scheme='http://www.blogger.com/atom/ns#' term='ontime'/><category scheme='http://www.blogger.com/atom/ns#' term='support'/><category scheme='http://www.blogger.com/atom/ns#' term='incident management'/><category scheme='http://www.blogger.com/atom/ns#' term='godaddy'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title type='text'>Relocation, relocation!</title><content type='html'>I have just completed relocating two of my client's web applications from one service provider in the US to another. It was amazingly painless.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.upthecreek-in-kingswear.co.uk/"&gt;Up the creek!&lt;/a&gt; and &lt;a href="http://www.tetburyhistory.com/"&gt;The History of Tetbury Society&lt;/a&gt; are now hosted by GoDaddy.Com.&lt;br /&gt;&lt;br /&gt;If you are looking for some good quality web hosting, I can recommend &lt;a href="http://www.godaddy.com/" target="_blank"&gt;GoDaddy.Com&lt;/a&gt; - they do have a whacky, multicoloured, loud, very un-British site :-) but good service and support!&lt;br /&gt;&lt;br /&gt;Also, if you happen to be looking for a bug tracking / incident management system, go to &lt;a href="http://www.axosoft.com/" target="_blank"&gt;AxoSoft.com&lt;/a&gt; and look at OnTime. It's free for a single user and it's neat and easy to install and use. I've used it on big installations, it's good for home use too...!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-141397782493238745?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/141397782493238745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=141397782493238745&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/141397782493238745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/141397782493238745'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2008/05/relocation-relocation.html' title='Relocation, relocation!'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-4028197077520698999</id><published>2008-04-28T23:34:00.001+01:00</published><updated>2008-04-28T23:37:57.672+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='tvodmonitor'/><title type='text'>TVODMonitor on Vista</title><content type='html'>I have been doing some testing on Vista and there are a couple of issues at the moment. I am currently building a Vista test system so that I can get to the bottom of these issues. I have also created an interim version that I hope will cure some of the problems and that is being tested now. I have some ideas for the best way to solve this - as soon as I have an update, I will post it here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-4028197077520698999?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/4028197077520698999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=4028197077520698999&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/4028197077520698999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/4028197077520698999'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2008/04/tvodmonitor-on-vista.html' title='TVODMonitor on Vista'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-6055952275605448496</id><published>2008-01-09T21:50:00.009Z</published><updated>2008-03-26T11:01:50.512Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='khost'/><category scheme='http://www.blogger.com/atom/ns#' term='sky'/><category scheme='http://www.blogger.com/atom/ns#' term='kservice'/><category scheme='http://www.blogger.com/atom/ns#' term='sky anytime'/><category scheme='http://www.blogger.com/atom/ns#' term='on-demand'/><category scheme='http://www.blogger.com/atom/ns#' term='iplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='bbc'/><category scheme='http://www.blogger.com/atom/ns#' term='beeband4monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='kontiki'/><category scheme='http://www.blogger.com/atom/ns#' term='4od'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='tvodmonitor'/><category scheme='http://www.blogger.com/atom/ns#' term='tv'/><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><category scheme='http://www.blogger.com/atom/ns#' term='channel 4'/><title type='text'>Do you use iPlayer or 4oD to download TV programs?</title><content type='html'>&lt;a href="http://odmonitor.blogspot.com/"&gt;&lt;span style="color:#ff0000;"&gt;The TVODMonitor has moved to its own site...click here to go to the new TVODMonitor site.&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-6055952275605448496?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/6055952275605448496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=6055952275605448496&amp;isPopup=true' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/6055952275605448496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/6055952275605448496'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2008/01/do-you-use-iplayer-or-4od-to-download.html' title='Do you use iPlayer or 4oD to download TV programs?'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-7752012150133213433</id><published>2007-12-02T16:34:00.000Z</published><updated>2007-12-02T17:21:13.937Z</updated><title type='text'>Organize your TVersity downloads</title><content type='html'>If you subscribe to a feed in TVersity, it puts all your downloaded files into C:\Program Files\TVersity\Media Server\data\download.&lt;br /&gt;This folder just fills up with stuff. If, like me, you don't want TVersity to fill up your C: drive with PodCasts that it has downloaded, you can easily organise them using a batch file and the Windows Scheduler.&lt;br /&gt;First, create a batch file called 'copypodcasts.bat' with this in it:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#009900;"&gt;move "C:\Program Files\TVersity\Media Server\data\download\*.mp?" "D:\PodCast Library"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#ff0000;"&gt;del "C:\Program Files\TVersity\Media Server\data\download\*.*" /f /q&lt;/span&gt;&lt;br /&gt;If you don't know how to create a batch file, it's simple: open Notepad and paste the above text in, then save the file as 'copypodcasts.bat'. I have created a folder called c:\scripts to keep all my batch files in.&lt;br /&gt;Now, note that there are 2 important things here; firstly, where are you putting the files? I copy mine to a folder called PodCast Library on the D: drive, just because that's where I store stuff. You can put them anywhere that you can copy files to, though. Note that I am using &lt;span style="color:#ff0000;"&gt;&lt;strong&gt;move &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;to move the files I want and the files I want are "*.mp?". This will match any MP file, like MPG, MP3, MP4 (but not MPEG!, you would need to use "*.MP*" for that). The second thing is the line in red - it &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;DELETES &lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;the contents of the TVersity download folder to reclaim the space. This is harmless to TVersity, but don't change the path in case you end up wiping anything important. If this worries you, you can leave this line out. The previous line will move the PodCast files out anyway.&lt;/span&gt;&lt;br /&gt;You need to check that the PodCast (or whatever it is you are downloading) is an MP-something file. The could also be AVI, FLAC, OGG, all sorts of things so you might need to add duplicate "move" lines to move them. For example, to move all the OGG files:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#009900;"&gt;move "C:\Program Files\TVersity\Media Server\data\download\*.ogg" "D:\PodCast Library"&lt;/span&gt;&lt;br /&gt;The next thing you do is add the batch file to Windows Scheduler, so go to the Start menu then Accessories\System Tools\Scheduled Tasks. Click on 'Add Scheduled Task'.&lt;br /&gt;Fill in the "run" box with the name of the batch file, in this example it is:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#009900;"&gt;C:\scripts\copypodcasts.bat&lt;/span&gt;&lt;br /&gt;Fill in the "start in" box: C:\scripts. Then choose a user to run as (probably your own). Then on the "Schedule" tab, set it to run every day at maybe 1AM if your PC is always on, or choose "At system startup".&lt;br /&gt;That's it - now all your TVersity downloaded PodCasts will be moved each day, and if you have included the "del" line, the folder will be cleared down afterwards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-7752012150133213433?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/7752012150133213433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=7752012150133213433&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/7752012150133213433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/7752012150133213433'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/12/organize-your-tversity-downloads.html' title='Organize your TVersity downloads'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-3308503785147939479</id><published>2007-11-22T23:59:00.001Z</published><updated>2007-11-23T00:04:55.977Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='test driven'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='database testing'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='dbunit'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='yagni'/><category scheme='http://www.blogger.com/atom/ns#' term='unit'/><category scheme='http://www.blogger.com/atom/ns#' term='nunit'/><title type='text'>more Script harness</title><content type='html'>Well, I ran a few tests on the Script Harness and found a list of about 15 things that I need / want to do before releasing it. I want to make it simple to get started with, so that means supplying test data and a test database and building some help files and instructions. I think I will release Ver 1 without the command line option (that means it cannot be used for automated testing, but hey!) and then add that in the next release...&lt;br /&gt;It's funny, when you start looking, you think you are finished and you are not! However, some heavy application of &lt;a href="http://c2.com/xp/YouArentGonnaNeedIt.html"&gt;YAGNI &lt;/a&gt;should get the code out the door soon!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-3308503785147939479?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/3308503785147939479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=3308503785147939479&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/3308503785147939479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/3308503785147939479'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/11/more-script-harness.html' title='more Script harness'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-3243367018430673276</id><published>2007-11-19T23:21:00.000Z</published><updated>2008-12-09T06:16:42.812Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='database testing'/><category scheme='http://www.blogger.com/atom/ns#' term='dbunit'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='unit'/><category scheme='http://www.blogger.com/atom/ns#' term='nunit'/><title type='text'>Unit Testing Databases</title><content type='html'>Okay, if it's a database, it's not 'Unit Testing' but arguments about Unit/Component/Functional testing aside, here's something that might interest you.&lt;br /&gt;Do you ever have the problem that database test data tends to change, tests break and because you need to change and recompile the test, it's a pain to fix them?&lt;br /&gt;I have been working on a harness that 'leverages' a component I first started work on a few years ago that helps make this easier. This component, called 'ScriptHarness.XmlQuery' takes an SQL Server query in a simple Xml format, along with an expected result test. The component runs the query and then compares the real query results with the expected result. It returns an object containing the results of the test.&lt;br /&gt;What this means is that you can specify a suite of database tests, run your test code, call the component and pass in the test Xml and the component will independently verify the database state and tell you if the test passes.&lt;br /&gt;This is something that you often don't want to do in code - &lt;strong&gt;for example,&lt;/strong&gt; you can test that calling a particular method writes a particular result from a lookup table to the database. As the test is in Xml, you can edit the test if the lookup table changes without having to recompile anything. This is really useful for testing anything that writes to a database (I have found it very useful for testing BizTalk orchestrations are performing as expected).&lt;br /&gt;Now, that is not actually what this post is about. What I am doing at the moment is writing a WinForms and command line harness for the component. As you can see from the screen shots, it looks a bit nUnit and acts pretty much the same way. It also has a simple script management tool built in (shown on the second screen shot). You can create a set of test scripts and roll them up into a 'project'. You can then run the project (from the form or the command line) and verify that your database is in the correct state.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dr53jRWT01A/R0IhJh7UFDI/AAAAAAAAAN4/h8jOoHs9MKk/s1600-h/sh1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5134702972765475890" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_dr53jRWT01A/R0IhJh7UFDI/AAAAAAAAAN4/h8jOoHs9MKk/s320/sh1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Fig 1. Example of test run&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dr53jRWT01A/R0IhJx7UFEI/AAAAAAAAAOA/4EWD7cbZARE/s1600-h/sh2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5134702977060443202" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_dr53jRWT01A/R0IhJx7UFEI/AAAAAAAAAOA/4EWD7cbZARE/s320/sh2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Fig 2. Script &amp;amp; Project Editor&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dr53jRWT01A/R0IbwB7UFCI/AAAAAAAAANw/VzFFersGH08/s1600-h/sh1.png"&gt;&lt;/a&gt;Here's an example of some tests; note that there is support for checking the database state (number of rows, for example) and support for user defined functions written in C#. These are compiled on the fly, during execution of the test, so that you can modify the test query without recompiling the test that uses it. You can also store context information between calls and refer to the results of one query in another, either as a result to compare against or part of the select statment. There are also 'virtual' columns that can be used simply to evaluate the results of a user defined function:&lt;br /&gt;&amp;lt;!-- test case for testing a successful query--&amp;gt;&lt;br /&gt;&amp;lt;sql connectionname="testDatabase"&amp;gt;&lt;br /&gt; &amp;lt;query resultsetname="test"&amp;gt;&lt;br /&gt;  &amp;lt;select&amp;gt;TestInt, TestString FROM [ScriptHarness.XmlQuery.TestDB].[dbo].[tblTest] WHERE TestInt = 1&amp;lt;/select&amp;gt; &lt;br /&gt; &amp;lt;/query&amp;gt;&lt;br /&gt; &amp;lt;expectedresults minrowcount="1" maxrowcount="1"&amp;gt;&lt;br /&gt;  &amp;lt;row&amp;gt;&lt;br /&gt;   &amp;lt;column name="TestInt"&amp;gt;1&amp;lt;/column&amp;gt;&lt;br /&gt;   &amp;lt;column name="TestString"&amp;gt;test 1&amp;lt;/column&amp;gt;&lt;br /&gt;  &amp;lt;/row&amp;gt;&lt;br /&gt; &amp;lt;/expectedresults&amp;gt;&lt;br /&gt;&amp;lt;/sql&amp;gt;&lt;br /&gt;&lt;br /&gt;Here's an example of a User defined function being called:&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- test case for testing a successful query--&amp;gt;&lt;br /&gt;&amp;lt;sql connectionname="testDatabase"&amp;gt;&lt;br /&gt; &amp;lt;query resultsetname="test"&amp;gt;&lt;br /&gt;  &amp;lt;select&amp;gt;TestInt, TestString FROM [ScriptHarness.XmlQuery.TestDB].[dbo].[tblTest] WHERE TestInt = 1&amp;lt;/select&amp;gt;&lt;br /&gt; &amp;lt;/query&amp;gt;&lt;br /&gt; &amp;lt;expectedresults&amp;gt;&lt;br /&gt;  &amp;lt;row&amp;gt;&lt;br /&gt;   &amp;lt;column name="TestInt"&amp;gt;?AddOne(0)&amp;lt;/column&amp;gt;&lt;br /&gt;  &amp;lt;/row&amp;gt;&lt;br /&gt; &amp;lt;/expectedresults&amp;gt;&lt;br /&gt;&amp;lt;/sql&amp;gt;&lt;br /&gt;&lt;br /&gt;Here is some sample output:&lt;br /&gt;&lt;br /&gt;&amp;lt;xmlqueryresults&amp;gt;&lt;br /&gt; &amp;lt;query&amp;gt;SELECT TestInt, TestString FROM [ScriptHarness.XmlQuery.TestDB].[dbo].[tblTest] WHERE TestInt = 1&amp;lt;/query&amp;gt;&lt;br /&gt; &amp;lt;results&amp;gt;&lt;br /&gt;  &amp;lt;minrowcount status="PASSED"&amp;gt;&lt;br /&gt;   &amp;lt;expected&amp;gt;[1]&amp;lt;/expected&amp;gt;&lt;br /&gt;   &amp;lt;actual&amp;gt;[1]&amp;lt;/actual&amp;gt;&lt;br /&gt;  &amp;lt;/minrowcount&amp;gt;&lt;br /&gt;  &amp;lt;maxrowcount status="PASSED"&amp;gt;&lt;br /&gt;   &amp;lt;expected&amp;gt;[1]&amp;lt;/expected&amp;gt;&lt;br /&gt;   &amp;lt;actual&amp;gt;[1]&amp;lt;/actual&amp;gt;&lt;br /&gt;  &amp;lt;/maxrowcount&amp;gt;&lt;br /&gt;  &amp;lt;row number="1"&amp;gt;&lt;br /&gt;  &amp;lt;column name="TestInt" status="PASSED" ignorecase="False"&amp;gt;&lt;br /&gt;   &amp;lt;expected&amp;gt;[1]&amp;lt;/expected&amp;gt;&lt;br /&gt;   &amp;lt;actual&amp;gt;[1]&amp;lt;/actual&amp;gt;&lt;br /&gt;  &amp;lt;/column&amp;gt;&lt;br /&gt;  &amp;lt;column name="TestString" status="PASSED" ignorecase="False"&amp;gt;&lt;br /&gt;   &amp;lt;expected&amp;gt;[test 1]&amp;lt;/expected&amp;gt;&lt;br /&gt;   &amp;lt;actual&amp;gt;[test 1]&amp;lt;/actual&amp;gt;&lt;br /&gt;  &amp;lt;/column&amp;gt;&lt;br /&gt;  &amp;lt;/row&amp;gt;&lt;br /&gt; &amp;lt;/results&amp;gt;&lt;br /&gt;&amp;lt;/xmlqueryresults&amp;gt;&lt;br /&gt;&lt;br /&gt;I haven't released this yet, it's not quite finished - I am just finishing the command line version right now, but if you like the look of it, leave me a comment! It should be ready for download (for free, of course) in a few days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-3243367018430673276?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/3243367018430673276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=3243367018430673276&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/3243367018430673276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/3243367018430673276'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/11/unit-testing-databases.html' title='Unit Testing Databases'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dr53jRWT01A/R0IhJh7UFDI/AAAAAAAAAN4/h8jOoHs9MKk/s72-c/sh1.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-8093553622112613668</id><published>2007-11-19T22:56:00.000Z</published><updated>2007-11-19T23:07:53.557Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wmp11'/><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='mp 101'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='tversity'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Netgear MP101, Windows Media Player 11, TVersity and all that jazz...</title><content type='html'>I get a lot of hits on my blog from people looking for information on the NetGear MP101 digital music player and a lot looking for information on connecting up to the Media Server built into WMP 11. Now, basically, to share from WMP 11, you just go to Tools\Options then the Library tab and click on the 'Configure Sharing' button.&lt;br /&gt;However, if you are looking to share media from a server (and it's not Windows Home Server) have a look at the excellent and entirely free TVersity product at &lt;a href="http://www.tversity.com/"&gt;www.tversity.com&lt;/a&gt; . I have been using this for ages and it's cool, it does an excellent job of sharing media to anything at all. It cross-codes your media so you can play stuff on devices that don't support the native format and it runs as a service.&lt;br /&gt;That means that if your media PC is up - just up, not even logged on - you can browse to your media. A lot of people actually want to do that, and end up messing about with WMP 11 and having to log on and stuff.&lt;br /&gt;The reason I say 'not Windows Home Server' is only because I haven't seen it yet, so TVersity might be cool on that too...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-8093553622112613668?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/8093553622112613668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=8093553622112613668&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/8093553622112613668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/8093553622112613668'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/11/netgear-mp101-windows-media-player-11.html' title='Netgear MP101, Windows Media Player 11, TVersity and all that jazz...'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-4238959975100768803</id><published>2007-10-01T17:09:00.001+01:00</published><updated>2007-10-01T17:09:06.230+01:00</updated><title type='text'>I'm going outside; I may be some time.</title><content type='html'>Actually, blogging stopped while life took over. I&amp;#39;ve been busy lately failing. You know, have a good idea, try it, realise it ain&amp;#39;t gonna work, wallow in despair...try again. One of the biggest hurdles for me (and many other people) is the fear of failure. I only want to start projects that I know will be successful. Of course, that&amp;#39;s not possible. No matter how you plan or what you do, you don&amp;#39;t know it will work and failure is as much part of success as Wasabi is part of Sushi :-) so fail early and fail often (link soon!) - the agile mantra - also applys to life. Wow. Deep. But it&amp;#39;s true - edison&amp;#39;s many, many faiiled light bulb elements. Dyson&amp;#39;s many failed vacuum cleaner designs, all were just a part of the process of achieving success. Knowing how to deal with failure well is a better tool for success than many other skills. More on this exciting topic soon! (I have failed to finish this article...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-4238959975100768803?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/4238959975100768803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=4238959975100768803&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/4238959975100768803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/4238959975100768803'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/10/im-going-outside-i-may-be-some-time.html' title='I&apos;m going outside; I may be some time.'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-361933788879514148</id><published>2007-05-20T22:57:00.000+01:00</published><updated>2007-05-20T23:01:02.211+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mambo 4.6.2 cannot log in on administrator'/><title type='text'>Upgrading Mambo to 4.6.2 - Please complete the username and password fields</title><content type='html'>If you are upgrading to mambo server CMS version 4.6.2 and keep getting a popup message:&lt;br /&gt;"Please complete the username and password fields" when you try to log in as administrator, then  it takes you back to the logon screen - edit your configuration.php in the root mambo folder (using FTP!) and set&lt;br /&gt;&lt;br /&gt;$mosConfig_register_globals = '1';&lt;br /&gt;&lt;br /&gt;Dammit. It was easy once I worked it out but it took hours!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-361933788879514148?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/361933788879514148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=361933788879514148&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/361933788879514148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/361933788879514148'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/05/upgrading-mambo-to-462-please-complete.html' title='Upgrading Mambo to 4.6.2 - Please complete the username and password fields'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-6554674622665203296</id><published>2007-04-21T23:19:00.000+01:00</published><updated>2007-04-21T23:31:06.141+01:00</updated><title type='text'>Bumped to the new blogger and finished something too!</title><content type='html'>Hey, Myers-Briggs! Who says I'm not a completer finisher...?&lt;br /&gt;I finished &lt;a href="http://www.upthecreek-in-kingswear.co.uk/" target="_blank"&gt;this site &lt;/a&gt;the other day, yeah, I know it's just a web site for accomodation in a nice place here in the UK but it uses Ajax. Okay, it uses the Microsoft "Ajax for Dummies" library but it is sooo easy to do and if you investigate a bit, you can do funky graphics and stuff. Apart from that, I like it. I wrote it. I wonder if I can get a technorati tag out of it...?&lt;br /&gt;&lt;br /&gt;&lt;div class="techtags"&gt;Tech Tags: &lt;a href="http://technorati.com/tag/kingswear" rel="tag" class="techtag"&gt;kingswear&lt;/a&gt; &lt;a href="http://technorati.com/tag/ajax" rel="tag" class="techtag"&gt;ajax&lt;/a&gt; &lt;a href="http://technorati.com/tag/muradjames" rel="tag" class="techtag"&gt;muradjames&lt;/a&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-6554674622665203296?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/6554674622665203296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=6554674622665203296&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/6554674622665203296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/6554674622665203296'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/04/bumped-to-new-blogger-and-finished.html' title='Bumped to the new blogger and finished something too!'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-117015816190873845</id><published>2007-01-30T11:56:00.000Z</published><updated>2007-01-30T11:56:01.913Z</updated><title type='text'>Coming soon to this blog: use Google Desktop as a server based enterprise search engine</title><content type='html'>&lt;p&gt;&lt;em&gt;How to use Google Desktop as a&amp;nbsp;server-based enterprise search engine, access the search page remotely through a browser&amp;nbsp;and integrate it with the Internet Explorer 7 search box.&lt;/em&gt; &lt;/p&gt; &lt;p&gt;This allows you to search all the documents, mails, videos, mp3s, etc. on one PC from another which means that you can create a library server. It also shows you how to include the local search URL in the IE7 toolbar search box...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-117015816190873845?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/117015816190873845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=117015816190873845&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/117015816190873845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/117015816190873845'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/01/coming-soon-to-this-blog-use-google.html' title='Coming soon to this blog: use Google Desktop as a server based enterprise search engine'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-117015740702394404</id><published>2007-01-30T11:43:00.000Z</published><updated>2007-01-30T11:43:27.050Z</updated><title type='text'>The cult of Unhelp</title><content type='html'>&lt;p&gt;After a well earned hiatus - when, by the way, I was actually writing code and starting a new business with &lt;a href="http://laurencetimms.com" target="_blank"&gt;Laurence Timms&lt;/a&gt; and &lt;a href="http://www.chuquetcollective.com/" target="_blank"&gt;theChuquetCollective,&lt;/a&gt; I have returned in the new year with some technical nuggets - coming soon - and the following observation on the Cult of Unhelp.&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8000"&gt;Unhelp&lt;/font&gt; - a word used to describe the moment when, whilst busy completing a difficult task and immersed in code, someone leans over and says "erm - is that meant to be there? Is that supposed to be spelt like that? Have you tried running it in debug mode? etc." It's "Unhelp" when you were &lt;em&gt;just about to do something &lt;/em&gt;and someone suggests it to you&lt;em&gt;. Unhelp &lt;/em&gt;- use it wisely.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-117015740702394404?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/117015740702394404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=117015740702394404&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/117015740702394404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/117015740702394404'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2007/01/cult-of-unhelp.html' title='The cult of Unhelp'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-116533159390520035</id><published>2006-12-05T15:13:00.000Z</published><updated>2007-11-19T23:21:27.329Z</updated><title type='text'>BizTalk 2004 - BizTalk Error - "(class) must be Xml serializable to be a message part type"</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;[Update 19th Nov 2007]&lt;br /&gt;&lt;/strong&gt;If you read below you'll see that I was really stumped with this problem. There was nothing available on the net and I finally, after lots of trial and much error, found out what the problem was. It's caused by a DLL missing in the GAC. Yep, that's all it is. In our case, in our BizTalk application, it's one of the 'Framework' DLLs (so that's where to look next time: note to self!) &lt;p&gt;So, find a machine with a BizTalk installation that works, open the GAC, alt-Print Screen it, paste it into Word and then compare it with the GAC on the machine that doesn't work... &lt;p&gt;Look carefully - something will be missing from the failing machine's GAC. It will be a DLL that exists as a dependency for one of the orchestrations. Please leave a comment if you find a nicer solution - there must be a GAC comparison tool out there, too! &lt;p&gt;--- &lt;p&gt;I have been getting this message whenever I tried to build my BizTalk 2004 project under VS 2003: &lt;p&gt;&lt;span style="font-family:Courier;"&gt;(class name) must be Xml serializable to be a message part type&lt;/span&gt; &lt;p&gt;This message appeared for all sorts of classes, including System.String. &lt;p&gt;I removed BizTalk 2004 Service Pack 2 and it fixed the problem… &lt;p&gt;I am still not sure why it happened but I cannot find any reference to this particular problem on teh Intarweb.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;[Update: 30th Jan 2007] &lt;/strong&gt;Removing BizTalk SP2 did &lt;em&gt;not&lt;/em&gt; fix it! I raised this with Microsoft support and they have a fix for it, but that fix is rolled up into Windows 2003 SP2, which I already have (so it's not a fix!) What has fixed it is completely removing BizTalk 2004 and all it's service packs, then reinstalling it. I've not had the problem since and I suspect it was a reference problem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-116533159390520035?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/116533159390520035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=116533159390520035&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/116533159390520035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/116533159390520035'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/12/biztalk-2004-biztalk-error.html' title='BizTalk 2004 - BizTalk Error - &amp;quot;(class) must be Xml serializable to be a message part type&amp;quot;'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-116195253824334931</id><published>2006-10-27T13:35:00.000+01:00</published><updated>2006-10-27T13:35:38.406+01:00</updated><title type='text'>Ceci n'est pas un Chuquet...</title><content type='html'>&lt;p&gt;I have been looking at &lt;a href="http://www.wikio.fr" target="_blank"&gt;wikio.fr&lt;/a&gt;&amp;nbsp;and I like it. Wikio is what we are doing with Chuquet, but with more focus on establishing a community around the information it provides. It's also in French and I was surprised by that. France has always been a bit of a "black hole" &amp;nbsp;of the Internet where the web competed against free legacy systems like Minitel and where the French government briefly made the transmission of encrypted data illegal (yes, any sort of encrypted data transmission). &lt;/p&gt; &lt;p&gt;It's also quite difficult to find news in French on the Interweb.&lt;/p&gt; &lt;p&gt;I am not certain that all the extras it provides actually add a great deal. I am not sure that I care what people who read the site vote as their top story, but perhaps that is something that people want. It's a loop we've been round a couple of times with Chuquet. If you haven't seen the new Chuquet, &lt;a href="http://chuquet.com.anaxanet.com/chuquet.aspx" target="_blank"&gt;it's here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;The new Chuquet is currently missing the Wikirefs and Flickr Wall that exist on the current version (at &lt;a href="http://www.chuquet.com"&gt;www.chuquet.com&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;These are things that people want. We have been asked to make sure that they are included in the new version by people who used them in the current version.&lt;/p&gt; &lt;p&gt;But ultimately, we don't know what people want until we try some stuff and they tell us.&amp;nbsp; Try &lt;a href="http://chuquet.com.anaxanet.com/" target="_blank"&gt;Chuquet 2 and tell us&lt;/a&gt; - is there any value in personalisation? Real value?&lt;/p&gt; &lt;p&gt;Tags: &lt;a href="http://en.wikipedia.org/wiki/Magritte" target="_blank" rel="tag"&gt;magritte&lt;/a&gt;, &lt;a href="http://technorati.com/tag/chuquet" target="_blank" rel="tag"&gt;Chuquet&lt;/a&gt;, &lt;a href="http://technorati.com/tag/wikio" target="_blank" rel="tag"&gt;wikio&lt;/a&gt;, &lt;a href="http://technorati.com/tag/meme" target="_blank" rel="tag"&gt;meme&lt;/a&gt;, &lt;a href="http://technorati.com/tag/memetracker" target="_blank" rel="tag"&gt;memetracker&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-116195253824334931?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/116195253824334931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=116195253824334931&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/116195253824334931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/116195253824334931'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/10/ceci-nest-pas-un-chuquet.html' title='Ceci n&apos;est pas un Chuquet...'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115987304575753060</id><published>2006-10-03T11:57:00.000+01:00</published><updated>2006-10-03T14:01:54.293+01:00</updated><title type='text'>Encoding and decoding base 64 strings in C#</title><content type='html'>&lt;p&gt;I've just spent a bit of time poking about trying to find the best way to encode / decode a base 64 string in C#.&lt;/p&gt; &lt;p&gt;Base 64 encoding is used because it basically chucks away part of the ASCII table and uses 6 bits for each byte. The more you store, the more you save! It was originally devised to enable binary data to be sent across the early Internet where some routers stripped the high bits off the data (or something like that anyway!)&lt;/p&gt; &lt;p&gt;After a bit of tooling about, I think I have found that the best way to do base64 conversions. There are a number of encoding / decoding functions that support base64 arrays and strings, but the methods in System.Convert are by far the easiest to use and they all fit together nicely, you know, one returns a type that the next can use:&lt;/p&gt;&lt;pre&gt;&lt;font size="3"&gt;&lt;font color="#008080" size="2"&gt;&lt;p&gt;System.Convert&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.FromBase64CharArray();&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;System.Convert&lt;/font&gt;&lt;font size="2"&gt;.FromBase64String();&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;System.Convert&lt;/font&gt;&lt;font size="2"&gt;.ToBase64CharArray();&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;font color="#008080" size="2"&gt;System.Convert&lt;/font&gt;&lt;font size="2"&gt;.ToBase64String();&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;How exciting, fill yer boots!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115987304575753060?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115987304575753060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115987304575753060&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115987304575753060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115987304575753060'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/10/encoding-and-decoding-base-64-strings.html' title='Encoding and decoding base 64 strings in C#'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115952118604373482</id><published>2006-09-29T10:13:00.000+01:00</published><updated>2006-09-29T10:13:06.093+01:00</updated><title type='text'>Not getting things done?</title><content type='html'>&lt;p&gt;Once in a while, I read a really interesting article about how to get stuff done - Rands "&lt;a href="http://www.randsinrepose.com/archives/2006/09/25/trickle_theory.html" target="_blank"&gt;Trickle Theory&lt;/a&gt;" is one such article.&lt;/p&gt; &lt;p&gt;As a process approach, it contains elements of David Allens "&lt;a href="http://www.43folders.com/2004/09/08/getting-started-with-getting-things-done/" target="_blank"&gt;Getting things done&lt;/a&gt;", which I am currently reading.&lt;/p&gt; &lt;p&gt;One of these days, I'll get round to implementing it - ah, the irony...&lt;/p&gt; &lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/gettingthingsdone"&gt;getting things done&lt;/a&gt;, &lt;a href="http://technorati.com/tag/irony"&gt;irony&lt;/a&gt;, &lt;a href="http://technorati.com/tag/gtd"&gt;gtd&lt;/a&gt;, &lt;a href="http://technorati.com/tag/rands" rel="tag"&gt;rands&lt;/a&gt;, &lt;a href="http://technorati.com/tag/processimprovement" rel="tag"&gt;process improvement&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115952118604373482?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115952118604373482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115952118604373482&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115952118604373482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115952118604373482'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/09/not-getting-things-done.html' title='Not getting things done?'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115892911791893813</id><published>2006-09-22T13:45:00.000+01:00</published><updated>2007-11-19T23:13:11.634Z</updated><title type='text'>Netgear MP101 and TVersity</title><content type='html'>&lt;p&gt;Updated 19/11/2007 - There's a bit more info here:&lt;a href="http://thetechnophile.blogspot.com/2007/11/netgear-mp101-windows-media-player-11.html"&gt;http://thetechnophile.blogspot.com/2007/11/netgear-mp101-windows-media-player-11.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Music was served in my house last night when my MP3 collection was finally made available to my MP101 using the lovely media server product from &lt;a href="http://www.tversity.com/"&gt;Tversity.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In case you haven't read the other post or are searching for guidance, the objective was simple - use my MP101 to play music from my music collection with a couple of caveats; the music must stay on the Windows 2003 server share and the media server must remain isolated from the Windows server, for security reasons. &lt;/p&gt;&lt;p&gt;What the latter caveat means is that my music collection is not held on the  media server - the media server is a separate box used to serve media, act as a Bluetooth gateway (so I can browse the Interweb from my phone / PDA without paying the mobile company) and expose web sites and stuff on the web.&lt;/p&gt;&lt;p&gt;If you want to use this configuration, it's as simple as:&lt;/p&gt;&lt;p&gt;1) Make sure that you have the &lt;a href="http://kbserver.netgear.com/products/mp101.asp"&gt;latest MP101 firmware installed (available from Netgear)&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2) Remove the Netgear media server - uninstall it, as it runs something as a service (and that means that it probably isn't quite as bad as I thought yesterday, but the interface is still pants (or pantos monstros if you prefer)).&lt;/p&gt;&lt;p&gt;3) Load the tversity server.&lt;/p&gt;&lt;p&gt;4) Make sure that you have access to your music share from the media server box.&lt;/p&gt;&lt;p&gt;5) Add the shared folder to tversity (follow their instructions).&lt;/p&gt;&lt;p&gt;6) Wait for tversity to update the tversity music database&lt;/p&gt;&lt;p&gt;7) Power up the MP101 - it will find the tversity server.&lt;/p&gt;&lt;p&gt;You are done!&lt;/p&gt;&lt;p&gt;Of course, I haven't had much chance to use it yet, so it might not stream very well, but we'll see. It follows that Windows Media Connect with WMP 10 or the beta of WMP 11 that includes it too (see &lt;a href="http://thetechnophile.blogspot.com/2006/09/netgear-mp101-windows-media-player-11.html"&gt;yesterday's post for details&lt;/a&gt;!) will also work now that I have solved the problem of sharing the media.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115892911791893813?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115892911791893813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115892911791893813&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115892911791893813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115892911791893813'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/09/netgear-mp101-and-tversity.html' title='Netgear MP101 and TVersity'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115884485421689268</id><published>2006-09-21T14:20:00.000+01:00</published><updated>2007-11-19T23:11:59.083Z</updated><title type='text'>NetGear MP101, Windows Media Player 11 beta, no dice so far.</title><content type='html'>&lt;p&gt;Updated 19/11/2007 - There's a bit more info here:&lt;br /&gt;&lt;a href="http://thetechnophile.blogspot.com/2007/11/netgear-mp101-windows-media-player-11.html"&gt;http://thetechnophile.blogspot.com/2007/11/netgear-mp101-windows-media-player-11.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;As a &lt;a href="http://www.makezine.com/" target="_blank"&gt;self-styled Maker&lt;/a&gt;, I eschew cutting edge technology in favour of the once-cutting-edge stuff that has been superseded. One such item is the &lt;a href="http://www.netgear.com/Products/Entertainment/DigitalMusicPlayers/MP101.aspx" target="_blank"&gt;Netgear MP101&lt;/a&gt;, now available from eBay for about $50 / £30.&lt;/p&gt;&lt;p&gt;Mine arrived yesterday and I spent, oh, a few hours fighting against the badly (appallingly badly) written server software that comes with it. &lt;/p&gt;&lt;p&gt;The device itself is easy to set up - as I use a MAC whitelist and I hide my SSID, I disabled those to allow it to connect.  It found my network, rebooted, connected and got an IP address. I then switched the SSID / MAC stuff back on and had another reboot while it got an IP address again, but it connected ok.&lt;/p&gt;&lt;p&gt;The MP101 requires that you have a "server" on the network running the NetGear media server software. This is a VB 6 application that serves music files from your music share to the MP101 via the network. The reason it is bad is because it requires that the music share is what NetGear call a "public share". I'm not sure what the difference between that and a share that everyone has access to is, but as a Software Engineer, I recognise a limitation caused by bad design and probably bad choice of programming language. &lt;/p&gt;&lt;p&gt;Hey, I'm a VB developer at heart, but it's a business application UI development language not best suited for this type of thing. I speak as someone who once wrote a real-time telephone exchange call record processing application in VB 4 under Windows NT, so I know about bad choice of language...&lt;/p&gt;&lt;p&gt;You see, my music is on a Windows 2003 server share. I don't run this sort of application on that server, for security reasons. I also don't allow anything that requires access to my music collection any more than read access. Someone in NetGear didn't know how to make this VB app correctly access a UNC and stream data (I'm guessing here!) and it requires rights it doesn't actually need. Okay,I  that might be wrong:&lt;/p&gt;&lt;p&gt;I have loaded the &lt;a href="http://www.microsoft.com/windows/windowsmedia/player/11/default.aspx" target="_blank"&gt;Windows Media Player 11 beta&lt;/a&gt; that includes the Windows Media Connect functionality that was previously available as a &lt;a href="http://www.microsoft.com/windows/windowsmedia/devices/wmconnect/" target="_blank"&gt;separate download&lt;/a&gt;. It seems that the problem lies in streaming the files to the MP101. The MP101 can see the WMP 11 server and connect to it. I can select music, but if I try to play it, I get an error. This seems to imply that when streaming from a network share, the server just tells the MP101 where the file is - hence the need for a "public share".&lt;/p&gt;&lt;p&gt;Anyway, I can play music that is local to the media server. My next test is to try to play local music from the media server through the MP101. If that works, I might try tweaking WMP 11 but it's likely I will download &lt;a href="http://www.tversity.com/" target="_blank"&gt;tversity server&lt;/a&gt; that claims to do the job. More soon...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115884485421689268?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115884485421689268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115884485421689268&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115884485421689268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115884485421689268'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/09/netgear-mp101-windows-media-player-11.html' title='NetGear MP101, Windows Media Player 11 beta, no dice so far.'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115827557311465138</id><published>2006-09-15T00:00:00.000+01:00</published><updated>2006-09-15T00:12:53.126+01:00</updated><title type='text'>Agile enough to bend over backwards</title><content type='html'>At what point does a development team become "agile"?&lt;br /&gt;&lt;br /&gt;I mean, if you are striving to implement an agile methodology, what are the KPI's or CSF's, the goals, targets, metrics and objectives that tell us we are agile?&lt;br /&gt;&lt;br /&gt;Well, how about this: if the number of bugs per build, both new and returned, is falling, per release cycle, or is lower for this development project as compared to similar projects using other methodologies, then that can be a good indicator.&lt;br /&gt;&lt;br /&gt;Of course, you have to compare like with like as best you can and these metrics might not always be available for your other projects. However, you can get a good view of code churn / tests passed / new bugs / returned bugs on your current project and strive to bring those bug counts down.&lt;br /&gt;&lt;br /&gt;That's why it's important to break out on a regular basis and review your processes - how can they be improved? What can be made easier, more efficient, less painful? What new processes can be brought in to help with development - or, what can be chucked away because it hinders?&lt;br /&gt;&lt;br /&gt;Agile means "it's all up for grabs!".&lt;br /&gt;&lt;br /&gt;It means "every iteration is a chance to improve the development process".&lt;br /&gt;&lt;br /&gt;If you're not taking that opportunity to review and improve, how agile are you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115827557311465138?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115827557311465138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115827557311465138&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115827557311465138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115827557311465138'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/09/agile-enough-to-bend-over-backwards.html' title='Agile enough to bend over backwards'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115827472482201461</id><published>2006-09-14T23:46:00.000+01:00</published><updated>2006-09-14T23:58:44.836+01:00</updated><title type='text'>All quiet in a Western font</title><content type='html'>(Actually, it's Verdana, not Western..)&lt;br /&gt;&lt;br /&gt;So.&lt;br /&gt;&lt;br /&gt;Chuquet.&lt;br /&gt;&lt;br /&gt;We built Chuquet release 2.&lt;br /&gt;&lt;br /&gt;We rewrote the engine, we added UI stuffage (yes, stuffage), like article management.&lt;br /&gt;&lt;br /&gt;Look at &lt;a href="http://www.chuquet.com"&gt;www.chuquet.com&lt;/a&gt; to see how it works and then you can see that you could file the articles, or stories as we call them. To be able to do that you need personalisation, so to have personalisation you need a user database and...and...tish and piffle.&lt;br /&gt;&lt;br /&gt;So we coded it, then we used it. As coders and designers, the ability to clip a story to a sort of personalised clipboard made sense.&lt;br /&gt;&lt;br /&gt;As users, it didn't make sense. It changed the interface and it meant that what you saw was what you &lt;em&gt;wanted&lt;/em&gt; to &lt;em&gt;see&lt;/em&gt;. If what you see in Chuquet is what you want to see and not what is really the actual real blogo-buzz, then a week after you blog about how good V 2 is, you'll stop trusting it.&lt;br /&gt;&lt;br /&gt;How often do we add a feature because we think it's what people want...&lt;br /&gt;Granted, in the best run projects, this never happens, well, almost never.&lt;br /&gt;Well, okay, I have added this bell that whistles... you know what I mean.&lt;br /&gt;&lt;br /&gt;Or we add a feature because we think it will add some benefit, but it doesn't.&lt;br /&gt;&lt;br /&gt;How often do we sit down and use the software we write, as users? Not often enough.&lt;br /&gt;&lt;br /&gt;Chuquet 2.1 will be out soon, without the ability to clip a story to a sort of personalised clipboard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115827472482201461?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115827472482201461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115827472482201461&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115827472482201461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115827472482201461'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/09/all-quiet-in-western-font.html' title='All quiet in a Western font'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115565278382207036</id><published>2006-08-15T15:39:00.000+01:00</published><updated>2006-08-15T15:49:07.310+01:00</updated><title type='text'>The Agile path</title><content type='html'>&lt;p&gt;About six weeks ago, I moved from my position as a Software Engineer at&amp;nbsp;a small software house, &amp;nbsp;&lt;a href="http://www.n4s.co.uk/" target="_blank"&gt;N4 Solutions&lt;/a&gt;, to a new role at &lt;a href="http://www.nationwide.co.uk/default.htm" target="_blank"&gt;Nationwide Building Society&lt;/a&gt;, Swindon, UK. &lt;/p&gt; &lt;p&gt;I am now an impressively titled "Senior Software Developer - Lead" working within the Enterprise Work Management team.&lt;/p&gt; &lt;p&gt;As it's a few years since I worked for a large organisation (Jones Lang LaSalle was the last big one) it has been a bit of a cultural revolution.&lt;/p&gt; &lt;p&gt;It's an interesting irony that although large organisations can benefit immensely from improved and more agile development processes, it is usually inherently difficult to effect process change within&amp;nbsp;large organisations.&lt;/p&gt; &lt;p&gt;So, my secondary objective here&amp;nbsp; -&amp;nbsp;&amp;nbsp;&lt;em&gt;improve agility &lt;/em&gt;- is, I am sure, going to be a real test of my own ability to follow the agile path and my ability to influence people within the organisation to realise the benefits of agile development.&lt;/p&gt; &lt;p&gt;Following an agile path for development now seems to be such a no-brainer that I have found myself lost for words at times. It can be difficult to justify a practice that you know to be agile common sense because it's a while since you thought about the reasons. &lt;/p&gt; &lt;p&gt;People who are concerned by change - or perhaps afraid of it -will say&amp;nbsp;things like &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"Why do we need this?" &lt;br&gt;"What difference will it make?" &lt;br&gt;"They're just things we've tried before with a new name"&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;It can be exasperating to explain the benefits of agile development. It is more exasperating to explain it to a non-developer. It is most exasperating to explain it to a developer who has spent so much time doing things their way that they refuse to see the benefits of working in a smarter, more agile way. I believe, however, that every developer should have a requirement to develop as efficiently as possible written into their contract. &lt;/p&gt; &lt;p&gt;In fact, I don't actually like the job&amp;nbsp;title&amp;nbsp;"Developer" because it does not imply the same level of professionalism as "Software Engineer". &lt;/p&gt; &lt;p&gt;The metaphor of "engineering" software ties in nicely with the excellent construction metaphor proposed by Steve McConnell in his bible of Software Engineering "&lt;a href="http://cc2e.com/" target="_blank"&gt;Code Complete&lt;/a&gt;" (if you haven't read it, please do. You will learn more about software engineering in the week (or in my case, 2 months!) it takes you to read than on any course!)&lt;/p&gt; &lt;p&gt;However, the EWM team here at Nationwide are a competent, motivated team who appreciate the benefits of agile development, so that is part of the battle.&lt;/p&gt; &lt;p&gt;We are now about to bring consistency to agile practices within the team, starting with coding standards and Test Driven Development. As we are using &lt;a href="http://msdn.microsoft.com/vstudio/teamsystem/products/" target="_blank"&gt;Visual Studio Team System&lt;/a&gt;, I have got a head start there too.&lt;/p&gt; &lt;p&gt;Someone in the organisation is currently reviewing agile development methodologies to see which ones we can use (which is probably not a very agile approach :-) ) but I reckon that &lt;a href="http://msdn.microsoft.com/vstudio/teamsystem/msf/msfagile/" target="_blank"&gt;MSF for Agile Development&lt;/a&gt; will be on the list, as it is embedded in &lt;a href="http://msdn.microsoft.com/vstudio/teamsystem/products/" target="_blank"&gt;VSTS&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I plan to blog this process as I go along, so check back and see how it's going!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.technorati.com/tag/agile" target="_blank" rel="tag"&gt;Technorati: Agile&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115565278382207036?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115565278382207036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115565278382207036&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115565278382207036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115565278382207036'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/08/agile-path.html' title='The Agile path'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115564817655556190</id><published>2006-08-15T14:22:00.000+01:00</published><updated>2006-08-15T14:46:03.876+01:00</updated><title type='text'>Goodbye DWLGINA2.DLL</title><content type='html'>&lt;p&gt;My next door neighbour bought the display model of an HP PC from the British "Comet" electrical goods supplier.&lt;/p&gt; &lt;p&gt;This PC had a screen saver installed that showcased Comet products. She asked me to have a look at it as she could not log on with ctrl-alt-del and once the screen saver loaded, she could not get out of it.&lt;/p&gt; &lt;p&gt;Well, I uninstalled the screen saver but couldn't solve the ctrl-alt-del problem. Also, when I tried to turn on fast user switching, I got a message saying that a recently installed program was preventing me enabling it and it gave DWLGINA2.DLL as the possible culprit. Aha!&lt;/p&gt; &lt;p&gt;After poking around in MSDN, I found &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/gina.asp" target="_blank"&gt;an article about GINA&lt;/a&gt; - Graphical Identification and Authentication. &lt;/p&gt; &lt;p&gt;The solution was to find the key GINADLL in the registry at HEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon and delete it (delete the key, don't just blank out the value!). &lt;a href="http://hacks.oreilly.com/pub/h/658" target="_blank"&gt;Find out more about the registry and how to edit it&lt;/a&gt; &lt;font color="#ff0000"&gt;- &lt;/font&gt;&lt;a href="#warning"&gt;&lt;font color="#ff0000"&gt;but read the warning below if this is new to you!&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This causes Windows XP to load the default Microsoft start-up shell, MSGINA.DLL from system32 and the PC works as normal.&lt;/p&gt; &lt;p&gt;DWLGINA2.DLL is a "shell" that loads the normal windows shell, but catches your ctrl-alt-del key presses, thereby suppressing ctrl-alt-del.&lt;/p&gt; &lt;p&gt;&lt;a name="warning"&gt;&lt;font color="#ff0000"&gt;Warning&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;: If you do decide to edit the registry, only remove the key completely. Do not point it to anything else. If windows XP cannot find the library pointed to by GINADL it WILL NOT START and you will need to recover it. Note that your GINA might have been legitimately redirected! (It might also be a trojan - but I'm not going in to that here - &lt;/font&gt;&lt;font color="#8080ff"&gt;&lt;a href="http://www.f-secure.com/" target="_blank"&gt;download F-Secure&lt;/a&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt; !)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;More information:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/gina.asp" target="_blank"&gt;The purpose of a GINA DLL is to provide customizable user identification and authentication procedures.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://windowslivewriter.spaces.live.com/" target="_blank"&gt;Windows Live Writer is neat&lt;/a&gt;, by the way !&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115564817655556190?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115564817655556190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115564817655556190&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115564817655556190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115564817655556190'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/08/goodbye-dwlgina2dll.html' title='Goodbye DWLGINA2.DLL'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115559651904809166</id><published>2006-08-15T00:01:00.000+01:00</published><updated>2006-08-15T00:09:37.513+01:00</updated><title type='text'>Take that, and that...</title><content type='html'>&lt;p&gt;So, Laurence has, I admit, posted &lt;a href="http://laurencetimms.com/2006/08/windows-live-writer-launched.html" target="_blank"&gt;a really really lovely first post&lt;/a&gt; with Windows Live Writer. He also &lt;a href="http://laurencetimms.com/2006/08/blogging-with-windows-live-writer-1.html" target="_blank"&gt;shows you how to add a map and shows you his office&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;You might notice that his office is quite, well, small.&amp;nbsp; &lt;a href="http://local.live.com/default.aspx?v=2&amp;amp;cp=51.54005~-1.776634&amp;amp;lvl=18&amp;amp;style=h&amp;amp;scene=4344424" target="_blank"&gt;Mine is much bigger&lt;/a&gt;.&amp;nbsp; And it &lt;em&gt;also&lt;/em&gt; has a lake.&lt;/p&gt; &lt;p&gt;However, WLW won't let me publish a map directly into blogger, so there's something Laurence didn't tell ya... ;-)&lt;/p&gt; &lt;p&gt;Interestingly, the photographs used to create the "birds eye" view in Live Maps seems to have been taken a lot later than the aerial view - the Nationwide building in Swindon, where I work, now has a glass atrium which is visible to the left of the birds eye view but only partially constructed in the aerial view - &lt;a href="http://local.live.com/default.aspx?v=2&amp;amp;cp=51.54005~-1.776634&amp;amp;lvl=18&amp;amp;style=h&amp;amp;scene=4344424"&gt;have a look.&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115559651904809166?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115559651904809166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115559651904809166&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115559651904809166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115559651904809166'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/08/take-that-and-that.html' title='Take that, and that...'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115555887782405063</id><published>2006-08-14T13:34:00.000+01:00</published><updated>2006-08-16T11:38:35.803+01:00</updated><title type='text'>Windows Live Writer</title><content type='html'>&lt;p&gt;In my usual attempt to be on the bleeding edge of technology, I am posting this using Windows Live Write (Beta). If it works, I'll be impressed...[edited]&lt;/p&gt; &lt;p&gt;Yes, it is working very well - there are a few glitches. Here's one, if you click "open" you can also delete posts from the "open" dialogue. If you delete a post, removes the one below from the list, but it has actually removed the correct one from your blog - don't be fooled.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115555887782405063?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115555887782405063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115555887782405063&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115555887782405063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115555887782405063'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/08/windows-live-writer.html' title='Windows Live Writer'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15675557.post-115231419562090196</id><published>2006-07-08T00:07:00.000+01:00</published><updated>2006-07-08T00:33:09.246+01:00</updated><title type='text'>Curbing my enthusiasm</title><content type='html'>Often, a real-world event happens that makes me really want to blog and get my voice out there. When I get the blogging urge, I always imagine that my blog is going to be scintillating and incisive. Usually, the finished product is not, because a lack of time prevents me from crafting a lovely piece of blogery (is that a word?)&lt;br /&gt;Recently, it occured to me that my tendency to plan a coriuscating blog entry and the way that I write it, is like the way that I plan some super new code and write that.&lt;br /&gt;I have to fight against myself to not add the &lt;a href="http://xp.c2.com/YouArentGonnaNeedIt.html"&gt;YAGNI &lt;/a&gt;features in some bit of code that I am oh-so-sure I am going to need, but I end up wasting time on.&lt;br /&gt;Recently, I sat down to write a Quiz game manager object and after creating the objects, found that all sorts of features had appeared in the object skeleton before the tests were started. This is not good practice...his holiness, Eric Gunnerson, has &lt;a href="http://blogs.msdn.com/ericgu/archive/2006/06/26/647877.aspx"&gt;something to say about this.&lt;/a&gt;&lt;br /&gt;So I sat down and I blogged my intention and guess what? It worked.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://muradjames.blogspot.com/2006/07/politician-billionaire-dome-and-casino.html"&gt;The politician, the billionaire, the Dome and the Casino--&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.technorati.com/tag/agile"&gt;Technorati: agile&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.technorati.com/tag/agile"&gt;Technorati: YagNi&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15675557-115231419562090196?l=thetechnophile.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thetechnophile.blogspot.com/feeds/115231419562090196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=15675557&amp;postID=115231419562090196&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115231419562090196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15675557/posts/default/115231419562090196'/><link rel='alternate' type='text/html' href='http://thetechnophile.blogspot.com/2006/07/curbing-my-enthusiasm.html' title='Curbing my enthusiasm'/><author><name>MuradJ</name><uri>http://www.blogger.com/profile/11311105464694703875</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16146598098413584314'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>